X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FGL.pm;h=320be1e7ec4a2dea79b1e970cbe679681cc26960;hb=23f79a876613fabf7f4aa2de230788ebeb840de9;hp=4d75fa1bba9ff44455a016ef95859d1c0b36fe67;hpb=eb693e82824f13052de0e05d8405929a37c286b8;p=kivitendo-erp.git diff --git a/SL/GL.pm b/SL/GL.pm index 4d75fa1bb..320be1e7e 100644 --- a/SL/GL.pm +++ b/SL/GL.pm @@ -41,6 +41,8 @@ package GL; use Data::Dumper; use SL::DBUtils; +use strict; + sub delete_transaction { my ($self, $myconfig, $form) = @_; $main::lxdebug->enter_sub(); @@ -86,7 +88,7 @@ sub post_transaction { $form->{taxincluded} = 0; } - my ($query, $sth); + my ($query, $sth, @values, $taxkey, $rate, $posted); if ($form->{id}) { @@ -196,7 +198,7 @@ sub all_transactions { # connect to database my $dbh = $form->dbconnect($myconfig); - my ($query, $sth, $source, $null); + my ($query, $sth, $source, $null, $space); my ($glwhere, $arwhere, $apwhere) = ("1 = 1", "1 = 1", "1 = 1"); my (@glvalues, @arvalues, @apvalues); @@ -221,9 +223,9 @@ sub all_transactions { } if ($form->{source}) { - $glwhere .= " AND ac.source ILIKE ?"; - $arwhere .= " AND ac.source ILIKE ?"; - $apwhere .= " AND ac.source ILIKE ?"; + $glwhere .= " AND ac.trans_id IN (SELECT trans_id from acc_trans WHERE source ILIKE ?)"; + $arwhere .= " AND ac.trans_id IN (SELECT trans_id from acc_trans WHERE source ILIKE ?)"; + $apwhere .= " AND ac.trans_id IN (SELECT trans_id from acc_trans WHERE source ILIKE ?)"; push(@glvalues, '%' . $form->{source} . '%'); push(@arvalues, '%' . $form->{source} . '%'); push(@apvalues, '%' . $form->{source} . '%'); @@ -294,7 +296,7 @@ sub all_transactions { push(@apvalues, $project_id, $project_id); } - my ($project_columns, %project_join); + my ($project_columns, $project_join); if ($form->{"l_projectnumbers"}) { $project_columns = qq|, ac.project_id, pr.projectnumber|; $project_join = qq|LEFT JOIN project pr ON (ac.project_id = pr.id)|; @@ -315,13 +317,12 @@ sub all_transactions { } } - my $false = ($myconfig->{dbdriver} eq 'Pg') ? FALSE: q|'0'|; + my $false = ($myconfig->{dbdriver} eq 'Pg') ? "FALSE" : q|'0'|; my %sort_columns = ( 'id' => [ qw(id) ], 'transdate' => [ qw(transdate id) ], 'reference' => [ qw(lower_reference id) ], - 'source' => [ qw(lower_source id) ], 'description' => [ qw(lower_description id) ], 'accno' => [ qw(accno transdate id) ], ); @@ -343,11 +344,11 @@ sub all_transactions { map { $columns_for_sorting{$_} .= sprintf(', lower(%s) AS lower_%s', $lowered_columns{$column}->{$_}, $column) } qw(gl arap); } - my $query = + $query = qq|SELECT - ac.oid AS acoid, g.id, 'gl' AS type, $false AS invoice, g.reference, ac.taxkey, c.link, + ac.acc_trans_id, g.id, 'gl' AS type, $false AS invoice, g.reference, ac.taxkey, c.link, g.description, ac.transdate, ac.source, ac.trans_id, - ac.amount, c.accno, g.notes, t.chart_id, ac.oid + ac.amount, c.accno, g.notes, t.chart_id $project_columns $columns_for_sorting{gl} FROM gl g, acc_trans ac $project_join, chart c @@ -358,9 +359,9 @@ sub all_transactions { UNION - SELECT ac.oid AS acoid, a.id, 'ar' AS type, a.invoice, a.invnumber, ac.taxkey, c.link, + SELECT ac.acc_trans_id, a.id, 'ar' AS type, a.invoice, a.invnumber, ac.taxkey, c.link, ct.name, ac.transdate, ac.source, ac.trans_id, - ac.amount, c.accno, a.notes, t.chart_id, ac.oid + ac.amount, c.accno, a.notes, t.chart_id $project_columns $columns_for_sorting{arap} FROM ar a, acc_trans ac $project_join, customer ct, chart c @@ -372,9 +373,9 @@ sub all_transactions { UNION - SELECT ac.oid AS acoid, a.id, 'ap' AS type, a.invoice, a.invnumber, ac.taxkey, c.link, + SELECT ac.acc_trans_id, a.id, 'ap' AS type, a.invoice, a.invnumber, ac.taxkey, c.link, ct.name, ac.transdate, ac.source, ac.trans_id, - ac.amount, c.accno, a.notes, t.chart_id, ac.oid + ac.amount, c.accno, a.notes, t.chart_id $project_columns $columns_for_sorting{arap} FROM ap a, acc_trans ac $project_join, vendor ct, chart c @@ -384,25 +385,29 @@ sub all_transactions { AND (a.vendor_id = ct.id) AND (a.id = ac.trans_id) - ORDER BY $sortorder, acoid $sortdir|; + ORDER BY $sortorder, acc_trans_id $sortdir|; my @values = (@glvalues, @arvalues, @apvalues); # Show all $query in Debuglevel LXDebug::QUERY - $callingdetails = (caller (0))[3]; - dump_query(LXDebug::QUERY, "$callingdetails", $query, @values); + my $callingdetails = (caller (0))[3]; + dump_query(LXDebug->QUERY(), "$callingdetails", $query, @values); $sth = prepare_execute_query($form, $dbh, $query, @values); my $trans_id = ""; my $trans_id2 = ""; + my $balance; my ($i, $j, $k, $l, $ref, $ref2); $form->{GL} = []; - while (my $ref0 = $sth->fetchrow_hashref(NAME_lc)) { + while (my $ref0 = $sth->fetchrow_hashref("NAME_lc")) { $trans_id = $ref0->{id}; + my $source = $ref0->{source}; + undef($ref0->{source}); + if ($trans_id != $trans_id2) { # first line of a booking if ($trans_id2) { @@ -447,13 +452,12 @@ sub all_transactions { $i = 0; # Debit Tax # AP_tax # VSt $j = 0; # Credit Tax # AR_tax # USt - if ($ref->{chart_id} > 0) { # all tax accounts first line, no line increasing if ($ref->{amount} < 0) { if ($ref->{link} =~ /AR_tax/) { $ref->{credit_tax}{$j} = $ref->{amount}; $ref->{credit_tax_accno}{$j} = $ref->{accno}; - } + } if ($ref->{link} =~ /AP_tax/) { $ref->{debit_tax}{$i} = $ref->{amount} * -1; $ref->{debit_tax_accno}{$i} = $ref->{accno}; @@ -469,26 +473,26 @@ sub all_transactions { } } } else { #all other accounts first line + if ($ref->{amount} < 0) { $ref->{debit}{$k} = $ref->{amount} * -1; $ref->{debit_accno}{$k} = $ref->{accno}; $ref->{debit_taxkey}{$k} = $ref->{taxkey}; $ref->{ac_transdate}{$k} = $ref->{transdate}; - + $ref->{source}{$k} = $source; } else { $ref->{credit}{$l} = $ref->{amount} * 1; $ref->{credit_accno}{$l} = $ref->{accno}; $ref->{credit_taxkey}{$l} = $ref->{taxkey}; $ref->{ac_transdate}{$l} = $ref->{transdate}; - - + $ref->{source}{$l} = $source; } } } else { # following lines of a booking, line increasing $ref2 = $ref0; - $trans_old = $trans_id2; +# $trans_old = $trans_id2; # doesn't seem to be used anymore $trans_id2 = $ref2->{id}; $balance = @@ -533,22 +537,35 @@ sub all_transactions { if ($ref->{debit_accno}{$k} ne "") { $k++; } + if ($ref->{source}{$k} ne "") { + $space = " | "; + } else { + $space = ""; + } $ref->{debit}{$k} = $ref2->{amount} * - 1; $ref->{debit_accno}{$k} = $ref2->{accno}; $ref->{debit_taxkey}{$k} = $ref2->{taxkey}; $ref->{ac_transdate}{$k} = $ref2->{transdate}; + $ref->{source}{$k} = $source . $space . $ref->{source}{$k}; } else { if ($ref->{credit_accno}{$l} ne "") { $l++; } + if ($ref->{source}{$l} ne "") { + $space = " | "; + } else { + $space = ""; + } $ref->{credit}{$l} = $ref2->{amount}; $ref->{credit_accno}{$l} = $ref2->{accno}; $ref->{credit_taxkey}{$l} = $ref2->{taxkey}; $ref->{ac_transdate}{$l} = $ref2->{transdate}; + $ref->{source}{$l} = $ref->{source}{$l} . $space . $source; } } } } + push @{ $form->{GL} }, $ref; $sth->finish; @@ -582,7 +599,7 @@ sub transaction { if ($form->{id}) { $query = qq|SELECT g.reference, g.description, g.notes, g.transdate, g.storno, g.storno_id, - d.description AS department, e.name AS employee, g.taxincluded, g.gldate, + d.description AS department, e.name AS employee, g.taxincluded, g.gldate, g.ob_transaction, g.cb_transaction FROM gl g LEFT JOIN department d ON (d.id = g.department_id) @@ -621,7 +638,7 @@ sub transaction { ORDER BY startdate DESC LIMIT 1)) WHERE (a.trans_id = ?) AND (a.fx_transaction = '0') - ORDER BY a.oid, a.transdate|; + ORDER BY a.acc_trans_id, a.transdate|; $form->{GL} = selectall_hashref_query($form, $dbh, $query, conv_i($form->{id})); } else { @@ -687,7 +704,7 @@ sub storno { # now copy acc_trans entries $query = qq|SELECT * FROM acc_trans WHERE trans_id = ?|; - my $rowref = selectall_hashref_query($form, $dbh, $query, $id); + my $rowref = selectall_hashref_query($form, $dbh, $query, $id); for my $row (@$rowref) { delete @$row{qw(itime mtime)}; @@ -702,4 +719,39 @@ sub storno { $main::lxdebug->leave_sub(); } +sub get_chart_balances { + $main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + Common::check_params(\%params, qw(charts)); + + my $myconfig = \%main::myconfig; + my $form = $main::form; + + my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig); + + my @ids = map { $_->{id} } @{ $params{charts} }; + + if (!@ids) { + $main::lxdebug->leave_sub(); + return; + } + + my $query = qq|SELECT chart_id, SUM(amount) AS sum + FROM acc_trans + WHERE chart_id IN (| . join(', ', ('?') x scalar(@ids)) . qq|) + GROUP BY chart_id|; + + my %balances = selectall_as_map($form, $dbh, $query, 'chart_id', 'sum', @ids); + + foreach my $chart (@{ $params{charts} }) { + $chart->{balance} = $balances{ $chart->{id} } || 0; + } + + $main::lxdebug->leave_sub(); +} + + 1;