Sales invoice voiding is blocked when sales credit was issued against the invoice.
authorJanusz Dobrowolski <janusz@frontaccounting.eu>
Thu, 19 Mar 2015 10:05:37 +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
sales/includes/db/sales_invoice_db.inc

index 5a6831359de6a81536aee88e09aa8646a1a33782..70878ad40281d98b79446826d8e782165411e678 100644 (file)
@@ -43,6 +43,8 @@ function void_transaction($type, $type_no, $date_, $memo_)
                        if (!check_void_bank_trans($type, $type_no))
                                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
+                       if (is_cust_invoice_credited($type_no))
+                               return _('This invoice cannot be voided because it was already credited.');
                case ST_CUSTCREDIT : // it's a customer credit note
                case ST_CUSTDELIVERY : // it's a customer dispatch
                        if (!exists_customer_trans($type, $type_no))
index f1ead0c6d8a55c48964e31396e404e2940aad201..73338a4144a702e02f3a4214d7774d3db0934af1 100644 (file)
@@ -277,6 +277,11 @@ function void_sales_invoice($type, $type_no)
        commit_transaction();
 }
 
+function is_cust_invoice_credited($trans_no)
+{
+       return db_num_rows(get_sales_child_lines(ST_SALESINVOICE, $trans_no));
+}
+
 function get_cust_prepayment_invoice_factor($trans_no)
 {
        $sql = "SELECT IF(dt.prep_amount>0, dt.prep_amount/so.total ,0)