Merge branch '4.0' of https://github.com/Dolibarr/dolibarr.git into 4.0
This commit is contained in:
commit
3992a92dd4
@ -115,7 +115,7 @@ NEW: Add hidden option to hide column qty ordered on shipments.
|
||||
NEW: Add view of virtual stock into product list (when appropriate)
|
||||
NEW: Add warning on tasks when they are late (add also the warning tolerance parameter)
|
||||
NEW: Add weight/volume for one product into shipment export
|
||||
NEW: Add width and height on product card
|
||||
NEW: Add width and height on product table
|
||||
NEW: allow a document to be linked to project from another customer on config
|
||||
NEW: allow project to be shared across entities (for multicompany module)
|
||||
NEW: All variant of ckeditor config can be tested into the setup page of module.
|
||||
|
||||
@ -106,7 +106,7 @@ $fsearch.=' <input type="text" name="min" id="min" value="'.$min.'" size="6">';
|
||||
|
||||
$calc=$conf->global->MAIN_INFO_LOCALTAX_CALC.$local;
|
||||
// Affiche en-tete du rapport
|
||||
if ($conf->global->$calc==0 || $conf->global->$calc==1) // Calculate on invoice for goods and services
|
||||
if ($calc==0 || $calc==1) // Calculate on invoice for goods and services
|
||||
{
|
||||
$nom=$langs->transcountry($local==1?"LT1ReportByCustomersInInputOutputMode":"LT2ReportByCustomersInInputOutputMode",$mysoc->country_code);
|
||||
$calcmode=$calc==0?$langs->trans("CalcModeLT".$local):$langs->trans("CalcModeLT".$local."Rec");
|
||||
@ -124,7 +124,7 @@ if ($conf->global->$calc==0 || $conf->global->$calc==1) // Calculate on invoice
|
||||
$productsup=$langs->trans("Description");
|
||||
$amountsup=$langs->trans("AmountHT");
|
||||
}
|
||||
if ($conf->global->$calc==2) // Invoice for goods, payment for services
|
||||
if ($calc==2) // Invoice for goods, payment for services
|
||||
{
|
||||
$nom=$langs->transcountry($local==1?"LT1ReportByCustomersInInputOutputMode":"LT2ReportByCustomersInInputOutputMode",$mysoc->country_code);
|
||||
$calcmode=$langs->trans("CalcModeLT2Debt");
|
||||
@ -149,7 +149,7 @@ $vatcust=$langs->transcountry($local==1?"LT1":"LT2",$mysoc->country_code);
|
||||
$vatsup=$langs->transcountry($local==1?"LT1":"LT2",$mysoc->country_code);
|
||||
|
||||
// IRPF that the customer has retained me
|
||||
if($conf->global->$calc ==0 || $conf->global->$calc == 2)
|
||||
if($calc ==0 || $calc == 2)
|
||||
{
|
||||
print "<table class=\"noborder\" width=\"100%\">";
|
||||
print "<tr class=\"liste_titre\">";
|
||||
@ -232,7 +232,7 @@ if($conf->global->$calc ==0 || $conf->global->$calc == 2)
|
||||
}
|
||||
|
||||
// IRPF I retained my supplier
|
||||
if($conf->global->$calc ==0 || $conf->global->$calc == 1){
|
||||
if($calc ==0 || $calc == 1){
|
||||
print "<table class=\"noborder\" width=\"100%\">";
|
||||
print "<tr class=\"liste_titre\">";
|
||||
print '<td align="left">'.$langs->trans("Num")."</td>";
|
||||
@ -309,7 +309,7 @@ if($conf->global->$calc ==0 || $conf->global->$calc == 1){
|
||||
}
|
||||
}
|
||||
|
||||
if($conf->global->$calc ==0){
|
||||
if($calc ==0){
|
||||
// Total to pay
|
||||
print '<br><br>';
|
||||
print '<table class="noborder" width="100%">';
|
||||
|
||||
@ -743,7 +743,7 @@ class ExtraFields
|
||||
}
|
||||
elseif ($type == 'price')
|
||||
{
|
||||
$out='<input type="text" class="flat" name="'.$keysuffix.'options_'.$key.$keyprefix.'" size="6" value="'.price($value).'" '.($moreparam?$moreparam:'').'> '.$langs->getCurrencySymbol($conf->currency);
|
||||
$out='<input type="text" class="flat" name="'.$keysuffix.'options_'.$key.$keyprefix.'" size="6" value="'.price2num($value).'" '.($moreparam?$moreparam:'').'> '.$langs->getCurrencySymbol($conf->currency);
|
||||
}
|
||||
elseif ($type == 'double')
|
||||
{
|
||||
|
||||
@ -324,10 +324,10 @@ class CommandeFournisseur extends CommonOrder
|
||||
$line->product_label = $objp->product_label;
|
||||
$line->product_desc = $objp->product_desc;
|
||||
|
||||
$line->ref = $objp->product_ref;
|
||||
$line->product_ref = $objp->product_ref;
|
||||
$line->ref_fourn = $objp->ref_supplier;
|
||||
$line->ref_supplier = $objp->ref_supplier;
|
||||
$line->ref = $objp->product_ref; // Ref of product
|
||||
$line->product_ref = $objp->product_ref; // Ref of product
|
||||
$line->ref_fourn = $objp->ref_supplier; // The supplier ref of price when product was added. May have change since
|
||||
$line->ref_supplier = $objp->ref_supplier; // The supplier ref of price when product was added. May have change since
|
||||
|
||||
$line->date_start = $this->db->jdate($objp->date_start);
|
||||
$line->date_end = $this->db->jdate($objp->date_end);
|
||||
@ -1139,7 +1139,7 @@ class CommandeFournisseur extends CommonOrder
|
||||
$this->lines[$i]->localtax2_tx,
|
||||
$this->lines[$i]->fk_product,
|
||||
0,
|
||||
$this->lines[$i]->ref_fourn,
|
||||
$this->lines[$i]->ref_fourn, // $this->lines[$i]->ref_fourn comes from field ref into table of lines. Value may ba a ref that does not exists anymore, so we first try with value of product
|
||||
$this->lines[$i]->remise_percent,
|
||||
'HT',
|
||||
0,
|
||||
@ -1295,7 +1295,7 @@ class CommandeFournisseur extends CommonOrder
|
||||
* @param float $txlocaltax2 Localtax2 tax
|
||||
* @param int $fk_product Id product
|
||||
* @param int $fk_prod_fourn_price Id supplier price
|
||||
* @param string $fourn_ref Supplier reference
|
||||
* @param string $fourn_ref Supplier reference price
|
||||
* @param float $remise_percent Remise
|
||||
* @param string $price_base_type HT or TTC
|
||||
* @param float $pu_ttc Unit price TTC
|
||||
@ -1341,7 +1341,8 @@ class CommandeFournisseur extends CommonOrder
|
||||
$pu=$pu_ttc;
|
||||
}
|
||||
$desc=trim($desc);
|
||||
|
||||
$ref=''; // Ref of supplier price when we add line
|
||||
|
||||
// Check parameters
|
||||
if ($qty < 1 && ! $fk_product)
|
||||
{
|
||||
@ -1363,15 +1364,28 @@ class CommandeFournisseur extends CommonOrder
|
||||
$prod = new Product($this->db, $fk_product);
|
||||
if ($prod->fetch($fk_product) > 0)
|
||||
{
|
||||
$result=$prod->get_buyprice($fk_prod_fourn_price, $qty, $fk_product, $fourn_ref); // Search on couple $fk_prod_fourn_price/$qty first, then on triplet $qty/$fk_product/$fourn_ref
|
||||
$product_type = $prod->type;
|
||||
$label = $prod->libelle;
|
||||
|
||||
// We use 'none' instead of $fourn_ref, because fourn_ref may not exists anymore. So we will take the first supplier price ok.
|
||||
// If we want a dedicated supplier price, we must provide $fk_prod_fourn_price.
|
||||
$result=$prod->get_buyprice($fk_prod_fourn_price, $qty, $fk_product, 'none', $this->fk_soc); // Search on couple $fk_prod_fourn_price/$qty first, then on triplet $qty/$fk_product/$fourn_ref/$this->fk_soc
|
||||
if ($result > 0)
|
||||
{
|
||||
$label = $prod->libelle;
|
||||
$pu = $prod->fourn_pu;
|
||||
$ref = $prod->ref_fourn;
|
||||
$product_type = $prod->type;
|
||||
$pu = $prod->fourn_pu; // Unit price supplier price set by get_buyprice
|
||||
$ref = $prod->ref_fourn; // Ref supplier price set by get_buyprice
|
||||
}
|
||||
if ($result == 0 || $result == -1)
|
||||
if ($result == 0) // If result == 0, we failed to found the supplier reference price
|
||||
{
|
||||
$langs->load("errors");
|
||||
$this->error = "Ref " . $prod->ref . " " . $langs->trans("ErrorQtyTooLowForThisSupplier");
|
||||
$this->db->rollback();
|
||||
dol_syslog(get_class($this)."::addline we did not found supplier price, so we can't guess unit price");
|
||||
//$pu = $prod->fourn_pu; // We do not overwrite unit price
|
||||
//$ref = $prod->ref_fourn; // We do not overwrite ref supplier price
|
||||
return -1;
|
||||
}
|
||||
if ($result == -1)
|
||||
{
|
||||
$langs->load("errors");
|
||||
$this->error = "Ref " . $prod->ref . " " . $langs->trans("ErrorQtyTooLowForThisSupplier");
|
||||
@ -1424,7 +1438,7 @@ class CommandeFournisseur extends CommonOrder
|
||||
|
||||
$subprice = price2num($pu,'MU');
|
||||
|
||||
// TODO We should use here $this->line=new CommandeFournisseurLigne($this->db); and $this->line->insert(); to work loke other object (proposal, order, invoice)
|
||||
// TODO We should use here $this->line=new CommandeFournisseurLigne($this->db); and $this->line->insert(); to work like other object (proposal, order, invoice)
|
||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."commande_fournisseurdet";
|
||||
$sql.= " (fk_commande, label, description, date_start, date_end,";
|
||||
$sql.= " fk_product, product_type,";
|
||||
@ -2708,15 +2722,7 @@ class CommandeFournisseurLigne extends CommonOrderLine
|
||||
// From llx_product_fournisseur_price
|
||||
|
||||
/**
|
||||
* Supplier ref
|
||||
* @var string
|
||||
* @deprecated Use ref_supplier
|
||||
* @see ref_supplier
|
||||
*/
|
||||
public $ref_fourn;
|
||||
|
||||
/**
|
||||
* Supplier reference
|
||||
* Supplier reference of price when we added the line. May have been changed after line was added.
|
||||
* @var string
|
||||
*/
|
||||
public $ref_supplier;
|
||||
|
||||
@ -1219,11 +1219,11 @@ class FactureFournisseur extends CommonInvoice
|
||||
$txtva=price2num($txtva);
|
||||
$txlocaltax1=price2num($txlocaltax1);
|
||||
$txlocaltax2=price2num($txlocaltax2);
|
||||
|
||||
$ref=''; // Ref of supplier price when we add line
|
||||
|
||||
// Check parameters
|
||||
if ($type < 0) return -1;
|
||||
|
||||
|
||||
$this->db->begin();
|
||||
|
||||
$sql = 'INSERT INTO '.MAIN_DB_PREFIX.'facture_fourn_det (fk_facture_fourn)';
|
||||
@ -1954,12 +1954,14 @@ class SupplierInvoiceLine extends CommonObjectLine
|
||||
* @var string
|
||||
*/
|
||||
public $product_ref;
|
||||
|
||||
/**
|
||||
* Reference product supplier
|
||||
* TODO Rename field ref to ref_supplier into table llx_facture_fourn_det and llx_commande_fournisseurdet and update fields it into updateline
|
||||
* Supplier reference of price when we added the line. May have been changed after line was added.
|
||||
* TODO Rename field ref to ref_supplier into table llx_facture_fourn_det and llx_commande_fournisseurdet and update fields into updateline
|
||||
* @var string
|
||||
*/
|
||||
public $ref_supplier;
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
* @see label
|
||||
|
||||
@ -963,7 +963,7 @@ else
|
||||
// Description (used in invoice, propal...)
|
||||
print '<tr><td class="tdtop">'.$langs->trans("Description").'</td><td colspan="3">';
|
||||
|
||||
$doleditor = new DolEditor('desc', GETPOST('desc'), '', 160, 'dolibarr_notes', '', false, true, $conf->global->FCKEDITOR_ENABLE_PRODUCTDESC, 4, '80%');
|
||||
$doleditor = new DolEditor('desc', GETPOST('desc'), '', 160, 'dolibarr_details', '', false, true, $conf->global->FCKEDITOR_ENABLE_PRODUCTDESC, 4, '80%');
|
||||
$doleditor->Create();
|
||||
|
||||
print "</td></tr>";
|
||||
|
||||
@ -925,10 +925,26 @@ class Product extends CommonObject
|
||||
// End call triggers
|
||||
}
|
||||
|
||||
// Delete from product_batch on product delete
|
||||
if (! $error)
|
||||
{
|
||||
$sql = "DELETE FROM ".MAIN_DB_PREFIX.'product_batch';
|
||||
$sql.= " WHERE fk_product_stock IN (";
|
||||
$sql.= "SELECT rowid FROM ".MAIN_DB_PREFIX.'product_stock';
|
||||
$sql.= " WHERE fk_product = ".$id.")";
|
||||
dol_syslog(get_class($this).'::delete', LOG_DEBUG);
|
||||
$result = $this->db->query($sql);
|
||||
if (! $result)
|
||||
{
|
||||
$error++;
|
||||
$this->errors[] = $this->db->lasterror();
|
||||
}
|
||||
}
|
||||
|
||||
// Delete all child tables
|
||||
if (! $error)
|
||||
{
|
||||
$elements = array('product_fournisseur_price','product_price','product_lang','categorie_product','product_stock','product_customer_price','product_lot');
|
||||
$elements = array('product_fournisseur_price','product_price','product_lang','categorie_product','product_stock','product_customer_price','product_lot'); // product_batch is done before
|
||||
foreach($elements as $table)
|
||||
{
|
||||
if (! $error)
|
||||
@ -1318,10 +1334,11 @@ class Product extends CommonObject
|
||||
* @param int $prodfournprice Id du tarif = rowid table product_fournisseur_price
|
||||
* @param double $qty Quantity asked or -1 to get first entry found
|
||||
* @param int $product_id Filter on a particular product id
|
||||
* @param string $fourn_ref Filter on a supplier ref. 'none' to exclude ref in search.
|
||||
* @param string $fourn_ref Filter on a supplier price ref. 'none' to exclude ref in search.
|
||||
* @param int $fk_soc If of supplier
|
||||
* @return int <-1 if KO, -1 if qty not enough, 0 if OK but nothing found, id_product if OK and found. May also initialize some properties like (->ref_supplier, buyprice, fourn_pu, vatrate_supplier...)
|
||||
*/
|
||||
function get_buyprice($prodfournprice, $qty, $product_id=0, $fourn_ref='')
|
||||
function get_buyprice($prodfournprice, $qty, $product_id=0, $fourn_ref='', $fk_soc=0)
|
||||
{
|
||||
global $conf;
|
||||
$result = 0;
|
||||
@ -1367,12 +1384,13 @@ class Product extends CommonObject
|
||||
}
|
||||
else // If not found
|
||||
{
|
||||
// We do a second search by doing a select again but searching with qty and id product
|
||||
// We do a second search by doing a select again but searching with less reliable criteria: couple qty/id product, and if set fourn_ref or fk_soc.
|
||||
$sql = "SELECT pfp.rowid, pfp.price as price, pfp.quantity as quantity, pfp.fk_soc,";
|
||||
$sql.= " pfp.fk_product, pfp.ref_fourn as ref_supplier, pfp.tva_tx, pfp.fk_supplier_price_expression";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
|
||||
$sql.= " WHERE pfp.fk_product = ".$product_id;
|
||||
if ($fourn_ref != 'none') $sql.= " AND pfp.ref_fourn = '".$fourn_ref."'";
|
||||
if ($fk_soc > 0) $sql.= " AND pfp.fk_soc = ".$fk_soc;
|
||||
if ($qty > 0) $sql.= " AND pfp.quantity <= ".$qty;
|
||||
$sql.= " ORDER BY pfp.quantity DESC";
|
||||
$sql.= " LIMIT 1";
|
||||
|
||||
Loading…
Reference in New Issue
Block a user