Bug 5685: Bank Statement w/Reconcile report includes gl_trans values that are "0...
[fa-stable.git] / reporting / rep601.php
1 <?php
2 /**********************************************************************
3     Copyright (C) FrontAccounting, LLC.
4         Released under the terms of the GNU General Public License, GPL, 
5         as published by the Free Software Foundation, either version 3 
6         of the License, or (at your option) any later version.
7     This program is distributed in the hope that it will be useful,
8     but WITHOUT ANY WARRANTY; without even the implied warranty of
9     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
10     See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
11 ***********************************************************************/
12 $page_security = 'SA_BANKREP';
13 // ----------------------------------------------------------------
14 // $ Revision:  2.0 $
15 // Creator:     Joe Hunt
16 // date_:       2005-05-19
17 // Title:       Bank Accounts Transactions
18 // ----------------------------------------------------------------
19 $path_to_root="..";
20
21 include_once($path_to_root . "/includes/session.inc");
22 include_once($path_to_root . "/includes/date_functions.inc");
23 include_once($path_to_root . "/includes/data_checks.inc");
24 include_once($path_to_root . "/gl/includes/gl_db.inc");
25
26 //----------------------------------------------------------------------------------------------------
27
28 print_bank_transactions();
29
30 //----------------------------------------------------------------------------------------------------
31
32 function get_bank_balance_to($to, $account)
33 {
34         $to = date2sql($to);
35         $sql = "SELECT SUM(amount) FROM ".TB_PREF."bank_trans WHERE bank_act='$account'
36         AND trans_date < '$to'";
37         $result = db_query($sql, "The starting balance on hand could not be calculated");
38         $row = db_fetch_row($result);
39         return $row[0];
40 }
41
42 function get_bank_transactions($from, $to, $account)
43 {
44         $from = date2sql($from);
45         $to = date2sql($to);
46         $sql = "SELECT * FROM ".TB_PREF."bank_trans
47                 WHERE bank_act = '$account'
48                 AND trans_date >= '$from'
49                 AND trans_date <= '$to'
50                 ORDER BY trans_date, id";
51
52         return db_query($sql,"The transactions for '$account' could not be retrieved");
53 }
54
55 function print_bank_transactions()
56 {
57         global $path_to_root, $systypes_array;
58
59         $acc = $_POST['PARAM_0'];
60         $from = $_POST['PARAM_1'];
61         $to = $_POST['PARAM_2'];
62         $zero = $_POST['PARAM_3'];
63         $comments = $_POST['PARAM_4'];
64         $orientation = $_POST['PARAM_5'];
65         $destination = $_POST['PARAM_6'];
66
67         if ($destination)
68                 include_once($path_to_root . "/reporting/includes/excel_report.inc");
69         else
70                 include_once($path_to_root . "/reporting/includes/pdf_report.inc");
71
72         $orientation = ($orientation ? 'L' : 'P');
73         $rep = new FrontReport(_('Bank Statement'), "BankStatement", user_pagesize(), 9, $orientation);
74         $dec = user_price_dec();
75
76         $cols = array(0, 90, 120, 170, 225, 350, 400, 460, 520);
77
78         $aligns = array('left', 'left', 'left', 'left', 'left', 'right', 'right', 'right');
79
80         $headers = array(_('Type'),     _('#'), _('Reference'), _('Date'), _('Person/Item'),
81                 _('Debit'),     _('Credit'), _('Balance'));
82
83         if ($orientation == 'L')
84                 recalculate_cols($cols);
85         $sql = "SELECT id, bank_account_name, bank_curr_code, bank_account_number FROM ".TB_PREF."bank_accounts";
86         if ($acc != ALL_TEXT)
87                 $sql .= " WHERE id = $acc";
88         $result = db_query($sql, "could not retreive bank accounts");
89         while ($account=db_fetch($result))
90         {
91                 $act = $account['bank_account_name']." - ".$account['bank_curr_code']." - ".$account['bank_account_number'];
92                 $params =   array(      0 => $comments,
93                         1 => array('text' => _('Period'), 'from' => $from, 'to' => $to),
94                         2 => array('text' => _('Bank Account'),'from' => $act,'to' => ''));
95
96                 $rep->Font();
97                 $rep->pageNumber = 0;
98                 $rep->Info($params, $cols, $headers, $aligns);
99                 $rep->NewPage();
100
101
102                 $prev_balance = get_bank_balance_to($from, $account["id"]);
103
104                 $trans = get_bank_transactions($from, $to, $account['id']);
105
106                 $rows = db_num_rows($trans);
107                 if ($prev_balance != 0.0 || $rows != 0)
108                 {
109                         $rep->Font('bold');
110                         $rep->TextCol(0, 3,     $act);
111                         $rep->TextCol(3, 5, _('Opening Balance'));
112                         if ($prev_balance > 0.0)
113                                 $rep->AmountCol(5, 6, abs($prev_balance), $dec);
114                         else
115                                 $rep->AmountCol(6, 7, abs($prev_balance), $dec);
116                         $rep->Font();
117                         $total = $prev_balance;
118                         $rep->NewLine(2);
119                         $total_debit = $total_credit = 0;
120                         if ($rows > 0)
121                         {
122                                 // Keep a running total as we loop through
123                                 // the transactions.
124                                 
125                                 while ($myrow=db_fetch($trans))
126                                 {
127                                         if ($zero == 0 && $myrow['amount'] == 0.0)
128                                                 continue;
129                                         $total += $myrow['amount'];
130
131                                         $rep->TextCol(0, 1, $systypes_array[$myrow["type"]]);
132                                         $rep->TextCol(1, 2,     $myrow['trans_no']);
133                                         $rep->TextCol(2, 3,     $myrow['ref']);
134                                         $rep->DateCol(3, 4,     $myrow["trans_date"], true);
135                                         $rep->TextCol(4, 5,     payment_person_name($myrow["person_type_id"],$myrow["person_id"], false));
136                                         if ($myrow['amount'] > 0.0)
137                                         {
138                                                 $rep->AmountCol(5, 6, abs($myrow['amount']), $dec);
139                                                 $total_debit += abs($myrow['amount']);
140                                         }
141                                         else
142                                         {
143                                                 $rep->AmountCol(6, 7, abs($myrow['amount']), $dec);
144                                                 $total_credit += abs($myrow['amount']);
145                                         }
146                                         $rep->AmountCol(7, 8, $total, $dec);
147                                         $rep->NewLine();
148                                         if ($rep->row < $rep->bottomMargin + $rep->lineHeight)
149                                         {
150                                                 $rep->Line($rep->row - 2);
151                                                 $rep->NewPage();
152                                         }
153                                 }
154                                 $rep->NewLine();
155                         }
156                         
157                         // Print totals for the debit and credit columns.
158                         $rep->TextCol(3, 5, _("Total Debit / Credit"));
159                         $rep->AmountCol(5, 6, $total_debit, $dec);
160                         $rep->AmountCol(6, 7, $total_credit, $dec);
161                         $rep->NewLine(2);
162
163                         $rep->Font('bold');
164                         $rep->TextCol(3, 5,     _("Ending Balance"));
165                         if ($total > 0.0)
166                                 $rep->AmountCol(5, 6, abs($total), $dec);
167                         else
168                                 $rep->AmountCol(6, 7, abs($total), $dec);
169                         $rep->Font();
170                         $rep->Line($rep->row - $rep->lineHeight + 4);
171                         $rep->NewLine(2, 1);
172                         
173                         // Print the difference between starting and ending balances.
174                         $net_change = ($total - $prev_balance); 
175                         $rep->TextCol(3, 5, _("Net Change"));
176                         if ($total > 0.0)
177                                 $rep->AmountCol(5, 6, $net_change, $dec, 0, 0, 0, 0, null, 1, True);
178                         else
179                                 $rep->AmountCol(6, 7, $net_change, $dec, 0, 0, 0, 0, null, 1, True);
180                 }
181         }
182         $rep->End();
183 }
184