SetNumberRange: Background-Job um Jahreszahlen im Nummernkreis zu erhöhen
authorJan Büren <jan@kivitendo.de>
Thu, 31 Oct 2019 13:32:03 +0000 (14:32 +0100)
committerJan Büren <jan@kivitendo.de>
Thu, 14 Nov 2019 09:34:02 +0000 (10:34 +0100)
Nimmt die vierstellige Zahl des nächsten Jahres und multipliziert
diese mit 1 oder einem anderen Faktor. Präfixe und Länge des
Nummernkreis bleibt erhalten. Bspw.:

Letzte Rechnungsnummer:
RE201900009 --> RE202000000
Folgende Werte:
multiplier: 100000
digits_year: 4

multiplier: beliebiger Wert (empfohlen: 1, 10, 100, 1000, default 1)
digits_year: 4 || 2 (Falls keine 2 gesetzt ist, wird 4 verwendet)
          2019 || 19

SL/BackgroundJob/SetNumberRange.pm [new file with mode: 0644]

diff --git a/SL/BackgroundJob/SetNumberRange.pm b/SL/BackgroundJob/SetNumberRange.pm
new file mode 100644 (file)
index 0000000..e317730
--- /dev/null
@@ -0,0 +1,36 @@
+package SL::BackgroundJob::SetNumberRange;
+
+use strict;
+
+use parent qw(SL::BackgroundJob::Base);
+
+use SL::PrefixedNumber;
+
+use DateTime::Format::Strptime;
+
+sub create_job {
+  $_[0]->create_standard_job('59 23 31 12 *'); # one minute before new year
+}
+
+
+sub run {
+  my ($self, $db_obj) = @_;
+  my $data       = $db_obj->data_as_hash;
+
+  my $next_year  = DateTime->today_local->truncate(to => 'year')->add(years => 1)->year();
+  $next_year     = ($data->{digits_year} == 2) ? substr($next_year, 2, 2) : $next_year;
+  my $multiplier = $data->{multiplier} || 1;
+
+  my $defaults   = SL::DB::Default->get;
+
+  foreach (qw(invnumber cnnumber sonumber ponumber sqnumber rfqnumber sdonumber pdonumber)) {
+    my $current_number = SL::PrefixedNumber->new(number => $defaults->{$_});
+    $current_number->set_to($next_year * $multiplier);
+    $defaults->{$_} = $current_number->get_current;
+  }
+  $defaults->save() || die "Could not change number ranges";
+
+  return exists $data->{result} ? $data->{result} : 1;
+}
+
+1;