Added Purchase Invice edition.
authorJanusz Dobrowolski <janusz@frontaccouting.eu>
Wed, 27 Apr 2011 20:03:50 +0000 (22:03 +0200)
committerJanusz Dobrowolski <janusz@frontaccouting.eu>
Wed, 27 Apr 2011 20:03:50 +0000 (22:03 +0200)
includes/app_entries.inc
includes/db/inventory_db.inc
includes/references.inc
purchasing/includes/db/grn_db.inc
purchasing/includes/db/invoice_db.inc
purchasing/includes/db/invoice_items_db.inc
purchasing/includes/supp_trans_class.inc
purchasing/includes/ui/invoice_ui.inc
purchasing/inquiry/supplier_inquiry.php
purchasing/supplier_credit.php
purchasing/supplier_invoice.php

index 766e2fa7ab92cb10a8ed11c47077be8a4ccb92a3..eabfdd8096222428662678e045ae1706754dd5de 100644 (file)
@@ -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 => ,
index 5bc37a75300055bae0ff95252ed78310d9932b3f..b6916f0f6f305f0d699b0a9e051849887cbc07fc 100644 (file)
@@ -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;
 }
index 0c11ebee3defacaa1d96bcdfb61a25a862f08160..b67267c5ca41baad6c04e6aaa2e43a863c142865 100644 (file)
@@ -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);
index 691ae73f8f71f92bb63bd316859e332a37c08245..d1c35452b4bcb20eddd897a7e54c30c031eaa290 100644 (file)
@@ -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");
 }
index 344e2b68f7c2ec7cf6f81a18fbe8b70b3a0c8659..a7282c470312780c1a5cc06d8f77e58d751110a7 100644 (file)
@@ -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;
+}
+
 ?>
index efcdcb4bd323b1af4a737c2cbd2225ed10b176c2..d69531578f68061f100de7939838b2337f55a4d3 100644 (file)
@@ -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");
 }
 
index f95a78258e4fc8f4222fbd2c1e3fb9c4e4c27914..60e5b7edadb00c95c402d96594d0c82f2e1af7fc 100644 (file)
@@ -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;
        }
 
index bbd9300a5957954ae7c5e03798fb52690316406c..a508d4bb0924a28b625fe3ee36434e2af66f60dc 100644 (file)
@@ -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 "</td>";
                        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 "<td>";
-               }       
-                       
+               }
+
                if ($heading2 != "")
                {
                        display_note($heading2, 0, 0, "class='overduefg'");
-               }       
+               }
                echo "</td><td width=10% align='right'>";
                submit('InvGRNAll', _("Add All Items"), true, false,true);
-       }       
+       }
 
        end_outer_table(0, false);
 
index 822654ecbd1ce126f7cd5c6acf3fa61d5c003418..3a341abeef10f1e29e70a25420644afee84975d1 100644 (file)
@@ -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)
index dd3191571b4a14d1e804ab73bc9eab0c11eac21d..0f75493a3717088b8e2faf09b8bc917dab910ac3 100644 (file)
@@ -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']);
index 90b86a946c2d40ec71e1b033ffcb9be4b9aa912f..7e3ca5df811f8a5743fddfa35e829e3908f2198b 100644 (file)
@@ -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;