From 716c2bb531b790afccec28da9365964224ad1af7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 31 Oct 2019 22:46:34 +0100 Subject: [PATCH] Work on MO --- htdocs/admin/mrp.php | 522 ++++++++++++++++++ .../bom/doc/doc_generic_bom_odt.modules.php | 2 +- htdocs/core/modules/bom/modules_bom.php | 2 +- htdocs/core/modules/modBom.class.php | 15 +- htdocs/core/modules/modMrp.class.php | 37 +- .../mrp/doc/doc_generic_mo_odt.modules.php | 4 +- .../doctemplates/boms/template_bom.odt | Bin 17591 -> 18723 bytes .../install/doctemplates/mrps/template_mo.odt | Bin 0 -> 18089 bytes htdocs/langs/en_US/mrp.lang | 8 +- htdocs/mrp/admin/setup.php | 151 ----- 10 files changed, 573 insertions(+), 168 deletions(-) create mode 100644 htdocs/admin/mrp.php create mode 100644 htdocs/install/doctemplates/mrps/template_mo.odt delete mode 100644 htdocs/mrp/admin/setup.php diff --git a/htdocs/admin/mrp.php b/htdocs/admin/mrp.php new file mode 100644 index 00000000000..f3121faa70d --- /dev/null +++ b/htdocs/admin/mrp.php @@ -0,0 +1,522 @@ + + * + * 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 . + */ + +/** + * \file htdocs/admin/mrp.php + * \ingroup mrp + * \brief Setup page of module MRP + */ + +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.'/mrp/class/mo.class.php'; +require_once DOL_DOCUMENT_ROOT.'/mrp/lib/mrp_mo.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/mrp/lib/mrp.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 = 'mrp'; + + +/* + * Actions + */ + +include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; + +if ($action == 'updateMask') +{ + $maskconstmrp=GETPOST('maskconstMo', 'alpha'); + $maskmrp=GETPOST('maskMo', 'alpha'); + + if ($maskconstmrp) $res = dolibarr_set_const($db, $maskconstmrp, $maskmrp, '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'); + + $mo = new MO($db); + $mrp->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/mrp/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($mrp, $langs) > 0) + { + header("Location: ".DOL_URL_ROOT."/document.php?modulepart=mrp&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->MRP_MO_ADDON_PDF == "$value") dolibarr_del_const($db, 'MRP_MO_ADDON_PDF', $conf->entity); + } +} + +// Set default model +elseif ($action == 'setdoc') +{ + if (dolibarr_set_const($db, "MRP_MO_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->MRP_MO_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, "MRP_MO_ADDON", $value, 'chaine', 0, '', $conf->entity); +} + +elseif ($action == 'set_MRP_MO_DRAFT_WATERMARK') +{ + $draft = GETPOST("MRP_MO_DRAFT_WATERMARK"); + $res = dolibarr_set_const($db, "MRP_MO_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_MRP_MO_FREE_TEXT') +{ + $freetext = GETPOST("MRP_MO_FREE_TEXT", 'none'); // No alpha here, we want exact string + + $res = dolibarr_set_const($db, "MRP_MO_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'); + } +} + + +/* + * View + */ + +$form=new Form($db); + +$dirmodels=array_merge(array('/'), (array) $conf->modules_parts['models']); + +llxHeader("", $langs->trans("MrpSetupPage")); + +$linkback=''.$langs->trans("BackToModuleList").''; +print load_fiche_titre($langs->trans("MrpSetupPage"), $linkback, 'title_setup'); + +$head = mrpAdminPrepareHead(); + +dol_fiche_head($head, 'settings', $langs->trans("MOs"), -1, 'mrp'); + +/* + * MOs Numbering model + */ + +print load_fiche_titre($langs->trans("MOsNumberingModules"), '', ''); + +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''."\n"; + +clearstatcache(); + +foreach ($dirmodels as $reldir) +{ + $dir = dol_buildpath($reldir."core/modules/mrp/"); + + if (is_dir($dir)) + { + $handle = opendir($dir); + if (is_resource($handle)) + { + while (($file = readdir($handle))!==false) + { + if (substr($file, 0, 8) == 'mod_mo_' && 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 ''; + + // Show example of numbering model + print ''."\n"; + + print ''; + + $mrp=new MO($db); + $mrp->initAsSpecimen(); + + // Info + $htmltooltip=''; + $htmltooltip.=''.$langs->trans("Version").': '.$module->getVersion().'
'; + $mrp->type=0; + $nextval=$module->getNextValue($mysoc, $mrp); + 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.'
'; + } else { + $htmltooltip.=$langs->trans($module->error).'
'; + } + } + + print ''; + + print "\n"; + } + } + } + closedir($handle); + } + } +} +print "
'.$langs->trans("Name").''.$langs->trans("Description").''.$langs->trans("Example").''.$langs->trans("Status").''.$langs->trans("ShortInfo").'
'.$module->name."\n"; + print $module->info(); + print ''; + $tmp=$module->getExample(); + if (preg_match('/^Error/', $tmp)) print '
'.$langs->trans($tmp).'
'; + elseif ($tmp=='NotConfigured') print $langs->trans($tmp); + else print $tmp; + print '
'; + if ($conf->global->MRP_MO_ADDON == $file) + { + print img_picto($langs->trans("Activated"), 'switch_on'); + } + else + { + print ''; + print img_picto($langs->trans("Disabled"), 'switch_off'); + print ''; + } + print ''; + print $form->textwithpicto('', $htmltooltip, 1, 0); + print '

\n"; + + +/* + * Document templates generators + */ + +print load_fiche_titre($langs->trans("MOsModelModule"), '', ''); + +// 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 "\n"; +print "\n"; +print ''; +print ''; +print '\n"; +print '\n"; +print ''; +print ''; +print "\n"; + +clearstatcache(); + +foreach ($dirmodels as $reldir) +{ + foreach (array('','/doc') as $valdir) + { + $dir = dol_buildpath($reldir."core/modules/mrp".$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 ''; + + // Active + if (in_array($name, $def)) + { + print ''; + } + else + { + print '"; + } + + // Default + print ''; + + // Info + $htmltooltip = ''.$langs->trans("Name").': '.$module->name; + $htmltooltip.='
'.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown")); + if ($module->type == 'pdf') + { + $htmltooltip.='
'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur; + } + $htmltooltip.='

'.$langs->trans("FeaturesSupported").':'; + $htmltooltip.='
'.$langs->trans("MultiLanguage").': '.yn($module->option_multilang, 1, 1); + $htmltooltip.='
'.$langs->trans("WatermarkOnDraftMOs").': '.yn($module->option_draft_watermark, 1, 1); + + + print ''; + + // Preview + print ''; + + print "\n"; + } + } + } + } + } + } + } +} + +print '
'.$langs->trans("Name").''.$langs->trans("Description").''.$langs->trans("Status")."'.$langs->trans("Default")."'.$langs->trans("ShortInfo").''.$langs->trans("Preview").'
'; + print (empty($module->name)?$name:$module->name); + print "\n"; + if (method_exists($module, 'info')) print $module->info($langs); + else print $module->description; + print ''."\n"; + print ''; + print img_picto($langs->trans("Enabled"), 'switch_on'); + print ''; + print ''."\n"; + print 'scandir.'&label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"), 'switch_off').''; + print "'; + if ($conf->global->MRP_MO_ADDON_PDF == $name) + { + print img_picto($langs->trans("Default"), 'on'); + } + else + { + print 'scandir.'&label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"), 'off').''; + } + print ''; + print $form->textwithpicto('', $htmltooltip, 1, 0); + print ''; + if ($module->type == 'pdf') + { + print ''.img_object($langs->trans("Preview"), 'bill').''; + } + else + { + print img_object($langs->trans("PreviewNotAvailable"), 'generic'); + } + print '
'; +print "
"; + +/* + * Other options + */ + +print load_fiche_titre($langs->trans("OtherOptions"), '', ''); +print ''; +print ''; +print ''; +print ''; +print "\n"; +print "\n"; + +$substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); +$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); +$htmltext = ''.$langs->trans("AvailableVariables").':
'; +foreach($substitutionarray as $key => $val) $htmltext.=$key.'
'; +$htmltext.='
'; + +print ''; +print ''; +print ''; +print '\n"; +print ''; + +//Use draft Watermark + +print ""; +print ''; +print ""; +print '\n"; +print ''; + +print '
'.$langs->trans("Parameter").''.$langs->trans("Value").' 
'; +print $form->textwithpicto($langs->trans("FreeLegalTextOnMOs"), $langs->trans("AddCRIfTooLong").'

'.$htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'
'; +$variablename='MRP_MO_FREE_TEXT'; +if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) +{ + print ''; +} +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 '
'; +print ''; +print "
'; +print $form->textwithpicto($langs->trans("WatermarkOnDraftMOs"), $htmltext, 1, 'help', '', 0, 2, 'watermarktooltip').'
'; +print '
'; +print ''; +print ''; +print ''; +print "
'; +print '
'; + + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php b/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php index acbb2ae0b36..38358222282 100644 --- a/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php +++ b/htdocs/core/modules/bom/doc/doc_generic_bom_odt.modules.php @@ -38,7 +38,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php'; /** * Class to build documents using ODF templates generator */ -class doc_generic_bom_odt extends ModelePDFBOMs +class doc_generic_bom_odt extends ModelePDFBoms { /** * Issuer diff --git a/htdocs/core/modules/bom/modules_bom.php b/htdocs/core/modules/bom/modules_bom.php index 45bca8a38b3..f8f29fec2e6 100644 --- a/htdocs/core/modules/bom/modules_bom.php +++ b/htdocs/core/modules/bom/modules_bom.php @@ -36,7 +36,7 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; // requir /** * Parent class for boms models */ -abstract class ModelePDFBom extends CommonDocGenerator +abstract class ModelePDFBoms extends CommonDocGenerator { // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps diff --git a/htdocs/core/modules/modBom.class.php b/htdocs/core/modules/modBom.class.php index 1700f15afd7..47daf430873 100644 --- a/htdocs/core/modules/modBom.class.php +++ b/htdocs/core/modules/modBom.class.php @@ -189,7 +189,7 @@ class modBom extends DolibarrModules // Boxes/Widgets // Add here list of php file(s) stored in bom/core/boxes that contains class to show a widget. $this->boxes = array( - 0=>array('file'=>'box_boms.php','note'=>'','enabledbydefaulton'=>'Home') + 0=>array('file' => 'box_boms.php', 'note' => '', 'enabledbydefaulton' => 'Home') ); @@ -203,7 +203,7 @@ class modBom extends DolibarrModules // ); - // Permissions + // Permissions provided by this module $this->rights = array(); // Permission array used by this module $r=0; @@ -228,7 +228,7 @@ class modBom extends DolibarrModules $this->rights[$r][5] = ''; // In php code, permission will be checked by test if ($user->rights->bom->level1->level2) - // Main menu entries + // Main menu entries to add $this->menu = array(); // List of menus to add $r=0; @@ -323,9 +323,8 @@ class modBom extends DolibarrModules if ($result < 0) return -1; // Do not activate module if not allowed errors found on module SQL queries (the _load_table run sql with run_sql with error allowed parameter to 'default') // Create extrafields - include_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; - $extrafields = new ExtraFields($this->db); - + //include_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; + //$extrafields = new ExtraFields($this->db); //$result1=$extrafields->addExtraField('myattr1', "New Attr 1 label", 'boolean', 1, 3, 'thirdparty', 0, 0, '', '', 1, '', 0, 0, '', '', 'mrp', '$conf->bom->enabled'); //$result2=$extrafields->addExtraField('myattr2', "New Attr 2 label", 'varchar', 1, 10, 'project', 0, 0, '', '', 1, '', 0, 0, '', '', 'mrp', '$conf->bom->enabled'); //$result3=$extrafields->addExtraField('myattr3', "New Attr 3 label", 'varchar', 1, 10, 'bank_account', 0, 0, '', '', 1, '', 0, 0, '', '', 'mrp', '$conf->bom->enabled'); @@ -357,8 +356,8 @@ class modBom extends DolibarrModules } $sql = array( - "DELETE FROM ".MAIN_DB_PREFIX."document_model WHERE nom = '".$this->db->escape('alpha')."' AND type = 'bom' AND entity = ".$conf->entity, - "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('".$this->db->escape('alpha')."', 'bom', ".$conf->entity.")" + "DELETE FROM ".MAIN_DB_PREFIX."document_model WHERE nom = '".$this->db->escape('standard')."' AND type = 'bom' AND entity = ".$conf->entity, + "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('".$this->db->escape('standard')."', 'bom', ".$conf->entity.")" ); return $this->_init($sql, $options); diff --git a/htdocs/core/modules/modMrp.class.php b/htdocs/core/modules/modMrp.class.php index 53f778d063f..248179b5447 100644 --- a/htdocs/core/modules/modMrp.class.php +++ b/htdocs/core/modules/modMrp.class.php @@ -58,7 +58,7 @@ class modMrp extends DolibarrModules // Module label (no space allowed), used if translation string 'ModuleMrpName' not found (Mrp is name of module). $this->name = preg_replace('/^mod/i', '', get_class($this)); // Module description, used if translation string 'ModuleMrpDesc' not found (Mrp is name of module). - $this->description = "MRPDescription"; + $this->description = "Module to Manage Manufacturing Orders (MO)"; // Used only if file README.md and README-LL.md not found. $this->descriptionlong = "Module to Manage Manufacturing Orders (MO)"; // Possible values for version are: 'development', 'experimental', 'dolibarr', 'dolibarr_deprecated' or a version string like 'x.y.z' @@ -113,7 +113,7 @@ class modMrp extends DolibarrModules // Example: this->dirs = array("/mrp/temp","/mrp/subdir"); $this->dirs = array("/mrp/temp"); // Config pages. Put here list of php page, stored into mrp/admin directory, to use to setup module. - $this->config_page_url = array("setup.php@mrp"); + $this->config_page_url = array("mrp.php"); // Dependencies // A condition to hide module $this->hidden = false; @@ -135,7 +135,9 @@ class modMrp extends DolibarrModules // 2 => array('MRP_MYNEWCONST2', 'chaine', 'myvalue', 'This is another constant to add', 0, 'current', 1) // ); $this->const = array( - // 1 => array('MRP_MYCONSTANT', 'chaine', 'avalue', 'This is a constant to add', 1, 'allentities', 1) + 1=>array('MRP_MO_ADDON_PDF', 'chaine', 'alpha', 'Name of PDF model of BOM', 0), + 2=>array('MRP_MO_ADDON', 'chaine', 'mod_bom_standard', 'Name of numbering rules of BOM', 0), + 3=>array('MRP_MO_ADDON_PDF_ODT_PATH', 'chaine', 'DOL_DATA_ROOT/doctemplates/boms', '', 0) ); // Some keys to add into the overwriting translation tables @@ -312,6 +314,8 @@ class modMrp extends DolibarrModules */ public function init($options = '') { + global $conf, $langs; + $result=$this->_load_tables('/mrp/sql/'); if ($result < 0) return -1; // Do not activate module if error 'not allowed' returned when loading module SQL queries (the _load_table run sql with run_sql with the error allowed parameter set to 'default') @@ -324,7 +328,34 @@ class modMrp extends DolibarrModules //$result4=$extrafields->addExtraField('myattr4', "New Attr 4 label", 'select', 1, 3, 'thirdparty', 0, 1, '', array('options'=>array('code1'=>'Val1','code2'=>'Val2','code3'=>'Val3')), 1,'', 0, 0, '', '', 'mrp', '$conf->mrp->enabled'); //$result5=$extrafields->addExtraField('myattr5', "New Attr 5 label", 'text', 1, 10, 'user', 0, 0, '', '', 1, '', 0, 0, '', '', 'mrp', '$conf->mrp->enabled'); + // Permissions + $this->remove($options); + $sql = array(); + + // ODT template + $src=DOL_DOCUMENT_ROOT.'/install/doctemplates/mrps/template_mo.odt'; + $dirodt=DOL_DATA_ROOT.'/doctemplates/mrps'; + $dest=$dirodt.'/template_mo.odt'; + + if (file_exists($src) && ! file_exists($dest)) + { + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + dol_mkdir($dirodt); + $result=dol_copy($src, $dest, 0, 0); + if ($result < 0) + { + $langs->load("errors"); + $this->error=$langs->trans('ErrorFailToCopyFile', $src, $dest); + return 0; + } + } + + $sql = array( + "DELETE FROM ".MAIN_DB_PREFIX."document_model WHERE nom = '".$this->db->escape('standard')."' AND type = 'mo' AND entity = ".$conf->entity, + "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('".$this->db->escape('standard')."', 'mo', ".$conf->entity.")" + ); + return $this->_init($sql, $options); } diff --git a/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php b/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php index 9beb300ebb0..0447694465f 100644 --- a/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php +++ b/htdocs/core/modules/mrp/doc/doc_generic_mo_odt.modules.php @@ -27,7 +27,7 @@ * \brief File of class to build ODT documents for MOs */ -require_once DOL_DOCUMENT_ROOT.'/core/modules/bom/modules_bom.php'; +require_once DOL_DOCUMENT_ROOT.'/core/modules/mrp/modules_mrp.php'; require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; @@ -38,7 +38,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php'; /** * Class to build documents using ODF templates generator */ -class doc_generic_mo_odt extends ModelePDFMOs +class doc_generic_mo_odt extends ModelePDFMos { /** * Issuer diff --git a/htdocs/install/doctemplates/boms/template_bom.odt b/htdocs/install/doctemplates/boms/template_bom.odt index 344fcfa391aefbfef2b4ae85c5436e6c707adaa2..9eea32e4197b0c004fb2526d014698dec8ff194d 100644 GIT binary patch literal 18723 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 literal 17591 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 S5Ri|*ChK4Q4*~!0PyYwa2 - * Copyright (C) 2019 Alicealalalamdskfldmjgdfgdfhfghgfh Adminson - * - * 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 . - */ - -/** - * \file mrp/admin/setup.php - * \ingroup mrp - * \brief Mrp setup page. - */ - -// Load Dolibarr environment -$res=0; -// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined) -if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; -// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME -$tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1; -while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; } -if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/main.inc.php"; -if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include dirname(substr($tmp, 0, ($i+1)))."/main.inc.php"; -// Try main.inc.php using relative path -if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php"; -if (! $res && file_exists("../../../main.inc.php")) $res=@include "../../../main.inc.php"; -if (! $res) die("Include of main fails"); - -global $langs, $user; - -// Libraries -require_once DOL_DOCUMENT_ROOT . "/core/lib/admin.lib.php"; -require_once '../lib/mrp.lib.php'; -//require_once "../class/myclass.class.php"; - -// Translations -$langs->loadLangs(array("admin", "mrp")); - -// Access control -if (! $user->admin) accessforbidden(); - -// Parameters -$action = GETPOST('action', 'alpha'); -$backtopage = GETPOST('backtopage', 'alpha'); - -$arrayofparameters=array( - 'MRP_MYPARAM1'=>array('css'=>'minwidth200','enabled'=>1), - 'MRP_MYPARAM2'=>array('css'=>'minwidth500','enabled'=>1) -); - - - -/* - * Actions - */ - -if ((float) DOL_VERSION >= 6) -{ - include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; -} - - - -/* - * View - */ - -$page_name = "MrpSetup"; -llxHeader('', $langs->trans($page_name)); - -// Subheader -$linkback = ''.$langs->trans("BackToModuleList").''; - -print load_fiche_titre($langs->trans($page_name), $linkback, 'object_mrp'); - -// Configuration header -$head = mrpAdminPrepareHead(); -dol_fiche_head($head, 'settings', '', -1, "mrp"); - -// Setup page goes here -echo ''.$langs->trans("MrpSetupPage").'

'; - - -if ($action == 'edit') -{ - print '

'; - print ''; - print ''; - - print ''; - print ''; - - foreach($arrayofparameters as $key => $val) - { - print ''; - } - print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'; - $tooltiphelp = (($langs->trans($key.'Tooltip') != $key.'Tooltip') ? $langs->trans($key.'Tooltip') : ''); - print $form->textwithpicto($langs->trans($key), $tooltiphelp); - print '
'; - - print '
'; - print ''; - print '
'; - - print '
'; - print '
'; -} -else -{ - if (! empty($arrayofparameters)) - { - print ''; - print ''; - - foreach($arrayofparameters as $key => $val) - { - print ''; - } - - print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'; - $tooltiphelp = (($langs->trans($key.'Tooltip') != $key.'Tooltip') ? $langs->trans($key.'Tooltip') : ''); - print $form->textwithpicto($langs->trans($key), $tooltiphelp); - print '' . $conf->global->$key . '
'; - - print '
'; - print ''.$langs->trans("Modify").''; - print '
'; - } - else - { - print '
'.$langs->trans("NothingToSetup"); - } -} - - -// Page end -dol_fiche_end(); - -llxFooter(); -$db->close();