X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FGL.pm;h=db9d9aec9e98b31a67ec2bf975b2056f758b4b0c;hb=bc71c253714824c3f1bd5749958302dce5555762;hp=28c503043ffce5aa0c9d00049dd572e272f42139;hpb=e2305bab05a1affd9b2ca7ca93d0194da68e796d;p=kivitendo-erp.git diff --git a/SL/GL.pm b/SL/GL.pm index 28c503043..db9d9aec9 100644 --- a/SL/GL.pm +++ b/SL/GL.pm @@ -120,7 +120,7 @@ sub post_transaction { WHERE id = ?|; @values = ($form->{reference}, $form->{description}, $form->{notes}, - conv_date($form->{transdate}), $department_id, $form->{taxincluded}, + conv_date($form->{transdate}), $department_id, $form->{taxincluded} ? 't' : 'f', $form->{storno} ? 't' : 'f', conv_i($form->{storno_id}), $form->{ob_transaction} ? 't' : 'f', $form->{cb_transaction} ? 't' : 'f', conv_i($form->{id})); do_query($form, $dbh, $query, @values); @@ -221,9 +221,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} . '%'); @@ -272,15 +272,9 @@ sub all_transactions { } if ($form->{category} ne 'X') { - $glwhere .= - qq| AND gl.id in (SELECT trans_id FROM acc_trans ac2 WHERE ac2.chart_id IN - (SELECT id FROM chart c2 WHERE c2.category = ?))|; - $arwhere .= - qq| AND ar.id in (SELECT trans_id FROM acc_trans ac2 WHERE ac2.chart_id IN - (SELECT id FROM chart c2 WHERE c2.category = ?))|; - $apwhere .= - qq| AND ap.id in (SELECT trans_id FROM acc_trans ac2 WHERE ac2.chart_id IN - (SELECT id FROM chart c2 WHERE c2.category = ?))|; + $glwhere .= qq| AND g.id in (SELECT trans_id FROM acc_trans ac2 WHERE ac2.chart_id IN (SELECT id FROM chart c2 WHERE c2.category = ?))|; + $arwhere .= qq| AND a.id in (SELECT trans_id FROM acc_trans ac2 WHERE ac2.chart_id IN (SELECT id FROM chart c2 WHERE c2.category = ?))|; + $apwhere .= qq| AND a.id in (SELECT trans_id FROM acc_trans ac2 WHERE ac2.chart_id IN (SELECT id FROM chart c2 WHERE c2.category = ?))|; push(@glvalues, $form->{category}); push(@arvalues, $form->{category}); push(@apvalues, $form->{category}); @@ -323,19 +317,38 @@ sub all_transactions { my $false = ($myconfig->{dbdriver} eq 'Pg') ? FALSE: q|'0'|; - my $sortorder; - - if ($form->{sort}) { - $form->{sort} =~ s/[^a-zA-Z_]//g; - $sortorder = $form->{sort} . ","; + my %sort_columns = ( + 'id' => [ qw(id) ], + 'transdate' => [ qw(transdate id) ], + 'reference' => [ qw(lower_reference id) ], + 'description' => [ qw(lower_description id) ], + 'accno' => [ qw(accno transdate id) ], + ); + my %lowered_columns = ( + 'reference' => { 'gl' => 'g.reference', 'arap' => 'a.invnumber', }, + 'source' => { 'gl' => 'ac.source', 'arap' => 'ac.source', }, + 'description' => { 'gl' => 'g.description', 'arap' => 'ct.name', }, + ); + + my $sortdir = !defined $form->{sortdir} ? 'ASC' : $form->{sortdir} ? 'ASC' : 'DESC'; + my $sortkey = $sort_columns{$form->{sort}} ? $form->{sort} : 'transdate'; + my $sortorder = join ', ', map { "$_ $sortdir" } @{ $sort_columns{$sortkey} }; + + my %columns_for_sorting = ( 'gl' => '', 'arap' => '', ); + foreach my $spec (@{ $sort_columns{$sortkey} }) { + next if ($spec !~ m/^lower_(.*)$/); + + my $column = $1; + map { $columns_for_sorting{$_} .= sprintf(', lower(%s) AS lower_%s', $lowered_columns{$column}->{$_}, $column) } qw(gl arap); } my $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 LEFT JOIN tax t ON (t.chart_id = c.id) WHERE $glwhere @@ -344,10 +357,11 @@ 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 LEFT JOIN tax t ON (t.chart_id=c.id) WHERE $arwhere @@ -357,10 +371,11 @@ 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 LEFT JOIN tax t ON (t.chart_id=c.id) WHERE $apwhere @@ -368,7 +383,7 @@ sub all_transactions { AND (a.vendor_id = ct.id) AND (a.id = ac.trans_id) - ORDER BY $sortorder transdate, trans_id, acoid, taxkey DESC|; + ORDER BY $sortorder, acc_trans_id $sortdir|; my @values = (@glvalues, @arvalues, @apvalues); @@ -387,6 +402,9 @@ sub all_transactions { $trans_id = $ref0->{id}; + my $source = $ref0->{source}; + undef($ref0->{source}); + if ($trans_id != $trans_id2) { # first line of a booking if ($trans_id2) { @@ -431,13 +449,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}; @@ -453,19 +470,19 @@ 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; } } @@ -517,22 +534,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; @@ -605,7 +635,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 { @@ -686,4 +716,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;