From c64ba09fca85cd17d18f665b6326fba2a8b07ac9 Mon Sep 17 00:00:00 2001 From: x Date: Fri, 21 Mar 2025 16:39:14 +0100 Subject: [PATCH 1/2] new import lot --- htdocs/core/modules/modStock.class.php | 59 ++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/htdocs/core/modules/modStock.class.php b/htdocs/core/modules/modStock.class.php index 34365f2d71f29..a9c805bd33bf3 100644 --- a/htdocs/core/modules/modStock.class.php +++ b/htdocs/core/modules/modStock.class.php @@ -529,6 +529,65 @@ public function __construct($db) $this->import_run_sql_after_array[$r] = array( // Because we may change data that are denormalized, we must update dernormalized data after. 'UPDATE '.MAIN_DB_PREFIX.'product as p SET stock = (SELECT SUM(ps.reel) FROM '.MAIN_DB_PREFIX.'product_stock ps WHERE ps.fk_product = p.rowid);' ); + + // Import stocks avec numéro de lot/série + $r++; + $this->import_code[$r] = $this->rights_class.'_'.$r; + $this->import_label[$r] = "Stocks avec lots"; // Translation key + $this->import_icon[$r] = "stock"; + $this->import_entities_array[$r] = array(); + $this->import_tables_array[$r] = array( + 'ps' => MAIN_DB_PREFIX.'product_stock', + 'pb' => MAIN_DB_PREFIX.'product_batch' + ); + + $this->import_fields_array[$r] = array( + 'ps.fk_product' => "Product*", + 'ps.fk_entrepot' => "Warehouse*", + 'pb.batch' => "Batch*", + 'pb.qty' => "Stock*" + ); + + $this->import_convertvalue_array[$r] = array( + 'ps.fk_product' => array('rule' => 'fetchidfromref', 'classfile' => '/product/class/product.class.php', 'class' => 'Product', 'method' => 'fetch', 'element' => 'product'), + 'ps.fk_entrepot' => array('rule' => 'fetchidfromref', 'classfile' => '/product/stock/class/entrepot.class.php', 'class' => 'Entrepot', 'method' => 'fetch', 'element' => 'ref'), + 'pb.batch' => array('rule' => 'fetchidfromref', 'classfile' => '/product/class/productbatch.class.php', 'class' => 'Productbatch', 'method' => 'fetch', 'element' => 'batch') + ); + + $this->import_examplevalues_array[$r] = array( + 'ps.fk_product' => "id or ref of product", + 'ps.fk_entrepot' => "id or ref of warehouse", + 'pb.batch' => "batch number", + 'pb.qty' => "10" + ); + + $this->import_updatekeys_array[$r] = array( + 'ps.fk_product' => 'Product', + 'ps.fk_entrepot' => "Warehouse", + 'pb.batch' => "Batch" + ); + +// Mise à jour des stocks et des lots + $this->import_run_sql_after_array[$r] = array( + // Mise à jour du stock global + 'INSERT INTO '.MAIN_DB_PREFIX.'product_stock (fk_product, fk_entrepot, reel) + VALUES (:fk_product, :fk_entrepot, :qty) + ON DUPLICATE KEY UPDATE reel = reel + VALUES(reel);', + + // Mise à jour des lots + 'INSERT INTO '.MAIN_DB_PREFIX.'product_batch (fk_product_stock, batch, qty) + VALUES ( + (SELECT rowid FROM '.MAIN_DB_PREFIX.'product_stock WHERE fk_product = :fk_product AND fk_entrepot = :fk_entrepot), + :batch, + :qty + ) + ON DUPLICATE KEY UPDATE qty = qty + VALUES(qty);', + + // Mise à jour du stock total du produit + 'UPDATE '.MAIN_DB_PREFIX.'product as p + SET stock = (SELECT SUM(ps.reel) FROM '.MAIN_DB_PREFIX.'product_stock ps WHERE ps.fk_product = p.rowid);' + ); + } From 85b964f06ad19abd448466a8dc988c8c5324458b Mon Sep 17 00:00:00 2001 From: x Date: Wed, 26 Mar 2025 10:40:01 +0100 Subject: [PATCH 2/2] test imort --- .../modules/import/import_csv.modules.php | 2 +- htdocs/core/modules/modStock.class.php | 43 ++++++------------- htdocs/imports/import.php | 4 +- htdocs/product/class/product.class.php | 1 - 4 files changed, 15 insertions(+), 35 deletions(-) diff --git a/htdocs/core/modules/import/import_csv.modules.php b/htdocs/core/modules/import/import_csv.modules.php index 2e9e4124c7ae3..cd683c04cea9f 100644 --- a/htdocs/core/modules/import/import_csv.modules.php +++ b/htdocs/core/modules/import/import_csv.modules.php @@ -1034,7 +1034,6 @@ public function import_insert($arrayrecord, $array_match_file_to_database, $obji } } } - // Update not done, we do insert if (!$error && !$updatedone) { // We db escape social network field because he isn't in field creation @@ -1051,6 +1050,7 @@ public function import_insert($arrayrecord, $array_match_file_to_database, $obji $sqlstart .= ", entity"; $sqlend .= ", ".$conf->entity; } + if (!empty($objimport->array_import_tables_creator[0][$alias])) { $sqlstart .= ", ".$objimport->array_import_tables_creator[0][$alias]; $sqlend .= ", ".$user->id; diff --git a/htdocs/core/modules/modStock.class.php b/htdocs/core/modules/modStock.class.php index a9c805bd33bf3..6b5310650ca4f 100644 --- a/htdocs/core/modules/modStock.class.php +++ b/htdocs/core/modules/modStock.class.php @@ -530,64 +530,45 @@ public function __construct($db) 'UPDATE '.MAIN_DB_PREFIX.'product as p SET stock = (SELECT SUM(ps.reel) FROM '.MAIN_DB_PREFIX.'product_stock ps WHERE ps.fk_product = p.rowid);' ); - // Import stocks avec numéro de lot/série + // Import des stocks avec numéro de lot/série $r++; $this->import_code[$r] = $this->rights_class.'_'.$r; - $this->import_label[$r] = "Stocks avec lots"; // Translation key + $this->import_label[$r] = "Stocks Sérialisés"; // Translation key $this->import_icon[$r] = "stock"; $this->import_entities_array[$r] = array(); - $this->import_tables_array[$r] = array( - 'ps' => MAIN_DB_PREFIX.'product_stock', - 'pb' => MAIN_DB_PREFIX.'product_batch' - ); - + $this->import_tables_array[$r] = array('pb' => MAIN_DB_PREFIX.'product_batch', 'pl' => MAIN_DB_PREFIX.'product_lot', 'ps' => MAIN_DB_PREFIX.'product_stock'); $this->import_fields_array[$r] = array( 'ps.fk_product' => "Product*", 'ps.fk_entrepot' => "Warehouse*", - 'pb.batch' => "Batch*", - 'pb.qty' => "Stock*" + 'ps.reel' => "Stock*", + 'pl.batch' => "Batch Number" ); $this->import_convertvalue_array[$r] = array( 'ps.fk_product' => array('rule' => 'fetchidfromref', 'classfile' => '/product/class/product.class.php', 'class' => 'Product', 'method' => 'fetch', 'element' => 'product'), 'ps.fk_entrepot' => array('rule' => 'fetchidfromref', 'classfile' => '/product/stock/class/entrepot.class.php', 'class' => 'Entrepot', 'method' => 'fetch', 'element' => 'ref'), - 'pb.batch' => array('rule' => 'fetchidfromref', 'classfile' => '/product/class/productbatch.class.php', 'class' => 'Productbatch', 'method' => 'fetch', 'element' => 'batch') + 'pl.batch' => array('rule' => 'noimport') ); $this->import_examplevalues_array[$r] = array( 'ps.fk_product' => "id or ref of product", 'ps.fk_entrepot' => "id or ref of warehouse", - 'pb.batch' => "batch number", - 'pb.qty' => "10" + 'ps.reel' => "10", + 'pl.batch' => "LOT12345" ); $this->import_updatekeys_array[$r] = array( 'ps.fk_product' => 'Product', 'ps.fk_entrepot' => "Warehouse", - 'pb.batch' => "Batch" + 'pl.batch' => "Batch Number" ); -// Mise à jour des stocks et des lots $this->import_run_sql_after_array[$r] = array( - // Mise à jour du stock global - 'INSERT INTO '.MAIN_DB_PREFIX.'product_stock (fk_product, fk_entrepot, reel) - VALUES (:fk_product, :fk_entrepot, :qty) - ON DUPLICATE KEY UPDATE reel = reel + VALUES(reel);', - - // Mise à jour des lots - 'INSERT INTO '.MAIN_DB_PREFIX.'product_batch (fk_product_stock, batch, qty) - VALUES ( - (SELECT rowid FROM '.MAIN_DB_PREFIX.'product_stock WHERE fk_product = :fk_product AND fk_entrepot = :fk_entrepot), - :batch, - :qty - ) - ON DUPLICATE KEY UPDATE qty = qty + VALUES(qty);', - - // Mise à jour du stock total du produit - 'UPDATE '.MAIN_DB_PREFIX.'product as p - SET stock = (SELECT SUM(ps.reel) FROM '.MAIN_DB_PREFIX.'product_stock ps WHERE ps.fk_product = p.rowid);' + // Mettre à jour le stock total du produit + 'UPDATE '.MAIN_DB_PREFIX.'product as p SET stock = (SELECT SUM(ps.reel) FROM '.MAIN_DB_PREFIX.'product_stock ps WHERE ps.fk_product = p.rowid);', ); + } diff --git a/htdocs/imports/import.php b/htdocs/imports/import.php index cd38df7e97d3f..ff2457d71cce3 100644 --- a/htdocs/imports/import.php +++ b/htdocs/imports/import.php @@ -1914,7 +1914,6 @@ 'lib' => implode("
", array_merge([$hookmanager->error], $hookmanager->errors)) ]; } - if (empty($reshook)) { // Run import $result = $obj->import_insert($arrayrecord, $array_match_file_to_database, $objimport, count($fieldssource), $importid, $updatekeys); @@ -1951,7 +1950,9 @@ $i = 0; foreach ($objimport->array_import_run_sql_after[0] as $sqlafterimport) { $i++; + print $sqlafterimport . '
'; $resqlafterimport = $db->query($sqlafterimport); + var_dump($resqlafterimport); if (!$resqlafterimport) { $arrayoferrors['none'][] = array('lib' => $langs->trans("Error running final request: ".$sqlafterimport)); $error++; @@ -1979,7 +1980,6 @@ } // Show Errors - //var_dump($arrayoferrors); if (count($arrayoferrors)) { print img_error().' '.$langs->trans("ErrorsOnXLines", count($arrayoferrors)).'
'; print '
'; diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 19b3a2681c77e..9317e4ae4e18c 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -3012,7 +3012,6 @@ public function fetch($id = 0, $ref = '', $ref_ext = '', $barcode = '', $ignore_ $sql .= ", p.stock"; } } - $resql = $this->db->query($sql); if ($resql) { unset($this->oldcopy);