From f1e5fd2d8c139e903899a984cf4b116afb2efd47 Mon Sep 17 00:00:00 2001 From: Udo Spallek Date: Tue, 8 Nov 2005 21:46:15 +0000 Subject: [PATCH] Neuer Patch gegen den Unbalanced Ledger! Betr. Bugzilla ID 124 --- SL/GL.pm | 124 +++++++++++++++++++++++++++---------------------------- 1 file changed, 60 insertions(+), 64 deletions(-) diff --git a/SL/GL.pm b/SL/GL.pm index 486bc71da..50358d264 100644 --- a/SL/GL.pm +++ b/SL/GL.pm @@ -298,22 +298,19 @@ sub all_transactions { ($form->{ml}) = $sth->fetchrow_array; $sth->finish; - #if ($form->{datefrom}) { + if ($form->{datefrom}) { $query = qq|SELECT SUM(ac.amount) FROM acc_trans ac, chart c WHERE ac.chart_id = c.id - AND c.accno = '$form->{accno}'|; - $query .= qq|AND ac.transdate > date '$form->{datefrom}' - | if ($form->{datefrom});; - $query .= qq|AND ac.transdate < date '$form->{dateto}' - | if ($form->{dateto}); - + AND c.accno = '$form->{accno}' + AND ac.transdate < date '$form->{datefrom}' + |; $sth = $dbh->prepare($query); $sth->execute || $form->dberror($query); ($form->{balance}) = $sth->fetchrow_array; $sth->finish; - #} + } } if ($form->{gifi_accno}) { @@ -348,7 +345,7 @@ sub all_transactions { my $query = qq|SELECT g.id, 'gl' AS type, $false AS invoice, g.reference, ac.taxkey, t.taxkey AS sorttax, g.description, ac.transdate, ac.source, ac.trans_id, - ac.amount*100 AS amount, c.accno, c.gifi_accno, g.notes, t.chart_id, ac.oid + ac.amount, c.accno, c.gifi_accno, g.notes, t.chart_id, ac.oid FROM gl g, acc_trans ac, chart c LEFT JOIN tax t ON (t.chart_id=c.id) WHERE $glwhere @@ -357,7 +354,7 @@ sub all_transactions { UNION SELECT a.id, 'ar' AS type, a.invoice, a.invnumber, ac.taxkey, t.taxkey AS sorttax, ct.name, ac.transdate, ac.source, ac.trans_id, - ac.amount*100 AS amount, c.accno, c.gifi_accno, a.notes, t.chart_id, ac.oid + ac.amount, c.accno, c.gifi_accno, a.notes, t.chart_id, ac.oid FROM ar a, acc_trans ac, customer ct, chart c LEFT JOIN tax t ON (t.chart_id=c.id) WHERE $arwhere @@ -367,7 +364,7 @@ sub all_transactions { UNION SELECT a.id, 'ap' AS type, a.invoice, a.invnumber, ac.taxkey, t.taxkey AS sorttax, ct.name, ac.transdate, ac.source, ac.trans_id, - ac.amount*100 AS amount, c.accno, c.gifi_accno, a.notes, t.chart_id, ac.oid + ac.amount, c.accno, c.gifi_accno, a.notes, t.chart_id, ac.oid FROM ap a, acc_trans ac, vendor ct, chart c LEFT JOIN tax t ON (t.chart_id=c.id) WHERE $apwhere @@ -404,78 +401,77 @@ sub all_transactions { } } $balance = $ref->{amount}; - $ref->{amount} = $ref->{amount} * 1.0; $i = 0; $j = 0; $k = 0; $l = 0; if ($ref->{amount} < 0) { if ($ref->{chart_id} > 0) { - $ref->{debit_tax}{$i} = ($ref->{amount} / 100.0) * -1; + $ref->{debit_tax}{$i} = $ref->{amount} * -1; $ref->{debit_tax_accno}{$i} = $ref->{accno}; } else { - $ref->{debit}{$k} = ($ref->{amount} / 100.0) * -1; + $ref->{debit}{$k} = $ref->{amount} * -1; $ref->{debit_accno}{$k} = $ref->{accno}; $ref->{debit_taxkey}{$k} = $ref->{taxkey}; } } else { if ($ref->{chart_id} > 0) { - $ref->{credit_tax}{$j} = $ref->{amount} / 100.0; + $ref->{credit_tax}{$j} = $ref->{amount}; $ref->{credit_tax_accno}{$j} = $ref->{accno}; } else { - $ref->{credit}{$l} = $ref->{amount} / 100.0; + $ref->{credit}{$l} = $ref->{amount}; $ref->{credit_accno}{$l} = $ref->{accno}; $ref->{credit_taxkey}{$l} = $ref->{taxkey}; } } -# if ($form->{accno} eq ''){ # flo & udo: if general report, - # then check balance - -# while ($balance != 0) { -# my $ref2 = $sth->fetchrow_hashref(NAME_lc) -# || $form->error(sprintf("Unbalanced ledger! trans-id: %i", $ref->{trans_id})); -# -# $balance = -# (int($balance * 100000) + int(100000 * $ref2->{amount})) / 100000; -# $balance += $ref2->{amount}; - - #print(STDERR $balance, " BAlance\n"); - #print(STDERR $ref2->{amount}, " Ref2->amount\n"); -# if ($ref2->{amount} < 0) { -# if ($ref2->{chart_id} > 0) { -# if ($ref->{debit_tax_accno}{$i} ne "") { -# $i++; -# } -# $ref->{debit_tax}{$i} = ($ref2->{amount} / 100.0) * -1; -# $ref->{debit_tax_accno}{$i} = $ref2->{accno}; -# } else { -# if ($ref->{debit_accno}{$k} ne "") { -# $k++; -# } -# $ref->{debit}{$k} = ($ref2->{amount} / 100.0) * -1; -# $ref->{debit_accno}{$k} = $ref2->{accno}; -# $ref->{debit_taxkey}{$k} = $ref2->{taxkey}; -# } -# } else { -# if ($ref2->{chart_id} > 0) { -# if ($ref->{credit_tax_accno}{$j} ne "") { -# $j++; -# } -# $ref->{credit_tax}{$j} = $ref2->{amount} / 100.0; -# $ref->{credit_tax_accno}{$j} = $ref2->{accno}; -# } else { -# if ($ref->{credit_accno}{$l} ne "") { -# $l++; -# } -# $ref->{credit}{$l} = $ref2->{amount} / 100.0; -# $ref->{credit_accno}{$l} = $ref2->{accno}; -# $ref->{credit_taxkey}{$l} = $ref2->{taxkey}; -# } -# } -# } -# } else { -# 1; -# } + if ($form->{accno} eq ''){ # flo & udo: if general report, + # then check balance + while (abs($balance) >= 0.015) { + my $ref2 = $sth->fetchrow_hashref(NAME_lc) + || $form->error("Unbalanced ledger!"); + + $balance = + (int($balance * 100000) + int(100000 * $ref2->{amount})) / 100000; + print(STDERR $balance, " BAlance\n"); + print(STDERR $ref2->{amount}, " Ref2->amount\n"); + if ($ref2->{amount} < 0) { + if ($ref2->{chart_id} > 0) { + if ($ref->{debit_tax_accno}{$i} ne "") { + $i++; + } + $ref->{debit_tax}{$i} = $ref2->{amount} * -1; + $ref->{debit_tax_accno}{$i} = $ref2->{accno}; + } else { + if ($ref->{debit_accno}{$k} ne "") { + $k++; + } + $ref->{debit}{$k} = $ref2->{amount} * -1; + $ref->{debit_accno}{$k} = $ref2->{accno}; + $ref->{debit_taxkey}{$k} = $ref2->{taxkey}; + } + } else { + if ($ref2->{chart_id} > 0) { + if ($ref->{credit_tax_accno}{$j} ne "") { + $j++; + } + $ref->{credit_tax}{$j} = $ref2->{amount}; + $ref->{credit_tax_accno}{$j} = $ref2->{accno}; + } else { + if ($ref->{credit_accno}{$l} ne "") { + $l++; + } + $ref->{credit}{$l} = $ref2->{amount}; + $ref->{credit_accno}{$l} = $ref2->{accno}; + $ref->{credit_taxkey}{$l} = $ref2->{taxkey}; + } + } + } + } else { + # if account-report, then calculate the Balance?! + # ToDo: Calculate the Balance + 1; + } + # print(STDERR Dumper($ref)); push @{ $form->{GL} }, $ref; $balance = 0; -- 2.20.1