Wiederkehrende Rechnungen, um neue Periode 'einmalig' erweitert.
[kivitendo-erp.git] / SL / BackgroundJob / CreatePeriodicInvoices.pm
index 55c53aa..1b57cbe 100644 (file)
@@ -36,7 +36,7 @@ sub run {
     _log_msg("Periodic invoice configuration ID " . $config->id . " extended through " . $new_end_date->strftime('%d.%m.%Y') . "\n") if $new_end_date;
   }
 
-  my (@new_invoices, @invoices_to_print, @invoices_to_email);
+  my (@new_invoices, @invoices_to_print, @invoices_to_email, @disabled_orders);
 
   _log_msg("Number of configs: " . scalar(@{ $configs}));
 
@@ -63,19 +63,23 @@ sub run {
 
       # last;
     }
+    # disable one time configs (periodicity is only one time).
+    my $inactive_ordnumber = $config->disable_one_time_config;
+    push @disabled_orders, $inactive_ordnumber if $inactive_ordnumber;
   }
 
-  $self->_print_invoice($_) for @invoices_to_print;
-  $self->_email_invoice($_) for @invoices_to_email;
+  foreach my $inv ( @invoices_to_print ) { $self->_print_invoice($inv); }
+  foreach my $inv ( @invoices_to_email ) { $self->_email_invoice($inv); }
 
   $self->_send_summary_email(
     [ map { $_->{invoice} } @new_invoices      ],
     [ map { $_->{invoice} } @invoices_to_print ],
     [ map { $_->{invoice} } @invoices_to_email ],
+                             \@disabled_orders  ,
   );
 
   if (@{ $self->{job_errors} }) {
-    my $msg = @{ $self->{job_errors} };
+    my $msg = join "\n", @{ $self->{job_errors} };
     _log_msg("Errors: $msg");
     die $msg;
   }
@@ -92,7 +96,7 @@ sub _log_msg {
 sub _generate_time_period_variables {
   my $config            = shift;
   my $period_start_date = shift;
-  my $period_end_date   = $period_start_date->clone->truncate(to => 'month')->add(months => $config->get_billing_period_length)->subtract(days => 1);
+  my $period_end_date   = $period_start_date->clone->add(months => $config->get_billing_period_length)->subtract(days => 1);
 
   my @month_names       = ('',
                            $::locale->text('January'), $::locale->text('February'), $::locale->text('March'),     $::locale->text('April'),   $::locale->text('May'),      $::locale->text('June'),
@@ -115,8 +119,8 @@ sub _generate_time_period_variables {
     previous_year       => [ $period_start_date->clone->truncate(to => 'year')->subtract(years => 1),   sub { $_[0]->year } ],
     next_year           => [ $period_start_date->clone->truncate(to => 'year')->add(     years => 1),   sub { $_[0]->year } ],
 
-    period_start_date   => [ $period_start_date->clone->truncate(to => 'month'), sub { $::locale->format_date(\%::myconfig, $_[0]) } ],
-    period_end_date     => [ $period_end_date,                                   sub { $::locale->format_date(\%::myconfig, $_[0]) } ],
+    period_start_date   => [ $period_start_date->clone, sub { $::locale->format_date(\%::myconfig, $_[0]) } ],
+    period_end_date     => [ $period_end_date,          sub { $::locale->format_date(\%::myconfig, $_[0]) } ],
   };
 
   return $vars;
@@ -205,7 +209,7 @@ sub _create_periodic_invoice {
 
   my $order   = $config->order;
   my $invoice;
-  if (!$self->{db_obj}->db->do_transaction(sub {
+  if (!$self->{db_obj}->db->with_transaction(sub {
     1;                          # make Emacs happy
 
     $invoice = SL::DB::Invoice->new_from($order);
@@ -254,6 +258,8 @@ sub _create_periodic_invoice {
     _log_msg("_create_invoice created for period start date $period_start_date id " . $invoice->id . " number " . $invoice->invnumber . " netamount " . $invoice->netamount . " amount " . $invoice->amount);
 
     # die $invoice->transaction_description;
+
+    1;
   })) {
     $::lxdebug->message(LXDebug->WARN(), "_create_invoice failed: " . join("\n", (split(/\n/, $self->{db_obj}->db->error))[0..2]));
     return undef;
@@ -273,8 +279,8 @@ sub _calculate_dates {
 }
 
 sub _send_summary_email {
-  my ($self, $posted_invoices, $printed_invoices, $emailed_invoices) = @_;
-
+  my ($self, $posted_invoices, $printed_invoices, $emailed_invoices,
+      $disabled_orders) = @_;
   my %config = %::lx_office_conf;
 
   return if !$config{periodic_invoices} || !$config{periodic_invoices}->{send_email_to} || !scalar @{ $posted_invoices };
@@ -296,7 +302,8 @@ sub _send_summary_email {
   my $filename       = $email_template || ( (SL::DB::Default->get->templates || "templates/webpages") . "/oe/periodic_invoices_email.txt" );
   my %params         = ( POSTED_INVOICES  => $posted_invoices,
                          PRINTED_INVOICES => $printed_invoices,
-                         EMAILED_INVOICES => $emailed_invoices );
+                         EMAILED_INVOICES => $emailed_invoices,
+                         DISABLED_ORDERS  => $disabled_orders );
 
   my $output;
   $template->process($filename, \%params, \$output);