Merge remote-tracking branch 'upstream/develop' into socialnetworks
This commit is contained in:
commit
2351750d2b
@ -21,7 +21,9 @@
|
||||
* \brief Page to activate/disable all modules
|
||||
*/
|
||||
|
||||
if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); // If there is no need to load and show top and left menu
|
||||
if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); // If there is no need to load and show top and left menu
|
||||
if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', '1'); // Disabled because this page is into a popup on module search page and we want to avoid to have an Anti CSRF token error (done if MAIN_SECURITY_CSRF_WITH_TOKEN is on) when we make a second search after closing popup.
|
||||
|
||||
|
||||
require '../main.inc.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
||||
|
||||
@ -94,6 +94,7 @@ class BOM extends CommonObject
|
||||
'fk_product' => array('type'=>'integer:Product:product/class/product.class.php', 'label'=>'Product', 'enabled'=>1, 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'help'=>'ProductBOMHelp'),
|
||||
'qty' => array('type'=>'real', 'label'=>'Quantity', 'enabled'=>1, 'visible'=>1, 'default'=>1, 'position'=>55, 'notnull'=>1, 'isameasure'=>'1', 'css'=>'maxwidth75imp'),
|
||||
'efficiency' => array('type'=>'real', 'label'=>'ManufacturingEfficiency', 'enabled'=>1, 'visible'=>-1, 'default'=>1, 'position'=>100, 'notnull'=>0, 'css'=>'maxwidth50imp', 'help'=>'ValueOfMeansLoss'),
|
||||
'duration' => array('type'=>'real', 'label'=>'EstimatedDuration', 'enabled'=>1, 'visible'=>-1, 'position'=>101, 'notnull'=>-1, 'css'=>'maxwidth50imp', 'help'=>'EstimatedDurationDesc'),
|
||||
'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>-1, 'position'=>161, 'notnull'=>-1,),
|
||||
'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>1, 'visible'=>-1, 'position'=>162, 'notnull'=>-1,),
|
||||
'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'position'=>300, 'notnull'=>1,),
|
||||
@ -202,7 +203,7 @@ class BOM extends CommonObject
|
||||
*/
|
||||
public function create(User $user, $notrigger = false)
|
||||
{
|
||||
if ($this->efficiency < 0 || $this->efficiency > 1) $this->efficiency = 1;
|
||||
if ($this->efficiency <= 0 || $this->efficiency > 1) $this->efficiency = 1;
|
||||
|
||||
return $this->createCommon($user, $notrigger);
|
||||
}
|
||||
@ -412,7 +413,7 @@ class BOM extends CommonObject
|
||||
*/
|
||||
public function update(User $user, $notrigger = false)
|
||||
{
|
||||
if ($this->efficiency < 0 || $this->efficiency > 1) $this->efficiency = 1;
|
||||
if ($this->efficiency <= 0 || $this->efficiency > 1) $this->efficiency = 1;
|
||||
|
||||
return $this->updateCommon($user, $notrigger);
|
||||
}
|
||||
|
||||
@ -126,7 +126,7 @@ if (GETPOST('clearlist', 'int'))
|
||||
|
||||
if (GETPOST('exportcsv', 'int'))
|
||||
{
|
||||
$completefilename = 'targets_emailing'.$object->id.'_'.dol_print_date(dol_now(), 'dayhourlog').'csv';
|
||||
$completefilename = 'targets_emailing'.$object->id.'_'.dol_print_date(dol_now(), 'dayhourlog').'.csv';
|
||||
header('Content-Type: text/csv');
|
||||
header('Content-Disposition: attachment;filename=' . $completefilename);
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004-2015 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2004-2019 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2009-2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2010-2011 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2012 Cedric Salvador <csalvador@gpcsolutions.fr>
|
||||
@ -1241,14 +1241,17 @@ class FactureRec extends CommonInvoice
|
||||
$result='';
|
||||
|
||||
$label = '<u>' . $langs->trans("ShowInvoice") . '</u>';
|
||||
if (! empty($this->ref))
|
||||
if (! empty($this->ref)) {
|
||||
$label .= '<br><b>'.$langs->trans('Ref') . ':</b> ' . $this->ref;
|
||||
if (! empty($this->date_last_gen))
|
||||
}
|
||||
if ($this->frequency > 0) {
|
||||
$label .= '<br><b>'.$langs->trans('Frequency') . ':</b> ' . $langs->trans('FrequencyPer_'.$this->unit_frequency, $this->frequency);
|
||||
}
|
||||
if (! empty($this->date_last_gen)) {
|
||||
$label .= '<br><b>'.$langs->trans('DateLastGeneration') . ':</b> ' . dol_print_date($this->date_last_gen, 'dayhour');
|
||||
if ($this->frequency > 0)
|
||||
{
|
||||
if (! empty($this->date_when))
|
||||
{
|
||||
}
|
||||
if ($this->frequency > 0) {
|
||||
if (! empty($this->date_when)) {
|
||||
$label .= '<br><b>'.$langs->trans('NextDateToExecution') . ':</b> ';
|
||||
$label .= (empty($this->suspended)?'':'<strike>'). dol_print_date($this->date_when, 'day').(empty($this->suspended)?'':'</strike>'); // No hour for this property
|
||||
if (! empty($this->suspended)) $label .= ' ('.$langs->trans("Disabled").')';
|
||||
|
||||
@ -1233,7 +1233,7 @@ class Facture extends CommonInvoice
|
||||
*/
|
||||
public function getNomUrl($withpicto = 0, $option = '', $max = 0, $short = 0, $moretitle = '', $notooltip = 0, $addlinktonotes = 0, $save_lastsearch_value = -1, $target = '')
|
||||
{
|
||||
global $langs, $conf, $user;
|
||||
global $langs, $conf, $user, $mysoc;
|
||||
|
||||
if (! empty($conf->dol_no_mouse_hover)) $notooltip=1; // Force disable tooltips
|
||||
|
||||
@ -1276,11 +1276,11 @@ class Facture extends CommonInvoice
|
||||
if (! empty($this->total_ht))
|
||||
$label.= '<br><b>' . $langs->trans('AmountHT') . ':</b> ' . price($this->total_ht, 0, $langs, 0, -1, -1, $conf->currency);
|
||||
if (! empty($this->total_tva))
|
||||
$label.= '<br><b>' . $langs->trans('VAT') . ':</b> ' . price($this->total_tva, 0, $langs, 0, -1, -1, $conf->currency);
|
||||
$label.= '<br><b>' . $langs->trans('AmountVAT') . ':</b> ' . price($this->total_tva, 0, $langs, 0, -1, -1, $conf->currency);
|
||||
if (! empty($this->total_localtax1) && $this->total_localtax1 != 0) // We keep test != 0 because $this->total_localtax1 can be '0.00000000'
|
||||
$label.= '<br><b>' . $langs->trans('LT1') . ':</b> ' . price($this->total_localtax1, 0, $langs, 0, -1, -1, $conf->currency);
|
||||
$label.= '<br><b>' . $langs->transcountry('AmountLT1', $mysoc->country_code) . ':</b> ' . price($this->total_localtax1, 0, $langs, 0, -1, -1, $conf->currency);
|
||||
if (! empty($this->total_localtax2) && $this->total_localtax2 != 0)
|
||||
$label.= '<br><b>' . $langs->trans('LT2') . ':</b> ' . price($this->total_localtax2, 0, $langs, 0, -1, -1, $conf->currency);
|
||||
$label.= '<br><b>' . $langs->transcountry('AmountLT2', $mysoc->country_code) . ':</b> ' . price($this->total_localtax2, 0, $langs, 0, -1, -1, $conf->currency);
|
||||
if (! empty($this->total_ttc))
|
||||
$label.= '<br><b>' . $langs->trans('AmountTTC') . ':</b> ' . price($this->total_ttc, 0, $langs, 0, -1, -1, $conf->currency);
|
||||
if ($moretitle) $label.=' - '.$moretitle;
|
||||
@ -2136,7 +2136,7 @@ class Facture extends CommonInvoice
|
||||
if ($this->paye != 1)
|
||||
{
|
||||
$this->db->begin();
|
||||
|
||||
|
||||
$now=dol_now();
|
||||
|
||||
dol_syslog(get_class($this)."::set_paid rowid=".$this->id, LOG_DEBUG);
|
||||
@ -3557,7 +3557,7 @@ class Facture extends CommonInvoice
|
||||
$cluser->fetch($obj->fk_user_closing);
|
||||
$this->user_closing = $cluser;
|
||||
}
|
||||
|
||||
|
||||
$this->date_creation = $this->db->jdate($obj->datec);
|
||||
$this->date_modification = $this->db->jdate($obj->datem);
|
||||
$this->date_validation = $this->db->jdate($obj->datev);
|
||||
|
||||
@ -154,7 +154,7 @@ if (empty($reshook))
|
||||
// Create predefined invoice
|
||||
if ($action == 'add')
|
||||
{
|
||||
if (! GETPOST('titre'))
|
||||
if (! GETPOST('titre', 'nohtml'))
|
||||
{
|
||||
setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->trans("Title")), null, 'errors');
|
||||
$action = "create";
|
||||
@ -162,15 +162,15 @@ if (empty($reshook))
|
||||
}
|
||||
|
||||
$frequency=GETPOST('frequency', 'int');
|
||||
$reyear=GETPOST('reyear');
|
||||
$remonth=GETPOST('remonth');
|
||||
$reday=GETPOST('reday');
|
||||
$rehour=GETPOST('rehour');
|
||||
$remin=GETPOST('remin');
|
||||
$reyear=GETPOST('reyear', 'int');
|
||||
$remonth=GETPOST('remonth', 'int');
|
||||
$reday=GETPOST('reday', 'int');
|
||||
$rehour=GETPOST('rehour', 'int');
|
||||
$remin=GETPOST('remin', 'int');
|
||||
$nb_gen_max=GETPOST('nb_gen_max', 'int');
|
||||
//if (empty($nb_gen_max)) $nb_gen_max =0;
|
||||
|
||||
if (GETPOST('frequency'))
|
||||
if (GETPOST('frequency', 'int'))
|
||||
{
|
||||
if (empty($reyear) || empty($remonth) || empty($reday))
|
||||
{
|
||||
@ -188,12 +188,12 @@ if (empty($reshook))
|
||||
|
||||
if (! $error)
|
||||
{
|
||||
$object->titre = GETPOST('titre', 'alpha'); // deprecated
|
||||
$object->title = GETPOST('titre', 'alpha');
|
||||
$object->titre = GETPOST('titre', 'nohtml'); // deprecated
|
||||
$object->title = GETPOST('titre', 'nohtml');
|
||||
$object->note_private = GETPOST('note_private', 'none');
|
||||
$object->note_public = GETPOST('note_public', 'none');
|
||||
$object->modelpdf = GETPOST('modelpdf', 'alpha');
|
||||
$object->usenewprice = GETPOST('usenewprice');
|
||||
$object->usenewprice = GETPOST('usenewprice', 'alpha');
|
||||
|
||||
$object->frequency = $frequency;
|
||||
$object->unit_frequency = GETPOST('unit_frequency', 'alpha');
|
||||
|
||||
@ -48,7 +48,7 @@ foreach($linkedObjectBlock as $key => $objectlink)
|
||||
?>
|
||||
<tr class="<?php echo $trclass; ?>" >
|
||||
<td class="linkedcol-element"><?php echo $langs->trans("RepeatableInvoice"); ?></td>
|
||||
<td class="linkedcol-name nowraponall"><?php echo $objectlink->getNomUrl(1); ?></td>
|
||||
<td class="linkedcol-name"><!-- nowraponall because ref is a label --><?php echo $objectlink->getNomUrl(1); ?></td>
|
||||
<td class="linkedcol-ref" align="center"></td>
|
||||
<td class="linkedcol-date" align="center"><?php echo dol_print_date($objectlink->date_when, 'day'); ?></td>
|
||||
<td class="linkedcol-amount right"><?php
|
||||
|
||||
@ -142,7 +142,7 @@ if ($nb < 0 || $nb1 < 0 || $nb11 < 0)
|
||||
{
|
||||
dol_print_error($bprev->error);
|
||||
}
|
||||
print '<table class="border" width="100%">';
|
||||
print '<table class="border centpercent tableforfield">';
|
||||
|
||||
print '<tr><td class="titlefield">'.$langs->trans("NbOfInvoiceToWithdraw").'</td>';
|
||||
print '<td>';
|
||||
@ -161,6 +161,7 @@ print '</div>';
|
||||
if ($mesg) print $mesg;
|
||||
|
||||
print "<div class=\"tabsAction\">\n";
|
||||
|
||||
print '<form action="' . $_SERVER['PHP_SELF'] . '?action=create" method="POST">';
|
||||
print '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">';
|
||||
if ($nb) {
|
||||
@ -193,6 +194,7 @@ else
|
||||
}
|
||||
|
||||
print "</form>\n";
|
||||
|
||||
print "</div>\n";
|
||||
print '<br>';
|
||||
|
||||
@ -245,7 +247,7 @@ if ($resql)
|
||||
|
||||
print_barre_liste($langs->trans("InvoiceWaitingWithdraw"), $page, $_SERVER['PHP_SELF'], $param, '', '', '', $num, $nbtotalofrecords, 'invoicing', 0, '', '', $limit);
|
||||
|
||||
print '<table class="noborder" width="100%">';
|
||||
print '<table class="noborder centpercent">';
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td>'.$langs->trans("Invoice").'</td>';
|
||||
print '<td>'.$langs->trans("ThirdParty").'</td>';
|
||||
@ -299,7 +301,10 @@ if ($resql)
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
else print '<tr class="oddeven"><td colspan="5" class="opacitymedium">'.$langs->trans("None").'</td></tr>';
|
||||
else
|
||||
{
|
||||
print '<tr class="oddeven"><td colspan="6"><span class="opacitymedium">'.$langs->trans("None").'</span></td></tr>';
|
||||
}
|
||||
print "</table>";
|
||||
print "</form>";
|
||||
print "<br>\n";
|
||||
|
||||
@ -1559,9 +1559,9 @@ else
|
||||
print '<td>'.$langs->trans("ServiceNb", $cursorline).'</td>';
|
||||
print '<td width="80" class="center">'.$langs->trans("VAT").'</td>';
|
||||
print '<td width="80" class="right">'.$langs->trans("PriceUHT").'</td>';
|
||||
if (!empty($conf->multicurrency->enabled)) {
|
||||
print '<td width="80" class="right">'.$langs->trans("PriceUHTCurrency").'</td>';
|
||||
}
|
||||
//if (!empty($conf->multicurrency->enabled)) {
|
||||
// print '<td width="80" class="right">'.$langs->trans("PriceUHTCurrency").'</td>';
|
||||
//}
|
||||
print '<td width="30" class="center">'.$langs->trans("Qty").'</td>';
|
||||
if ($conf->global->PRODUCT_USE_UNITS) print '<td width="30" class="left">'.$langs->trans("Unit").'</td>';
|
||||
print '<td width="50" class="right">'.$langs->trans("ReductionShort").'</td>';
|
||||
@ -1571,8 +1571,7 @@ else
|
||||
|
||||
$objp = $db->fetch_object($result);
|
||||
|
||||
//
|
||||
|
||||
// Line in view mode
|
||||
if ($action != 'editline' || GETPOST('rowid') != $objp->rowid)
|
||||
{
|
||||
print '<tr class="tdtop oddeven">';
|
||||
@ -1608,21 +1607,21 @@ else
|
||||
{
|
||||
print '<td>'.img_object($langs->trans("ShowProductOrService"), ($objp->product_type ? 'service' : 'product')).' '.dol_htmlentitiesbr($objp->description)."</td>\n";
|
||||
}
|
||||
// TVA
|
||||
// VAT
|
||||
print '<td class="center">';
|
||||
print vatrate($objp->tva_tx.($objp->vat_src_code?(' ('.$objp->vat_src_code.')'):''), '%', $objp->info_bits);
|
||||
print '</td>';
|
||||
// Price
|
||||
print '<td class="right">'.($objp->subprice != '' ? price($objp->subprice) : '')."</td>\n";
|
||||
// Price multicurrency
|
||||
if (!empty($conf->multicurrency->enabled)) {
|
||||
/*if (!empty($conf->multicurrency->enabled)) {
|
||||
print '<td class="linecoluht_currency nowrap right">'.price($objp->multicurrency_subprice).'</td>';
|
||||
}
|
||||
// Quantite
|
||||
}*/
|
||||
// Quantity
|
||||
print '<td class="center">'.$objp->qty.'</td>';
|
||||
// Unit
|
||||
if($conf->global->PRODUCT_USE_UNITS) print '<td class="left">'.$langs->trans($object->lines[$cursorline-1]->getLabelOfUnit()).'</td>';
|
||||
// Remise
|
||||
// Discount
|
||||
if ($objp->remise_percent > 0)
|
||||
{
|
||||
print '<td class="right">'.$objp->remise_percent."%</td>\n";
|
||||
@ -1711,7 +1710,7 @@ else
|
||||
print $line->showOptionals($extrafields, 'view', array('style'=>'class="oddeven"', 'colspan'=>$colspan), '', '', empty($conf->global->MAIN_EXTRAFIELDS_IN_ONE_TD)?0:1);
|
||||
}
|
||||
}
|
||||
// Ligne en mode update
|
||||
// Line in mode update
|
||||
else
|
||||
{
|
||||
// Ligne carac
|
||||
@ -1741,18 +1740,34 @@ else
|
||||
$doleditor->Create();
|
||||
|
||||
print '</td>';
|
||||
|
||||
// VAT
|
||||
print '<td class="right">';
|
||||
print $form->load_tva("eltva_tx", $objp->tva_tx.($objp->vat_src_code?(' ('.$objp->vat_src_code.')'):''), $mysoc, $object->thirdparty, $objp->fk_product, $objp->info_bits, $objp->product_type, 0, 1);
|
||||
print '</td>';
|
||||
|
||||
// Price
|
||||
print '<td class="right"><input size="5" type="text" name="elprice" value="'.price($objp->subprice).'"></td>';
|
||||
|
||||
// Price multicurrency
|
||||
/*if (!empty($conf->multicurrency->enabled)) {
|
||||
print '<td class="linecoluht_currency nowrap right">'.price($objp->multicurrency_subprice).'</td>';
|
||||
}*/
|
||||
|
||||
// Quantity
|
||||
print '<td class="center"><input size="2" type="text" name="elqty" value="'.$objp->qty.'"></td>';
|
||||
|
||||
// Unit
|
||||
if ($conf->global->PRODUCT_USE_UNITS)
|
||||
{
|
||||
print '<td class="left">';
|
||||
print $form->selectUnits($objp->fk_unit, "unit");
|
||||
print '</td>';
|
||||
}
|
||||
|
||||
// Discount
|
||||
print '<td class="nowrap right"><input size="1" type="text" name="elremise_percent" value="'.$objp->remise_percent.'">%</td>';
|
||||
|
||||
if (! empty($usemargins))
|
||||
{
|
||||
print '<td class="right">';
|
||||
@ -2063,6 +2078,7 @@ else
|
||||
if ($action != 'editline')
|
||||
{
|
||||
$forcetoshowtitlelines=1;
|
||||
if (empty($object->multicurrency_code)) $object->multicurrency_code = $conf->currency; // TODO Remove this when multicurrency supported on contracts
|
||||
|
||||
// Add free products/services
|
||||
$object->formAddObjectLine(1, $mysoc, $soc);
|
||||
|
||||
@ -2579,8 +2579,7 @@ abstract class CommonObject
|
||||
public function updateRangOfLine($rowid, $rang)
|
||||
{
|
||||
$fieldposition = 'rang'; // @TODO Rename 'rang' into 'position'
|
||||
if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position';
|
||||
if (in_array($this->table_element_line, array('bom_bomline'))) $fieldposition = 'position';
|
||||
if (in_array($this->table_element_line, array('bom_bomline', 'ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position';
|
||||
|
||||
$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.$rang;
|
||||
$sql.= ' WHERE rowid = '.$rowid;
|
||||
@ -2886,11 +2885,11 @@ abstract class CommonObject
|
||||
$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_PROPOSAL";
|
||||
elseif ($this->element == 'commande' || $this->element == 'order')
|
||||
$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_ORDER";
|
||||
elseif ($this->element == 'facture')
|
||||
elseif ($this->element == 'facture' || $this->element == 'invoice')
|
||||
$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_INVOICE";
|
||||
elseif ($this->element == 'facture_fourn')
|
||||
elseif ($this->element == 'facture_fourn' || $this->element == 'supplier_invoice')
|
||||
$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_SUPPLIER_INVOICE";
|
||||
elseif ($this->element == 'order_supplier')
|
||||
elseif ($this->element == 'order_supplier' || $this->element == 'supplier_order')
|
||||
$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_SUPPLIER_ORDER";
|
||||
elseif ($this->element == 'supplier_proposal')
|
||||
$MODULE = "MODULE_DISALLOW_UPDATE_PRICE_SUPPLIER_PROPOSAL";
|
||||
@ -6278,18 +6277,12 @@ abstract class CommonObject
|
||||
$value='';
|
||||
}
|
||||
}
|
||||
elseif ($type == 'double')
|
||||
elseif ($type == 'double' || $type == 'real')
|
||||
{
|
||||
if (!empty($value)) {
|
||||
$value=price($value);
|
||||
}
|
||||
}
|
||||
elseif ($type == 'real')
|
||||
{
|
||||
if (!empty($value)) {
|
||||
$value=price($value);
|
||||
}
|
||||
}
|
||||
elseif ($type == 'boolean')
|
||||
{
|
||||
$checked='';
|
||||
@ -7122,7 +7115,7 @@ abstract class CommonObject
|
||||
* Function test if type is array
|
||||
*
|
||||
* @param array $info content informations of field
|
||||
* @return bool
|
||||
* @return bool true if array
|
||||
*/
|
||||
protected function isArray($info)
|
||||
{
|
||||
@ -7131,42 +7124,26 @@ abstract class CommonObject
|
||||
if(isset($info['type']) && $info['type']=='array') return true;
|
||||
else return false;
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function test if type is null
|
||||
*
|
||||
* @param array $info content informations of field
|
||||
* @return bool
|
||||
*/
|
||||
protected function isNull($info)
|
||||
{
|
||||
if(is_array($info))
|
||||
{
|
||||
if(isset($info['type']) && $info['type']=='null') return true;
|
||||
else return false;
|
||||
}
|
||||
else return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function test if type is date
|
||||
*
|
||||
* @param array $info content informations of field
|
||||
* @return bool
|
||||
* @return bool true if date
|
||||
*/
|
||||
public function isDate($info)
|
||||
{
|
||||
if(isset($info['type']) && ($info['type']=='date' || $info['type']=='datetime' || $info['type']=='timestamp')) return true;
|
||||
else return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function test if type is integer
|
||||
*
|
||||
* @param array $info content informations of field
|
||||
* @return bool
|
||||
* @return bool true if integer
|
||||
*/
|
||||
public function isInt($info)
|
||||
{
|
||||
@ -7182,7 +7159,7 @@ abstract class CommonObject
|
||||
* Function test if type is float
|
||||
*
|
||||
* @param array $info content informations of field
|
||||
* @return bool
|
||||
* @return bool true if float
|
||||
*/
|
||||
public function isFloat($info)
|
||||
{
|
||||
@ -7191,14 +7168,14 @@ abstract class CommonObject
|
||||
if (isset($info['type']) && (preg_match('/^(double|real|price)/i', $info['type']))) return true;
|
||||
else return false;
|
||||
}
|
||||
else return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function test if type is text
|
||||
*
|
||||
* @param array $info content informations of field
|
||||
* @return bool
|
||||
* @return bool true if type text
|
||||
*/
|
||||
public function isText($info)
|
||||
{
|
||||
@ -7207,7 +7184,39 @@ abstract class CommonObject
|
||||
if(isset($info['type']) && $info['type']=='text') return true;
|
||||
else return false;
|
||||
}
|
||||
else return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function test if field can be null
|
||||
*
|
||||
* @param array $info content informations of field
|
||||
* @return bool true if it can be null
|
||||
*/
|
||||
protected function canBeNull($info)
|
||||
{
|
||||
if(is_array($info))
|
||||
{
|
||||
if(isset($info['notnull']) && $info['notnull']!='1') return true;
|
||||
else return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function test if field is forced to null if zero or empty
|
||||
*
|
||||
* @param array $info content informations of field
|
||||
* @return bool true if forced to null
|
||||
*/
|
||||
protected function isForcedToNullIfZero($info)
|
||||
{
|
||||
if(is_array($info))
|
||||
{
|
||||
if(isset($info['notnull']) && $info['notnull']=='-1') return true;
|
||||
else return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -7223,7 +7232,7 @@ abstract class CommonObject
|
||||
if(isset($info['index']) && $info['index']==true) return true;
|
||||
else return false;
|
||||
}
|
||||
else return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -7316,17 +7325,30 @@ abstract class CommonObject
|
||||
elseif($this->isInt($info))
|
||||
{
|
||||
if ($field == 'rowid') $this->id = (int) $obj->{$field};
|
||||
else $this->{$field} = (int) $obj->{$field};
|
||||
else
|
||||
{
|
||||
if ($this->isForcedToNullIfZero($info))
|
||||
{
|
||||
if (empty($obj->{$field})) $this->{$field} = null;
|
||||
else $this->{$field} = (double) $obj->{$field};
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->{$field} = (int) $obj->{$field};
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif($this->isFloat($info))
|
||||
{
|
||||
$this->{$field} = (double) $obj->{$field};
|
||||
}
|
||||
elseif($this->isNull($info))
|
||||
{
|
||||
$val = $obj->{$field};
|
||||
// zero is not null
|
||||
$this->{$field} = (is_null($val) || (empty($val) && $val!==0 && $val!=='0') ? null : $val);
|
||||
if ($this->isForcedToNullIfZero($info))
|
||||
{
|
||||
if (empty($obj->{$field})) $this->{$field} = null;
|
||||
else $this->{$field} = (double) $obj->{$field};
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->{$field} = (double) $obj->{$field};
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -7383,7 +7405,8 @@ abstract class CommonObject
|
||||
if (array_key_exists('date_creation', $fieldvalues) && empty($fieldvalues['date_creation'])) $fieldvalues['date_creation']=$this->db->idate($now);
|
||||
if (array_key_exists('fk_user_creat', $fieldvalues) && ! ($fieldvalues['fk_user_creat'] > 0)) $fieldvalues['fk_user_creat']=$user->id;
|
||||
unset($fieldvalues['rowid']); // The field 'rowid' is reserved field name for autoincrement field so we don't need it into insert.
|
||||
|
||||
if (array_key_exists('ref', $fieldvalues)) $fieldvalues['ref']=dol_string_nospecial($fieldvalues['ref']); // If field is a ref,we sanitize data
|
||||
|
||||
$keys=array();
|
||||
$values = array();
|
||||
foreach ($fieldvalues as $k => $v) {
|
||||
|
||||
@ -54,14 +54,14 @@ class modBom extends DolibarrModules
|
||||
// It is used to group modules by family in module setup page
|
||||
$this->family = "products";
|
||||
// Module position in the family on 2 digits ('01', '10', '20', ...)
|
||||
$this->module_position = '90';
|
||||
$this->module_position = '60';
|
||||
// Gives the possibility for the module, to provide his own family info and position of this family (Overwrite $this->family and $this->module_position. Avoid this)
|
||||
//$this->familyinfo = array('myownfamily' => array('position' => '01', 'label' => $langs->trans("MyOwnFamily")));
|
||||
|
||||
// Module label (no space allowed), used if translation string 'ModuleBomName' not found (Bom is name of module).
|
||||
$this->name = preg_replace('/^mod/i', '', get_class($this));
|
||||
// Module description, used if translation string 'ModuleBomDesc' not found (Bom is name of module).
|
||||
$this->description = "Bill of Materials (BOM) definitions for Manufacturing Resource Planning";
|
||||
$this->description = "Module to define your Bills Of Materials (BOM). Can be used for Manufacturing Resource Planning by the module Manufacturing Orders (MO)";
|
||||
// Used only if file README.md and README-LL.md not found.
|
||||
$this->descriptionlong = "Bill of Materials definitions. They can be used to make Manufacturing Resource Planning";
|
||||
|
||||
@ -75,7 +75,7 @@ class modBom extends DolibarrModules
|
||||
// Name of image file used for this module.
|
||||
// If file is in theme/yourtheme/img directory under name object_pictovalue.png, use this->picto='pictovalue'
|
||||
// If file is in module/img directory under name object_pictovalue.png, use this->picto='pictovalue@module'
|
||||
$this->picto='generic';
|
||||
$this->picto='bom';
|
||||
|
||||
// Define some features supported by module (triggers, login, substitutions, menus, css, etc...)
|
||||
$this->module_parts = array(
|
||||
|
||||
@ -53,6 +53,8 @@ class modVariants extends DolibarrModules
|
||||
// Family can be 'crm','financial','hr','projects','products','ecm','technic','other'
|
||||
// It is used to group modules in module setup page
|
||||
$this->family = "products";
|
||||
// Module position in the family on 2 digits ('01', '10', '20', ...)
|
||||
$this->module_position = '50';
|
||||
// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
|
||||
$this->name = preg_replace('/^mod/i', '', get_class($this));
|
||||
// Module description, used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module)
|
||||
|
||||
@ -49,6 +49,8 @@ UPDATE llx_c_units SET label = 'SurfaceUnitm2' WHERE code IN ('M2');
|
||||
|
||||
-- For v11
|
||||
|
||||
ALTER TABLE llx_bom_bom ADD COLUMN duration double(8,4) DEFAULT NULL;
|
||||
|
||||
create table llx_categorie_warehouse
|
||||
(
|
||||
fk_categorie integer NOT NULL,
|
||||
|
||||
@ -26,6 +26,7 @@ CREATE TABLE llx_bom_bom(
|
||||
fk_product integer,
|
||||
qty double(24,8),
|
||||
efficiency double(8,4) DEFAULT 1,
|
||||
duration double(8,4) DEFAULT NULL,
|
||||
date_creation datetime NOT NULL,
|
||||
date_valid datetime,
|
||||
tms timestamp,
|
||||
|
||||
@ -1,6 +1,10 @@
|
||||
Mrp=Manufacturing Orders
|
||||
MRPDescription=Module to manage Manufacturing Orders (MO).
|
||||
MRPArea=MRP Area
|
||||
MrpSetupPage=Setup of module MO
|
||||
MenuBOM=Bills of material
|
||||
LatestBOMModified=Latest %s Bills of materials modified
|
||||
Bom=Bills of Material
|
||||
BillOfMaterials=Bill of Material
|
||||
BOMsSetup=Setup of module BOM
|
||||
ListOfBOMs=List of bills of material - BOM
|
||||
@ -21,4 +25,6 @@ NewMO=New Manufacturing Order
|
||||
QtyToProduce=Qty to produce
|
||||
DateStartPlannedMo=Date start planned
|
||||
DateEndPlannedMo=Date end planned
|
||||
KeepEmptyForAsap=Empty means 'As Soon As Possible'
|
||||
KeepEmptyForAsap=Empty means 'As Soon As Possible'
|
||||
EstimatedDuration=Estimated duration
|
||||
EstimatedDurationDesc=Estimated duration to manufacture this product using this BOM
|
||||
@ -171,7 +171,7 @@ $arrayfields=array(
|
||||
'p.label'=>array('label'=>$langs->trans("Label"), 'checked'=>1),
|
||||
'p.fk_product_type'=>array('label'=>$langs->trans("Type"), 'checked'=>0, 'enabled'=>(! empty($conf->product->enabled) && ! empty($conf->service->enabled))),
|
||||
'p.barcode'=>array('label'=>$langs->trans("Gencod"), 'checked'=>1, 'enabled'=>(! empty($conf->barcode->enabled))),
|
||||
'p.duration'=>array('label'=>$langs->trans("Duration"), 'checked'=>($contextpage != 'productlist'), 'enabled'=>(! empty($conf->service->enabled))),
|
||||
'p.duration'=>array('label'=>$langs->trans("Duration"), 'checked'=>($contextpage != 'productlist'), 'enabled'=>(! empty($conf->service->enabled) && (string) $type == '1')),
|
||||
'p.weight'=>array('label'=>$langs->trans("Weight"), 'checked'=>0, 'enabled'=>(! empty($conf->product->enabled))),
|
||||
'p.length'=>array('label'=>$langs->trans("Length"), 'checked'=>0, 'enabled'=>(! empty($conf->product->enabled) && ! empty($conf->global->PRODUCT_DISABLE_SIZE))),
|
||||
'p.surface'=>array('label'=>$langs->trans("Surface"), 'checked'=>0, 'enabled'=>(! empty($conf->product->enabled) && ! empty($conf->global->PRODUCT_DISABLE_SURFACE))),
|
||||
@ -604,7 +604,7 @@ if ($resql)
|
||||
print '</td>';
|
||||
}
|
||||
// Duration
|
||||
if ((string) $type == '1' && ! empty($arrayfields['p.duration']['checked']))
|
||||
if (! empty($arrayfields['p.duration']['checked']))
|
||||
{
|
||||
print '<td class="liste_titre">';
|
||||
print '</td>';
|
||||
@ -748,7 +748,7 @@ if ($resql)
|
||||
if (! empty($arrayfields['p.barcode']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['p.barcode']['label'], $_SERVER["PHP_SELF"], "p.barcode", "", $param, "", $sortfield, $sortorder);
|
||||
}
|
||||
if ((string) $type == '1' && ! empty($arrayfields['p.duration']['checked'])) {
|
||||
if (! empty($arrayfields['p.duration']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['p.duration']['label'], $_SERVER["PHP_SELF"], "p.duration", "", $param, '', $sortfield, $sortorder, 'center ');
|
||||
}
|
||||
if (! empty($arrayfields['p.weight']['checked'])) print_liste_field_titre($arrayfields['p.weight']['label'], $_SERVER["PHP_SELF"], "p.weight", "", $param, '', $sortfield, $sortorder, 'center ');
|
||||
@ -921,7 +921,7 @@ if ($resql)
|
||||
}
|
||||
|
||||
// Duration
|
||||
if ((string) $type == '1' && ! empty($arrayfields['p.duration']['checked']))
|
||||
if (! empty($arrayfields['p.duration']['checked']))
|
||||
{
|
||||
print '<td class="center nowraponall">';
|
||||
|
||||
@ -939,9 +939,9 @@ if ($resql)
|
||||
$dur=array("i"=>$langs->trans("Minute"),"h"=>$langs->trans("Hour"),"d"=>$langs->trans("Day"),"w"=>$langs->trans("Week"),"m"=>$langs->trans("Month"),"y"=>$langs->trans("Year"));
|
||||
}
|
||||
print $duration_value;
|
||||
print (! empty($duration_unit) && isset($dur[$duration_unit]) ? ' '.$langs->trans($dur[$duration_unit]) : '');
|
||||
print ((! empty($duration_unit) && isset($dur[$duration_unit]) && $duration_value != '') ? ' '.$langs->trans($dur[$duration_unit]) : '');
|
||||
}
|
||||
else
|
||||
elseif (! preg_match('/^[a-z]$/i', $obj->duration)) // If duration is a simple char (like 's' of 'm'), we do not show value
|
||||
{
|
||||
print $obj->duration;
|
||||
}
|
||||
|
||||
@ -785,6 +785,9 @@ table[summary="list_of_modules"] .fa-cog {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
.linkedcol-element {
|
||||
min-width: 100px;
|
||||
}
|
||||
|
||||
/* ============================================================================== */
|
||||
/* Styles to hide objects */
|
||||
@ -865,6 +868,10 @@ table[summary="list_of_modules"] .fa-cog {
|
||||
.minwidth300imp { min-width: 300px !important; }
|
||||
.minwidth400imp { min-width: 300px !important; }
|
||||
.minwidth500imp { min-width: 300px !important; }
|
||||
|
||||
.linkedcol-element {
|
||||
min-width: unset;
|
||||
}
|
||||
}
|
||||
|
||||
/* Force values for small screen 1000 */
|
||||
@ -1101,8 +1108,8 @@ div.blockvmenulogo
|
||||
}
|
||||
.menulogocontainer {
|
||||
margin: <?php echo $disableimages?'0':'6'; ?>px;
|
||||
margin-left: 8px;
|
||||
margin-right: 8px;
|
||||
margin-left: 12px;
|
||||
margin-right: 4px;
|
||||
padding: 0;
|
||||
height: <?php echo $disableimages?'20':'32'; ?>px;
|
||||
/* width: 100px; */
|
||||
|
||||
BIN
htdocs/theme/eldy/img/object_mrp.png
Normal file
BIN
htdocs/theme/eldy/img/object_mrp.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 548 B |
@ -70,7 +70,7 @@ $colorbackbody='255,255,255';
|
||||
$colortexttitlenotab='110,80,20';
|
||||
$colortexttitle='0,0,0';
|
||||
$colortext='0,0,0';
|
||||
$colortextlink='10, 20, 120';
|
||||
$colortextlink='10, 20, 110';
|
||||
$fontsize='0.86em';
|
||||
$fontsizesmaller='0.75em';
|
||||
$topMenuFontSize='1.2em';
|
||||
|
||||
BIN
htdocs/theme/md/img/object_movement.png
Normal file
BIN
htdocs/theme/md/img/object_movement.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 548 B |
BIN
htdocs/theme/md/img/object_mrp.png
Normal file
BIN
htdocs/theme/md/img/object_mrp.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 548 B |
Loading…
Reference in New Issue
Block a user