FIX New vat code not correctly implemented if "1 price per customer".

This commit is contained in:
Laurent Destailleur 2017-05-12 13:12:17 +02:00
parent 80b0d91154
commit 5581e5da72
6 changed files with 32 additions and 13 deletions

View File

@ -750,7 +750,7 @@ if (empty($reshook))
$tva_tx = get_default_tva($mysoc, $object->thirdparty, $prod->id);
$tva_npr = get_default_npr($mysoc, $object->thirdparty, $prod->id);
if (empty($tva_tx)) $tva_npr=0;
$pu_ht = $prod->price;
$pu_ttc = $prod->price_ttc;
$price_min = $prod->price_min;
@ -775,15 +775,16 @@ if (empty($reshook))
$prodcustprice = new Productcustomerprice($db);
$filter = array('t.fk_product' => $prod->id,'t.fk_soc' => $object->thirdparty->id);
$filter = array('t.fk_product' => $prod->id, 't.fk_soc' => $object->thirdparty->id);
$result = $prodcustprice->fetch_all('', '', 0, 0, $filter);
if ($result) {
// If there is some prices specific to the customer
if (count($prodcustprice->lines) > 0) {
$pu_ht = price($prodcustprice->lines[0]->price);
$pu_ttc = price($prodcustprice->lines[0]->price_ttc);
$price_base_type = $prodcustprice->lines[0]->price_base_type;
$tva_tx = $prodcustprice->lines[0]->tva_tx;
$tva_tx = ($prodcustprice->lines[0]->default_vat_code ? $prodcustprice->lines[0]->tva_tx . ' ('.$prodcustprice->lines[0]->default_vat_code.' )' : $prodcustprice->lines[0]->tva_tx);
}
}
}

View File

@ -263,6 +263,9 @@ update llx_accounting_account set account_parent = 0 where account_parent = '';
ALTER TABLE llx_product_price ALTER COLUMN date_price SET DEFAULT NULL;
ALTER TABLE llx_product_price ADD COLUMN default_vat_code varchar(10) after tva_tx;
ALTER TABLE llx_product_customer_price ADD COLUMN default_vat_code varchar(10) after tva_tx;
ALTER TABLE llx_product_customer_price_log ADD COLUMN default_vat_code varchar(10) after tva_tx;
ALTER TABLE llx_product_fournisseur_price ADD COLUMN default_vat_code varchar(10) after tva_tx;
ALTER TABLE llx_events MODIFY COLUMN ip varchar(250);

View File

@ -33,6 +33,7 @@ create table llx_product_customer_price
price_min double(24,8) DEFAULT 0,
price_min_ttc double(24,8) DEFAULT 0,
price_base_type varchar(3) DEFAULT 'HT',
default_vat_code varchar(10), -- Same code than into table llx_c_tva (but no constraints). Should be used in priority to find default vat, npr, localtaxes for product.
tva_tx double(6,3),
recuperableonly integer NOT NULL DEFAULT '0', -- Other NPR VAT
localtax1_tx double(6,3) DEFAULT 0, -- Other local VAT 1

View File

@ -30,6 +30,7 @@ create table llx_product_customer_price_log
price_min double(24,8) DEFAULT 0,
price_min_ttc double(24,8) DEFAULT 0,
price_base_type varchar(3) DEFAULT 'HT',
default_vat_code varchar(10), -- Same code than into table llx_c_tva (but no constraints). Should be used in priority to find default vat, npr, localtaxes for product.
tva_tx double(6,3),
recuperableonly integer NOT NULL DEFAULT '0', -- Other NPR VAT
localtax1_tx double(6,3) DEFAULT 0, -- Other local VAT 1

View File

@ -140,7 +140,6 @@ class Productcustomerprice extends CommonObject
// Insert request
$sql = "INSERT INTO " . MAIN_DB_PREFIX . "product_customer_price(";
$sql .= "entity,";
$sql .= "datec,";
$sql .= "fk_product,";
@ -150,6 +149,7 @@ class Productcustomerprice extends CommonObject
$sql .= "price_min,";
$sql .= "price_min_ttc,";
$sql .= "price_base_type,";
$sql .= "default_vat_code,";
$sql .= "tva_tx,";
$sql .= "recuperableonly,";
$sql .= "localtax1_type,";
@ -158,9 +158,7 @@ class Productcustomerprice extends CommonObject
$sql .= "localtax2_tx,";
$sql .= "fk_user,";
$sql .= "import_key";
$sql .= ") VALUES (";
$sql .= " " . $conf->entity . ",";
$sql .= " '" . $this->db->idate(dol_now()) . "',";
$sql .= " " . (! isset($this->fk_product) ? 'NULL' : "'" . $this->fk_product . "'") . ",";
@ -170,6 +168,7 @@ class Productcustomerprice extends CommonObject
$sql .= " " . (empty($this->price_min) ? '0' : "'" . $this->price_min . "'") . ",";
$sql .= " " . (empty($this->price_min_ttc) ? '0' : "'" . $this->price_min_ttc . "'") . ",";
$sql .= " " . (! isset($this->price_base_type) ? 'NULL' : "'" . $this->db->escape($this->price_base_type) . "'") . ",";
$sql .= " ".($this->default_vat_code ? "'".$this->db->escape($this->default_vat_code)."'" : "null").",";
$sql .= " " . (! isset($this->tva_tx) ? 'NULL' : "'" . $this->tva_tx . "'") . ",";
$sql .= " " . (! isset($this->recuperableonly) ? 'NULL' : "'" . $this->recuperableonly . "'") . ",";
$sql .= " " . (empty($this->localtax1_type) ? "'0'" : "'" . $this->localtax1_type . "'") . ",";
@ -178,7 +177,6 @@ class Productcustomerprice extends CommonObject
$sql .= " " . (! isset($this->localtax2_tx) ? 'NULL' : "'" . $this->localtax2_tx . "'") . ",";
$sql .= " " . $user->id . ",";
$sql .= " " . (! isset($this->import_key) ? 'NULL' : "'" . $this->db->escape($this->import_key) . "'") . "";
$sql .= ")";
$this->db->begin();
@ -250,6 +248,7 @@ class Productcustomerprice extends CommonObject
$sql .= " t.price_min,";
$sql .= " t.price_min_ttc,";
$sql .= " t.price_base_type,";
$sql .= " t.default_vat_code,";
$sql .= " t.tva_tx,";
$sql .= " t.recuperableonly,";
$sql .= " t.localtax1_tx,";
@ -278,6 +277,7 @@ class Productcustomerprice extends CommonObject
$this->price_min = $obj->price_min;
$this->price_min_ttc = $obj->price_min_ttc;
$this->price_base_type = $obj->price_base_type;
$this->default_vat_code = $obj->default_vat_code;
$this->tva_tx = $obj->tva_tx;
$this->recuperableonly = $obj->recuperableonly;
$this->localtax1_tx = $obj->localtax1_tx;
@ -324,6 +324,7 @@ class Productcustomerprice extends CommonObject
$sql .= " t.price_min,";
$sql .= " t.price_min_ttc,";
$sql .= " t.price_base_type,";
$sql .= " t.default_vat_code,";
$sql .= " t.tva_tx,";
$sql .= " t.recuperableonly,";
$sql .= " t.localtax1_tx,";
@ -380,6 +381,7 @@ class Productcustomerprice extends CommonObject
$line->price_min = $obj->price_min;
$line->price_min_ttc = $obj->price_min_ttc;
$line->price_base_type = $obj->price_base_type;
$line->default_vat_code = $obj->default_vat_code;
$line->tva_tx = $obj->tva_tx;
$line->recuperableonly = $obj->recuperableonly;
$line->localtax1_tx = $obj->localtax1_tx;
@ -429,6 +431,7 @@ class Productcustomerprice extends CommonObject
$sql .= " t.price_min,";
$sql .= " t.price_min_ttc,";
$sql .= " t.price_base_type,";
$sql .= " t.default_vat_code,";
$sql .= " t.tva_tx,";
$sql .= " t.recuperableonly,";
$sql .= " t.localtax1_tx,";
@ -484,6 +487,7 @@ class Productcustomerprice extends CommonObject
$line->price_min = $obj->price_min;
$line->price_min_ttc = $obj->price_min_ttc;
$line->price_base_type = $obj->price_base_type;
$line->default_vat_code = $obj->default_vat_code;
$line->tva_tx = $obj->tva_tx;
$line->recuperableonly = $obj->recuperableonly;
$line->localtax1_tx = $obj->localtax1_tx;
@ -595,6 +599,7 @@ class Productcustomerprice extends CommonObject
$sql .= "price_min,";
$sql .= "price_min_ttc,";
$sql .= "price_base_type,";
$sql .= "default_vat_code,";
$sql .= "tva_tx,";
$sql .= "recuperableonly,";
$sql .= "localtax1_tx,";
@ -616,6 +621,7 @@ class Productcustomerprice extends CommonObject
$sql .= " t.price_min,";
$sql .= " t.price_min_ttc,";
$sql .= " t.price_base_type,";
$sql .= " t.default_vat_code,";
$sql .= " t.tva_tx,";
$sql .= " t.recuperableonly,";
$sql .= " t.localtax1_tx,";
@ -649,6 +655,7 @@ class Productcustomerprice extends CommonObject
$sql .= " price_min=" . (isset($this->price_min) ? $this->price_min : "null") . ",";
$sql .= " price_min_ttc=" . (isset($this->price_min_ttc) ? $this->price_min_ttc : "null") . ",";
$sql .= " price_base_type=" . (isset($this->price_base_type) ? "'" . $this->db->escape($this->price_base_type) . "'" : "null") . ",";
$sql .= " default_vat_code = ".($this->default_vat_code ? "'".$this->db->escape($this->default_vat_code)."'" : "null").",";
$sql .= " tva_tx=" . (isset($this->tva_tx) ? $this->tva_tx : "null") . ",";
$sql .= " recuperableonly=" . (isset($this->recuperableonly) ? $this->recuperableonly : "null") . ",";
$sql .= " localtax1_tx=" . (isset($this->localtax1_tx) ? $this->localtax1_tx : "null") . ",";
@ -918,6 +925,7 @@ class Productcustomerprice extends CommonObject
$this->price_min = '';
$this->price_min_ttc = '';
$this->price_base_type = '';
$this->default_vat_code = '';
$this->tva_tx = '';
$this->recuperableonly = '';
$this->localtax1_tx = '';
@ -943,6 +951,7 @@ class PriceByCustomerLine
var $price_min;
var $price_min_ttc;
var $price_base_type;
var $default_vat_code;
var $tva_tx;
var $recuperableonly;
var $localtax1_tx;

View File

@ -1518,13 +1518,13 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES))
print '<tr>';
print '<td class="fieldrequired">' . $langs->trans('ThirdParty') . '</td>';
print '<td>';
print $form->select_company('', 'socid', 's.client in (1,2,3) AND s.rowid NOT IN (SELECT fk_soc FROM ' . MAIN_DB_PREFIX . 'product_customer_price WHERE fk_product='.$object->id.')', 'SelectThirdParty', 0, 0, array(), 0, 'minwidth300');
print $form->select_company('', 'socid', 's.client in (1,2,3)', 'SelectThirdParty', 0, 0, array(), 0, 'minwidth300');
print '</td>';
print '</tr>';
// VAT
print '<tr><td class="fieldrequired">' . $langs->trans("VATRate") . '</td><td>';
print $form->load_tva("tva_tx", $object->tva_tx, $mysoc, '', $object->id, $object->tva_npr, $object->type, false, 1);
print $form->load_tva("tva_tx", $object->default_vat_code ? $object->tva_tx.' ('.$object->default_vat_code.')' : $object->tva_tx, $mysoc, '', $object->id, $object->tva_npr, $object->type, false, 1);
print '</td></tr>';
// Price base
@ -1610,9 +1610,9 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES))
// VAT
print '<tr><td>' . $langs->trans("VATRate") . '</td><td colspan="2">';
print $form->load_tva("tva_tx", $prodcustprice->tva_tx, $mysoc, '', $object->id, $prodcustprice->recuperableonly, $object->type, false, 1);
print $form->load_tva("tva_tx", $prodcustprice->default_vat_code ? $prodcustprice->tva_tx.' ('.$prodcustprice->default_vat_code.')' : $prodcustprice->tva_tx, $mysoc, '', $object->id, $prodcustprice->recuperableonly, $object->type, false, 1);
print '</td></tr>';
// Price base
print '<tr><td width="15%">';
print $langs->trans('PriceBase');
@ -1731,8 +1731,10 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES))
print "<td>" . $staticsoc->getNomUrl(1) . "</td>";
print "<td>" . dol_print_date($line->datec, "dayhour") . "</td>";
$tva_tx = $line->default_vat_code ? $line->tva_tx.' ('.$line->default_vat_code.')' : $line->tva_tx;
print '<td align="center">' . $langs->trans($line->price_base_type) . "</td>";
print '<td align="right">' . vatrate($line->tva_tx, true, $line->recuperableonly) . "</td>";
print '<td align="right">' . vatrate($tva_tx, true, $line->recuperableonly) . "</td>";
print '<td align="right">' . price($line->price) . "</td>";
print '<td align="right">' . price($line->price_ttc) . "</td>";
print '<td align="right">' . price($line->price_min) . '</td>';
@ -1844,11 +1846,13 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES))
$staticsoc = new Societe($db);
$staticsoc->fetch($line->fk_soc);
$tva_tx = $line->default_vat_code ? $line->tva_tx.' ('.$line->default_vat_code.')' : $line->tva_tx;
print "<td>" . $staticsoc->getNomUrl(1) . "</td>";
print "<td>" . dol_print_date($line->datec, "dayhour") . "</td>";
print '<td align="center">' . $langs->trans($line->price_base_type) . "</td>";
print '<td align="right">' . vatrate($line->tva_tx, true, $line->recuperableonly) . "</td>";
print '<td align="right">' . vatrate($tva_tx, true, $line->recuperableonly) . "</td>";
print '<td align="right">' . price($line->price) . "</td>";
print '<td align="right">' . price($line->price_ttc) . "</td>";
print '<td align="right">' . price($line->price_min) . '</td>';