Inventory - adding same product multiple time will increase / decrease qty

This commit is contained in:
lainwir3d 2022-10-20 16:17:13 +04:00
parent 9e45c9abab
commit 46a420dbd9

View File

@ -308,6 +308,29 @@ if (empty($reshook)) {
include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php';*/
if (GETPOST('addline', 'alpha')) {
$sql = 'SELECT id.rowid, id.datec as date_creation, id.tms as date_modification, id.fk_inventory, id.fk_warehouse,';
$sql .= ' id.fk_product, id.batch, id.qty_stock, id.qty_view, id.qty_regulated';
$sql .= ' FROM '.MAIN_DB_PREFIX.'inventorydet as id';
$sql .= ' WHERE id.fk_inventory = '.((int) $object->id);
$sql .= ' AND id.fk_product = '.$fk_product;
$inventoryline = new InventoryLine($db);
$lineExists = $false;
$db->begin();
$resql = $db->query($sql);
if ($resql) {
$num = $db->num_rows($resql);
$i = 0;
if($num > 0){
$line = $db->fetch_object($resql);
if($inventoryline->fetch($line->rowid) > 0){
$lineExists = true;
//var_dump($inventoryline); die();
}
}
}
$qty= (GETPOST('qtytoadd') != '' ? price2num(GETPOST('qtytoadd', 'MS')) : null);
if ($fk_warehouse <= 0) {
$error++;
@ -317,7 +340,7 @@ if (empty($reshook)) {
$error++;
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Product")), null, 'errors');
}
if (price2num(GETPOST('qtytoadd'), 'MS') < 0) {
if (!$lineExists && price2num(GETPOST('qtytoadd'), 'MS') < 0) {
$error++;
setEventMessages($langs->trans("FieldCannotBeNegative", $langs->transnoentitiesnoconv("RealQty")), null, 'errors');
}
@ -341,7 +364,7 @@ if (empty($reshook)) {
setEventMessages($langs->trans("ErrorProductDoesNotNeedBatchNumber", $tmpproduct->ref), null, 'errors');
}
}
if (!$error) {
if (!$error && !$lineExists) {
$tmp = new InventoryLine($db);
$tmp->fk_inventory = $object->id;
$tmp->fk_warehouse = $fk_warehouse;
@ -363,6 +386,31 @@ if (empty($reshook)) {
$_POST['batch'] = '';
$_POST['qtytoadd'] = '';
}
}else if(!$error){
if(($inventoryline->qty_view + ((int) $qty)) < 0){
$error++;
setEventMessages($langs->trans("FieldCannotBeNegative", $langs->transnoentitiesnoconv("RealQty")), null, 'errors');
}else{
$inventoryline->qty_view += ((int) $qty); // price2num
$inventoryline->update($user);
//var_dump($fk_product); die();
if ($result < 0) {
$langs->load("errors");
setEventMessages("Erreur inconnue lors de la mise à jour du champ", null, 'errors');
} else {
setEventMessages("Quantité ajoutée ou soustraite à la ligne existante", null);
// Clear var
$_POST['batch'] = '';
$_POST['qtytoadd'] = '';
}
}
}
if (! $error) {
$db->commit();
} else {
$db->rollback();
}
}
}
@ -937,7 +985,6 @@ if ($object->id > 0) {
$cacheOfProducts = array();
$cacheOfWarehouses = array();
//$sql = '';
$resql = $db->query($sql);
if ($resql) {
@ -1003,7 +1050,8 @@ if ($object->id > 0) {
print '</td>';
if ($object->status == $object::STATUS_DRAFT || $object->status == $object::STATUS_VALIDATED) {
$qty_view = GETPOST("id_".$obj->rowid) && price2num(GETPOST("id_".$obj->rowid), 'MS') >= 0 ? GETPOST("id_".$obj->rowid) : $obj->qty_view;
//$qty_view = GETPOST("id_".$obj->rowid) && price2num(GETPOST("id_".$obj->rowid), 'MS') >= 0 ? GETPOST("id_".$obj->rowid) : $obj->qty_view;
$qty_view = $obj->qty_view;
//if (!$hasinput && $qty_view !== null && $obj->qty_stock != $qty_view) {
if ($qty_view != '') {