X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=sales%2Fincludes%2Fdb%2Fsales_delivery_db.inc;h=5c269406349b06a7aeadb09e9db755eb2035dc4f;hb=49fa30e88e27b311edaca3ae3789d62e4629eb39;hp=a53a8de0ffe9145e3a72a2ac40df64953a1e77ea;hpb=a1e1eb5f69391bf58de97795390399535bfc2532;p=fa-stable.git diff --git a/sales/includes/db/sales_delivery_db.inc b/sales/includes/db/sales_delivery_db.inc index a53a8de0..5c269406 100644 --- a/sales/includes/db/sales_delivery_db.inc +++ b/sales/includes/db/sales_delivery_db.inc @@ -1,251 +1,190 @@ . +***********************************************************************/ +//----------------------------------------------------------------------------- +// insert/update sales delivery +// +function write_sales_delivery(&$delivery,$bo_policy) +{ + global $Refs; -// $bo_policy = 0, cancel remaining quantities on order -// = 1, backorder remaining quantities + $trans_no = $delivery->trans_no; + if (is_array($trans_no)) $trans_no = key($trans_no); -function add_sales_delivery(&$delivery, $date_, $due_date, $sales_order, $tax_group_id, - $charge_shipping, $location, $ship_via, $sales_type, $reference, $memo_, $bo_policy) -{ begin_transaction(); - - $company_data = get_company_prefs(); - - $branch_data = get_branch_accounts($delivery->Branch); - - $delivery_items_total = $delivery->get_items_total_dispatch($tax_group_id); - - $tax_total = 0; - $taxes = $delivery->get_taxes($tax_group_id, $charge_shipping); - foreach ($taxes as $taxitem) - $tax_total += $taxitem['Value']; - - /*Now insert the debtor_trans */ - $delivery_no = add_customer_trans(13, $delivery->customer_id, $delivery->Branch, $date_, - $reference, $delivery_items_total, 0, $tax_total, $charge_shipping, - $sales_type, $sales_order, 0, $ship_via, $due_date); - - // If balance of this delivery cancelled update sales order details quantity. - foreach ($delivery->line_items as $delivery_line) - { - $line_taxfree_price = $delivery_line->taxfree_price($tax_group_id); - /* add delivery details for _all_ lines */ - add_customer_trans_detail_item(13, $delivery_no, $delivery_line->stock_id, - $delivery_line->item_description, $location, $date_, - -$delivery_line->qty_dispatched, $line_taxfree_price, 0, - $delivery_line->discount_percent, $reference, $delivery_line->standard_cost); - - if ($delivery_line->qty_dispatched != 0) - { - // Now update sales_order_details for the quantity delivered - dispatch_sales_order_item($sales_order, $delivery_line->stock_id, - $delivery_line->qty_dispatched, $delivery_line->id); - + $delivery->bo_policy = $bo_policy; + hook_db_prewrite($delivery, ST_CUSTDELIVERY); + + $customer = get_customer($delivery->customer_id); + $delivery_items_total = $delivery->get_items_total_dispatch(); + $freight_tax = $delivery->get_shipping_tax(); + +// mark sales order for concurrency conflicts check + update_sales_order_version($delivery->src_docs); + + $tax_total = 0; + $taxes = $delivery->get_taxes(); // all taxes with freight_tax + + foreach ($taxes as $taxitem) { + $taxitem['Value'] = round2($taxitem['Value'], user_price_dec()); + $tax_total += $taxitem['Value']; + } + /* Insert/update the debtor_trans */ + $delivery_no = write_customer_trans(ST_CUSTDELIVERY, $trans_no, $delivery->customer_id, + $delivery->Branch, $delivery->document_date, $delivery->reference, + $delivery_items_total, 0, + $delivery->tax_included ? 0 : $tax_total-$freight_tax, + $delivery->freight_cost, + $delivery->tax_included ? 0 : $freight_tax, + $delivery->sales_type, $delivery->order_no, + $delivery->ship_via, $delivery->due_date, 0, 0, $delivery->dimension_id, + $delivery->dimension2_id, $delivery->payment); + + if ($trans_no == 0) { + $delivery->trans_no = array($delivery_no=>0); + } else { + void_gl_trans(ST_CUSTDELIVERY, $delivery_no, true); + void_stock_move(ST_CUSTDELIVERY, $delivery_no); + void_trans_tax_details(ST_CUSTDELIVERY, $delivery_no); + delete_comments(ST_CUSTDELIVERY, $delivery_no); + } + + foreach ($delivery->line_items as $line_no => $delivery_line) { + + $line_price = $delivery_line->line_price(); + $line_taxfree_price = get_tax_free_price_for_item($delivery_line->stock_id, + $delivery_line->price, 0, $delivery->tax_included, + $delivery->tax_group_array); + + $line_tax = get_full_price_for_item($delivery_line->stock_id, $delivery_line->price, + 0, $delivery->tax_included, $delivery->tax_group_array) - $line_taxfree_price; + + if ($trans_no != 0) // Inserted 2008-09-25 Joe Hunt + $delivery_line->standard_cost = get_standard_cost($delivery_line->stock_id); + + /* add delivery details for all lines */ + write_customer_trans_detail_item(ST_CUSTDELIVERY, $delivery_no, $delivery_line->stock_id, + $delivery_line->item_description, $delivery_line->qty_dispatched, + $delivery_line->line_price(), $line_tax, + $delivery_line->discount_percent, $delivery_line->standard_cost, $delivery_line->src_id, + $trans_no ? $delivery_line->id : 0); + + // Now update sales_order_details for the quantity delivered + if ($delivery_line->qty_old != $delivery_line->qty_dispatched) + update_parent_line(ST_CUSTDELIVERY, $delivery_line->src_id, + $delivery_line->qty_dispatched-$delivery_line->qty_old); + + if ($delivery_line->qty_dispatched != 0) { + add_stock_move_customer(ST_CUSTDELIVERY, $delivery_line->stock_id, $delivery_no, + $delivery->Location, $delivery->document_date, $delivery->reference, + -$delivery_line->qty_dispatched, $delivery_line->standard_cost,1, + $line_price, $delivery_line->discount_percent); + + $stock_gl_code = get_stock_gl_code($delivery_line->stock_id); /* insert gl_trans to credit stock and debit cost of sales at standard cost*/ - if ($delivery_line->standard_cost != 0) - { + if (is_inventory_item($delivery_line->stock_id) && $delivery_line->standard_cost != 0) { /*first the cost of sales entry*/ - add_gl_trans_std_cost(13, $delivery_no, $date_, $stock_gl_code["cogs_account"], - $stock_gl_code["dimension_id"], $stock_gl_code["dimension2_id"], "", - $delivery_line->standard_cost * $delivery_line->qty_dispatched, - payment_person_types::customer(), $delivery->customer_id, + // 2008-08-01. If there is a Customer Dimension, then override with this, + // else take the Item Dimension (if any) + $dim = ($delivery->dimension_id != $customer['dimension_id'] ? $delivery->dimension_id : + ($customer['dimension_id'] != 0 ? $customer["dimension_id"] : $stock_gl_code["dimension_id"])); + $dim2 = ($delivery->dimension2_id != $customer['dimension2_id'] ? $delivery->dimension2_id : + ($customer['dimension2_id'] != 0 ? $customer["dimension2_id"] : $stock_gl_code["dimension2_id"])); + + add_gl_trans_std_cost(ST_CUSTDELIVERY, $delivery_no, + $delivery->document_date, $stock_gl_code["cogs_account"], $dim, $dim2, "", + $delivery_line->standard_cost * $delivery_line->qty_dispatched, + PT_CUSTOMER, $delivery->customer_id, "The cost of sales GL posting could not be inserted"); - + /*now the stock entry*/ - //$stock_gl_code = get_stock_gl_code($order_line->stock_id); - - add_gl_trans_std_cost(13, $delivery_no, $date_, $stock_gl_code["inventory_account"], 0, 0, "", - (-$delivery_line->standard_cost * $delivery_line->qty_dispatched), - payment_person_types::customer(), $delivery->customer_id, - "The stock side of the cost of sales GL posting could not be inserted"); + + add_gl_trans_std_cost(ST_CUSTDELIVERY, $delivery_no, $delivery->document_date, + $stock_gl_code["inventory_account"], 0, 0, "", + (-$delivery_line->standard_cost * $delivery_line->qty_dispatched), + PT_CUSTOMER, $delivery->customer_id, + "The stock side of the cost of sales GL posting could not be inserted"); } /* end of if GL and stock integrated and standard cost !=0 */ } /*quantity dispatched is more than 0 */ } /*end of order_line loop */ - if ($bo_policy == 0) - { + if ($bo_policy == 0) { // if cancelling any remaining quantities - close_sales_order($sales_order); + close_sales_order($delivery->order_no); } - - add_comments(13, $delivery_no, $date_, $memo_); - - add_forms_for_sys_type(13, $delivery_no, $location); - - references::save_last($reference, 13); - - commit_transaction(); + + // taxes - this is for printing purposes + foreach ($taxes as $taxitem) { + if ($taxitem['Net'] != 0) { + $ex_rate = get_exchange_rate_from_home_currency(get_customer_currency($delivery->customer_id), $delivery->document_date); + add_trans_tax_details(ST_CUSTDELIVERY, $delivery_no, $taxitem['tax_type_id'], + $taxitem['rate'], $delivery->tax_included, $taxitem['Value'], + $taxitem['Net'], $ex_rate, $delivery->document_date, $delivery->reference ); + } + } + + add_comments(ST_CUSTDELIVERY, $delivery_no, $delivery->document_date, $delivery->Comments); + + if ($trans_no == 0) { + $Refs->save(ST_CUSTDELIVERY, $delivery_no, $delivery->reference); + } + + hook_db_postwrite($delivery, ST_CUSTDELIVERY); + commit_transaction(); return $delivery_no; } //-------------------------------------------------------------------------------------------------- -function void_sales_delivery($type, $type_no) +function void_sales_delivery($type, $type_no, $transactions=true) { - begin_transaction(); + if ($transactions) + begin_transaction(); + + hook_db_prevoid($type, $type_no); void_gl_trans($type, $type_no, true); - - // for invoices and credits related to invoices, + // reverse all the changes in the sales order $items_result = get_customer_trans_details($type, $type_no); - + $order = get_customer_trans_order($type, $type_no); - - if ($order) - { - while ($row = db_fetch($items_result)) - { - dispatch_sales_order_item($order, $row["stock_id"], $row["quantity"]); + + if ($order) { + $auto = (get_reference(ST_SALESORDER, $order) == "auto"); + $order_items = get_sales_order_details($order, ST_SALESORDER); + while ($row = db_fetch($items_result)) { + $order_line = db_fetch($order_items); + update_parent_line(ST_CUSTDELIVERY, $order_line['id'], -$row['quantity'], $auto); } } - + // clear details after they've been reversed in the sales order void_customer_trans_details($type, $type_no); - - void_customer_trans_tax_details($type, $type_no); - - void_cust_allocations($type, $type_no); - - // do this last because other voidings can depend on it - // DO NOT MOVE THIS ABOVE VOIDING or we can end up with trans with alloc < 0 - void_customer_trans($type, $type_no); - - commit_transaction(); -} - -//---------------------------------------------------------------------------------------- - -function get_sales_delivery($trans_no) -{ - $sql = "SELECT ".TB_PREF."debtor_trans.*, - ".TB_PREF."cust_branch.*, - ".TB_PREF."debtors_master.name, - ".TB_PREF."debtors_master.curr_code, - ".TB_PREF."debtors_master.payment_terms, - ".TB_PREF."debtors_master.discount, - ".TB_PREF."sales_types.sales_type, - ".TB_PREF."shippers.shipper_name, - ".TB_PREF."tax_groups.name AS tax_group_name , - ".TB_PREF."tax_groups.id AS tax_group_id - FROM ".TB_PREF."debtor_trans, - ".TB_PREF."debtors_master, - ".TB_PREF."sales_types, - ".TB_PREF."tax_groups, - ".TB_PREF."cust_branch, - ".TB_PREF."shippers - WHERE ".TB_PREF."debtor_trans.type=13 - AND ".TB_PREF."debtor_trans.tpe=".TB_PREF."sales_types.id - AND ".TB_PREF."cust_branch.branch_code = ".TB_PREF."debtor_trans.branch_code - AND ".TB_PREF."cust_branch.tax_group_id = ".TB_PREF."tax_groups.id - AND ".TB_PREF."debtor_trans.debtor_no = ".TB_PREF."debtors_master.debtor_no - AND ".TB_PREF."shippers.shipper_id = ".TB_PREF."debtor_trans.ship_via - AND ".TB_PREF."debtor_trans.trans_no = "; - - if(is_array($trans_no)) { //assume all transactions are for the same customer/branch - $sql .= $trans_no[0]; - } else { - $sql .= $trans_no; - } - - $result = db_query($sql, "delivery Retreival"); - - $num = db_num_rows($result); - if ($num > 1) - { - display_db_error("FATAL : delivery note query returned a duplicate - " . db_num_rows($result), $sql, true); - } - else if ($num == 1) - { - return db_fetch($result); - } - else - display_db_error("FATAL : delivery note search return nothing - " . db_num_rows($result), $sql, true); - -} -//function get_sales_delivery_details($delivery) { -// if(!is_array($delivery)) { -// -// } -//} -//-------------------------------------------------------------------------------------------------- + void_trans_tax_details($type, $type_no); -function read_sales_delivery($trans_no, &$cart) -{ - $myrow = get_sales_delivery($trans_no); - - if(!is_array($trans_no)) $trans_no = array($trans_no); - - $cart->customer_id = $myrow["debtor_no"]; - $cart->Branch = $myrow["branch_code"]; - $cart->customer_name = $myrow["name"]; - $cart->cust_ref = $myrow["reference"]; - $cart->default_sales_type =$myrow["tpe"]; - $cart->sales_type_name =$myrow["sales_type"]; - $cart->customer_currency = $myrow["curr_code"]; - $cart->default_discount = $myrow["discount"]; - $cart->order_no = $myrow["order_"]; - -// $cart->Comments = get_comments(13,$trans_no); - - $cart->ship_via = $myrow["ship_via"]; - $cart->deliver_to = $myrow["br_name"]; - $cart->delivery_date = sql2date($myrow["due_date"]); - $cart->freight_cost = $myrow["ov_freight"]; - $cart->delivery_address = $myrow["br_address"]; - $cart->phone = $myrow["phone"]; - $cart->email = $myrow["email"]; - -// $cart->Location = $myrow["location"]; -// $cart->location_name = $myrow["location_name"]; - - $cart->orig_order_date = sql2date($myrow["tran_date"]); - - $cart->tax_group_name = $myrow["tax_group_name"]; - $cart->tax_group_id = $myrow["tax_group_id"]; - - $sql = "SELECT ".TB_PREF."debtor_trans_details.stock_id, unit_price, - debtor_trans_no, - ".TB_PREF."debtor_trans_details.description, - ".TB_PREF."debtor_trans_details.id, - ".TB_PREF."debtor_trans_details.quantity, discount_percent, - qty_done, ".TB_PREF."stock_master.units, - ".TB_PREF."stock_master.material_cost + ".TB_PREF."stock_master.labour_cost + ".TB_PREF."stock_master.overhead_cost AS standard_cost - FROM ".TB_PREF."debtor_trans_details, ".TB_PREF."stock_master - WHERE ".TB_PREF."debtor_trans_details.debtor_trans_type=13 AND - " .TB_PREF."debtor_trans_details.stock_id = ".TB_PREF."stock_master.stock_id"; - - $sql .= ' AND ('; - foreach($trans_no as $key=>$num) { - if($key!=0) $sql .= ' OR '; - $sql .= 'debtor_trans_no =' . $num; - } - $sql .= ') ORDER BY id'; - - $result = db_query($sql, "Retreive Delivery Note Items"); - - if (db_num_rows($result) > 0) - { - - while ($myrow = db_fetch($result)) - { - $cart->add_to_cart($myrow["stock_id"],-$myrow["quantity"], - $myrow["unit_price"], $myrow["discount_percent"], - -$myrow["qty_done"], $myrow["standard_cost"], $myrow["description"],$myrow["id"]); - } - } + void_cust_allocations($type, $type_no); - foreach($cart->line_items as $key=>$line) - $cart->line_items[$key]->qty_dispatched = - $cart->line_items[$key]->quantity - $cart->line_items[$key]->qty_done; + // do this last because other voidings can depend on it + // DO NOT MOVE THIS ABOVE VOIDING or we can end up with trans with alloc < 0 + void_customer_trans($type, $type_no); - return true; + if ($transactions) + commit_transaction(); } - ?> \ No newline at end of file