WIP
This commit is contained in:
parent
5d18cfaef8
commit
55f0dada34
@ -34,6 +34,8 @@ require_once DOL_DOCUMENT_ROOT.'/mrp/lib/mrp.lib.php';
|
|||||||
// Load translation files required by the page
|
// Load translation files required by the page
|
||||||
$langs->loadLangs(array("mrp", "other"));
|
$langs->loadLangs(array("mrp", "other"));
|
||||||
|
|
||||||
|
global $filtertype;
|
||||||
|
|
||||||
// Get parameters
|
// Get parameters
|
||||||
$id = GETPOST('id', 'int');
|
$id = GETPOST('id', 'int');
|
||||||
$ref = GETPOST('ref', 'alpha');
|
$ref = GETPOST('ref', 'alpha');
|
||||||
@ -541,50 +543,114 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
|||||||
* Lines
|
* Lines
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
if (!empty($object->table_element_line)) {
|
if (!empty($object->table_element_line)) {
|
||||||
print ' <form name="addproduct" id="addproduct" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.(($action != 'editline') ? '' : '').'" method="POST">
|
|
||||||
<input type="hidden" name="token" value="' . newToken().'">
|
print load_fiche_titre($langs->trans('BOMProductsList'), '', 'product');
|
||||||
<input type="hidden" name="action" value="' . (($action != 'editline') ? 'addline' : 'updateline').'">
|
|
||||||
|
$res = $object->fetchLinesbytype(0);
|
||||||
|
$object->calculateCosts();
|
||||||
|
|
||||||
|
if($res > 0) {
|
||||||
|
|
||||||
|
print ' <form name="addproduct" id="addproduct" action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . (($action != 'editline') ? '' : '') . '" method="POST">
|
||||||
|
<input type="hidden" name="token" value="' . newToken() . '">
|
||||||
|
<input type="hidden" name="action" value="' . (($action != 'editline') ? 'addline' : 'updateline') . '">
|
||||||
<input type="hidden" name="mode" value="">
|
<input type="hidden" name="mode" value="">
|
||||||
<input type="hidden" name="page_y" value="">
|
<input type="hidden" name="page_y" value="">
|
||||||
<input type="hidden" name="id" value="' . $object->id.'">
|
<input type="hidden" name="id" value="' . $object->id . '">
|
||||||
';
|
';
|
||||||
|
|
||||||
if (!empty($conf->use_javascript_ajax) && $object->status == 0) {
|
if (!empty($conf->use_javascript_ajax) && $object->status == 0) {
|
||||||
include DOL_DOCUMENT_ROOT.'/core/tpl/ajaxrow.tpl.php';
|
include DOL_DOCUMENT_ROOT . '/core/tpl/ajaxrow.tpl.php';
|
||||||
}
|
|
||||||
|
|
||||||
print '<div class="div-table-responsive-no-min">';
|
|
||||||
if (!empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) {
|
|
||||||
print '<table id="tablelines" class="noborder noshadow" width="100%">';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($object->lines)) {
|
|
||||||
$object->printObjectLines($action, $mysoc, null, GETPOST('lineid', 'int'), 1, '/bom/tpl');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Form to add new line
|
|
||||||
if ($object->status == 0 && $permissiontoadd && $action != 'selectlines') {
|
|
||||||
if ($action != 'editline') {
|
|
||||||
// Add products/services form
|
|
||||||
|
|
||||||
|
|
||||||
$parameters = array();
|
|
||||||
$reshook = $hookmanager->executeHooks('formAddObjectLine', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
|
||||||
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
|
||||||
if (empty($reshook))
|
|
||||||
$object->formAddObjectLine(1, $mysoc, null, '/bom/tpl');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print '<div class="div-table-responsive-no-min">';
|
||||||
|
if (!empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) {
|
||||||
|
print '<table id="tablelines" class="noborder noshadow" width="100%">';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($object->lines)) {
|
||||||
|
$object->printObjectLines($action, $mysoc, null, GETPOST('lineid', 'int'), 1, '/bom/tpl');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Form to add new line
|
||||||
|
if ($object->status == 0 && $permissiontoadd && $action != 'selectlines') {
|
||||||
|
if ($action != 'editline') {
|
||||||
|
// Add products/services form
|
||||||
|
|
||||||
|
|
||||||
|
$parameters = array();
|
||||||
|
$reshook = $hookmanager->executeHooks('formAddObjectLine', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||||
|
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
||||||
|
if (empty($reshook))
|
||||||
|
$object->formAddObjectLine(1, $mysoc, null, '/bom/tpl');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) {
|
||||||
|
print '</table>';
|
||||||
|
}
|
||||||
|
print '</div>';
|
||||||
|
|
||||||
|
print "</form>\n";
|
||||||
|
|
||||||
|
mrpCollapseBomManagement();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) {
|
$filtertype = 1;
|
||||||
print '</table>';
|
|
||||||
|
|
||||||
|
$res = $object->fetchLinesbytype(1);
|
||||||
|
$object->calculateCosts();
|
||||||
|
|
||||||
|
if($res > 0) {
|
||||||
|
print load_fiche_titre($langs->trans('BOMServicesList'), '', 'service');
|
||||||
|
|
||||||
|
|
||||||
|
print ' <form name="addproduct" id="addproduct" action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . (($action != 'editline') ? '' : '') . '" method="POST">
|
||||||
|
<input type="hidden" name="token" value="' . newToken() . '">
|
||||||
|
<input type="hidden" name="action" value="' . (($action != 'editline') ? 'addline' : 'updateline') . '">
|
||||||
|
<input type="hidden" name="mode" value="">
|
||||||
|
<input type="hidden" name="page_y" value="">
|
||||||
|
<input type="hidden" name="id" value="' . $object->id . '">
|
||||||
|
';
|
||||||
|
|
||||||
|
if (!empty($conf->use_javascript_ajax) && $object->status == 0) {
|
||||||
|
include DOL_DOCUMENT_ROOT . '/core/tpl/ajaxrow.tpl.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
print '<div class="div-table-responsive-no-min">';
|
||||||
|
if (!empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) {
|
||||||
|
print '<table id="tablelines" class="noborder noshadow" width="100%">';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($object->lines)) {
|
||||||
|
$object->printObjectLines($action, $mysoc, null, GETPOST('lineid', 'int'), 1, '/bom/tpl');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Form to add new line
|
||||||
|
if ($object->status == 0 && $permissiontoadd && $action != 'selectlines') {
|
||||||
|
if ($action != 'editline') {
|
||||||
|
// Add products/services form
|
||||||
|
|
||||||
|
|
||||||
|
$parameters = array();
|
||||||
|
$reshook = $hookmanager->executeHooks('formAddObjectLine', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||||
|
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
||||||
|
if (empty($reshook))
|
||||||
|
$object->formAddObjectLine(1, $mysoc, null, '/bom/tpl');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) {
|
||||||
|
print '</table>';
|
||||||
|
}
|
||||||
|
print '</div>';
|
||||||
}
|
}
|
||||||
print '</div>';
|
|
||||||
|
|
||||||
print "</form>\n";
|
print "</form>\n";
|
||||||
|
|
||||||
mrpCollapseBomManagement();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
// Put here all includes required by your class file
|
// Put here all includes required by your class file
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/workstation/class/workstation.class.php';
|
||||||
//require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
|
//require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
|
||||||
//require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php';
|
//require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php';
|
||||||
|
|
||||||
@ -399,6 +400,56 @@ class BOM extends CommonObject
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load object lines in memory from the database
|
||||||
|
*
|
||||||
|
* @return int <0 if KO, 0 if not found, >0 if OK
|
||||||
|
*/
|
||||||
|
public function fetchLinesbytype($type = 0)
|
||||||
|
{
|
||||||
|
$this->lines = array();
|
||||||
|
|
||||||
|
$objectlineclassname = get_class($this).'Line';
|
||||||
|
if (!class_exists($objectlineclassname)) {
|
||||||
|
$this->error = 'Error, class '.$objectlineclassname.' not found during call of fetchLinesCommon';
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$objectline = new $objectlineclassname($this->db);
|
||||||
|
|
||||||
|
$sql = "SELECT ".$objectline->getFieldList('l');
|
||||||
|
$sql .= " FROM ".$this->db->prefix().$objectline->table_element." as l";
|
||||||
|
$sql .= " LEFT JOIN ".$this->db->prefix()."product as p ON p.rowid = l.fk_product";
|
||||||
|
$sql .= " WHERE l.fk_".$this->db->escape($this->element)." = ".((int) $this->id);
|
||||||
|
$sql .= " AND p.fk_product_type = ". $type;
|
||||||
|
if (isset($objectline->fields['position'])) {
|
||||||
|
$sql .= $this->db->order('position', 'ASC');
|
||||||
|
}
|
||||||
|
|
||||||
|
$resql = $this->db->query($sql);
|
||||||
|
if ($resql) {
|
||||||
|
$num_rows = $this->db->num_rows($resql);
|
||||||
|
$i = 0;
|
||||||
|
while ($i < $num_rows) {
|
||||||
|
$obj = $this->db->fetch_object($resql);
|
||||||
|
if ($obj) {
|
||||||
|
$newline = new $objectlineclassname($this->db);
|
||||||
|
$newline->setVarsFromFetchObj($obj);
|
||||||
|
|
||||||
|
$this->lines[] = $newline;
|
||||||
|
}
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
$this->error = $this->db->lasterror();
|
||||||
|
$this->errors[] = $this->error;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load list of objects in memory from the database.
|
* Load list of objects in memory from the database.
|
||||||
*
|
*
|
||||||
@ -1044,6 +1095,8 @@ class BOM extends CommonObject
|
|||||||
*/
|
*/
|
||||||
public function calculateCosts()
|
public function calculateCosts()
|
||||||
{
|
{
|
||||||
|
global $conf;
|
||||||
|
|
||||||
include_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
|
include_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
|
||||||
$this->unit_cost = 0;
|
$this->unit_cost = 0;
|
||||||
$this->total_cost = 0;
|
$this->total_cost = 0;
|
||||||
@ -1056,38 +1109,54 @@ class BOM extends CommonObject
|
|||||||
foreach ($this->lines as &$line) {
|
foreach ($this->lines as &$line) {
|
||||||
$tmpproduct->cost_price = 0;
|
$tmpproduct->cost_price = 0;
|
||||||
$tmpproduct->pmp = 0;
|
$tmpproduct->pmp = 0;
|
||||||
|
$result = $tmpproduct->fetch($line->fk_product, '', '', '', 0, 1, 1); // We discard selling price and language loading
|
||||||
|
|
||||||
if (empty($line->fk_bom_child)) {
|
if($tmpproduct->type == $tmpproduct::TYPE_PRODUCT) {
|
||||||
$result = $tmpproduct->fetch($line->fk_product, '', '', '', 0, 1, 1); // We discard selling price and language loading
|
if (empty($line->fk_bom_child)) {
|
||||||
if ($result < 0) {
|
if ($result < 0) {
|
||||||
$this->error = $tmpproduct->error;
|
$this->error = $tmpproduct->error;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
$line->unit_cost = price2num((!empty($tmpproduct->cost_price)) ? $tmpproduct->cost_price : $tmpproduct->pmp);
|
$line->unit_cost = price2num((!empty($tmpproduct->cost_price)) ? $tmpproduct->cost_price : $tmpproduct->pmp);
|
||||||
if (empty($line->unit_cost)) {
|
if (empty($line->unit_cost)) {
|
||||||
if ($productFournisseur->find_min_price_product_fournisseur($line->fk_product) > 0) {
|
if ($productFournisseur->find_min_price_product_fournisseur($line->fk_product) > 0) {
|
||||||
$line->unit_cost = $productFournisseur->fourn_unitprice;
|
$line->unit_cost = $productFournisseur->fourn_unitprice;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$line->total_cost = price2num($line->qty * $line->unit_cost, 'MT');
|
||||||
|
|
||||||
|
$this->total_cost += $line->total_cost;
|
||||||
|
} else {
|
||||||
|
$bom_child = new BOM($this->db);
|
||||||
|
$res = $bom_child->fetch($line->fk_bom_child);
|
||||||
|
if ($res > 0) {
|
||||||
|
$bom_child->calculateCosts();
|
||||||
|
$line->childBom[] = $bom_child;
|
||||||
|
$this->total_cost += $bom_child->total_cost * $line->qty;
|
||||||
|
} else {
|
||||||
|
$this->error = $bom_child->error;
|
||||||
|
return -2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$line->total_cost = price2num($line->qty * $line->unit_cost, 'MT');
|
|
||||||
|
|
||||||
$this->total_cost += $line->total_cost;
|
|
||||||
} else {
|
} else {
|
||||||
$bom_child= new BOM($this->db);
|
if(!($conf->workstation->enabled)) {
|
||||||
$res = $bom_child->fetch($line->fk_bom_child);
|
$line->total_cost = price2num($line->qty * $tmpproduct->cost_price, 'MT');
|
||||||
if ($res>0) {
|
|
||||||
$bom_child->calculateCosts();
|
|
||||||
$line->childBom[] = $bom_child;
|
|
||||||
$this->total_cost += $bom_child->total_cost * $line->qty;
|
|
||||||
} else {
|
} else {
|
||||||
$this->error = $bom_child->error;
|
|
||||||
return -2;
|
if($tmpproduct->fk_default_workstation){
|
||||||
|
$workstation = new Workstation($this->db);
|
||||||
|
$workstation->fetch($tmpproduct->fk_default_workstation);
|
||||||
|
|
||||||
|
$line->total_cost = price2num($line->qty * $workstation->thm_operator_estimated, 'MT');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
$this->total_cost += $line->total_cost;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->total_cost = price2num($this->total_cost, 'MT');
|
$this->total_cost = price2num($this->total_cost, 'MT');
|
||||||
|
|
||||||
if ($this->qty > 0) {
|
if ($this->qty > 0) {
|
||||||
$this->unit_cost = price2num($this->total_cost / $this->qty, 'MU');
|
$this->unit_cost = price2num($this->total_cost / $this->qty, 'MU');
|
||||||
} elseif ($this->qty < 0) {
|
} elseif ($this->qty < 0) {
|
||||||
|
|||||||
@ -36,12 +36,17 @@ if (empty($object) || !is_object($object)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
global $forceall, $forcetoshowtitlelines;
|
global $forceall, $forcetoshowtitlelines, $filtertype;
|
||||||
|
|
||||||
if (empty($forceall)) {
|
if (empty($forceall)) {
|
||||||
$forceall = 0;
|
$forceall = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(empty($filtertype)) $filtertype = 0;
|
||||||
|
if (!empty($object->element) && $object->element == 'contrat' && empty($conf->global->STOCK_SUPPORT_SERVICES)) {
|
||||||
|
$filtertype = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Define colspan for the button 'Add'
|
// Define colspan for the button 'Add'
|
||||||
$colspan = 3; // Columns: total ht + col edit + col delete
|
$colspan = 3; // Columns: total ht + col edit + col delete
|
||||||
@ -53,6 +58,7 @@ $objectline = new BOMLine($this->db);
|
|||||||
print "<!-- BEGIN PHP TEMPLATE objectline_create.tpl.php -->\n";
|
print "<!-- BEGIN PHP TEMPLATE objectline_create.tpl.php -->\n";
|
||||||
|
|
||||||
$nolinesbefore = (count($this->lines) == 0 || $forcetoshowtitlelines);
|
$nolinesbefore = (count($this->lines) == 0 || $forcetoshowtitlelines);
|
||||||
|
|
||||||
if ($nolinesbefore) {
|
if ($nolinesbefore) {
|
||||||
print '<tr class="liste_titre nodrag nodrop">';
|
print '<tr class="liste_titre nodrag nodrop">';
|
||||||
if (!empty($conf->global->MAIN_VIEW_LINE_NUMBER)) {
|
if (!empty($conf->global->MAIN_VIEW_LINE_NUMBER)) {
|
||||||
@ -62,16 +68,25 @@ if ($nolinesbefore) {
|
|||||||
print '<div id="add"></div><span class="hideonsmartphone">'.$langs->trans('AddNewLine').'</span>';
|
print '<div id="add"></div><span class="hideonsmartphone">'.$langs->trans('AddNewLine').'</span>';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print '<td class="linecolqty right">'.$langs->trans('Qty').'</td>';
|
print '<td class="linecolqty right">'.$langs->trans('Qty').'</td>';
|
||||||
if (!empty($conf->global->PRODUCT_USE_UNITS)) {
|
|
||||||
print '<td class="linecoluseunit left">';
|
if($filtertype != 1) {
|
||||||
print '<span id="title_units">';
|
if (!empty($conf->global->PRODUCT_USE_UNITS)) {
|
||||||
print $langs->trans('Unit');
|
print '<td class="linecoluseunit left">';
|
||||||
print '</span></td>';
|
print '<span id="title_units">';
|
||||||
|
print $langs->trans('Unit');
|
||||||
|
print '</span></td>';
|
||||||
|
}
|
||||||
|
print '<td class="linecolqtyfrozen right">' . $form->textwithpicto($langs->trans('QtyFrozen'), $langs->trans("QuantityConsumedInvariable")) . '</td>';
|
||||||
|
print '<td class="linecoldisablestockchange right">' . $form->textwithpicto($langs->trans('DisableStockChange'), $langs->trans('DisableStockChangeHelp')) . '</td>';
|
||||||
|
print '<td class="linecollost right">' . $form->textwithpicto($langs->trans('ManufacturingEfficiency'), $langs->trans('ValueOfMeansLoss')) . '</td>';
|
||||||
}
|
}
|
||||||
print '<td class="linecolqtyfrozen right">'.$form->textwithpicto($langs->trans('QtyFrozen'), $langs->trans("QuantityConsumedInvariable")).'</td>';
|
else {
|
||||||
print '<td class="linecoldisablestockchange right">'.$form->textwithpicto($langs->trans('DisableStockChange'), $langs->trans('DisableStockChangeHelp')).'</td>';
|
print '<td class="linecolunit right">' . $form->textwithpicto($langs->trans('Unit'), '').'</td>';
|
||||||
print '<td class="linecollost right">'.$form->textwithpicto($langs->trans('ManufacturingEfficiency'), $langs->trans('ValueOfMeansLoss')).'</td>';
|
if($conf->workstation->enabled) print '<td class="linecolworkstation right">' . $form->textwithpicto($langs->trans('Workstation'), '') . '</td>';
|
||||||
print '<td class="linecoledit" colspan="'.$colspan.'"> </td>';
|
print '<td class="linecoltotalcost right">' . $form->textwithpicto($langs->trans('TotalCost'), '') . '</td>';
|
||||||
|
}
|
||||||
|
|
||||||
|
print '<td class="linecoledit" colspan="' . $colspan . '"> </td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
}
|
}
|
||||||
print '<tr class="pair nodrag nodrop nohoverpair'.(($nolinesbefore || $object->element == 'contrat') ? '' : ' liste_titre_create').'">';
|
print '<tr class="pair nodrag nodrop nohoverpair'.(($nolinesbefore || $object->element == 'contrat') ? '' : ' liste_titre_create').'">';
|
||||||
@ -88,14 +103,14 @@ print '<td class="bordertop nobottom linecoldescription minwidth500imp">';
|
|||||||
|
|
||||||
// Predefined product/service
|
// Predefined product/service
|
||||||
if (!empty($conf->product->enabled) || !empty($conf->service->enabled)) {
|
if (!empty($conf->product->enabled) || !empty($conf->service->enabled)) {
|
||||||
if (!empty($conf->global->BOM_SUB_BOM)) {
|
if($filtertype == 1){
|
||||||
|
print $langs->trans("Service");
|
||||||
|
}
|
||||||
|
elseif (!empty($conf->global->BOM_SUB_BOM)) {
|
||||||
print $langs->trans("Product");
|
print $langs->trans("Product");
|
||||||
}
|
}
|
||||||
echo '<span class="prod_entry_mode_predef">';
|
echo '<span class="prod_entry_mode_predef">';
|
||||||
$filtertype = 0;
|
|
||||||
if (!empty($object->element) && $object->element == 'contrat' && empty($conf->global->STOCK_SUPPORT_SERVICES)) {
|
|
||||||
$filtertype = -1;
|
|
||||||
}
|
|
||||||
$statustoshow = -1;
|
$statustoshow = -1;
|
||||||
if (!empty($conf->global->ENTREPOT_EXTRA_STATUS)) {
|
if (!empty($conf->global->ENTREPOT_EXTRA_STATUS)) {
|
||||||
// hide products in closed warehouse, but show products for internal transfer
|
// hide products in closed warehouse, but show products for internal transfer
|
||||||
@ -106,7 +121,7 @@ if (!empty($conf->product->enabled) || !empty($conf->service->enabled)) {
|
|||||||
|
|
||||||
echo '</span>';
|
echo '</span>';
|
||||||
}
|
}
|
||||||
if (!empty($conf->global->BOM_SUB_BOM)) {
|
if (!empty($conf->global->BOM_SUB_BOM) && $filtertype!=1) {
|
||||||
print '<br><span class="opacitymedium">'.$langs->trans("or").'</span><br>'.$langs->trans("BOM");
|
print '<br><span class="opacitymedium">'.$langs->trans("or").'</span><br>'.$langs->trans("BOM");
|
||||||
// TODO Add component to select a BOM
|
// TODO Add component to select a BOM
|
||||||
$form->select_bom();
|
$form->select_bom();
|
||||||
@ -118,35 +133,53 @@ $coldisplay++;
|
|||||||
print '<td class="bordertop nobottom linecolqty right"><input type="text" size="2" name="qty" id="qty" class="flat right" value="'.(GETPOSTISSET("qty") ? GETPOST("qty", 'alpha', 2) : 1).'">';
|
print '<td class="bordertop nobottom linecolqty right"><input type="text" size="2" name="qty" id="qty" class="flat right" value="'.(GETPOSTISSET("qty") ? GETPOST("qty", 'alpha', 2) : 1).'">';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
if (!empty($conf->global->PRODUCT_USE_UNITS)) {
|
if($filtertype != 1) {
|
||||||
|
if (!empty($conf->global->PRODUCT_USE_UNITS)) {
|
||||||
|
$coldisplay++;
|
||||||
|
print '<td class="nobottom linecoluseunit left">';
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
|
||||||
$coldisplay++;
|
$coldisplay++;
|
||||||
print '<td class="nobottom linecoluseunit left">';
|
print '<td class="bordertop nobottom linecolqtyfrozen right"><input type="checkbox" name="qty_frozen" id="qty_frozen" class="flat right" value="1"' . (GETPOST("qty_frozen", 'alpha') ? ' checked="checked"' : '') . '>';
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
$coldisplay++;
|
||||||
|
print '<td class="bordertop nobottom linecoldisablestockchange right"><input type="checkbox" name="disable_stock_change" id="disable_stock_change" class="flat right" value="1"' . (GETPOST("disable_stock_change", 'alpha') ? ' checked="checked"' : '') . '">';
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
$coldisplay++;
|
||||||
|
print '<td class="bordertop nobottom nowrap linecollost right">';
|
||||||
|
print '<input type="text" size="2" name="efficiency" id="efficiency" class="flat right" value="' . ((GETPOSTISSET("efficiency") && $action == 'addline') ? GETPOST("efficiency", 'alpha') : 1) . '">';
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
$coldisplay++;
|
||||||
|
print '<td class="bordertop nobottom nowrap linecolcost right">';
|
||||||
|
print ' ';
|
||||||
|
print '</td>';
|
||||||
|
} else {
|
||||||
|
$coldisplay++;
|
||||||
|
print '<td class="bordertop nobottom nowrap linecolcost right">';
|
||||||
|
print ' ';
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
$coldisplay++;
|
||||||
|
print '<td class="bordertop nobottom nowrap linecolcost right">';
|
||||||
|
print ' ';
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
$coldisplay++;
|
||||||
|
print '<td class="bordertop nobottom nowrap linecolcost right">';
|
||||||
|
print ' ';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$coldisplay++;
|
$coldisplay += $colspan;
|
||||||
print '<td class="bordertop nobottom linecolqtyfrozen right"><input type="checkbox" name="qty_frozen" id="qty_frozen" class="flat right" value="1"'.(GETPOST("qty_frozen", 'alpha') ? ' checked="checked"' : '').'>';
|
print '<td class="bordertop nobottom linecoledit center valignmiddle" colspan="' . $colspan . '">';
|
||||||
print '</td>';
|
print '<input type="submit" class="button button-add" name="addline" id="addline" value="' . $langs->trans('Add') . '">';
|
||||||
|
print '</td>';
|
||||||
|
print '</tr>';
|
||||||
|
|
||||||
$coldisplay++;
|
|
||||||
print '<td class="bordertop nobottom linecoldisablestockchange right"><input type="checkbox" name="disable_stock_change" id="disable_stock_change" class="flat right" value="1"'.(GETPOST("disable_stock_change", 'alpha') ? ' checked="checked"' : '').'">';
|
|
||||||
print '</td>';
|
|
||||||
|
|
||||||
$coldisplay++;
|
|
||||||
print '<td class="bordertop nobottom nowrap linecollost right">';
|
|
||||||
print '<input type="text" size="2" name="efficiency" id="efficiency" class="flat right" value="'.((GETPOSTISSET("efficiency") && $action == 'addline') ?GETPOST("efficiency", 'alpha') : 1).'">';
|
|
||||||
print '</td>';
|
|
||||||
|
|
||||||
$coldisplay++;
|
|
||||||
print '<td class="bordertop nobottom nowrap linecolcost right">';
|
|
||||||
print ' ';
|
|
||||||
print '</td>';
|
|
||||||
|
|
||||||
$coldisplay += $colspan;
|
|
||||||
print '<td class="bordertop nobottom linecoledit center valignmiddle" colspan="'.$colspan.'">';
|
|
||||||
print '<input type="submit" class="button button-add" name="addline" id="addline" value="'.$langs->trans('Add').'">';
|
|
||||||
print '</td>';
|
|
||||||
print '</tr>';
|
|
||||||
|
|
||||||
if (is_object($objectline)) {
|
if (is_object($objectline)) {
|
||||||
print $objectline->showOptionals($extrafields, 'edit', array('style'=>$bcnd[$var], 'colspan'=>$coldisplay), '', '', 1, 'line');
|
print $objectline->showOptionals($extrafields, 'edit', array('style'=>$bcnd[$var], 'colspan'=>$coldisplay), '', '', 1, 'line');
|
||||||
|
|||||||
@ -38,12 +38,14 @@ if (empty($object) || !is_object($object)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
global $forceall;
|
global $forceall, $filtertype;
|
||||||
|
|
||||||
if (empty($forceall)) {
|
if (empty($forceall)) {
|
||||||
$forceall = 0;
|
$forceall = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(empty($filtertype)) $filtertype = 0;
|
||||||
|
|
||||||
|
|
||||||
// Define colspan for the button 'Add'
|
// Define colspan for the button 'Add'
|
||||||
$colspan = 3; // Columns: total ht + col edit + col delete
|
$colspan = 3; // Columns: total ht + col edit + col delete
|
||||||
@ -108,28 +110,47 @@ if (($line->info_bits & 2) != 2) {
|
|||||||
}
|
}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
if (!empty($conf->global->PRODUCT_USE_UNITS)) {
|
if($filtertype != 1) {
|
||||||
|
if (!empty($conf->global->PRODUCT_USE_UNITS)) {
|
||||||
|
$coldisplay++;
|
||||||
|
print '<td class="nobottom linecoluseunit left">';
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
|
||||||
$coldisplay++;
|
$coldisplay++;
|
||||||
print '<td class="nobottom linecoluseunit left">';
|
print '<td class="nobottom linecolqtyfrozen right"><input type="checkbox" name="qty_frozen" id="qty_frozen" class="flat right" value="1"' . (GETPOSTISSET("qty_frozen") ? (GETPOST('qty_frozen', 'int') ? ' checked="checked"' : '') : ($line->qty_frozen ? ' checked="checked"' : '')) . '>';
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
$coldisplay++;
|
||||||
|
print '<td class="nobottom linecoldisablestockchange right"><input type="checkbox" name="disable_stock_change" id="disable_stock_change" class="flat right" value="1"' . (GETPOSTISSET('disablestockchange') ? (GETPOST("disable_stock_change", 'int') ? ' checked="checked"' : '') : ($line->disable_stock_change ? ' checked="checked"' : '')) . '">';
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
$coldisplay++;
|
||||||
|
print '<td class="nobottom nowrap linecollost right">';
|
||||||
|
print '<input type="text" size="2" name="efficiency" id="efficiency" class="flat right" value="' . $line->efficiency . '"></td>';
|
||||||
|
|
||||||
|
$coldisplay++;
|
||||||
|
print '<td class="nobottom nowrap linecolcostprice right">';
|
||||||
|
print '</td>';
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$coldisplay++;
|
||||||
|
print '<td class="nobottom nowrap linecolcostprice right">';
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
$coldisplay++;
|
||||||
|
print '<td class="nobottom nowrap linecolcostprice right">';
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
$coldisplay++;
|
||||||
|
print '<td class="nobottom nowrap linecolcostprice right">';
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
$coldisplay++;
|
||||||
|
print '<td class="nobottom nowrap linecolcostprice right">';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$coldisplay++;
|
|
||||||
print '<td class="nobottom linecolqtyfrozen right"><input type="checkbox" name="qty_frozen" id="qty_frozen" class="flat right" value="1"'.(GETPOSTISSET("qty_frozen") ? (GETPOST('qty_frozen', 'int') ? ' checked="checked"' : '') : ($line->qty_frozen ? ' checked="checked"' : '')).'>';
|
|
||||||
print '</td>';
|
|
||||||
|
|
||||||
$coldisplay++;
|
|
||||||
print '<td class="nobottom linecoldisablestockchange right"><input type="checkbox" name="disable_stock_change" id="disable_stock_change" class="flat right" value="1"'.(GETPOSTISSET('disablestockchange') ? (GETPOST("disable_stock_change", 'int') ? ' checked="checked"' : '') : ($line->disable_stock_change ? ' checked="checked"' : '')).'">';
|
|
||||||
print '</td>';
|
|
||||||
|
|
||||||
$coldisplay++;
|
|
||||||
print '<td class="nobottom nowrap linecollost right">';
|
|
||||||
print '<input type="text" size="2" name="efficiency" id="efficiency" class="flat right" value="'.$line->efficiency.'"></td>';
|
|
||||||
|
|
||||||
$coldisplay++;
|
|
||||||
print '<td class="nobottom nowrap linecolcostprice right">';
|
|
||||||
print '</td>';
|
|
||||||
|
|
||||||
$coldisplay += $colspan;
|
$coldisplay += $colspan;
|
||||||
print '<td class="nobottom linecoledit center valignmiddle" colspan="'.$colspan.'">';
|
print '<td class="nobottom linecoledit center valignmiddle" colspan="'.$colspan.'">';
|
||||||
$coldisplay += $colspan;
|
$coldisplay += $colspan;
|
||||||
|
|||||||
@ -38,6 +38,10 @@ if (empty($object) || !is_object($object)) {
|
|||||||
print "Error, template page can't be called as URL";
|
print "Error, template page can't be called as URL";
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
global $filtertype;
|
||||||
|
if(empty($filtertype)) $filtertype = 0;
|
||||||
|
|
||||||
print "<!-- BEGIN PHP TEMPLATE objectline_title.tpl.php -->\n";
|
print "<!-- BEGIN PHP TEMPLATE objectline_title.tpl.php -->\n";
|
||||||
|
|
||||||
|
|
||||||
@ -62,22 +66,31 @@ print '</td>';
|
|||||||
// Qty
|
// Qty
|
||||||
print '<td class="linecolqty right">'.$form->textwithpicto($langs->trans('Qty'), $langs->trans("QtyRequiredIfNoLoss")).'</td>';
|
print '<td class="linecolqty right">'.$form->textwithpicto($langs->trans('Qty'), $langs->trans("QtyRequiredIfNoLoss")).'</td>';
|
||||||
|
|
||||||
if (!empty($conf->global->PRODUCT_USE_UNITS)) {
|
if($filtertype != 1) {
|
||||||
print '<td class="linecoluseunit left">'.$langs->trans('Unit').'</td>';
|
if (!empty($conf->global->PRODUCT_USE_UNITS)) {
|
||||||
}
|
print '<td class="linecoluseunit left">' . $langs->trans('Unit') . '</td>';
|
||||||
|
}
|
||||||
|
|
||||||
// Qty frozen
|
// Qty frozen
|
||||||
print '<td class="linecolqtyfrozen right">'.$form->textwithpicto($langs->trans('QtyFrozen'), $langs->trans("QuantityConsumedInvariable")).'</td>';
|
print '<td class="linecolqtyfrozen right">' . $form->textwithpicto($langs->trans('QtyFrozen'), $langs->trans("QuantityConsumedInvariable")) . '</td>';
|
||||||
|
|
||||||
// Disable stock change
|
// Disable stock change
|
||||||
print '<td class="linecoldisablestockchange right">'.$form->textwithpicto($langs->trans('DisableStockChange'), $langs->trans('DisableStockChangeHelp')).'</td>';
|
print '<td class="linecoldisablestockchange right">' . $form->textwithpicto($langs->trans('DisableStockChange'), $langs->trans('DisableStockChangeHelp')) . '</td>';
|
||||||
|
|
||||||
// Efficiency
|
// Efficiency
|
||||||
print '<td class="linecolefficiency right">'.$form->textwithpicto($langs->trans('ManufacturingEfficiency'), $langs->trans('ValueOfMeansLoss')).'</td>';
|
print '<td class="linecolefficiency right">' . $form->textwithpicto($langs->trans('ManufacturingEfficiency'), $langs->trans('ValueOfMeansLoss')) . '</td>';
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
print '<td class="linecolunit right">' . $form->textwithpicto($langs->trans('Unit'), '').'</td>';
|
||||||
|
|
||||||
|
if($conf->workstation->enabled) print '<td class="linecolworkstation right">' . $form->textwithpicto($langs->trans('Workstation'), '') . '</td>';
|
||||||
|
}
|
||||||
|
|
||||||
// Cost
|
// Cost
|
||||||
print '<td class="linecolcost right">'.$form->textwithpicto($langs->trans("TotalCost"), $langs->trans("BOMTotalCost")).'</td>';
|
print '<td class="linecolcost right">'.$form->textwithpicto($langs->trans("TotalCost"), $langs->trans("BOMTotalCost")).'</td>';
|
||||||
|
|
||||||
|
|
||||||
print '<td class="linecoledit"></td>'; // No width to allow autodim
|
print '<td class="linecoledit"></td>'; // No width to allow autodim
|
||||||
|
|
||||||
print '<td class="linecoldelete" style="width: 10px"></td>';
|
print '<td class="linecoldelete" style="width: 10px"></td>';
|
||||||
|
|||||||
@ -34,12 +34,17 @@
|
|||||||
* $type, $text, $description, $line
|
* $type, $text, $description, $line
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/workstation/class/workstation.class.php';
|
||||||
|
|
||||||
// Protection to avoid direct call of template
|
// Protection to avoid direct call of template
|
||||||
if (empty($object) || !is_object($object)) {
|
if (empty($object) || !is_object($object)) {
|
||||||
print "Error, template page can't be called as URL";
|
print "Error, template page can't be called as URL";
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
global $filtertype;
|
||||||
|
if(empty($filtertype)) $filtertype = 0;
|
||||||
|
|
||||||
|
|
||||||
global $forceall, $senderissupplier, $inputalsopricewithtax, $outputalsopricetotalwithtax, $langs;
|
global $forceall, $senderissupplier, $inputalsopricewithtax, $outputalsopricetotalwithtax, $langs;
|
||||||
|
|
||||||
@ -100,29 +105,50 @@ $coldisplay++;
|
|||||||
echo price($line->qty, 0, '', 0, 0); // Yes, it is a quantity, not a price, but we just want the formating role of function price
|
echo price($line->qty, 0, '', 0, 0); // Yes, it is a quantity, not a price, but we just want the formating role of function price
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
if (!empty($conf->global->PRODUCT_USE_UNITS)) {
|
if($filtertype != 1) {
|
||||||
print '<td class="linecoluseunit nowrap left">';
|
if (!empty($conf->global->PRODUCT_USE_UNITS)) {
|
||||||
$label = $tmpproduct->getLabelOfUnit('long');
|
print '<td class="linecoluseunit nowrap left">';
|
||||||
if ($label !== '') {
|
$label = $tmpproduct->getLabelOfUnit('long');
|
||||||
print $langs->trans($label);
|
if ($label !== '') {
|
||||||
|
print $langs->trans($label);
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print '<td class="linecolqtyfrozen nowrap right">';
|
||||||
|
$coldisplay++;
|
||||||
|
echo $line->qty_frozen ? yn($line->qty_frozen) : '';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
print '<td class="linecoldisablestockchange nowrap right">';
|
||||||
|
$coldisplay++;
|
||||||
|
echo $line->disable_stock_change ? yn($line->disable_stock_change) : ''; // Yes, it is a quantity, not a price, but we just want the formating role of function price
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
print '<td class="linecolefficiency nowrap right">';
|
||||||
|
$coldisplay++;
|
||||||
|
echo $line->efficiency;
|
||||||
|
print '</td>';
|
||||||
|
} else {
|
||||||
|
$product = new Product($object->db);
|
||||||
|
$res = $product->fetch($line->fk_product);
|
||||||
|
|
||||||
|
//Unité
|
||||||
|
print '<td class="linecolunit nowrap right">';
|
||||||
|
$coldisplay++;
|
||||||
|
echo $product->duration_unit;
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
//Poste de travail
|
||||||
|
if($conf->workstation->enabled) {
|
||||||
|
$workstation = new Workstation($object->db);
|
||||||
|
$workstation->fetch($product->fk_default_workstation);
|
||||||
|
|
||||||
|
print '<td class="linecolunit nowrap right">';
|
||||||
|
$coldisplay++;
|
||||||
|
echo $workstation->getNomUrl();
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
print '<td class="linecolqtyfrozen nowrap right">';
|
|
||||||
$coldisplay++;
|
|
||||||
echo $line->qty_frozen ? yn($line->qty_frozen) : '';
|
|
||||||
print '</td>';
|
|
||||||
print '<td class="linecoldisablestockchange nowrap right">';
|
|
||||||
$coldisplay++;
|
|
||||||
echo $line->disable_stock_change ? yn($line->disable_stock_change) : ''; // Yes, it is a quantity, not a price, but we just want the formating role of function price
|
|
||||||
print '</td>';
|
|
||||||
|
|
||||||
print '<td class="linecolefficiency nowrap right">';
|
|
||||||
$coldisplay++;
|
|
||||||
echo $line->efficiency;
|
|
||||||
print '</td>';
|
|
||||||
|
|
||||||
$total_cost = 0;
|
$total_cost = 0;
|
||||||
print '<td id="costline_'.$line->id.'" class="linecolcost nowrap right">';
|
print '<td id="costline_'.$line->id.'" class="linecolcost nowrap right">';
|
||||||
$coldisplay++;
|
$coldisplay++;
|
||||||
|
|||||||
@ -82,6 +82,8 @@ ProductsToProduce=Produits à produire
|
|||||||
UnitCost=Coût unitaire
|
UnitCost=Coût unitaire
|
||||||
TotalCost=Coût total
|
TotalCost=Coût total
|
||||||
BOMTotalCost=Le coût de production de cette nomenclature basé sur chaque quantité et produit à consommer (utilise le prix de revient si défini, sinon le PMP si défini, sinon le meilleur prix d'achat)
|
BOMTotalCost=Le coût de production de cette nomenclature basé sur chaque quantité et produit à consommer (utilise le prix de revient si défini, sinon le PMP si défini, sinon le meilleur prix d'achat)
|
||||||
|
BOMProductsList=Liste des composants
|
||||||
|
BOMServicesList=Liste des services
|
||||||
GoOnTabProductionToProduceFirst=Vous devez avoir la production pour clôturer un Ordre de Fabrication (voir onglet '%s'). Mais vous pouvez l'annuler.
|
GoOnTabProductionToProduceFirst=Vous devez avoir la production pour clôturer un Ordre de Fabrication (voir onglet '%s'). Mais vous pouvez l'annuler.
|
||||||
ErrorAVirtualProductCantBeUsedIntoABomOrMo=Un kit ne peut pas être utilisé dans une Nomenclature ou un Ordre de fabrication.
|
ErrorAVirtualProductCantBeUsedIntoABomOrMo=Un kit ne peut pas être utilisé dans une Nomenclature ou un Ordre de fabrication.
|
||||||
Workstation=Poste de travail
|
Workstation=Poste de travail
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user