X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=sales%2Fincludes%2Fcart_class.inc;h=660fcc28e59743b29f2987a46fe72050f346e1df;hb=8eb8e44cb90ab144f0849d1ecd2153175b619786;hp=c6b6f353ef9479925d7af0e73e03880eef00df57;hpb=dace790b5b71c554f8de87babda2585dfa2a074c;p=fa-stable.git diff --git a/sales/includes/cart_class.inc b/sales/includes/cart_class.inc index c6b6f353..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 @@ -285,7 +284,7 @@ class Cart // Makes parent documents for direct delivery/invoice by recurent call. // $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 @@ -368,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) @@ -401,6 +399,7 @@ class Cart $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 @@ -503,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; @@ -517,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') { @@ -541,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 @@ -672,6 +673,7 @@ class line_details var $unit_cost; var $descr_editable; + var $cart; // line context var $valid; // validation in constructor /* Line quantity properties in various cart create modes: @@ -737,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); + } }