From 3f24ab6bd54cf3c96f3659dbe499185f7a00c0bf Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bernd=20Ble=C3=9Fmann?= Date: Fri, 6 Nov 2015 11:40:32 +0100 Subject: [PATCH] =?utf8?q?Berechnung=20des=20n=C3=A4chsten=20Arbeitstages?= =?utf8?q?=20aus=20oe.pl=20und=20OE.pm=20in=20DateTime-Helper=20=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit … verschoben, damit der Code nicht doppelt in OE.pm und oe.pl ist und auch von woanders verwendet werden kann. --- SL/Helper/DateTime.pm | 27 +++++++++++++++++++++++++++ SL/OE.pm | 9 ++------- bin/mozilla/oe.pl | 9 ++------- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/SL/Helper/DateTime.pm b/SL/Helper/DateTime.pm index 547c4b94b..831e30185 100644 --- a/SL/Helper/DateTime.pm +++ b/SL/Helper/DateTime.pm @@ -82,6 +82,18 @@ sub end_of_month { return $self->truncate(to => 'month')->add(months => 1)->subtract(days => 1); } +sub next_workday { + my ($self, %params) = @_; + + my $extra_days = $params{extra_days} // 1; + $self->add(days => $extra_days); + + my $day_of_week = $self->day_of_week; + $self->add(days => (8 - $day_of_week)) if $day_of_week >= 6; + + return $self; +} + 1; __END__ @@ -131,6 +143,21 @@ The legacy name C is still supported. Sets the object to the last day of object's month at midnight. Returns the object itself. +=item C + +Sets the object to the next workday. The recognized parameter is: + +=over 2 + +=item * C - optional: If C is given, then +that amount of days is added to the objects date and if the resulting +date is not a workday, the object is set to the next workday. +Defaults to 1. + +=back + +Returns the object itself. + =back =head1 AUTHOR diff --git a/SL/OE.pm b/SL/OE.pm index 36cbcd1b7..3bb645882 100644 --- a/SL/OE.pm +++ b/SL/OE.pm @@ -876,14 +876,9 @@ sub retrieve { $form->{useasnew} = 1 if $is_collective_order == 1; if (!$form->{id}) { - my $extra_days = $form->{type} eq 'sales_quotation' ? $::instance_conf->get_reqdate_interval : 1; - my $next_workday = DateTime->today_local->add(days => $extra_days); - my $day_of_week = $next_workday->day_of_week; - - $next_workday->add(days => (8 - $day_of_week)) if $day_of_week >= 6; - + my $extra_days = $form->{type} eq 'sales_quotation' ? $::instance_conf->get_reqdate_interval : 1; + $form->{reqdate} = DateTime->today_local->next_workday(extra_days => $extra_days)->to_kivitendo; $form->{transdate} = DateTime->today_local->to_kivitendo; - $form->{reqdate} = $next_workday->to_kivitendo; } # get default accounts diff --git a/bin/mozilla/oe.pl b/bin/mozilla/oe.pl index ea2cffadf..7b3318309 100644 --- a/bin/mozilla/oe.pl +++ b/bin/mozilla/oe.pl @@ -1667,14 +1667,9 @@ sub save_as_new { if ( $form->{reqdate} && $form->{id} ) { my $saved_order = OE->retrieve_simple(id => $form->{id}); if ( $saved_order && $saved_order->{reqdate} eq $form->{reqdate} && $saved_order->{transdate} eq $form->{transdate} ) { - my $extra_days = $form->{type} eq 'sales_quotation' ? $::instance_conf->get_reqdate_interval : 1; - my $next_workday = DateTime->today_local->add(days => $extra_days); - my $day_of_week = $next_workday->day_of_week; - - $next_workday->add(days => (8 - $day_of_week)) if $day_of_week >= 6; - + my $extra_days = $form->{type} eq 'sales_quotation' ? $::instance_conf->get_reqdate_interval : 1; + $form->{reqdate} = DateTime->today_local->next_workday(extra_days => $extra_days)->to_kivitendo; $form->{transdate} = DateTime->today_local->to_kivitendo; - $form->{reqdate} = $next_workday->to_kivitendo; } } -- 2.20.1