X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FIS.pm;h=62cbf5369ba6ed92df8506e92d26cc0895b61d56;hb=b7c3c5b701a69be1c1e8d7c45a89f1ac96c70faa;hp=e559286d2f6f873ebeefff05ee5ab73f5d18b392;hpb=1e25131315e72036aa6df1d626011a761218d233;p=kivitendo-erp.git diff --git a/SL/IS.pm b/SL/IS.pm index e559286d2..62cbf5369 100644 --- a/SL/IS.pm +++ b/SL/IS.pm @@ -34,12 +34,18 @@ package IS; +#use strict; + use List::Util qw(max); use SL::AM; +use SL::ARAP; +use SL::CVar; use SL::Common; use SL::DBUtils; +use SL::DO; use SL::MoreCommon; +use SL::IC; use Data::Dumper; sub invoice_details { @@ -70,12 +76,12 @@ sub invoice_details { } # sort items by partsgroup - for $i (1 .. $form->{rowcount}) { - $partsgroup = ""; - if ($form->{"partsgroup_$i"} && $form->{groupitems}) { - $partsgroup = $form->{"partsgroup_$i"}; - } - push @partsgroup, [$i, $partsgroup]; + for my $i (1 .. $form->{rowcount}) { +# $partsgroup = ""; +# if ($form->{"partsgroup_$i"} && $form->{groupitems}) { +# $partsgroup = $form->{"partsgroup_$i"}; +# } +# push @partsgroup, [$i, $partsgroup]; push(@project_ids, $form->{"project_id_$i"}) if ($form->{"project_id_$i"}); } @@ -127,6 +133,10 @@ sub invoice_details { my $subtotal_header = 0; my $subposition = 0; + $form->{discount} = []; + + IC->prepare_parts_for_printing(); + my @arrays = qw(runningnumber number description longdescription qty ship unit bin deliverydate_oe ordnumber_oe transdate_oe licensenumber validuntil @@ -190,7 +200,7 @@ sub invoice_details { if ($form->{lizenzen}) { if ($form->{"licensenumber_$i"}) { $query = qq|SELECT licensenumber, validuntil FROM license WHERE id = ?|; - ($licensenumber, $validuntil) = selectrow_query($form, $dbh, $query, conv_i($form->{"licensenumber_$i"})); + my ($licensenumber, $validuntil) = selectrow_query($form, $dbh, $query, conv_i($form->{"licensenumber_$i"})); push(@{ $form->{licensenumber} }, $licensenumber); push(@{ $form->{validuntil} }, $locale->date($myconfig, $validuntil, 0)); @@ -207,8 +217,11 @@ sub invoice_details { my ($dec) = ($sellprice =~ /\.(\d+)/); my $decimalplaces = max 2, length($dec); - my $discount = $form->round_amount($form->{"qty_$i"} * $sellprice * $form->{"discount_$i"} / 100 / $price_factor->{factor}, $decimalplaces); - my $linetotal = $form->round_amount($form->{"qty_$i"} * $sellprice * (100 - $form->{"discount_$i"}) / 100 / $price_factor->{factor}, 2); + my $parsed_discount = $form->parse_amount($myconfig, $form->{"discount_$i"}); + my $linetotal_exact = $form->{"qty_$i"} * $sellprice * (100 - $parsed_discount) / 100 / $price_factor->{factor}; + my $linetotal = $form->round_amount($linetotal_exact, 2); + my $discount = $form->round_amount($form->{"qty_$i"} * $sellprice * $parsed_discount / 100 / $price_factor->{factor} - ($linetotal - $linetotal_exact), + $decimalplaces); 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); @@ -216,7 +229,7 @@ sub invoice_details { $linetotal = ($linetotal != 0) ? $linetotal : ''; - push @{ $form->{discount} }, ($discount != 0) ? $form->format_amount($myconfig, $discount * -1, $decimalplaces) : ''; + push @{ $form->{discount} }, ($discount != 0) ? $form->format_amount($myconfig, $discount * -1, 2) : ''; push @{ $form->{p_discount} }, $form->{"discount_$i"}; $form->{total} += $linetotal; @@ -268,32 +281,28 @@ sub invoice_details { if ($form->round_amount($taxrate, 7) == 0) { if ($form->{taxincluded}) { - foreach $item (@taxaccounts) { - $taxamount = - $form->round_amount($linetotal * $form->{"${item}_rate"} / - (1 + abs($form->{"${item}_rate"})), - 2); + foreach my $accno (@taxaccounts) { + $taxamount = $form->round_amount($linetotal * $form->{"${accno}_rate"} / (1 + abs($form->{"${accno}_rate"})), 2); - $taxaccounts{$item} += $taxamount; - $taxdiff += $taxamount; + $taxaccounts{$accno} += $taxamount; + $taxdiff += $taxamount; - $taxbase{$item} += $taxbase; + $taxbase{$accno} += $taxbase; } $taxaccounts{ $taxaccounts[0] } += $taxdiff; } else { - foreach $item (@taxaccounts) { - $taxaccounts{$item} += $linetotal * $form->{"${item}_rate"}; - $taxbase{$item} += $taxbase; + foreach my $accno (@taxaccounts) { + $taxaccounts{$accno} += $linetotal * $form->{"${accno}_rate"}; + $taxbase{$accno} += $taxbase; } } } else { - foreach $item (@taxaccounts) { - $taxaccounts{$item} += - $taxamount * $form->{"${item}_rate"} / $taxrate; - $taxbase{$item} += $taxbase; + foreach my $accno (@taxaccounts) { + $taxaccounts{$accno} += $taxamount * $form->{"${accno}_rate"} / $taxrate; + $taxbase{$accno} += $taxbase; } } - $tax_rate = $taxrate * 100; + my $tax_rate = $taxrate * 100; push(@{ $form->{tax_rate} }, qq|$tax_rate|); if ($form->{"assembly_$i"}) { $sameitem = ""; @@ -315,7 +324,7 @@ sub invoice_details { WHERE (a.bom = '1') AND (a.id = ?) $sortorder|; $sth = prepare_execute_query($form, $dbh, $query, conv_i($form->{"id_$i"})); - while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { + while (my $ref = $sth->fetchrow_hashref('NAME_lc')) { if ($form->{groupitems} && $ref->{partsgroup} ne $sameitem) { map({ push(@{ $form->{$_} }, "") } grep({ $_ ne "description" } @arrays)); $sameitem = ($ref->{partsgroup}) ? $ref->{partsgroup} : "--"; @@ -391,6 +400,7 @@ sub project_description { $main::lxdebug->enter_sub(); my ($self, $dbh, $id) = @_; + my $form = \%main::form; my $query = qq|SELECT description FROM project WHERE id = ?|; my ($description) = selectrow_query($form, $dbh, $query, conv_i($id)); @@ -463,6 +473,12 @@ sub customer_details { map { $form->{"dv_$_"} = $ref->{$_} } keys %$ref; } + + my $custom_variables = CVar->get_custom_variables('dbh' => $dbh, + 'module' => 'CT', + 'trans_id' => $form->{customer_id}); + map { $form->{"vc_cvar_$_->{name}"} = $_->{value} } @{ $custom_variables }; + $dbh->disconnect; $main::lxdebug->leave_sub(); @@ -517,9 +533,7 @@ sub post_invoice { if ($form->{currency} eq $defaultcurrency) { $form->{exchangerate} = 1; } else { - $exchangerate = - $form->check_exchangerate($myconfig, $form->{currency}, - $form->{transdate}, 'buy'); + $exchangerate = $form->check_exchangerate($myconfig, $form->{currency}, $form->{transdate}, 'buy'); } $form->{exchangerate} = @@ -535,6 +549,8 @@ sub post_invoice { my %price_factors = map { $_->{id} => $_->{factor} } @{ $form->{ALL_PRICE_FACTORS} }; my $price_factor; + $form->{amount_cogs} = {}; + foreach my $i (1 .. $form->{rowcount}) { if ($form->{type} eq "credit_note") { $form->{"qty_$i"} = $form->parse_amount($myconfig, $form->{"qty_$i"}) * -1; @@ -543,10 +559,10 @@ sub post_invoice { $form->{"qty_$i"} = $form->parse_amount($myconfig, $form->{"qty_$i"}); } my $basefactor; - my $basqty; + my $baseqty; $form->{"marge_percent_$i"} = $form->parse_amount($myconfig, $form->{"marge_percent_$i"}) * 1; - $form->{"marge_absolut_$i"} = $form->parse_amount($myconfig, $form->{"marge_absolut_$i"}) * 1; + $form->{"marge_total_$i"} = $form->parse_amount($myconfig, $form->{"marge_total_$i"}) * 1; $form->{"lastcost_$i"} = $form->{"lastcost_$i"} * 1; if ($form->{storno}) { @@ -638,32 +654,11 @@ sub post_invoice { if ($form->{"inventory_accno_$i"} || $form->{"assembly_$i"}) { - # adjust parts onhand quantity - if ($form->{"assembly_$i"}) { - - # do not update if assembly consists of all services - $query = - qq|SELECT sum(p.inventory_accno_id) - FROM parts p - JOIN assembly a ON (a.parts_id = p.id) - WHERE a.id = ?|; - $sth = prepare_execute_query($form, $dbh, $query, conv_i($form->{"id_$i"})); - - if ($sth->fetchrow_array) { - $form->update_balance($dbh, "parts", "onhand", qq|id = ?|, - $baseqty * -1, $form->{"id_$i"}) - unless $form->{shipped}; - } - $sth->finish; - # record assembly item as allocated &process_assembly($dbh, $form, $form->{"id_$i"}, $baseqty); - } else { - $form->update_balance($dbh, "parts", "onhand", qq|id = ?|, - $baseqty * -1, $form->{"id_$i"}) - unless $form->{shipped}; + } else { $allocated = &cogs($dbh, $form, $form->{"id_$i"}, $baseqty, $basefactor, $i); } } @@ -687,11 +682,11 @@ sub post_invoice { $form->{"description_$i"}, $form->{"longdescription_$i"}, $form->{"qty_$i"}, $form->{"sellprice_$i"}, $fxsellprice, $form->{"discount_$i"}, $allocated, 'f', - $form->{"unit_$i"}, conv_date($form->{"deliverydate_$i"}), conv_i($form->{"project_id_$i"}), + $form->{"unit_$i"}, conv_date($form->{"reqdate_$i"}), conv_i($form->{"project_id_$i"}), $form->{"serialnumber_$i"}, conv_i($pricegroup_id), $form->{"ordnumber_$i"}, conv_date($form->{"transdate_$i"}), $form->{"cusordnumber_$i"}, $baseqty, $form->{"subtotal_$i"} ? 't' : 'f', - $form->{"marge_percent_$i"}, $form->{"marge_absolut_$i"}, + $form->{"marge_percent_$i"}, $form->{"marge_total_$i"}, $form->{"lastcost_$i"}, conv_i($form->{"price_factor_id_$i"}), conv_i($form->{"price_factor_id_$i"}), conv_i($form->{"marge_price_factor_$i"})); @@ -778,9 +773,38 @@ sub post_invoice { $project_id = conv_i($form->{"globalproject_id"}); + foreach my $trans_id (keys %{ $form->{amount_cogs} }) { + foreach my $accno (keys %{ $form->{amount_cogs}{$trans_id} }) { + next unless ($form->{expense_inventory} =~ /\Q$accno\E/); + + $form->{amount_cogs}{$trans_id}{$accno} = $form->round_amount($form->{amount_cogs}{$trans_id}{$accno}, 2); + + if (!$payments_only && ($form->{amount_cogs}{$trans_id}{$accno} != 0)) { + $query = + qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, taxkey, project_id) + VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, 0, ?)|; + @values = (conv_i($trans_id), $accno, $form->{amount_cogs}{$trans_id}{$accno}, conv_date($form->{invdate}), conv_i($project_id)); + do_query($form, $dbh, $query, @values); + $form->{amount_cogs}{$trans_id}{$accno} = 0; + } + } + + foreach my $accno (keys %{ $form->{amount_cogs}{$trans_id} }) { + $form->{amount_cogs}{$trans_id}{$accno} = $form->round_amount($form->{amount_cogs}{$trans_id}{$accno}, 2); + + if (!$payments_only && ($form->{amount_cogs}{$trans_id}{$accno} != 0)) { + $query = + qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, taxkey, project_id) + VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, 0, ?)|; + @values = (conv_i($trans_id), $accno, $form->{amount_cogs}{$trans_id}{$accno}, conv_date($form->{invdate}), conv_i($project_id)); + do_query($form, $dbh, $query, @values); + } + } + } + foreach my $trans_id (keys %{ $form->{amount} }) { foreach my $accno (keys %{ $form->{amount}{$trans_id} }) { - next unless ($form->{expense_inventory} =~ /$accno/); + next unless ($form->{expense_inventory} =~ /\Q$accno\E/); $form->{amount}{$trans_id}{$accno} = $form->round_amount($form->{amount}{$trans_id}{$accno}, 2); @@ -834,13 +858,8 @@ sub post_invoice { if ($form->{currency} eq $defaultcurrency) { $form->{"exchangerate_$i"} = 1; } else { - $exchangerate = - $form->check_exchangerate($myconfig, $form->{currency}, - $form->{"datepaid_$i"}, 'buy'); - - $form->{"exchangerate_$i"} = - $exchangerate ? $exchangerate - : $form->parse_amount($myconfig, $form->{"exchangerate_$i"}); + $exchangerate = $form->check_exchangerate($myconfig, $form->{currency}, $form->{"datepaid_$i"}, 'buy'); + $form->{"exchangerate_$i"} = $exchangerate || $form->parse_amount($myconfig, $form->{"exchangerate_$i"}); } # record AR @@ -959,7 +978,7 @@ sub post_invoice { do_query($form, $dbh, $query, @values); if($form->{"formname"} eq "credit_note") { - for my $i (1 .. $form->{paidaccounts}) { + for my $i (1 .. $form->{rowcount}) { $query = qq|UPDATE parts SET onhand = onhand - ? WHERE id = ?|; @values = (conv_i($form->{"qty_$i"}), conv_i($form->{"id_$i"})); do_query($form, $dbh, $query, @values); @@ -979,7 +998,7 @@ sub post_invoice { # add shipto $form->{name} = $form->{customer}; - $form->{name} =~ s/--$form->{customer_id}//; + $form->{name} =~ s/--\Q$form->{customer_id}\E//; if (!$form->{shipto_id}) { $form->add_shipto($dbh, $form->{id}, "AR"); @@ -990,6 +1009,36 @@ sub post_invoice { Common::webdav_folder($form) if ($main::webdav); + # Link this record to the records it was created from. + RecordLinks->create_links('dbh' => $dbh, + 'mode' => 'ids', + 'from_table' => 'oe', + 'from_ids' => $form->{convert_from_oe_ids}, + 'to_table' => 'ar', + 'to_id' => $form->{id}, + ); + delete $form->{convert_from_oe_ids}; + + my @convert_from_do_ids = map { $_ * 1 } grep { $_ } split m/\s+/, $form->{convert_from_do_ids}; + + if (scalar @convert_from_do_ids) { + DO->close_orders('dbh' => $dbh, + 'ids' => \@convert_from_do_ids); + + RecordLinks->create_links('dbh' => $dbh, + 'mode' => 'ids', + 'from_table' => 'delivery_orders', + 'from_ids' => \@convert_from_do_ids, + 'to_table' => 'ar', + 'to_id' => $form->{id}, + ); + } + delete $form->{convert_from_do_ids}; + + ARAP->close_orders_if_billed('dbh' => $dbh, + 'arap_id' => $form->{id}, + 'table' => 'ar',); + my $rc = 1; if (!$provided_dbh) { $dbh->commit(); @@ -1121,7 +1170,7 @@ sub process_assembly { WHERE (a.id = ?)|; my $sth = prepare_execute_query($form, $dbh, $query, conv_i($id)); - while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { + while (my $ref = $sth->fetchrow_hashref('NAME_lc')) { my $allocated = 0; @@ -1144,7 +1193,7 @@ sub process_assembly { $query = qq|INSERT INTO invoice (trans_id, description, parts_id, qty, sellprice, fxsellprice, allocated, assemblyitem, unit) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)|; - @values = (conv_i($form->{id}), $ref->{description}, conv_i($ref->{parts_id}), $ref->{qty}, 0, 0, $allocated, 't', $ref->{unit}); + my @values = (conv_i($form->{id}), $ref->{description}, conv_i($ref->{parts_id}), $ref->{qty}, 0, 0, $allocated, 't', $ref->{unit}); do_query($form, $dbh, $query, @values); } @@ -1179,7 +1228,7 @@ sub cogs { my $allocated = 0; my $qty; - while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { + while (my $ref = $sth->fetchrow_hashref('NAME_lc')) { if (($qty = (($ref->{base_qty} * -1) - $ref->{allocated})) > $totalqty) { $qty = $totalqty; } @@ -1188,16 +1237,16 @@ sub cogs { # total expenses and inventory # sellprice is the cost of the item - $linetotal = $form->round_amount(($ref->{sellprice} * $qty) / $basefactor, 2); + my $linetotal = $form->round_amount(($ref->{sellprice} * $qty) / $basefactor, 2); if (!$main::eur) { $ref->{expense_accno} = ($form->{"expense_accno_$row"}) ? $form->{"expense_accno_$row"} : $ref->{expense_accno}; # add to expense - $form->{amount}{ $form->{id} }{ $ref->{expense_accno} } += -$linetotal; + $form->{amount_cogs}{ $form->{id} }{ $ref->{expense_accno} } += -$linetotal; $form->{expense_inventory} .= " " . $ref->{expense_accno}; $ref->{inventory_accno} = ($form->{"inventory_accno_$row"}) ? $form->{"inventory_accno_$row"} : $ref->{inventory_accno}; # deduct inventory - $form->{amount}{ $form->{id} }{ $ref->{inventory_accno} } -= -$linetotal; + $form->{amount_cogs}{ $form->{id} }{ $ref->{inventory_accno} } -= -$linetotal; $form->{expense_inventory} .= " " . $ref->{inventory_accno}; } @@ -1227,20 +1276,9 @@ sub reverse_invoice { WHERE i.trans_id = ?|; my $sth = prepare_execute_query($form, $dbh, $query, conv_i($form->{"id"})); - while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { - - if ($ref->{inventory_accno_id} || $ref->{assembly}) { - - # if the invoice item is not an assemblyitem adjust parts onhand - if (!$ref->{assemblyitem}) { - - # adjust onhand in parts table - $form->update_balance($dbh, "parts", "onhand", qq|id = $ref->{parts_id}|, $ref->{qty}); - } - - # loop if it is an assembly - next if ($ref->{assembly}); + while (my $ref = $sth->fetchrow_hashref('NAME_lc')) { + if ($ref->{inventory_accno_id}) { # de-allocated purchases $query = qq|SELECT i.id, i.trans_id, i.allocated @@ -1249,8 +1287,8 @@ sub reverse_invoice { ORDER BY i.trans_id DESC|; my $sth2 = prepare_execute_query($form, $dbh, $query, conv_i($ref->{"parts_id"})); - while (my $inhref = $sth2->fetchrow_hashref(NAME_lc)) { - $qty = $ref->{qty}; + while (my $inhref = $sth2->fetchrow_hashref('NAME_lc')) { + my $qty = $ref->{qty}; if (($ref->{qty} - $inhref->{allocated}) > 0) { $qty = $inhref->{allocated}; } @@ -1267,7 +1305,7 @@ sub reverse_invoice { $sth->finish; # delete acc_trans - @values = (conv_i($form->{id})); + my @values = (conv_i($form->{id})); do_query($form, $dbh, qq|DELETE FROM acc_trans WHERE trans_id = ?|, @values); do_query($form, $dbh, qq|DELETE FROM invoice WHERE trans_id = ?|, @values); @@ -1308,7 +1346,7 @@ sub delete_invoice { $dbh->disconnect; if ($rc) { - map { unlink "$spool/$_" if -f "$spool/$_"; } @{ $spoolfiles }; + map { unlink "$spool/$_" if -f "$spool/$_"; } @spoolfiles; } $main::lxdebug->leave_sub(); @@ -1382,7 +1420,7 @@ sub retrieve_invoice { $query = qq|SELECT printed, emailed, spoolfile, formname FROM status WHERE trans_id = ?|; $sth = prepare_execute_query($form, $dbh, $query, $id); - while ($ref = $sth->fetchrow_hashref(NAME_lc)) { + while ($ref = $sth->fetchrow_hashref('NAME_lc')) { $form->{printed} .= "$ref->{formname} " if $ref->{printed}; $form->{emailed} .= "$ref->{formname} " if $ref->{emailed}; $form->{queued} .= "$ref->{formname} $ref->{spoolfile} " if $ref->{spoolfile}; @@ -1405,7 +1443,7 @@ sub retrieve_invoice { 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, - i.description, i.longdescription, i.qty, i.fxsellprice AS sellprice, i.discount, i.parts_id AS id, i.unit, i.deliverydate, + i.description, i.longdescription, i.qty, i.fxsellprice AS sellprice, i.discount, i.parts_id AS id, i.unit, i.deliverydate AS reqdate, i.project_id, i.serialnumber, i.id AS invoice_pos, i.pricegroup_id, i.ordnumber, i.transdate, i.cusordnumber, i.subtotal, i.lastcost, i.price_factor_id, i.price_factor, i.marge_price_factor, p.partnumber, p.assembly, p.bin, p.notes AS partnotes, p.inventory_accno_id AS part_inventory_accno_id, p.formel, @@ -1425,7 +1463,7 @@ sub retrieve_invoice { $sth = prepare_execute_query($form, $dbh, $query, $id); - while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { + while (my $ref = $sth->fetchrow_hashref('NAME_lc')) { map({ delete($ref->{$_}); } qw(inventory_accno inventory_new_chart inventory_valid)) if !$ref->{"part_inventory_accno_id"}; delete($ref->{"part_inventory_accno_id"}); @@ -1450,7 +1488,7 @@ sub retrieve_invoice { my $stw = prepare_execute_query($form, $dbh, $query, $accno_id); $ref->{taxaccounts} = ""; my $i=0; - while ($ptr = $stw->fetchrow_hashref(NAME_lc)) { + while (my $ptr = $stw->fetchrow_hashref('NAME_lc')) { if (($ptr->{accno} eq "") && ($ptr->{rate} == 0)) { $i++; @@ -1458,7 +1496,7 @@ sub retrieve_invoice { } $ref->{taxaccounts} .= "$ptr->{accno} "; - if (!($form->{taxaccounts} =~ /$ptr->{accno}/)) { + if (!($form->{taxaccounts} =~ /\Q$ptr->{accno}\E/)) { $form->{"$ptr->{accno}_rate"} = $ptr->{rate}; $form->{"$ptr->{accno}_description"} = $ptr->{taxdescription}; $form->{"$ptr->{accno}_taxnumber"} = $ptr->{taxnumber}; @@ -1513,19 +1551,25 @@ sub get_customer { } my $cid = conv_i($form->{customer_id}); + my $payment_id; + + if ($form->{payment_id}) { + $payment_id = "(pt.id = ?) OR"; + push @values, conv_i($form->{payment_id}); + } # get customer $query = qq|SELECT - c.name AS customer, c.discount, c.creditlimit, c.terms, - c.email, c.cc, c.bcc, c.language_id, c.payment_id AS customer_payment_id, + c.id AS customer_id, c.name AS customer, c.discount, c.creditlimit, c.terms, + c.email, c.cc, c.bcc, c.language_id, c.payment_id, c.street, c.zipcode, c.city, c.country, c.notes AS intnotes, c.klass as customer_klass, c.taxzone_id, c.salesman_id, $duedate + COALESCE(pt.terms_netto, 0) AS duedate, b.discount AS tradediscount, b.description AS business FROM customer c LEFT JOIN business b ON (b.id = c.business_id) - LEFT JOIN payment_terms pt ON (c.payment_id = pt.id) + LEFT JOIN payment_terms pt ON ($payment_id (c.payment_id = pt.id)) WHERE c.id = ?|; push @values, $cid; $ref = selectfirst_hashref_query($form, $dbh, $query, @values); @@ -1550,23 +1594,6 @@ sub get_customer { $ref = selectfirst_hashref_query($form, $dbh, $query, $cid); map { $form->{$_} = $ref->{$_} } keys %$ref; - #check whether payment_terms are better than old payment_terms - if (($form->{payment_id} ne "") && ($form->{customer_payment_id} ne "")) { - $query = - qq|SELECT - (SELECT ranking FROM payment_terms WHERE id = ?), - (SELECT ranking FROM payment_terms WHERE id = ?)|; - my ($old_ranking, $new_ranking) - = selectrow_query($form, $dbh, $query, conv_i($form->{payment_id}), conv_i($form->{customer_payment_id})); - if ($new_ranking > $old_ranking) { - $form->{payment_id} = $form->{customer_payment_id}; - } - } - - if ($form->{payment_id} eq "") { - $form->{payment_id} = $form->{customer_payment_id}; - } - $form->{creditremaining} = $form->{creditlimit}; $query = qq|SELECT SUM(amount - paid) FROM ar WHERE customer_id = ?|; my ($value) = selectrow_query($form, $dbh, $query, $cid); @@ -1581,7 +1608,7 @@ sub get_customer { WHERE o.customer_id = ? AND o.quotation = '0' AND o.closed = '0'|; - $sth = prepare_execute_query($form, $dbh, $query, $cid); + my $sth = prepare_execute_query($form, $dbh, $query, $cid); while (my ($amount, $exch) = $sth->fetchrow_array) { $exch = 1 unless $exch; @@ -1615,7 +1642,7 @@ sub get_customer { $sth = prepare_execute_query($form, $dbh, $query, $cid, $cid); my $i = 0; - while ($ref = $sth->fetchrow_hashref(NAME_lc)) { + while ($ref = $sth->fetchrow_hashref('NAME_lc')) { if ($ref->{category} eq 'I') { $i++; $form->{"AR_amount_$i"} = "$ref->{accno}--$ref->{description}"; @@ -1732,7 +1759,7 @@ sub retrieve_item { WHERE $where|; my $sth = prepare_execute_query($form, $dbh, $query, @values); - while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { + while (my $ref = $sth->fetchrow_hashref('NAME_lc')) { # In der Buchungsgruppe ist immer ein Bestandskonto verknuepft, auch wenn # es sich um eine Dienstleistung handelt. Bei Dienstleistungen muss das @@ -1755,25 +1782,12 @@ sub retrieve_item { } } - #check whether payment_terms are better than old payment_terms - if (($form->{payment_id} ne "") && ($form->{part_payment_id} ne "")) { - $query = - qq|SELECT - (SELECT ranking FROM payment_terms WHERE id = ?), - (SELECT ranking FROM payment_terms WHERE id = ?)|; - my ($old_ranking, $new_ranking) - = selectrow_query($form, $dbh, $query, conv_i($form->{payment_id}), conv_i($form->{part_payment_id})); - if ($new_ranking > $old_ranking) { - $form->{payment_id} = $form->{customer_payment_id}; - } - } - if ($form->{payment_id} eq "") { $form->{payment_id} = $form->{part_payment_id}; } # get tax rates and description - $accno_id = ($form->{vc} eq "customer") ? $ref->{income_accno} : $ref->{expense_accno}; + my $accno_id = ($form->{vc} eq "customer") ? $ref->{income_accno} : $ref->{expense_accno}; $query = qq|SELECT c.accno, t.taxdescription, t.rate, t.taxnumber FROM tax t @@ -1787,21 +1801,21 @@ sub retrieve_item { LIMIT 1) ORDER BY c.accno|; @values = ($accno_id, $transdate eq "current_date" ? "now" : $transdate); - $stw = $dbh->prepare($query); + my $stw = $dbh->prepare($query); $stw->execute(@values) || $form->dberror($query); $ref->{taxaccounts} = ""; my $i = 0; - while ($ptr = $stw->fetchrow_hashref(NAME_lc)) { + while (my $ptr = $stw->fetchrow_hashref('NAME_lc')) { - # if ($customertax{$ref->{accno}}) { + # if ($customertax{$ref->{accno}}) if (($ptr->{accno} eq "") && ($ptr->{rate} == 0)) { $i++; $ptr->{accno} = $i; } $ref->{taxaccounts} .= "$ptr->{accno} "; - if (!($form->{taxaccounts} =~ /$ptr->{accno}/)) { + if (!($form->{taxaccounts} =~ /\Q$ptr->{accno}\E/)) { $form->{"$ptr->{accno}_rate"} = $ptr->{rate}; $form->{"$ptr->{accno}_description"} = $ptr->{taxdescription}; $form->{"$ptr->{accno}_taxnumber"} = $ptr->{taxnumber}; @@ -1842,6 +1856,8 @@ sub retrieve_item { } } + $ref->{onhand} *= 1; + push @{ $form->{item_list} }, $ref; if ($form->{lizenzen}) { @@ -1851,7 +1867,7 @@ sub retrieve_item { FROM license l WHERE l.parts_id = ? AND NOT l.id IN (SELECT li.license_id FROM licenseinvoice li)|; my $stw = prepare_execute_query($form, $dbh, $query, conv_i($ref->{id})); - while (my $ptr = $stw->fetchrow_hashref(NAME_lc)) { + while (my $ptr = $stw->fetchrow_hashref('NAME_lc')) { push @{ $form->{LIZENZEN}{ $ref->{id} } }, $ptr; } $stw->finish; @@ -1882,8 +1898,6 @@ sub get_pricegroups_for_parts { my $i = 1; my $id = 0; - my $dimension_units = AM->retrieve_units($myconfig, $form, "dimension"); - my $service_units = AM->retrieve_units($myconfig, $form, "service"); my $all_units = AM->retrieve_units($myconfig, $form); while (($form->{"id_$i"}) or ($form->{"new_id_$i"})) { $form->{"PRICES"}{$i} = []; @@ -1895,15 +1909,15 @@ sub get_pricegroups_for_parts { $id = $form->{"new_id_$i"}; } - ($price, $selectedpricegroup_id) = split(/--/, + my ($price, $selectedpricegroup_id) = split(/--/, $form->{"sellprice_pg_$i"}); - $pricegroup_old = $form->{"pricegroup_old_$i"}; + my $pricegroup_old = $form->{"pricegroup_old_$i"}; $form->{"new_pricegroup_$i"} = $selectedpricegroup_id; $form->{"old_pricegroup_$i"} = $pricegroup_old; - $price_new = $form->{"price_new_$i"}; - $price_old = $form->{"price_old_$i"}; + my $price_new = $form->{"price_new_$i"}; + my $price_old = $form->{"price_old_$i"}; if (!$form->{"unit_old_$i"}) { # Neue Ware aus der Datenbank. In diesem Fall ist unit_$i die @@ -1916,9 +1930,8 @@ sub get_pricegroups_for_parts { # vergleichen und bei Unterschied den Preis entsprechend umrechnen. $form->{"selected_unit_$i"} = $form->{"unit_$i"} unless ($form->{"selected_unit_$i"}); - my $check_units = $form->{"inventory_accno_$i"} ? $dimension_units : $service_units; - if (!$check_units->{$form->{"selected_unit_$i"}} || - ($check_units->{$form->{"selected_unit_$i"}}->{"base_unit"} ne + if (!$all_units->{$form->{"selected_unit_$i"}} || + ($all_units->{$form->{"selected_unit_$i"}}->{"base_unit"} ne $all_units->{$form->{"unit_old_$i"}}->{"base_unit"})) { # Die ausgewaehlte Einheit ist fuer diesen Artikel nicht gueltig # (z.B. Dimensionseinheit war ausgewaehlt, es handelt sich aber @@ -1940,7 +1953,7 @@ sub get_pricegroups_for_parts { $form->{"basefactor_$i"} = 1; } - $query = + my $query = qq|SELECT pricegroup_id, (SELECT p.sellprice FROM parts p WHERE p.id = ?) AS default_sellprice, @@ -1961,10 +1974,10 @@ sub get_pricegroups_for_parts { FROM prices ORDER BY pricegroup|; - @values = (conv_i($id), conv_i($id), conv_i($id), conv_i($id)); + my @values = (conv_i($id), conv_i($id), conv_i($id), conv_i($id)); my $pkq = prepare_execute_query($form, $dbh, $query, @values); - while ($pkr = $pkq->fetchrow_hashref(NAME_lc)) { + while (my $pkr = $pkq->fetchrow_hashref('NAME_lc')) { $pkr->{id} = $id; $pkr->{selected} = '';