X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FOE.pm;h=fe293612a0002e928b0390ff40f64bc710e0adbd;hb=9de83d1a34f29dbf2f0ea4f2b4230913461c05db;hp=95d60c36f68b85b6c42da5086c9bb7c0c55a18d2;hpb=eeb560af5b33f700fa0cefd5feeadfa6a1c61f1e;p=kivitendo-erp.git diff --git a/SL/OE.pm b/SL/OE.pm index 95d60c36f..fe293612a 100644 --- a/SL/OE.pm +++ b/SL/OE.pm @@ -34,10 +34,10 @@ package OE; -use List::Util qw(max); - +use List::Util qw(max first); use SL::AM; use SL::Common; +use SL::CVar; use SL::DBUtils; use SL::IC; @@ -84,7 +84,8 @@ sub transactions { qq|WHERE (o.quotation = ?) |; push(@values, $quotation); - my ($null, $department_id) = split /--/, $form->{department}; + my ($null, $split_department_id) = split /--/, $form->{department}; + my $department_id = $form->{department_id} || $split_department_id; if ($department_id) { $query .= qq| AND o.department_id = ?|; push(@values, $department_id); @@ -111,7 +112,7 @@ sub transactions { $query .= " AND o.employee_id = ?"; push @values, conv_i($form->{employee_id}); } - + if ($form->{salesman_id}) { $query .= " AND o.salesman_id = ?"; push @values, conv_i($form->{salesman_id}); @@ -144,6 +145,16 @@ sub transactions { push(@values, conv_date($form->{transdateto})); } + if($form->{reqdatefrom}) { + $query .= qq| AND o.reqdate >= ?|; + push(@values, conv_date($form->{reqdatefrom})); + } + + if($form->{reqdateto}) { + $query .= qq| AND o.reqdate <= ?|; + push(@values, conv_date($form->{reqdateto})); + } + if ($form->{transaction_description}) { $query .= qq| AND o.transaction_description ILIKE ?|; push(@values, '%' . $form->{transaction_description} . '%'); @@ -238,6 +249,9 @@ sub save { my $all_units = AM->retrieve_units($myconfig, $form); $form->{all_units} = $all_units; + my $ic_cvar_configs = CVar->get_configs(module => 'IC', + dbh => $dbh); + $form->{employee_id} = (split /--/, $form->{employee})[1] if !$form->{employee_id}; unless ($form->{employee_id}) { $form->get_employee($dbh); @@ -246,6 +260,11 @@ sub save { my $ml = ($form->{type} eq 'sales_order') ? 1 : -1; if ($form->{id}) { + $query = qq|DELETE FROM custom_variables + WHERE (config_id IN (SELECT id FROM custom_variable_configs WHERE module = 'IC')) + AND (sub_module = 'orderitems') + AND (trans_id IN (SELECT id FROM orderitems WHERE trans_id = ?))|; + do_query($form, $dbh, $query, $form->{id}); $query = qq|DELETE FROM orderitems WHERE trans_id = ?|; do_query($form, $dbh, $query, $form->{id}); @@ -369,24 +388,19 @@ sub save { $pricegroup_id *= 1; # save detail record in orderitems table + my $orderitems_id = $form->{"orderitems_id_$i"}; + ($orderitems_id) = selectfirst_array_query($form, $dbh, qq|SELECT nextval('orderitemsid')|) if (!$orderitems_id); + @values = (); - $query = qq|INSERT INTO orderitems (|; - if ($form->{"orderitems_id_$i"}) { - $query .= "id, "; - } - $query .= qq|trans_id, parts_id, description, longdescription, qty, base_qty, | . - qq|sellprice, discount, unit, reqdate, project_id, serialnumber, ship, | . - qq|pricegroup_id, ordnumber, transdate, cusordnumber, subtotal, | . - qq|marge_percent, marge_total, lastcost, price_factor_id, price_factor, marge_price_factor) | . - qq|VALUES (|; - if($form->{"orderitems_id_$i"}) { - $query .= qq|?,|; - push(@values, $form->{"orderitems_id_$i"}); - } - $query .= qq|?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, - (SELECT factor FROM price_factors WHERE id = ?), ?)|; + $query = qq|INSERT INTO orderitems ( + id, trans_id, parts_id, description, longdescription, qty, base_qty, + sellprice, discount, unit, reqdate, project_id, serialnumber, ship, + pricegroup_id, ordnumber, transdate, cusordnumber, subtotal, + marge_percent, marge_total, lastcost, price_factor_id, price_factor, marge_price_factor) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, + (SELECT factor FROM price_factors WHERE id = ?), ?)|; push(@values, - conv_i($form->{id}), conv_i($form->{"id_$i"}), + conv_i($orderitems_id), conv_i($form->{id}), conv_i($form->{"id_$i"}), $form->{"description_$i"}, $form->{"longdescription_$i"}, $form->{"qty_$i"}, $baseqty, $fxsellprice, $form->{"discount_$i"}, @@ -402,6 +416,15 @@ sub save { $form->{"sellprice_$i"} = $fxsellprice; $form->{"discount_$i"} *= 100; + + CVar->save_custom_variables(module => 'IC', + sub_module => 'orderitems', + trans_id => $orderitems_id, + configs => $ic_cvar_configs, + variables => $form, + name_prefix => 'ic_', + name_postfix => "_$i", + dbh => $dbh); } } @@ -437,7 +460,7 @@ sub save { globalproject_id = ?, employee_id = ?, salesman_id = ?, cp_id = ?, transaction_description = ?, marge_total = ?, marge_percent = ? WHERE id = ?|; - @values = ($form->{ordnumber}, $form->{quonumber}, + @values = ($form->{ordnumber} || '', $form->{quonumber}, $form->{cusordnumber}, conv_date($form->{transdate}), conv_i($form->{vendor_id}), conv_i($form->{customer_id}), $amount, $netamount, conv_date($reqdate), @@ -627,6 +650,9 @@ sub retrieve { my ($query, $query_add, @values, @ids, $sth); + my $ic_cvar_configs = CVar->get_configs(module => 'IC', + dbh => $dbh); + # translate the ids (given by id_# and trans_id_#) into one array of ids, so we can join them later map { push @ids, $form->{"trans_id_$_"} @@ -691,8 +717,8 @@ sub retrieve { JOIN ${vc} cv ON (o.${vc}_id = cv.id) LEFT JOIN employee e ON (o.employee_id = e.id) LEFT JOIN department d ON (o.department_id = d.id) | . - ($form->{id} - ? "WHERE o.id = ?" + ($form->{id} + ? "WHERE o.id = ?" : "WHERE o.id IN (" . join(', ', map("? ", @ids)) . ")" ); @values = $form->{id} ? ($form->{id}) : @ids; @@ -760,7 +786,7 @@ sub retrieve { # stuff different from the whole will not be overwritten, but saved with a suffix. $query = qq|SELECT o.id AS orderitems_id, - c1.accno AS inventory_accno, c1.new_chart_id AS inventory_new_chart, date($transdate) - c1.valid_from as inventory_valid, + c1.accno AS inventory_accno, c1.new_chart_id AS inventory_new_chart, date($transdate) - c1.valid_from as inventory_valid, c2.accno AS income_accno, c2.new_chart_id AS income_new_chart, date($transdate) - c2.valid_from as income_valid, c3.accno AS expense_accno, c3.new_chart_id AS expense_new_chart, date($transdate) - c3.valid_from as expense_valid, oe.ordnumber AS ordnumber_oe, oe.transdate AS transdate_oe, oe.cusordnumber AS cusordnumber_oe, @@ -788,6 +814,15 @@ sub retrieve { $sth = prepare_execute_query($form, $dbh, $query, @values); while ($ref = $sth->fetchrow_hashref(NAME_lc)) { + # Retrieve custom variables. + my $cvars = CVar->get_custom_variables(dbh => $dbh, + module => 'IC', + sub_module => 'orderitems', + trans_id => $ref->{orderitems_id}, + ); + map { $ref->{"ic_cvar_$_->{name}"} = $_->{value} } @{ $cvars }; + + # Handle accounts. if (!$ref->{"part_inventory_accno_id"}) { map({ delete($ref->{$_}); } qw(inventory_accno inventory_new_chart inventory_valid)); } @@ -864,6 +899,7 @@ sub retrieve { } chop $ref->{taxaccounts}; + push @{ $form->{form_details} }, $ref; $stw->finish; } @@ -918,7 +954,8 @@ sub order_details { push(@project_ids, $form->{"globalproject_id"}) if ($form->{"globalproject_id"}); - $form->get_lists('price_factors' => 'ALL_PRICE_FACTORS'); + $form->get_lists('price_factors' => 'ALL_PRICE_FACTORS', + 'departments' => 'ALL_DEPARTMENTS'); my %price_factors; foreach my $pfac (@{ $form->{ALL_PRICE_FACTORS} }) { @@ -927,6 +964,13 @@ sub order_details { $pfac->{formatted_factor} = $form->format_amount($myconfig, $pfac->{factor}); } + # lookup department + foreach my $dept (@{ $form->{ALL_DEPARTMENTS} }) { + next unless $dept->{id} eq $form->{department_id}; + $form->{department} = $dept->{description}; + last; + } + # sort items by partsgroup for $i (1 .. $form->{rowcount}) { $partsgroup = ""; @@ -951,24 +995,33 @@ sub order_details { $form->{discount} = []; + $form->{TEMPLATE_ARRAYS} = { }; IC->prepare_parts_for_printing(); + my $ic_cvar_configs = CVar->get_configs(module => 'IC'); + 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 - price_factor price_factor_name); + price_factor price_factor_name partsgroup); + + push @arrays, map { "ic_cvar_$_->{name}" } @{ $ic_cvar_configs }; + + my @tax_arrays = qw(taxbase tax taxdescription taxrate taxnumber); + + map { $form->{TEMPLATE_ARRAYS}->{$_} = [] } (@arrays, @tax_arrays); my $sameitem = ""; foreach $item (sort { $a->[1] cmp $b->[1] } @partsgroup) { $i = $item->[0]; if ($item->[1] ne $sameitem) { - push(@{ $form->{description} }, qq|$item->[1]|); + push(@{ $form->{TEMPLATE_ARRAYS}->{description} }, qq|$item->[1]|); $sameitem = $item->[1]; - map({ push(@{ $form->{$_} }, "") } grep({ $_ ne "description" } @arrays)); + map({ push(@{ $form->{TEMPLATE_ARRAYS}->{$_} }, "") } grep({ $_ ne "description" } @arrays)); } $form->{"qty_$i"} = $form->parse_amount($myconfig, $form->{"qty_$i"}); @@ -993,21 +1046,22 @@ sub order_details { my $price_factor = $price_factors{$form->{"price_factor_id_$i"}} || { 'factor' => 1 }; - push @{ $form->{runningnumber} }, $position; - push @{ $form->{number} }, $form->{"partnumber_$i"}; - push @{ $form->{description} }, $form->{"description_$i"}; - push @{ $form->{longdescription} }, $form->{"longdescription_$i"}; - push @{ $form->{qty} }, $form->format_amount($myconfig, $form->{"qty_$i"}); - push @{ $form->{ship} }, $form->format_amount($myconfig, $form->{"ship_$i"}); - push @{ $form->{unit} }, $form->{"unit_$i"}; - push @{ $form->{bin} }, $form->{"bin_$i"}; - push @{ $form->{partnotes} }, $form->{"partnotes_$i"}; - push @{ $form->{serialnumber} }, $form->{"serialnumber_$i"}; - push @{ $form->{reqdate} }, $form->{"reqdate_$i"}; - push @{ $form->{sellprice} }, $form->{"sellprice_$i"}; - push @{ $form->{listprice} }, $form->{"listprice_$i"}; - push @{ $form->{price_factor} }, $price_factor->{formatted_factor}; - push @{ $form->{price_factor_name} }, $price_factor->{description}; + push @{ $form->{TEMPLATE_ARRAYS}->{runningnumber} }, $position; + push @{ $form->{TEMPLATE_ARRAYS}->{number} }, $form->{"partnumber_$i"}; + push @{ $form->{TEMPLATE_ARRAYS}->{description} }, $form->{"description_$i"}; + push @{ $form->{TEMPLATE_ARRAYS}->{longdescription} }, $form->{"longdescription_$i"}; + push @{ $form->{TEMPLATE_ARRAYS}->{qty} }, $form->format_amount($myconfig, $form->{"qty_$i"}); + push @{ $form->{TEMPLATE_ARRAYS}->{ship} }, $form->format_amount($myconfig, $form->{"ship_$i"}); + push @{ $form->{TEMPLATE_ARRAYS}->{unit} }, $form->{"unit_$i"}; + push @{ $form->{TEMPLATE_ARRAYS}->{bin} }, $form->{"bin_$i"}; + push @{ $form->{TEMPLATE_ARRAYS}->{partnotes} }, $form->{"partnotes_$i"}; + push @{ $form->{TEMPLATE_ARRAYS}->{serialnumber} }, $form->{"serialnumber_$i"}; + push @{ $form->{TEMPLATE_ARRAYS}->{reqdate} }, $form->{"reqdate_$i"}; + push @{ $form->{TEMPLATE_ARRAYS}->{sellprice} }, $form->{"sellprice_$i"}; + push @{ $form->{TEMPLATE_ARRAYS}->{listprice} }, $form->{"listprice_$i"}; + push @{ $form->{TEMPLATE_ARRAYS}->{price_factor} }, $price_factor->{formatted_factor}; + push @{ $form->{TEMPLATE_ARRAYS}->{price_factor_name} }, $price_factor->{description}; + push @{ $form->{TEMPLATE_ARRAYS}->{partsgroup} }, $form->{"partsgroup_$i"}; my $sellprice = $form->parse_amount($myconfig, $form->{"sellprice_$i"}); my ($dec) = ($sellprice =~ /\.(\d+)/); @@ -1021,12 +1075,12 @@ sub order_details { my $nodiscount_linetotal = $form->round_amount($form->{"qty_$i"} * $sellprice / $price_factor->{factor}, 2); $form->{"netprice_$i"} = $form->round_amount($form->{"qty_$i"} ? ($linetotal / $form->{"qty_$i"}) : 0, 2); - push @{ $form->{netprice} }, ($form->{"netprice_$i"} != 0) ? $form->format_amount($myconfig, $form->{"netprice_$i"}, $decimalplaces) : ''; + push @{ $form->{TEMPLATE_ARRAYS}->{netprice} }, ($form->{"netprice_$i"} != 0) ? $form->format_amount($myconfig, $form->{"netprice_$i"}, $decimalplaces) : ''; $linetotal = ($linetotal != 0) ? $linetotal : ''; - push @{ $form->{discount} }, ($discount != 0) ? $form->format_amount($myconfig, $discount * -1, 2) : ''; - push @{ $form->{p_discount} }, $form->{"discount_$i"}; + push @{ $form->{TEMPLATE_ARRAYS}->{discount} }, ($discount != 0) ? $form->format_amount($myconfig, $discount * -1, 2) : ''; + push @{ $form->{TEMPLATE_ARRAYS}->{p_discount} }, $form->{"discount_$i"}; $form->{ordtotal} += $linetotal; $form->{nodiscount_total} += $nodiscount_linetotal; @@ -1038,26 +1092,26 @@ sub order_details { } if ($form->{"subtotal_$i"} && $subtotal_header && ($subtotal_header != $i)) { - push @{ $form->{discount_sub} }, $form->format_amount($myconfig, $discount_subtotal, 2); - push @{ $form->{nodiscount_sub} }, $form->format_amount($myconfig, $nodiscount_subtotal, 2); + push @{ $form->{TEMPLATE_ARRAYS}->{discount_sub} }, $form->format_amount($myconfig, $discount_subtotal, 2); + push @{ $form->{TEMPLATE_ARRAYS}->{nodiscount_sub} }, $form->format_amount($myconfig, $nodiscount_subtotal, 2); $discount_subtotal = 0; $nodiscount_subtotal = 0; $subtotal_header = 0; } else { - push @{ $form->{discount_sub} }, ""; - push @{ $form->{nodiscount_sub} }, ""; + push @{ $form->{TEMPLATE_ARRAYS}->{discount_sub} }, ""; + push @{ $form->{TEMPLATE_ARRAYS}->{nodiscount_sub} }, ""; } if (!$form->{"discount_$i"}) { $nodiscount += $linetotal; } - push @{ $form->{linetotal} }, $form->format_amount($myconfig, $linetotal, 2); - push @{ $form->{nodiscount_linetotal} }, $form->format_amount($myconfig, $nodiscount_linetotal, 2); + push @{ $form->{TEMPLATE_ARRAYS}->{linetotal} }, $form->format_amount($myconfig, $linetotal, 2); + push @{ $form->{TEMPLATE_ARRAYS}->{nodiscount_linetotal} }, $form->format_amount($myconfig, $nodiscount_linetotal, 2); - push(@{ $form->{projectnumber} }, $projectnumbers{$form->{"project_id_$i"}}); + push(@{ $form->{TEMPLATE_ARRAYS}->{projectnumber} }, $projectnumbers{$form->{"project_id_$i"}}); my ($taxamount, $taxbase); my $taxrate = 0; @@ -1082,7 +1136,7 @@ sub order_details { } $tax_rate = $taxrate * 100; - push(@{ $form->{tax_rate} }, qq|$tax_rate|); + push(@{ $form->{TEMPLATE_ARRAYS}->{tax_rate} }, qq|$tax_rate|); if ($form->{"assembly_$i"}) { $sameitem = ""; @@ -1108,32 +1162,30 @@ sub order_details { while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { if ($form->{groupitems} && $ref->{partsgroup} ne $sameitem) { - map({ push(@{ $form->{$_} }, "") } grep({ $_ ne "description" } @arrays)); + map({ push(@{ $form->{TEMPLATE_ARRAYS}->{$_} }, "") } grep({ $_ ne "description" } @arrays)); $sameitem = ($ref->{partsgroup}) ? $ref->{partsgroup} : "--"; - push(@{ $form->{description} }, $sameitem); + push(@{ $form->{TEMPLATE_ARRAYS}->{description} }, $sameitem); } - push(@{ $form->{description} }, $form->format_amount($myconfig, $ref->{qty} * $form->{"qty_$i"}) . qq|, $ref->{partnumber}, $ref->{description}|); - map({ push(@{ $form->{$_} }, "") } grep({ $_ ne "description" } @arrays)); + 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)); } $sth->finish; } + map { push @{ $form->{TEMPLATE_ARRAYS}->{"ic_cvar_$_->{name}"} }, $form->{"ic_cvar_$_->{name}_$i"} } @{ $ic_cvar_configs }; } } my $tax = 0; foreach $item (sort keys %taxaccounts) { - push(@{ $form->{taxbase} }, - $form->format_amount($myconfig, $taxbase{$item}, 2)); - $tax += $taxamount = $form->round_amount($taxaccounts{$item}, 2); - push(@{ $form->{tax} }, $form->format_amount($myconfig, $taxamount, 2)); - push(@{ $form->{taxdescription} }, $form->{"${item}_description"} . q{ } . 100 * $form->{"${item}_rate"} . q{%}); - push(@{ $form->{taxrate} }, - $form->format_amount($myconfig, $form->{"${item}_rate"} * 100)); - push(@{ $form->{taxnumber} }, $form->{"${item}_taxnumber"}); + push(@{ $form->{TEMPLATE_ARRAYS}->{taxbase} }, $form->format_amount($myconfig, $taxbase{$item}, 2)); + push(@{ $form->{TEMPLATE_ARRAYS}->{tax} }, $form->format_amount($myconfig, $taxamount, 2)); + push(@{ $form->{TEMPLATE_ARRAYS}->{taxrate} }, $form->format_amount($myconfig, $form->{"${item}_rate"} * 100)); + push(@{ $form->{TEMPLATE_ARRAYS}->{taxdescription} }, $form->{"${item}_description"} . q{ } . 100 * $form->{"${item}_rate"} . q{%}); + push(@{ $form->{TEMPLATE_ARRAYS}->{taxnumber} }, $form->{"${item}_taxnumber"}); } $form->{nodiscount_subtotal} = $form->format_amount($myconfig, $form->{nodiscount_total}, 2);