Merge branch '11.0' of git@github.com:Dolibarr/dolibarr.git into develop
Conflicts: htdocs/product/stock/class/mouvementstock.class.php
This commit is contained in:
commit
24d439845b
@ -20,7 +20,7 @@
|
|||||||
/**
|
/**
|
||||||
* \file htdocs/comm/multiprix.php
|
* \file htdocs/comm/multiprix.php
|
||||||
* \ingroup societe
|
* \ingroup societe
|
||||||
* \brief Onglet choix du niveau de prix
|
* \brief Tab to set the price level of a thirdparty
|
||||||
*/
|
*/
|
||||||
|
|
||||||
require '../main.inc.php';
|
require '../main.inc.php';
|
||||||
@ -64,20 +64,11 @@ $userstatic = new User($db);
|
|||||||
|
|
||||||
if ($_socid > 0)
|
if ($_socid > 0)
|
||||||
{
|
{
|
||||||
// On recupere les donnees societes par l'objet
|
// We load data of thirdparty
|
||||||
$objsoc = new Societe($db);
|
$objsoc = new Societe($db);
|
||||||
$objsoc->id = $_socid;
|
$objsoc->id = $_socid;
|
||||||
$objsoc->fetch($_socid, $to);
|
$objsoc->fetch($_socid, $to);
|
||||||
|
|
||||||
if ($errmesg)
|
|
||||||
{
|
|
||||||
print '<div class="error">'.$errmesg.'</div><br>';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Affichage onglets
|
|
||||||
*/
|
|
||||||
|
|
||||||
$head = societe_prepare_head($objsoc);
|
$head = societe_prepare_head($objsoc);
|
||||||
|
|
||||||
@ -91,7 +82,7 @@ if ($_socid > 0)
|
|||||||
|
|
||||||
dol_fiche_head($head, $tabchoice, $langs->trans("ThirdParty"), 0, 'company');
|
dol_fiche_head($head, $tabchoice, $langs->trans("ThirdParty"), 0, 'company');
|
||||||
|
|
||||||
print '<table class="border centpercent">';
|
print '<table class="border centpercent tableforfield">';
|
||||||
|
|
||||||
print '<tr><td class="titlefieldcreate">';
|
print '<tr><td class="titlefieldcreate">';
|
||||||
print $langs->trans("PriceLevel").'</td><td>'.$objsoc->price_level."</td></tr>";
|
print $langs->trans("PriceLevel").'</td><td>'.$objsoc->price_level."</td></tr>";
|
||||||
|
|||||||
@ -3968,7 +3968,7 @@ elseif ($id > 0 || !empty($ref))
|
|||||||
if ($result > 0) {
|
if ($result > 0) {
|
||||||
print '. <span class="opacitymediumbycolor">'.$langs->trans(
|
print '. <span class="opacitymediumbycolor">'.$langs->trans(
|
||||||
"GeneratedFromTemplate",
|
"GeneratedFromTemplate",
|
||||||
'<a href="'.DOL_MAIN_URL_ROOT.'/compta/facture/fiche-rec.php?facid='.$tmptemplate->id.'">'.$tmptemplate->ref.'</a>'
|
'<a href="'.DOL_MAIN_URL_ROOT.'/compta/facture/card-rec.php?facid='.$tmptemplate->id.'">'.$tmptemplate->ref.'</a>'
|
||||||
).'</span>';
|
).'</span>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -604,7 +604,7 @@ if ($id > 0)
|
|||||||
*/
|
*/
|
||||||
$sql = "SELECT p.rowid, p.num_paiement, datep as dp, p.amount,";
|
$sql = "SELECT p.rowid, p.num_paiement, datep as dp, p.amount,";
|
||||||
$sql .= " c.code as type_code,c.libelle as paiement_type,";
|
$sql .= " c.code as type_code,c.libelle as paiement_type,";
|
||||||
$sql .= ' ba.rowid as baid, ba.ref as baref, ba.label, ba.number as banumber, ba.account_number, ba.fk_accountancy_journal';
|
$sql .= ' ba.rowid as baid, ba.ref as baref, ba.label, ba.number as banumber, ba.account_number, ba.currency_code as bacurrency_code, ba.fk_accountancy_journal';
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."paiementcharge as p";
|
$sql .= " FROM ".MAIN_DB_PREFIX."paiementcharge as p";
|
||||||
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'bank as b ON p.fk_bank = b.rowid';
|
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'bank as b ON p.fk_bank = b.rowid';
|
||||||
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'bank_account as ba ON b.fk_account = ba.rowid';
|
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'bank_account as ba ON b.fk_account = ba.rowid';
|
||||||
@ -653,6 +653,7 @@ if ($id > 0)
|
|||||||
$bankaccountstatic->ref = $objp->baref;
|
$bankaccountstatic->ref = $objp->baref;
|
||||||
$bankaccountstatic->label = $objp->baref;
|
$bankaccountstatic->label = $objp->baref;
|
||||||
$bankaccountstatic->number = $objp->banumber;
|
$bankaccountstatic->number = $objp->banumber;
|
||||||
|
$bankaccountstatic->currency_code = $objp->bacurrency_code;
|
||||||
|
|
||||||
if (!empty($conf->accounting->enabled)) {
|
if (!empty($conf->accounting->enabled)) {
|
||||||
$bankaccountstatic->account_number = $objp->account_number;
|
$bankaccountstatic->account_number = $objp->account_number;
|
||||||
|
|||||||
@ -33,7 +33,7 @@ if ($action == 'setnote_public' && ! empty($permissionnote) && ! GETPOST('cancel
|
|||||||
if (empty($action) || ! is_object($object) || empty($id)) dol_print_error('', 'Include of actions_setnotes.inc.php was done but required variable was not set before');
|
if (empty($action) || ! is_object($object) || empty($id)) dol_print_error('', 'Include of actions_setnotes.inc.php was done but required variable was not set before');
|
||||||
if (empty($object->id)) $object->fetch($id); // Fetch may not be already done
|
if (empty($object->id)) $object->fetch($id); // Fetch may not be already done
|
||||||
|
|
||||||
$result_update=$object->update_note(dol_html_entity_decode(GETPOST('note_public', 'none'), ENT_QUOTES), '_public');
|
$result_update = $object->update_note(dol_html_entity_decode(GETPOST('note_public', 'none'), ENT_QUOTES, 'UTF-8', 1), '_public');
|
||||||
|
|
||||||
if ($result_update < 0) setEventMessages($object->error, $object->errors, 'errors');
|
if ($result_update < 0) setEventMessages($object->error, $object->errors, 'errors');
|
||||||
elseif (in_array($object->table_element, array('supplier_proposal', 'propal', 'commande_fournisseur', 'commande', 'facture_fourn', 'facture')))
|
elseif (in_array($object->table_element, array('supplier_proposal', 'propal', 'commande_fournisseur', 'commande', 'facture_fourn', 'facture')))
|
||||||
|
|||||||
@ -213,7 +213,7 @@ class Form
|
|||||||
$valuetoshow = price2num($editvalue ? $editvalue : $value);
|
$valuetoshow = price2num($editvalue ? $editvalue : $value);
|
||||||
$ret .= '<input type="text" id="'.$htmlname.'" name="'.$htmlname.'" value="'.($valuetoshow != '' ?price($valuetoshow) : '').'"'.($tmp[1] ? ' size="'.$tmp[1].'"' : '').'>';
|
$ret .= '<input type="text" id="'.$htmlname.'" name="'.$htmlname.'" value="'.($valuetoshow != '' ?price($valuetoshow) : '').'"'.($tmp[1] ? ' size="'.$tmp[1].'"' : '').'>';
|
||||||
}
|
}
|
||||||
elseif (preg_match('/^text/', $typeofdata) || preg_match('/^note/', $typeofdata))
|
elseif (preg_match('/^text/', $typeofdata) || preg_match('/^note/', $typeofdata)) // if wysiwyg is enabled $typeofdata = 'ckeditor'
|
||||||
{
|
{
|
||||||
$tmp = explode(':', $typeofdata);
|
$tmp = explode(':', $typeofdata);
|
||||||
$cols = $tmp[2];
|
$cols = $tmp[2];
|
||||||
@ -225,8 +225,10 @@ class Form
|
|||||||
}
|
}
|
||||||
|
|
||||||
$valuetoshow = ($editvalue ? $editvalue : $value);
|
$valuetoshow = ($editvalue ? $editvalue : $value);
|
||||||
|
|
||||||
$ret .= '<textarea id="'.$htmlname.'" name="'.$htmlname.'" wrap="soft" rows="'.($tmp[1] ? $tmp[1] : '20').'"'.($cols ? ' cols="'.$cols.'"' : 'class="quatrevingtpercent"').$morealt.'">';
|
$ret .= '<textarea id="'.$htmlname.'" name="'.$htmlname.'" wrap="soft" rows="'.($tmp[1] ? $tmp[1] : '20').'"'.($cols ? ' cols="'.$cols.'"' : 'class="quatrevingtpercent"').$morealt.'">';
|
||||||
|
// textarea convert automatically entities chars into simple chars.
|
||||||
|
// So we convert & into & so a string like 'a < <b>b</b><br>é<br><script>alert('X');<script>' stay a correct html and is not converted by textarea component when wysiwig is off.
|
||||||
|
$valuetoshow = str_replace('&', '&', $valuetoshow);
|
||||||
$ret .= dol_string_neverthesehtmltags($valuetoshow, array('textarea'));
|
$ret .= dol_string_neverthesehtmltags($valuetoshow, array('textarea'));
|
||||||
$ret .= '</textarea>';
|
$ret .= '</textarea>';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5701,14 +5701,19 @@ function dol_htmlcleanlastbr($stringtodecode)
|
|||||||
/**
|
/**
|
||||||
* Replace html_entity_decode functions to manage errors
|
* Replace html_entity_decode functions to manage errors
|
||||||
*
|
*
|
||||||
* @param string $a Operand a
|
* @param string $a Operand a
|
||||||
* @param string $b Operand b (ENT_QUOTES=convert simple and double quotes)
|
* @param string $b Operand b (ENT_QUOTES=convert simple and double quotes)
|
||||||
* @param string $c Operand c
|
* @param string $c Operand c
|
||||||
* @return string String decoded
|
* @param string $keepsomeentities Entities but &, <, >, " are not converted.
|
||||||
|
* @return string String decoded
|
||||||
*/
|
*/
|
||||||
function dol_html_entity_decode($a, $b, $c = 'UTF-8')
|
function dol_html_entity_decode($a, $b, $c = 'UTF-8', $keepsomeentities = 0)
|
||||||
{
|
{
|
||||||
return html_entity_decode($a, $b, $c);
|
$newstring = $a;
|
||||||
|
if ($keepsomeentities) $newstring = strtr($newstring, array('&'=>'__andamp__', '<'=>'__andlt__', '>'=>'__andgt__', '"'=>'__dquot__'));
|
||||||
|
$newstring = html_entity_decode($newstring, $b, $c);
|
||||||
|
if ($keepsomeentities) $newstring = strtr($newstring, array('__andamp__'=>'&', '__andlt__'=>'<', '__andgt__'=>'>', '__dquot__'=>'"'));
|
||||||
|
return $newstring;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -620,7 +620,7 @@ if (!empty($usemargins) && $user->rights->margins->creer)
|
|||||||
/* When changing predefined product, we reload list of supplier prices required for margin combo */
|
/* When changing predefined product, we reload list of supplier prices required for margin combo */
|
||||||
$("#idprod, #idprodfournprice").change(function()
|
$("#idprod, #idprodfournprice").change(function()
|
||||||
{
|
{
|
||||||
console.log("#idprod, #idprodfournprice change triggered this.val = "+$(this).val());
|
console.log("Call method change() after change on #idprod or #idprodfournprice. this.val = "+$(this).val());
|
||||||
|
|
||||||
setforpredef(); // TODO Keep vat combo visible and set it to first entry into list that match result of get_default_tva
|
setforpredef(); // TODO Keep vat combo visible and set it to first entry into list that match result of get_default_tva
|
||||||
|
|
||||||
@ -631,6 +631,7 @@ if (!empty($usemargins) && $user->rights->margins->creer)
|
|||||||
{
|
{
|
||||||
?>
|
?>
|
||||||
// Get the HT price for the product and display it
|
// Get the HT price for the product and display it
|
||||||
|
console.log("Load price without tax and set it into #price_ht");
|
||||||
$.post('<?php echo DOL_URL_ROOT; ?>/product/ajax/products.php?action=fetch',
|
$.post('<?php echo DOL_URL_ROOT; ?>/product/ajax/products.php?action=fetch',
|
||||||
{ 'id': $(this).val(), 'socid' : <?php print $object->socid; ?> },
|
{ 'id': $(this).val(), 'socid' : <?php print $object->socid; ?> },
|
||||||
function(data) { jQuery("#price_ht").val(data.price_ht); },
|
function(data) { jQuery("#price_ht").val(data.price_ht); },
|
||||||
|
|||||||
@ -705,7 +705,7 @@ class CommandeFournisseur extends CommonOrder
|
|||||||
*/
|
*/
|
||||||
public function getNomUrl($withpicto = 0, $option = '', $notooltip = 0, $save_lastsearch_value = -1, $addlinktonotes = 0)
|
public function getNomUrl($withpicto = 0, $option = '', $notooltip = 0, $save_lastsearch_value = -1, $addlinktonotes = 0)
|
||||||
{
|
{
|
||||||
global $langs, $conf;
|
global $langs, $conf, $user;
|
||||||
|
|
||||||
$result = '';
|
$result = '';
|
||||||
$label = '<u>'.$langs->trans("ShowOrder").'</u>';
|
$label = '<u>'.$langs->trans("ShowOrder").'</u>';
|
||||||
|
|||||||
@ -2253,7 +2253,7 @@ class FactureFournisseur extends CommonInvoice
|
|||||||
*/
|
*/
|
||||||
public function getNomUrl($withpicto = 0, $option = '', $max = 0, $short = 0, $moretitle = '', $notooltip = 0, $save_lastsearch_value = -1, $addlinktonotes = 0)
|
public function getNomUrl($withpicto = 0, $option = '', $max = 0, $short = 0, $moretitle = '', $notooltip = 0, $save_lastsearch_value = -1, $addlinktonotes = 0)
|
||||||
{
|
{
|
||||||
global $langs, $conf;
|
global $langs, $conf, $user;
|
||||||
|
|
||||||
$result = '';
|
$result = '';
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@ -267,7 +267,7 @@ WEBSITE_PAGEURL=URL of page
|
|||||||
WEBSITE_TITLE=Title
|
WEBSITE_TITLE=Title
|
||||||
WEBSITE_DESCRIPTION=Description
|
WEBSITE_DESCRIPTION=Description
|
||||||
WEBSITE_IMAGE=Image
|
WEBSITE_IMAGE=Image
|
||||||
WEBSITE_IMAGEDesc=Relative path of the image media. You can keep this empty as this is rarely used (it can be used by dynamic content to show a preview of a list of blog posts).
|
WEBSITE_IMAGEDesc=Relative path of the image media. You can keep this empty as this is rarely used (it can be used by dynamic content to show a thumbnail in a list of blog posts). Use __WEBSITEKEY__ in the path if path depends on website name.
|
||||||
WEBSITE_KEYWORDS=Keywords
|
WEBSITE_KEYWORDS=Keywords
|
||||||
LinesToImport=Lines to import
|
LinesToImport=Lines to import
|
||||||
|
|
||||||
|
|||||||
@ -59,8 +59,9 @@ dol_syslog(join(',', $_GET));
|
|||||||
|
|
||||||
if (!empty($action) && $action == 'fetch' && !empty($id))
|
if (!empty($action) && $action == 'fetch' && !empty($id))
|
||||||
{
|
{
|
||||||
// When action='fetch', id must be the product id.
|
// action='fetch' is used to get product information on a product. So when action='fetch', id must be the product id.
|
||||||
require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
|
||||||
|
|
||||||
$outjson = array();
|
$outjson = array();
|
||||||
|
|
||||||
@ -77,6 +78,13 @@ if (!empty($action) && $action == 'fetch' && !empty($id))
|
|||||||
|
|
||||||
$found = false;
|
$found = false;
|
||||||
|
|
||||||
|
$price_level = 1;
|
||||||
|
if ($socid > 0 && !empty($conf->global->PRODUIT_MULTIPRICES)) {
|
||||||
|
$thirdpartytemp = new Societe($db);
|
||||||
|
$thirdpartytemp->fetch($socid);
|
||||||
|
$price_level = $thirdpartytemp->price_level;
|
||||||
|
}
|
||||||
|
|
||||||
// Price by qty
|
// Price by qty
|
||||||
if (!empty($price_by_qty_rowid) && $price_by_qty_rowid >= 1 && (!empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY))) // If we need a particular price related to qty
|
if (!empty($price_by_qty_rowid) && $price_by_qty_rowid >= 1 && (!empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY))) // If we need a particular price related to qty
|
||||||
{
|
{
|
||||||
@ -100,14 +108,13 @@ if (!empty($action) && $action == 'fetch' && !empty($id))
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Multiprice
|
// Multiprice
|
||||||
if (!$found && isset($price_level) && $price_level >= 1 && (!empty($conf->global->PRODUIT_MULTIPRICES))) // If we need a particular price
|
if (!$found && isset($price_level) && $price_level >= 1 && (!empty($conf->global->PRODUIT_MULTIPRICES))) // If we need a particular price level (from 1 to 6)
|
||||||
// level (from 1 to 6)
|
|
||||||
{
|
{
|
||||||
$sql = "SELECT price, price_ttc, price_base_type, tva_tx";
|
$sql = "SELECT price, price_ttc, price_base_type, tva_tx";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."product_price ";
|
$sql .= " FROM ".MAIN_DB_PREFIX."product_price ";
|
||||||
$sql .= " WHERE fk_product='".$id."'";
|
$sql .= " WHERE fk_product = '".$id."'";
|
||||||
$sql .= " AND entity IN (".getEntity('productprice').")";
|
$sql .= " AND entity IN (".getEntity('productprice').")";
|
||||||
$sql .= " AND price_level=".$price_level;
|
$sql .= " AND price_level = ".((int) $price_level);
|
||||||
$sql .= " ORDER BY date_price";
|
$sql .= " ORDER BY date_price";
|
||||||
$sql .= " DESC LIMIT 1";
|
$sql .= " DESC LIMIT 1";
|
||||||
|
|
||||||
@ -160,8 +167,7 @@ else
|
|||||||
{
|
{
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
|
||||||
|
|
||||||
$langs->load("products");
|
$langs->loadLangs(array("main", "products"));
|
||||||
$langs->load("main");
|
|
||||||
|
|
||||||
top_httphead();
|
top_httphead();
|
||||||
|
|
||||||
@ -186,6 +192,7 @@ else
|
|||||||
$searchkey = (($idprod && GETPOST($idprod, 'alpha')) ? GETPOST($idprod, 'alpha') : (GETPOST($htmlname, 'alpha') ? GETPOST($htmlname, 'alpha') : ''));
|
$searchkey = (($idprod && GETPOST($idprod, 'alpha')) ? GETPOST($idprod, 'alpha') : (GETPOST($htmlname, 'alpha') ? GETPOST($htmlname, 'alpha') : ''));
|
||||||
|
|
||||||
$form = new Form($db);
|
$form = new Form($db);
|
||||||
|
|
||||||
if (empty($mode) || $mode == 1) { // mode=1: customer
|
if (empty($mode) || $mode == 1) { // mode=1: customer
|
||||||
$arrayresult = $form->select_produits_list("", $htmlname, $type, 0, $price_level, $searchkey, $status, $finished, $outjson, $socid, '1', 0, '', $hidepriceinlabel, $warehouseStatus);
|
$arrayresult = $form->select_produits_list("", $htmlname, $type, 0, $price_level, $searchkey, $status, $finished, $outjson, $socid, '1', 0, '', $hidepriceinlabel, $warehouseStatus);
|
||||||
} elseif ($mode == 2) { // mode=2: supplier
|
} elseif ($mode == 2) { // mode=2: supplier
|
||||||
|
|||||||
@ -1596,11 +1596,19 @@ class Products extends DolibarrApi
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($includestockdata) {
|
if ($includestockdata) {
|
||||||
$this->product->load_stock();
|
$this->product->load_stock();
|
||||||
|
|
||||||
|
if (is_array($this->product->stock_warehouse)) {
|
||||||
|
foreach($this->product->stock_warehouse as $keytmp => $valtmp) {
|
||||||
|
if (is_array($this->product->stock_warehouse[$keytmp]->detail_batch)) {
|
||||||
|
foreach($this->product->stock_warehouse[$keytmp]->detail_batch as $keytmp2 => $valtmp2) {
|
||||||
|
unset($this->product->stock_warehouse[$keytmp]->detail_batch[$keytmp2]->db);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ($includesubproducts) {
|
if ($includesubproducts) {
|
||||||
$childsArbo = $this->product->getChildsArbo($id, 1);
|
$childsArbo = $this->product->getChildsArbo($id, 1);
|
||||||
|
|
||||||
|
|||||||
@ -154,51 +154,42 @@ class StockMovements extends DolibarrApi
|
|||||||
return $obj_ret;
|
return $obj_ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* @param int $product_id Id product id {@min 1}
|
|
||||||
* @param int $warehouse_id Id warehouse {@min 1}
|
|
||||||
* @param float $qty Qty to add (Use negative value for a stock decrease) {@min 0} {@message qty must be higher than 0}
|
|
||||||
* @param string $lot Lot
|
|
||||||
* @param string $movementcode Movement code {@example INV123}
|
|
||||||
* @param string $movementlabel Movement label {@example Inventory number 123}
|
|
||||||
* @param string $price To update AWP (Average Weighted Price) when you make a stock increase (qty must be higher then 0).
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create stock movement object.
|
* Create stock movement object.
|
||||||
* You can use the following message to test this RES API:
|
* You can use the following message to test this RES API:
|
||||||
* { "product_id": 1, "warehouse_id": 1, "qty": 1, "lot": "", "movementcode": "INV123", "movementlabel": "Inventory 123", "price": 0 }
|
* { "product_id": 1, "warehouse_id": 1, "qty": 1, "lot": "", "movementcode": "INV123", "movementlabel": "Inventory 123", "price": 0 }
|
||||||
|
* $price Can be set to update AWP (Average Weighted Price) when you make a stock increase
|
||||||
|
* $dlc Eat-by date. Will be used if lot does not exists yet and will be created.
|
||||||
|
* $dluo Sell-by date. Will be used if lot does not exists yet and will be created.
|
||||||
|
*
|
||||||
|
* @param int $product_id Id product id {@min 1} {@from body} {@required true}
|
||||||
|
* @param int $warehouse_id Id warehouse {@min 1} {@from body} {@required true}
|
||||||
|
* @param float $qty Qty to add (Use negative value for a stock decrease) {@min 0} {@message qty must be higher than 0} {@from body} {@required true}
|
||||||
|
* @param string $lot Lot {@from body}
|
||||||
|
* @param string $movementcode Movement code {@example INV123} {@from body}
|
||||||
|
* @param string $movementlabel Movement label {@example Inventory number 123} {@from body}
|
||||||
|
* @param string $price To update AWP (Average Weighted Price) when you make a stock increase (qty must be higher then 0). {@from body}
|
||||||
|
* @param string $dlc Eat-by date. {@from body} {@type date}
|
||||||
|
* @param string $dluo Sell-by date. {@from body} {@type date}
|
||||||
*
|
*
|
||||||
* @param array $request_data Request data
|
|
||||||
* @return int ID of stock movement
|
* @return int ID of stock movement
|
||||||
|
* @throws RestException
|
||||||
*/
|
*/
|
||||||
//function post($product_id, $warehouse_id, $qty, $lot='', $movementcode='', $movementlabel='', $price=0)
|
public function post($product_id, $warehouse_id, $qty, $lot = '', $movementcode = '', $movementlabel = '', $price = '', $dlc = '', $dluo = '')
|
||||||
public function post($request_data = null)
|
|
||||||
{
|
{
|
||||||
if(! DolibarrApiAccess::$user->rights->stock->creer) {
|
if(! DolibarrApiAccess::$user->rights->stock->creer) {
|
||||||
throw new RestException(401);
|
throw new RestException(401);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check mandatory fields
|
if ($qty == 0) {
|
||||||
//$result = $this->_validate($request_data);
|
throw new RestException(503, "Making a stock movement with a quentity of 0 is not possible");
|
||||||
|
|
||||||
foreach($request_data as $field => $value) {
|
|
||||||
//$this->stockmovement->$field = $value;
|
|
||||||
if ($field == 'product_id') $product_id = $value;
|
|
||||||
if ($field == 'warehouse_id') $warehouse_id = $value;
|
|
||||||
if ($field == 'qty') $qty = $value;
|
|
||||||
if ($field == 'lot') $lot = $value;
|
|
||||||
if ($field == 'movementcode') $movementcode = $value;
|
|
||||||
if ($field == 'movementlabel') $movementlabel = $value;
|
|
||||||
if ($field == 'price') $price = $value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Type increase or decrease
|
// Type increase or decrease
|
||||||
if ($qty >= 0) $type = 3;
|
if ($qty >= 0) $type = 3;
|
||||||
else $type = 2;
|
else $type = 2;
|
||||||
|
|
||||||
if($this->stockmovement->_create(DolibarrApiAccess::$user, $product_id, $warehouse_id, $qty, $type, $price, $movementlabel, $movementcode, '', '', '', $lot) <= 0) {
|
if($this->stockmovement->_create(DolibarrApiAccess::$user, $product_id, $warehouse_id, $qty, $type, $price, $movementlabel, $movementcode, '', $dlc, $dluo, $lot) <= 0) {
|
||||||
throw new RestException(503, 'Error when create stock movement : '.$this->stockmovement->error);
|
throw new RestException(503, 'Error when create stock movement : '.$this->stockmovement->error);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -342,7 +333,7 @@ class StockMovements extends DolibarrApi
|
|||||||
private function _validate($data)
|
private function _validate($data)
|
||||||
{
|
{
|
||||||
$stockmovement = array();
|
$stockmovement = array();
|
||||||
foreach (Warehouses::$FIELDS as $field) {
|
foreach (self::$FIELDS as $field) {
|
||||||
if (!isset($data[$field]))
|
if (!isset($data[$field]))
|
||||||
throw new RestException(400, "$field field missing");
|
throw new RestException(400, "$field field missing");
|
||||||
$stockmovement[$field] = $data[$field];
|
$stockmovement[$field] = $data[$field];
|
||||||
|
|||||||
@ -158,6 +158,8 @@ class MouvementStock extends CommonObject
|
|||||||
$result = $product->fetch($fk_product);
|
$result = $product->fetch($fk_product);
|
||||||
if ($result < 0)
|
if ($result < 0)
|
||||||
{
|
{
|
||||||
|
$this->error = $product->error;
|
||||||
|
$this->errors = $product->errors;
|
||||||
dol_print_error('', "Failed to fetch product");
|
dol_print_error('', "Failed to fetch product");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -399,7 +401,8 @@ class MouvementStock extends CommonObject
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$this->errors[] = $this->db->lasterror();
|
$this->error = $this->db->lasterror();
|
||||||
|
$this->errors[] = $this->error;
|
||||||
$error = -1;
|
$error = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
* Copyright (C) 2005 Eric Seigne <eric.seigne@ryxeo.com>
|
* Copyright (C) 2005 Eric Seigne <eric.seigne@ryxeo.com>
|
||||||
* Copyright (C) 2005-2017 Regis Houssin <regis.houssin@inodbox.com>
|
* Copyright (C) 2005-2017 Regis Houssin <regis.houssin@inodbox.com>
|
||||||
* Copyright (C) 2008 Patrick Raguin <patrick.raguin@auguria.net>
|
* Copyright (C) 2008 Patrick Raguin <patrick.raguin@auguria.net>
|
||||||
* Copyright (C) 2010-2016 Juanjo Menent <jmenent@2byte.es>
|
* Copyright (C) 2010-2020 Juanjo Menent <jmenent@2byte.es>
|
||||||
* Copyright (C) 2011-2013 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
* Copyright (C) 2011-2013 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||||
* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
|
* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
|
||||||
* Copyright (C) 2015 Marcos García <marcosgdf@gmail.com>
|
* Copyright (C) 2015 Marcos García <marcosgdf@gmail.com>
|
||||||
@ -1070,13 +1070,13 @@ else
|
|||||||
$linkback = "";
|
$linkback = "";
|
||||||
print load_fiche_titre($langs->trans("NewThirdParty"), $linkback, 'building');
|
print load_fiche_titre($langs->trans("NewThirdParty"), $linkback, 'building');
|
||||||
|
|
||||||
if (!empty($conf->use_javascript_ajax) && !empty($conf->global->THIRDPARTY_SUGGEST_ALSO_ADDRESS_CREATION))
|
if (!empty($conf->use_javascript_ajax)) {
|
||||||
{
|
if (!empty($conf->global->THIRDPARTY_SUGGEST_ALSO_ADDRESS_CREATION)) {
|
||||||
print "\n".'<script type="text/javascript">';
|
print "\n" . '<script type="text/javascript">';
|
||||||
print '$(document).ready(function () {
|
print '$(document).ready(function () {
|
||||||
id_te_private=8;
|
id_te_private=8;
|
||||||
id_ef15=1;
|
id_ef15=1;
|
||||||
is_private='.$private.';
|
is_private=' . $private . ';
|
||||||
if (is_private) {
|
if (is_private) {
|
||||||
$(".individualline").show();
|
$(".individualline").show();
|
||||||
} else {
|
} else {
|
||||||
@ -1103,7 +1103,7 @@ else
|
|||||||
});
|
});
|
||||||
function init_customer_categ() {
|
function init_customer_categ() {
|
||||||
console.log("is customer or prospect = "+jQuery("#customerprospect").val());
|
console.log("is customer or prospect = "+jQuery("#customerprospect").val());
|
||||||
if (jQuery("#customerprospect").val() == 0 && (jQuery("#fournisseur").val() == 0 || '.(empty($conf->global->THIRDPARTY_CAN_HAVE_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT_SUPPLIER) ? '1' : '0').'))
|
if (jQuery("#customerprospect").val() == 0 && (jQuery("#fournisseur").val() == 0 || ' . (empty($conf->global->THIRDPARTY_CAN_HAVE_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT_SUPPLIER) ? '1' : '0') . '))
|
||||||
{
|
{
|
||||||
jQuery(".visibleifcustomer").hide();
|
jQuery(".visibleifcustomer").hide();
|
||||||
}
|
}
|
||||||
@ -1134,28 +1134,38 @@ else
|
|||||||
document.formsoc.submit();
|
document.formsoc.submit();
|
||||||
});
|
});
|
||||||
});';
|
});';
|
||||||
print '</script>'."\n";
|
print '</script>' . "\n";
|
||||||
|
|
||||||
print '<div id="selectthirdpartytype">';
|
print '<div id="selectthirdpartytype">';
|
||||||
print '<div class="hideonsmartphone float">';
|
print '<div class="hideonsmartphone float">';
|
||||||
print $langs->trans("ThirdPartyType").': ';
|
print $langs->trans("ThirdPartyType") . ': ';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
print '<label for="radiocompany" class="radiocompany">';
|
print '<label for="radiocompany" class="radiocompany">';
|
||||||
print '<input type="radio" id="radiocompany" class="flat" name="private" value="0"'.($private ? '' : ' checked').'>';
|
print '<input type="radio" id="radiocompany" class="flat" name="private" value="0"' . ($private ? '' : ' checked') . '>';
|
||||||
print ' ';
|
print ' ';
|
||||||
print $langs->trans("CreateThirdPartyOnly");
|
print $langs->trans("CreateThirdPartyOnly");
|
||||||
print '</label>';
|
print '</label>';
|
||||||
print ' ';
|
print ' ';
|
||||||
print '<label for="radioprivate" class="radioprivate">';
|
print '<label for="radioprivate" class="radioprivate">';
|
||||||
$text = '<input type="radio" id="radioprivate" class="flat" name="private" value="1"'.($private ? ' checked' : '').'>';
|
$text = '<input type="radio" id="radioprivate" class="flat" name="private" value="1"' . ($private ? ' checked' : '') . '>';
|
||||||
$text .= ' ';
|
$text .= ' ';
|
||||||
$text .= $langs->trans("CreateThirdPartyAndContact");
|
$text .= $langs->trans("CreateThirdPartyAndContact");
|
||||||
$htmltext = $langs->trans("ToCreateContactWithSameName");
|
$htmltext = $langs->trans("ToCreateContactWithSameName");
|
||||||
print $form->textwithpicto($text, $htmltext, 1, 'help', '', 0, 3);
|
print $form->textwithpicto($text, $htmltext, 1, 'help', '', 0, 3);
|
||||||
print '</label>';
|
print '</label>';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
print "<br>\n";
|
print "<br>\n";
|
||||||
}
|
} else {
|
||||||
|
print '<script type="text/javascript">';
|
||||||
|
print '$(document).ready(function () {
|
||||||
|
$("#selectcountry_id").change(function() {
|
||||||
|
document.formsoc.action.value="create";
|
||||||
|
document.formsoc.submit();
|
||||||
|
});
|
||||||
|
});';
|
||||||
|
print '</script>' . "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dol_htmloutput_mesg(is_numeric($error) ? '' : $error, $errors, 'error');
|
dol_htmloutput_mesg(is_numeric($error) ? '' : $error, $errors, 'error');
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user