From c7e1528594040fc6b615d5e5476c176d3cd2f9eb Mon Sep 17 00:00:00 2001
From: phf <phf@atm-consulting.fr>
Date: Mon, 9 Feb 2015 15:53:19 +0100
Subject: [PATCH] =?UTF-8?q?[CORE]=20initialisation=20de=20l'int=C3=A9grati?=
 =?UTF-8?q?on=20du=20module=20incoterm=20au=20corp=20de=20dolibarr=20(#inc?=
 =?UTF-8?q?oterm).?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 htdocs/admin/incoterm.php                     |  89 +++++++++++
 htdocs/core/modules/modIncoterm.class.php     | 142 ++++++++++++++++++
 .../install/mysql/migration/3.7.0-3.8.0.sql   |  64 ++++++++
 htdocs/langs/fr_FR/incoterm.lang              |   6 +
 4 files changed, 301 insertions(+)
 create mode 100644 htdocs/admin/incoterm.php
 create mode 100644 htdocs/core/modules/modIncoterm.class.php
 create mode 100644 htdocs/langs/fr_FR/incoterm.lang

diff --git a/htdocs/admin/incoterm.php b/htdocs/admin/incoterm.php
new file mode 100644
index 00000000000..9daa48b952f
--- /dev/null
+++ b/htdocs/admin/incoterm.php
@@ -0,0 +1,89 @@
+<?php
+
+require '../main.inc.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
+
+$langs->load("admin");
+$langs->load("incoterm");
+$langs->load("errors");
+
+if (! $user->admin) accessforbidden();
+
+$action = GETPOST('action','alpha');
+$error = false;
+
+/*
+ * Actions
+ */
+ if ($action == 'switch_incoterm') 
+ {	
+	$value = dolibarr_get_const($db, 'INCOTERM_ACTIVATE');
+	
+	if (!empty($value)) $res = dolibarr_set_const($db, 'INCOTERM_ACTIVATE', 0);
+	else $res = dolibarr_set_const($db, 'INCOTERM_ACTIVATE', 1);
+	
+	
+	if (!$res) $error++;
+	
+	if (!$error) 
+	{
+		setEventMessage($langs->trans("SetupSaved"));
+	}
+	else
+    {
+        setEventMessage($langs->trans("Error"),'errors');
+    }
+ }
+
+/*
+ * View
+ */
+$form=new Form($db);
+
+llxHeader("","");
+
+$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>';
+print_fiche_titre($langs->trans("IncotermSetup"),$linkback,'setup');
+print '<br>';
+
+
+$h = 0;
+
+$head[$h][0] = DOL_URL_ROOT."/admin/incoterm.php";
+$head[$h][1] = $langs->trans("Setup");
+$h++;
+
+dol_fiche_head($head, $hselected, $langs->trans("ModuleSetup"));
+
+print '<table class="noborder" width="100%">';
+print '<tr class="liste_titre">';
+print '<td>'.$langs->trans("IncotermSetupTitle1").'</td>';
+print '<td width="20"></td>';
+print '<td align="center" width="100">'.$langs->trans("IncotermSetupTitle2").'</td>';
+print '</tr>';
+
+print '<tr class="impair">';
+print '<td>'.$langs->trans('IncotermFunctionDesc').'</td>';
+print '<td width="20"></td>';
+print '<td width="100" align="center"><a href="'.$_SERVER["PHP_SELF"].'?action=switch_incoterm">';
+
+if (!empty($conf->global->INCOTERM_ACTIVATE)) {
+	print img_picto($langs->trans("Enabled"),'switch_on');
+} else {
+	print img_picto($langs->trans("Disabled"),'switch_off');
+}
+
+print '</a></td>';
+print '</tr>';
+
+print '';
+
+print '</table>';
+
+
+
+llxFooter();
+$db->close();
+
+
+
diff --git a/htdocs/core/modules/modIncoterm.class.php b/htdocs/core/modules/modIncoterm.class.php
new file mode 100644
index 00000000000..fbdc6b55d31
--- /dev/null
+++ b/htdocs/core/modules/modIncoterm.class.php
@@ -0,0 +1,142 @@
+<?php
+/* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
+ * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
+ * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.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/>.
+ */
+
+/**
+ * 	\defgroup   mymodule     Module MyModule
+ *  \brief      Example of a module descriptor.
+ *				Such a file must be copied into htdocs/mymodule/core/modules directory.
+ *  \file       htdocs/mymodule/core/modules/modMyModule.class.php
+ *  \ingroup    mymodule
+ *  \brief      Description and activation file for module MyModule
+ */
+include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php';
+
+
+/**
+ *  Description and activation class for module MyModule
+ */
+class modIncoterm extends DolibarrModules
+{
+	/**
+	 *   Constructor. Define names, constants, directories, boxes, permissions
+	 *
+	 *   @param      DoliDB		$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 = 210009;
+		// Key text used to identify module (for permissions, menus, etc...)
+		$this->rights_class = 'incoterm';
+
+		// Family can be 'crm','financial','hr','projects','products','ecm','technic','other'
+		$this->family = "products";
+		$this->name = preg_replace('/^mod/i','',get_class($this));
+		$this->description = "Gestion des incoterm";
+		$this->version = 'dolibarr';
+		// 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;
+		$this->picto='generic';
+
+		$this->module_parts = array();
+		$this->dirs = array();
+
+		$this->config_page_url = array('incoterm.php');
+
+		// Dependencies
+		$this->depends = array();		// List of modules id that must be enabled if this module is enabled
+		$this->requiredby = array();	// List of modules id to disable if this one is disabled
+		$this->phpmin = array(5,0);					// Minimum version of PHP required by module
+		$this->need_dolibarr_version = array(3,0);	// Minimum version of Dolibarr required by module
+		$this->langfiles = array("incoterm");
+
+		$this->const = array(
+			array('INCOTERM_ACTIVATE', 'smallint', 0, 'Description de INCOTERM_ACTIVATE')
+		);
+
+        $this->tabs = array();
+       
+        // Dictionnaries
+        if (! isset($conf->incoterm->enabled)){
+        	@$conf->incoterm->enabled=0;
+		}
+		$this->dictionnaries=array(
+			'langs'=>'incoterm',
+            'tabname'=>array(MAIN_DB_PREFIX."c_incoterms"),		// List of tables we want to see into dictonnary editor
+            'tablib'=>array("Incoterms"),													// Label of tables
+            'tabsql'=>array('SELECT rowid, code, libelle, active FROM '.MAIN_DB_PREFIX.'c_incoterms'),	// Request to select fields
+            'tabsqlsort'=>array("rowid ASC"),															// Sort order
+            'tabfield'=>array("code,libelle"),															// List of fields (result of select to show dictionnary)
+            'tabfieldvalue'=>array("code,libelle"),														// List of fields (list of fields to edit a record)
+            'tabfieldinsert'=>array("code,libelle"),													// List of fields (list of fields for insert)
+            'tabrowid'=>array("rowid"),																	// Name of columns with primary key (try to always name it 'rowid')
+            'tabcond'=>array($conf->global->INCOTERM_ACTIVATE,$conf->incoterm->enabled)
+		);
+        
+        $this->boxes = array();			// List of boxes
+		$r=0;
+		
+		// Permissions
+		$this->rights = array();		// Permission array used by this module
+		$r=0;
+
+		// Main menu entries
+		$this->menus = array();			// List of menus to add
+		$r=0;
+	}
+
+	/**
+	 *		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
+	 *
+     *      @param      string	$options    Options when enabling module ('', 'noboxes')
+	 *      @return     int             	1 if OK, 0 if KO
+	 */
+	function init($options='')
+	{
+		$sql = array();
+		
+		return $this->_init($sql, $options);
+	}
+
+	/**
+	 *		Function called when module is disabled.
+	 *      Remove from database constants, boxes and permissions from Dolibarr database.
+	 *		Data directories are not deleted
+	 *
+     *      @param      string	$options    Options when enabling module ('', 'noboxes')
+	 *      @return     int             	1 if OK, 0 if KO
+	 */
+	function remove($options='')
+	{
+		$sql = array();
+
+		return $this->_remove($sql, $options);
+	}
+}
+
+?>
diff --git a/htdocs/install/mysql/migration/3.7.0-3.8.0.sql b/htdocs/install/mysql/migration/3.7.0-3.8.0.sql
index 60d0e0660da..360c99af189 100755
--- a/htdocs/install/mysql/migration/3.7.0-3.8.0.sql
+++ b/htdocs/install/mysql/migration/3.7.0-3.8.0.sql
@@ -96,3 +96,67 @@ create table llx_contratdet_extrafields
 )ENGINE=innodb;
 
 ALTER TABLE llx_contratdet_extrafields ADD INDEX idx_contratdet_extrafields (fk_object);
+
+
+--
+-- Module incoterm 
+--
+ALTER TABLE llx_facture ADD COLUMN (
+	fk_incoterms integer,
+	location_incoterms varchar(255)
+);
+
+ALTER TABLE llx_commande ADD COLUMN (
+	fk_incoterms integer,
+	location_incoterms varchar(255)
+);
+
+ALTER TABLE llx_propal ADD COLUMN (
+	fk_incoterms integer,
+	location_incoterms varchar(255)
+);
+
+ALTER TABLE llx_expedition ADD COLUMN (
+	fk_incoterms integer,
+	location_incoterms varchar(255)
+);
+
+ALTER TABLE llx_livraison ADD COLUMN (
+	fk_incoterms integer,
+	location_incoterms varchar(255)
+);
+
+ALTER TABLE llx_societe ADD COLUMN (
+	fk_incoterms integer,
+	location_incoterms varchar(255)
+);
+
+ALTER TABLE llx_commande_fournisseur ADD COLUMN (
+	fk_incoterms integer,
+	location_incoterms varchar(255)
+);
+
+CREATE TABLE IF NOT EXISTS llx_c_incoterms (
+  rowid integer NOT NULL AUTO_INCREMENT,
+  code varchar(3) NOT NULL,
+  libelle varchar(255) NOT NULL,
+  active boolean NOT NULL,
+  PRIMARY KEY (rowid)
+) ENGINE=InnoDB;
+
+--
+-- Content of llx_c_incoterms table
+--
+
+INSERT INTO llx_c_incoterms (rowid, code, libelle, active) VALUES
+(1, 'EXW', 'Ex Works, au départ non chargé, non dédouané sortie d''usine (uniquement adapté aux flux domestiques, nationaux)', 1),
+(2, 'FCA', 'Free Carrier, marchandises dédouanées et chargées dans le pays de départ, chez le vendeur ou chez le commissionnaire de transport de l''acheteur', 1),
+(3, 'FAS', 'Free Alongside Ship, sur le quai du port de départ', 1),
+(4, 'FOB', 'Free On Board, chargé sur le bateau, les frais de chargement dans celui-ci étant fonction du liner term indiqué par la compagnie maritime (à la charge du vendeur)', 1),
+(5, 'CFR', 'Cost and Freight, chargé dans le bateau, livraison au port de départ, frais payés jusqu''au port d''arrivée, sans assurance pour le transport, non déchargé du navire à destination (les frais de déchargement sont inclus ou non au port d''arrivée)', 1),
+(6, 'CIF', 'Cost, Insurance and Freight, chargé sur le bateau, frais jusqu''au port d''arrivée, avec l''assurance marchandise transportée souscrite par le vendeur pour le compte de l''acheteur', 1),
+(7, 'CPT', 'Carriage Paid To, livraison au premier transporteur, frais jusqu''au déchargement du mode de transport, sans assurance pour le transport', 1),
+(8, 'CIP', 'Carriage and Insurance Paid to, idem CPT, avec assurance marchandise transportée souscrite par le vendeur pour le compte de l''acheteur', 1),
+(9, 'DAT', 'Delivered At Terminal, marchandises (déchargées) livrées sur quai, dans un terminal maritime, fluvial, aérien, routier ou ferroviaire désigné (dédouanement import, et post-acheminement payés par l''acheteur)', 1),
+(10, 'DAP', 'Delivered At Place, marchandises (non déchargées) mises à disposition de l''acheteur dans le pays d''importation au lieu précisé dans le contrat (déchargement, dédouanement import payé par l''acheteur)', 1),
+(11, 'DDP', 'Delivered Duty Paid, marchandises (non déchargées) livrées à destination finale, dédouanement import et taxes à la charge du vendeur ; l''acheteur prend en charge uniquement le déchargement (si exclusion des taxes type TVA, le préciser clairement)', 1);
diff --git a/htdocs/langs/fr_FR/incoterm.lang b/htdocs/langs/fr_FR/incoterm.lang
new file mode 100644
index 00000000000..e18e37358bb
--- /dev/null
+++ b/htdocs/langs/fr_FR/incoterm.lang
@@ -0,0 +1,6 @@
+Module210009Name=incoterm
+Module210009Desc=Ajouts pour incoterm
+IncotermSetupTitle1=Fonction
+IncotermSetupTitle2=État
+IncotermSetup=Configuration du module Incoterm
+IncotermFunctionDesc=Activer la fonction Incoterm (Société, Proposition comercial, Commande, Facture, Expédition, Livraison, Commande fournisseur)
\ No newline at end of file
-- 
GitLab