X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=sales%2Fincludes%2Fcart_class.inc;h=660fcc28e59743b29f2987a46fe72050f346e1df;hb=8eb8e44cb90ab144f0849d1ecd2153175b619786;hp=6296e5ccc1188c17e4dd72c06c84a178ac67a3b7;hpb=f11b39846d81bd043490ba9596224b859e47467c;p=fa-stable.git diff --git a/sales/includes/cart_class.inc b/sales/includes/cart_class.inc index 6296e5cc..660fcc28 100644 --- a/sales/includes/cart_class.inc +++ b/sales/includes/cart_class.inc @@ -21,7 +21,7 @@ iv) a delivery note include_once($path_to_root . "/inventory/includes/inventory_db.inc"); include_once($path_to_root . "/taxes/tax_calc.inc"); -class cart +class Cart { var $trans_type; // invoice, order, quotation, delivery note ... var $trans_no = array();// array (num1=>ver1,..) or 0 for new @@ -61,7 +61,6 @@ class cart var $tax_group_id; var $tax_group_name; - var $tax_group_array = null; // saves db queries var $price_factor; // ditto for price calculations var $pos; // user assigned POS @@ -74,8 +73,8 @@ class cart var $payment_terms; // cached payment terms var $credit; // prepayment mode: - var $prepaid; // true for documents issued in prepayment mode - var $prep_amount; // prepayment required for SO, invoiced amount for prepaiament invoice + var $prepaid=false; // true for documents issued in prepayment mode + var $prep_amount=0; // prepayment required for SO, invoiced amount for prepaiament invoice var $sum_paid; // sum of all allocated prepayments both to order and related invoices var $alloc; // sum of payments allocated to this document var $prepayments = array(); // allocation records for this document @@ -90,7 +89,7 @@ class cart // $trans_no!=0 && $prepare_child==true => prepare for child doc entry // $prepare_child is set to ST_SALESINVOICE for prepayment invoices // - function Cart($type, $trans_no=0, $prepare_child=false) { + function __construct($type, $trans_no=0, $prepare_child=false) { /*Constructor function initialises a new shopping cart */ $this->line_items = array(); $this->sales_type = ""; @@ -286,11 +285,18 @@ class cart // $policy - 0 or 1: writeoff/return for IV, back order/cancel for DN function write($policy=0) { + global $SysPrefs, $Refs; + begin_transaction(); // prevents partial database changes in case of direct delivery/invoice if ($this->reference != 'auto' && $this->trans_no == 0 && !is_new_reference($this->reference, $this->trans_type)) { - commit_transaction(); - return -1; + if (!empty($SysPrefs->prefs['ref_no_auto_increase'])) + $this->reference = $Refs->get_next($this->trans_type, null, array('date' => Today())); + if (!is_new_reference($this->reference, $this->trans_type)) + { + commit_transaction(); + return -1; + } } if (count($this->src_docs) == 0 && ($this->trans_type == ST_SALESINVOICE || $this->trans_type == ST_CUSTDELIVERY) && !$this->is_prepaid()) { // this is direct document - first add parent @@ -361,7 +367,6 @@ class cart $this->phone = $phone; $this->email = $email; $this->tax_group_id = $tax_group_id; - $this->tax_group_array = get_tax_group_items_as_array($tax_group_id); } function set_sales_type($sales_type, $sales_name, $tax_included=0, $factor=0) @@ -387,13 +392,14 @@ class cart $this->freight_cost = $freight_cost; } - function add_to_cart($line_no, $stock_id, $qty, $price, $disc, $qty_done=0, $standard_cost=0, $description=null, $id=0, $src_no=0, + function add_to_cart($line_no, $stock_id, $qty, $price, $disc, $qty_done=0, $unit_cost=0, $description=null, $id=0, $src_no=0, $src_id=0) { $line = new line_details($stock_id, $qty, $price, $disc, - $qty_done, $standard_cost, $description, $id, $src_no, $src_id); + $qty_done, $unit_cost, $description, $id, $src_no, $src_id); if ($line->valid) { + $line->cart = $this; $this->line_items[$line_no] = $line; return 1; } else @@ -496,12 +502,27 @@ class cart return 0; } + /* + Split line value to cost and taxes. + Stores calculated amounts in $line->gl_amounts arrays. + */ + function split_line_values() + { + // split nominal line values + foreach ($this->line_items as $line) + $line->split_item_value(); + } + function get_taxes($shipping_cost=null) { $items = array(); $prices = array(); - if($shipping_cost==null) - $shipping_cost = $this->freight_cost; + if ($this->ship_via != '') { + if ($shipping_cost == null) + $shipping_cost = $this->freight_cost; + $items[] = $this->ship_via; + $prices[] = $shipping_cost; + } foreach ($this->line_items as $ln_itm) { $items[] = $ln_itm->stock_id; @@ -510,8 +531,7 @@ class cart $ln_itm->line_price()* (1 - $ln_itm->discount_percent)), user_price_dec()); } - $taxes = get_tax_for_items($items, $prices, $shipping_cost, - $this->tax_group_id, $this->tax_included, $this->tax_group_array); + $taxes = get_tax_for_items($this->trans_type, $items, $prices, $this->tax_group_id, $this->tax_included); // Adjustment for swiss franken, we always have 5 rappen = 1/20 franken if ($this->customer_currency == 'CHF') { @@ -534,21 +554,9 @@ class cart function get_shipping_tax() { + $freight = split_item_price($this->ship_via, $this->freight_cost, $this->tax_group_id, $this->tax_included, $this->trans_type); - $tax_items = get_shipping_tax_as_array($this->tax_group_id); - $tax_rate = 0; - if ($tax_items != null) { - foreach ($tax_items as $item_tax) { - $index = $item_tax['tax_type_id']; - if (isset($this->tax_group_array[$index]['rate'])) { - $tax_rate += $item_tax['rate']; - } - } - } - if($this->tax_included) - return round($this->freight_cost*$tax_rate/($tax_rate+100), user_price_dec()); - else - return round($this->freight_cost*$tax_rate/100, user_price_dec()); + return $freight['Tax']; } /* Returns transaction value including all taxes @@ -662,9 +670,10 @@ class line_details var $price; var $discount_percent; - var $standard_cost; + var $unit_cost; var $descr_editable; + var $cart; // line context var $valid; // validation in constructor /* Line quantity properties in various cart create modes: @@ -693,8 +702,8 @@ class line_details var $qty_old = 0; - function line_details ($stock_id, $qty, $prc, $disc_percent, - $qty_done, $standard_cost, $description, $id=0, $src_no=0, $src_id=0) + function __construct($stock_id, $qty, $prc, $disc_percent, + $qty_done, $unit_cost, $description, $id=0, $src_no=0, $src_id=0) { /* Constructor function to add a new LineDetail object with passed params */ @@ -721,7 +730,7 @@ class line_details $this->price = $prc; $this->discount_percent = $disc_percent; $this->qty_done = $qty_done; - $this->standard_cost = $standard_cost; + $this->unit_cost = $unit_cost; $this->valid = true; } @@ -730,5 +739,20 @@ class line_details { return $this->price; } + + function taxfree_charge_price() + { + $this->split_item_value(); + return $this->gl_amounts['Net']; + } + + /* + Splits item value to parts posted to GL. + */ + function split_item_value() + { + return $this->gl_amounts = split_item_price($this->stock_id, $this->price*$this->quantity, $this->cart->tax_group_id, $this->cart->tax_included, + $this->cart->trans_type); + } }