From 9e2ee5bf57d4b187ceea53ff874db63631a269d2 Mon Sep 17 00:00:00 2001 From: Antonin MARCHAL Date: Mon, 26 Apr 2021 19:29:56 +0200 Subject: [PATCH] add(pmp) PMP per entity --- htdocs/product/class/product.class.php | 53 ++++++++++++++++++- htdocs/product/stock/card.php | 25 ++++++++- htdocs/product/stock/class/entrepot.class.php | 25 ++++++++- 3 files changed, 100 insertions(+), 3 deletions(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 6ed0b4266a8..65a73814c8e 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -2181,12 +2181,52 @@ 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.batch_mask, p.fk_unit,"; + //For MultiCompany PMP per entity + $separatedEntityPMP = false; + if (!empty($conf->global->MULTICOMPANY_PRODUCT_SHARING_ENABLED) && !empty($conf->global->MULTICOMPANY_PMP_PER_ENTITY_ENABLED)) { + $checkPMPPerEntity = $this->db->query("SELECT pmp FROM " . MAIN_DB_PREFIX . "entity_product_pmp WHERE fk_product = ".((int) $id)." AND entity = ".(int) $conf->entity); + if($this->db->num_rows($checkPMPPerEntity)>0){ + $separatedEntityPMP = true; + } + } + + //For MultiCompany Stocks Sharings stock_reel includes only stocks shared with this entity + $separatedStock = false; + if (!empty($conf->global->MULTICOMPANY_STOCK_SHARING_ENABLED)){ + global $mc; + $separatedStock = true; + $visibleWarehousesEntities = $conf->entity; + if(isset($mc->sharings['stock']) && !empty($mc->sharings['stock'])){ + $visibleWarehousesEntities .= "," . implode(",",$mc->sharings['stock']); + } + } + if($separatedStock){ + $sql .= " SUM(sp.reel) as stock,"; + } + else{ + $sql .= " p.stock,"; + } + + if ($separatedEntityPMP){ + $sql .= " ppe.pmp, p.datec, p.tms, p.import_key, p.entity, p.desiredstock, p.tobatch, p.batch_mask, p.fk_unit,"; + } + else{ + $sql .= " 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)) { $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "product_perentity as pa ON pa.fk_product = p.rowid AND pa.entity = " . ((int) $conf->entity); } + + if ($separatedEntityPMP) { + $sql .= " INNER JOIN " . MAIN_DB_PREFIX . "entity_product_pmp as ppe ON ppe.fk_product = p.rowid"; + } + + if($separatedStock){ + $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "product_stock as sp ON sp.fk_product = p.rowid"; + } + if ($id) { $sql .= " WHERE p.rowid = ".((int) $id); } else { @@ -2200,6 +2240,17 @@ class Product extends CommonObject } } + if ($separatedEntityPMP) { + $sql .= " AND ppe.entity = " . (int) $conf->entity; + } + + if($separatedStock){ + $sql .= " AND sp.fk_entrepot IN ( + SELECT rowid + FROM ".MAIN_DB_PREFIX."entrepot WHERE entity IN (" . $visibleWarehousesEntities ."))"; + } + + $resql = $this->db->query($sql); if ($resql) { unset($this->oldcopy); diff --git a/htdocs/product/stock/card.php b/htdocs/product/stock/card.php index 0a77a39a0df..25cea1621c7 100644 --- a/htdocs/product/stock/card.php +++ b/htdocs/product/stock/card.php @@ -596,15 +596,38 @@ if ($action == 'create') { $totalunit = 0; $totalvalue = $totalvaluesell = 0; - $sql = "SELECT p.rowid as rowid, p.ref, p.label as produit, p.tobatch, p.fk_product_type as type, p.pmp as ppmp, p.price, p.price_ttc, p.entity,"; + //For MultiCompany PMP per entity + $separatedPMP = false; + if (!empty($conf->global->MULTICOMPANY_PRODUCT_SHARING_ENABLED) && !empty($conf->global->MULTICOMPANY_PMP_PER_ENTITY_ENABLED)) { + $separatedPMP = true; + } + + $sql = "SELECT p.rowid as rowid, p.ref, p.label as produit, p.tobatch, p.fk_product_type as type, p.price, p.price_ttc, p.entity,"; + if ($separatedPMP) { + $sql .= " ppe.pmp as ppmp,"; + } + else{ + $sql .= " p.pmp as ppmp,"; + } + $sql .= " ps.reel as value"; if (!empty($conf->global->PRODUCT_USE_UNITS)) { $sql .= ",fk_unit"; } $sql .= " FROM ".MAIN_DB_PREFIX."product_stock as ps, ".MAIN_DB_PREFIX."product as p"; + + if ($separatedPMP) { + $sql .= ", ".MAIN_DB_PREFIX."entity_product_pmp as ppe"; + } + $sql .= " WHERE ps.fk_product = p.rowid"; $sql .= " AND ps.reel <> 0"; // We do not show if stock is 0 (no product in this warehouse) $sql .= " AND ps.fk_entrepot = ".$object->id; + + if ($separatedPMP) { + $sql .= " AND ppe.fk_product = p.rowid AND ppe.entity = ". (int) $conf->entity; + } + $sql .= $db->order($sortfield, $sortorder); dol_syslog('List products', LOG_DEBUG); diff --git a/htdocs/product/stock/class/entrepot.class.php b/htdocs/product/stock/class/entrepot.class.php index 8bd250bc76e..53799617420 100644 --- a/htdocs/product/stock/class/entrepot.class.php +++ b/htdocs/product/stock/class/entrepot.class.php @@ -610,13 +610,36 @@ class Entrepot extends CommonObject */ public function nb_products() { + global $conf; // phpcs:enable $ret = array(); - $sql = "SELECT sum(ps.reel) as nb, sum(ps.reel * p.pmp) as value"; + //For MultiCompany PMP per entity + $separatedPMP = false; + if (!empty($conf->global->MULTICOMPANY_PRODUCT_SHARING_ENABLED) && !empty($conf->global->MULTICOMPANY_PMP_PER_ENTITY_ENABLED)) { + $separatedPMP = true; + } + + if ($separatedPMP) { + $sql = "SELECT sum(ps.reel) as nb, sum(ps.reel * ppe.pmp) as value"; + } + else{ + $sql = "SELECT sum(ps.reel) as nb, sum(ps.reel * p.pmp) as value"; + } $sql .= " FROM ".MAIN_DB_PREFIX."product_stock as ps"; + $sql .= ", ".MAIN_DB_PREFIX."product as p"; + + if ($separatedPMP) { + $sql .= ", ".MAIN_DB_PREFIX."entity_product_pmp as ppe"; + } + $sql .= " WHERE ps.fk_entrepot = ".$this->id; + + if ($separatedPMP) { + $sql .= " AND ppe.fk_product = p.rowid AND ppe.entity = ". (int) $conf->entity; + } + $sql .= " AND ps.fk_product = p.rowid"; //print $sql;