use SL::DB::DeliveryOrder;
use SL::DB::Order;
use SL::DB::Printer;
+use SL::Helper::MassPrintCreatePDF qw(:all);
use SL::Helper::CreatePDF qw(:all);
use SL::Helper::Flash;
use SL::Locale::String;
use SL::SessionFile;
use SL::System::TaskServer;
-
use Rose::Object::MakeMethods::Generic
(
- 'scalar --get_set_init' => [ qw(invoice_models invoice_ids sales_delivery_order_models printers default_printer_id js) ],
+ 'scalar --get_set_init' => [ qw(invoice_models invoice_ids sales_delivery_order_models printers default_printer_id today) ],
);
__PACKAGE__->run_before('setup');
}
my $db = SL::DB::Invoice->new->db;
+ my @invoices;
- if (!$db->do_transaction(sub {
- my @invoices;
+ if (!$db->with_transaction(sub {
foreach my $id (@sales_delivery_order_ids) {
my $delivery_order = SL::DB::DeliveryOrder->new(id => $id)->load;
push @invoices, $invoice;
}
- my $key = sprintf('%d-%d', Time::HiRes::gettimeofday());
- $::auth->set_session_value("MassInvoiceCreatePrint::ids-${key}" => [ map { $_->id } @invoices ]);
-
- flash_later('info', t8('The invoices have been created. They\'re pre-selected below.'));
- $self->redirect_to(action => 'list_invoices', ids => $key);
-
1;
})) {
$::lxdebug->message(LXDebug::WARN(), "Error: " . $db->error);
$::form->error($db->error);
}
+
+ my $key = sprintf('%d-%d', Time::HiRes::gettimeofday());
+ $::auth->set_session_value("MassInvoiceCreatePrint::ids-${key}" => [ map { $_->id } @invoices ]);
+
+ flash_later('info', t8('The invoices have been created. They\'re pre-selected below.'));
+ $self->redirect_to(action => 'list_invoices', ids => $key);
}
sub action_list_invoices {
$self->sales_delivery_order_models->disable_plugin('paginated');
- my @records = @{ $self->sales_delivery_order_models->get };
+ my @records = @{ $self->sales_delivery_order_models->get };
my $num = min(scalar(@records), $::form->{number_of_invoices} // scalar(@records));
my $job = SL::DB::BackgroundJob->new(
)->set_data(
record_ids => [ map { $_->id } @records[0..$num - 1] ],
printer_id => $::form->{printer_id},
+ copy_printer_id => $::form->{copy_printer_id},
+ bothsided => ($::form->{bothsided}?1:0),
+ transdate => $::form->{transdate},
status => SL::BackgroundJob::MassRecordCreationAndPrinting->WAITING_FOR_EXECUTION(),
num_created => 0,
num_printed => 0,
invoice_ids => [ ],
conversion_errors => [ ],
print_errors => [ ],
+ session_id => $::auth->get_session_id,
)->update_next_run_at;
$sfile->fh->close;
my $type = 'Invoices';
- my $file_name = t8($type) . '-' . DateTime->today_local->strftime('%Y%m%d%H%M%S') . '.pdf';
+ my $file_name = t8($type) . '-' . DateTime->now_local->strftime('%Y%m%d%H%M%S') . '.pdf';
$file_name =~ s{[^\w\.]+}{_}g;
return $self->send_file(
# filters
#
-sub init_js { SL::ClientJS->new(controller => $_[0]) }
sub init_printers { SL::DB::Manager::Printer->get_all_sorted }
+#sub init_att { require SL::Controller::Attachments; SL::Controller::Attachments->new() }
sub init_invoice_ids { [] }
+sub init_today { DateTime->today_local }
sub init_sales_delivery_order_models {
my ($self) = @_;
query => [
'!customer_id' => undef,
or => [ closed => undef, closed => 0 ],
- or => [ delivered => undef, delivered => 0 ],
],
);
}
# helpers
#
-sub create_pdfs {
- my ($self, %params) = @_;
-
- my @pdf_file_names;
- foreach my $invoice (@{ $params{invoices} }) {
- my %create_params = (
- template => $self->find_template(name => 'invoice', printer_id => $params{printer_id}),
- variables => Form->new(''),
- return => 'file_name',
- );
-
- $create_params{variables}->{$_} = $params{variables}->{$_} for keys %{ $params{variables} };
-
- $invoice->flatten_to_form($create_params{variables}, format_amounts => 1);
- $create_params{variables}->prepare_for_printing;
-
- push @pdf_file_names, $self->create_pdf(%create_params);
- }
-
- return @pdf_file_names;
-}
sub download_or_print_documents {
my ($self, %params) = @_;
eval {
my %pdf_params = (
- invoices => $params{invoices},
- printer_id => $params{printer_id},
+ documents => $params{invoices},
variables => {
type => 'invoice',
formname => 'invoice',
format => 'pdf',
media => $params{printer_id} ? 'printer' : 'file',
+ printer_id => $params{printer_id},
});
@pdf_file_names = $self->create_pdfs(%pdf_params);
unlink @pdf_file_names;
if (!$params{printer_id}) {
- my $file_name = t8("Invoices") . '-' . DateTime->today_local->strftime('%Y%m%d%H%M%S') . '.pdf';
+ my $file_name = t8("Invoices") . '-' . DateTime->now_local->strftime('%Y%m%d%H%M%S') . '.pdf';
$file_name =~ s{[^\w\.]+}{_}g;
return $self->send_file(
}
my $printer = SL::DB::Printer->new(id => $params{printer_id})->load;
- my $command = SL::Template::create(type => 'ShellCommand', form => Form->new(''))->parse($printer->printer_command);
-
- open my $out, '|-', $command or die $!;
- binmode $out;
- print $out $merged_pdf;
- close $out;
+ $printer->print_document(content => $merged_pdf);
flash_later('info', t8('The documents have been sent to the printer \'#1\'.', $printer->printer_description));
return $self->redirect_to(action => 'list_invoices', printer_id => $params{printer_id});
my @filters = (
[ $filter->{customer}{"name:substr::ilike"}, t8('Customer') ],
- [ $filter->{"transdate:date::ge"}, t8('Delivery Date') . " " . t8('From Date') ],
- [ $filter->{"transdate:date::le"}, t8('Delivery Date') . " " . t8('To Date') ],
+ [ $filter->{"transdate:date::ge"}, t8('Transdate') . " " . t8('From Date') ],
+ [ $filter->{"transdate:date::le"}, t8('Transdate') . " " . t8('To Date') ],
);
for (@filters) {
background job existed, therefore if anything goes boom take a look at the single steps done via gui
in this controller and after that take a deeper look at the MassRecordCreationAndPrinting job.
-
=head1 FUNCTIONS
=over 2
If the above is done (did I already said: boring linear?). Documents will
be either printed or downloaded.
-=item C<init_js>
-
-Inits js/kivi.MassInvoiceCreatePrint;
-
=item C<init_printers>
Gets all printer commands
Gets a list of (empty) invoice ids
+=item C<init_today>
+
+Gets the current day. Currently used in custom code.
+Has to be initialised (get_set_init) and can be used as default for
+a date tag like C<[% L.date_tag("transdate", SELF.today, id=transdate) %]>.
+
=item C<init_sales_delivery_order_models>
Calls _init_sales_delivery_order_models with a param
=item C<init_default_printer_id>
-Gets the default printer for sales_invoices. Maybe this function is not used, but
-might be useful in the next version (working in client project).
+Gets the default printer for sales_invoices. Currently this function is not called, but
+might be useful in the next version.Calling template code and Controller already expect a default:
+C<L.select_tag("", printers, title_key="description", default=SELF.default_printer_id, id="cpa_printer_id") %]>
=item C<setup>
was taken from one client project (mosu) with some extra (maybe not standard compliant) customized
stuff (using cvars for extra filters and a very compressed Controller for linking (ODSalesOrder.pm)).
-Filtering needs to be extended for Delivery Order Number (Natural Sort).
-
-A second printer (copy) needs to be implemented.
-
-Both todos are marked in the template code.
-
=head1 AUTHOR
Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>
Jan Büren E<lt>jan@kivitendo-premium.deE<gt>
+
=cut