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
|
||||
$langs->loadLangs(array("mrp", "other"));
|
||||
|
||||
global $filtertype;
|
||||
|
||||
// Get parameters
|
||||
$id = GETPOST('id', 'int');
|
||||
$ref = GETPOST('ref', 'alpha');
|
||||
@ -541,50 +543,114 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
||||
* Lines
|
||||
*/
|
||||
|
||||
|
||||
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().'">
|
||||
<input type="hidden" name="action" value="' . (($action != 'editline') ? 'addline' : 'updateline').'">
|
||||
|
||||
print load_fiche_titre($langs->trans('BOMProductsList'), '', 'product');
|
||||
|
||||
$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="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) {
|
||||
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($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 "</form>\n";
|
||||
|
||||
mrpCollapseBomManagement();
|
||||
|
||||
}
|
||||
|
||||
if (!empty($object->lines) || ($object->status == $object::STATUS_DRAFT && $permissiontoadd && $action != 'selectlines' && $action != 'editline')) {
|
||||
print '</table>';
|
||||
$filtertype = 1;
|
||||
|
||||
|
||||
$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";
|
||||
|
||||
mrpCollapseBomManagement();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -23,6 +23,7 @@
|
||||
|
||||
// Put here all includes required by your class file
|
||||
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 . '/product/class/product.class.php';
|
||||
|
||||
@ -399,6 +400,56 @@ class BOM extends CommonObject
|
||||
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.
|
||||
*
|
||||
@ -1044,6 +1095,8 @@ class BOM extends CommonObject
|
||||
*/
|
||||
public function calculateCosts()
|
||||
{
|
||||
global $conf;
|
||||
|
||||
include_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
|
||||
$this->unit_cost = 0;
|
||||
$this->total_cost = 0;
|
||||
@ -1056,38 +1109,54 @@ class BOM extends CommonObject
|
||||
foreach ($this->lines as &$line) {
|
||||
$tmpproduct->cost_price = 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)) {
|
||||
$result = $tmpproduct->fetch($line->fk_product, '', '', '', 0, 1, 1); // We discard selling price and language loading
|
||||
if ($result < 0) {
|
||||
$this->error = $tmpproduct->error;
|
||||
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;
|
||||
if($tmpproduct->type == $tmpproduct::TYPE_PRODUCT) {
|
||||
if (empty($line->fk_bom_child)) {
|
||||
if ($result < 0) {
|
||||
$this->error = $tmpproduct->error;
|
||||
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;
|
||||
} 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 {
|
||||
$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;
|
||||
if(!($conf->workstation->enabled)) {
|
||||
$line->total_cost = price2num($line->qty * $tmpproduct->cost_price, 'MT');
|
||||
} 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');
|
||||
|
||||
if ($this->qty > 0) {
|
||||
$this->unit_cost = price2num($this->total_cost / $this->qty, 'MU');
|
||||
} elseif ($this->qty < 0) {
|
||||
|
||||
@ -36,12 +36,17 @@ if (empty($object) || !is_object($object)) {
|
||||
}
|
||||
|
||||
|
||||
global $forceall, $forcetoshowtitlelines;
|
||||
global $forceall, $forcetoshowtitlelines, $filtertype;
|
||||
|
||||
if (empty($forceall)) {
|
||||
$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'
|
||||
$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";
|
||||
|
||||
$nolinesbefore = (count($this->lines) == 0 || $forcetoshowtitlelines);
|
||||
|
||||
if ($nolinesbefore) {
|
||||
print '<tr class="liste_titre nodrag nodrop">';
|
||||
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 '</td>';
|
||||
print '<td class="linecolqty right">'.$langs->trans('Qty').'</td>';
|
||||
if (!empty($conf->global->PRODUCT_USE_UNITS)) {
|
||||
print '<td class="linecoluseunit left">';
|
||||
print '<span id="title_units">';
|
||||
print $langs->trans('Unit');
|
||||
print '</span></td>';
|
||||
|
||||
if($filtertype != 1) {
|
||||
if (!empty($conf->global->PRODUCT_USE_UNITS)) {
|
||||
print '<td class="linecoluseunit left">';
|
||||
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>';
|
||||
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="linecoledit" colspan="'.$colspan.'"> </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>';
|
||||
print '<td class="linecoltotalcost right">' . $form->textwithpicto($langs->trans('TotalCost'), '') . '</td>';
|
||||
}
|
||||
|
||||
print '<td class="linecoledit" colspan="' . $colspan . '"> </td>';
|
||||
print '</tr>';
|
||||
}
|
||||
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
|
||||
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");
|
||||
}
|
||||
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;
|
||||
if (!empty($conf->global->ENTREPOT_EXTRA_STATUS)) {
|
||||
// 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>';
|
||||
}
|
||||
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");
|
||||
// TODO Add component to select a 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>';
|
||||
|
||||
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++;
|
||||
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>';
|
||||
}
|
||||
|
||||
$coldisplay++;
|
||||
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 += $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>';
|
||||
|
||||
$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)) {
|
||||
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)) {
|
||||
$forceall = 0;
|
||||
}
|
||||
|
||||
if(empty($filtertype)) $filtertype = 0;
|
||||
|
||||
|
||||
// Define colspan for the button 'Add'
|
||||
$colspan = 3; // Columns: total ht + col edit + col delete
|
||||
@ -108,28 +110,47 @@ if (($line->info_bits & 2) != 2) {
|
||||
}
|
||||
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++;
|
||||
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>';
|
||||
}
|
||||
|
||||
$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;
|
||||
print '<td class="nobottom linecoledit center valignmiddle" colspan="'.$colspan.'">';
|
||||
$coldisplay += $colspan;
|
||||
|
||||
@ -38,6 +38,10 @@ if (empty($object) || !is_object($object)) {
|
||||
print "Error, template page can't be called as URL";
|
||||
exit;
|
||||
}
|
||||
|
||||
global $filtertype;
|
||||
if(empty($filtertype)) $filtertype = 0;
|
||||
|
||||
print "<!-- BEGIN PHP TEMPLATE objectline_title.tpl.php -->\n";
|
||||
|
||||
|
||||
@ -62,22 +66,31 @@ print '</td>';
|
||||
// Qty
|
||||
print '<td class="linecolqty right">'.$form->textwithpicto($langs->trans('Qty'), $langs->trans("QtyRequiredIfNoLoss")).'</td>';
|
||||
|
||||
if (!empty($conf->global->PRODUCT_USE_UNITS)) {
|
||||
print '<td class="linecoluseunit left">'.$langs->trans('Unit').'</td>';
|
||||
}
|
||||
if($filtertype != 1) {
|
||||
if (!empty($conf->global->PRODUCT_USE_UNITS)) {
|
||||
print '<td class="linecoluseunit left">' . $langs->trans('Unit') . '</td>';
|
||||
}
|
||||
|
||||
// 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
|
||||
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
|
||||
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
|
||||
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="linecoldelete" style="width: 10px"></td>';
|
||||
|
||||
@ -34,12 +34,17 @@
|
||||
* $type, $text, $description, $line
|
||||
*/
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/workstation/class/workstation.class.php';
|
||||
|
||||
// Protection to avoid direct call of template
|
||||
if (empty($object) || !is_object($object)) {
|
||||
print "Error, template page can't be called as URL";
|
||||
exit;
|
||||
}
|
||||
|
||||
global $filtertype;
|
||||
if(empty($filtertype)) $filtertype = 0;
|
||||
|
||||
|
||||
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
|
||||
print '</td>';
|
||||
|
||||
if (!empty($conf->global->PRODUCT_USE_UNITS)) {
|
||||
print '<td class="linecoluseunit nowrap left">';
|
||||
$label = $tmpproduct->getLabelOfUnit('long');
|
||||
if ($label !== '') {
|
||||
print $langs->trans($label);
|
||||
if($filtertype != 1) {
|
||||
if (!empty($conf->global->PRODUCT_USE_UNITS)) {
|
||||
print '<td class="linecoluseunit nowrap left">';
|
||||
$label = $tmpproduct->getLabelOfUnit('long');
|
||||
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 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;
|
||||
print '<td id="costline_'.$line->id.'" class="linecolcost nowrap right">';
|
||||
$coldisplay++;
|
||||
|
||||
@ -82,6 +82,8 @@ ProductsToProduce=Produits à produire
|
||||
UnitCost=Coût unitaire
|
||||
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)
|
||||
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.
|
||||
ErrorAVirtualProductCantBeUsedIntoABomOrMo=Un kit ne peut pas être utilisé dans une Nomenclature ou un Ordre de fabrication.
|
||||
Workstation=Poste de travail
|
||||
|
||||
Loading…
Reference in New Issue
Block a user