X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=sales%2Fincludes%2Fcart_class.inc;h=660fcc28e59743b29f2987a46fe72050f346e1df;hb=8eb8e44cb90ab144f0849d1ecd2153175b619786;hp=7d68e2a4622fc60cfccf6bee5298556fd1c079b5;hpb=19ddc3939071044c8e94b628f1d6a039f50cc493;p=fa-stable.git diff --git a/sales/includes/cart_class.inc b/sales/includes/cart_class.inc index 7d68e2a4..660fcc28 100644 --- a/sales/includes/cart_class.inc +++ b/sales/includes/cart_class.inc @@ -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 @@ -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: @@ -694,7 +703,7 @@ class line_details function __construct($stock_id, $qty, $prc, $disc_percent, - $qty_done, $standard_cost, $description, $id=0, $src_no=0, $src_id=0) + $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); + } }