FIX calculateCosts of BOM must not be included into fetch
This commit is contained in:
parent
b97ad33911
commit
45c5abea69
@ -71,6 +71,9 @@ if (empty($action) && empty($id) && empty($ref)) {
|
|||||||
|
|
||||||
// Load object
|
// Load object
|
||||||
include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once.
|
include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once.
|
||||||
|
if ($object->id > 0) {
|
||||||
|
$object->calculateCosts();
|
||||||
|
}
|
||||||
|
|
||||||
// Security check - Protection if external user
|
// Security check - Protection if external user
|
||||||
//if ($user->socid > 0) accessforbidden();
|
//if ($user->socid > 0) accessforbidden();
|
||||||
@ -311,8 +314,6 @@ if (($id || $ref) && $action == 'edit') {
|
|||||||
|
|
||||||
// Part to show record
|
// Part to show record
|
||||||
if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'create'))) {
|
if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'create'))) {
|
||||||
$res = $object->fetch_optionals();
|
|
||||||
|
|
||||||
$head = bomPrepareHead($object);
|
$head = bomPrepareHead($object);
|
||||||
print dol_get_fiche_head($head, 'card', $langs->trans("BillOfMaterials"), -1, 'bom');
|
print dol_get_fiche_head($head, 'card', $langs->trans("BillOfMaterials"), -1, 'bom');
|
||||||
|
|
||||||
|
|||||||
@ -381,7 +381,7 @@ class BOM extends CommonObject
|
|||||||
if ($result > 0 && !empty($this->table_element_line)) {
|
if ($result > 0 && !empty($this->table_element_line)) {
|
||||||
$this->fetchLines();
|
$this->fetchLines();
|
||||||
}
|
}
|
||||||
$this->calculateCosts();
|
//$this->calculateCosts(); // This consume a high number of subrequests. Do not call it into fetch but when you need it.
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
@ -1035,7 +1035,8 @@ class BOM extends CommonObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BOM costs calculation based on cost_price or pmp of each BOM line
|
* BOM costs calculation based on cost_price or pmp of each BOM line.
|
||||||
|
* Set the property ->total_cost and ->unit_cost of BOM.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
@ -1045,30 +1046,36 @@ class BOM extends CommonObject
|
|||||||
$this->unit_cost = 0;
|
$this->unit_cost = 0;
|
||||||
$this->total_cost = 0;
|
$this->total_cost = 0;
|
||||||
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php';
|
if (is_array($this->lines) && count($this->lines)) {
|
||||||
$productFournisseur = new ProductFournisseur($this->db);
|
require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php';
|
||||||
|
$productFournisseur = new ProductFournisseur($this->db);
|
||||||
foreach ($this->lines as &$line) {
|
|
||||||
$tmpproduct = new Product($this->db);
|
$tmpproduct = new Product($this->db);
|
||||||
$result = $tmpproduct->fetch($line->fk_product);
|
|
||||||
if ($result < 0) {
|
foreach ($this->lines as &$line) {
|
||||||
$this->error = $tmpproduct->error;
|
$tmpproduct->cost_price = 0;
|
||||||
return -1;
|
$tmpproduct->pmp = 0;
|
||||||
}
|
|
||||||
$line->unit_cost = price2num((!empty($tmpproduct->cost_price)) ? $tmpproduct->cost_price : $tmpproduct->pmp);
|
$result = $tmpproduct->fetch($line->fk_product, '', '', '', 0, 1, 1);
|
||||||
if (empty($line->unit_cost)) {
|
if ($result < 0) {
|
||||||
if ($productFournisseur->find_min_price_product_fournisseur($line->fk_product) > 0) {
|
$this->error = $tmpproduct->error;
|
||||||
$line->unit_cost = $productFournisseur->fourn_unitprice;
|
return -1;
|
||||||
}
|
}
|
||||||
|
$line->unit_cost = price2num((!empty($tmpproduct->cost_price)) ? $tmpproduct->cost_price : $tmpproduct->pmp);
|
||||||
|
if (empty($line->unit_cost)) {
|
||||||
|
if ($productFournisseur->find_min_price_product_fournisseur($line->fk_product) > 0) {
|
||||||
|
$line->unit_cost = $productFournisseur->fourn_unitprice;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$line->total_cost = price2num($line->qty * $line->unit_cost, 'MT');
|
||||||
|
|
||||||
|
$this->total_cost += $line->total_cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
$line->total_cost = price2num($line->qty * $line->unit_cost, 'MT');
|
$this->total_cost = price2num($this->total_cost, 'MT');
|
||||||
$this->total_cost += $line->total_cost;
|
if ($this->qty) {
|
||||||
}
|
$this->unit_cost = price2num($this->total_cost / $this->qty, 'MU');
|
||||||
|
}
|
||||||
$this->total_cost = price2num($this->total_cost, 'MT');
|
|
||||||
if ($this->qty) {
|
|
||||||
$this->unit_cost = price2num($this->total_cost / $this->qty, 'MU');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -84,7 +84,7 @@ if (!$sortorder) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Initialize array of search criterias
|
// Initialize array of search criterias
|
||||||
$search_all = GETPOST('search_all', 'alphanohtml') ? GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml');
|
$search_all = GETPOST('search_all', 'alphanohtml');
|
||||||
$search = array();
|
$search = array();
|
||||||
foreach ($object->fields as $key => $val) {
|
foreach ($object->fields as $key => $val) {
|
||||||
if (GETPOST('search_'.$key, 'alpha') !== '') {
|
if (GETPOST('search_'.$key, 'alpha') !== '') {
|
||||||
@ -270,8 +270,7 @@ $sql .= $hookmanager->resPrint;
|
|||||||
|
|
||||||
/* If a group by is required
|
/* If a group by is required
|
||||||
$sql.= " GROUP BY ";
|
$sql.= " GROUP BY ";
|
||||||
foreach($object->fields as $key => $val)
|
foreach($object->fields as $key => $val) {
|
||||||
{
|
|
||||||
$sql.='t.'.$key.', ';
|
$sql.='t.'.$key.', ';
|
||||||
}
|
}
|
||||||
// Add fields from extrafields
|
// Add fields from extrafields
|
||||||
@ -343,9 +342,11 @@ if ($limit > 0 && $limit != $conf->liste_limit) {
|
|||||||
foreach ($search as $key => $val) {
|
foreach ($search as $key => $val) {
|
||||||
if (is_array($search[$key]) && count($search[$key])) {
|
if (is_array($search[$key]) && count($search[$key])) {
|
||||||
foreach ($search[$key] as $skey) {
|
foreach ($search[$key] as $skey) {
|
||||||
$param .= '&search_'.$key.'[]='.urlencode($skey);
|
if ($skey != '') {
|
||||||
|
$param .= '&search_'.$key.'[]='.urlencode($skey);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} elseif ($search[$key] != '') {
|
||||||
$param .= '&search_'.$key.'='.urlencode($search[$key]);
|
$param .= '&search_'.$key.'='.urlencode($search[$key]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user