dolibarr 21.0.0-alpha
modCategorie.class.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2005 Matthieu Valleton <mv@seeschloss.org>
3 * Copyright (C) 2005-2014 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2012-2016 Juanjo Menent <jmenent@2byte.es>
5 * Copyright (C) 2020 Stéphane Lesage <stephane.lesage@ateis.com>
6 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <https://www.gnu.org/licenses/>.
20 */
21
29include_once DOL_DOCUMENT_ROOT.'/core/modules/DolibarrModules.class.php';
30include_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
31
32
37{
43 public function __construct($db)
44 {
45 global $conf;
46
47 $this->db = $db;
48 $this->numero = 1780;
49
50 $this->family = "technic";
51 $this->module_position = '25';
52 // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
53 $this->name = preg_replace('/^mod/i', '', get_class($this));
54 $this->description = "Gestion des categories (produits, clients, fournisseurs...)";
55
56 // Possible values for version are: 'development', 'experimental', 'dolibarr' or version
57 $this->version = 'dolibarr';
58
59 $this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
60 $this->picto = 'category';
61
62 // Data directories to create when module is enabled
63 $this->dirs = array();
64
65 // Dependencies
66 $this->depends = array();
67
68 // Config pages
69 $this->config_page_url = array('categorie.php@categories');
70 $this->langfiles = array("products", "companies", "categories", "members", "stocks", "website");
71
72 // Constants
73 $this->const = array();
74 $r = 0;
75 $this->const[$r][0] = "CATEGORIE_RECURSIV_ADD";
76 $this->const[$r][1] = "yesno";
77 $this->const[$r][2] = "0";
78 $this->const[$r][3] = 'Affect parent categories';
79 $this->const[$r][4] = 0;
80 $r++;
81
82 // Boxes
83 $this->boxes = array();
84
85 // Permissions
86 $this->rights = array();
87 $this->rights_class = 'categorie';
88
89 $r = 0;
90
91 $this->rights[$r][0] = 241; // id de la permission
92 $this->rights[$r][1] = 'Lire les categories'; // libelle de la permission
93 $this->rights[$r][2] = 'r'; // type de la permission (deprecated)
94 $this->rights[$r][3] = 0; // La permission est-elle une permission par default
95 $this->rights[$r][4] = 'lire';
96 $r++;
97
98 $this->rights[$r][0] = 242; // id de la permission
99 $this->rights[$r][1] = 'Creer/modifier les categories'; // libelle de la permission
100 $this->rights[$r][2] = 'w'; // type de la permission (deprecated)
101 $this->rights[$r][3] = 0; // La permission est-elle une permission par default
102 $this->rights[$r][4] = 'creer';
103 $r++;
104
105 $this->rights[$r][0] = 243; // id de la permission
106 $this->rights[$r][1] = 'Supprimer les categories'; // libelle de la permission
107 $this->rights[$r][2] = 'd'; // type de la permission (deprecated)
108 $this->rights[$r][3] = 0; // La permission est-elle une permission par default
109 $this->rights[$r][4] = 'supprimer';
110 $r++;
111
112
113 // Menus
114 //-------
115 $this->menu = 1; // This module add menu entries. They are coded into menu manager.
116
117
118 // Exports
119 //--------
120 $r = 0;
121
122 // All Categories List
123 $r++;
124 $this->export_code[$r] = $this->rights_class.'_list';
125 $this->export_label[$r] = 'CatListAll';
126 $this->export_icon[$r] = $this->picto;
127 $this->export_enabled[$r] = 'true';
128 $this->export_permission[$r] = array(array("categorie", "lire"));
129
130 $typeexample = "";
131 if (isModEnabled("product") || isModEnabled("service")) {
132 $typeexample .= ($typeexample ? " / " : "")."0=Product-Service";
133 }
134 if (isModEnabled("supplier_order") || isModEnabled("supplier_invoice")) {
135 $typeexample .= ($typeexample ? "/" : "")."1=Supplier";
136 }
137 if (isModEnabled("societe")) {
138 $typeexample .= ($typeexample ? " / " : "")."2=Customer-Prospect";
139 }
140 if (isModEnabled('member')) {
141 $typeexample .= ($typeexample ? " / " : "")."3=Member";
142 }
143 if (isModEnabled("societe")) {
144 $typeexample .= ($typeexample ? " / " : "")."4=Contact";
145 }
146 if (isModEnabled('bank')) {
147 $typeexample .= ($typeexample ? " / " : "")."5=Bank account";
148 }
149 if (isModEnabled('project')) {
150 $typeexample .= ($typeexample ? " / " : "")."6=Project";
151 }
152 if (isModEnabled('user')) {
153 $typeexample .= ($typeexample ? " / " : "")."7=User";
154 }
155 if (isModEnabled('bank')) {
156 $typeexample .= ($typeexample ? " / " : "")."8=Bank line";
157 }
158 if (isModEnabled('stock')) {
159 $typeexample .= ($typeexample ? " / " : "")."9=Warehouse";
160 }
161 if (isModEnabled('agenda')) {
162 $typeexample .= ($typeexample ? " / " : "")."10=Agenda event";
163 }
164 if (isModEnabled('website')) {
165 $typeexample .= ($typeexample ? " / " : "")."11=Website page";
166 }
167
168 // Definition of vars
169 $this->export_fields_array[$r] = array('cat.rowid' => "CategId", 'cat.label' => "Label", 'cat.type' => "Type", 'cat.description' => "Description", 'cat.fk_parent' => "ParentCategoryID", 'pcat.label' => "ParentCategoryLabel", 'cat.color' => "Color", 'cat.date_creation' => "DateCreation", 'cat.tms' => "DateLastModification");
170 $this->export_TypeFields_array[$r] = array('cat.rowid' => 'Numeric', 'cat.label' => "Text", 'cat.type' => "Numeric", 'cat.description' => "Text", 'cat.fk_parent' => 'Numeric', 'pcat.label' => 'Text');
171 $this->export_entities_array[$r] = array(); // We define here only fields that use another picto
172 $this->export_help_array[$r] = array('cat.type' => $typeexample);
173
174 $this->export_sql_start[$r] = 'SELECT DISTINCT ';
175 $this->export_sql_end[$r] = ' FROM '.MAIN_DB_PREFIX.'categorie as cat';
176 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie as pcat ON pcat.rowid = cat.fk_parent';
177 $this->export_sql_end[$r] .= ' WHERE cat.entity IN ('.getEntity('category').')';
178
179 // 0 Products
180 $r++;
181 $this->export_code[$r] = $this->rights_class.'_0_'.Categorie::$MAP_ID_TO_CODE[0];
182 $this->export_label[$r] = 'CatProdList';
183 $this->export_icon[$r] = $this->picto;
184 $this->export_enabled[$r] = 'isModEnabled("product") || isModEnabled("service")';
185 $this->export_permission[$r] = array(array("categorie", "lire"), array("produit", "export"));
186 $this->export_fields_array[$r] = array('cat.rowid' => "CategId", 'cat.label' => "Label", 'cat.description' => "Description", 'cat.fk_parent' => "ParentCategoryID", 'pcat.label' => "ParentCategoryLabel", 'cat.color' => "Color", 'cat.date_creation' => "DateCreation", 'cat.tms' => "DateLastModification", 'p.rowid' => 'ProductId', 'p.ref' => 'Ref', 'p.label' => 'Label');
187 $this->export_TypeFields_array[$r] = array('cat.rowid' => 'Numeric', 'cat.label' => "Text", 'cat.description' => "Text", 'cat.fk_parent' => 'Numeric', 'pcat.label' => 'Text', 'p.rowid' => 'Numeric', 'p.ref' => 'Text', 'p.label' => 'Text');
188 $this->export_entities_array[$r] = array('p.rowid' => 'product', 'p.ref' => 'product', 'p.label' => 'product'); // We define here only fields that use another picto
189
190 $keyforselect = 'product';
191 $keyforelement = 'product';
192 $keyforaliasextra = 'extra';
193 include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
194
195 $this->export_sql_start[$r] = 'SELECT DISTINCT ';
196 $this->export_sql_end[$r] = ' FROM '.MAIN_DB_PREFIX.'categorie as cat';
197 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie as pcat ON pcat.rowid = cat.fk_parent';
198 $this->export_sql_end[$r] .= ' INNER JOIN '.MAIN_DB_PREFIX.'categorie_product as cp ON cp.fk_categorie = cat.rowid';
199 $this->export_sql_end[$r] .= ' INNER JOIN '.MAIN_DB_PREFIX.'product as p ON p.rowid = cp.fk_product';
200 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_extrafields as extra ON extra.fk_object = p.rowid';
201 $this->export_sql_end[$r] .= ' WHERE cat.entity IN ('.getEntity('category').')';
202 $this->export_sql_end[$r] .= ' AND cat.type = 0';
203
204 // 1 Suppliers
205 $r++;
206 $this->export_code[$r] = $this->rights_class.'_1_'.Categorie::$MAP_ID_TO_CODE[1];
207 $this->export_label[$r] = 'CatSupList';
208 $this->export_icon[$r] = $this->picto;
209 $this->export_enabled[$r] = 'isModEnabled("supplier_order") || isModEnabled("supplier_invoice")';
210 $this->export_permission[$r] = array(array("categorie", "lire"), array("fournisseur", "lire"));
211 $this->export_fields_array[$r] = array(
212 'cat.rowid' => "CategId", 'cat.label' => "Label", 'cat.description' => "Description", 'cat.fk_parent' => "ParentCategoryID", 'pcat.label' => "ParentCategoryLabel",
213 'cat.color' => "Color", 'cat.date_creation' => "DateCreation", 'cat.tms' => "DateLastModification",
214 's.rowid' => 'IdThirdParty', 's.nom' => 'Name', 's.prefix_comm' => "Prefix", 's.fournisseur' => "Supplier", 's.datec' => "DateCreation", 's.tms' => "DateLastModification", 's.code_fournisseur' => "SupplierCode",
215 's.address' => "Address", 's.zip' => "Zip", 's.town' => "Town", 'c.label' => "Country", 'c.code' => "CountryCode",
216 's.phone' => "Phone", 's.fax' => "Fax", 's.url' => "Url", 's.email' => "Email",
217 's.siret' => "ProfId1", 's.siren' => "ProfId2", 's.ape' => "ProfId3", 's.idprof4' => "ProfId4", 's.tva_intra' => "VATIntraShort", 's.capital' => "Capital", 's.note_public' => "NotePublic",
218 't.libelle' => 'ThirdPartyType'
219 );
220 $this->export_TypeFields_array[$r] = array(
221 'cat.rowid' => 'Numeric', 'cat.label' => "Text", 'cat.description' => "Text", 'cat.fk_parent' => 'Numeric', 'pcat.label' => 'Text',
222 's.rowid' => 'List:societe:nom', 's.nom' => 'Text', 's.prefix_comm' => "Text", 's.fournisseur' => "Text", 's.datec' => "Date", 's.tms' => "Date", 's.code_fournisseur' => "Text",
223 's.address' => "Text", 's.zip' => "Text", 's.town' => "Text", 'c.label' => "List:c_country:label:label", 'c.code' => "Text",
224 's.phone' => "Text", 's.fax' => "Text", 's.url' => "Text", 's.email' => "Text",
225 's.siret' => "Text", 's.siren' => "Text", 's.ape' => "Text", 's.idprof4' => "Text", 's.tva_intra' => "Text", 's.capital' => "Numeric", 's.note_public' => "Text",
226 't.libelle' => 'List:c_typent:libelle:code'
227 );
228 $this->export_entities_array[$r] = array(
229 's.rowid' => 'company', 's.nom' => 'company', 's.prefix_comm' => "company", 's.fournisseur' => "company", 's.datec' => "company", 's.tms' => "company", 's.code_fournisseur' => "company",
230 's.address' => "company", 's.zip' => "company", 's.town' => "company", 'c.label' => "company", 'c.code' => "company",
231 's.phone' => "company", 's.fax' => "company", 's.url' => "company", 's.email' => "company",
232 's.siret' => "company", 's.siren' => "company", 's.ape' => "company", 's.idprof4' => "company", 's.tva_intra' => "company", 's.capital' => "company", 's.note_public' => "company",
233 't.libelle' => 'company'
234 ); // We define here only fields that use another picto
235
236 $keyforselect = 'societe';
237 $keyforelement = 'company';
238 $keyforaliasextra = 'extra';
239 include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
240
241 $this->export_sql_start[$r] = 'SELECT DISTINCT ';
242 $this->export_sql_end[$r] = ' FROM '.MAIN_DB_PREFIX.'categorie as cat';
243 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie as pcat ON pcat.rowid = cat.fk_parent';
244 $this->export_sql_end[$r] .= ' INNER JOIN '.MAIN_DB_PREFIX.'categorie_fournisseur as cf ON cf.fk_categorie = cat.rowid';
245 $this->export_sql_end[$r] .= ' INNER JOIN '.MAIN_DB_PREFIX.'societe as s ON s.rowid = cf.fk_soc';
246 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'societe_extrafields as extra ON s.rowid = extra.fk_object';
247 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_country as c ON s.fk_pays = c.rowid';
248 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_typent as t ON s.fk_typent = t.id';
249 $this->export_sql_end[$r] .= ' WHERE cat.entity IN ('.getEntity('category').')';
250 $this->export_sql_end[$r] .= ' AND cat.type = 1';
251
252 // 2 Customers/Prospects
253 $r++;
254 $this->export_code[$r] = $this->rights_class.'_2_'.Categorie::$MAP_ID_TO_CODE[2];
255 $this->export_label[$r] = 'CatCusList';
256 $this->export_icon[$r] = $this->picto;
257 $this->export_enabled[$r] = 'isModEnabled("societe")';
258 $this->export_permission[$r] = array(array("categorie", "lire"), array("societe", "export"));
259 $this->export_fields_array[$r] = array(
260 'cat.rowid' => "CategId", 'cat.label' => "Label", 'cat.description' => "Description", 'cat.fk_parent' => "ParentCategoryID", 'pcat.label' => "ParentCategoryLabel",
261 'cat.color' => "Color", 'cat.date_creation' => "DateCreation", 'cat.tms' => "DateLastModification",
262 's.rowid' => 'IdThirdParty', 's.nom' => 'Name', 's.prefix_comm' => "Prefix", 's.client' => "Customer", 's.datec' => "DateCreation", 's.tms' => "DateLastModification", 's.code_client' => "CustomerCode",
263 's.address' => "Address", 's.zip' => "Zip", 's.town' => "Town", 'c.label' => "Country", 'c.code' => "CountryCode",
264 's.phone' => "Phone", 's.fax' => "Fax", 's.url' => "Url", 's.email' => "Email",
265 's.siret' => "ProfId1", 's.siren' => "ProfId2", 's.ape' => "ProfId3", 's.idprof4' => "ProfId4", 's.tva_intra' => "VATIntraShort", 's.capital' => "Capital", 's.note_public' => "NotePublic",
266 't.libelle' => 'ThirdPartyType', 'pl.code' => 'ProspectLevel', 'st.code' => 'ProspectStatus'
267 );
268 $this->export_TypeFields_array[$r] = array(
269 'cat.rowid' => 'Numeric', 'cat.label' => "Text", 'cat.description' => "Text", 'cat.fk_parent' => 'Numeric', 'pcat.label' => 'Text',
270 's.rowid' => 'List:societe:nom', 's.nom' => 'Text', 's.prefix_comm' => "Text", 's.client' => "Text", 's.datec' => "Date", 's.tms' => "Date", 's.code_client' => "Text",
271 's.address' => "Text", 's.zip' => "Text", 's.town' => "Text", 'c.label' => "List:c_country:label:label", 'c.code' => "Text",
272 's.phone' => "Text", 's.fax' => "Text", 's.url' => "Text", 's.email' => "Text",
273 's.siret' => "Text", 's.siren' => "Text", 's.ape' => "Text", 's.idprof4' => "Text", 's.tva_intra' => "Text", 's.capital' => "Numeric", 's.note_public' => "Text",
274 't.libelle' => 'List:c_typent:libelle:code', 'pl.code' => 'List:c_prospectlevel:label:code', 'st.code' => 'List:c_stcomm:libelle:code'
275 );
276 $this->export_entities_array[$r] = array(
277 's.rowid' => 'company', 's.nom' => 'company', 's.prefix_comm' => "company", 's.client' => "company", 's.datec' => "company", 's.tms' => "company", 's.code_client' => "company",
278 's.address' => "company", 's.zip' => "company", 's.town' => "company", 'c.label' => "company", 'c.code' => "company",
279 's.phone' => "company", 's.fax' => "company", 's.url' => "company", 's.email' => "company",
280 's.siret' => "company", 's.siren' => "company", 's.ape' => "company", 's.idprof4' => "company", 's.tva_intra' => "company", 's.capital' => "company", 's.note_public' => "company",
281 't.libelle' => 'company', 'pl.code' => 'company', 'st.code' => 'company'
282 ); // We define here only fields that use another picto
283
284 $keyforselect = 'societe';
285 $keyforelement = 'company';
286 $keyforaliasextra = 'extra';
287 include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
288
289 $this->export_sql_start[$r] = 'SELECT DISTINCT ';
290 $this->export_sql_end[$r] = ' FROM '.MAIN_DB_PREFIX.'categorie as cat';
291 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie as pcat ON pcat.rowid = cat.fk_parent';
292 $this->export_sql_end[$r] .= ' INNER JOIN '.MAIN_DB_PREFIX.'categorie_societe as cs ON cs.fk_categorie = cat.rowid';
293 $this->export_sql_end[$r] .= ' INNER JOIN '.MAIN_DB_PREFIX.'societe as s ON s.rowid = cs.fk_soc';
294 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'societe_extrafields as extra ON s.rowid = extra.fk_object';
295 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_country as c ON s.fk_pays = c.rowid';
296 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_typent as t ON s.fk_typent = t.id';
297 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_prospectlevel as pl ON s.fk_prospectlevel = pl.code';
298 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_stcomm as st ON s.fk_stcomm = st.id';
299 $this->export_sql_end[$r] .= ' WHERE cat.entity IN ('.getEntity('category').')';
300 $this->export_sql_end[$r] .= ' AND cat.type = 2';
301
302 // 3 Members
303 $r++;
304 $this->export_code[$r] = $this->rights_class.'_3_'.Categorie::$MAP_ID_TO_CODE[3];
305 $this->export_label[$r] = 'CatMemberList';
306 $this->export_icon[$r] = $this->picto;
307 $this->export_enabled[$r] = 'isModEnabled("member")';
308 $this->export_permission[$r] = array(array("categorie", "lire"), array("adherent", "export"));
309 $this->export_fields_array[$r] = array('cat.rowid' => "CategId", 'cat.label' => "Label", 'cat.description' => "Description", 'cat.fk_parent' => "ParentCategoryID", 'pcat.label' => "ParentCategoryLabel", 'p.rowid' => 'MemberId', 'p.lastname' => 'LastName', 'p.firstname' => 'Firstname');
310 $this->export_TypeFields_array[$r] = array('cat.rowid' => "Numeric", 'cat.label' => "Text", 'cat.description' => "Text", 'cat.fk_parent' => 'Numeric', 'pcat.label' => 'Text', 'p.lastname' => 'Text', 'p.firstname' => 'Text');
311 $this->export_entities_array[$r] = array('p.rowid' => 'member', 'p.lastname' => 'member', 'p.firstname' => 'member'); // We define here only fields that use another picto
312
313 $keyforselect = 'adherent';
314 $keyforelement = 'member';
315 $keyforaliasextra = 'extra';
316 include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
317
318 $this->export_sql_start[$r] = 'SELECT DISTINCT ';
319 $this->export_sql_end[$r] = ' FROM '.MAIN_DB_PREFIX.'categorie as cat';
320 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie as pcat ON pcat.rowid = cat.fk_parent';
321 $this->export_sql_end[$r] .= ' INNER JOIN '.MAIN_DB_PREFIX.'categorie_member as cm ON cm.fk_categorie = cat.rowid';
322 $this->export_sql_end[$r] .= ' INNER JOIN '.MAIN_DB_PREFIX.'adherent as p ON p.rowid = cm.fk_member';
323 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'adherent_extrafields as extra ON cat.rowid = extra.fk_object ';
324 $this->export_sql_end[$r] .= ' WHERE cat.entity IN ('.getEntity('category').')';
325 $this->export_sql_end[$r] .= ' AND cat.type = 3';
326
327 // 4 Contacts
328 $r++;
329 $this->export_code[$r] = $this->rights_class.'_4_'.Categorie::$MAP_ID_TO_CODE[4];
330 $this->export_label[$r] = 'CatContactList';
331 $this->export_icon[$r] = $this->picto;
332 $this->export_enabled[$r] = 'isModEnabled("societe")';
333 $this->export_permission[$r] = array(array("categorie", "lire"), array("societe", "contact", "export"));
334 $this->export_fields_array[$r] = array(
335 'cat.rowid' => "CategId", 'cat.label' => "Label", 'cat.description' => "Description", 'cat.fk_parent' => "ParentCategoryID", 'pcat.label' => "ParentCategoryLabel",
336 'cat.color' => "Color", 'cat.date_creation' => "DateCreation", 'cat.tms' => "DateLastModification",
337 'p.rowid' => 'ContactId', 'civ.label' => 'UserTitle', 'p.lastname' => 'LastName', 'p.firstname' => 'Firstname',
338 'p.address' => 'Address', 'p.zip' => 'Zip', 'p.town' => 'Town', 'c.code' => 'CountryCode', 'c.label' => 'Country',
339 'p.birthday' => 'DateOfBirth', 'p.poste' => 'PostOrFunction',
340 'p.phone' => 'Phone', 'p.phone_perso' => 'PhonePerso', 'p.phone_mobile' => 'PhoneMobile', 'p.fax' => 'Fax', 'p.email' => 'Email',
341 'p.note_private' => 'NotePrivate', 'p.note_public' => 'NotePublic', 'p.statut' => 'Status',
342 's.nom' => "Name", 's.client' => "Customer", 's.fournisseur' => "Supplier", 's.status' => "Status",
343 's.address' => "Address", 's.zip' => "Zip", 's.town' => "Town",
344 's.phone' => "Phone", 's.fax' => "Fax", 's.url' => "Url", 's.email' => "Email"
345 );
346 $this->export_TypeFields_array[$r] = array(
347 'cat.rowid' => 'Numeric', 'cat.label' => "Text", 'cat.description' => "Text", 'cat.fk_parent' => 'Numeric', 'pcat.label' => 'Text',
348 'civ.label' => 'List:c_civility:label:label', 'p.rowid' => 'Numeric', 'p.lastname' => 'Text', 'p.firstname' => 'Text',
349 'p.address' => 'Text', 'p.zip' => 'Text', 'p.town' => 'Text', 'c.code' => 'Text', 'c.label' => 'List:c_country:label:label',
350 'p.birthday' => 'Date', 'p.poste' => 'Text',
351 'p.phone' => 'Text', 'p.phone_perso' => 'Text', 'p.phone_mobile' => 'Text', 'p.fax' => 'Text', 'p.email' => 'Text',
352 'p.note_private' => 'Text', 'p.note_public' => 'Text', 'p.statut' => 'Boolean',
353 's.nom' => "Text", 's.client' => "Boolean", 's.fournisseur' => "Boolean", 's.status' => "Boolean",
354 's.address' => "Text", 's.zip' => "Text", 's.town' => "Text",
355 's.phone' => "Text", 's.fax' => "Text", 's.url' => "Text", 's.email' => "Text"
356 );
357 $this->export_entities_array[$r] = array(
358 'p.rowid' => 'contact', 'civ.label' => 'contact', 'p.lastname' => 'contact', 'p.firstname' => 'contact',
359 'p.address' => 'contact', 'p.zip' => 'contact', 'p.town' => 'contact', 'c.code' => 'contact', 'c.label' => 'contact',
360 'p.birthday' => 'contact', 'p.poste' => 'contact',
361 'p.phone' => 'contact', 'p.phone_perso' => 'contact', 'p.phone_mobile' => 'contact', 'p.fax' => 'contact', 'p.email' => 'contact',
362 'p.note_private' => 'contact', 'p.note_public' => 'contact', 'p.statut' => 'contact',
363 's.nom' => "company", 's.client' => "company", 's.fournisseur' => "company", 's.status' => "company",
364 's.address' => "company", 's.zip' => "company", 's.town' => "company",
365 's.phone' => "company", 's.fax' => "company", 's.url' => "company", 's.email' => "company"
366 ); // We define here only fields that use another picto
367
368 $keyforselect = 'socpeople';
369 $keyforelement = 'contact';
370 $keyforaliasextra = 'extra';
371 include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
372
373 $this->export_sql_start[$r] = 'SELECT DISTINCT ';
374 $this->export_sql_end[$r] = ' FROM '.MAIN_DB_PREFIX.'categorie as cat';
375 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie as pcat ON pcat.rowid = cat.fk_parent';
376 $this->export_sql_end[$r] .= ' INNER JOIN '.MAIN_DB_PREFIX.'categorie_contact as cc ON cc.fk_categorie = cat.rowid';
377 $this->export_sql_end[$r] .= ' INNER JOIN '.MAIN_DB_PREFIX.'socpeople as p ON p.rowid = cc.fk_socpeople';
378 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'socpeople_extrafields as extra ON extra.fk_object = p.rowid';
379 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_civility as civ ON civ.code = p.civility';
380 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_country as c ON c.rowid = p.fk_pays';
381 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'societe as s ON s.rowid = p.fk_soc';
382 $this->export_sql_end[$r] .= ' WHERE cat.entity IN ('.getEntity('category').')';
383 $this->export_sql_end[$r] .= ' AND cat.type = 4';
384
385 // 5 Bank accounts, TODO ?
386
387 // 6 Projects
388 $r++;
389 $this->export_code[$r] = $this->rights_class.'_6_'.Categorie::$MAP_ID_TO_CODE[6];
390 $this->export_label[$r] = 'CatProjectsList';
391 $this->export_icon[$r] = $this->picto;
392 $this->export_enabled[$r] = "isModEnabled('project')";
393 $this->export_permission[$r] = array(array("categorie", "lire"), array("projet", "export"));
394 $this->export_fields_array[$r] = array('cat.rowid' => "CategId", 'cat.label' => "Label", 'cat.description' => "Description", 'cat.fk_parent' => "ParentCategory", 'pcat.label' => "ParentCategoryLabel", 'cat.color' => "Color", 'cat.date_creation' => "DateCreation", 'cat.tms' => "DateLastModification", 'p.rowid' => 'ProjectId', 'p.ref' => 'Ref', 's.rowid' => "IdThirdParty", 's.nom' => "Name");
395 $this->export_TypeFields_array[$r] = array('cat.rowid' => 'Numeric', 'cat.label' => "Text", 'cat.description' => "Text", 'cat.fk_parent' => 'Numeric', 'pcat.label' => 'Text', 'p.rowid' => 'Numeric', 'p.ref' => 'Text', 's.rowid' => "Numeric", 's.nom' => "Text");
396 $this->export_entities_array[$r] = array('p.rowid' => 'project', 'p.ref' => 'project', 's.rowid' => "company", 's.nom' => "company"); // We define here only fields that use another picto
397
398 $keyforselect = 'projet';
399 $keyforelement = 'project';
400 $keyforaliasextra = 'extra';
401 include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
402
403 $this->export_sql_start[$r] = 'SELECT DISTINCT ';
404 $this->export_sql_end[$r] = ' FROM '.MAIN_DB_PREFIX.'categorie as cat';
405 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie as pcat ON pcat.rowid = cat.fk_parent';
406 $this->export_sql_end[$r] .= ' INNER JOIN '.MAIN_DB_PREFIX.'categorie_project as cp ON cp.fk_categorie = cat.rowid';
407 $this->export_sql_end[$r] .= ' INNER JOIN '.MAIN_DB_PREFIX.'projet as p ON p.rowid = cp.fk_project';
408 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'projet_extrafields as extra ON extra.fk_object = p.rowid';
409 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'societe as s ON s.rowid = p.fk_soc';
410 $this->export_sql_end[$r] .= ' WHERE cat.entity IN ('.getEntity('category').')';
411 $this->export_sql_end[$r] .= ' AND cat.type = 6';
412
413 // 7 Users
414 $r++;
415 $this->export_code[$r] = $this->rights_class.'_7_'.Categorie::$MAP_ID_TO_CODE[7];
416 $this->export_label[$r] = 'CatUsersList';
417 $this->export_icon[$r] = $this->picto;
418 $this->export_enabled[$r] = 'isModEnabled("user")';
419 $this->export_permission[$r] = array(array("categorie", "lire"), array("user", "export"));
420 $this->export_fields_array[$r] = array('cat.rowid' => "CategId", 'cat.label' => "Label", 'cat.description' => "Description", 'cat.fk_parent' => "ParentCategory", 'pcat.label' => "ParentCategoryLabel", 'cat.color' => "Color", 'cat.date_creation' => "DateCreation", 'cat.tms' => "DateLastModification", 'p.rowid' => 'UserID', 'p.login' => 'Login', 'p.lastname' => 'Lastname', 'p.firstname' => 'Firstname');
421 $this->export_TypeFields_array[$r] = array('cat.rowid' => "Numeric", 'cat.label' => "Text", 'cat.description' => "Text", 'cat.fk_parent' => 'Numeric', 'pcat.label' => 'Text', 'p.rowid' => 'Numeric', 'p.login' => 'Text', 'p.lastname' => 'Text', 'p.firstname' => 'Text');
422 $this->export_entities_array[$r] = array('p.rowid' => 'user', 'p.login' => 'user', 'p.lastname' => 'user', 'p.firstname' => 'user'); // We define here only fields that use another picto
423
424 $keyforselect = 'user';
425 $keyforelement = 'user';
426 $keyforaliasextra = 'extra';
427 include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
428
429 $this->export_sql_start[$r] = 'SELECT DISTINCT ';
430 $this->export_sql_end[$r] = ' FROM '.MAIN_DB_PREFIX.'categorie as cat';
431 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie as pcat ON pcat.rowid = cat.fk_parent';
432 $this->export_sql_end[$r] .= ' INNER JOIN '.MAIN_DB_PREFIX.'categorie_user as cu ON cu.fk_categorie = cat.rowid';
433 $this->export_sql_end[$r] .= ' INNER JOIN '.MAIN_DB_PREFIX.'user as p ON p.rowid = cu.fk_user';
434 $this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'user_extrafields as extra ON extra.fk_object = p.rowid';
435 $this->export_sql_end[$r] .= ' WHERE cat.entity IN ('.getEntity('category').')';
436 $this->export_sql_end[$r] .= ' AND cat.type = 7';
437
438 // 8 Bank Lines, TODO ?
439
440 // 9 Warehouses, TODO ?
441
442 // 10 Agenda Events, TODO ?
443
444 // 11 Website Pages, TODO ?
445
446 // Imports
447 //--------
448
449 $r = 0;
450
451 // Categories
452 $r++;
453 $this->import_code[$r] = $this->rights_class.'_list';
454 $this->import_label[$r] = "CatList"; // Translation key
455 $this->import_icon[$r] = $this->picto;
456 $this->import_entities_array[$r] = array(); // We define here only fields that use another icon that the one defined into import_icon
457 $this->import_tables_array[$r] = array('ca' => MAIN_DB_PREFIX.'categorie');
458 $this->import_fields_array[$r] = array(
459 'ca.label' => "Label*", 'ca.type' => "Type*", 'ca.description' => "Description",
460 'ca.fk_parent' => 'ParentCategory'
461 );
462 $this->import_regex_array[$r] = array('ca.type' => '^(0|1|2|3|4|5|6|7|8|9|10|11)$');
463 $this->import_convertvalue_array[$r] = array(
464 'ca.fk_parent' => array(
465 'rule' => 'fetchidfromcodeandlabel',
466 'classfile' => '/categories/class/categorie.class.php',
467 'class' => 'Categorie',
468 'method' => 'fetch',
469 'element' => 'category',
470 'codefromfield' => 'ca.type'
471 )
472 );
473
474 $this->import_examplevalues_array[$r] = array(
475 'ca.label' => "My Category Label", 'ca.type' => $typeexample, 'ca.description' => "My Category description", // $typeexample built above in exports
476 'ca.fk_parent' => 'rowid or label'
477 );
478 $this->import_updatekeys_array[$r] = array('ca.label' => 'Label', 'ca.type' => 'Type');
479
480 // 0 Products
481 if (isModEnabled("product")) {
482 $r++;
483 $this->import_code[$r] = $this->rights_class.'_0_'.Categorie::$MAP_ID_TO_CODE[0];
484 $this->import_label[$r] = "CatProdLinks"; // Translation key
485 $this->import_icon[$r] = $this->picto;
486 $this->import_entities_array[$r] = array(); // We define here only fields that use another icon that the one defined into import_icon
487 $this->import_tables_array[$r] = array('cp' => MAIN_DB_PREFIX.'categorie_product');
488 $this->import_fields_array[$r] = array('cp.fk_categorie' => "Category*", 'cp.fk_product' => "Product*");
489 $this->import_regex_array[$r] = array('cp.fk_categorie' => 'rowid@'.MAIN_DB_PREFIX.'categorie:type=0');
490
491 $this->import_convertvalue_array[$r] = array(
492 'cp.fk_categorie' => array('rule' => 'fetchidfromref', 'classfile' => '/categories/class/categorie.class.php', 'class' => 'Categorie', 'method' => 'fetch', 'element' => 'category'),
493 'cp.fk_product' => array('rule' => 'fetchidfromref', 'classfile' => '/product/class/product.class.php', 'class' => 'Product', 'method' => 'fetch', 'element' => 'Product')
494 );
495 $this->import_examplevalues_array[$r] = array('cp.fk_categorie' => "rowid or label", 'cp.fk_product' => "rowid or ref");
496 $this->import_updatekeys_array[$r] = array('cp.fk_categorie' => 'Category', 'cp.fk_product' => 'ProductRef');
497 }
498
499 // 1 Suppliers
500 if (isModEnabled("supplier_order") || isModEnabled("supplier_invoice")) {
501 $r++;
502 $this->import_code[$r] = $this->rights_class.'_1_'.Categorie::$MAP_ID_TO_CODE[1];
503 $this->import_label[$r] = "CatSupLinks"; // Translation key
504 $this->import_icon[$r] = $this->picto;
505 $this->import_entities_array[$r] = array(); // We define here only fields that use another icon that the one defined into import_icon
506 $this->import_tables_array[$r] = array('cs' => MAIN_DB_PREFIX.'categorie_fournisseur');
507 $this->import_fields_array[$r] = array('cs.fk_categorie' => "Category*", 'cs.fk_soc' => "Supplier*");
508 $this->import_regex_array[$r] = array(
509 'cs.fk_categorie' => 'rowid@'.MAIN_DB_PREFIX.'categorie:type=1',
510 'cs.fk_soc' => 'rowid@'.MAIN_DB_PREFIX.'societe:fournisseur>0'
511 );
512
513 $this->import_convertvalue_array[$r] = array(
514 'cs.fk_categorie' => array('rule' => 'fetchidfromref', 'classfile' => '/categories/class/categorie.class.php', 'class' => 'Categorie', 'method' => 'fetch', 'element' => 'category'),
515 'cs.fk_soc' => array('rule' => 'fetchidfromref', 'classfile' => '/societe/class/societe.class.php', 'class' => 'Societe', 'method' => 'fetch', 'element' => 'ThirdParty')
516 );
517 $this->import_examplevalues_array[$r] = array('cs.fk_categorie' => "rowid or label", 'cs.fk_soc' => "rowid or name");
518 }
519
520 // 2 Customers
521 if (isModEnabled("societe")) {
522 $r++;
523 $this->import_code[$r] = $this->rights_class.'_2_'.Categorie::$MAP_ID_TO_CODE[2];
524 $this->import_label[$r] = "CatCusLinks"; // Translation key
525 $this->import_icon[$r] = $this->picto;
526 $this->import_entities_array[$r] = array(); // We define here only fields that use another icon that the one defined into import_icon
527 $this->import_tables_array[$r] = array('cs' => MAIN_DB_PREFIX.'categorie_societe');
528 $this->import_fields_array[$r] = array('cs.fk_categorie' => "Category*", 'cs.fk_soc' => "Customer*");
529 $this->import_regex_array[$r] = array(
530 'cs.fk_categorie' => 'rowid@'.MAIN_DB_PREFIX.'categorie:type=2',
531 'cs.fk_soc' => 'rowid@'.MAIN_DB_PREFIX.'societe:client>0'
532 );
533
534 $this->import_convertvalue_array[$r] = array(
535 'cs.fk_categorie' => array('rule' => 'fetchidfromref', 'classfile' => '/categories/class/categorie.class.php', 'class' => 'Categorie', 'method' => 'fetch', 'element' => 'category'),
536 'cs.fk_soc' => array('rule' => 'fetchidfromref', 'classfile' => '/societe/class/societe.class.php', 'class' => 'Societe', 'method' => 'fetch', 'element' => 'ThirdParty')
537 );
538 $this->import_examplevalues_array[$r] = array('cs.fk_categorie' => "rowid or label", 'cs.fk_soc' => "rowid or name");
539 }
540
541 // 3 Members
542 if (isModEnabled('member')) {
543 $r++;
544 $this->import_code[$r] = $this->rights_class.'_3_'.Categorie::$MAP_ID_TO_CODE[3];
545 $this->import_label[$r] = "CatMembersLinks"; // Translation key
546 $this->import_icon[$r] = $this->picto;
547 $this->import_entities_array[$r] = array(); // We define here only fields that use another icon that the one defined into import_icon
548 $this->import_tables_array[$r] = array('cm' => MAIN_DB_PREFIX.'categorie_contact');
549 $this->import_fields_array[$r] = array('cm.fk_categorie' => "Category*", 'cm.fk_member' => "Member*");
550 $this->import_regex_array[$r] = array('cm.fk_categorie' => 'rowid@'.MAIN_DB_PREFIX.'categorie:type=3');
551
552 $this->import_convertvalue_array[$r] = array(
553 'cs.fk_categorie' => array('rule' => 'fetchidfromref', 'classfile' => '/categories/class/categorie.class.php', 'class' => 'Categorie', 'method' => 'fetch', 'element' => 'category'),
554 'cs.fk_member' => array('rule' => 'fetchidfromref', 'classfile' => '/adherents/class/adherent.class.php', 'class' => 'Adherent', 'method' => 'fetch', 'element' => 'Member')
555 );
556 $this->import_examplevalues_array[$r] = array('cs.fk_categorie' => "rowid or label", 'cs.fk_member' => "rowid or ref");
557 }
558
559 // 4 Contacts/Addresses
560 if (isModEnabled("societe")) {
561 $r++;
562 $this->import_code[$r] = $this->rights_class.'_4_'.Categorie::$MAP_ID_TO_CODE[4];
563 $this->import_label[$r] = "CatContactsLinks"; // Translation key
564 $this->import_icon[$r] = $this->picto;
565 $this->import_entities_array[$r] = array(); // We define here only fields that use another icon that the one defined into import_icon
566 $this->import_tables_array[$r] = array('cc' => MAIN_DB_PREFIX.'categorie_contact');
567 $this->import_fields_array[$r] = array('cc.fk_categorie' => "Category*", 'cc.fk_socpeople' => "IdContact*");
568 $this->import_regex_array[$r] = array(
569 'cc.fk_categorie' => 'rowid@'.MAIN_DB_PREFIX.'categorie:type=4'
570 //'cc.fk_socpeople'=>'rowid@'.MAIN_DB_PREFIX.'socpeople'
571 );
572
573 $this->import_convertvalue_array[$r] = array(
574 'cc.fk_categorie' => array('rule' => 'fetchidfromref', 'classfile' => '/categories/class/categorie.class.php', 'class' => 'Categorie', 'method' => 'fetch', 'element' => 'category'),
575 //'cc.fk_socpeople'=>array('rule'=>'fetchidfromref','classfile'=>'/contact/class/contact.class.php','class'=>'Contact','method'=>'fetch','element'=>'Contact')
576 );
577 $this->import_examplevalues_array[$r] = array('cc.fk_categorie' => "rowid or label", 'cc.fk_socpeople' => "rowid");
578 }
579
580 // 5 Bank accounts, TODO ?
581
582 // 6 Projects
583 if (isModEnabled('project')) {
584 $r++;
585 $this->import_code[$r] = $this->rights_class.'_6_'.Categorie::$MAP_ID_TO_CODE[6];
586 $this->import_label[$r] = "CatProjectsLinks"; // Translation key
587 $this->import_icon[$r] = $this->picto;
588 $this->import_entities_array[$r] = array(); // We define here only fields that use another icon that the one defined into import_icon
589 $this->import_tables_array[$r] = array('cp' => MAIN_DB_PREFIX.'categorie_project');
590 $this->import_fields_array[$r] = array('cp.fk_categorie' => "Category*", 'cp.fk_project' => "Project*");
591 $this->import_regex_array[$r] = array('cp.fk_categorie' => 'rowid@'.MAIN_DB_PREFIX.'categorie:type=6');
592
593 $this->import_convertvalue_array[$r] = array(
594 'cs.fk_categorie' => array('rule' => 'fetchidfromref', 'classfile' => '/categories/class/categorie.class.php', 'class' => 'Categorie', 'method' => 'fetch', 'element' => 'category'),
595 'cs.fk_project' => array('rule' => 'fetchidfromref', 'classfile' => '/projet/class/project.class.php', 'class' => 'Project', 'method' => 'fetch', 'element' => 'Project')
596 );
597 $this->import_examplevalues_array[$r] = array('cp.fk_categorie' => "rowid or label", 'cp.fk_project' => "rowid or ref");
598 }
599
600 // 7 Users
601 if (isModEnabled('user')) {
602 $r++;
603 $this->import_code[$r] = $this->rights_class.'_7_'.Categorie::$MAP_ID_TO_CODE[7];
604 $this->import_label[$r] = "CatUsersLinks"; // Translation key
605 $this->import_icon[$r] = $this->picto;
606 $this->import_entities_array[$r] = array(); // We define here only fields that use another icon that the one defined into import_icon
607 $this->import_tables_array[$r] = array('cu' => MAIN_DB_PREFIX.'categorie_user');
608 $this->import_fields_array[$r] = array('cu.fk_categorie' => "Category*", 'cu.fk_user' => "User*");
609 $this->import_regex_array[$r] = array('cu.fk_categorie' => 'rowid@'.MAIN_DB_PREFIX.'categorie:type=7');
610
611 $this->import_convertvalue_array[$r] = array(
612 'cu.fk_categorie' => array('rule' => 'fetchidfromref', 'classfile' => '/categories/class/categorie.class.php', 'class' => 'Categorie', 'method' => 'fetch', 'element' => 'category'),
613 'cu.fk_user' => array('rule' => 'fetchidfromref', 'classfile' => '/user/class/user.class.php', 'class' => 'User', 'method' => 'fetch', 'element' => 'User')
614 );
615 $this->import_examplevalues_array[$r] = array('cu.fk_categorie' => "rowid or label", 'cu.fk_user' => "rowid or login");
616 }
617
618 // 8 Bank Lines, TODO ?
619
620 // 9 Warehouses, TODO ?
621
622 // 10 Agenda Events, TODO ?
623
624 // 11 Website Pages, TODO ?
625 }
626
627
636 public function init($options = '')
637 {
638 // Permissions
639 $this->remove($options);
640
641 $sql = array();
642
643 return $this->_init($sql, $options);
644 }
645}
Class DolibarrModules.
_init($array_sql, $options='')
Enables a module.
Class to describe and enable module Categorie.
init($options='')
Function called when module is enabled.
__construct($db)
Constructor.
print $script_file $mode $langs defaultlang(is_numeric($duration_value) ? " delay=". $duration_value :"").(is_numeric($duration_value2) ? " after cd cd cd description as description
Only used if Module[ID]Desc translation string is not found.
$conf db name
Only used if Module[ID]Name translation string is not found.
Definition repair.php:142