Work on BOM module
This commit is contained in:
parent
a46b7f5202
commit
7b7ff33fdf
558
htdocs/admin/bom.php
Normal file
558
htdocs/admin/bom.php
Normal file
@ -0,0 +1,558 @@
|
|||||||
|
<?php
|
||||||
|
/* Copyright (C) 2019 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file htdocs/admin/bom.php
|
||||||
|
* \ingroup bom
|
||||||
|
* \brief Setup page of module BOM
|
||||||
|
*/
|
||||||
|
|
||||||
|
require '../main.inc.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/bom/class/bom.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/bom/lib/bom.lib.php';
|
||||||
|
|
||||||
|
// Load translation files required by the page
|
||||||
|
$langs->loadLangs(array('admin', 'errors', 'mrp', 'other'));
|
||||||
|
|
||||||
|
if (! $user->admin) accessforbidden();
|
||||||
|
|
||||||
|
$action = GETPOST('action', 'alpha');
|
||||||
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$label = GETPOST('label', 'alpha');
|
||||||
|
$scandir = GETPOST('scan_dir', 'alpha');
|
||||||
|
$type = 'bom';
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Actions
|
||||||
|
*/
|
||||||
|
|
||||||
|
include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php';
|
||||||
|
|
||||||
|
if ($action == 'updateMask')
|
||||||
|
{
|
||||||
|
$maskconstbom=GETPOST('maskconstbom', 'alpha');
|
||||||
|
$maskbom=GETPOST('maskbom', 'alpha');
|
||||||
|
|
||||||
|
if ($maskconstbom) $res = dolibarr_set_const($db, $maskconstbom, $maskbom, 'chaine', 0, '', $conf->entity);
|
||||||
|
|
||||||
|
if (! $res > 0) $error++;
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setEventMessages($langs->trans("Error"), null, 'errors');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
elseif ($action == 'specimen')
|
||||||
|
{
|
||||||
|
$modele=GETPOST('module', 'alpha');
|
||||||
|
|
||||||
|
$bom = new BOM($db);
|
||||||
|
$bom->initAsSpecimen();
|
||||||
|
|
||||||
|
// Search template files
|
||||||
|
$file=''; $classname=''; $filefound=0;
|
||||||
|
$dirmodels=array_merge(array('/'), (array) $conf->modules_parts['models']);
|
||||||
|
foreach($dirmodels as $reldir)
|
||||||
|
{
|
||||||
|
$file=dol_buildpath($reldir."core/modules/bom/doc/pdf_".$modele.".modules.php", 0);
|
||||||
|
if (file_exists($file))
|
||||||
|
{
|
||||||
|
$filefound=1;
|
||||||
|
$classname = "pdf_".$modele;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($filefound)
|
||||||
|
{
|
||||||
|
require_once $file;
|
||||||
|
|
||||||
|
$module = new $classname($db);
|
||||||
|
|
||||||
|
if ($module->write_file($bom, $langs) > 0)
|
||||||
|
{
|
||||||
|
header("Location: ".DOL_URL_ROOT."/document.php?modulepart=bom&file=SPECIMEN.pdf");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setEventMessages($module->error, null, 'errors');
|
||||||
|
dol_syslog($module->error, LOG_ERR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors');
|
||||||
|
dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Activate a model
|
||||||
|
elseif ($action == 'set')
|
||||||
|
{
|
||||||
|
$ret = addDocumentModel($value, $type, $label, $scandir);
|
||||||
|
}
|
||||||
|
|
||||||
|
elseif ($action == 'del')
|
||||||
|
{
|
||||||
|
$ret = delDocumentModel($value, $type);
|
||||||
|
if ($ret > 0)
|
||||||
|
{
|
||||||
|
if ($conf->global->BOM_ADDON_PDF == "$value") dolibarr_del_const($db, 'BOM_ADDON_PDF', $conf->entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set default model
|
||||||
|
elseif ($action == 'setdoc')
|
||||||
|
{
|
||||||
|
if (dolibarr_set_const($db, "BOM_ADDON_PDF", $value, 'chaine', 0, '', $conf->entity))
|
||||||
|
{
|
||||||
|
// The constant that was read before the new set
|
||||||
|
// We therefore requires a variable to have a coherent view
|
||||||
|
$conf->global->BOM_ADDON_PDF = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// On active le modele
|
||||||
|
$ret = delDocumentModel($value, $type);
|
||||||
|
if ($ret > 0)
|
||||||
|
{
|
||||||
|
$ret = addDocumentModel($value, $type, $label, $scandir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
elseif ($action == 'setmod')
|
||||||
|
{
|
||||||
|
// TODO Check if numbering module chosen can be activated
|
||||||
|
// by calling method canBeActivated
|
||||||
|
|
||||||
|
dolibarr_set_const($db, "BOM_ADDON", $value, 'chaine', 0, '', $conf->entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
elseif ($action == 'set_BOM_DRAFT_WATERMARK')
|
||||||
|
{
|
||||||
|
$draft = GETPOST("BOM_DRAFT_WATERMARK");
|
||||||
|
$res = dolibarr_set_const($db, "BOM_DRAFT_WATERMARK", trim($draft), 'chaine', 0, '', $conf->entity);
|
||||||
|
|
||||||
|
if (! $res > 0) $error++;
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setEventMessages($langs->trans("Error"), null, 'errors');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
elseif ($action == 'set_BOM_FREE_TEXT')
|
||||||
|
{
|
||||||
|
$freetext = GETPOST("BOM_FREE_TEXT", 'none'); // No alpha here, we want exact string
|
||||||
|
|
||||||
|
$res = dolibarr_set_const($db, "BOM_FREE_TEXT", $freetext, 'chaine', 0, '', $conf->entity);
|
||||||
|
|
||||||
|
if (! $res > 0) $error++;
|
||||||
|
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setEventMessages($langs->trans("Error"), null, 'errors');
|
||||||
|
}
|
||||||
|
} elseif ($action=="setshippableiconinlist") {
|
||||||
|
// Activate Set Shippable Icon In List
|
||||||
|
$setshippableiconinlist = GETPOST('value', 'int');
|
||||||
|
$res = dolibarr_set_const($db, "SHIPPABLE_BOM_ICON_IN_LIST", $setshippableiconinlist, 'yesno', 0, '', $conf->entity);
|
||||||
|
if (! $res > 0) $error++;
|
||||||
|
if (! $error) {
|
||||||
|
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
|
||||||
|
} else {
|
||||||
|
setEventMessages($langs->trans("Error"), null, 'errors');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* View
|
||||||
|
*/
|
||||||
|
|
||||||
|
$form=new Form($db);
|
||||||
|
|
||||||
|
$dirmodels=array_merge(array('/'), (array) $conf->modules_parts['models']);
|
||||||
|
|
||||||
|
llxHeader("", $langs->trans("BOMsSetup"));
|
||||||
|
|
||||||
|
$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
|
||||||
|
print load_fiche_titre($langs->trans("BOMsSetup"), $linkback, 'title_setup');
|
||||||
|
|
||||||
|
$head = bomAdminPrepareHead();
|
||||||
|
|
||||||
|
dol_fiche_head($head, 'settings', $langs->trans("BOMs"), -1, 'bom');
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BOMs Numbering model
|
||||||
|
*/
|
||||||
|
|
||||||
|
print load_fiche_titre($langs->trans("BOMsNumberingModules"), '', '');
|
||||||
|
|
||||||
|
print '<table class="noborder" width="100%">';
|
||||||
|
print '<tr class="liste_titre">';
|
||||||
|
print '<td>'.$langs->trans("Name").'</td>';
|
||||||
|
print '<td>'.$langs->trans("Description").'</td>';
|
||||||
|
print '<td class="nowrap">'.$langs->trans("Example").'</td>';
|
||||||
|
print '<td class="center" width="60">'.$langs->trans("Status").'</td>';
|
||||||
|
print '<td class="center" width="16">'.$langs->trans("ShortInfo").'</td>';
|
||||||
|
print '</tr>'."\n";
|
||||||
|
|
||||||
|
clearstatcache();
|
||||||
|
|
||||||
|
foreach ($dirmodels as $reldir)
|
||||||
|
{
|
||||||
|
$dir = dol_buildpath($reldir."core/modules/bom/");
|
||||||
|
|
||||||
|
if (is_dir($dir))
|
||||||
|
{
|
||||||
|
$handle = opendir($dir);
|
||||||
|
if (is_resource($handle))
|
||||||
|
{
|
||||||
|
while (($file = readdir($handle))!==false)
|
||||||
|
{
|
||||||
|
if (substr($file, 0, 8) == 'mod_bom_' && substr($file, dol_strlen($file)-3, 3) == 'php')
|
||||||
|
{
|
||||||
|
$file = substr($file, 0, dol_strlen($file)-4);
|
||||||
|
|
||||||
|
require_once $dir.$file.'.php';
|
||||||
|
|
||||||
|
$module = new $file($db);
|
||||||
|
|
||||||
|
// Show modules according to features level
|
||||||
|
if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) continue;
|
||||||
|
if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) continue;
|
||||||
|
|
||||||
|
if ($module->isEnabled())
|
||||||
|
{
|
||||||
|
|
||||||
|
print '<tr class="oddeven"><td>'.$module->name."</td><td>\n";
|
||||||
|
print $module->info();
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
// Show example of numbering model
|
||||||
|
print '<td class="nowrap">';
|
||||||
|
$tmp=$module->getExample();
|
||||||
|
if (preg_match('/^Error/', $tmp)) print '<div class="error">'.$langs->trans($tmp).'</div>';
|
||||||
|
elseif ($tmp=='NotConfigured') print $langs->trans($tmp);
|
||||||
|
else print $tmp;
|
||||||
|
print '</td>'."\n";
|
||||||
|
|
||||||
|
print '<td class="center">';
|
||||||
|
if ($conf->global->BOM_ADDON == $file)
|
||||||
|
{
|
||||||
|
print img_picto($langs->trans("Activated"), 'switch_on');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setmod&value='.$file.'">';
|
||||||
|
print img_picto($langs->trans("Disabled"), 'switch_off');
|
||||||
|
print '</a>';
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
$bom=new BOM($db);
|
||||||
|
$bom->initAsSpecimen();
|
||||||
|
|
||||||
|
// Info
|
||||||
|
$htmltooltip='';
|
||||||
|
$htmltooltip.=''.$langs->trans("Version").': <b>'.$module->getVersion().'</b><br>';
|
||||||
|
$bom->type=0;
|
||||||
|
$nextval=$module->getNextValue($mysoc, $bom);
|
||||||
|
if ("$nextval" != $langs->trans("NotAvailable")) { // Keep " on nextval
|
||||||
|
$htmltooltip.=''.$langs->trans("NextValue").': ';
|
||||||
|
if ($nextval) {
|
||||||
|
if (preg_match('/^Error/', $nextval) || $nextval=='NotConfigured')
|
||||||
|
$nextval = $langs->trans($nextval);
|
||||||
|
$htmltooltip.=$nextval.'<br>';
|
||||||
|
} else {
|
||||||
|
$htmltooltip.=$langs->trans($module->error).'<br>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
print '<td class="center">';
|
||||||
|
print $form->textwithpicto('', $htmltooltip, 1, 0);
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
print "</tr>\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
closedir($handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print "</table><br>\n";
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Document templates generators
|
||||||
|
*/
|
||||||
|
|
||||||
|
print load_fiche_titre($langs->trans("BOMsModelModule"), '', '');
|
||||||
|
|
||||||
|
// Load array def with activated templates
|
||||||
|
$def = array();
|
||||||
|
$sql = "SELECT nom";
|
||||||
|
$sql.= " FROM ".MAIN_DB_PREFIX."document_model";
|
||||||
|
$sql.= " WHERE type = '".$type."'";
|
||||||
|
$sql.= " AND entity = ".$conf->entity;
|
||||||
|
$resql=$db->query($sql);
|
||||||
|
if ($resql)
|
||||||
|
{
|
||||||
|
$i = 0;
|
||||||
|
$num_rows=$db->num_rows($resql);
|
||||||
|
while ($i < $num_rows)
|
||||||
|
{
|
||||||
|
$array = $db->fetch_array($resql);
|
||||||
|
array_push($def, $array[0]);
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
print "<table class=\"noborder\" width=\"100%\">\n";
|
||||||
|
print "<tr class=\"liste_titre\">\n";
|
||||||
|
print '<td>'.$langs->trans("Name").'</td>';
|
||||||
|
print '<td>'.$langs->trans("Description").'</td>';
|
||||||
|
print '<td class="center" width="60">'.$langs->trans("Status")."</td>\n";
|
||||||
|
print '<td class="center" width="60">'.$langs->trans("Default")."</td>\n";
|
||||||
|
print '<td class="center" width="38">'.$langs->trans("ShortInfo").'</td>';
|
||||||
|
print '<td class="center" width="38">'.$langs->trans("Preview").'</td>';
|
||||||
|
print "</tr>\n";
|
||||||
|
|
||||||
|
clearstatcache();
|
||||||
|
|
||||||
|
foreach ($dirmodels as $reldir)
|
||||||
|
{
|
||||||
|
foreach (array('','/doc') as $valdir)
|
||||||
|
{
|
||||||
|
$dir = dol_buildpath($reldir."core/modules/bom".$valdir);
|
||||||
|
|
||||||
|
if (is_dir($dir))
|
||||||
|
{
|
||||||
|
$handle=opendir($dir);
|
||||||
|
if (is_resource($handle))
|
||||||
|
{
|
||||||
|
while (($file = readdir($handle))!==false)
|
||||||
|
{
|
||||||
|
$filelist[]=$file;
|
||||||
|
}
|
||||||
|
closedir($handle);
|
||||||
|
arsort($filelist);
|
||||||
|
|
||||||
|
foreach($filelist as $file)
|
||||||
|
{
|
||||||
|
if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file))
|
||||||
|
{
|
||||||
|
|
||||||
|
if (file_exists($dir.'/'.$file))
|
||||||
|
{
|
||||||
|
$name = substr($file, 4, dol_strlen($file) -16);
|
||||||
|
$classname = substr($file, 0, dol_strlen($file) -12);
|
||||||
|
|
||||||
|
require_once $dir.'/'.$file;
|
||||||
|
$module = new $classname($db);
|
||||||
|
|
||||||
|
$modulequalified=1;
|
||||||
|
if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) $modulequalified=0;
|
||||||
|
if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) $modulequalified=0;
|
||||||
|
|
||||||
|
if ($modulequalified)
|
||||||
|
{
|
||||||
|
$var = !$var;
|
||||||
|
print '<tr class="oddeven"><td width="100">';
|
||||||
|
print (empty($module->name)?$name:$module->name);
|
||||||
|
print "</td><td>\n";
|
||||||
|
if (method_exists($module, 'info')) print $module->info($langs);
|
||||||
|
else print $module->description;
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
// Active
|
||||||
|
if (in_array($name, $def))
|
||||||
|
{
|
||||||
|
print '<td class="center">'."\n";
|
||||||
|
print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&value='.$name.'">';
|
||||||
|
print img_picto($langs->trans("Enabled"), 'switch_on');
|
||||||
|
print '</a>';
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print '<td class="center">'."\n";
|
||||||
|
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&value='.$name.'&scan_dir='.$module->scandir.'&label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"), 'switch_off').'</a>';
|
||||||
|
print "</td>";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Default
|
||||||
|
print '<td class="center">';
|
||||||
|
if ($conf->global->BOM_ADDON_PDF == $name)
|
||||||
|
{
|
||||||
|
print img_picto($langs->trans("Default"), 'on');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&value='.$name.'&scan_dir='.$module->scandir.'&label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"), 'off').'</a>';
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
// Info
|
||||||
|
$htmltooltip = ''.$langs->trans("Name").': '.$module->name;
|
||||||
|
$htmltooltip.='<br>'.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown"));
|
||||||
|
if ($module->type == 'pdf')
|
||||||
|
{
|
||||||
|
$htmltooltip.='<br>'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur;
|
||||||
|
}
|
||||||
|
$htmltooltip.='<br><br><u>'.$langs->trans("FeaturesSupported").':</u>';
|
||||||
|
$htmltooltip.='<br>'.$langs->trans("Logo").': '.yn($module->option_logo, 1, 1);
|
||||||
|
$htmltooltip.='<br>'.$langs->trans("PaymentMode").': '.yn($module->option_modereg, 1, 1);
|
||||||
|
$htmltooltip.='<br>'.$langs->trans("PaymentConditions").': '.yn($module->option_condreg, 1, 1);
|
||||||
|
$htmltooltip.='<br>'.$langs->trans("MultiLanguage").': '.yn($module->option_multilang, 1, 1);
|
||||||
|
//$htmltooltip.='<br>'.$langs->trans("Discounts").': '.yn($module->option_escompte,1,1);
|
||||||
|
//$htmltooltip.='<br>'.$langs->trans("CreditNote").': '.yn($module->option_credit_note,1,1);
|
||||||
|
$htmltooltip.='<br>'.$langs->trans("WatermarkOnDraftBOMs").': '.yn($module->option_draft_watermark, 1, 1);
|
||||||
|
|
||||||
|
|
||||||
|
print '<td class="center">';
|
||||||
|
print $form->textwithpicto('', $htmltooltip, 1, 0);
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
// Preview
|
||||||
|
print '<td class="center">';
|
||||||
|
if ($module->type == 'pdf')
|
||||||
|
{
|
||||||
|
print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'">'.img_object($langs->trans("Preview"), 'bill').'</a>';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print img_object($langs->trans("PreviewNotAvailable"), 'generic');
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
print "</tr>\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
print '</table>';
|
||||||
|
print "<br>";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Other options
|
||||||
|
*/
|
||||||
|
|
||||||
|
print load_fiche_titre($langs->trans("OtherOptions"), '', '');
|
||||||
|
print '<table class="noborder" width="100%">';
|
||||||
|
print '<tr class="liste_titre">';
|
||||||
|
print '<td>'.$langs->trans("Parameter").'</td>';
|
||||||
|
print '<td class="center" width="60">'.$langs->trans("Value").'</td>';
|
||||||
|
print "<td> </td>\n";
|
||||||
|
print "</tr>\n";
|
||||||
|
|
||||||
|
$substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2);
|
||||||
|
$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation");
|
||||||
|
$htmltext = '<i>'.$langs->trans("AvailableVariables").':<br>';
|
||||||
|
foreach($substitutionarray as $key => $val) $htmltext.=$key.'<br>';
|
||||||
|
$htmltext.='</i>';
|
||||||
|
|
||||||
|
print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
|
||||||
|
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||||
|
print '<input type="hidden" name="action" value="set_BOM_FREE_TEXT">';
|
||||||
|
print '<tr class="oddeven"><td colspan="2">';
|
||||||
|
print $form->textwithpicto($langs->trans("FreeLegalTextOnBOMs"), $langs->trans("AddCRIfTooLong").'<br><br>'.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'<br>';
|
||||||
|
$variablename='BOM_FREE_TEXT';
|
||||||
|
if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT))
|
||||||
|
{
|
||||||
|
print '<textarea name="'.$variablename.'" class="flat" cols="120">'.$conf->global->$variablename.'</textarea>';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
|
||||||
|
$doleditor=new DolEditor($variablename, $conf->global->$variablename, '', 80, 'dolibarr_notes');
|
||||||
|
print $doleditor->Create();
|
||||||
|
}
|
||||||
|
print '</td><td class="right">';
|
||||||
|
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
|
||||||
|
print "</td></tr>\n";
|
||||||
|
print '</form>';
|
||||||
|
|
||||||
|
//Use draft Watermark
|
||||||
|
|
||||||
|
print "<form method=\"post\" action=\"".$_SERVER["PHP_SELF"]."\">";
|
||||||
|
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||||
|
print "<input type=\"hidden\" name=\"action\" value=\"set_BOM_DRAFT_WATERMARK\">";
|
||||||
|
print '<tr class="oddeven"><td>';
|
||||||
|
print $form->textwithpicto($langs->trans("WatermarkOnDraftBOMs"), $htmltext, 1, 'help', '', 0, 2, 'watermarktooltip').'<br>';
|
||||||
|
print '</td><td>';
|
||||||
|
print '<input class="flat minwidth200" type="text" name="BOM_DRAFT_WATERMARK" value="'.$conf->global->BOM_DRAFT_WATERMARK.'">';
|
||||||
|
print '</td><td class="right">';
|
||||||
|
print '<input type="submit" class="button" value="'.$langs->trans("Modify").'">';
|
||||||
|
print "</td></tr>\n";
|
||||||
|
print '</form>';
|
||||||
|
|
||||||
|
print '</table>';
|
||||||
|
print '<br>';
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Notifications
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
print load_fiche_titre($langs->trans("Notifications"), '', '');
|
||||||
|
print '<table class="noborder" width="100%">';
|
||||||
|
print '<tr class="liste_titre">';
|
||||||
|
print '<td>'.$langs->trans("Parameter").'</td>';
|
||||||
|
print '<td class="center" width="60"></td>';
|
||||||
|
print '<td width="80"> </td>';
|
||||||
|
print "</tr>\n";
|
||||||
|
|
||||||
|
print '<tr class="oddeven"><td colspan="2">';
|
||||||
|
print $langs->trans("YouMayFindNotificationsFeaturesIntoModuleNotification").'<br>';
|
||||||
|
print '</td><td class="right">';
|
||||||
|
print "</td></tr>\n";
|
||||||
|
|
||||||
|
print '</table>';
|
||||||
|
*/
|
||||||
|
|
||||||
|
// End of page
|
||||||
|
llxFooter();
|
||||||
|
$db->close();
|
||||||
@ -300,7 +300,7 @@ foreach ($dirmodels as $reldir)
|
|||||||
if ($module->isEnabled())
|
if ($module->isEnabled())
|
||||||
{
|
{
|
||||||
|
|
||||||
print '<tr class="oddeven"><td>'.$module->nom."</td><td>\n";
|
print '<tr class="oddeven"><td>'.$module->name."</td><td>\n";
|
||||||
print $module->info();
|
print $module->info();
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2017 Laurent Destailleur <eldy@users.sourceforge.net>
|
/* Copyright (C) 2019 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
* Copyright (C) ---Put here your own copyright and developer email---
|
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -19,7 +18,7 @@
|
|||||||
/**
|
/**
|
||||||
* \file class/bom.class.php
|
* \file class/bom.class.php
|
||||||
* \ingroup bom
|
* \ingroup bom
|
||||||
* \brief This file is a CRUD class file for BillOfMaterials (Create/Read/Update/Delete)
|
* \brief This file is a CRUD class file for BOM (Create/Read/Update/Delete)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Put here all includes required by your class file
|
// Put here all includes required by your class file
|
||||||
@ -28,9 +27,9 @@ require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php';
|
|||||||
//require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php';
|
//require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class for BillOfMaterials
|
* Class for BOM
|
||||||
*/
|
*/
|
||||||
class BillOfMaterials extends CommonObject
|
class BOM extends CommonObject
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var string ID to identify managed object
|
* @var string ID to identify managed object
|
||||||
|
|||||||
@ -35,7 +35,7 @@ function bomAdminPrepareHead()
|
|||||||
$h = 0;
|
$h = 0;
|
||||||
$head = array();
|
$head = array();
|
||||||
|
|
||||||
$head[$h][0] = dol_buildpath("/bom/admin/setup.php", 1);
|
$head[$h][0] = DOL_URL_ROOT."/admin/bom.php";
|
||||||
$head[$h][1] = $langs->trans("Settings");
|
$head[$h][1] = $langs->trans("Settings");
|
||||||
$head[$h][2] = 'settings';
|
$head[$h][2] = 'settings';
|
||||||
$h++;
|
$h++;
|
||||||
|
|||||||
@ -977,7 +977,7 @@ class DolibarrModules // Can not be abstract, because we need to instantiate it
|
|||||||
*
|
*
|
||||||
* @return int Error count (0 if OK)
|
* @return int Error count (0 if OK)
|
||||||
*/
|
*/
|
||||||
private function _active()
|
protected function _active()
|
||||||
{
|
{
|
||||||
global $conf, $user;
|
global $conf, $user;
|
||||||
|
|
||||||
@ -1018,7 +1018,7 @@ class DolibarrModules // Can not be abstract, because we need to instantiate it
|
|||||||
*
|
*
|
||||||
* @return int Error count (0 if OK)
|
* @return int Error count (0 if OK)
|
||||||
*/
|
*/
|
||||||
private function _unactive()
|
protected function _unactive()
|
||||||
{
|
{
|
||||||
global $conf;
|
global $conf;
|
||||||
|
|
||||||
@ -1048,7 +1048,7 @@ class DolibarrModules // Can not be abstract, because we need to instantiate it
|
|||||||
* @param string $reldir Relative directory where to scan files
|
* @param string $reldir Relative directory where to scan files
|
||||||
* @return int <=0 if KO, >0 if OK
|
* @return int <=0 if KO, >0 if OK
|
||||||
*/
|
*/
|
||||||
private function _load_tables($reldir)
|
protected function _load_tables($reldir)
|
||||||
{
|
{
|
||||||
// phpcs:enable
|
// phpcs:enable
|
||||||
global $conf;
|
global $conf;
|
||||||
|
|||||||
160
htdocs/core/modules/bom/mod_bom_advanced.php
Normal file
160
htdocs/core/modules/bom/mod_bom_advanced.php
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
<?php
|
||||||
|
/* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||||
|
* Copyright (C) 2004-2007 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
|
* Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
|
||||||
|
* Copyright (C) 2008 Raphael Bertrand (Resultic) <raphael.bertrand@resultic.fr>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
* or see http://www.gnu.org/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file htdocs/core/modules/bom/mod_bom_advanced.php
|
||||||
|
* \ingroup bom
|
||||||
|
* \brief Fichier contenant la classe du modele de numerotation de reference de bom advanced
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once DOL_DOCUMENT_ROOT .'/core/modules/bom/modules_bom.php';
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class to manage customer Bom numbering rules advanced
|
||||||
|
*/
|
||||||
|
class mod_bom_advanced extends ModeleNumRefboms
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Dolibarr version of the loaded document
|
||||||
|
* @public string
|
||||||
|
*/
|
||||||
|
public $version = 'dolibarr'; // 'development', 'experimental', 'dolibarr'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string Error message
|
||||||
|
*/
|
||||||
|
public $error = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string name
|
||||||
|
*/
|
||||||
|
public $name='advanced';
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renvoi la description du modele de numerotation
|
||||||
|
*
|
||||||
|
* @return string Texte descripif
|
||||||
|
*/
|
||||||
|
public function info()
|
||||||
|
{
|
||||||
|
global $conf, $langs;
|
||||||
|
|
||||||
|
$langs->load("bills");
|
||||||
|
|
||||||
|
$form = new Form($this->db);
|
||||||
|
|
||||||
|
$texte = $langs->trans('GenericNumRefModelDesc')."<br>\n";
|
||||||
|
$texte.= '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
||||||
|
$texte.= '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
||||||
|
$texte.= '<input type="hidden" name="action" value="updateMask">';
|
||||||
|
$texte.= '<input type="hidden" name="maskconstBom" value="BOM_ADVANCED_MASK">';
|
||||||
|
$texte.= '<table class="nobBomnopadding" width="100%">';
|
||||||
|
|
||||||
|
$tooltip=$langs->trans("GenericMaskCodes", $langs->transnoentities("Bom"), $langs->transnoentities("Bom"));
|
||||||
|
$tooltip.=$langs->trans("GenericMaskCodes2");
|
||||||
|
$tooltip.=$langs->trans("GenericMaskCodes3");
|
||||||
|
$tooltip.=$langs->trans("GenericMaskCodes4a", $langs->transnoentities("Bom"), $langs->transnoentities("Bom"));
|
||||||
|
$tooltip.=$langs->trans("GenericMaskCodes5");
|
||||||
|
|
||||||
|
// Parametrage du prefix
|
||||||
|
$texte.= '<tr><td>'.$langs->trans("Mask").':</td>';
|
||||||
|
$texte.= '<td align="right">'.$form->textwithpicto('<input type="text" class="flat" size="24" name="maskBom" value="'.$conf->global->BOM_ADVANCED_MASK.'">', $tooltip, 1, 1).'</td>';
|
||||||
|
|
||||||
|
$texte.= '<td align="left" rowspan="2"> <input type="submit" class="button" value="'.$langs->trans("Modify").'" name="Button"></td>';
|
||||||
|
|
||||||
|
$texte.= '</tr>';
|
||||||
|
|
||||||
|
$texte.= '</table>';
|
||||||
|
$texte.= '</form>';
|
||||||
|
|
||||||
|
return $texte;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renvoi un exemple de numerotation
|
||||||
|
*
|
||||||
|
* @return string Example
|
||||||
|
*/
|
||||||
|
public function getExample()
|
||||||
|
{
|
||||||
|
global $conf,$langs,$mysoc;
|
||||||
|
|
||||||
|
$old_code_client=$mysoc->code_client;
|
||||||
|
$old_code_type=$mysoc->typent_code;
|
||||||
|
$mysoc->code_client='CCCCCCCCCC';
|
||||||
|
$mysoc->typent_code='TTTTTTTTTT';
|
||||||
|
$numExample = $this->getNextValue($mysoc, '');
|
||||||
|
$mysoc->code_client=$old_code_client;
|
||||||
|
$mysoc->typent_code=$old_code_type;
|
||||||
|
|
||||||
|
if (! $numExample)
|
||||||
|
{
|
||||||
|
$numExample = $langs->trans('NotConfigured');
|
||||||
|
}
|
||||||
|
return $numExample;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return next free value
|
||||||
|
*
|
||||||
|
* @param Societe $objsoc Object thirdparty
|
||||||
|
* @param Object $object Object we need next value for
|
||||||
|
* @return string Value if KO, <0 if KO
|
||||||
|
*/
|
||||||
|
public function getNextValue($objsoc, $object)
|
||||||
|
{
|
||||||
|
global $db,$conf;
|
||||||
|
|
||||||
|
require_once DOL_DOCUMENT_ROOT .'/core/lib/functions2.lib.php';
|
||||||
|
|
||||||
|
// We get cursor rule
|
||||||
|
$mask=$conf->global->BOM_ADVANCED_MASK;
|
||||||
|
|
||||||
|
if (! $mask)
|
||||||
|
{
|
||||||
|
$this->error='NotConfigured';
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$date = ($object->date_bom ? $object->date_bom : $object->date);
|
||||||
|
|
||||||
|
$numFinal=get_next_value($db, $mask, 'bom', 'ref', '', $objsoc, $date);
|
||||||
|
|
||||||
|
return $numFinal;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||||
|
/**
|
||||||
|
* Return next free value
|
||||||
|
*
|
||||||
|
* @param Societe $objsoc Object third party
|
||||||
|
* @param string $objforref Object for number to search
|
||||||
|
* @return string Next free value
|
||||||
|
*/
|
||||||
|
public function bom_get_num($objsoc, $objforref)
|
||||||
|
{
|
||||||
|
// phpcs:enable
|
||||||
|
return $this->getNextValue($objsoc, $objforref);
|
||||||
|
}
|
||||||
|
}
|
||||||
164
htdocs/core/modules/bom/mod_bom_standard.php
Normal file
164
htdocs/core/modules/bom/mod_bom_standard.php
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
<?php
|
||||||
|
/* Copyright (C) 2005-2010 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
|
* Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
* or see http://www.gnu.org/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file htdocs/core/modules/bom/mod_bom_standard.php
|
||||||
|
* \ingroup bom
|
||||||
|
* \brief File of class to manage customer order numbering rules standard
|
||||||
|
*/
|
||||||
|
require_once DOL_DOCUMENT_ROOT .'/core/modules/bom/modules_bom.php';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class to manage customer order numbering rules standard
|
||||||
|
*/
|
||||||
|
class mod_bom_standard extends ModeleNumRefboms
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Dolibarr version of the loaded document
|
||||||
|
* @public string
|
||||||
|
*/
|
||||||
|
public $version = 'dolibarr'; // 'development', 'experimental', 'dolibarr'
|
||||||
|
|
||||||
|
public $prefix='BOM';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string Error code (or message)
|
||||||
|
*/
|
||||||
|
public $error='';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string name
|
||||||
|
*/
|
||||||
|
public $name='standard';
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return description of numbering module
|
||||||
|
*
|
||||||
|
* @return string Text with description
|
||||||
|
*/
|
||||||
|
public function info()
|
||||||
|
{
|
||||||
|
global $langs;
|
||||||
|
return $langs->trans("SimpleNumRefModelDesc", $this->prefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renvoi un exemple de numerotation
|
||||||
|
*
|
||||||
|
* @return string Example
|
||||||
|
*/
|
||||||
|
public function getExample()
|
||||||
|
{
|
||||||
|
return $this->prefix."0501-0001";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test si les numeros deje en vigueur dans la base ne provoquent pas de
|
||||||
|
* de conflits qui empechera cette numerotation de fonctionner.
|
||||||
|
*
|
||||||
|
* @return boolean false si conflit, true si ok
|
||||||
|
*/
|
||||||
|
public function canBeActivated()
|
||||||
|
{
|
||||||
|
global $conf,$langs,$db;
|
||||||
|
|
||||||
|
$coyymm=''; $max='';
|
||||||
|
|
||||||
|
$posindice=8;
|
||||||
|
$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
|
||||||
|
$sql.= " FROM ".MAIN_DB_PREFIX."bom";
|
||||||
|
$sql.= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
|
||||||
|
$sql.= " AND entity = ".$conf->entity;
|
||||||
|
|
||||||
|
$resql=$db->query($sql);
|
||||||
|
if ($resql)
|
||||||
|
{
|
||||||
|
$row = $db->fetch_row($resql);
|
||||||
|
if ($row) { $coyymm = substr($row[0], 0, 6); $max=$row[0]; }
|
||||||
|
}
|
||||||
|
if ($coyymm && ! preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $coyymm))
|
||||||
|
{
|
||||||
|
$langs->load("errors");
|
||||||
|
$this->error=$langs->trans('ErrorNumRefModel', $max);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return next free value
|
||||||
|
*
|
||||||
|
* @param Societe $objsoc Object thirdparty
|
||||||
|
* @param Object $object Object we need next value for
|
||||||
|
* @return string Value if KO, <0 if KO
|
||||||
|
*/
|
||||||
|
public function getNextValue($objsoc, $object)
|
||||||
|
{
|
||||||
|
global $db,$conf;
|
||||||
|
|
||||||
|
// D'abord on recupere la valeur max
|
||||||
|
$posindice=8;
|
||||||
|
$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
|
||||||
|
$sql.= " FROM ".MAIN_DB_PREFIX."bom_bom";
|
||||||
|
$sql.= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
|
||||||
|
$sql.= " AND entity = ".$conf->entity;
|
||||||
|
|
||||||
|
$resql=$db->query($sql);
|
||||||
|
if ($resql)
|
||||||
|
{
|
||||||
|
$obj = $db->fetch_object($resql);
|
||||||
|
if ($obj) $max = intval($obj->max);
|
||||||
|
else $max=0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dol_syslog("mod_bom_standard::getNextValue", LOG_DEBUG);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//$date=time();
|
||||||
|
$date=$object->date;
|
||||||
|
$yymm = strftime("%y%m", $date);
|
||||||
|
|
||||||
|
if ($max >= (pow(10, 4) - 1)) $num=$max+1; // If counter > 9999, we do not format on 4 chars, we take number as it is
|
||||||
|
else $num = sprintf("%04s", $max+1);
|
||||||
|
|
||||||
|
dol_syslog("mod_bom_standard::getNextValue return ".$this->prefix.$yymm."-".$num);
|
||||||
|
return $this->prefix.$yymm."-".$num;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||||
|
/**
|
||||||
|
* Return next free value
|
||||||
|
*
|
||||||
|
* @param Societe $objsoc Object third party
|
||||||
|
* @param string $objforref Object for number to search
|
||||||
|
* @return string Next free value
|
||||||
|
*/
|
||||||
|
public function bom_get_num($objsoc, $objforref)
|
||||||
|
{
|
||||||
|
// phpcs:enable
|
||||||
|
return $this->getNextValue($objsoc, $objforref);
|
||||||
|
}
|
||||||
|
}
|
||||||
150
htdocs/core/modules/bom/modules_bom.php
Normal file
150
htdocs/core/modules/bom/modules_bom.php
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
<?php
|
||||||
|
/* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||||
|
* Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
|
* Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
|
||||||
|
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||||
|
* Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr>
|
||||||
|
* Copyright (C) 2012 Juanjo Menent <jmenent@2byte.es>
|
||||||
|
* Copyright (C) 2014 Marcos García <marcosgdf@gmail.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
* or see http://www.gnu.org/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file htdocs/core/modules/bom/modules_bom.php
|
||||||
|
* \ingroup bom
|
||||||
|
* \brief File that contains parent class for boms models
|
||||||
|
* and parent class for boms numbering models
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; // required for use by classes that inherit
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parent class for boms models
|
||||||
|
*/
|
||||||
|
abstract class ModelePDFBoms extends CommonDocGenerator
|
||||||
|
{
|
||||||
|
|
||||||
|
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||||
|
/**
|
||||||
|
* Return list of active generation modules
|
||||||
|
*
|
||||||
|
* @param DoliDB $db Database handler
|
||||||
|
* @param integer $maxfilenamelength Max length of value to show
|
||||||
|
* @return array List of templates
|
||||||
|
*/
|
||||||
|
public static function liste_modeles($db, $maxfilenamelength = 0)
|
||||||
|
{
|
||||||
|
// phpcs:enable
|
||||||
|
global $conf;
|
||||||
|
|
||||||
|
$type = 'order';
|
||||||
|
$list = array();
|
||||||
|
|
||||||
|
include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
|
||||||
|
$list = getListOfModels($db, $type, $maxfilenamelength);
|
||||||
|
|
||||||
|
return $list;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parent class to manage numbering of BOMs
|
||||||
|
*/
|
||||||
|
abstract class ModeleNumRefBoms
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string Error code (or message)
|
||||||
|
*/
|
||||||
|
public $error='';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return if a module can be used or not
|
||||||
|
*
|
||||||
|
* @return boolean true if module can be used
|
||||||
|
*/
|
||||||
|
public function isEnabled()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renvoie la description par defaut du modele de numerotation
|
||||||
|
*
|
||||||
|
* @return string Texte descripif
|
||||||
|
*/
|
||||||
|
public function info()
|
||||||
|
{
|
||||||
|
global $langs;
|
||||||
|
$langs->load("mrp");
|
||||||
|
return $langs->trans("NoDescription");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renvoie un exemple de numerotation
|
||||||
|
*
|
||||||
|
* @return string Example
|
||||||
|
*/
|
||||||
|
public function getExample()
|
||||||
|
{
|
||||||
|
global $langs;
|
||||||
|
$langs->load("mrp");
|
||||||
|
return $langs->trans("NoExample");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test si les numeros deja en vigueur dans la base ne provoquent pas de conflits qui empecheraient cette numerotation de fonctionner.
|
||||||
|
*
|
||||||
|
* @return boolean false si conflit, true si ok
|
||||||
|
*/
|
||||||
|
public function canBeActivated()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renvoie prochaine valeur attribuee
|
||||||
|
*
|
||||||
|
* @param Societe $objsoc Object thirdparty
|
||||||
|
* @param Object $object Object we need next value for
|
||||||
|
* @return string Valeur
|
||||||
|
*/
|
||||||
|
public function getNextValue($objsoc, $object)
|
||||||
|
{
|
||||||
|
global $langs;
|
||||||
|
return $langs->trans("NotAvailable");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renvoie version du module numerotation
|
||||||
|
*
|
||||||
|
* @return string Valeur
|
||||||
|
*/
|
||||||
|
public function getVersion()
|
||||||
|
{
|
||||||
|
global $langs;
|
||||||
|
$langs->load("admin");
|
||||||
|
|
||||||
|
if ($this->version == 'development') return $langs->trans("VersionDevelopment");
|
||||||
|
if ($this->version == 'experimental') return $langs->trans("VersionExperimental");
|
||||||
|
if ($this->version == 'dolibarr') return DOL_VERSION;
|
||||||
|
if ($this->version) return $this->version;
|
||||||
|
return $langs->trans("NotAvailable");
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -42,13 +42,6 @@ class mod_commande_marbre extends ModeleNumRefCommandes
|
|||||||
*/
|
*/
|
||||||
public $error='';
|
public $error='';
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string
|
|
||||||
* @deprecated
|
|
||||||
* @see name
|
|
||||||
*/
|
|
||||||
public $nom='Marbre';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string name
|
* @var string name
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -44,13 +44,6 @@ class mod_commande_saphir extends ModeleNumRefCommandes
|
|||||||
*/
|
*/
|
||||||
public $error = '';
|
public $error = '';
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string nom
|
|
||||||
* @deprecated
|
|
||||||
* @see name
|
|
||||||
*/
|
|
||||||
public $nom='Saphir';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string name
|
* @var string name
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -66,10 +66,8 @@ abstract class ModelePDFCommandes extends CommonDocGenerator
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \class ModeleNumRefCommandes
|
* Parent class to manage numbering of Sale Orders
|
||||||
* \brief Classe mere des modeles de numerotation des references de commandes
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
abstract class ModeleNumRefCommandes
|
abstract class ModeleNumRefCommandes
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -46,7 +46,7 @@ class modBom extends DolibarrModules
|
|||||||
|
|
||||||
// Id for module (must be unique).
|
// Id for module (must be unique).
|
||||||
// Use here a free id (See in Home -> System information -> Dolibarr for list of used modules id).
|
// Use here a free id (See in Home -> System information -> Dolibarr for list of used modules id).
|
||||||
$this->numero = 650; // TODO Go on page https://wiki.dolibarr.org/index.php/List_of_modules_id to reserve id number for your module
|
$this->numero = 650;
|
||||||
// Key text used to identify module (for permissions, menus, etc...)
|
// Key text used to identify module (for permissions, menus, etc...)
|
||||||
$this->rights_class = 'bom';
|
$this->rights_class = 'bom';
|
||||||
|
|
||||||
@ -100,7 +100,7 @@ class modBom extends DolibarrModules
|
|||||||
$this->dirs = array("/bom/temp");
|
$this->dirs = array("/bom/temp");
|
||||||
|
|
||||||
// Config pages. Put here list of php page, stored into bom/admin directory, to use to setup module.
|
// Config pages. Put here list of php page, stored into bom/admin directory, to use to setup module.
|
||||||
$this->config_page_url = array("setup.php@bom");
|
$this->config_page_url = array("bom.php");
|
||||||
|
|
||||||
// Dependencies
|
// Dependencies
|
||||||
$this->hidden = false; // A condition to hide module
|
$this->hidden = false; // A condition to hide module
|
||||||
@ -121,7 +121,9 @@ class modBom extends DolibarrModules
|
|||||||
// 1=>array('BILLOFMATERIALS_MYNEWCONST2','chaine','myvalue','This is another constant to add',0, 'current', 1)
|
// 1=>array('BILLOFMATERIALS_MYNEWCONST2','chaine','myvalue','This is another constant to add',0, 'current', 1)
|
||||||
// );
|
// );
|
||||||
$this->const = array(
|
$this->const = array(
|
||||||
//1=>array('BILLOFMATERIALS_MYCONSTANT', 'chaine', 'avalue', 'This is a constant to add', 1, 'allentities', 1)
|
1=>array('BOM_ADDON_PDF', 'chaine', 'avalue', 'Name of PDF model of BOM', 0),
|
||||||
|
2=>array('BOM_ADDON', 'chaine', 'mod_bom_standard', 'Name of numbering rules of BOM', 0),
|
||||||
|
3=>array('BOM_ADDON_PDF_ODT_PATH', 'chaine', 'DOL_DATA_ROOT/doctemplates/boms', '', 0)
|
||||||
);
|
);
|
||||||
|
|
||||||
// Some keys to add into the overwriting translation tables
|
// Some keys to add into the overwriting translation tables
|
||||||
|
|||||||
@ -1,3 +1,8 @@
|
|||||||
|
BOMsSetup=Setup of module BOM
|
||||||
ListOfBOMs=List of BOMs
|
ListOfBOMs=List of BOMs
|
||||||
NewBOM=New BOM
|
NewBOM=New BOM
|
||||||
ProductBOMHelp=Product to create with this BOM
|
ProductBOMHelp=Product to create with this BOM
|
||||||
|
BOMsNumberingModules=BOMs numbering templates
|
||||||
|
BOMsModelModule=BOMS document templates
|
||||||
|
FreeLegalTextOnBOMs=Free text on document of BOMs
|
||||||
|
WatermarkOnDraftBOMs=Watermark on draft BOMs
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user