From: Janusz Dobrowolski Date: Wed, 27 Apr 2011 20:03:50 +0000 (+0200) Subject: Added Purchase Invice edition. X-Git-Tag: v2.4.2~19^2~385 X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=commitdiff_plain;h=e735f0a06f8a43ed4885ff51a5c0b4332c130b40;p=fa-stable.git Added Purchase Invice edition. --- diff --git a/includes/app_entries.inc b/includes/app_entries.inc index 766e2fa7..eabfdd80 100644 --- a/includes/app_entries.inc +++ b/includes/app_entries.inc @@ -37,7 +37,8 @@ $trans_editors = array( //ST_INVADJUST => , ST_PURCHORDER => "/purchasing/po_entry_items.php?ModifyOrderNumber=%d", - //ST_SUPPINVOICE => , + ST_SUPPINVOICE => "/purchasing/supplier_invoice.php?ModifyInvoice=%d", + //ST_SUPPCREDIT => , //ST_SUPPAYMENT => , //ST_SUPPRECEIVE => , diff --git a/includes/db/inventory_db.inc b/includes/db/inventory_db.inc index 5bc37a75..b6916f0f 100644 --- a/includes/db/inventory_db.inc +++ b/includes/db/inventory_db.inc @@ -152,21 +152,21 @@ function get_deliveries_from_trans($stock_id, $from) $result = db_query($sql, "The deliveries could not be updated"); $row = db_fetch_row($result); - display_notification('Row0 - '.$row[0].' Row1- '.$row[1]); +// display_notification('Row0 - '.$row[0].' Row1- '.$row[1]); //return $row; // Get Std cost of previsous transaction before the cut-over delivery // This is useful to get inventory valuation $prev_trans = $from - 1; - display_notification('From - '.$from.' Prev- '.$prev_trans); +// display_notification('From - '.$from.' Prev- '.$prev_trans); $sql = "SELECT standard_cost FROM ".TB_PREF."stock_moves WHERE stock_id=".db_escape($stock_id)." AND trans_id ='$prev_trans'"; $result = db_query($sql, "The deliveries could not be updated"); $cost = db_fetch_row($result); - display_notification('Last Delivery Cost - '.$cost[0]); +// display_notification('Last Delivery Cost - '.$cost[0]); // Adjusting QOH valuation $sql = "SELECT SUM(qty) FROM ".TB_PREF."stock_moves @@ -175,12 +175,12 @@ function get_deliveries_from_trans($stock_id, $from) $result = db_query($sql, "The deliveries could not be updated"); $qoh = db_fetch_row($result); - display_notification('QOH before last delivery - '.$qoh[0]); +// display_notification('QOH before last delivery - '.$qoh[0]); $qty = $row[0] - $qoh[0]; //Qoh is minus from delivered in -ve $final_cost = $row[1] - $qoh[0]*$cost[0]; - display_notification('Qty - '.$qty.' cost- '.$final_cost); +// display_notification('Qty - '.$qty.' cost- '.$final_cost); return array($qty,$final_cost); } @@ -195,7 +195,7 @@ function get_purchases_from_trans($stock_id, $from) $result = db_query($sql, "The deliveries could not be updated"); $row = db_fetch_row($result); - display_notification('Purchase Qty - '.$row[0].' Cost- '.$row[1]); +// display_notification('Purchase Qty - '.$row[0].' Cost- '.$row[1]); return $row; } diff --git a/includes/references.inc b/includes/references.inc index 0c11ebee..b67267c5 100644 --- a/includes/references.inc +++ b/includes/references.inc @@ -101,8 +101,10 @@ class references } //---------------------------------------------------------------------------- - -function is_new_reference($ref, $type) +// +// Check if reference was not used so far (for other transaction than $trans_no) +// +function is_new_reference($ref, $type, $trans_no=0) { $db_info = get_systype_db_info($type); $db_name = $db_info[0]; @@ -133,6 +135,10 @@ function is_new_reference($ref, $type) WHERE $db_ref=$ref AND ISNULL(v.id)"; } + if ($trans_no) + { + $sql .= " AND $db_name.$db_trans != ".db_escape($trans_no); + } $result = db_query($sql, "could not test for unique reference"); return (db_num_rows($result) == 0); diff --git a/purchasing/includes/db/grn_db.inc b/purchasing/includes/db/grn_db.inc index 691ae73f..d1c35452 100644 --- a/purchasing/includes/db/grn_db.inc +++ b/purchasing/includes/db/grn_db.inc @@ -121,11 +121,12 @@ function add_grn(&$po) add_or_update_purchase_data($po->supplier_id, $order_line->stock_id, $order_line->price, $order_line->item_description); - /*Need to insert a grn item */ - + /*Need to insert a grn item */ // also need to check for over-receive.(within allowance) + if ($order_line->receive_qty + $order_line->qty_received > $order_line->quantity) + $order_line->quantity = $order_line->receive_qty + $order_line->qty_received; $grn_item = add_grn_detail_item($grn, $order_line->po_detail_rec, $order_line->stock_id, $order_line->item_description, - $order_line->standard_cost, $order_line->receive_qty, $order_line->price); + $order_line->standard_cost, $order_line->receive_qty, $order_line->price, $order_line->quantity); $po->line_items[$line_no]->grn_item_id = $grn_item; /* Update location stock records - NB a po cannot be entered for a service/kit parts done automatically */ @@ -238,45 +239,63 @@ function set_grn_item_credited(&$entered_grn, $supplier, $transno, $date) add_stock_move(ST_SUPPCREDIT, $entered_grn->item_code, $transno, $myrow['loc_code'], $date, "", $entered_grn->this_quantity_inv, $mcost, $supplier, 1, $entered_grn->chg_price); } - +/* + Returns selected grn items: + + $grn_batch_id != 0 - only items for selected grn + $supplier_id!='' - only items for selected supplier + $outsanding_only==true - only not fully invoiced items + $is_invoiced_only==true - only those which are at least partially invoiced + $invoice_no!=0 - for selected invoice(s) + $begin!='' or $end!='' - within selected delivery time range +*/ function get_grn_items($grn_batch_id=0, $supplier_id="", $outstanding_only=false, $is_invoiced_only=false, $invoice_no=0, $begin="", $end="") { - $sql = "SELECT ".TB_PREF."grn_batch.*, ".TB_PREF."grn_items.*, " - .TB_PREF."purch_order_details.unit_price," - .TB_PREF."purch_order_details.act_price," - .TB_PREF."purch_order_details.quantity_ordered," - .TB_PREF."purch_order_details.std_cost_unit, units - FROM ".TB_PREF."grn_batch, ".TB_PREF."grn_items, " - .TB_PREF."purch_order_details, ".TB_PREF."stock_master"; - if ($invoice_no != 0) - $sql .= ", ".TB_PREF."supp_invoice_items"; - $sql .= " WHERE ".TB_PREF."grn_items.grn_batch_id=".TB_PREF."grn_batch.id - AND ".TB_PREF."grn_items.po_detail_item=".TB_PREF."purch_order_details.po_detail_item"; - if ($invoice_no != 0) - $sql .= " AND ".TB_PREF."supp_invoice_items.supp_trans_type=".ST_SUPPINVOICE." AND - ".TB_PREF."supp_invoice_items.supp_trans_no=$invoice_no AND - ".TB_PREF."grn_items.id=".TB_PREF."supp_invoice_items.grn_item_id"; - $sql .= " AND ".TB_PREF."stock_master.stock_id=".TB_PREF."grn_items.item_code "; + $sql = "SELECT grn.*, grn_item.*, + grn_item.quantity_inv".($invoice_no ? "-invoice_item.quantity" : '')." quantity_inv, + po_item.unit_price, + po_item.act_price, + po_item.quantity_ordered, + po_item.std_cost_unit, units + FROM ".TB_PREF."grn_batch grn, " + .TB_PREF."purch_order_details po_item, " + .TB_PREF."stock_master stock_item," + .TB_PREF."grn_items grn_item "; + + if ($invoice_no != 0) { + $sql .= " LEFT JOIN ".TB_PREF."supp_invoice_items invoice_item ON "; + + $inv_cond = "invoice_item.supp_trans_type=".ST_SUPPINVOICE." AND invoice_item.supp_trans_no "; + if (is_array($invoice_no)) + $inv_cond .= " IN (".implode(',' , $invoice_no) . ")"; + else + $inv_cond .= " = $invoice_no"; + $sql .= "($inv_cond) AND grn_item.id=invoice_item.grn_item_id"; + } + $sql .= " WHERE grn_item.grn_batch_id=grn.id + AND grn_item.po_detail_item=po_item.po_detail_item"; + + if ($outstanding_only) + $sql .= " AND (".($invoice_no ? "$inv_cond OR ":'')."grn_item.qty_recd - grn_item.quantity_inv > 0)"; + + $sql .= " AND stock_item.stock_id=grn_item.item_code "; if ($begin != "") - $sql .= " AND ".TB_PREF."grn_batch.delivery_date>='".date2sql($begin)."'"; + $sql .= " AND grn.delivery_date>='".date2sql($begin)."'"; if ($end != "") - $sql .= " AND ".TB_PREF."grn_batch.delivery_date<='".date2sql($end)."'"; + $sql .= " AND grn.delivery_date<='".date2sql($end)."'"; if ($grn_batch_id != 0) - $sql .= " AND ".TB_PREF."grn_batch.id=".db_escape($grn_batch_id) - ." AND ".TB_PREF."grn_items.grn_batch_id=".db_escape($grn_batch_id); + $sql .= " AND grn.id=".db_escape($grn_batch_id) + ." AND grn_item.grn_batch_id=".db_escape($grn_batch_id); if ($is_invoiced_only) - $sql .= " AND ".TB_PREF."grn_items.quantity_inv > 0"; - - if ($outstanding_only) - $sql .= " AND ".TB_PREF."grn_items.qty_recd - ".TB_PREF."grn_items.quantity_inv > 0"; + $sql .= " AND grn_item.quantity_inv > 0"; if ($supplier_id != "") - $sql .= " AND ".TB_PREF."grn_batch.supplier_id =".db_escape($supplier_id); + $sql .= " AND grn.supplier_id =".db_escape($supplier_id); - $sql .= " ORDER BY ".TB_PREF."grn_batch.delivery_date, ".TB_PREF."grn_batch.id, ".TB_PREF."grn_items.id"; + $sql .= " ORDER BY grn.delivery_date, grn.id, grn_item.id"; return db_query($sql, "Could not retreive GRNS"); } diff --git a/purchasing/includes/db/invoice_db.inc b/purchasing/includes/db/invoice_db.inc index 344e2b68..a7282c47 100644 --- a/purchasing/includes/db/invoice_db.inc +++ b/purchasing/includes/db/invoice_db.inc @@ -20,7 +20,10 @@ function read_supplier_details_to_trans(&$supp_trans, $supplier_id) supp.tax_group_id, tax_group.name AS tax_group_name, supp.credit_limit - Sum(IFNULL(IF(trans.type=".ST_SUPPCREDIT.", -1, 1) * (ov_amount + ov_gst + ov_discount),0)) as cur_credit - FROM ".TB_PREF."suppliers supp LEFT JOIN ".TB_PREF."supp_trans trans ON supp.supplier_id = trans.supplier_id, ".TB_PREF."payment_terms terms, ".TB_PREF."tax_groups tax_group + FROM ".TB_PREF."suppliers supp LEFT JOIN " + .TB_PREF."supp_trans trans ON supp.supplier_id = trans.supplier_id, " + .TB_PREF."payment_terms terms, " + .TB_PREF."tax_groups tax_group WHERE supp.tax_group_id = tax_group.id AND supp.payment_terms=terms.terms_indicator AND supp.supplier_id = ".db_escape($supplier_id)." GROUP BY supp.supp_name"; @@ -113,16 +116,22 @@ function get_diff_in_home_currency($supplier, $old_date, $date, $amount1, $amoun } //---------------------------------------------------------------------------------------- -function add_supp_invoice($supp_trans, $invoice_no=0) // do not receive as ref because we change locally +function add_supp_invoice(&$supp_trans) // do not receive as ref because we change locally { global $Refs; //$company_currency = get_company_currency(); + $trans_no = $supp_trans->trans_no; + $trans_type = $supp_trans->trans_type; /*Start an sql transaction */ begin_transaction(); - hook_db_prewrite($supp_trans, $supp_trans->trans_type); + hook_db_prewrite($supp_trans, $trans_type); $tax_total = 0; $taxes = $supp_trans->get_taxes($supp_trans->tax_group_id); + if ($trans_no) { + void_transaction($trans_type, $trans_no, Today(), _("Document reentered.")); + $Refs->restore_last($trans_type, $trans_no); + } foreach ($taxes as $n => $taxitem) { @@ -137,13 +146,10 @@ function add_supp_invoice($supp_trans, $invoice_no=0) // do not receive as ref b $item_added_tax = $tax_total; } else { $item_added_tax = 0; - } - $trans_type = $supp_trans->trans_type; - if ($trans_type == ST_SUPPCREDIT) - { + { // let's negate everything because it's a credit note $invoice_items_total = -$invoice_items_total; $tax_total = -$tax_total; @@ -160,6 +166,9 @@ function add_supp_invoice($supp_trans, $invoice_no=0) // do not receive as ref b $invoice_items_total, $item_added_tax, $supp_trans->ov_discount, "", 0, $supp_trans->tax_included, $supp_trans->tax_algorithm); + + $supp_trans->trans_no = $invoice_id; + $total = 0; /* Now the control account */ $supplier_accounts = get_supplier_accounts($supp_trans->supplier_id); @@ -191,7 +200,7 @@ function add_supp_invoice($supp_trans, $invoice_no=0) // do not receive as ref b $trans_type, $invoice_id, $entered_gl_code->amount, $ex_rate, $date_, $supp_trans->supp_reference, $supp_trans->tax_included); } - + $clearing_act = get_company_pref('grn_clearing_act'); foreach ($supp_trans->grn_items as $line_no => $entered_grn) { @@ -204,7 +213,7 @@ function add_supp_invoice($supp_trans, $invoice_no=0) // do not receive as ref b $line_taxfree = $entered_grn->taxfree_charge_price($supp_trans->tax_group_id); $line_tax = $entered_grn->full_charge_price($supp_trans->tax_group_id) - $line_taxfree; $stock_gl_code = get_stock_gl_code($entered_grn->item_code); - + if ($trans_type == ST_SUPPCREDIT) { $iv_act = (is_inventory_item($entered_grn->item_code) ? $stock_gl_code["inventory_account"] : @@ -250,8 +259,6 @@ function add_supp_invoice($supp_trans, $invoice_no=0) // do not receive as ref b $entered_grn->chg_price); // always return due to change in currency. - /*$mat_cost = update_average_material_cost(null, $entered_grn->item_code, - $diff, $entered_grn->this_quantity_inv, $old_date, true); */ $mat_cost = update_average_material_cost(null, $entered_grn->item_code, $diff, $entered_grn->this_quantity_inv, null, true); @@ -335,26 +342,26 @@ function add_supp_invoice($supp_trans, $invoice_no=0) // do not receive as ref b $Refs->save($trans_type, $invoice_id, $supp_trans->reference); - if ($invoice_no != 0) + if ($supp_trans->src_docs) { - $invoice_alloc_balance = get_supp_trans_allocation_balance(ST_SUPPINVOICE, $invoice_no); + $invoice_alloc_balance = get_supp_trans_allocation_balance(ST_SUPPINVOICE, $supp_trans->src_docs); if ($invoice_alloc_balance > 0) { //the invoice is not already fully allocated - $trans = get_supp_trans($invoice_no, ST_SUPPINVOICE); + $trans = get_supp_trans($supp_trans->src_docs, ST_SUPPINVOICE); $total = $trans['Total']; $allocate_amount = ($invoice_alloc_balance > $total) ? $total : $invoice_alloc_balance; /*Now insert the allocation record if > 0 */ if ($allocate_amount != 0) { - update_supp_trans_allocation(ST_SUPPINVOICE, $invoice_no, $allocate_amount); + update_supp_trans_allocation(ST_SUPPINVOICE, $supp_trans->src_docs, $allocate_amount); update_supp_trans_allocation(ST_SUPPCREDIT, $invoice_id, $allocate_amount); // *** - add_supp_allocation($allocate_amount, ST_SUPPCREDIT, $invoice_id, ST_SUPPINVOICE, $invoice_no, + add_supp_allocation($allocate_amount, ST_SUPPCREDIT, $invoice_id, ST_SUPPINVOICE, $supp_trans->src_docs, $date_); // Exchange Variations Joe Hunt 2008-09-20 //////////////////////////////////////// - exchange_variation(ST_SUPPCREDIT, $invoice_id, ST_SUPPINVOICE, $invoice_no, $date_, + exchange_variation(ST_SUPPCREDIT, $invoice_id, ST_SUPPINVOICE, $supp_trans->src_docs, $date_, $allocate_amount, PT_SUPPLIER); /////////////////////////////////////////////////////////////////////////// @@ -362,7 +369,6 @@ function add_supp_invoice($supp_trans, $invoice_no=0) // do not receive as ref b } } - $supp_trans->trans_no = $invoice_id; hook_db_postwrite($supp_trans, $supp_trans->trans_type); commit_transaction(); @@ -392,9 +398,11 @@ function get_po_invoices_credits($po_number) function read_supp_invoice($trans_no, $trans_type, &$supp_trans) { - $sql = "SELECT ".TB_PREF."supp_trans.*, supp_name FROM ".TB_PREF."supp_trans,".TB_PREF."suppliers + $sql = "SELECT ".TB_PREF."supp_trans.*, supp_name + FROM ".TB_PREF."supp_trans,".TB_PREF."suppliers WHERE trans_no = ".db_escape($trans_no)." AND type = ".db_escape($trans_type)." AND ".TB_PREF."suppliers.supplier_id=".TB_PREF."supp_trans.supplier_id"; + $result = db_query($sql, "Cannot retreive a supplier transaction"); if (db_num_rows($result) == 1) @@ -428,7 +436,10 @@ function read_supp_invoice($trans_no, $trans_type, &$supp_trans) if ($details_row["gl_code"] == 0) { $supp_trans->add_grn_to_trans($details_row["grn_item_id"], $details_row["po_detail_item_id"], $details_row["stock_id"], - $details_row["description"], 0, 0, $details_row["quantity"], 0, $details_row["FullUnitPrice"], + $details_row["description"], + $details_row['qty_recd'], + $details_row['quantity_inv']-$details_row["quantity"], + $details_row["quantity"], 0, $details_row["FullUnitPrice"], 0, 0); } else @@ -549,17 +560,18 @@ function get_gl_account_info($acc) return db_query($sql,"get account information"); } -function is_reference_already_there($supplier_id, $supp_reference) +function is_reference_already_there($supplier_id, $supp_reference, $trans_no=0) { - $sql = "SELECT Count(*) FROM ".TB_PREF."supp_trans WHERE supplier_id=" + $sql = "SELECT COUNT(*) FROM ".TB_PREF."supp_trans WHERE supplier_id=" .db_escape($supplier_id) . " AND supp_reference=" .db_escape($supp_reference) . " AND ov_amount!=0"; // ignore voided invoice references - + if ($trans_no) + $sql .= " AND trans_no!=$trans_no"; $result=db_query($sql,"The sql to check for the previous entry of the same invoice failed"); $myrow = db_fetch_row($result); - return ($myrow[0] == 1); + return $myrow[0] > 0; } function remove_not_invoice_item($id) @@ -601,4 +613,25 @@ function remove_not_invoice_item($id) commit_transaction(); } + +function find_src_invoices($cart) +{ + $invoices = $po_ids = array(); + foreach($cart->grn_items as $item) + $po_ids[] = "'$item->po_detail_item'"; // credit item lines + + if (count($po_ids)) { + $sql = "SELECT DISTINCT trans.trans_no, trans.reference, trans.supp_reference + FROM ".TB_PREF."supp_invoice_items items + LEFT JOIN ".TB_PREF."supp_trans trans ON trans.trans_no=items.supp_trans_no AND trans.`type`=items.supp_trans_type + WHERE items.po_detail_item_id IN (" . implode(',', $po_ids). ")"." AND items.supp_trans_type=20"; + $result = db_query($sql, "cannot find source invoice details"); + while ($rec = db_fetch($result)) + { + $invoices[$rec['trans_no']] = $rec['supp_reference']; // array($rec['reference'], $rec['supp_reference']); + } + } + return $invoices; +} + ?> diff --git a/purchasing/includes/db/invoice_items_db.inc b/purchasing/includes/db/invoice_items_db.inc index efcdcb4b..d6953157 100644 --- a/purchasing/includes/db/invoice_items_db.inc +++ b/purchasing/includes/db/invoice_items_db.inc @@ -44,9 +44,12 @@ function add_supp_invoice_gl_item($supp_trans_type, $supp_trans_no, $gl_code, $a function get_supp_invoice_items($supp_trans_type, $supp_trans_no) { - $sql = "SELECT *, unit_price AS FullUnitPrice FROM ".TB_PREF."supp_invoice_items + $sql = "SELECT *, unit_price AS FullUnitPrice FROM ".TB_PREF."supp_invoice_items inv, + ".TB_PREF."grn_items grn WHERE supp_trans_type = ".db_escape($supp_trans_type)." - AND supp_trans_no = ".db_escape($supp_trans_no)." ORDER BY id"; + AND supp_trans_no = ".db_escape($supp_trans_no) + ." AND grn.id =inv.grn_item_id" + ." ORDER BY inv.id"; return db_query($sql, "Cannot retreive supplier transaction detail records"); } diff --git a/purchasing/includes/supp_trans_class.inc b/purchasing/includes/supp_trans_class.inc index f95a7825..60e5b7ed 100644 --- a/purchasing/includes/supp_trans_class.inc +++ b/purchasing/includes/supp_trans_class.inc @@ -28,10 +28,12 @@ class supp_trans var $tax_included; var $trans_type; // invoice or credit + var $trans_no; var $Comments; var $tran_date; var $due_date; + var $src_docs = array(); // source invoice for this credit note (if any) var $supp_reference; var $reference; @@ -42,13 +44,28 @@ class supp_trans var $credit = 0; var $tax_algorithm; var $stored_algorithm; + var $currency; - function supp_trans($trans_type) + function supp_trans($trans_type, $trans_no=0) { - $this->trans_type = $trans_type; /*Constructor function initialises a new Supplier Transaction object */ - $this->grn_items = array(); - $this->gl_codes = array(); + $this->read($trans_type, $trans_no); + } + + function read($trans_type, $trans_no) + { + $this->trans_type = $trans_type; + $this->trans_no = $trans_no; + $this->grn_items = array(); + $this->gl_codes = array(); + if ($trans_no) { + read_supp_invoice($trans_no, $trans_type, $this); + if ($trans_type == ST_SUPPCREDIT) + { + $this->src_docs = find_src_invoices($trans_no); + } + read_supplier_details_to_trans($this, $this->supplier_id); + } } function add_grn_to_trans($grn_item_id, $po_detail_item, $item_code, $item_description, @@ -58,6 +75,7 @@ class supp_trans $this->grn_items[$grn_item_id] = new grn_item($grn_item_id, $po_detail_item, $item_code, $item_description, $qty_recd, $prev_quantity_inv, $this_quantity_inv, $order_price, $chg_price, $std_cost_unit, $gl_code, $this->tax_included); + $this->src_docs = find_src_invoices($this); return 1; } diff --git a/purchasing/includes/ui/invoice_ui.inc b/purchasing/includes/ui/invoice_ui.inc index bbd9300a..a508d4bb 100644 --- a/purchasing/includes/ui/invoice_ui.inc +++ b/purchasing/includes/ui/invoice_ui.inc @@ -68,19 +68,28 @@ function invoice_header(&$supp_trans) table_section(1); - if (isset($_POST['invoice_no'])) + if ($supp_trans->trans_type == ST_SUPPCREDIT && $supp_trans->src_docs) { - $trans = get_supp_trans($_POST['invoice_no'], ST_SUPPINVOICE); - $_POST['supplier_id'] = $trans['supplier_id']; - $supp = $trans['supplier_name'] . " - " . $trans['SupplierCurrCode']; +// $trans = get_supp_trans($_POST['invoice_no'], ST_SUPPINVOICE); +// $trans = get_supp_trans($supp_trans->supplier_id, ST_SUPPINVOICE); +// $_POST['supplier_id'] = $trans['supplier_id']; +// $supp = $trans['supplier_name'] . " - " . $trans['SupplierCurrCode']; + + $_POST['supplier_id'] = $supp_trans->supplier_id; + $supp = $supp_trans->supplier_name." - ".$supp_trans->currency; label_row(_("Supplier:"), $supp.hidden('supplier_id', $_POST['supplier_id'], false)); - } + } else { if (!isset($_POST['supplier_id']) && (get_global_supplier() != ALL_TEXT)) $_POST['supplier_id'] = get_global_supplier(); - supplier_list_row(_("Supplier:"), 'supplier_id', $_POST['supplier_id'], false, true); + if (!$supp_trans->trans_no) + supplier_list_row(_("Supplier:"), 'supplier_id', $_POST['supplier_id'], false, true); + else + label_row(_("Supplier:"), $supp_trans->supplier_name + .($supp_trans->currency ? ' - '.$supp_trans->currency : '') + .hidden('supplier_id', $_POST['supplier_id'], false)); } if ($supp_trans->supplier_id != $_POST['supplier_id']) { @@ -331,14 +340,14 @@ function display_gl_items(&$supp_trans, $mode=0) function display_grn_items_for_selection(&$supp_trans, $k) { - if ($supp_trans->trans_type == ST_SUPPINVOICE) - $result = get_grn_items(0, $supp_trans->supplier_id, true); + if ($supp_trans->trans_type == ST_SUPPINVOICE) // outstanding grns and eventually for selected invoice + $result = get_grn_items(0, $supp_trans->supplier_id, true, false, $supp_trans->trans_no); else - { + { // only invoiced if (isset($_POST['receive_begin']) && isset($_POST['receive_end'])) $result = get_grn_items(0, $supp_trans->supplier_id, false, true, 0, $_POST['receive_begin'], $_POST['receive_end']); - else if (isset($_POST['invoice_no'])) - $result = get_grn_items(0, $supp_trans->supplier_id, false, true, $_POST['invoice_no']); + else if ($supp_trans->src_docs) + $result = get_grn_items(0, $supp_trans->supplier_id, false, true, array_keys($supp_trans->src_docs)); else $result = get_grn_items(0, $supp_trans->supplier_id, false, true); } @@ -360,13 +369,14 @@ function display_grn_items_for_selection(&$supp_trans, $k) $grn_already_on_invoice = true; } } + if ($grn_already_on_invoice == false) { alt_table_row_color($k); $n = $myrow["id"]; - label_cell(get_trans_view_str(25, $myrow["grn_batch_id"])); + label_cell(get_trans_view_str(ST_SUPPRECEIVE, $myrow["grn_batch_id"])); label_cell($myrow["id"]. hidden('qty_recd'.$n, $myrow["qty_recd"], false). hidden('item_code'.$n, $myrow["item_code"], false). @@ -385,10 +395,10 @@ function display_grn_items_for_selection(&$supp_trans, $k) if ($supp_trans->trans_type == ST_SUPPINVOICE) qty_cells(null, 'this_quantity_inv'.$n, number_format2($myrow["qty_recd"] - $myrow["quantity_inv"], $dec), null, null, $dec); - else + else qty_cells(null, 'This_QuantityCredited'.$n, number_format2(max($myrow["quantity_inv"], 0), $dec), null, null, $dec); - $dec2 = 0; + $dec2 = 0; if ($supp_trans->trans_type == ST_SUPPINVOICE) { amount_cells(null, 'ChgPrice'.$n, price_decimal_format($myrow["unit_price"], $dec2), null, null, $dec2); @@ -450,28 +460,28 @@ function display_grn_items(&$supp_trans, $mode=0) $heading = _("Received Items Charged on this Invoice"); else $heading = _("Received Items Credited on this Note"); - } + } display_heading($heading); if ($mode == 1) { - if ($supp_trans->trans_type == ST_SUPPCREDIT && !isset($_POST['invoice_no'])) + if ($supp_trans->trans_type == ST_SUPPCREDIT) { echo ""; date_cells(_("Received between"), 'receive_begin', "", null, -30, 0, 0, "valign=middle"); date_cells(_("and"), 'receive_end', '', null, 1, 0, 0, "valign=middle"); submit_cells('RefreshInquiry', _("Search"),'',_('Refresh Inquiry'), true); echo ""; - } - + } + if ($heading2 != "") { display_note($heading2, 0, 0, "class='overduefg'"); - } + } echo ""; submit('InvGRNAll', _("Add All Items"), true, false,true); - } + } end_outer_table(0, false); diff --git a/purchasing/inquiry/supplier_inquiry.php b/purchasing/inquiry/supplier_inquiry.php index 822654ec..3a341abe 100644 --- a/purchasing/inquiry/supplier_inquiry.php +++ b/purchasing/inquiry/supplier_inquiry.php @@ -145,10 +145,15 @@ function fmt_credit($row) function prt_link($row) { - if ($row['type'] == ST_SUPPAYMENT || $row['type'] == ST_BANKPAYMENT || $row['type'] == ST_SUPPCREDIT) + if ($row['type'] == ST_SUPPAYMENT || $row['type'] == ST_BANKPAYMENT) return print_document_link($row['trans_no']."-".$row['type'], _("Print Remittance"), true, ST_SUPPAYMENT, ICON_PRINT); } +function edit_link($row) +{ + return edit_trans_link($row['type'], $row['trans_no']); +} + function check_overdue($row) { return $row['OverDue'] == 1 @@ -171,7 +176,8 @@ $cols = array( _("Credit") => array('align'=>'right', 'insert'=>true,'fun'=>'fmt_credit'), array('insert'=>true, 'fun'=>'gl_view'), array('insert'=>true, 'fun'=>'credit_link'), - array('insert'=>true, 'fun'=>'prt_link') + array('insert'=>true, 'fun'=>'prt_link'), + array('insert'=>true, 'fun'=>'edit_link') ); if ($_POST['supplier_id'] != ALL_TEXT) diff --git a/purchasing/supplier_credit.php b/purchasing/supplier_credit.php index dd319157..0f75493a 100644 --- a/purchasing/supplier_credit.php +++ b/purchasing/supplier_credit.php @@ -25,12 +25,47 @@ if ($use_popup_windows) $js .= get_js_open_window(900, 500); if ($use_date_picker) $js .= get_js_date_picker(); -page(_($help_context = "Supplier Credit Note"), false, false, "", $js); //---------------------------------------------------------------------------------------- check_db_has_suppliers(_("There are no suppliers defined in the system.")); +if (isset($_GET['ModifyCredit'])) + check_is_closed(ST_SUPPINVOICE, $_GET['ModifyCredit']); + +//--------------------------------------------------------------------------------------------------- + +if (isset($_GET['New'])) +{ + if (isset( $_SESSION['supp_trans'])) + { + unset ($_SESSION['supp_trans']->grn_items); + unset ($_SESSION['supp_trans']->gl_codes); + unset ($_SESSION['supp_trans']); + } + + if (isset($_GET['invoice_no'])) + { + $_SESSION['supp_trans'] = new supp_trans(ST_SUPPINVOICE, $_GET['invoice_no']); + $_SESSION['supp_trans']->src_doc = $_GET['invoice_no']; + + + $_SESSION['supp_trans']->trans_type = ST_SUPPCREDIT; + $_SESSION['supp_trans']->trans_no = 0; + $_SESSION['supp_trans']->supp_reference = ''; + // $_SESSION['supp_trans']->supp_reference = $_POST['invoice_no'] = $_GET['invoice_no']; + $help_context = "Supplier Credit Note"; + $_SESSION['page_title'] = _("Supplier Credit Note"); + + $_SESSION['supp_trans'] = new supp_trans(ST_SUPPCREDIT); + } elseif (isset($_GET['ModifyInvoice'])) { + $help_context = 'Modifying Purchase Invoice'; + $_SESSION['page_title'] = sprintf( _("Modifying Supplier Credit # %d"), $_GET['ModifyCredit']); + $_SESSION['supp_trans'] = new supp_trans(ST_SUPPCREDIT, $_GET['ModifyCredit']); + } + +page($_SESSION['page_title'], false, false, "", $js); + //--------------------------------------------------------------------------------------------------------------- if (isset($_GET['AddedID'])) @@ -51,23 +86,6 @@ if (isset($_GET['AddedID'])) display_footer_exit(); } -//--------------------------------------------------------------------------------------------------- - -if (isset($_GET['New'])) -{ - if (isset( $_SESSION['supp_trans'])) - { - unset ($_SESSION['supp_trans']->grn_items); - unset ($_SESSION['supp_trans']->gl_codes); - unset ($_SESSION['supp_trans']); - } - - $_SESSION['supp_trans'] = new supp_trans(ST_SUPPCREDIT); - if (isset($_GET['invoice_no'])) - { - $_SESSION['supp_trans']->supp_reference = $_POST['invoice_no'] = $_GET['invoice_no']; - } -} function clear_fields() { @@ -91,7 +109,7 @@ if (isset($_POST['ClearFields'])) clear_fields(); } -if (isset($_POST['AddGLCodeToTrans'])){ +if (isset($_POST['AddGLCodeToTrans'])) { $Ajax->activate('gl_items'); $input_error = false; @@ -151,7 +169,7 @@ function check_data() return false; } - if (!is_new_reference($_SESSION['supp_trans']->reference, ST_SUPPCREDIT)) + if (!is_new_reference($_SESSION['supp_trans']->reference, ST_SUPPCREDIT, $_SESSION['supp_trans']->trans_no)) { display_error(_("The entered reference is already in use.")); set_focus('reference'); @@ -202,10 +220,7 @@ function handle_commit_credit_note() if (!check_data()) return; - if (isset($_POST['invoice_no'])) - $invoice_no = add_supp_invoice($_SESSION['supp_trans'], $_POST['invoice_no']); - else - $invoice_no = add_supp_invoice($_SESSION['supp_trans']); + $invoice_no = add_supp_invoice($_SESSION['supp_trans']); $_SESSION['supp_trans']->clear_items(); unset($_SESSION['supp_trans']); diff --git a/purchasing/supplier_invoice.php b/purchasing/supplier_invoice.php index 90b86a94..7e3ca5df 100644 --- a/purchasing/supplier_invoice.php +++ b/purchasing/supplier_invoice.php @@ -25,12 +25,34 @@ if ($use_popup_windows) $js .= get_js_open_window(900, 500); if ($use_date_picker) $js .= get_js_date_picker(); -page(_($help_context = "Enter Supplier Invoice"), false, false, "", $js); - //---------------------------------------------------------------------------------------- check_db_has_suppliers(_("There are no suppliers defined in the system.")); +if (isset($_GET['ModifyInvoice'])) + check_is_closed(ST_SUPPINVOICE, $_GET['ModifyInvoice']); + +//-------------------------------------------------------------------------------------------------- + +if (isset($_GET['New'])) +{ + if (isset( $_SESSION['supp_trans'])) + { + unset ($_SESSION['supp_trans']->grn_items); + unset ($_SESSION['supp_trans']->gl_codes); + unset ($_SESSION['supp_trans']); + } + $help_context = "Enter Supplier Invoice"; + $_SESSION['page_title'] = _("Enter Supplier Invoice"); + + $_SESSION['supp_trans'] = new supp_trans(ST_SUPPINVOICE); +} else if(isset($_GET['ModifyInvoice'])) { + $help_context = 'Modifying Purchase Invoice'; + $_SESSION['page_title'] = sprintf( _("Modifying Purchase Invoice # %d"), $_GET['ModifyInvoice']); + $_SESSION['supp_trans'] = new supp_trans(ST_SUPPINVOICE, $_GET['ModifyInvoice']); +} + +page($_SESSION['page_title'], false, false, "", $js); //--------------------------------------------------------------------------------------------------------------- if (isset($_GET['AddedID'])) @@ -66,6 +88,8 @@ if (isset($_GET['New'])) } $_SESSION['supp_trans'] = new supp_trans(ST_SUPPINVOICE); +} else if(isset($_GET['ModifyInvoice'])) { + $_SESSION['supp_trans'] = new supp_trans(ST_SUPPINVOICE, $_GET['ModifyInvoice']); } //-------------------------------------------------------------------------------------------------- @@ -149,7 +173,7 @@ function check_data() return false; } - if (!is_new_reference($_SESSION['supp_trans']->reference, ST_SUPPINVOICE)) + if (!is_new_reference($_SESSION['supp_trans']->reference, ST_SUPPINVOICE, $_SESSION['supp_trans']->trans_no)) { display_error(_("The entered reference is already in use.")); set_focus('reference'); @@ -182,7 +206,7 @@ function check_data() return false; } - if (is_reference_already_there($_SESSION['supp_trans']->supplier_id, $_POST['supp_reference'])) + if (is_reference_already_there($_SESSION['supp_trans']->supplier_id, $_POST['supp_reference'], $_SESSION['supp_trans']->trans_no)) { /*Transaction reference already entered */ display_error(_("This invoice number has already been entered. It cannot be entered again.") . " (" . $_POST['supp_reference'] . ")"); return false;