]> wagnertech.de Git - kivitendo-erp.git/commitdiff
Wiederkehrende Rechnungen, um neue Periode 'einmalig' erweitert.
authorJan Büren <jan@kivitendo-premium.de>
Sat, 21 Jan 2017 13:20:18 +0000 (14:20 +0100)
committerJan Büren <jan@kivitendo-premium.de>
Sat, 21 Jan 2017 13:20:18 +0000 (14:20 +0100)
Wiederkehrenden Rechnungen die aus einem Auftrag automatisch generiert
werden können jetzt die Periode 'einmalig' (engl. 'one time') mit dem
Zeitwert 0 haben.
Falls diese Periode angewählt wird, wird die Konfiguration des Auftrags
nach Erzeugen der einmaligen Rechnung auf inaktiv gesetzt (s.a.
 perldoc SL/DB/PeriodicInvoicesConfigs.pm).
Der Empfänger der Rechnungslauf-Mail bekommt in diesem Fall zusätzlich
die Auftragsnummer, bei welchem die wiederkehrenden Rechnungen deaktiviert
wurden mitgeteilt.
Zusätzlich ist diese Benachrichtigung per Mail erweitert, sodass jetzt
auch eine Liste der versandten Rechnungen per E-Mail mitgeteilt wird.

SL/BackgroundJob/CreatePeriodicInvoices.pm
SL/DB/PeriodicInvoicesConfig.pm
sql/Pg-upgrade2/periodic_invoices_order_value_periodicity2.sql [new file with mode: 0644]
templates/webpages/oe/edit_periodic_invoices_config.html
templates/webpages/oe/periodic_invoices_email.txt

index 490f21ea37cd0a823c551ebcadc141e8d23c4e39..1b57cbeaf0499f5ea3001bc7c1cf6046de7fb647 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,6 +63,9 @@ 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;
   }
 
   foreach my $inv ( @invoices_to_print ) { $self->_print_invoice($inv); }
@@ -72,6 +75,7 @@ sub run {
     [ map { $_->{invoice} } @new_invoices      ],
     [ map { $_->{invoice} } @invoices_to_print ],
     [ map { $_->{invoice} } @invoices_to_email ],
+                             \@disabled_orders  ,
   );
 
   if (@{ $self->{job_errors} }) {
@@ -275,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 };
@@ -298,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);
index 0d66085650e65de1fc16f521b56b109a84bf0695..14fa5786a59ae59669378e3e1f5043f6dee70648 100644 (file)
@@ -11,7 +11,7 @@ __PACKAGE__->meta->initialize;
 # Creates get_all, get_all_count, get_all_iterator, delete_all and update_all.
 __PACKAGE__->meta->make_manager_class;
 
-our %PERIOD_LENGTHS             = ( m => 1, q => 3, b => 6, y => 12 );
+our %PERIOD_LENGTHS             = ( o => 0, m => 1, q => 3, b => 6, y => 12 );
 our %ORDER_VALUE_PERIOD_LENGTHS = ( %PERIOD_LENGTHS, 2 => 24, 3 => 36, 4 => 48, 5 => 60 );
 our @PERIODICITIES              = keys %PERIOD_LENGTHS;
 our @ORDER_VALUE_PERIODICITIES  = keys %ORDER_VALUE_PERIOD_LENGTHS;
@@ -128,6 +128,20 @@ sub is_last_bill_date_in_order_value_cycle {
   return $date_itr == $next_billing_date;
 }
 
+sub disable_one_time_config {
+  my $self = shift;
+
+  _log_msg("check one time for " . $self->id . "\n");
+
+  # A periodicity of one time was set. Deactivate this config now.
+  if ($self->periodicity eq 'o') {
+    _log_msg("setting inactive\n");
+    $self->active(0);
+    $self->save;
+    return $self->order->ordnumber;
+  }
+  return undef;
+}
 1;
 __END__
 
@@ -235,6 +249,12 @@ date given by the C<date> parameter plus the billing period length
 equals one of those dates then the given date is indeed the date of
 the last invoice in that particular order value cycle.
 
+=item C<sub disable_one_time_config>
+
+Sets the state of the periodic_invoices_configs to inactive
+(active => false) if the periodicity is <Co> (one time).
+Returns undef if the periodicity is not 'one time' otherwise the
+order number of the deactivated periodic order.
 =back
 
 =head1 BUGS
diff --git a/sql/Pg-upgrade2/periodic_invoices_order_value_periodicity2.sql b/sql/Pg-upgrade2/periodic_invoices_order_value_periodicity2.sql
new file mode 100644 (file)
index 0000000..6fd38c0
--- /dev/null
@@ -0,0 +1,11 @@
+-- @tag: periodic_invoices_order_value_periodicity2
+-- @description:periodic_invoices_configs_valid_periodicity Wiederkehrende Rechnungen: Einstellung für Periode, auf die sich der Auftragswert bezieht
+-- @depends: release_3_4_1 periodic_invoices_order_value_periodicity
+
+-- Spalte »periodicity«: Erweiterung um Periode o (one time). Einmalige Ausführung
+ALTER TABLE periodic_invoices_configs
+DROP CONSTRAINT periodic_invoices_configs_valid_periodicity;
+
+ALTER TABLE periodic_invoices_configs
+ADD CONSTRAINT periodic_invoices_configs_valid_periodicity
+CHECK (periodicity IN ('o', 'm', 'q', 'b', 'y'));
index 793d21b7612a1907b34610557423c743af0cdfb0..ebe5985bd7f5e6e324311335cc0b79fa889c1f98 100644 (file)
@@ -23,7 +23,7 @@
     <tr>
      <th align="right" valign="top">[%- LxERP.t8('Billing Periodicity') %]</th>
      <td valign="top">
-      [% L.select_tag("periodicity", [ [ "m", LxERP.t8("monthly") ], [ "q", LxERP.t8("every third month") ], [ "b", LxERP.t8("semiannually") ], [ "y", LxERP.t8("yearly") ] ], default=periodicity, style=style) %]
+      [% L.select_tag("periodicity", [ [ "o", LxERP.t8("one time") ], [ "m", LxERP.t8("monthly") ], [ "q", LxERP.t8("every third month") ], [ "b", LxERP.t8("semiannually") ], [ "y", LxERP.t8("yearly") ] ], default=periodicity, style=style) %]
      </td>
     </tr>
 
index 15d6039a8ab0359372ff91586ab46041006e3621..e5fa61f2933c4d0b88d9f360f7f9d65a814ea8a0 100644 (file)
@@ -9,3 +9,15 @@ Davon wurden die folgenden Rechnungen automatisch ausgedruckt:
 
 [% FOREACH inv = PRINTED_INVOICES %][% inv.invnumber %] [% END %]
 [%- END %]
+
+[% IF EMAILED_INVOICES.size -%]
+Davon wurden die folgenden Rechnungen automatisch per E-Mail versand:
+
+[% FOREACH inv = EMAILED_INVOICES %][% inv.invnumber %] [% END %]
+[%- END %]
+
+[% IF DISABLED_ORDERS.size -%]
+Bei folgenden Auftragsnummern, wurde die Konfiguration auf inaktiv (Periodenwahl 'einmalig') gesetzt.
+
+[% FOREACH disabled_order = DISABLED_ORDERS %][% disabled_order %] [% END %]
+[%- END %]