Merge pull request #22020 from atm-gauthier/FIX/check_if_allowed_to_add_bom_as_bomline

FIX : Recursively retrieves all parent bom in the tree that leads to …
This commit is contained in:
Laurent Destailleur 2022-09-07 14:29:37 +02:00 committed by GitHub
commit 02046b1f87
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 44 additions and 0 deletions

View File

@ -180,6 +180,16 @@ if (empty($reshook)) {
$error++;
}
// We check if we're allowed to add this bom
$TParentBom=array();
$object->getParentBomTreeRecursive($TParentBom);
if ($bom_child_id > 0 && !empty($TParentBom) && in_array($bom_child_id, $TParentBom)) {
$n_child = new BOM($db);
$n_child->fetch($bom_child_id);
setEventMessages($langs->transnoentities('BomCantAddChildBom', $n_child->getNomUrl(1), $object->getNomUrl(1)), null, 'errors');
$error++;
}
if (!$error) {
$bomline = new BOMLine($db);
$bomline->fk_bom = $id;

View File

@ -1147,6 +1147,38 @@ class BOM extends CommonObject
}
}
}
/**
* Recursively retrieves all parent bom in the tree that leads to the $bom_id bom
*
* @param array $TParentBom We put all found parent bom in $TParentBom
* @param int $bom_id ID of bom from which we want to get parent bom ids
* @param int $level Protection against infinite loop
* @return void
*/
public function getParentBomTreeRecursive(&$TParentBom, $bom_id = '', $level = 1)
{
// Protection against infinite loop
if ($level > 1000) {
return;
}
if (empty($bom_id)) $bom_id=$this->id;
$sql = 'SELECT l.fk_bom, b.label
FROM '.MAIN_DB_PREFIX.'bom_bomline l
INNER JOIN '.MAIN_DB_PREFIX.$this->table_element.' b ON b.rowid = l.fk_bom
WHERE fk_bom_child = '.((int) $bom_id);
$resql = $this->db->query($sql);
if (!empty($resql)) {
while ($res = $this->db->fetch_object($resql)) {
$TParentBom[$res->fk_bom] = $res->fk_bom;
$this->getParentBomTreeRecursive($TParentBom, $res->fk_bom, $level+1);
}
}
}
}

View File

@ -112,3 +112,4 @@ MOAndLines=Manufacturing Orders and lines
MoChildGenerate=Generate Child Mo
ParentMo=MO Parent
MOChild=MO Child
BomCantAddChildBom=The nomenclature %s is already present in the tree leading to the nomenclature %s

View File

@ -112,3 +112,4 @@ MOAndLines=Ordres de fabrication et lignes
MoChildGenerate=Generate Child Mo
ParentMo=MO Parent
MOChild=MO Child
BomCantAddChildBom=La nomenclature %s est déjà présente dans l'arborescence qui mène à la nomenclature %s