Improved error messages in transaction voiding.
authorJanusz Dobrowolski <janusz@frontaccounting.eu>
Thu, 19 Mar 2015 10:05:04 +0000 (11:05 +0100)
committerJanusz Dobrowolski <janusz@frontaccounting.eu>
Wed, 25 Mar 2015 11:49:47 +0000 (12:49 +0100)
admin/db/voiding_db.inc
admin/void_transaction.php
gl/includes/db/gl_db_banking.inc

index 04e3d0d3cb264994292bcb0800b27d10670a6bab..5a6831359de6a81536aee88e09aa8646a1a33782 100644 (file)
@@ -20,93 +20,94 @@ function void_transaction($type, $type_no, $date_, $memo_)
        $void_entry = get_voided_entry($type, $type_no);
 
        if ($void_entry != null)
-               return false;
+               return _('This transaction was already voided before.');
 
        switch ($type) {
                case ST_JOURNAL : // it's a journal entry
                        if (!exists_gl_trans($type, $type_no))
-                               return false;
+                               return _('Selected transaction does not exists.');
                        void_journal_trans($type, $type_no);
                        break;
 
                case ST_BANKDEPOSIT : // it's a deposit
                case ST_BANKTRANSFER : // it's a transfer
                        if (!check_void_bank_trans($type, $type_no))
-                               return false;
+                               return _('This transaction cannot be voided because the operation would decrease account balance below allowed limit in some point of account history.');
                case ST_BANKPAYMENT : // it's a payment
                        if (!exists_bank_trans($type, $type_no))
-                               return false;
+                               return _('Selected transaction does not exists.');
                        void_bank_trans($type, $type_no);
                        break;
 
                case ST_CUSTPAYMENT : // it's a customer payment
                        if (!check_void_bank_trans($type, $type_no))
-                               return false;
+                               return _('This transaction cannot be voided because the operation would decrease account balance below allowed limit in some point of account history.');
                case ST_SALESINVOICE : // it's a customer invoice
                case ST_CUSTCREDIT : // it's a customer credit note
                case ST_CUSTDELIVERY : // it's a customer dispatch
                        if (!exists_customer_trans($type, $type_no))
-                               return false;
+                               return _('Selected transaction does not exists.');
                        if ($type == ST_CUSTDELIVERY)   // added 04 Oct 2008 by Joe Hunt. If delivery note has a not voided invoice, then NO.
                        {
                                $childs = get_sales_child_lines($type, $type_no, false); // 2011-03-17 This had been changed. Joe
                                if ($childs && db_num_rows($childs))
-                                               return false;
+                                       return _('This delivery cannot be voided because it was already invoiced.');
                        }
                        post_void_customer_trans($type, $type_no);
                        break;
 
                case ST_LOCTRANSFER : // it's a stock transfer
                        if (get_stock_transfer_items($type_no) == null)
-                               return false;
+                               return _('Selected transaction does not exists.');
                        void_stock_transfer($type_no);
                        break;
 
                case ST_INVADJUST : // it's a stock adjustment
                        if (get_stock_adjustment_items($type_no) == null)
-                               return false;
+                               return _('Selected transaction does not exists.');
                        void_stock_adjustment($type_no);
                        break;
 
                case ST_PURCHORDER : // it's a PO
-                       return false;
+                               return _('This transaction type cannot be voided.');
+                       break;
 
                case ST_SUPPRECEIVE : // it's a GRN
                        if (exists_grn_on_invoices($type_no))
-                               return false;
+                               return _('This GRN cannot be voided because it was already invoiced.');
                case ST_SUPPINVOICE : // it's a suppler invoice
                case ST_SUPPCREDIT : // it's a supplier credit note
                case ST_SUPPAYMENT : // it's a supplier payment
                        if (!exists_supp_trans($type, $type_no))
-                               return false;
+                               return _('Selected transaction does not exists.');
                        if (!post_void_supp_trans($type, $type_no))
-                               return false;
+                               return _('Error encountered when voiding transaction.');
                        break;
 
                case ST_WORKORDER : // it's a work order
                        if (!get_work_order($type_no, true))
-                               return false;
+                               return _('Selected transaction does not exists.');
                        void_work_order($type_no);
                        break;
 
                case ST_MANUISSUE : // it's a work order issue
                        if (!exists_work_order_issue($type_no))
-                               return false;
+                               return _('Selected transaction does not exists.');
                        void_work_order_issue($type_no);
                        break;
 
                case ST_MANURECEIVE : // it's a work order production
                        if (!exists_work_order_produce($type_no))
-                               return false;
+                               return _('Selected transaction does not exists.');
                        void_work_order_produce($type_no);
                        break;
 
                case ST_SALESORDER: // it's a sales order
                case ST_SALESQUOTE: // it's a sales quotation
-                       return false;
+                       return _('This transaction type cannot be voided.');
 
                case ST_COSTUPDATE : // it's a stock cost update
-                       return false;
+                       return _('This transaction type cannot be voided.');
                        break;
        }
 
@@ -114,7 +115,7 @@ function void_transaction($type, $type_no, $date_, $memo_)
        add_audit_trail($type, $type_no, $date_, _("Voided.")."\n".$memo_);
        $Refs->restore_last($type, $type_no);
        add_voided_entry($type, $type_no, $date_, $memo_);
-       return true;
+       return false;
 }
 
 //--------------------------------------------------------------------------------------------------
index 110516072153c1e09b54562f54c022a5177dd508..af44b391851207ef62e7c19792141c12f1e65b5f 100644 (file)
@@ -283,10 +283,10 @@ function handle_void_transaction()
                        return;
                }
 
-               $ret = void_transaction($_POST['filterType'], $_POST['trans_no'],
+               $msg = void_transaction($_POST['filterType'], $_POST['trans_no'],
                        $_POST['date_'], $_POST['memo_']);
 
-               if ($ret
+               if (!$msg
                {
                        display_notification_centered(_("Selected transaction has been voided."));
                        unset($_POST['trans_no']);
@@ -294,7 +294,7 @@ function handle_void_transaction()
                        unset($_POST['date_']);
                }
                else {
-                       display_error(_("The entered transaction does not exist or cannot be voided."));
+                       display_error($msg);
                        set_focus('trans_no');
 
                }
index cd197af797bc576c3c5003e4b46e646485be1dd2..a26d92e71baf236b51a0de72f7d5f0043fcfb738 100644 (file)
@@ -536,7 +536,15 @@ function write_bank_transaction($trans_type, $trans_no, $from_account, $items, $
        // old transaction can be voided only after new transaction is entered,
        //  otherwise the operation could fail for cash accounts due to temporary negative balance
        if (@$old_trans) 
-                       void_transaction($trans_type, $old_trans, Today(), _("Document reentered."));
+       {
+               $msg = void_transaction($trans_type, $old_trans, Today(), _("Document reentered."));
+               if ($msg)
+               {
+                       display_error($msg);
+                       return false;
+               }
+       }
+
 
        $args->trans_no = $trans_no;
        hook_db_postwrite($args, $trans_type);