Change fk_unit service lines management

This commit is contained in:
atm-lena
2022-07-20 15:38:37 +02:00
parent cc5a5e40d9
commit 7f1a17bcc9
10 changed files with 41 additions and 29 deletions

View File

@@ -53,6 +53,7 @@ if (!defined('NOBROWSERNOTIF')) {
include_once '../../main.inc.php'; // Load $user and permissions include_once '../../main.inc.php'; // Load $user and permissions
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.'/core/class/cunits.class.php';
$action = GETPOST('action', 'aZ09'); $action = GETPOST('action', 'aZ09');
@@ -69,10 +70,9 @@ if ($action == 'getDurationUnitByProduct') {
$product = new Product($db); $product = new Product($db);
$res = $product->fetch($idproduct); $res = $product->fetch($idproduct);
if ($res > 0) { $cUnit = new CUnits($db);
$return = $product->duration_unit; $fk_unit = $cUnit->getUnitFromCode($product->duration_unit, 'short_label','time');
}
echo json_encode($return); echo json_encode($fk_unit);
exit(); exit();
} }

View File

@@ -167,7 +167,7 @@ if (empty($reshook)) {
$qty_frozen = price2num(GETPOST('qty_frozen', 'alpha'), 'MS'); $qty_frozen = price2num(GETPOST('qty_frozen', 'alpha'), 'MS');
$disable_stock_change = GETPOST('disable_stock_change', 'int'); $disable_stock_change = GETPOST('disable_stock_change', 'int');
$efficiency = price2num(GETPOST('efficiency', 'alpha')); $efficiency = price2num(GETPOST('efficiency', 'alpha'));
$duration_unit = GETPOST('duration_unit', 'alphanohtml'); $fk_unit = GETPOST('fk_unit', 'alphanohtml');
if ($qty == '') { if ($qty == '') {
setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Qty')), null, 'errors'); setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Qty')), null, 'errors');
$error++; $error++;
@@ -191,7 +191,7 @@ if (empty($reshook)) {
$bomline->qty_frozen = (int) $qty_frozen; $bomline->qty_frozen = (int) $qty_frozen;
$bomline->disable_stock_change = (int) $disable_stock_change; $bomline->disable_stock_change = (int) $disable_stock_change;
$bomline->efficiency = $efficiency; $bomline->efficiency = $efficiency;
$bomline->duration_unit = $duration_unit; $bomline->fk_unit = $fk_unit;
// Rang to use // Rang to use
$rangmax = $object->line_max(0); $rangmax = $object->line_max(0);
@@ -227,7 +227,7 @@ if (empty($reshook)) {
$qty_frozen = price2num(GETPOST('qty_frozen', 'alpha'), 'MS'); $qty_frozen = price2num(GETPOST('qty_frozen', 'alpha'), 'MS');
$disable_stock_change = GETPOST('disable_stock_change', 'int'); $disable_stock_change = GETPOST('disable_stock_change', 'int');
$efficiency = price2num(GETPOST('efficiency', 'alpha')); $efficiency = price2num(GETPOST('efficiency', 'alpha'));
$duration_unit = GETPOST('duration_unit', 'alphanohtml'); $fk_unit = GETPOST('fk_unit', 'alphanohtml');
if ($qty == '') { if ($qty == '') {
setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Qty')), null, 'errors'); setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Qty')), null, 'errors');
@@ -240,7 +240,9 @@ if (empty($reshook)) {
$bomline->qty_frozen = (int) $qty_frozen; $bomline->qty_frozen = (int) $qty_frozen;
$bomline->disable_stock_change = (int) $disable_stock_change; $bomline->disable_stock_change = (int) $disable_stock_change;
$bomline->efficiency = $efficiency; $bomline->efficiency = $efficiency;
$bomline->duration_unit = $duration_unit;
require_once DOL_DOCUMENT_ROOT.'/core/class/cunits.class.php';
$bomline->fk_unit = $fk_unit;
$result = $bomline->update($user); $result = $bomline->update($user);
if ($result <= 0) { if ($result <= 0) {

View File

@@ -1128,7 +1128,8 @@ class BOM extends CommonObject
} }
} else { } else {
//Convert qty to hour //Convert qty to hour
$qty = convertDurationtoHour($line->qty, $line->duration_unit); $unit = measuringUnitString($line->fk_unit);
$qty = convertDurationtoHour($line->qty, $unit);
if ($conf->workstation->enabled) { if ($conf->workstation->enabled) {
if ($tmpproduct->fk_default_workstation) { if ($tmpproduct->fk_default_workstation) {
@@ -1293,7 +1294,7 @@ class BOMLine extends CommonObjectLine
'qty_frozen' => array('type'=>'smallint', 'label'=>'QuantityFrozen', 'enabled'=>1, 'visible'=>1, 'default'=>0, 'position'=>105, 'css'=>'maxwidth50imp', 'help'=>'QuantityConsumedInvariable'), 'qty_frozen' => array('type'=>'smallint', 'label'=>'QuantityFrozen', 'enabled'=>1, 'visible'=>1, 'default'=>0, 'position'=>105, 'css'=>'maxwidth50imp', 'help'=>'QuantityConsumedInvariable'),
'disable_stock_change' => array('type'=>'smallint', 'label'=>'DisableStockChange', 'enabled'=>1, 'visible'=>1, 'default'=>0, 'position'=>108, 'css'=>'maxwidth50imp', 'help'=>'DisableStockChangeHelp'), 'disable_stock_change' => array('type'=>'smallint', 'label'=>'DisableStockChange', 'enabled'=>1, 'visible'=>1, 'default'=>0, 'position'=>108, 'css'=>'maxwidth50imp', 'help'=>'DisableStockChangeHelp'),
'efficiency' => array('type'=>'double(24,8)', 'label'=>'ManufacturingEfficiency', 'enabled'=>1, 'visible'=>0, 'default'=>1, 'position'=>110, 'notnull'=>1, 'css'=>'maxwidth50imp', 'help'=>'ValueOfEfficiencyConsumedMeans'), 'efficiency' => array('type'=>'double(24,8)', 'label'=>'ManufacturingEfficiency', 'enabled'=>1, 'visible'=>0, 'default'=>1, 'position'=>110, 'notnull'=>1, 'css'=>'maxwidth50imp', 'help'=>'ValueOfEfficiencyConsumedMeans'),
'duration_unit' => array('type'=>'varchar(6)', 'label'=>'Unit', 'enabled'=>1, 'visible'=>1, 'position'=>120, 'notnull'=>-1,), 'fk_unit' => array('type'=>'integer', 'label'=>'Unit', 'enabled'=>1, 'visible'=>1, 'position'=>120, 'notnull'=>-1,),
'position' => array('type'=>'integer', 'label'=>'Rank', 'enabled'=>1, 'visible'=>0, 'default'=>0, 'position'=>200, 'notnull'=>1,), 'position' => array('type'=>'integer', 'label'=>'Rank', 'enabled'=>1, 'visible'=>0, 'default'=>0, 'position'=>200, 'notnull'=>1,),
'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>1000, 'notnull'=>-1,), 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>1000, 'notnull'=>-1,),
); );

View File

@@ -160,8 +160,11 @@ if ($filtertype != 1) {
print '</td>'; print '</td>';
} else { } else {
$coldisplay++; $coldisplay++;
require_once DOL_DOCUMENT_ROOT.'/core/class/cunits.class.php';
$cUnit = new CUnits($this->db);
$fk_unit_default = $cUnit->getUnitFromCode('h', 'short_label','time');
print '<td class="bordertop nobottom nowrap linecolunit right">'; print '<td class="bordertop nobottom nowrap linecolunit right">';
print $formproduct->selectMeasuringUnits("duration_unit", "time", 'h', 0, 1); print $formproduct->selectMeasuringUnits("fk_unit", "time", $fk_unit_default, 0, 0);
print '</td>'; print '</td>';
$coldisplay++; $coldisplay++;
@@ -212,7 +215,8 @@ jQuery(document).ready(function() {
//change unit selected if we change service selected //change unit selected if we change service selected
<?php if ($filtertype == 1) { ?> <?php if ($filtertype == 1) { ?>
$('#idprodservice').change(function(){ $('#idprodservice').change(function(){
var idproduct = $(this).val(); var idproduct = $(this).val();
$.ajax({ $.ajax({
url : "<?php echo dol_buildpath('/bom/ajax/ajax.php', 1); ?>" url : "<?php echo dol_buildpath('/bom/ajax/ajax.php', 1); ?>"
,type: 'POST' ,type: 'POST'
@@ -221,8 +225,10 @@ jQuery(document).ready(function() {
,'idproduct' : idproduct ,'idproduct' : idproduct
} }
}).done(function(data) { }).done(function(data) {
console.log(data);
var data = JSON.parse(data); var data = JSON.parse(data);
$('#duration_unit').val(data).change();; $("#fk_unit").val(data).change();
}); });
}); });
<?php } ?> <?php } ?>

View File

@@ -141,7 +141,7 @@ if ($filtertype != 1) {
$coldisplay++; $coldisplay++;
print '<td class="nobottom nowrap linecolunit right">'; print '<td class="nobottom nowrap linecolunit right">';
print $formproduct->selectMeasuringUnits("duration_unit", "time", ($line->duration_unit) ? $line->duration_unit : '', 0, 1); print $formproduct->selectMeasuringUnits("fk_unit", "time", ($line->fk_unit) ? $line->fk_unit : '', 0, 0);
print '</td>'; print '</td>';
$coldisplay++; $coldisplay++;

View File

@@ -132,16 +132,14 @@ if ($filtertype != 1) {
//Unité //Unité
print '<td class="linecolunit nowrap right">'; print '<td class="linecolunit nowrap right">';
$coldisplay++; $coldisplay++;
if ($line->qty > 1) {
$dur = array("s"=>$langs->trans("Seconds"), "i"=>$langs->trans("Minutes"), "h"=>$langs->trans("Hours"), "d"=>$langs->trans("Days"), "w"=>$langs->trans("Weeks"), "m"=>$langs->trans("Months"), "y"=>$langs->trans("Years")); if (!empty($line->fk_unit)) {
} elseif ($tmpproduct->duration_value > 0) { require_once DOL_DOCUMENT_ROOT.'/core/class/cunits.class.php';
$dur = array("s"=>$langs->trans("Second"), "i"=>$langs->trans("Minute"), "h"=>$langs->trans("Hour"), "d"=>$langs->trans("Day"), "w"=>$langs->trans("Week"), "m"=>$langs->trans("Month"), "y"=>$langs->trans("Year")); $unit = new CUnits($this->db);
} $unit->fetch($line->fk_unit);
if (!empty($line->duration_unit)) { print (isset($unit->label) ? "&nbsp;".$langs->trans(ucwords($unit->label))."&nbsp;" : '');
print (isset($dur[$line->duration_unit]) ? "&nbsp;".$langs->trans($dur[$line->duration_unit])."&nbsp;" : '');
} else {
print (!empty($tmpproduct->duration_unit) && isset($dur[$tmpproduct->duration_unit]) ? "&nbsp;" . $langs->trans($dur[$tmpproduct->duration_unit]) . "&nbsp;" : '');
} }
print '</td>'; print '</td>';
//Poste de travail //Poste de travail

View File

@@ -420,15 +420,16 @@ class CUnits // extends CommonObject
* Get unit from code * Get unit from code
* @param string $code code of unit * @param string $code code of unit
* @param string $mode 0= id , short_label=Use short label as value, code=use code * @param string $mode 0= id , short_label=Use short label as value, code=use code
* @param string $unit_type weight,size,surface,volume,qty,time...
* @return int <0 if KO, Id of code if OK * @return int <0 if KO, Id of code if OK
*/ */
public function getUnitFromCode($code, $mode = 'code') public function getUnitFromCode($code, $mode = 'code', $unit_type='')
{ {
if ($mode == 'short_label') { if ($mode == 'short_label') {
return dol_getIdFromCode($this->db, $code, 'c_units', 'short_label', 'rowid'); return dol_getIdFromCode($this->db, $code, 'c_units', 'short_label', 'rowid',0, ' AND unit_type = "'.$unit_type.'"');
} elseif ($mode == 'code') { } elseif ($mode == 'code') {
return dol_getIdFromCode($this->db, $code, 'c_units', 'code', 'rowid'); return dol_getIdFromCode($this->db, $code, 'c_units', 'code', 'rowid',0, ' AND unit_type = "'. $unit_type .'"');
} }
return $code; return $code;

View File

@@ -8504,10 +8504,11 @@ function dol_osencode($str)
* @param string $fieldkey Field to search the key into * @param string $fieldkey Field to search the key into
* @param string $fieldid Field to get * @param string $fieldid Field to get
* @param int $entityfilter Filter by entity * @param int $entityfilter Filter by entity
* @param string $filters Filter on other fields
* @return int <0 if KO, Id of code if OK * @return int <0 if KO, Id of code if OK
* @see $langs->getLabelFromKey * @see $langs->getLabelFromKey
*/ */
function dol_getIdFromCode($db, $key, $tablename, $fieldkey = 'code', $fieldid = 'id', $entityfilter = 0) function dol_getIdFromCode($db, $key, $tablename, $fieldkey = 'code', $fieldid = 'id', $entityfilter = 0, $filters = array())
{ {
global $cache_codes; global $cache_codes;
@@ -8529,6 +8530,9 @@ function dol_getIdFromCode($db, $key, $tablename, $fieldkey = 'code', $fieldid =
if (!empty($entityfilter)) { if (!empty($entityfilter)) {
$sql .= " AND entity IN (".getEntity($tablename).")"; $sql .= " AND entity IN (".getEntity($tablename).")";
} }
if ($filters) {
$sql .= $filters;
}
$resql = $db->query($sql); $resql = $db->query($sql);
if ($resql) { if ($resql) {

View File

@@ -57,4 +57,4 @@ ALTER TABLE llx_facture_fourn ADD COLUMN close_missing_amount double(24, 8) afte
ALTER TABLE llx_adherent_type ADD COLUMN caneditamount integer DEFAULT 0 AFTER amount; ALTER TABLE llx_adherent_type ADD COLUMN caneditamount integer DEFAULT 0 AFTER amount;
ALTER TABLE llx_product ADD COLUMN fk_default_workstation integer DEFAULT NULL; ALTER TABLE llx_product ADD COLUMN fk_default_workstation integer DEFAULT NULL;
ALTER TABLE llx_bom_bomline ADD COLUMN duration_unit varchar(6) DEFAULT NULL; ALTER TABLE llx_bom_bomline ADD COLUMN fk_unit integer DEFAULT NULL;

View File

@@ -25,7 +25,7 @@ CREATE TABLE llx_bom_bomline(
qty_frozen smallint DEFAULT 0, qty_frozen smallint DEFAULT 0,
disable_stock_change smallint DEFAULT 0, disable_stock_change smallint DEFAULT 0,
efficiency double(24,8) NOT NULL DEFAULT 1, efficiency double(24,8) NOT NULL DEFAULT 1,
duration_unit varchar(6) NULL, fk_unit integer NULL,
position integer NOT NULL DEFAULT 0 position integer NOT NULL DEFAULT 0
-- END MODULEBUILDER FIELDS -- END MODULEBUILDER FIELDS
) ENGINE=innodb; ) ENGINE=innodb;