FIX #7239
This commit is contained in:
parent
41ce4886fd
commit
4da49dfc2d
@ -507,7 +507,7 @@ NEW: Disabled users are striked.
|
|||||||
NEW: Enhance navigation of project module
|
NEW: Enhance navigation of project module
|
||||||
NEW: fichinter lines ordered by rang AND DATE
|
NEW: fichinter lines ordered by rang AND DATE
|
||||||
NEW: hidden conf to use input file multiple from mail form
|
NEW: hidden conf to use input file multiple from mail form
|
||||||
NEW: hidden feature: SUPPLIERORDER_WITH_NOPRICEDEFINED allow supplier order even if no supplier price defined
|
NEW: hidden feature: SUPPLIER_ORDER_WITH_NOPRICEDEFINED allow supplier order even if no supplier price defined
|
||||||
NEW: Hidden option MAIN_LANDING_PAGE to choose the first page to show after login works as a "global" option (llx_const) and as a "per user" option (llx_user_param).
|
NEW: Hidden option MAIN_LANDING_PAGE to choose the first page to show after login works as a "global" option (llx_const) and as a "per user" option (llx_user_param).
|
||||||
NEW: Holiday is a now a RH module. All RH module provides by default visilibity on users of its hierarchy.
|
NEW: Holiday is a now a RH module. All RH module provides by default visilibity on users of its hierarchy.
|
||||||
NEW: If error is reported during migration process, you can ignore it to avoid to be locked.
|
NEW: If error is reported during migration process, you can ignore it to avoid to be locked.
|
||||||
|
|||||||
@ -2207,10 +2207,6 @@ class Form
|
|||||||
unset($producttmpselect);
|
unset($producttmpselect);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($conf->global->SUPPLIER_ORDER_WITH_NOPRICEDEFINED))
|
|
||||||
{
|
|
||||||
print '<input type="hidden" id="idprod" name="idprod" value="0" />';
|
|
||||||
}
|
|
||||||
// mode=2 means suppliers products
|
// mode=2 means suppliers products
|
||||||
$urloption=($socid > 0?'socid='.$socid.'&':'').'htmlname='.$htmlname.'&outjson=1&price_level='.$price_level.'&type='.$filtertype.'&mode=2&status='.$status.'&finished='.$finished.'&alsoproductwithnosupplierprice='.$alsoproductwithnosupplierprice;
|
$urloption=($socid > 0?'socid='.$socid.'&':'').'htmlname='.$htmlname.'&outjson=1&price_level='.$price_level.'&type='.$filtertype.'&mode=2&status='.$status.'&finished='.$finished.'&alsoproductwithnosupplierprice='.$alsoproductwithnosupplierprice;
|
||||||
print ajax_autocompleter($selected, $htmlname, DOL_URL_ROOT.'/product/ajax/products.php', $urloption, $conf->global->PRODUIT_USE_SEARCH_TO_SELECT, 0, $ajaxoptions);
|
print ajax_autocompleter($selected, $htmlname, DOL_URL_ROOT.'/product/ajax/products.php', $urloption, $conf->global->PRODUIT_USE_SEARCH_TO_SELECT, 0, $ajaxoptions);
|
||||||
@ -2218,11 +2214,6 @@ class Form
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!empty($conf->global->SUPPLIER_ORDER_WITH_NOPRICEDEFINED))
|
|
||||||
{
|
|
||||||
print '<input type="hidden" id="idprod" name="idprod" value="0" />';
|
|
||||||
print '<script type="text/javascript">$("#'.$htmlname.'").change(function() { $("#idprod").val($(this).val());});</script>';
|
|
||||||
}
|
|
||||||
print $this->select_produits_fournisseurs_list($socid,$selected,$htmlname,$filtertype,$filtre,'',-1,0,0,$alsoproductwithnosupplierprice);
|
print $this->select_produits_fournisseurs_list($socid,$selected,$htmlname,$filtertype,$filtre,'',-1,0,0,$alsoproductwithnosupplierprice);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -40,6 +40,7 @@
|
|||||||
* Ex: array('disabled'=>
|
* Ex: array('disabled'=>
|
||||||
* Ex: array('show'=>
|
* Ex: array('show'=>
|
||||||
* Ex: array('update_textarea'=>
|
* Ex: array('update_textarea'=>
|
||||||
|
* Ex: array('option_disabled'=> id to disable and warning to show if we select a disabled value (this is possible when using autocomplete ajax)
|
||||||
* @return string Script
|
* @return string Script
|
||||||
*/
|
*/
|
||||||
function ajax_autocompleter($selected, $htmlname, $url, $urloption='', $minLength=2, $autoselect=0, $ajaxoptions=array())
|
function ajax_autocompleter($selected, $htmlname, $url, $urloption='', $minLength=2, $autoselect=0, $ajaxoptions=array())
|
||||||
@ -140,6 +141,7 @@ function ajax_autocompleter($selected, $htmlname, $url, $urloption='', $minLengt
|
|||||||
$("#'.$htmlname.'").val(ui.item.id).trigger("change"); // Select new value
|
$("#'.$htmlname.'").val(ui.item.id).trigger("change"); // Select new value
|
||||||
// Disable an element
|
// Disable an element
|
||||||
if (options.option_disabled) {
|
if (options.option_disabled) {
|
||||||
|
console.log("Make action option_disabled on #"+options.option_disabled+" with disabled="+ui.item.disabled)
|
||||||
if (ui.item.disabled) {
|
if (ui.item.disabled) {
|
||||||
$("#" + options.option_disabled).prop("disabled", true);
|
$("#" + options.option_disabled).prop("disabled", true);
|
||||||
if (options.error) {
|
if (options.error) {
|
||||||
@ -148,28 +150,32 @@ function ajax_autocompleter($selected, $htmlname, $url, $urloption='', $minLengt
|
|||||||
if (options.warning) {
|
if (options.warning) {
|
||||||
$.jnotify(options.warning, "warning", false); // Output with jnotify the warning message
|
$.jnotify(options.warning, "warning", false); // Output with jnotify the warning message
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$("#" + options.option_disabled).removeAttr("disabled");
|
$("#" + options.option_disabled).removeAttr("disabled");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (options.disabled) {
|
if (options.disabled) {
|
||||||
|
console.log("Make action disabled on each "+options.option_disabled)
|
||||||
$.each(options.disabled, function(key, value) {
|
$.each(options.disabled, function(key, value) {
|
||||||
$("#" + value).prop("disabled", true);
|
$("#" + value).prop("disabled", true);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (options.show) {
|
if (options.show) {
|
||||||
|
console.log("Make action show on each "+options.show)
|
||||||
$.each(options.show, function(key, value) {
|
$.each(options.show, function(key, value) {
|
||||||
$("#" + value).show().trigger("show");
|
$("#" + value).show().trigger("show");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// Update an input
|
// Update an input
|
||||||
if (ui.item.update) {
|
if (ui.item.update) {
|
||||||
|
console.log("Make action update on each ui.item.update")
|
||||||
// loop on each "update" fields
|
// loop on each "update" fields
|
||||||
$.each(ui.item.update, function(key, value) {
|
$.each(ui.item.update, function(key, value) {
|
||||||
$("#" + key).val(value).trigger("change");
|
$("#" + key).val(value).trigger("change");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (ui.item.textarea) {
|
if (ui.item.textarea) {
|
||||||
|
console.log("Make action textarea on each ui.item.textarea")
|
||||||
$.each(ui.item.textarea, function(key, value) {
|
$.each(ui.item.textarea, function(key, value) {
|
||||||
if (typeof CKEDITOR == "object" && typeof CKEDITOR.instances != "undefined" && CKEDITOR.instances[key] != "undefined") {
|
if (typeof CKEDITOR == "object" && typeof CKEDITOR.instances != "undefined" && CKEDITOR.instances[key] != "undefined") {
|
||||||
CKEDITOR.instances[key].setData(value);
|
CKEDITOR.instances[key].setData(value);
|
||||||
|
|||||||
@ -26,7 +26,7 @@
|
|||||||
* $langs
|
* $langs
|
||||||
* $dateSelector
|
* $dateSelector
|
||||||
* $forceall (0 by default, 1 for supplier invoices/orders)
|
* $forceall (0 by default, 1 for supplier invoices/orders)
|
||||||
* $senderissupplier (0 by default, 1 for supplier invoices/orders)
|
* $senderissupplier (0 by default, 1 or 2 for supplier invoices/orders)
|
||||||
* $inputalsopricewithtax (0 by default, 1 to also show column with unit price including tax)
|
* $inputalsopricewithtax (0 by default, 1 to also show column with unit price including tax)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -200,12 +200,13 @@ else {
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// $senderissupplier=2 is same than 1 but disable test on minimum qty and disable autofill qty with minimum
|
||||||
if ($senderissupplier != 2)
|
if ($senderissupplier != 2)
|
||||||
{
|
{
|
||||||
$ajaxoptions=array(
|
$ajaxoptions=array(
|
||||||
'update' => array('qty'=>'qty','remise_percent' => 'discount','idprod' => 'idprod'), // html id tags that will be edited with which ajax json response key
|
'update' => array('qty'=>'qty','remise_percent' => 'discount','idprod' => 'idprod'), // html id tags that will be edited with which ajax json response key
|
||||||
'option_disabled' => 'addPredefinedProductButton', // html id to disable once select is done
|
'option_disabled' => 'idthatdoesnotexists', // html id to disable once select is done
|
||||||
'warning' => $langs->trans("NoPriceDefinedForThisSupplier") // translation of an error saved into var 'error'
|
'warning' => $langs->trans("NoPriceDefinedForThisSupplier") // translation of an error saved into var 'warning' (for exemple shown we select a disabled option into combo)
|
||||||
);
|
);
|
||||||
$alsoproductwithnosupplierprice=0;
|
$alsoproductwithnosupplierprice=0;
|
||||||
}
|
}
|
||||||
@ -214,6 +215,7 @@ else {
|
|||||||
$ajaxoptions = array();
|
$ajaxoptions = array();
|
||||||
$alsoproductwithnosupplierprice=1;
|
$alsoproductwithnosupplierprice=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
$form->select_produits_fournisseurs($object->socid, GETPOST('idprodfournprice'), 'idprodfournprice', '', '', $ajaxoptions, 1, $alsoproductwithnosupplierprice);
|
$form->select_produits_fournisseurs($object->socid, GETPOST('idprodfournprice'), 'idprodfournprice', '', '', $ajaxoptions, 1, $alsoproductwithnosupplierprice);
|
||||||
}
|
}
|
||||||
echo '</span>';
|
echo '</span>';
|
||||||
|
|||||||
@ -1157,7 +1157,7 @@ class CommandeFournisseur extends CommonOrder
|
|||||||
// insert products details into database
|
// insert products details into database
|
||||||
for ($i=0;$i<$num;$i++)
|
for ($i=0;$i<$num;$i++)
|
||||||
{
|
{
|
||||||
$result = $this->addline( // This include test on qty if option SUPPLIERORDER_WITH_NOPRICEDEFINED is not set
|
$result = $this->addline( // This include test on qty if option SUPPLIER_ORDER_WITH_NOPRICEDEFINED is not set
|
||||||
$this->lines[$i]->desc,
|
$this->lines[$i]->desc,
|
||||||
$this->lines[$i]->subprice,
|
$this->lines[$i]->subprice,
|
||||||
$this->lines[$i]->qty,
|
$this->lines[$i]->qty,
|
||||||
@ -1393,7 +1393,7 @@ class CommandeFournisseur extends CommonOrder
|
|||||||
|
|
||||||
if ($fk_product > 0)
|
if ($fk_product > 0)
|
||||||
{
|
{
|
||||||
if (empty($conf->global->SUPPLIERORDER_WITH_NOPRICEDEFINED))
|
if (empty($conf->global->SUPPLIER_ORDER_WITH_NOPRICEDEFINED))
|
||||||
{
|
{
|
||||||
// Check quantity is enough
|
// Check quantity is enough
|
||||||
dol_syslog(get_class($this)."::addline we check supplier prices fk_product=".$fk_product." fk_prod_fourn_price=".$fk_prod_fourn_price." qty=".$qty." fourn_ref=".$fourn_ref);
|
dol_syslog(get_class($this)."::addline we check supplier prices fk_product=".$fk_product." fk_prod_fourn_price=".$fk_prod_fourn_price." qty=".$qty." fourn_ref=".$fourn_ref);
|
||||||
|
|||||||
@ -346,21 +346,29 @@ if (empty($reshook))
|
|||||||
{
|
{
|
||||||
$productsupplier = new ProductFournisseur($db);
|
$productsupplier = new ProductFournisseur($db);
|
||||||
|
|
||||||
if (empty($conf->global->SUPPLIER_ORDER_WITH_NOPRICEDEFINED))
|
if (empty($conf->global->SUPPLIER_ORDER_WITH_NOPRICEDEFINED)) // TODO this test seems useless
|
||||||
{
|
{
|
||||||
$idprod=0;
|
$idprod=0;
|
||||||
if (GETPOST('idprodfournprice') == -1 || GETPOST('idprodfournprice') == '') $idprod=-99; // Same behaviour than with combolist. When not select idprodfournprice is now -99 (to avoid conflict with next action that may return -1, -2, ...)
|
if (GETPOST('idprodfournprice') == -1 || GETPOST('idprodfournprice') == '') $idprod=-99; // Same behaviour than with combolist. When not select idprodfournprice is now -99 (to avoid conflict with next action that may return -1, -2, ...)
|
||||||
}
|
}
|
||||||
|
if (preg_match('/^idprod_([0-9]+)$/',GETPOST('idprodfournprice'), $reg))
|
||||||
if (GETPOST('idprodfournprice') > 0)
|
{
|
||||||
|
$idprod=$reg[1];
|
||||||
|
$res=$productsupplier->fetch($idprod);
|
||||||
|
// Call to init properties of $productsupplier
|
||||||
|
// So if a supplier price already exists for another thirdparty (first one found), we use it as reference price
|
||||||
|
$productsupplier->get_buyprice(0, -1, $idprod, 'none'); // We force qty to -1 to be sure to find if a supplier price exist
|
||||||
|
}
|
||||||
|
elseif (GETPOST('idprodfournprice') > 0)
|
||||||
{
|
{
|
||||||
$idprod=$productsupplier->get_buyprice(GETPOST('idprodfournprice'), $qty); // Just to see if a price exists for the quantity. Not used to found vat.
|
$qtytosearch=$qty; // Just to see if a price exists for the quantity. Not used to found vat.
|
||||||
|
//$qtytosearch=-1; // We force qty to -1 to be sure to find if a supplier price exist
|
||||||
|
$idprod=$productsupplier->get_buyprice(GETPOST('idprodfournprice'), $qtytosearch);
|
||||||
|
$res=$productsupplier->fetch($idprod);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($idprod > 0)
|
if ($idprod > 0)
|
||||||
{
|
{
|
||||||
$res=$productsupplier->fetch($idprod);
|
|
||||||
|
|
||||||
$label = $productsupplier->label;
|
$label = $productsupplier->label;
|
||||||
|
|
||||||
$desc = $productsupplier->description;
|
$desc = $productsupplier->description;
|
||||||
@ -381,8 +389,8 @@ if (empty($reshook))
|
|||||||
$tva_tx,
|
$tva_tx,
|
||||||
$localtax1_tx,
|
$localtax1_tx,
|
||||||
$localtax2_tx,
|
$localtax2_tx,
|
||||||
|
$idprod,
|
||||||
$productsupplier->id,
|
$productsupplier->id,
|
||||||
GETPOST('idprodfournprice'),
|
|
||||||
$productsupplier->fourn_ref,
|
$productsupplier->fourn_ref,
|
||||||
$remise_percent,
|
$remise_percent,
|
||||||
'HT',
|
'HT',
|
||||||
@ -2074,6 +2082,7 @@ elseif (! empty($object->id))
|
|||||||
// Add free products/services form
|
// Add free products/services form
|
||||||
global $forceall, $senderissupplier, $dateSelector;
|
global $forceall, $senderissupplier, $dateSelector;
|
||||||
$forceall=1; $senderissupplier=1; $dateSelector=0;
|
$forceall=1; $senderissupplier=1; $dateSelector=0;
|
||||||
|
if (! empty($conf->global->SUPPLIER_ORDER_WITH_NOPRICEDEFINED)) $senderissupplier=2; // $senderissupplier=2 is same than 1 but disable test on minimum qty and disable autofill qty with minimum.
|
||||||
|
|
||||||
// Show object lines
|
// Show object lines
|
||||||
$inputalsopricewithtax=0;
|
$inputalsopricewithtax=0;
|
||||||
|
|||||||
@ -945,21 +945,30 @@ if (empty($reshook))
|
|||||||
|
|
||||||
if (GETPOST('prod_entry_mode') != 'free' && empty($error)) // With combolist mode idprodfournprice is > 0 or -1. With autocomplete, idprodfournprice is > 0 or ''
|
if (GETPOST('prod_entry_mode') != 'free' && empty($error)) // With combolist mode idprodfournprice is > 0 or -1. With autocomplete, idprodfournprice is > 0 or ''
|
||||||
{
|
{
|
||||||
$idprod=0;
|
|
||||||
$productsupplier=new ProductFournisseur($db);
|
$productsupplier=new ProductFournisseur($db);
|
||||||
|
|
||||||
if (GETPOST('idprodfournprice') == -1 || GETPOST('idprodfournprice') == '') $idprod=-2; // Same behaviour than with combolist. When not select idprodfournprice is now -2 (to avoid conflict with next action that may return -1)
|
$idprod=0;
|
||||||
|
if (GETPOST('idprodfournprice') == -1 || GETPOST('idprodfournprice') == '') $idprod=-99; // Same behaviour than with combolist. When not select idprodfournprice is now -99 (to avoid conflict with next action that may return -1, -2, ...)
|
||||||
|
|
||||||
if (GETPOST('idprodfournprice') > 0)
|
if (preg_match('/^idprod_([0-9]+)$/',GETPOST('idprodfournprice'), $reg))
|
||||||
|
{
|
||||||
|
$idprod=$reg[1];
|
||||||
|
$res=$productsupplier->fetch($idprod);
|
||||||
|
// Call to init properties of $productsupplier
|
||||||
|
// So if a supplier price already exists for another thirdparty (first one found), we use it as reference price
|
||||||
|
$productsupplier->get_buyprice(0, -1, $idprod, 'none'); // We force qty to -1 to be sure to find if a supplier price exist
|
||||||
|
}
|
||||||
|
elseif (GETPOST('idprodfournprice') > 0)
|
||||||
{
|
{
|
||||||
$idprod=$productsupplier->get_buyprice(GETPOST('idprodfournprice'), $qty); // Just to see if a price exists for the quantity. Not used to found vat.
|
$qtytosearch=$qty; // Just to see if a price exists for the quantity. Not used to found vat.
|
||||||
|
//$qtytosearch=-1; // We force qty to -1 to be sure to find if a supplier price exist
|
||||||
|
$idprod=$productsupplier->get_buyprice(GETPOST('idprodfournprice'), $qtytosearch);
|
||||||
|
$res=$productsupplier->fetch($idprod);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Replaces $fk_unit with the product's
|
//Replaces $fk_unit with the product's
|
||||||
if ($idprod > 0)
|
if ($idprod > 0)
|
||||||
{
|
{
|
||||||
$result=$productsupplier->fetch($idprod);
|
|
||||||
|
|
||||||
$label = $productsupplier->label;
|
$label = $productsupplier->label;
|
||||||
|
|
||||||
$desc = $productsupplier->description;
|
$desc = $productsupplier->description;
|
||||||
@ -974,10 +983,29 @@ if (empty($reshook))
|
|||||||
$type = $productsupplier->type;
|
$type = $productsupplier->type;
|
||||||
$price_base_type = 'HT';
|
$price_base_type = 'HT';
|
||||||
|
|
||||||
// TODO Save the product supplier ref into database into field ref_supplier (must rename field ref into ref_supplier first)
|
// TODO Save the product supplier ref into database (like done for supplier propal and order) into field ref_supplier (must rename field ref into ref_supplier first)
|
||||||
$result=$object->addline($desc, $productsupplier->fourn_pu, $tva_tx, $localtax1_tx, $localtax2_tx, $qty, $idprod, $remise_percent, $date_start, $date_end, 0, $tva_npr, $price_base_type, $type, -1, 0, $array_options, $productsupplier->fk_unit);
|
$result=$object->addline(
|
||||||
|
$desc,
|
||||||
|
$productsupplier->fourn_pu,
|
||||||
|
$tva_tx,
|
||||||
|
$localtax1_tx,
|
||||||
|
$localtax2_tx,
|
||||||
|
$qty,
|
||||||
|
$idprod,
|
||||||
|
$remise_percent,
|
||||||
|
$date_start,
|
||||||
|
$date_end,
|
||||||
|
0,
|
||||||
|
$tva_npr,
|
||||||
|
$price_base_type,
|
||||||
|
$type,
|
||||||
|
-1,
|
||||||
|
0,
|
||||||
|
$array_options,
|
||||||
|
$productsupplier->fk_unit
|
||||||
|
);
|
||||||
}
|
}
|
||||||
if ($idprod == -2 || $idprod == 0)
|
if ($idprod == -99 || $idprod == 0)
|
||||||
{
|
{
|
||||||
// Product not selected
|
// Product not selected
|
||||||
$error++;
|
$error++;
|
||||||
|
|||||||
@ -579,7 +579,7 @@ if (empty($reshook))
|
|||||||
{
|
{
|
||||||
$productsupplier = new ProductFournisseur($db);
|
$productsupplier = new ProductFournisseur($db);
|
||||||
|
|
||||||
if (empty($conf->global->SUPPLIER_PROPOSAL_WITH_NOPRICEDEFINED))
|
if (empty($conf->global->SUPPLIER_PROPOSAL_WITH_NOPRICEDEFINED)) // TODO this test seems useless
|
||||||
{
|
{
|
||||||
$idprod=0;
|
$idprod=0;
|
||||||
if (GETPOST('idprodfournprice') == -1 || GETPOST('idprodfournprice') == '') $idprod=-99; // Same behaviour than with combolist. When not select idprodfournprice is now -99 (to avoid conflict with next action that may return -1, -2, ...)
|
if (GETPOST('idprodfournprice') == -1 || GETPOST('idprodfournprice') == '') $idprod=-99; // Same behaviour than with combolist. When not select idprodfournprice is now -99 (to avoid conflict with next action that may return -1, -2, ...)
|
||||||
@ -594,8 +594,9 @@ if (empty($reshook))
|
|||||||
}
|
}
|
||||||
elseif (GETPOST('idprodfournprice') > 0)
|
elseif (GETPOST('idprodfournprice') > 0)
|
||||||
{
|
{
|
||||||
//$idprod=$productsupplier->get_buyprice(GETPOST('idprodfournprice'), $qty); // Just to see if a price exists for the quantity. Not used to found vat.
|
//$qtytosearch=$qty; // Just to see if a price exists for the quantity. Not used to found vat.
|
||||||
$idprod=$productsupplier->get_buyprice(GETPOST('idprodfournprice'), -1); // We force qty to -1 to be sure to find if a supplier price exist
|
$qtytosearch=-1; // We force qty to -1 to be sure to find if a supplier price exist
|
||||||
|
$idprod=$productsupplier->get_buyprice(GETPOST('idprodfournprice'), $qtytosearch);
|
||||||
$res=$productsupplier->fetch($idprod);
|
$res=$productsupplier->fetch($idprod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user