X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FRP.pm;h=bbfb098666dbf7fd7b37dd27a076cac961862048;hb=6f92326a8f2c1f9205a062d32ed8f1abdaa4b7b5;hp=41cd3904166ff4416ce601d8eed5b10ba0e2ae0a;hpb=694ced449e7ba97d19119d6a03080f8c5d0f3e04;p=kivitendo-erp.git diff --git a/SL/RP.pm b/SL/RP.pm index 41cd39041..bbfb09866 100644 --- a/SL/RP.pm +++ b/SL/RP.pm @@ -53,6 +53,8 @@ use strict; sub get_openbalance_date { my ($closedto, $target) = map { $::locale->parse_date_to_object(\%::myconfig, $_) } @_; + return unless $closedto; + $closedto->subtract(years => 1) while ($target - $closedto)->is_negative; $closedto->add(days => 1); return $::locale->format_date(\%::myconfig, $closedto); @@ -74,7 +76,7 @@ sub balance_sheet { } # get end of financial year and convert to Date format - my ($closedto) = selectfirst_arrayref_query($form, $dbh, 'SELECT closedto FROM defaults'); + my ($closedto) = selectfirst_array_query($form, $dbh, 'SELECT closedto FROM defaults'); # get date of last opening balance my $startdate = get_openbalance_date($closedto, $form->{asofdate}); @@ -209,6 +211,13 @@ sub get_accounts { $sth->finish; + # if l_ob is selected l_cb is always ignored + if ( $form->{l_ob} ) { + $where .= ' AND ac.ob_transaction is true ' + } elsif ( not $form->{l_cb} ) { + $where .= ' AND ac.cb_transaction is false '; + }; + if ($fromdate) { $fromdate = conv_dateq($fromdate); if ($form->{method} eq 'cash') { @@ -344,12 +353,10 @@ sub get_accounts { } } else { # if ($form->{method} eq 'cash') - # ich sehe keinen sinn das nochmal explizit ohne conv_i aufzurufen - # bitte prüfen und löschen jan 15.11.2009 - # if ($department_id) { - # $dpt_join = qq| JOIN dpt_trans t ON (t.trans_id = ac.trans_id) |; - # $dpt_where = qq| AND t.department_id = $department_id |; - # } + if ($department_id) { + $dpt_join = qq| JOIN dpt_trans t ON (t.trans_id = ac.trans_id) |; + $dpt_where = qq| AND t.department_id = | . conv_i($department_id); + } $query = qq| SELECT c.accno, sum(ac.amount) AS amount, c.description, c.category @@ -464,6 +471,8 @@ sub get_accounts_g { my $inwhere = ""; my $item; + $where .= ' AND ac.cb_transaction is false ' unless $form->{l_cb}; + if ($fromdate) { $fromdate = conv_dateq($fromdate); if ($form->{method} eq 'cash') { @@ -507,13 +516,13 @@ sub get_accounts_g { if ($form->{method} eq 'cash') { $query = qq| - SELECT SUM( ac.amount * + SELECT SUM( ac.amount * CASE WHEN COALESCE((SELECT amount FROM ar WHERE id = ac.trans_id and amount != 0 ), 0) != 0 THEN (SELECT SUM(acc.amount) * -1 FROM acc_trans acc INNER JOIN chart c ON (acc.chart_id = c.id AND c.link LIKE '%AR_paid%') WHERE 1=1 $inwhere AND acc.trans_id = ac.trans_id) - / (SELECT amount FROM ar WHERE id = ac.trans_id) - ) AS amount, c.pos_eur + / (SELECT amount FROM ar WHERE id = ac.trans_id and amount != 0 ) ELSE 1 END + ) AS amount, c.$category FROM acc_trans ac LEFT JOIN chart c ON (c.id = ac.chart_id) LEFT JOIN ar ON (ar.id = ac.trans_id) @@ -526,7 +535,7 @@ sub get_accounts_g { ) WHERE ac.trans_id IN (SELECT DISTINCT trans_id FROM acc_trans WHERE 1=1 $subwhere) - GROUP BY c.pos_eur + GROUP BY c.$category /* SELECT SUM(ac.amount * chart_category_to_sgn(c.category)) AS amount, c.$category @@ -595,10 +604,10 @@ sub get_accounts_g { } } else { # if ($form->{method} eq 'cash') - # s.o. jan 15.11.2009 -# if ($department_id) { -# ($dpt_join, $dpt_where) = sql_department($department_id); -# } + if ($department_id) { + $dpt_join = qq| JOIN dpt_trans t ON (t.trans_id = ac.trans_id) |; + $dpt_where = qq| AND (t.department_id = | . conv_i($department_id, 'NULL') . qq|) |; + } $query = qq| SELECT sum(ac.amount * chart_category_to_sgn(c.category)) AS amount, c.$category @@ -1193,10 +1202,12 @@ sub aging { } my $dpt_join; + my $where_dpt; if ($form->{department}) { my ($null, $department_id) = split /--/, $form->{department}; $dpt_join = qq| JOIN department d ON (a.department_id = d.id) |; $where .= qq| AND (a.department_id = | . conv_i($department_id, 'NULL') . qq|)|; + $where_dpt = qq| AND (${arap}.department_id = | . conv_i($department_id, 'NULL') . qq|)|; } my $review_of_aging_list; if ($form->{review_of_aging_list}) { @@ -1217,7 +1228,7 @@ sub aging { phone as customerphone, fax as customerfax, ${ct}number, "invnumber", "transdate", (amount - COALESCE((SELECT sum(amount)*$ml FROM acc_trans LEFT JOIN chart ON (acc_trans.chart_id=chart.id) WHERE link ilike '%paid%' AND acc_trans.trans_id=${arap}.id AND acc_trans.transdate <= (date $todate)),0)) as "open", "amount", - "duedate", invoice, ${arap}.id, + "duedate", invoice, ${arap}.id, date_part('days', now() - duedate) as overduedays, (SELECT $buysell FROM exchangerate WHERE (${arap}.curr = exchangerate.curr) @@ -1226,6 +1237,7 @@ sub aging { WHERE ((paid != amount) OR (datepaid > (date $todate) AND datepaid is not null)) AND NOT COALESCE (${arap}.storno, 'f') AND (${arap}.${ct}_id = ${ct}.id) + $where_dpt AND (${ct}.id = ?) AND (transdate <= (date $todate) $fromwhere ) $review_of_aging_list @@ -1290,27 +1302,6 @@ sub get_customer { $main::lxdebug->leave_sub(); } -sub get_taxaccounts { - $main::lxdebug->enter_sub(); - - my ($self, $myconfig, $form) = @_; - - # connect to database - my $dbh = $form->dbconnect($myconfig); - - # get tax accounts - my $query = - qq|SELECT c.accno, c.description, t.rate - FROM chart c, tax t - WHERE (c.link LIKE '%CT_tax%') AND (c.id = t.chart_id) - ORDER BY c.accno|; - $form->{taxaccounts} = selectall_hashref_quert($form, $dbh, $query); - - $dbh->disconnect; - - $main::lxdebug->leave_sub(); -} - sub tax_report { $main::lxdebug->enter_sub();