Berechnung des nächsten Arbeitstages aus oe.pl und OE.pm in DateTime-Helper …
authorBernd Bleßmann <bernd@kivitendo-premium.de>
Fri, 6 Nov 2015 10:40:32 +0000 (11:40 +0100)
committerBernd Bleßmann <bernd@kivitendo-premium.de>
Fri, 6 Nov 2015 10:40:32 +0000 (11:40 +0100)
… verschoben, damit der Code nicht doppelt in OE.pm und oe.pl ist und auch von
woanders verwendet werden kann.

SL/Helper/DateTime.pm
SL/OE.pm
bin/mozilla/oe.pl

index 547c4b9..831e301 100644 (file)
@@ -82,6 +82,18 @@ sub end_of_month {
   return $self->truncate(to => 'month')->add(months => 1)->subtract(days => 1);
 }
 
   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__
 1;
 
 __END__
@@ -131,6 +143,21 @@ The legacy name C<from_lxoffice> is still supported.
 Sets the object to the last day of object's month at midnight. Returns
 the object itself.
 
 Sets the object to the last day of object's month at midnight. Returns
 the object itself.
 
+=item C<next_workday %params>
+
+Sets the object to the next workday. The recognized parameter is:
+
+=over 2
+
+=item * C<extra_days> - optional: If C<extra_days> 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
 =back
 
 =head1 AUTHOR
index 36cbcd1..3bb6458 100644 (file)
--- 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}) {
   $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->{transdate} = DateTime->today_local->to_kivitendo;
-    $form->{reqdate}   = $next_workday->to_kivitendo;
   }
 
   # get default accounts
   }
 
   # get default accounts
index ea2cffa..7b33183 100644 (file)
@@ -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} ) {
   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->{transdate} = DateTime->today_local->to_kivitendo;
-      $form->{reqdate}   = $next_workday->to_kivitendo;
     }
   }
 
     }
   }