From 96d10eccdcde8518cf9cc1ed863be32cf34ccfc2 Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Tue, 20 Feb 2007 09:14:47 +0000 Subject: [PATCH] =?utf8?q?Beim=20Drucken=20von=20Einkaufs-=20und=20Verkauf?= =?utf8?q?sbelegen=20die=20Projektnummern=20aus=20der=20Datenbank=20holen.?= =?utf8?q?=20Liste=20der=20Arrays,=20die=20in=20order=5Fdetails/invoice=5F?= =?utf8?q?details=20aufgebaut=20werden,=20zentral=20angelegt,=20sodass=20b?= =?utf8?q?ei=20"leeren"=20Zeilen=20auch=20wirklich=20alle=20best=C3=BCckt?= =?utf8?q?=20werden=20k=C3=B6nnen,=20ohne=20die=20Liste=20an=20drei=20Orte?= =?utf8?q?n=20bearbeiten=20zu=20m=C3=BCssen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- SL/IS.pm | 51 +++++++++++++++++++++++++++++++++++------ SL/OE.pm | 69 ++++++++++++++++++++++++++++++++++++++------------------ 2 files changed, 91 insertions(+), 29 deletions(-) diff --git a/SL/IS.pm b/SL/IS.pm index 3e72da7aa..aa8ded951 100644 --- a/SL/IS.pm +++ b/SL/IS.pm @@ -58,6 +58,35 @@ sub invoice_details { ($form->{terms}) = $sth->fetchrow_array; $sth->finish; + my (@project_ids, %projectnumbers); + + push(@project_ids, $form->{"globalproject_id"}) if ($form->{"globalproject_id"}); + + # sort items by partsgroup + for $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"}); + } + + if (@project_ids) { + $query = "SELECT id, projectnumber FROM project WHERE id IN (" . + join(", ", map({ "?" } @project_ids)) . ")"; + $sth = $dbh->prepare($query); + $sth->execute(@project_ids) || + $form->dberror($query . " (" . join(", ", @project_ids) . ")"); + while (my $ref = $sth->fetchrow_hashref()) { + $projectnumbers{$ref->{id}} = $ref->{projectnumber}; + } + $sth->finish(); + } + + $form->{"globalprojectnumber"} = + $projectnumbers{$form->{"globalproject_id"}}; + my $tax = 0; my $item; my $i; @@ -91,6 +120,17 @@ sub invoice_details { my $subtotal_header = 0; my $subposition = 0; + my @arrays = + qw(runningnumber number description longdescription qty ship unit bin + deliverydate_oe ordnumber_oe transdate_oe licensenumber validuntil + partnotes serialnumber reqdate sellprice listprice netprice + discount p_discount discount_sub nodiscount_sub + linetotal nodiscount_linetotal tax_rate projectnumber); + + my @tax_arrays = + qw(taxbase tax taxdescription taxrate taxnumber); + + map({ $form->{$_} = [] } (@arrays, @tax_arrays)); foreach $item (sort { $a->[1] cmp $b->[1] } @partsgroup) { $i = $item->[0]; @@ -99,8 +139,7 @@ sub invoice_details { push(@{ $form->{description} }, qq|$item->[1]|); $sameitem = $item->[1]; - map { push(@{ $form->{$_} }, "") } - qw(runningnumber number serialnumber bin partnotes qty unit deliverydate sellprice listprice netprice discount linetotal); + map({ push(@{ $form->{$_} }, "") } grep({ $_ ne "description" } @arrays)); } $form->{"qty_$i"} = $form->parse_amount($myconfig, $form->{"qty_$i"}); @@ -230,8 +269,8 @@ sub invoice_details { push(@{ $form->{nodiscount_linetotal} }, $form->format_amount($myconfig, $nodiscount_linetotal, 2)); + push(@{ $form->{projectnumber} }, $projectnumbers{$form->{"project_id_$i"}}); - @taxaccounts = split / /, $form->{"taxaccounts_$i"}; $taxrate = 0; $taxdiff = 0; @@ -302,8 +341,7 @@ sub invoice_details { while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { if ($form->{groupitems} && $ref->{partsgroup} ne $sameitem) { - map { push(@{ $form->{$_} }, "") } - qw(runningnumber number serialnumber unit qty bin sellprice listprice netprice discount linetotal nodiscount_linetotal); + map({ push(@{ $form->{$_} }, "") } grep({ $_ ne "description" } @arrays)); $sameitem = ($ref->{partsgroup}) ? $ref->{partsgroup} : "--"; push(@{ $form->{description} }, $sameitem); } @@ -314,8 +352,7 @@ sub invoice_details { $form->format_amount($myconfig, $ref->{qty} * $form->{"qty_$i"} ) . qq| -- $form->{"a_partnumber"}, $form->{"a_description"}|); - map { push(@{ $form->{$_} }, "") } - qw(number unit qty runningnumber serialnumber bin sellprice listprice netprice discount linetotal nodiscount_linetotal); + map({ push(@{ $form->{$_} }, "") } grep({ $_ ne "description" } @arrays)); } $sth->finish; diff --git a/SL/OE.pm b/SL/OE.pm index d471a815c..6226a571e 100644 --- a/SL/OE.pm +++ b/SL/OE.pm @@ -935,6 +935,10 @@ sub order_details { my %oid = ('Pg' => 'oid', 'Oracle' => 'rowid'); + my (@project_ids, %projectnumbers); + + push(@project_ids, $form->{"globalproject_id"}) if ($form->{"globalproject_id"}); + # sort items by partsgroup for $i (1 .. $form->{rowcount}) { $partsgroup = ""; @@ -942,8 +946,35 @@ sub order_details { $partsgroup = $form->{"partsgroup_$i"}; } push @partsgroup, [$i, $partsgroup]; + push(@project_ids, $form->{"project_id_$i"}) if ($form->{"project_id_$i"}); + } + + if (@project_ids) { + $query = "SELECT id, projectnumber FROM project WHERE id IN (" . + join(", ", map({ "?" } @project_ids)) . ")"; + $sth = $dbh->prepare($query); + $sth->execute(@project_ids) || + $form->dberror($query . " (" . join(", ", @project_ids) . ")"); + while (my $ref = $sth->fetchrow_hashref()) { + $projectnumbers{$ref->{id}} = $ref->{projectnumber}; + } + $sth->finish(); } + $form->{"globalprojectnumber"} = + $projectnumbers{$form->{"globalproject_id"}}; + + 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); + + my @tax_arrays = + qw(taxbase tax taxdescription taxrate taxnumber); + + map({ $form->{$_} = [] } (@arrays, @tax_arrays)); + my $sameitem = ""; foreach $item (sort { $a->[1] cmp $b->[1] } @partsgroup) { $i = $item->[0]; @@ -952,10 +983,7 @@ sub order_details { push(@{ $form->{description} }, qq|$item->[1]|); $sameitem = $item->[1]; - map { push(@{ $form->{$_} }, "") } - qw(runningnumber number qty ship unit bin partnotes - serialnumber reqdate sellprice listprice netprice - discount p_discount linetotal); + map({ push(@{ $form->{$_} }, "") } grep({ $_ ne "description" } @arrays)); } $form->{"qty_$i"} = $form->parse_amount($myconfig, $form->{"qty_$i"}); @@ -1036,7 +1064,7 @@ sub order_details { push(@{ $form->{p_discount} }, $form->{"discount_$i"}); $form->{ordtotal} += $linetotal; - $discount_subtotal += $linetotal; + $discount_subtotal += $linetotal; $form->{nodiscount_total} += $nodiscount_linetotal; $nodiscount_subtotal += $nodiscount_linetotal; $form->{discount_total} += $form->parse_amount($myconfig, $discount); @@ -1062,6 +1090,8 @@ sub order_details { push(@{ $form->{nodiscount_linetotal} }, $form->format_amount($myconfig, $nodiscount_linetotal, 2)); + push(@{ $form->{projectnumber} }, $projectnumbers{$form->{"project_id_$i"}}); + my ($taxamount, $taxbase); my $taxrate = 0; @@ -1114,10 +1144,8 @@ sub order_details { while (my $ref = $sth->fetchrow_hashref(NAME_lc)) { if ($form->{groupitems} && $ref->{partsgroup} ne $sameitem) { - map { push(@{ $form->{$_} }, "") } - qw(runningnumber ship bin serialnumber number unit bin qty - reqdate sellprice listprice netprice discount p_discount - linetotal nodiscount_linetotal); + map({ push(@{ $form->{$_} }, "") } + grep({ $_ ne "description" } @arrays)); $sameitem = ($ref->{partsgroup}) ? $ref->{partsgroup} : "--"; push(@{ $form->{description} }, $sameitem); } @@ -1127,11 +1155,8 @@ sub order_details { ) . qq|, $ref->{partnumber}, $ref->{description}|); - map { push(@{ $form->{$_} }, "") } - qw(number unit qty runningnumber ship bin serialnumber reqdate - sellprice listprice netprice discount p_discount linetotal - nodiscount_linetotal); - + map({ push(@{ $form->{$_} }, "") } + grep({ $_ ne "description" } @arrays)); } $sth->finish; } @@ -1141,16 +1166,16 @@ sub order_details { my $tax = 0; foreach $item (sort keys %taxaccounts) { - push(@{ $form->{taxbase} }, - $form->format_amount($myconfig, $taxbase{$item}, 2)); + push(@{ $form->{taxbase} }, + $form->format_amount($myconfig, $taxbase{$item}, 2)); - $tax += $taxamount = $form->round_amount($taxaccounts{$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"}); - push(@{ $form->{taxrate} }, - $form->format_amount($myconfig, $form->{"${item}_rate"} * 100)); - push(@{ $form->{taxnumber} }, $form->{"${item}_taxnumber"}); + push(@{ $form->{tax} }, $form->format_amount($myconfig, $taxamount, 2)); + push(@{ $form->{taxdescription} }, $form->{"${item}_description"}); + push(@{ $form->{taxrate} }, + $form->format_amount($myconfig, $form->{"${item}_rate"} * 100)); + push(@{ $form->{taxnumber} }, $form->{"${item}_taxnumber"}); } $form->{subtotal} = $form->format_amount($myconfig, $form->{total}, 2); $yesdiscount = $form->{nodiscount_total} - $nodiscount; -- 2.20.1