diff --git a/ChangeLog.md b/ChangeLog.md index 7a67d8d..d9e88d6 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,13 +1,20 @@ -# DC1 ChangeLog - -## 1.1.1 (05/11/2025) - -- Correction d'un problème empêchant la gestion correcte des permissions - -1.1.1 (03/09/2025) - -- Ajout de la version 2019 du formulaire DC1 - -## 1.0.0 (30/09/2025) - -- Création du module dédié aux Formulaires DC1 +# DC1 ChangeLog + +## 1.1.2 (05/11/2025) + +- Harmonisation complète des traductions en_US/fr_FR +- Ajout d'une page d'accueil d'administration documentée +- Rédaction d'un README bilingue et mise à jour des informations de version +- Correction du chargement des dépendances en environnement custom + +## 1.1.1 (05/11/2025) + +- Correction d'un problème empêchant la gestion correcte des permissions + +1.1.1 (03/09/2025) + +- Ajout de la version 2019 du formulaire DC1 + +## 1.0.0 (30/09/2025) + +- Création du module dédié aux Formulaires DC1 diff --git a/README.md b/README.md index 100b938..a69c7fe 100644 --- a/README.md +++ b/README.md @@ -1 +1,49 @@ -README \ No newline at end of file +# Module DC1 / Module DC1 + +## 🇬🇧 English + +### Overview +- French public procurement support: provide assistance with the DC1 application letter form. +- Pre-fills the DC1 template from Dolibarr commercial proposals and linked third parties. +- Generates PDF outputs compliant with the 2016 and 2019 official templates. + +### Requirements +- Dolibarr 16.0 or later with the Multicompany module when required. +- PHP 7.4+ and a MySQL-compatible database. + +### Installation +1. Copy the `dc1` directory into Dolibarr's `custom` folder. +2. Enable the module from the Dolibarr module configuration page. +3. Apply database migrations from `sql/llx_dc1.sql` using the Dolibarr interface. + +### Configuration +- Navigate to **Setup > Modules > DC1** to activate the feature flag. +- Adjust permissions so that only authorised roles can edit the DC1 tab. + +### Usage +- Open a commercial proposal and fill in the **DC1** tab. +- Generate the document via the **Proposition commerciale** tab using the DC1 model. + +## 🇫🇷 Français + +### Aperçu +- Assistance aux marchés publics : facilite la lettre de candidature DC1. +- Pré-remplit le modèle DC1 depuis les propositions commerciales et les tiers liés. +- Génère des PDF conformes aux modèles officiels 2016 et 2019. + +### Prérequis +- Dolibarr 16.0 ou plus avec le module Multicompany si nécessaire. +- PHP 7.4+ et une base de données compatible MySQL. + +### Installation +1. Copier le répertoire `dc1` dans le dossier `custom` de Dolibarr. +2. Activer le module depuis la page de configuration des modules Dolibarr. +3. Appliquer les migrations SQL depuis `sql/llx_dc1.sql` via l'interface Dolibarr. + +### Configuration +- Aller dans **Configuration > Modules > DC1** pour activer le paramètre fonctionnel. +- Ajuster les permissions afin que seules les personnes autorisées modifient l'onglet DC1. + +### Utilisation +- Ouvrir une proposition commerciale et remplir l'onglet **DC1**. +- Générer le document depuis l'onglet **Proposition commerciale** en choisissant le modèle DC1. diff --git a/admin/index.php b/admin/index.php index 7db0dd9..2384839 100644 --- a/admin/index.php +++ b/admin/index.php @@ -1 +1,79 @@ -Url not available \ No newline at end of file + + * + * 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 admin/index.php + * \ingroup dc1 + * \brief DC1 module administration home page. + */ + +$res = @include '../../main.inc.php'; +if (! $res) { + $res = @include '../../../main.inc.php'; +} + +require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php'; +dol_include_once('/dc1/lib/dc1.lib.php'); +dol_include_once('/dc1/core/modules/modDc1.class.php'); + +if (empty($user->admin)) { + accessforbidden(); +} + +$langs->loadLangs(array('admin', 'dc1@dc1')); + +$module = new modDc1($db); + +llxHeader('', $langs->trans('DC1AdminHomeTitle')); + +$head = dc1AdminPrepareHead(); +dol_fiche_head($head, 'home', $langs->trans('Module450005Name'), 0, ''); + +// EN: Provide a short introduction for administrators. +// FR: Fournit une courte introduction pour les administrateurs. +print '

' . $langs->trans('DC1AdminHomeIntro') . '

'; + +print '
'; + print '
'; + // EN: Present the module purpose for administrators. + // FR: Présente l'objectif du module aux administrateurs. + print '
'; + print '

' . $langs->trans('Module450005Desc') . '

'; + print '
'; + // EN: Offer quick access to the official documentation. + // FR: Offre un accès rapide à la documentation officielle. + print '
'; + print '

' . $langs->trans('DC1AdminHomeDocumentation') . '

'; + print '

' . $langs->trans('DC1AdminHomeDocumentationLink') . '

'; + print '
'; + print '
'; + print '
'; + // EN: Display module version and contact reference. + // FR: Affiche la version du module et le contact de référence. + print '
'; + print '

' . $langs->trans('DC1AdminHomeVersion') . '

'; + print '

' . dol_escape_htmltag($module->version) . '

'; + print '
'; + print '
'; + print '

' . $langs->trans('DC1AdminHomeSupport') . '

'; + print '

' . $langs->trans('DC1AdminHomeSupportLink') . '

'; + print '
'; + print '
'; +print '
'; +dol_fiche_end(); + +llxFooter(); +$db->close(); diff --git a/admin/setup.php b/admin/setup.php index 5a4ed90..8adee8a 100644 --- a/admin/setup.php +++ b/admin/setup.php @@ -1,92 +1,70 @@ - * Copyright (C) 2020 Ardoin Pierre +/* Copyright (C) 2025 Pierre Ardoin * - * 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 - * the Free Software Foundation, either version 3 of the License, or + * 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 + * 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 . + * along with this program. If not, see . */ /** - * \file admin/chantier_param.php - * \brief This file is an example module setup page - * Put some comments here + * \file admin/setup.php + * \ingroup dc1 + * \brief General setup page for the DC1 module. */ -// Dolibarr environment -$res=@include("../../main.inc.php"); // For root directory -if (! $res) $res=@include("../../../main.inc.php"); // For "custom" directory -// Libraries -require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/custom/dc1/class/dc1.class.php'; -if(!$user->admin or empty($conf->dc1->enabled)) - accessforbidden(); - -$langs->load("admin"); -$langs->load("dc1@dc1"); - -$action = GETPOST('action','alpha'); -if($action == 'save'){ +$res = @include '../../main.inc.php'; +if (! $res) { + $res = @include '../../../main.inc.php'; +} - dolibarr_set_const($db, "LMDB_BUDGET_ORDER_STATUS", GETPOST('order_status'), 'int', 0, "Statut des commandes fournisseurs à prendre en charge", $conf->entity); +require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php'; +dol_include_once('/dc1/lib/dc1.lib.php'); - header("Location: ".$_SERVER["PHP_SELF"]); - exit; +if (empty($user->admin)) { + accessforbidden(); } -/* - * View - */ +$langs->loadLangs(array('admin', 'dc1@dc1')); -llxHeader('',$langs->trans("LMDBSetup")); +llxHeader('', $langs->trans('DC1Setup')); -// Configuration header +$head = dc1AdminPrepareHead(); +dol_fiche_head($head, 'setup', $langs->trans('Module450005Name'), 0, ''); -$head = dc1_prepare_head(); -dol_fiche_head($head,'SetupG', $langs->trans("Les Métiers du Bâtiment"), 0, ""); +print '
'; +print ''; -$linkback=''.$langs->trans("BackToModuleList").''; -print_fiche_titre($langs->trans("ModuleSetup"),$linkback); -print '
'; -print ''; -print ''."\n"; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; -showParameters(); - print ''; +print '
'.$langs->trans("Name").''.$langs->trans("Value").'
'; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; -function showParameters() { - global $db,$conf,$langs,$bc; - - $html=new Form($db); +// EN: Toggle the activation of the DC1 tab without reloading the page. +// FR: Permet d'activer l'onglet DC1 sans recharger la page. +print ''; +print ''; +print ''; +print ''; - $var=!$var; - print ''; - print ''; - print ''; - print ''; - - } - print ''; +print ''; print '
' . $langs->trans('Name') . '' . $langs->trans('Value') . '
' . $langs->trans('LMDB_DC1_ACTIVATED') . '' . ajax_constantonoff('LMDB_DC1_ACTIVATED') . '
'.$langs->trans("LMDB_DC1_ACTIVATED").''; - print ajax_constantonoff('LMDB_DC1_ACTIVATED'); - print '
'; -print '
'; - print '
'; -?> \ No newline at end of file +dol_fiche_end(); + +llxFooter(); +$db->close(); diff --git a/core/modules/modDc1.class.php b/core/modules/modDc1.class.php index 469c5eb..9e16775 100644 --- a/core/modules/modDc1.class.php +++ b/core/modules/modDc1.class.php @@ -1,233 +1,232 @@ - - - * - * 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 . - */ - - -/** - * \defgroup modDelegation Module Delegation - * \file htdocs/core/modules/modDelegation.class.php - * \ingroup modDelegation - * \brief Description and activation file for module modDelegation - */ -include_once(DOL_DOCUMENT_ROOT ."/core/modules/DolibarrModules.class.php"); - -/** - * \class modDelegation - * \brief Description and activation class for module modDelegation - */ -class modDc1 extends DolibarrModules -{ - /** - * \brief Constructor. Define names, constants, directories, boxes, permissions - * \param DB Database handler - */ - function __construct($db) - { - global $langs, $conf; - - $this->db = $db; - // Id for module (must be unique). - // Use here a free id (See in Home -> System information -> Dolibarr for list of used modules id). - $this->numero = 450005; - // Key text used to identify module (for permissions, menus, etc...) - $this->rights_class = 'dc1'; - - // Family can be 'crm','financial','hr','projects','products','ecm','technic','other' - // It is used to group modules in module setup page - $this->family = 'Les Métiers du Bâtiment'; - // Module position in the family on 2 digits ('01', '10', '20', ...) - $this->module_position = '05'; - - // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module) - $this->name = 'dc1'; - // Module description, used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module) - $this->description = "Module permettant remplir le formulaire DC1 depuis la proposition commerciale"; - // Possible values for version are: 'development', 'experimental', 'dolibarr' or version - $this->version = '1.1.1'; - // Key used in llx_const table to save module status enabled/disabled (where MYMODULE is value of property name of module in uppercase) - $this->const_name = 'MAIN_MODULE_'.strtoupper($this->name); - // Where to store the module in setup page (0=common,1=interface,2=others,3=very specific) - $this->special = 0; - // 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 = 'proposal'; - - // Author - $this->editor_name = 'Les Métiers du Bâtiment'; - $this->editor_url = 'lesmetiersdubatiment.fr'; // Must be an external online web site - $this->editor_squarred_logo = 'logo.png@dc1'; // Must be image filename into the module/img directory followed with @modulename. Example: 'myimage.png@vierge' - - - // Defined all module parts (triggers, login, substitutions, menus, css, etc...) - // for default path (eg: /mymodule/core/xxxxx) (0=disable, 1=enable) - // for specific path of parts (eg: /mymodule/core/modules/barcode) - // for specific css file (eg: /mymodule/css/mymodule.css.php) - //$this->module_parts = array( - // 'triggers' => 0, // Set this to 1 if module has its own trigger directory (core/triggers) - // 'login' => 0, // Set this to 1 if module has its own login method directory (core/login) - // 'substitutions' => 0, // Set this to 1 if module has its own substitution function file (core/substitutions) - // 'menus' => 0, // Set this to 1 if module has its own menus handler directory (core/menus) - // 'theme' => 0, // Set this to 1 if module has its own theme directory (core/theme) - // 'tpl' => 0, // Set this to 1 if module overwrite template dir (core/tpl) - // 'barcode' => 0, // Set this to 1 if module has its own barcode directory (core/modules/barcode) - // 'models' => 0, // Set this to 1 if module has its own models directory (core/modules/xxx) - // 'css' => array('/mymodule/css/mymodule.css.php'), // Set this to relative path of css file if module has its own css file - // 'js' => array('/mymodule/js/mymodule.js'), // Set this to relative path of js file if module must load a js on all pages - // 'hooks' => array('hookcontext1','hookcontext2') // Set here all hooks context managed by module - // 'workflow' => array('WORKFLOW_MODULE1_YOURACTIONTYPE_MODULE2'=>array('enabled'=>'! empty($conf->module1->enabled) && ! empty($conf->module2->enabled)', 'picto'=>'yourpicto@mymodule')) // Set here all workflow context managed by module - // ); - $this->module_parts = array( - 'models' => 1 - ); - - // Data directories to create when module is enabled. - // Example: this->dirs = array("/mymodule/temp"); - $this->dirs = array("/dc1/temp"); - $r=0; - - // Config pages. Put here list of php page names stored in admmin directory used to setup module. - $this->config_page_url = array('propal.php?save_lastsearch_values=1&backtopage=%2Fadmin%2Fmodules.php'); - - // Dependencies - $this->depends = array('modProjet', 'modSociete', 'modPropale'); // List of modules id that must be enabled if this module is enabled - $this->conflictwith = array(); - $this->phpmin = array(8,0); // Minimum version of PHP required by module - $this->need_dolibarr_version = array(19,0); // Minimum version of Dolibarr required by module - $this->langfiles = array("dc1@dc1"); - - // Constants - $this->const = array(); - - // To add a new tab identified by code - $this->tabs = array(); - $this->tabs[] = array( - 'data'=>'propal:+dc1:DC1:dc1@dc1:$user->hasRight("dc1", "read"):/dc1/tabs/dc1.php?id=__ID__', - ); - - // Dictionnaries - $this->dictionnaries = array(); - - // Boxes - // Add here list of php file(s) stored in includes/boxes that contains class to show a box. - $this->boxes = array(); // List of boxes - - - // Cronjobs (List of cron jobs entries to add when module is enabled) - // unit_frequency must be 60 for minute, 3600 for hour, 86400 for day, 604800 for week - /* BEGIN MODULEBUILDER CRON */ - $this->cronjobs = array(); - /* END MODULEBUILDER CRON */ - // Example: $this->cronjobs=array( - // 0=>array('label'=>'My label', 'jobtype'=>'method', 'class'=>'/dir/class/file.class.php', 'objectname'=>'MyClass', 'method'=>'myMethod', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>2, 'unitfrequency'=>3600, 'status'=>0, 'test'=>'isModEnabled("jpsun")', 'priority'=>50), - // 1=>array('label'=>'My label', 'jobtype'=>'command', 'command'=>'', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>1, 'unitfrequency'=>3600*24, 'status'=>0, 'test'=>'isModEnabled("jpsun")', 'priority'=>50) - // ); - - // Permissions provided by this module - $this->rights = array(); - $r = 0; - // Add here entries to declare new permissions - /* BEGIN MODULEBUILDER PERMISSIONS */ - $o = 1; - - $this->rights[$r][0] = $this->numero . sprintf('%02d', ($o * 10) + 1); - $this->rights[$r][1] = 'ReadDc1Tab'; - $this->rights[$r][3] = 0; - $this->rights[$r][4] = 'read'; - $this->rights[$r][5] = ''; - $r++; - - $this->rights[$r][0] = $this->numero . sprintf('%02d', ($o * 10) + 2); - $this->rights[$r][1] = 'EditDc1Tab'; - $this->rights[$r][3] = 0; - $this->rights[$r][4] = 'write'; - $this->rights[$r][5] = ''; - $r++; - - /* - - $this->rights[$r][0] = $this->numero . sprintf("%02d", ($o * 10) + 1); // Permission id (must not be already used) - $this->rights[$r][1] = 'Read objects of Vierge'; // Permission label - $this->rights[$r][4] = 'myobject'; - $this->rights[$r][5] = 'read'; // In php code, permission will be checked by test if ($user->hasRight('vierge', 'myobject', 'read')) - $r++; - $this->rights[$r][0] = $this->numero . sprintf("%02d", ($o * 10) + 2); // Permission id (must not be already used) - $this->rights[$r][1] = 'Create/Update objects of Vierge'; // Permission label - $this->rights[$r][4] = 'myobject'; - $this->rights[$r][5] = 'write'; // In php code, permission will be checked by test if ($user->hasRight('vierge', 'myobject', 'write')) - $r++; - $this->rights[$r][0] = $this->numero . sprintf("%02d", ($o * 10) + 3); // Permission id (must not be already used) - $this->rights[$r][1] = 'Delete objects of Vierge'; // Permission label - $this->rights[$r][4] = 'myobject'; - $this->rights[$r][5] = 'delete'; // In php code, permission will be checked by test if ($user->hasRight('vierge', 'myobject', 'delete')) - $r++; - */ - /* END MODULEBUILDER PERMISSIONS */ - - } - - /** - * Function called when module is enabled. - * The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database. - * It also creates data directories. - * @return int 1 if OK, 0 if KO - */ - function init($options = '') - { - global $db, $conf, $langs; - - $sql = array(); - - $result = $this->load_tables(); - - define('INC_FROM_DOLIBARR', true); - - $ext = new ExtraFields($db); - - //$ext->addExtraField($attrname, $label, $type, $pos, $size, $element, $unique, $required, $default_value, $param, $alwayseditable, $perms, $list, $help, $computed, $entity, $langfile, $enabled, $sommable,$pdf) - - return $this->_init($sql); - } - - /** - * Function called when module is disabled. - * Remove from database constants, boxes and permissions from Dolibarr database. - * Data directories are not deleted. - * @return int 1 if OK, 0 if KO - */ - function remove($options = '') - { - $sql = array(); - - return $this->_remove($sql); - } - - - /** - * \brief Create tables, keys and data required by module - * Files llx_table1.sql, llx_table1.key.sql llx_data.sql with create table, create keys - * and create data commands must be stored in directory /mymodule/sql/ - * This function is called by this->init. - * \return int <=0 if KO, >0 if OK - */ - function load_tables() - { - return $this->_load_tables('/dc1/sql/'); - } -} - -?> + + * + * 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 . + */ + + +/** + * \defgroup dc1 Module DC1 + * \file htdocs/custom/dc1/core/modules/modDc1.class.php + * \ingroup dc1 + * \brief Description and activation file for module modDc1 + */ +include_once(DOL_DOCUMENT_ROOT ."/core/modules/DolibarrModules.class.php"); + +/** + * \class modDc1 + * \brief Description and activation class for module modDc1 + */ +class modDc1 extends DolibarrModules +{ + /** + * \brief Constructor. Define names, constants, directories, boxes, permissions + * \param DB Database handler + */ + function __construct($db) + { + global $langs, $conf; + + $this->db = $db; + // Id for module (must be unique). + // Use here a free id (See in Home -> System information -> Dolibarr for list of used modules id). + $this->numero = 450005; + // Key text used to identify module (for permissions, menus, etc...) + $this->rights_class = 'dc1'; + + // Family can be 'crm','financial','hr','projects','products','ecm','technic','other' + // It is used to group modules in module setup page + $this->family = 'Les Métiers du Bâtiment'; + // Module position in the family on 2 digits ('01', '10', '20', ...) + $this->module_position = '05'; + + // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module) + $this->name = 'dc1'; + // Module description, used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module) + $this->description = "Module permettant remplir le formulaire DC1 depuis la proposition commerciale"; + // Possible values for version are: 'development', 'experimental', 'dolibarr' or version + $this->version = '1.1.2'; + // Key used in llx_const table to save module status enabled/disabled (where MYMODULE is value of property name of module in uppercase) + $this->const_name = 'MAIN_MODULE_'.strtoupper($this->name); + // Where to store the module in setup page (0=common,1=interface,2=others,3=very specific) + $this->special = 0; + // 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 = 'proposal'; + + // Author + $this->editor_name = 'Les Métiers du Bâtiment'; + $this->editor_url = 'lesmetiersdubatiment.fr'; // Must be an external online web site + $this->editor_squarred_logo = 'logo.png@dc1'; // Must be image filename into the module/img directory followed with @modulename. Example: 'myimage.png@vierge' + + + // Defined all module parts (triggers, login, substitutions, menus, css, etc...) + // for default path (eg: /mymodule/core/xxxxx) (0=disable, 1=enable) + // for specific path of parts (eg: /mymodule/core/modules/barcode) + // for specific css file (eg: /mymodule/css/mymodule.css.php) + //$this->module_parts = array( + // 'triggers' => 0, // Set this to 1 if module has its own trigger directory (core/triggers) + // 'login' => 0, // Set this to 1 if module has its own login method directory (core/login) + // 'substitutions' => 0, // Set this to 1 if module has its own substitution function file (core/substitutions) + // 'menus' => 0, // Set this to 1 if module has its own menus handler directory (core/menus) + // 'theme' => 0, // Set this to 1 if module has its own theme directory (core/theme) + // 'tpl' => 0, // Set this to 1 if module overwrite template dir (core/tpl) + // 'barcode' => 0, // Set this to 1 if module has its own barcode directory (core/modules/barcode) + // 'models' => 0, // Set this to 1 if module has its own models directory (core/modules/xxx) + // 'css' => array('/mymodule/css/mymodule.css.php'), // Set this to relative path of css file if module has its own css file + // 'js' => array('/mymodule/js/mymodule.js'), // Set this to relative path of js file if module must load a js on all pages + // 'hooks' => array('hookcontext1','hookcontext2') // Set here all hooks context managed by module + // 'workflow' => array('WORKFLOW_MODULE1_YOURACTIONTYPE_MODULE2'=>array('enabled'=>'! empty($conf->module1->enabled) && ! empty($conf->module2->enabled)', 'picto'=>'yourpicto@mymodule')) // Set here all workflow context managed by module + // ); + $this->module_parts = array( + 'models' => 1 + ); + + // Data directories to create when module is enabled. + // Example: this->dirs = array("/mymodule/temp"); + $this->dirs = array("/dc1/temp"); + $r=0; + + // Config pages. Put here list of php page names stored in admmin directory used to setup module. + $this->config_page_url = array('propal.php?save_lastsearch_values=1&backtopage=%2Fadmin%2Fmodules.php'); + + // Dependencies + $this->depends = array('modProjet', 'modSociete', 'modPropale'); // List of modules id that must be enabled if this module is enabled + $this->conflictwith = array(); + $this->phpmin = array(8,0); // Minimum version of PHP required by module + $this->need_dolibarr_version = array(19,0); // Minimum version of Dolibarr required by module + $this->langfiles = array("dc1@dc1"); + + // Constants + $this->const = array(); + + // To add a new tab identified by code + $this->tabs = array(); + $this->tabs[] = array( + 'data'=>'propal:+dc1:DC1:dc1@dc1:$user->hasRight("dc1", "read"):/dc1/tabs/dc1.php?id=__ID__', + ); + + // Dictionnaries + $this->dictionnaries = array(); + + // Boxes + // Add here list of php file(s) stored in includes/boxes that contains class to show a box. + $this->boxes = array(); // List of boxes + + + // Cronjobs (List of cron jobs entries to add when module is enabled) + // unit_frequency must be 60 for minute, 3600 for hour, 86400 for day, 604800 for week + /* BEGIN MODULEBUILDER CRON */ + $this->cronjobs = array(); + /* END MODULEBUILDER CRON */ + // Example: $this->cronjobs=array( + // 0=>array('label'=>'My label', 'jobtype'=>'method', 'class'=>'/dir/class/file.class.php', 'objectname'=>'MyClass', 'method'=>'myMethod', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>2, 'unitfrequency'=>3600, 'status'=>0, 'test'=>'isModEnabled("jpsun")', 'priority'=>50), + // 1=>array('label'=>'My label', 'jobtype'=>'command', 'command'=>'', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>1, 'unitfrequency'=>3600*24, 'status'=>0, 'test'=>'isModEnabled("jpsun")', 'priority'=>50) + // ); + + // Permissions provided by this module + $this->rights = array(); + $r = 0; + // Add here entries to declare new permissions + /* BEGIN MODULEBUILDER PERMISSIONS */ + $o = 1; + + $this->rights[$r][0] = $this->numero . sprintf('%02d', ($o * 10) + 1); + $this->rights[$r][1] = 'ReadDc1Tab'; + $this->rights[$r][3] = 0; + $this->rights[$r][4] = 'read'; + $this->rights[$r][5] = ''; + $r++; + + $this->rights[$r][0] = $this->numero . sprintf('%02d', ($o * 10) + 2); + $this->rights[$r][1] = 'EditDc1Tab'; + $this->rights[$r][3] = 0; + $this->rights[$r][4] = 'write'; + $this->rights[$r][5] = ''; + $r++; + + /* + + $this->rights[$r][0] = $this->numero . sprintf("%02d", ($o * 10) + 1); // Permission id (must not be already used) + $this->rights[$r][1] = 'Read objects of Vierge'; // Permission label + $this->rights[$r][4] = 'myobject'; + $this->rights[$r][5] = 'read'; // In php code, permission will be checked by test if ($user->hasRight('vierge', 'myobject', 'read')) + $r++; + $this->rights[$r][0] = $this->numero . sprintf("%02d", ($o * 10) + 2); // Permission id (must not be already used) + $this->rights[$r][1] = 'Create/Update objects of Vierge'; // Permission label + $this->rights[$r][4] = 'myobject'; + $this->rights[$r][5] = 'write'; // In php code, permission will be checked by test if ($user->hasRight('vierge', 'myobject', 'write')) + $r++; + $this->rights[$r][0] = $this->numero . sprintf("%02d", ($o * 10) + 3); // Permission id (must not be already used) + $this->rights[$r][1] = 'Delete objects of Vierge'; // Permission label + $this->rights[$r][4] = 'myobject'; + $this->rights[$r][5] = 'delete'; // In php code, permission will be checked by test if ($user->hasRight('vierge', 'myobject', 'delete')) + $r++; + */ + /* END MODULEBUILDER PERMISSIONS */ + + } + + /** + * Function called when module is enabled. + * The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database. + * It also creates data directories. + * @return int 1 if OK, 0 if KO + */ + function init($options = '') + { + global $db, $conf, $langs; + + $sql = array(); + + $result = $this->load_tables(); + + define('INC_FROM_DOLIBARR', true); + + $ext = new ExtraFields($db); + + //$ext->addExtraField($attrname, $label, $type, $pos, $size, $element, $unique, $required, $default_value, $param, $alwayseditable, $perms, $list, $help, $computed, $entity, $langfile, $enabled, $sommable,$pdf) + + return $this->_init($sql); + } + + /** + * Function called when module is disabled. + * Remove from database constants, boxes and permissions from Dolibarr database. + * Data directories are not deleted. + * @return int 1 if OK, 0 if KO + */ + function remove($options = '') + { + $sql = array(); + + return $this->_remove($sql); + } + + + /** + * \brief Create tables, keys and data required by module + * Files llx_table1.sql, llx_table1.key.sql llx_data.sql with create table, create keys + * and create data commands must be stored in directory /mymodule/sql/ + * This function is called by this->init. + * \return int <=0 if KO, >0 if OK + */ + function load_tables() + { + return $this->_load_tables('/dc1/sql/'); + } +} + +?> diff --git a/langs/en_US/dc1.lang b/langs/en_US/dc1.lang index 4762031..48fafbf 100644 --- a/langs/en_US/dc1.lang +++ b/langs/en_US/dc1.lang @@ -1,90 +1,157 @@ -# Dolibarr language file - fr_FR - tos -# Admin form -CHARSET=iso-8859-1 - -Module450005Desc=Module for pre-populating DC1 forms when responding to certain calls for tenders. - -Module450005Name=DC1 -Delegation=Delegation - -SetupG=General - -DC1Setup= DC1 Settings - General -ReadDc1Tab= Read the DC1 tab -EditDc1Tab= Edit the contents of the DC1 tab - -lmdb_representant = Representative -lmdb_representant_help = Ideally, in the format: Mr. LAST NAME First Name. - -lmdb_compte_tiers = Account number with this third party - -lmdb_qualite_representant = Representative's status -lmdb_qualite_representant_help = Director, Manager, President, etc. - -DC1_Consigne_entete = The DC1 form is a template for an application letter, which can be used by candidates for public procurement contracts (contracts or framework agreements) to submit their application.

In the case of a subdivision, this document may be common to several lots.

In the case of a group application, each member of the group completes the form and produces the information or documents requested by the buyer (DC2 form).

It is recalled that pursuant to Article 4 of Ordinance No. 2015-899 of July 23, 2015 relating to public procurement, the term "public procurement" also covers framework agreements executed by the conclusion of subsequent contracts or by the issuance of purchase orders, subsequent contracts, specific contracts concluded within the framework of a dynamic purchasing system and partnership contracts. -DC1_Consigne_notice = Consult the official notice - -id_acheteur = A - Identification of the buyer. -DC1_A_Tooltip = Reproduce the content of the notice appearing in the call for competition or the invitation to confirm interest; in the event of publication in the Official Journal of the European Union or the Official Bulletin of Public Procurement Announcements, simply indicating the reference to this notice is sufficient; in all cases, indicating the reference number assigned to the file by the buyer is also sufficient information. - -objet_consultation = B - Purpose of the consultation. -DC1_B_Tooltip = Reproduce the content of the notice appearing in the call for competition or the invitation to confirm interest; in the event of publication in the Official Journal of the European Union or the Official Bulletin of Public Procurement Announcements, simply indicating the reference to this notice is sufficient; In all cases, providing the reference number assigned to the file by the buyer is also sufficient information. -ref_consultation = Consultation Reference. -objet_candidature = C - Purpose of the application. -DC1_C_Tooltip = Select the appropriate answer.
  • For the public procurement contract (if not divided into lots)
  • For the lot(s) in the public procurement procedure (if divided into lots; if the lots have not been numbered, indicate below the title of the lot(s) as they appear in the call for competition or the invitation to confirm interest.)
  • For all lots in the public procurement procedure
- -marche_public = The public procurement contract -lots_separe = Separate lots -tous_les_lots = All lots -un_seul_lot = A single lot -multiple_lots = Several lots -non_renseigne = Not Informed -n_lots = Lot number concerned -DC1_n_lots_Tooltip = Only in the case of a Contract in separate Lots - -designation_lot = Designation of the selected Lot(s) -DC1_C_Designation_Tooltip = If not numbered - -candidat_statut = D - Candidate's presentation. -DC1_D_Tooltip = Select the corresponding answer.
  • The candidate is presenting himself
  • The candidate is a joint venture whose representative is jointly and severally liable
  • The candidate is a joint venture whose representative is not jointly and severally liable
  • The candidate is a joint venture with a jointly and severally liable group
-candidat_statut1 = Candidate alone -candidat_statut2 = Joint Group, Jointly and severally liable representative -candidat_statut3 = Joint Group, Non-jointly and severally liable representative -candidat_statut4 = Group Solidarity - -member_id = E - Identification of the members of the group and distribution of services. - -DC1_F = F - Commitments of the individual candidate or each member of the group. -DC1_F1_Tooltip = F1 - Prohibitions on bidding

The individual candidate, or each member of the group, declares on their honor:
  • a) that they are not subject to any of the prohibitions on bidding provided for in Articles 45 and 48 of Ordinance No. 2015-899 of July 23, 2015, relating to public procurement (*);
  • b) in addition, in the case of a defense or security public procurement (MDS), that they are not subject to any of the prohibitions on bidding provided for in Article 46 of Ordinance No. 2015-899 of July 23, 2015.


  • In order to certify that the candidateIf the individual or each member of the group is not in one of these cases of prohibition from tendering, check the following box.

    (*) In the event that the candidate or one of the members of the group is admitted to the judicial recovery procedure, their attention is drawn to the fact that they will be asked to prove that they were authorized to continue their activities during the foreseeable duration of the execution of the public contract. - -F_commitment = F1 - Prohibitions on bidding -F_commitment1 = I certify -F_commitment2 = I do not certify - -F_documents = F2 - Supporting documents available online -DC1_F2_Tooltip = Also applicable to MDS, when the buyer has authorized candidates not to provide these supporting documents pursuant to the first paragraph of Article 45 of Decree No. 2106-361 of March 25, 2016, relating to defense or security public procurement:
    If applicable, the internet address at which supporting documents and means of proof are directly and free of charge, as well as all the information necessary to access them.

    (If the address and information are identical to those provided above, simply refer to the relevant section. - -internet_address = Internet address - -address_information = Information required to access it - -agent = G - Designation of agent (in the case of a group). -DC1_G_Tooltip = The members of the group designate the following agent: - -DC1_generate = To generate the DC1 form, return to the "Commercial Proposal" tab, then select the "DC1" document template and click "Generate". - -DC1_F3 = F3 - Capabilities. -dc21 = DC2 -dc22 = Requested documents -dc23 = All -dc24 = None - -DC1LineUpdated = Fields successfully updated - -DC1_PDF_Ref_consultation = Consultation reference: - -PDFDC1LMDBDescription = DC1 Form Template by Les Métiers du Bâtiment - -none = None - -
    \ No newline at end of file +# Dolibarr language file for module dc1 +CHARSET=UTF-8 + +Module450005Name=DC1 + +Module450005Desc=Module for pre-populating DC1 forms when responding to public tenders. + +SetupG=General + +DC1Setup=DC1 Settings - General + +ReadDc1Tab=Read the DC1 tab + +EditDc1Tab=Edit the contents of the DC1 tab + +LMDBSetup=DC1 configuration + +LMDB_DC1_ACTIVATED=Enable the DC1 tab on commercial proposals + +DC1AdminHomeTitle=Administration overview + +DC1AdminHomeIntro=Use this page to review the module status and useful resources. + +DC1AdminHomeDocumentation=Documentation + +DC1AdminHomeDocumentationLink=Consult the official DC1 guidance note + +DC1AdminHomeSupport=Support contact + +DC1AdminHomeSupportLink=Les Métiers du Bâtiment support portal + +DC1AdminHomeVersion=Installed version + +lmdb_representant=Representative + +lmdb_representant_help=Ideally use: Mr. LAST NAME First Name. + +lmdb_compte_tiers=Account number with this third party + +lmdb_qualite_representant=Representative's status + +lmdb_qualite_representant_help=Director, Manager, President, etc. + +DC1_Consigne_entete=The DC1 form is an application letter template used by candidates for public procurement contracts. It can cover several lots when the contract is subdivided and each group member must also complete the DC2 form. Public procurement also includes framework agreements, purchase orders, dynamic purchasing systems and partnership contracts. + +DC1_Consigne_notice=Consult the official notice + +id_acheteur=A - Identification of the buyer. + +DC1_A_Tooltip=Copy the wording from the contract notice or invitation to confirm interest. Referring to the official notice is sufficient; the buyer's reference number must be provided. + +objet_consultation=B - Purpose of the consultation. + +DC1_B_Tooltip=Copy the wording from the contract notice or invitation to confirm interest. Referring to the official notice is sufficient; the buyer's reference number must be provided. + +ref_consultation=Consultation reference. + +objet_candidature=C - Purpose of the application. + +DC1_C_Tooltip=Select the appropriate answer.
    • For the public procurement contract (if not divided into lots)
    • For the lots in the public procurement procedure (if divided into lots; indicate the lot titles if they are not numbered)
    • For all lots in the public procurement procedure
    + +marche_public=The public procurement contract + +lots_separe=Separate lots + +tous_les_lots=All lots + +un_seul_lot=A single lot + +plusieurs_lots=Several lots + +non_renseigne=Not provided + +n_lots=Lot number concerned + +DC1_n_lots_Tooltip=Only for a contract divided into lots + +designation_lot=Designation of the selected lot(s) + +DC1_C_Designation_Tooltip=When lots are not numbered + +candidat_statut=D - Candidate presentation. + +DC1_D_Tooltip=Select the matching answer.
    • The candidate applies alone
    • The candidate is a joint venture with a jointly and severally liable representative
    • The candidate is a joint venture with a representative that is not jointly liable
    • The candidate is a joint venture acting in solidarity
    + +candidat_statut1=Candidate alone + +candidat_statut2=Joint venture with jointly liable representative + +candidat_statut3=Joint venture with non-jointly liable representative + +candidat_statut4=Joint venture acting in solidarity + +id_membre=E - Identification of group members and scope. + +DC1_F=F - Commitments of the individual candidate or each group member. + +DC1_F1_Tooltip=F1 - Grounds for exclusion

    The candidate declares:
  • a) not to be subject to the prohibitions on bidding defined in Ordinance No. 2015-899 of 23 July 2015 (*);
  • b) for defence or security contracts, not to be subject to the prohibitions stated in Article 46 of the same ordinance.


  • Tick the box to certify compliance.

    (*) If under receivership, proof of authorisation to continue activity for the contract duration must be provided. + +F_engagement=F1 - Grounds for exclusion + +F_engagement1=I certify + +F_engagement2=I do not certify + +F_documents=F2 - Supporting documents available online + +DC1_F2_Tooltip=Also applies to defence or security procurement when the buyer waives supporting documents under Decree No. 2016-361, Article 45. Provide the web address and access information for the documents when available. + +adresse_internet=Internet address + +renseignement_adresse=Information required to access it + +mandataire=G - Designation of the representative (for a group). + +DC1_G_Tooltip=The group members designate the following representative: + +DC1_generate=To generate the DC1 form, open the "Commercial proposal" tab, choose the DC1 template and click "Generate". + +DC1_F3=F3 - Capabilities. + +dc21=DC2 + +dc22=Requested documents + +dc23=All + +dc24=None + +DC1LineUpdated=Fields successfully updated + +DC1LineDoesNotExist=DC1 line does not exist + +DetailsLineUpdated=Details line updated + +DetailsLineDoesNotExist=Details line does not exist + +ErrorCallingTrigger=Error when calling trigger + +InvalidParameter=Invalid parameter + +ObjectNotFound=Object not found + +NotAPropale=The element is not a commercial proposal + +PDFDC1LMDBDescription=DC1 form template by Les Métiers du Bâtiment + +PDFDC1LMDBDescription2016=DC1 form template - 2016 edition (deprecated) + +PDFDC1LMDBDescription2019=DC1 form template - 2019 edition + +DC1_PDF_Ref_consultation=Consultation reference: + +none=None + +dc1=DC1 + diff --git a/langs/fr_FR/dc1.lang b/langs/fr_FR/dc1.lang index 696d280..52c11ad 100644 --- a/langs/fr_FR/dc1.lang +++ b/langs/fr_FR/dc1.lang @@ -1,90 +1,157 @@ -# Dolibarr language file - fr_FR - tos -# Admin form -CHARSET=iso-8859-1 - -Module450005Desc = Module permettant de préremplir les formulaires DC1 lors de la réponse à certains appels d'offre. - -Module450005Name = Formulaire DC1 -Delegation=Délégation - -SetupG=Général - -PDFDC1LMDBDescription2016 = Modèle de Formulaire DC1 version 2016 (dépréciée) -PDFDC1LMDBDescription2019 = Modèle de Formulaire DC1 version 2019 - -DC1Setup= Réglages DC1 - Général -ReadDc1Tab= Lire l'onglet DC1 et son contenu -EditDc1Tab= Editer le contenu de l'onglet DC1 - -lmdb_representant = Représentant -lmdb_representant_help = Idéalement, sous le format : M. NOM Prénom. -lmdb_compte_tiers = N° de compte chez ce tiers - -lmdb_qualite_representant = Qualité du Représentant -lmdb_qualite_representant_help = Directeur, Gérant, Président, etc. - -DC1_Consigne_entete = Le formulaire DC1 est un modèle de lettre de candidature, qui peut être utilisé par les candidats aux marchés publics (marchés ou accords-cadres) pour présenter leur candidature.

    En cas d’allotissement, ce document peut être commun à plusieurs lots.

    En cas de candidature groupée, chaque membre du groupement renseigne le formulaire, et produit les renseignements ou documents demandés par l’acheteur (formulaire DC2).

    Il est rappelé qu’en application de l’article 4 de l’ordonnance n° 2015-899 du 23 juillet 2015 relative aux marchés publics, le vocable de « marché public » recouvre également les accords-cadres s’exécutant par la conclusion de marchés subséquents ou par l’émission de bons de commande, les marchés subséquents, les marchés spécifiques conclus dans le cadre d’un système d’acquisition dynamique et les marchés de partenariat. -DC1_Consigne_notice = Consulter la notice officielle - - -id_acheteur = A - Identification de l’acheteur. -DC1_A_Tooltip = Reprendre le contenu de la mention figurant dans l’avis d’appel à la concurrence ou l’invitation à confirmer l’intérêt ; en cas de publication d’une annonce au Journal officiel de l’Union européenne ou au Bulletin officiel des annonces de marchés publics, la simple indication de la référence à cet avis est suffisante ; dans tous les cas, l’indication du numéro de référence attribué au dossier par l’acheteur est également une information suffisante. - -objet_consultation = B - Objet de la consultation. -DC1_B_Tooltip = Reprendre le contenu de la mention figurant dans l’avis d’appel à la concurrence ou l’invitation à confirmer l’intérêt ; en cas de publication d’une annonce au Journal officiel de l’Union européenne ou au Bulletin officiel des annonces de marchés publics, la simple indication de la référence à cet avis est suffisante ; dans tous les cas, l’indication du numéro de référence attribué au dossier par l’acheteur est également une information suffisante. -ref_consultation = Référence de la Consultation. -objet_candidature = C - Objet de la candidature. -DC1_C_Tooltip = Sélectionnez la réponse correspondante.
    • Pour le marché public (en cas de non allotissement)
    • Pour le ou les lots de la procédure de passation du marché public (en cas d’allotissement ; si les lots n’ont pas été numérotés, indiquer ci-dessous l’intitulé du ou des lots tels qu’ils figurent dans l’avis d'appel à la concurrence ou l’invitation à confirmer l’intérêt.)
    • Pour tous les lots de la procédure de passation du marché public
    - -marche_public = Le marché public -lots_separe = Lots séparés -tous_les_lots = Tous les lots -un_seul_lot = Un seul lot -plusieurs_lots = Plusieurs lots -non_renseigne = Non Renseigné -n_lots = N° de lots concernés -DC1_n_lots_Tooltip = Uniquement en cas de Marché en Lot séparés - -designation_lot = Désignation du ou des lots selectionnés -DC1_C_Designation_Tooltip = En cas de non numérotation - -candidat_statut = D - Présentation du candidat. -DC1_D_Tooltip = Sélectionnez la réponse correspondante.
    • Le candidat se présente seul
    • Le candidat est un groupement d’entreprises conjoint dont le mandataire est solidaire
    • Le candidat est un groupement d’entreprises conjoint dont le mandataire n'est pas solidaire
    • Le candidat est un groupement d’entreprises solidaire
    -candidat_statut1 = Candidat seul -candidat_statut2 = Groupement Conjoint, Mandataire solidaire -candidat_statut3 = Groupement Conjoint, Mandataire non solidaire -candidat_statut4 = Groupement Solidaire - -id_membre = E - Identification des membres du groupement et répartition des prestations. - -DC1_F = F - Engagements du candidat individuel ou de chaque membre du groupement. -DC1_F1_Tooltip = F1 - Interdictions de soumissionner

    Le candidat individuel, ou chaque membre du groupement, déclare sur l’honneur :
  • a) n’entrer dans aucun des cas d’interdiction de soumissionner prévu aux articles 45 et 48 de l’ordonnance n° 2015-899 du 23 juillet 2015 relative aux marchés publics (*) ;
  • b) au surplus, dans l’hypothèse d’un marché public de défense ou de sécurité (MDS), ne pas entrer dans l’un des cas d’interdiction de soumissionner prévus à l’articles 46 de l’ordonnance n° 2015-899 du 23 juillet 2015.


  • Afin d’attester que le candidat individuel, ou chaque membre du groupement, n’est pas dans un de ces cas d’interdiction de soumissionner, cocher la case suivante.

    (*) Dans l’hypothèse où le candidat ou l’un des membres du groupement est admis à la procédure de redressement judiciaire, son attention est attirée sur le fait qu’il lui sera demandé de prouver qu’il a été habilité à poursuivre ses activités pendant la durée prévisible d’exécution du marché public. -F_engagement = F1 - Interdictions de soumissionner -F_engagement1 = J'atteste -F_engagement2 = Je n'atteste pas - -F_documents = F2 - Documents de preuve disponibles en ligne -DC1_F2_Tooltip = Applicable également aux MDS, lorsque l’acheteur a autorisé les candidats à ne pas fournir ces documents de preuve en application du premier alinéa de l’article 45 du décret n° 2106-361 du 25 mars 2016 relatif aux marchés publics de défense ou de sécurité) :
    Le cas échéant, adresse internet à laquelle les documents justificatifs et moyens de preuve sont accessibles directement et gratuitement, ainsi que l’ensemble des renseignements nécessaires pour y accéder.

    (Si l’adresse et les renseignements sont identiques à ceux fournis plus haut se contenter de renvoyer à la rubrique concernée. - -adresse_internet = Adresse internet - -renseignement_adresse = Renseignements nécessaires pour y accéder - -mandataire = G - Désignation du mandataire (en cas de groupement). -DC1_G_Tooltip = Les membres du groupement désignent le mandataire suivant : - -DC1_generate = Pour Générer le formulaire DC1, retournez dans l'onglet "Proposition commerciale", puis selectionnez le modèle de document "DC1" et cliquez sur "Générer". - -DC1_F3 = F3 - Capacités. -dc21 = DC2 -dc22 = Documents demandés -dc23 = Tout -dc24 = Aucun - -DC1LineUpdated = Champs mis à jour avec succès - -DC1_PDF_Ref_consultation = Référence de la consultation : - -PDFDC1LMDBDescription = Modèle de Formulaire DC1 par Les Métiers du Bâtiment - -none = Aucun
    \ No newline at end of file +# Fichier de langue Dolibarr pour le module dc1 +CHARSET=UTF-8 + +Module450005Name=Formulaire DC1 + +Module450005Desc=Module permettant de préremplir les formulaires DC1 lors des réponses aux appels d'offres publics. + +SetupG=Général + +DC1Setup=Réglages DC1 - Général + +ReadDc1Tab=Lire l'onglet DC1 et son contenu + +EditDc1Tab=Éditer le contenu de l'onglet DC1 + +LMDBSetup=Configuration du module DC1 + +LMDB_DC1_ACTIVATED=Activer l'onglet DC1 sur les propositions commerciales + +DC1AdminHomeTitle=Vue d'ensemble de l'administration + +DC1AdminHomeIntro=Utilisez cette page pour vérifier l'état du module et accéder aux ressources utiles. + +DC1AdminHomeDocumentation=Documentation + +DC1AdminHomeDocumentationLink=Consulter la notice officielle du formulaire DC1 + +DC1AdminHomeSupport=Contact support + +DC1AdminHomeSupportLink=Portail support Les Métiers du Bâtiment + +DC1AdminHomeVersion=Version installée + +lmdb_representant=Représentant + +lmdb_representant_help=Idéalement sous la forme : M. NOM Prénom. + +lmdb_compte_tiers=N° de compte chez ce tiers + +lmdb_qualite_representant=Qualité du représentant + +lmdb_qualite_representant_help=Directeur, Gérant, Président, etc. + +DC1_Consigne_entete=Le formulaire DC1 est un modèle de lettre de candidature utilisé par les candidats aux marchés publics. Il peut couvrir plusieurs lots en cas d'allotissement et chaque membre du groupement doit également remplir le formulaire DC2. Les marchés publics comprennent aussi les accords-cadres, bons de commande, systèmes d'acquisition dynamiques et contrats de partenariat. + +DC1_Consigne_notice=Consulter la notice officielle + +id_acheteur=A - Identification de l'acheteur. + +DC1_A_Tooltip=Reprendre la mention figurant dans l'avis d'appel à la concurrence ou l'invitation à confirmer l'intérêt. La référence à l'avis officiel suffit ; le numéro de dossier de l'acheteur doit être précisé. + +objet_consultation=B - Objet de la consultation. + +DC1_B_Tooltip=Reprendre la mention figurant dans l'avis d'appel à la concurrence ou l'invitation à confirmer l'intérêt. La référence à l'avis officiel suffit ; le numéro de dossier de l'acheteur doit être précisé. + +ref_consultation=Référence de la consultation. + +objet_candidature=C - Objet de la candidature. + +DC1_C_Tooltip=Sélectionnez la réponse correspondante.
    • Pour le marché public (en cas de non allotissement)
    • Pour le ou les lots de la procédure (en cas d'allotissement ; indiquer le titre des lots s'ils ne sont pas numérotés)
    • Pour tous les lots de la procédure de passation
    + +marche_public=Le marché public + +lots_separe=Lots séparés + +tous_les_lots=Tous les lots + +un_seul_lot=Un seul lot + +plusieurs_lots=Plusieurs lots + +non_renseigne=Non renseigné + +n_lots=N° des lots concernés + +DC1_n_lots_Tooltip=Uniquement en cas de lots séparés + +designation_lot=Désignation du ou des lots sélectionnés + +DC1_C_Designation_Tooltip=En cas d'absence de numérotation des lots + +candidat_statut=D - Présentation du candidat. + +DC1_D_Tooltip=Sélectionnez la réponse correspondante.
    • Le candidat se présente seul
    • Groupement conjoint, mandataire solidaire
    • Groupement conjoint, mandataire non solidaire
    • Groupement solidaire
    + +candidat_statut1=Candidat seul + +candidat_statut2=Groupement conjoint, mandataire solidaire + +candidat_statut3=Groupement conjoint, mandataire non solidaire + +candidat_statut4=Groupement solidaire + +id_membre=E - Identification des membres du groupement et répartition. + +DC1_F=F - Engagements du candidat individuel ou de chaque membre. + +DC1_F1_Tooltip=F1 - Interdictions de soumissionner

    Le candidat déclare :
  • a) ne pas entrer dans les cas d'interdiction prévus par l'ordonnance n° 2015-899 du 23 juillet 2015 (*);
  • b) pour les marchés de défense ou sécurité, ne pas entrer dans les cas prévus à l'article 46 de la même ordonnance.


  • Cochez la case pour attester la conformité.

    (*) En cas de redressement judiciaire, fournir la preuve de l'autorisation de poursuivre l'activité pendant la durée du marché. + +F_engagement=F1 - Interdictions de soumissionner + +F_engagement1=J'atteste + +F_engagement2=Je n'atteste pas + +F_documents=F2 - Documents de preuve disponibles en ligne + +DC1_F2_Tooltip=Applicable également aux marchés de défense ou sécurité lorsque l'acheteur dispense les candidats de fournir les justificatifs (décret n° 2016-361, article 45). Indiquer l'adresse internet et les informations d'accès lorsque disponibles. + +adresse_internet=Adresse internet + +renseignement_adresse=Renseignements nécessaires pour y accéder + +mandataire=G - Désignation du mandataire (en cas de groupement). + +DC1_G_Tooltip=Les membres du groupement désignent le mandataire suivant : + +DC1_generate=Pour générer le formulaire DC1, ouvrez l'onglet « Proposition commerciale », sélectionnez le modèle DC1 puis cliquez sur « Générer ». + +DC1_F3=F3 - Capacités. + +dc21=DC2 + +dc22=Documents demandés + +dc23=Tout + +dc24=Aucun + +DC1LineUpdated=Champs mis à jour avec succès + +DC1LineDoesNotExist=La ligne DC1 n'existe pas + +DetailsLineUpdated=Ligne de détail mise à jour + +DetailsLineDoesNotExist=La ligne de détail n'existe pas + +ErrorCallingTrigger=Erreur lors de l'appel du trigger + +InvalidParameter=Paramètre invalide + +ObjectNotFound=Objet introuvable + +NotAPropale=L'élément n'est pas une proposition commerciale + +PDFDC1LMDBDescription=Modèle de formulaire DC1 par Les Métiers du Bâtiment + +PDFDC1LMDBDescription2016=Modèle de formulaire DC1 - édition 2016 (déprécié) + +PDFDC1LMDBDescription2019=Modèle de formulaire DC1 - édition 2019 + +DC1_PDF_Ref_consultation=Référence de la consultation : + +none=Aucun + +dc1=DC1 + diff --git a/lib/dc1.lib.php b/lib/dc1.lib.php new file mode 100644 index 0000000..2fa63a3 --- /dev/null +++ b/lib/dc1.lib.php @@ -0,0 +1,48 @@ + + * + * 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 lib/dc1.lib.php + * \ingroup dc1 + * \brief Library file for the DC1 module. + */ + +/** + * Prepare tabs for DC1 administration pages. + * + * @return array + */ +function dc1AdminPrepareHead() +{ + global $langs; + + // EN: Build the administration tabs for the DC1 module. + // FR: Construit les onglets d'administration du module DC1. + $head = array(); + + $h = 0; + $head[$h][0] = dol_buildpath('/dc1/admin/index.php', 1); + $head[$h][1] = $langs->trans('DC1AdminHomeTitle'); + $head[$h][2] = 'home'; + $h++; + + $head[$h][0] = dol_buildpath('/dc1/admin/setup.php', 1); + $head[$h][1] = $langs->trans('SetupG'); + $head[$h][2] = 'setup'; + + return $head; +}