SetNumberRange: Background-Job um Jahreszahlen im Nummernkreis zu erhöhen
[kivitendo-erp.git] / SL / BackgroundJob / SetNumberRange.pm
1 package SL::BackgroundJob::SetNumberRange;
2
3 use strict;
4
5 use parent qw(SL::BackgroundJob::Base);
6
7 use SL::PrefixedNumber;
8
9 use DateTime::Format::Strptime;
10
11 sub create_job {
12   $_[0]->create_standard_job('59 23 31 12 *'); # one minute before new year
13 }
14
15
16 sub run {
17   my ($self, $db_obj) = @_;
18   my $data       = $db_obj->data_as_hash;
19
20   my $next_year  = DateTime->today_local->truncate(to => 'year')->add(years => 1)->year();
21   $next_year     = ($data->{digits_year} == 2) ? substr($next_year, 2, 2) : $next_year;
22   my $multiplier = $data->{multiplier} || 1;
23
24   my $defaults   = SL::DB::Default->get;
25
26   foreach (qw(invnumber cnnumber sonumber ponumber sqnumber rfqnumber sdonumber pdonumber)) {
27     my $current_number = SL::PrefixedNumber->new(number => $defaults->{$_});
28     $current_number->set_to($next_year * $multiplier);
29     $defaults->{$_} = $current_number->get_current;
30   }
31   $defaults->save() || die "Could not change number ranges";
32
33   return exists $data->{result} ? $data->{result} : 1;
34 }
35
36 1;