X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/cfc6a60d53597f6a879b28af37f84b4b5fa4cc6b..7712480e4a082f84a2229f5b1a90d79a6c01255b:/SL/IS.pm diff --git a/SL/IS.pm b/SL/IS.pm index da23eb4d9..6b69bb249 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,15 @@ 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); foreach $item (sort { $a->[1] cmp $b->[1] } @partsgroup) { $i = $item->[0]; @@ -99,8 +137,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 +267,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 +339,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 +350,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; @@ -330,7 +365,7 @@ sub invoice_details { $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->{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"}); @@ -408,7 +443,7 @@ sub customer_details { } # get rest for the customer - my $query = qq|SELECT ct.*, cp.*, ct.notes as customernotes + my $query = qq|SELECT ct.*, cp.*, ct.notes as customernotes, ct.phone AS customerphone, ct.fax AS customerfax, ct.email AS customeremail FROM customer ct LEFT JOIN contacts cp on ct.id = cp.cp_cv_id WHERE ct.id = $form->{customer_id} $contact order by cp.cp_id limit 1|; @@ -515,6 +550,12 @@ sub post_invoice { ($form->{id}) = $sth->fetchrow_array; $sth->finish; + + if (!$form->{invnumber}) { + $form->{invnumber} = + $form->update_defaults($myconfig, $form->{type} eq "credit_note" ? + "cnnumber" : "invnumber", $dbh); + } } map { $form->{$_} =~ s/\'/\'\'/g } @@ -704,7 +745,7 @@ sub post_invoice { '$form->{"description_$i"}', '$form->{"longdescription_$i"}', $form->{"qty_$i"}, $form->{"sellprice_$i"}, $fxsellprice, $form->{"discount_$i"}, $allocated, 'f', - '$form->{"unit_$i"}', $deliverydate, | . conv_i($form->{"project_id_$i"}) . qq|, + '$form->{"unit_$i"}', $deliverydate, | . conv_i($form->{"project_id_$i"}, 'NULL') . qq|, '$form->{"serialnumber_$i"}', '$pricegroup_id', '$form->{"ordnumber_$i"}', '$form->{"transdate_$i"}', '$form->{"cusordnumber_$i"}', $baseqty, '$subtotal')|; $dbh->do($query) || $form->dberror($query); @@ -797,6 +838,8 @@ sub post_invoice { $form->{exchangerate}, 0); } + $project_id = conv_i($form->{"globalproject_id"}); + foreach my $trans_id (keys %{ $form->{amount} }) { foreach my $accno (keys %{ $form->{amount}{$trans_id} }) { next unless ($form->{expense_inventory} =~ /$accno/); @@ -806,12 +849,12 @@ sub post_invoice { ) != 0 ) { $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, - transdate, taxkey) + transdate, taxkey, project_id) VALUES ($trans_id, (SELECT c.id FROM chart c WHERE c.accno = '$accno'), $form->{amount}{$trans_id}{$accno}, '$form->{invdate}', - (SELECT taxkey_id FROM chart WHERE accno = '$accno'))|; - $dbh->do($query) || $form->dberror($query); + (SELECT taxkey_id FROM chart WHERE accno = '$accno'), ?)|; + do_query($form, $dbh, $query, $project_id); $form->{amount}{$trans_id}{$accno} = 0; } } @@ -823,12 +866,12 @@ sub post_invoice { ) != 0 ) { $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, - transdate, taxkey) + transdate, taxkey, project_id) VALUES ($trans_id, (SELECT id FROM chart WHERE accno = '$accno'), $form->{amount}{$trans_id}{$accno}, '$form->{invdate}', - (SELECT taxkey_id FROM chart WHERE accno = '$accno'))|; - $dbh->do($query) || $form->dberror($query); + (SELECT taxkey_id FROM chart WHERE accno = '$accno'), ?)|; + do_query($form, $dbh, $query, $project_id); } } } @@ -877,23 +920,23 @@ sub post_invoice { if ($form->{amount}{ $form->{id} }{ $form->{AR} } != 0) { $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, - transdate) + transdate, project_id) VALUES ($form->{id}, (SELECT c.id FROM chart c WHERE c.accno = '$form->{AR}'), - $amount, '$form->{"datepaid_$i"}')|; - $dbh->do($query) || $form->dberror($query); + $amount, '$form->{"datepaid_$i"}', ?)|; + do_query($form, $dbh, $query, $project_id); } # record payment $form->{"paid_$i"} *= -1; $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, - source, memo) + source, memo, project_id) VALUES ($form->{id}, (SELECT c.id FROM chart c WHERE c.accno = '$accno'), $form->{"paid_$i"}, '$form->{"datepaid_$i"}', - '$form->{"source_$i"}', '$form->{"memo_$i"}')|; - $dbh->do($query) || $form->dberror($query); + '$form->{"source_$i"}', '$form->{"memo_$i"}', ?)|; + do_query($form, $dbh, $query, $project_id); # exchangerate difference $form->{fx}{$accno}{ $form->{"datepaid_$i"} } += @@ -933,12 +976,12 @@ sub post_invoice { ) { $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, - transdate, cleared, fx_transaction) + transdate, cleared, fx_transaction, project_id) VALUES ($form->{id}, (SELECT c.id FROM chart c WHERE c.accno = '$accno'), - $form->{fx}{$accno}{$transdate}, '$transdate', '0', '1')|; - $dbh->do($query) || $form->dberror($query); + $form->{fx}{$accno}{$transdate}, '$transdate', '0', '1', ?)|; + do_query($form, $dbh, $query, $project_id); } } } @@ -1071,6 +1114,8 @@ sub post_payment { $form->get_exchangerate($dbh, $form->{currency}, $form->{invdate}, "buy"); + my $project_id = conv_i($form->{"globalproject_id"}); + # record payments and offsetting AR for my $i (1 .. $form->{paidaccounts}) { @@ -1105,11 +1150,11 @@ sub post_payment { $dbh->do($query) || $form->dberror($query); $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, - transdate) + transdate, project_id) VALUES ($form->{id}, (SELECT c.id FROM chart c WHERE c.accno = '$form->{AR}'), - $amount, '$form->{"datepaid_$i"}')|; - $dbh->do($query) || $form->dberror($query); + $amount, '$form->{"datepaid_$i"}', ?)|; + do_query($form, $dbh, $query, $project_id); # record payment @@ -1120,12 +1165,12 @@ sub post_payment { $dbh->do($query) || $form->dberror($query); $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, - source, memo) + source, memo, project_id) VALUES ($form->{id}, (SELECT c.id FROM chart c WHERE c.accno = '$accno'), $form->{"paid_$i"}, '$form->{"datepaid_$i"}', - '$form->{"source_$i"}', '$form->{"memo_$i"}')|; - $dbh->do($query) || $form->dberror($query); + '$form->{"source_$i"}', '$form->{"memo_$i"}', ?)|; + do_query($form, $dbh, $query, $project_id); # gain/loss @@ -1163,12 +1208,12 @@ sub post_payment { WHERE c.accno = '$accno') AND amount=$form->{fx}{$accno}{$transdate} AND transdate='$transdate' AND cleared='0' AND fx_transaction='1'|; $dbh->do($query) || $form->dberror($query); $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, - transdate, cleared, fx_transaction) + transdate, cleared, fx_transaction, project_id) VALUES ($form->{id}, (SELECT c.id FROM chart c WHERE c.accno = '$accno'), - $form->{fx}{$accno}{$transdate}, '$transdate', '0', '1')|; - $dbh->do($query) || $form->dberror($query); + $form->{fx}{$accno}{$transdate}, '$transdate', '0', '1', ?)|; + do_query($form, $dbh, $query, $project_id); } } } @@ -1817,8 +1862,7 @@ sub get_customer { $form->{"AR_amount_$i"} = "$ref->{accno}--$ref->{description}"; } if ($ref->{category} eq 'A') { - $form->{ARselected} = $form->{AR_1} = - "$ref->{accno}--$ref->{description}"; + $form->{ARselected} = $form->{AR_1} = $ref->{accno}; } } $sth->finish;