Auftrags-Controller: Zahlungs- und Lieferbedingungen
[kivitendo-erp.git] / SL / OE.pm
index 1c75511..3bb6458 100644 (file)
--- a/SL/OE.pm
+++ b/SL/OE.pm
@@ -557,7 +557,7 @@ sub save {
          UPDATE orderitems SET
           trans_id = ?, position = ?, parts_id = ?, description = ?, longdescription = ?, qty = ?, base_qty = ?,
           sellprice = ?, discount = ?, unit = ?, reqdate = ?, project_id = ?, serialnumber = ?, ship = ?,
-          pricegroup_id = ?, ordnumber = ?, transdate = ?, cusordnumber = ?, subtotal = ?,
+          pricegroup_id = ?, subtotal = ?,
           marge_percent = ?, marge_total = ?, lastcost = ?, price_factor_id = ?,
           active_price_source = ?, active_discount_source = ?,
           price_factor = (SELECT factor FROM price_factors WHERE id = ?), marge_price_factor = ?
@@ -569,9 +569,8 @@ SQL
            $form->{"qty_$i"}, $baseqty,
            $fxsellprice, $form->{"discount_$i"},
            $form->{"unit_$i"}, conv_date($reqdate), conv_i($form->{"project_id_$i"}),
-           $form->{"serialnumber_$i"}, $form->{"ship_$i"}, $pricegroup_id,
-           $form->{"ordnumber_$i"}, conv_date($form->{"transdate_$i"}),
-           $form->{"cusordnumber_$i"}, $form->{"subtotal_$i"} ? 't' : 'f',
+           $form->{"serialnumber_$i"}, $form->{"ship_$i"},
+           $pricegroup_id, $form->{"subtotal_$i"} ? 't' : 'f',
            $form->{"marge_percent_$i"}, $form->{"marge_absolut_$i"},
            $form->{"lastcost_$i"}, conv_i($form->{"price_factor_id_$i"}),
            $form->{"active_price_source_$i"}, $form->{"active_discount_source_$i"},
@@ -763,7 +762,7 @@ sub load_periodic_invoice_config {
 
     if ($config_obj) {
       my $config = { map { $_ => $config_obj->$_ } qw(active terminated periodicity order_value_periodicity start_date_as_date end_date_as_date first_billing_date_as_date extend_automatically_by ar_chart_id
-                                                      print printer_id copies) };
+                                                      print printer_id copies direct_debit) };
       $form->{periodic_invoices_config} = YAML::Dump($config);
     }
   }
@@ -865,17 +864,21 @@ sub retrieve {
 
   # and remember for the rest of the function
   my $is_collective_order = scalar @ids;
-  $form->{useasnew} = !!$is_collective_order;
 
-  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;
+  # If collective order was created from exactly 1 order, we assume the same
+  # behaviour as a "save as new" from within an order is actually desired, i.e.
+  # the original order isn't part of a workflow where we want to remember
+  # record_links, but simply a quick way of generating a new order from an old
+  # one without having to enter everything again.
+  # Setting useasnew will prevent the creation of record_links for the items
+  # when saving the new order.
+  # This form variable is probably not necessary, could just set saveasnew instead
+  $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;
+    $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
@@ -911,6 +914,7 @@ sub retrieve {
            (SELECT cu.name FROM currencies cu WHERE cu.id=o.currency_id) AS currency, e.name AS employee, o.employee_id, o.salesman_id,
            o.${vc}_id, cv.name AS ${vc}, o.amount AS invtotal,
            o.closed, o.reqdate, o.quonumber, o.department_id, o.cusordnumber,
+           o.mtime, o.itime,
            d.description AS department, o.payment_id, o.language_id, o.taxzone_id,
            o.delivery_customer_id, o.delivery_vendor_id, o.proforma, o.shipto_id,
            o.globalproject_id, o.delivered, o.transaction_description, o.delivery_term_id,
@@ -938,6 +942,8 @@ sub retrieve {
         map { $form->{$_} = '' if ($ref->{$_} ne $form->{$_}) } keys %$ref;
       }
     }
+    $form->{mtime}   ||= $form->{itime};
+    $form->{lastmtime} = $form->{mtime};
 
     # if not given, fill transdate with current_date
     $form->{transdate} = $form->current_date($myconfig)
@@ -1070,6 +1076,8 @@ sub retrieve {
       }
 
       # delete orderitems_id in collective orders, so that they get cloned no matter what
+      # is this correct? or is the following meant?
+      # remember orderitems_ids in converted_from_orderitems_ids, so that they may be linked
       $ref->{converted_from_orderitems_id} = delete $ref->{orderitems_id} if $is_collective_order;
 
       # get tax rates and description
@@ -1508,7 +1516,7 @@ sub order_details {
   $form->{delivery_term} = SL::DB::Manager::DeliveryTerm->find_by(id => $form->{delivery_term_id} || undef);
   $form->{delivery_term}->description_long($form->{delivery_term}->translated_attribute('description_long', $form->{language_id})) if $form->{delivery_term} && $form->{language_id};
 
-  $::form->{order} = SL::DB::Manager::Order->find_by(id => $::form->{id});
+  $form->{order} = SL::DB::Manager::Order->find_by(id => $form->{id}) if $form->{id};
 
   $main::lxdebug->leave_sub();
 }