Merge branch 'fix_3.7_issue_2858' into develop
This commit is contained in:
commit
c62a69ccc8
@ -49,6 +49,10 @@ if($action)
|
|||||||
{
|
{
|
||||||
$res = dolibarr_set_const($db, "STOCK_USERSTOCK_AUTOCREATE", GETPOST('STOCK_USERSTOCK_AUTOCREATE','alpha'),'chaine',0,'',$conf->entity);
|
$res = dolibarr_set_const($db, "STOCK_USERSTOCK_AUTOCREATE", GETPOST('STOCK_USERSTOCK_AUTOCREATE','alpha'),'chaine',0,'',$conf->entity);
|
||||||
}
|
}
|
||||||
|
if ($action == 'STOCK_ALLOW_NEGATIVE_TRANSFER')
|
||||||
|
{
|
||||||
|
$res = dolibarr_set_const($db, "STOCK_ALLOW_NEGATIVE_TRANSFER", GETPOST('STOCK_ALLOW_NEGATIVE_TRANSFER','alpha'),'chaine',0,'',$conf->entity);
|
||||||
|
}
|
||||||
// Mode of stock decrease
|
// Mode of stock decrease
|
||||||
if ($action == 'STOCK_CALCULATE_ON_BILL'
|
if ($action == 'STOCK_CALCULATE_ON_BILL'
|
||||||
|| $action == 'STOCK_CALCULATE_ON_VALIDATE_ORDER'
|
|| $action == 'STOCK_CALCULATE_ON_VALIDATE_ORDER'
|
||||||
@ -427,6 +431,22 @@ print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">'
|
|||||||
print '</form>';
|
print '</form>';
|
||||||
print "</td>\n";
|
print "</td>\n";
|
||||||
print "</tr>\n";
|
print "</tr>\n";
|
||||||
|
|
||||||
|
$var=!$var;
|
||||||
|
|
||||||
|
print "<tr ".$bc[$var].">";
|
||||||
|
print '<td width="60%">'.$langs->trans("WarehouseAllowNegativeTransfer").'</td>';
|
||||||
|
|
||||||
|
print '<td width="160" align="right">';
|
||||||
|
print "<form method=\"post\" action=\"stock.php\">";
|
||||||
|
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||||
|
print "<input type=\"hidden\" name=\"action\" value=\"STOCK_ALLOW_NEGATIVE_TRANSFER\">";
|
||||||
|
print $form->selectyesno("STOCK_ALLOW_NEGATIVE_TRANSFER",$conf->global->STOCK_ALLOW_NEGATIVE_TRANSFER,1);
|
||||||
|
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
|
||||||
|
print '</form>';
|
||||||
|
print "</td>\n";
|
||||||
|
print "</tr>\n";
|
||||||
|
|
||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
/* I keep the option/feature, but hidden to end users for the moment. If feature is used by module, no need to have users see it.
|
/* I keep the option/feature, but hidden to end users for the moment. If feature is used by module, no need to have users see it.
|
||||||
|
|||||||
@ -71,7 +71,9 @@ class modStock extends DolibarrModules
|
|||||||
$this->langfiles = array("stocks");
|
$this->langfiles = array("stocks");
|
||||||
|
|
||||||
// Constants
|
// Constants
|
||||||
$this->const = array();
|
$this->const = array(
|
||||||
|
0=>array('STOCK_ALLOW_NEGATIVE_TRANSFER','chaine','1','',1)
|
||||||
|
);
|
||||||
|
|
||||||
// Boxes
|
// Boxes
|
||||||
$this->boxes = array();
|
$this->boxes = array();
|
||||||
|
|||||||
@ -133,6 +133,8 @@ StockMustBeEnoughForShipment= Stock level must be enough to add product/service
|
|||||||
MovementLabel=Label of movement
|
MovementLabel=Label of movement
|
||||||
InventoryCode=Movement or inventory code
|
InventoryCode=Movement or inventory code
|
||||||
IsInPackage=Contained into package
|
IsInPackage=Contained into package
|
||||||
|
WarehouseAllowNegativeTransfer=Allow transfer even without stock
|
||||||
|
qtyToTranferIsNotEnough=You don't have enough stock from your source warehouse
|
||||||
ShowWarehouse=Show warehouse
|
ShowWarehouse=Show warehouse
|
||||||
MovementCorrectStock=Stock correction for product %s
|
MovementCorrectStock=Stock correction for product %s
|
||||||
MovementTransferStock=Stock transfer of product %s into another warehouse
|
MovementTransferStock=Stock transfer of product %s into another warehouse
|
||||||
|
|||||||
@ -232,96 +232,117 @@ if ($action == "transfert_stock" && ! $cancel)
|
|||||||
if (isset($object->pmp)) $pricesrc=$object->pmp;
|
if (isset($object->pmp)) $pricesrc=$object->pmp;
|
||||||
$pricedest=$pricesrc;
|
$pricedest=$pricesrc;
|
||||||
|
|
||||||
if ($object->hasbatch())
|
$do_tranfer = true;
|
||||||
|
if (empty($conf->global->STOCK_ALLOW_NEGATIVE_TRANSFER))
|
||||||
{
|
{
|
||||||
$pdluo = new Productbatch($db);
|
$fk_warehouse_source = GETPOST("id_entrepot");
|
||||||
|
$nb_unit = GETPOST("nbpiece",'int');
|
||||||
|
|
||||||
if ($pdluoid > 0)
|
if (empty($object->stock_warehouse[$fk_warehouse_source]->real) || $object->stock_warehouse[$fk_warehouse_source]->real < $nb_unit)
|
||||||
{
|
{
|
||||||
$result=$pdluo->fetch($pdluoid);
|
$do_tranfer = false;
|
||||||
if ($result)
|
$result1 = $result2 = -1;
|
||||||
|
$action='';
|
||||||
|
$object->error = $langs->trans('qtyToTranferIsNotEnough');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($do_tranfer)
|
||||||
|
{
|
||||||
|
|
||||||
|
if ($object->hasbatch())
|
||||||
|
{
|
||||||
|
$pdluo = new Productbatch($db);
|
||||||
|
|
||||||
|
if ($pdluoid > 0)
|
||||||
{
|
{
|
||||||
$srcwarehouseid=$pdluo->warehouseid;
|
$result=$pdluo->fetch($pdluoid);
|
||||||
$batch=$pdluo->batch;
|
if ($result)
|
||||||
$eatby=$pdluo->eatby;
|
{
|
||||||
$sellby=$pdluo->sellby;
|
$srcwarehouseid=$pdluo->warehouseid;
|
||||||
|
$batch=$pdluo->batch;
|
||||||
|
$eatby=$pdluo->eatby;
|
||||||
|
$sellby=$pdluo->sellby;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setEventMessages($pdluo->error, $pdluo->errors, 'errors');
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
setEventMessages($pdluo->error, $pdluo->errors, 'errors');
|
$srcwarehouseid=GETPOST('id_entrepot','int');
|
||||||
$error++;
|
$batch=GETPOST('batch_number');
|
||||||
|
$eatby=$d_eatby;
|
||||||
|
$sellby=$d_sellby;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
// Remove stock
|
||||||
|
$result1=$object->correct_stock_batch(
|
||||||
|
$user,
|
||||||
|
$srcwarehouseid,
|
||||||
|
GETPOST("nbpiece",'int'),
|
||||||
|
1,
|
||||||
|
GETPOST("label",'san_alpha'),
|
||||||
|
$pricesrc,
|
||||||
|
$eatby,$sellby,$batch,
|
||||||
|
GETPOST('inventorycode')
|
||||||
|
);
|
||||||
|
if ($result1 < 0) $error++;
|
||||||
|
}
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
// Add stock
|
||||||
|
$result2=$object->correct_stock_batch(
|
||||||
|
$user,
|
||||||
|
GETPOST("id_entrepot_destination",'int'),
|
||||||
|
GETPOST("nbpiece",'int'),
|
||||||
|
0,
|
||||||
|
GETPOST("label",'san_alpha'),
|
||||||
|
$pricedest,
|
||||||
|
$eatby,$sellby,$batch,
|
||||||
|
GETPOST('inventorycode')
|
||||||
|
);
|
||||||
|
if ($result2 < 0) $error++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$srcwarehouseid=GETPOST('id_entrepot','int');
|
if (! $error)
|
||||||
$batch=GETPOST('batch_number');
|
{
|
||||||
$eatby=$d_eatby;
|
// Remove stock
|
||||||
$sellby=$d_sellby;
|
$result1=$object->correct_stock(
|
||||||
|
$user,
|
||||||
|
GETPOST("id_entrepot"),
|
||||||
|
GETPOST("nbpiece"),
|
||||||
|
1,
|
||||||
|
GETPOST("label"),
|
||||||
|
$pricesrc,
|
||||||
|
GETPOST('inventorycode')
|
||||||
|
);
|
||||||
|
if ($result1 < 0) $error++;
|
||||||
|
}
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
// Add stock
|
||||||
|
$result2=$object->correct_stock(
|
||||||
|
$user,
|
||||||
|
GETPOST("id_entrepot_destination"),
|
||||||
|
GETPOST("nbpiece"),
|
||||||
|
0,
|
||||||
|
GETPOST("label"),
|
||||||
|
$pricedest,
|
||||||
|
GETPOST('inventorycode')
|
||||||
|
);
|
||||||
|
if ($result2 < 0) $error++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! $error)
|
|
||||||
{
|
|
||||||
// Remove stock
|
|
||||||
$result1=$object->correct_stock_batch(
|
|
||||||
$user,
|
|
||||||
$srcwarehouseid,
|
|
||||||
GETPOST("nbpiece",'int'),
|
|
||||||
1,
|
|
||||||
GETPOST("label",'san_alpha'),
|
|
||||||
$pricesrc,
|
|
||||||
$eatby,$sellby,$batch,
|
|
||||||
GETPOST('inventorycode')
|
|
||||||
);
|
|
||||||
if ($result1 < 0) $error++;
|
|
||||||
}
|
|
||||||
if (! $error)
|
|
||||||
{
|
|
||||||
// Add stock
|
|
||||||
$result2=$object->correct_stock_batch(
|
|
||||||
$user,
|
|
||||||
GETPOST("id_entrepot_destination",'int'),
|
|
||||||
GETPOST("nbpiece",'int'),
|
|
||||||
0,
|
|
||||||
GETPOST("label",'san_alpha'),
|
|
||||||
$pricedest,
|
|
||||||
$eatby,$sellby,$batch,
|
|
||||||
GETPOST('inventorycode')
|
|
||||||
);
|
|
||||||
if ($result2 < 0) $error++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (! $error)
|
|
||||||
{
|
|
||||||
// Remove stock
|
|
||||||
$result1=$object->correct_stock(
|
|
||||||
$user,
|
|
||||||
GETPOST("id_entrepot"),
|
|
||||||
GETPOST("nbpiece"),
|
|
||||||
1,
|
|
||||||
GETPOST("label"),
|
|
||||||
$pricesrc,
|
|
||||||
GETPOST('inventorycode')
|
|
||||||
);
|
|
||||||
if ($result1 < 0) $error++;
|
|
||||||
}
|
|
||||||
if (! $error)
|
|
||||||
{
|
|
||||||
// Add stock
|
|
||||||
$result2=$object->correct_stock(
|
|
||||||
$user,
|
|
||||||
GETPOST("id_entrepot_destination"),
|
|
||||||
GETPOST("nbpiece"),
|
|
||||||
0,
|
|
||||||
GETPOST("label"),
|
|
||||||
$pricedest,
|
|
||||||
GETPOST('inventorycode')
|
|
||||||
);
|
|
||||||
if ($result2 < 0) $error++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! $error && $result1 >= 0 && $result2 >= 0)
|
if (! $error && $result1 >= 0 && $result2 >= 0)
|
||||||
{
|
{
|
||||||
$db->commit();
|
$db->commit();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user