Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision b8e8bc08

Von Moritz Bunkus vor mehr als 11 Jahren hinzugefügt

  • ID b8e8bc08774f46903ca5a118afba3906a6d2c2e6
  • Vorgänger 156d4fa2
  • Nachfolger ade02f1e

SL::DB::PaymentTerm::calc_date: Berechnung von Fälligkeitsdatum anhand von terms_netto/terms_skonto

Unterschiede anzeigen:

SL/DB/PaymentTerm.pm
19 19
  return @errors;
20 20
}
21 21

  
22
sub calc_date {
23
  my ($self, %params) = @_;
24

  
25
  my $reference_date  = $params{reference_date} || DateTime->today_local;
26
  $reference_date     = DateTime->from_kivitendo($reference_date) unless ref($reference_date) eq 'DateTime';
27

  
28
  my $terms           = ($params{terms} // 'net') eq 'discount' ? 'terms_skonto' : 'terms_netto';
29
  my $date            = $reference_date->add(days => $self->$terms);
30

  
31
  my $dow             = $date->day_of_week;
32
  $date               = $date->add(days => 8 - $dow) if $dow > 5;
33

  
34
  return $date;
35
}
36

  
22 37
1;
38
__END__
39

  
40
=pod
41

  
42
=encoding utf8
43

  
44
=head1 NAME
45

  
46
SL::DB::PaymentTerm - Rose model for the payment_terms table
47

  
48
=head1 SYNOPSIS
49

  
50
  my $terms             = SL::DB::PaymentTerm->new(id => $::form->{payment_id})->load;
51
  my $due_date_net      = $erms->calc_date(terms => 'net');      # uses terms_netto
52
  my $due_date_discount = $erms->calc_date(terms => 'discount'); # uses terms_skonto
53

  
54
=head1 FUNCTIONS
55

  
56
=over 4
57

  
58
=item C<calc_date [%params]>
59

  
60
Calculates and returns a due date as an instance of L<DateTime> by
61
adding one of C<$self>'s terms fields. Note that the resulting date
62
will be the following Monday if the result falls on a weekend.
63

  
64
C<%params> can contain the following parameters:
65

  
66
=over 4
67

  
68
=item C<reference_date>
69

  
70
The reference date from which the due date will be calculated. Can be
71
either an instance of L<DateTime> or a scalar in which case the scalar
72
is parsed via L<DateTime/from_kivitendo>.
73

  
74
Defaults to the current date if unset.
75

  
76
=item C<terms>
77

  
78
Can be either C<net> or C<discount>. For C<net> the number of days to
79
add to the reference date are C<$self-E<gt>terms_netto>. For
80
C<discount> C<$self-E<gt>terms_skonto> is used.
81

  
82
Defaults to C<net> if unset.
83

  
84
=back
85

  
86
=item C<validate>
87

  
88
Validates before saving and returns an array of human-readable error
89
messages in case of an error.
90

  
91
=back
92

  
93
=head1 BUGS
94

  
95
Nothing here yet.
96

  
97
=head1 AUTHOR
98

  
99
Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>
100

  
101
=cut

Auch abrufbar als: Unified diff