X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=admin%2Fvoid_transaction.php;h=32d3a038e57cf1c12d250407f2c66402de5277f7;hb=65fc1fa9fcb655a802ee8bd7b73dc211ed0ed4ed;hp=31f8506b462e51e007a805c286f5af0d5a4ffcf4;hpb=e8ae3516539a520338117f25d401c0fc234973a4;p=fa-stable.git diff --git a/admin/void_transaction.php b/admin/void_transaction.php index 31f8506b..32d3a038 100644 --- a/admin/void_transaction.php +++ b/admin/void_transaction.php @@ -9,23 +9,26 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the License here . ***********************************************************************/ -$path_to_root=".."; -$page_security = 14; +$page_security = 'SA_VOIDTRANSACTION'; +$path_to_root = ".."; +include($path_to_root . "/includes/db_pager.inc"); include_once($path_to_root . "/includes/session.inc"); include_once($path_to_root . "/includes/date_functions.inc"); include_once($path_to_root . "/includes/ui.inc"); include_once($path_to_root . "/includes/data_checks.inc"); +include_once($path_to_root . "/admin/db/transactions_db.inc"); include_once($path_to_root . "/admin/db/voiding_db.inc"); $js = ""; -if ($use_date_picker) +if (user_use_date_picker()) $js .= get_js_date_picker(); -if ($use_popup_windows) +if ($SysPrefs->use_popup_windows) $js .= get_js_open_window(800, 500); -page(_("Void a Transaction"), false, false, "", $js); +page(_($help_context = "Void a Transaction"), false, false, "", $js); +simple_page_mode(true); //---------------------------------------------------------------------------------------- function exist_transaction($type, $type_no) { @@ -36,79 +39,168 @@ function exist_transaction($type, $type_no) switch ($type) { - case 0 : // it's a journal entry + case ST_JOURNAL : // it's a journal entry if (!exists_gl_trans($type, $type_no)) return false; break; - case 1 : // it's a payment - case 2 : // it's a deposit - case 4 : // it's a transfer + case ST_BANKPAYMENT : // it's a payment + case ST_BANKDEPOSIT : // it's a deposit + case ST_BANKTRANSFER : // it's a transfer if (!exists_bank_trans($type, $type_no)) return false; break; - case 10 : // it's a customer invoice - case 11 : // it's a customer credit note - case 12 : // it's a customer payment - case 13 : // it's a customer dispatch + case ST_SALESINVOICE : // it's a customer invoice + case ST_CUSTCREDIT : // it's a customer credit note + case ST_CUSTPAYMENT : // it's a customer payment + case ST_CUSTDELIVERY : // it's a customer dispatch if (!exists_customer_trans($type, $type_no)) return false; break; - case systypes::location_transfer() : // it's a stock transfer + case ST_LOCTRANSFER : // it's a stock transfer if (get_stock_transfer_items($type_no) == null) return false; break; - case systypes::inventory_adjustment() : // it's a stock adjustment + case ST_INVADJUST : // it's a stock adjustment if (get_stock_adjustment_items($type_no) == null) return false; break; - case 25 : // it's a GRN + case ST_PURCHORDER : // it's a PO return false; - case 20 : // it's a suppler invoice - case 21 : // it's a supplier credit note - case 22 : // it's a supplier payment + + case ST_SUPPRECEIVE : // it's a GRN + if (!exists_grn($type_no)) + return false; + break; + + 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; break; - case systypes::work_order() : // it's a work order + case ST_WORKORDER : // it's a work order if (!get_work_order($type_no, true)) return false; break; - case 28 : // it's a work order issue + case ST_MANUISSUE : // it's a work order issue if (!exists_work_order_issue($type_no)) return false; break; - case 29 : // it's a work order production + case ST_MANURECEIVE : // it's a work order production if (!exists_work_order_produce($type_no)) return false; break; - case systypes::cost_update() : // it's a stock cost update + case ST_SALESORDER: // it's a sales order + case ST_SALESQUOTE: // it's a sales quotation + return false; + case ST_COSTUPDATE : // it's a stock cost update return false; - break; } return true; } +function view_link($trans) +{ + if (!isset($trans['type'])) + $trans['type'] = $_POST['filterType']; + return get_trans_view_str($trans["type"], $trans["trans_no"]); +} + +function select_link($row) +{ + if (!isset($row['type'])) + $row['type'] = $_POST['filterType']; + if (!is_date_in_fiscalyear($row['trans_date'], true)) + return _("N/A"); + return button('Edit'.$row["trans_no"], _("Select"), _("Select"), ICON_EDIT); +} + +function gl_view($row) +{ + if (!isset($row['type'])) + $row['type'] = $_POST['filterType']; + return get_gl_view_str($row["type"], $row["trans_no"]); +} + +function date_view($row) +{ + return $row['trans_date']; +} + +function ref_view($row) +{ + return $row['ref']; +} + function voiding_controls() { - global $table_style2; - + global $selected_id; + + $not_implemented = array(ST_PURCHORDER, ST_SALESORDER, ST_SALESQUOTE, ST_COSTUPDATE); + start_form(); - start_table($table_style2); + start_table(TABLESTYLE_NOBORDER); + start_row(); + + systypes_list_cells(_("Transaction Type:"), 'filterType', null, true, $not_implemented); + if (list_updated('filterType')) + $selected_id = -1; + + if (!isset($_POST['FromTransNo'])) + $_POST['FromTransNo'] = "1"; + if (!isset($_POST['ToTransNo'])) + $_POST['ToTransNo'] = "999999"; + + ref_cells(_("from #:"), 'FromTransNo'); - systypes_list_row(_("Transaction Type:"), "filterType", null, true); + ref_cells(_("to #:"), 'ToTransNo'); - text_row(_("Transaction #:"), 'trans_no', null, 12, 12); + submit_cells('ProcessSearch', _("Search"), '', '', 'default'); + + end_row(); + end_table(1); + + $trans_ref = false; + $sql = get_sql_for_view_transactions(get_post('filterType'), get_post('FromTransNo'), get_post('ToTransNo'), $trans_ref); + if ($sql == "") + return; + + $cols = array( + _("#") => array('insert'=>true, 'fun'=>'view_link'), + _("Reference") => array('fun'=>'ref_view'), + _("Date") => array('type'=>'date', 'fun'=>'date_view'), + _("GL") => array('insert'=>true, 'fun'=>'gl_view'), + _("Select") => array('insert'=>true, 'fun'=>'select_link') + ); + + $table =& new_db_pager('transactions', $sql, $cols); + $table->width = "40%"; + display_db_pager($table); + + start_table(TABLESTYLE2); + + if ($selected_id != -1) + { + hidden('trans_no', $selected_id); + hidden('selected_id', $selected_id); + } + else + { + hidden('trans_no', ''); + $_POST['memo_'] = ''; + } + label_row(_("Transaction #:"), ($selected_id==-1?'':$selected_id)); date_row(_("Voiding Date:"), 'date_'); @@ -117,7 +209,7 @@ function voiding_controls() end_table(1); if (!isset($_POST['ProcessVoiding'])) - submit_center('ProcessVoiding', _("Void Transaction"), true, '', true); + submit_center('ProcessVoiding', _("Void Transaction"), true, '', 'default'); else { if (!exist_transaction($_POST['filterType'],$_POST['trans_no'])) @@ -126,19 +218,31 @@ function voiding_controls() unset($_POST['trans_no']); unset($_POST['memo_']); unset($_POST['date_']); - submit_center('ProcessVoiding', _("Void Transaction"), true, '', true); + submit_center('ProcessVoiding', _("Void Transaction"), true, '', 'default'); } else { - display_warning(_("Are you sure you want to void this transaction ? This action cannot be undone."), 0, 1); - if ($_POST['filterType'] == 0) // GL transaction are not included in get_trans_view_str - $view_str = get_gl_view_str($_POST['filterType'],$_POST['trans_no'], _("View Transaction")); - else - $view_str = get_trans_view_str($_POST['filterType'],$_POST['trans_no'], _("View Transaction")); - display_note($view_str); + if ($_POST['filterType'] == ST_SUPPRECEIVE) { + $result = get_grn_items($_POST['trans_no']); + if (db_num_rows($result) > 0) { + while ($myrow = db_fetch($result)) { + if (is_inventory_item($myrow["item_code"])) { + if (check_negative_stock($myrow["item_code"], -$myrow["qty_recd"], null, $_POST['date_'])) { + $stock = get_item($myrow["item_code"]); + display_error(_("The void cannot be processed because there is an insufficient quantity for item:") . + " " . $stock['stock_id'] . " - " . $stock['description'] . " - " . + _("Quantity On Hand") . " = " . number_format2(get_qoh_on_date($stock['stock_id'], null, + $_POST['date_']), get_qty_dec($stock['stock_id']))); + return false; + } + } + } + } + } + display_warning(_("Are you sure you want to void this transaction ? This action cannot be undone."), 0, 1); br(); submit_center_first('ConfirmVoiding', _("Proceed"), '', true); - submit_center_last('CancelVoiding', _("Cancel"), '', true); + submit_center_last('CancelVoiding', _("Cancel"), '', 'cancel'); } } @@ -149,6 +253,12 @@ function voiding_controls() function check_valid_entries() { + if (is_closed_trans($_POST['filterType'],$_POST['trans_no'])) + { + display_error(_("The selected transaction was closed for edition and cannot be voided.")); + set_focus('trans_no'); + return false; + } if (!is_date($_POST['date_'])) { display_error(_("The entered date is invalid.")); @@ -157,7 +267,7 @@ function check_valid_entries() } if (!is_date_in_fiscalyear($_POST['date_'])) { - display_error(_("The entered date is not in fiscal year.")); + display_error(_("The entered date is out of fiscal year or is closed for further data entry.")); set_focus('date_'); return false; } @@ -178,7 +288,6 @@ function handle_void_transaction() { if (check_valid_entries()==true) { - $void_entry = get_voided_entry($_POST['filterType'], $_POST['trans_no']); if ($void_entry != null) { @@ -190,18 +299,17 @@ 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']); unset($_POST['memo_']); - unset($_POST['date_']); } else { - display_error(_("The entered transaction does not exist or cannot be voided.")); + display_error($msg); set_focus('trans_no'); } @@ -227,11 +335,13 @@ if (isset($_POST['ProcessVoiding'])) if (isset($_POST['ConfirmVoiding'])) { handle_void_transaction(); + $selected_id = ''; $Ajax->activate('_page_body'); } if (isset($_POST['CancelVoiding'])) { + $selected_id = -1; $Ajax->activate('_page_body'); } @@ -241,4 +351,3 @@ voiding_controls(); end_page(); -?> \ No newline at end of file