X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FOE.pm;h=3bb645882cbb17c6b4536ea6a508ec7f69dae921;hb=c9d5cc7f38af8db81fcfd11fac6cda62935d41c3;hp=dc21c51ef0a0f4d16a92a0408825bb8bc206e2b0;hpb=2f6636f68edda5b8a47afd16fda868033a7076ec;p=kivitendo-erp.git diff --git a/SL/OE.pm b/SL/OE.pm index dc21c51ef..3bb645882 100644 --- 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 @@ -1226,25 +1234,29 @@ sub order_details { $form->{discount} = []; + # get some values of parts from db on store them in extra array, + # so that they can be sorted in later + my %prepared_template_arrays = IC->prepare_parts_for_printing(myconfig => $myconfig, form => $form); + my @prepared_arrays = keys %prepared_template_arrays; + $form->{TEMPLATE_ARRAYS} = { }; - IC->prepare_parts_for_printing(myconfig => $myconfig, form => $form); my $ic_cvar_configs = CVar->get_configs(module => 'IC'); my $project_cvar_configs = CVar->get_configs(module => 'Projects'); my @arrays = - qw(runningnumber number description longdescription qty ship unit bin - partnotes serialnumber reqdate sellprice listprice netprice - discount p_discount discount_sub nodiscount_sub - linetotal nodiscount_linetotal tax_rate projectnumber projectdescription - price_factor price_factor_name partsgroup weight lineweight); + qw(runningnumber number description longdescription qty qty_nofmt ship ship_nofmt unit bin + partnotes serialnumber reqdate sellprice sellprice_nofmt listprice listprice_nofmt netprice netprice_nofmt + discount discount_nofmt p_discount discount_sub discount_sub_nofmt nodiscount_sub nodiscount_sub_nofmt + linetotal linetotal_nofmt nodiscount_linetotal nodiscount_linetotal_nofmt tax_rate projectnumber projectdescription + price_factor price_factor_name partsgroup weight weight_nofmt lineweight lineweight_nofmt); push @arrays, map { "ic_cvar_$_->{name}" } @{ $ic_cvar_configs }; push @arrays, map { "project_cvar_$_->{name}" } @{ $project_cvar_configs }; my @tax_arrays = qw(taxbase tax taxdescription taxrate taxnumber); - map { $form->{TEMPLATE_ARRAYS}->{$_} = [] } (@arrays, @tax_arrays); + map { $form->{TEMPLATE_ARRAYS}->{$_} = [] } (@arrays, @tax_arrays, @prepared_arrays); my $totalweight = 0; my $sameitem = ""; @@ -1252,10 +1264,11 @@ sub order_details { $i = $item->[0]; if ($item->[1] ne $sameitem) { + push(@{ $form->{TEMPLATE_ARRAYS}->{entry_type} }, 'partsgroup'); push(@{ $form->{TEMPLATE_ARRAYS}->{description} }, qq|$item->[1]|); $sameitem = $item->[1]; - map({ push(@{ $form->{TEMPLATE_ARRAYS}->{$_} }, "") } grep({ $_ ne "description" } @arrays)); + map({ push(@{ $form->{TEMPLATE_ARRAYS}->{$_} }, "") } grep({ $_ ne "description" } (@arrays, @prepared_arrays))); } $form->{"qty_$i"} = $form->parse_amount($myconfig, $form->{"qty_$i"}); @@ -1280,6 +1293,9 @@ sub order_details { my $price_factor = $price_factors{$form->{"price_factor_id_$i"}} || { 'factor' => 1 }; + push(@{ $form->{TEMPLATE_ARRAYS}->{$_} }, $prepared_template_arrays{$_}[$i - 1]) for @prepared_arrays; + + push @{ $form->{TEMPLATE_ARRAYS}->{entry_type} }, 'normal'; push @{ $form->{TEMPLATE_ARRAYS}->{runningnumber} }, $position; push @{ $form->{TEMPLATE_ARRAYS}->{number} }, $form->{"partnumber_$i"}; push @{ $form->{TEMPLATE_ARRAYS}->{description} }, $form->{"description_$i"}; @@ -1420,13 +1436,15 @@ sub order_details { while (my $ref = $sth->fetchrow_hashref("NAME_lc")) { if ($form->{groupitems} && $ref->{partsgroup} ne $sameitem) { - map({ push(@{ $form->{TEMPLATE_ARRAYS}->{$_} }, "") } grep({ $_ ne "description" } @arrays)); + map({ push(@{ $form->{TEMPLATE_ARRAYS}->{$_} }, "") } grep({ $_ ne "description" } (@arrays, @prepared_arrays))); $sameitem = ($ref->{partsgroup}) ? $ref->{partsgroup} : "--"; + push(@{ $form->{TEMPLATE_ARRAYS}->{entry_type} }, 'assembly-item-partsgroup'); push(@{ $form->{TEMPLATE_ARRAYS}->{description} }, $sameitem); } + push(@{ $form->{TEMPLATE_ARRAYS}->{entry_type} }, 'assembly-item'); push(@{ $form->{TEMPLATE_ARRAYS}->{description} }, $form->format_amount($myconfig, $ref->{qty} * $form->{"qty_$i"}) . qq|, $ref->{partnumber}, $ref->{description}|); - map({ push(@{ $form->{TEMPLATE_ARRAYS}->{$_} }, "") } grep({ $_ ne "description" } @arrays)); + map({ push(@{ $form->{TEMPLATE_ARRAYS}->{$_} }, "") } grep({ $_ ne "description" } (@arrays, @prepared_arrays))); } $sth->finish; } @@ -1498,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(); }