diff --git a/htdocs/product/card.php b/htdocs/product/card.php
index 094ce8670a9..26ee8c5c186 100644
--- a/htdocs/product/card.php
+++ b/htdocs/product/card.php
@@ -307,6 +307,8 @@ if (empty($reshook)) {
$object->status = GETPOST('statut');
$object->status_buy = GETPOST('statut_buy');
$object->status_batch = GETPOST('status_batch');
+ $object->batch_mask = GETPOST('batch_mask', 'alpha');
+
$object->barcode_type = GETPOST('fk_barcode_type');
$object->barcode = GETPOST('barcode');
@@ -475,6 +477,7 @@ if (empty($reshook)) {
$object->status = GETPOST('statut', 'int');
$object->status_buy = GETPOST('statut_buy', 'int');
$object->status_batch = GETPOST('status_batch', 'aZ09');
+ $object->batch_mask = GETPOST('batch_mask', 'alpha');
$object->fk_default_warehouse = GETPOST('fk_default_warehouse');
// removed from update view so GETPOST always empty
/*
@@ -1545,10 +1548,26 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
// Batch number managment
if ($conf->productbatch->enabled) {
if ($object->isProduct() || !empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
- print '
| '.$langs->trans("ManageLotSerial").' | ';
+ print ' |
| '.$langs->trans("ManageLotSerial").' | ';
$statutarray = array('0' => $langs->trans("ProductStatusNotOnBatch"), '1' => $langs->trans("ProductStatusOnBatch"), '2' => $langs->trans("ProductStatusOnSerial"));
print $form->selectarray('status_batch', $statutarray, $object->status_batch);
- print ' |
';
+ print '';
+ if ($object->status_batch !== '0'
+ && (($object->status_batch == '1' && $conf->global->PRODUCTBATCH_LOT_USE_PRODUCT_MASKS && $conf->global->PRODUCTBATCH_LOT_ADDON == 'mod_lot_advanced')
+ || ($object->status_batch == '2' && $conf->global->PRODUCTBATCH_SN_ADDON == 'mod_sn_advanced' && $conf->global->PRODUCTBATCH_SN_USE_PRODUCT_MASKS))) {
+ $inherited_mask = $object->status_batch == '1' ? $conf->global->LOT_ADVANCED_MASK : $conf->global->SN_ADVANCED_MASK;
+ print ''.$langs->trans("ManageLotMask").' | ';
+ $mask = !is_empty($object->batch_mask) ? $object->batch_mask : $inherited_mask;
+ $tooltip = $langs->trans("GenericMaskCodes", $langs->transnoentities("Batch"), $langs->transnoentities("Batch"));
+ $tooltip .= $langs->trans("GenericMaskCodes2");
+ $tooltip .= $langs->trans("GenericMaskCodes3");
+ $tooltip .= $langs->trans("GenericMaskCodes4a", $langs->transnoentities("Batch"), $langs->transnoentities("Batch"));
+ $tooltip .= $langs->trans("GenericMaskCodes5");
+ print '';
+ print $form->textwithpicto('', $tooltip, 1, 1);
+ print ' | ';
+ }
+ print '';
}
}
diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php
index 16bbc508ac9..bcfaee9c0dc 100644
--- a/htdocs/product/class/product.class.php
+++ b/htdocs/product/class/product.class.php
@@ -264,6 +264,13 @@ class Product extends CommonObject
*/
public $status_batch = 0;
+ /**
+ * If allowed, we can edit batch or serial number mask for each product
+ *
+ * @var string
+ */
+ public $batch_mask = '';
+
/**
* Customs code
*
@@ -698,6 +705,7 @@ class Product extends CommonObject
$sql .= ", '".$this->db->escape($this->canvas)."'";
$sql .= ", ".((!isset($this->finished) || $this->finished < 0 || $this->finished == '') ? 'null' : (int) $this->finished);
$sql .= ", ".((empty($this->status_batch) || $this->status_batch < 0) ? '0' : $this->status_batch);
+ $sql .= ", '".$this->db->escape($this->batch_mask)."'";
$sql .= ", ".(!$this->fk_unit ? 'NULL' : $this->fk_unit);
$sql .= ")";
@@ -1059,6 +1067,8 @@ class Product extends CommonObject
$sql .= ", tosell = ".(int) $this->status;
$sql .= ", tobuy = ".(int) $this->status_buy;
$sql .= ", tobatch = ".((empty($this->status_batch) || $this->status_batch < 0) ? '0' : (int) $this->status_batch);
+ $sql .= ", batch_mask = '".$this->db->escape($this->batch_mask)."'";
+
$sql .= ", finished = ".((!isset($this->finished) || $this->finished < 0 || $this->finished == '') ? "null" : (int) $this->finished);
$sql .= ", net_measure = ".($this->net_measure != '' ? "'".$this->db->escape($this->net_measure)."'" : 'null');
$sql .= ", net_measure_units = ".($this->net_measure_units != '' ? "'".$this->db->escape($this->net_measure_units)."'" : 'null');
@@ -2170,7 +2180,7 @@ class Product extends CommonObject
} else {
$sql .= " pa.accountancy_code_buy, pa.accountancy_code_buy_intra, pa.accountancy_code_buy_export, pa.accountancy_code_sell, pa.accountancy_code_sell_intra, pa.accountancy_code_sell_export,";
}
- $sql .= " p.stock,p.pmp, p.datec, p.tms, p.import_key, p.entity, p.desiredstock, p.tobatch, p.fk_unit,";
+ $sql .= " p.stock,p.pmp, p.datec, p.tms, p.import_key, p.entity, p.desiredstock, p.tobatch, p.batch_mask, p.fk_unit,";
$sql .= " p.fk_price_expression, p.price_autogen, p.model_pdf";
$sql .= " FROM ".MAIN_DB_PREFIX."product as p";
if (!empty($conf->global->MAIN_PRODUCT_PERENTITY_SHARED)) {
@@ -2210,6 +2220,7 @@ class Product extends CommonObject
$this->status = $obj->tosell;
$this->status_buy = $obj->tobuy;
$this->status_batch = $obj->tobatch;
+ $this->batch_mask = $obj->batch_mask;
$this->customcode = $obj->customcode;
$this->country_id = $obj->fk_country;