Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 15b8d4bb

Von Jan Büren vor mehr als 4 Jahren hinzugefügt

  • ID 15b8d4bbc30aaed01468cc32044f6769130addd6
  • Vorgänger 99382a64
  • Nachfolger fbc3a76f

SetNumberRange: Background-Job um Jahreszahlen im Nummernkreis zu erhöhen

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

Unterschiede anzeigen:

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;

Auch abrufbar als: Unified diff