Feature 5388: Print Invoices (documents) list gets too long. Fixed by default 180...
[fa-stable.git] / gl / bank_account_reconcile.php
index bdd7c88ebb723a7a933d1c6007b20f3d748e4b0d..a5738946451ea7385e6890a128de1b3dd48d939b 100644 (file)
@@ -9,9 +9,8 @@
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
     See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
 ***********************************************************************/
-/* Author Rob Mallon */
-$page_security = 8;
-$path_to_root="..";
+$page_security = 'SA_RECONCILE';
+$path_to_root = "..";
 include($path_to_root . "/includes/db_pager.inc");
 include_once($path_to_root . "/includes/session.inc");
 
@@ -23,14 +22,14 @@ include_once($path_to_root . "/gl/includes/gl_db.inc");
 include_once($path_to_root . "/includes/banking.inc");
 
 $js = "";
-if ($use_popup_windows)
+if ($SysPrefs->use_popup_windows)
        $js .= get_js_open_window(800, 500);
-if ($use_date_picker)
+if (user_use_date_picker())
        $js .= get_js_date_picker();
 
 add_js_file('reconcile.js');
 
-page(_("Reconcile Bank Account"), false, false, "", $js);
+page(_($help_context = "Reconcile Bank Account"), false, false, "", $js);
 
 check_db_has_bank_accounts(_("There are no bank accounts defined in the system."));
 
@@ -53,13 +52,15 @@ function rec_checkbox($row)
        $value = $row['reconciled'] != '';
 
 // save also in hidden field for testing during 'Reconcile'
-       return checkbox(null, $name, $value, true, _('Reconcile this transaction'))
-               . hidden($hidden, $value, false);
+       return is_closed_trans($row['type'], $row['trans_no']) ? "--" : checkbox(null, $name, $value, true, _('Reconcile this transaction'))
+               . hidden($hidden, $value, false);
 }
 
 function systype_name($dummy, $type)
 {
-       return systypes::name($type);
+       global $systypes_array;
+       
+       return $systypes_array[$type];
 }
 
 function trans_view($trans)
@@ -84,20 +85,24 @@ function fmt_credit($row)
        return $value>0 ? price_format($value) : '';
 }
 
-function fmt_person($row)
+function fmt_person($trans)
+{
+       return get_counterparty_name($trans["type"], $trans["trans_no"]);
+}
+
+function fmt_memo($row)
 {
-       return payment_person_types::person_name($row["person_type_id"],$row["person_id"]);
+       $value = $row["memo_"];
+       return $value;
 }
 
-$update_pager = false;
 function update_data()
 {
-       global $Ajax, $update_pager;
+       global $Ajax;
        
        unset($_POST["beg_balance"]);
        unset($_POST["end_balance"]);
        $Ajax->activate('summary');
-       $update_pager = true;
 }
 //---------------------------------------------------------------------------------------------
 // Update db record if respective checkbox value has changed.
@@ -106,7 +111,8 @@ function change_tpl_flag($reconcile_id)
 {
        global  $Ajax;
 
-       if (!check_date()) 
+       if (!check_date() 
+               && check_value("rec_".$reconcile_id)) // temporary fix
                return false;
 
        if (get_post('bank_date')=='')  // new reconciliation
@@ -115,24 +121,37 @@ function change_tpl_flag($reconcile_id)
        $_POST['bank_date'] = date2sql(get_post('reconcile_date'));
        $reconcile_value = check_value("rec_".$reconcile_id) 
                                                ? ("'".$_POST['bank_date'] ."'") : 'NULL';
-       $sql = "UPDATE ".TB_PREF."bank_trans SET reconciled=".db_escape($reconcile_value)
-       ." WHERE id=".db_escape($reconcile_id);
+       
+       update_reconciled_values($reconcile_id, $reconcile_value, $_POST['reconcile_date'],
+               input_num('end_balance'), $_POST['bank_account']);
+               
+       $Ajax->activate('reconciled');
+       $Ajax->activate('difference');
+       return true;
+}
+
+function set_tpl_flag($reconcile_id)
+{
+       global  $Ajax;
 
-       db_query($sql, "Can't change reconciliation status");
-       // save last reconcilation status (date, end balance)
-    $sql2="UPDATE ".TB_PREF."bank_accounts SET last_reconciled_date='"
-                       .date2sql($_POST["reconcile_date"])."',
-           ending_reconcile_balance=".input_num("end_balance")
-                       ." WHERE id=".db_escape($_POST["bank_account"]);
+       if (check_value("rec_".$reconcile_id))
+               return;
 
-       $result = db_query($sql2,"Error updating reconciliation information");
+       if (get_post('bank_date')=='')  // new reconciliation
+               $Ajax->activate('bank_date');
+
+       $_POST['bank_date'] = date2sql(get_post('reconcile_date'));
+       $reconcile_value =  ("'".$_POST['bank_date'] ."'");
+       
+       update_reconciled_values($reconcile_id, $reconcile_value, $_POST['reconcile_date'],
+               input_num('end_balance'), $_POST['bank_account']);
+               
        $Ajax->activate('reconciled');
        $Ajax->activate('difference');
-       return true;
 }
 
 if (!isset($_POST['reconcile_date'])) { // init page
-       $_POST['reconcile_date'] = Today();
+       $_POST['reconcile_date'] = new_doc_date();
 //     $_POST['bank_date'] = date2sql(Today());
 }
 
@@ -155,17 +174,27 @@ $id = find_submit('_rec_');
 if ($id != -1) 
        change_tpl_flag($id);
 
+
 if (isset($_POST['Reconcile'])) {
        set_focus('bank_date');
        foreach($_POST['last'] as $id => $value)
                if ($value != check_value('rec_'.$id))
                        if(!change_tpl_flag($id)) break;
+
+    $Ajax->activate('_page_body');
+}
+
+if (isset($_POST['ReconcileAll'])) {
+       set_focus('bank_date');
+       foreach($_POST['last'] as $id => $value)
+               set_tpl_flag($id);
+
     $Ajax->activate('_page_body');
 }
 
 //------------------------------------------------------------------------------------------------
 start_form();
-start_table("class='tablestyle_noborder'");
+start_table(TABLESTYLE_NOBORDER);
 start_row();
 bank_accounts_list_cells(_("Account:"), 'bank_account', null, true);
 
@@ -174,17 +203,7 @@ bank_reconciliation_list_cells(_("Bank Statement:"), get_post('bank_account'),
 end_row();
 end_table();
 
-$date = date2sql(get_post('reconcile_date'));
-
-$sql = "SELECT MAX(reconciled) as last_date,
-                SUM(IF(reconciled<='$date', amount, 0)) as end_balance,
-                SUM(IF(reconciled<'$date', amount, 0)) as beg_balance,
-                SUM(amount) as total
-       FROM ".TB_PREF."bank_trans trans
-       WHERE bank_act=".db_escape($_POST['bank_account']);
-//     ." AND trans.reconciled IS NOT NULL";
-
-$result = db_query($sql,"Cannot retrieve reconciliation data");
+$result = get_max_reconciled(get_post('reconcile_date'), $_POST['bank_account']);
 
 if ($row = db_fetch($result)) {
        $_POST["reconciled"] = price_format($row["end_balance"]-$row["beg_balance"]);
@@ -195,11 +214,8 @@ if ($row = db_fetch($result)) {
                $_POST["end_balance"] = price_format($row["end_balance"]);
                if (get_post('bank_date')) {
                        // if it is the last updated bank statement retrieve ending balance
-                       $sql = "SELECT ending_reconcile_balance
-                               FROM ".TB_PREF."bank_accounts WHERE id=".db_escape($_POST['bank_account'])
-                               . " AND last_reconciled_date=".db_escape($_POST['bank_date']);
-                       $result = db_query($sql,"Cannot retrieve last reconciliation");
-                       $row = db_fetch($result);
+
+                       $row = get_ending_reconciled($_POST['bank_account'], $_POST['bank_date']);
                        if($row) {
                                $_POST["end_balance"] = price_format($row["ending_reconcile_balance"]);
                        }
@@ -211,14 +227,14 @@ echo "<hr>";
 
 div_start('summary');
 
-start_table($table_style);
+start_table(TABLESTYLE);
 $th = array(_("Reconcile Date"), _("Beginning<br>Balance"), 
        _("Ending<br>Balance"), _("Account<br>Total"),_("Reconciled<br>Amount"), _("Difference"));
 table_header($th);
 start_row();
 
 date_cells("", "reconcile_date", _('Date of bank statement to reconcile'), 
-       null, 0, 0, 0, null, true);
+       get_post('bank_date')=='', 0, 0, 0, null, true);
 
 amount_cells_ex("", "beg_balance", 15);
 
@@ -240,13 +256,7 @@ echo "<hr>";
 if (!isset($_POST['bank_account']))
     $_POST['bank_account'] = "";
 
-$sql = "SELECT type, trans_no, ref, trans_date, 
-                               amount, person_id, person_type_id, reconciled, id
-               FROM ".TB_PREF."bank_trans
-               WHERE ".TB_PREF."bank_trans.bank_act = ".db_escape($_POST['bank_account']) . "
-                       AND (reconciled IS NULL OR reconciled='". $date ."')
-               ORDER BY trans_date,".TB_PREF."bank_trans.id";
-// or  ORDER BY reconciled desc, trans_date,".TB_PREF."bank_trans.id";
+$sql = get_sql_for_bank_account_reconcile(get_post('bank_account'), get_post('reconcile_date'));
 
 $act = get_bank_account($_POST["bank_account"]);
 display_heading($act['bank_account_name']." - ".$act['bank_curr_code']);
@@ -260,24 +270,23 @@ display_heading($act['bank_account_name']." - ".$act['bank_curr_code']);
                _("Debit") => array('align'=>'right', 'fun'=>'fmt_debit'), 
                _("Credit") => array('align'=>'right','insert'=>true, 'fun'=>'fmt_credit'), 
            _("Person/Item") => array('fun'=>'fmt_person'), 
+               _("Memo") => array('fun'=>'fmt_memo'),
                array('insert'=>true, 'fun'=>'gl_view'),
                "X"=>array('insert'=>true, 'fun'=>'rec_checkbox')
           );
        $table =& new_db_pager('trans_tbl', $sql, $cols);
-       if ($update_pager) {
-               $table->set_sql($sql);
-               $table->set_columns($cols);
-       }
-       $table->width = "60%";
+
+       $table->width = "80%";
        display_db_pager($table);
 
 br(1);
-submit_center('Reconcile', _("Reconcile"), true, '', null);
-
+echo '<center>';
+submit('Reconcile', _("Reconcile"), true, '', null);
+submit('ReconcileAll', _("Reconcile All"), true, '');
+echo '</center>';
 end_form();
 
 //------------------------------------------------------------------------------------------------
 
 end_page();
 
-?>
\ No newline at end of file