Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 911 lines (821 sloc) 27.039 kb
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
1 <?php
4c96e42 Laurent Destailleur Uniformisation code
eldy authored
2 /* Copyright (C) 2006-2008 Laurent Destailleur <eldy@users.sourceforge.net>
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 */
18
19 /**
20 \file htdocs/commonobject.class.php
21 \ingroup core
22 \brief Fichier de la classe mere des classes metiers (facture, contrat, propal, commande, etc...)
4c96e42 Laurent Destailleur Uniformisation code
eldy authored
23 \version $Id$
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
24 */
25
26
27 /**
0bdc1ea Laurent Destailleur Fix: Plantage contact not found
eldy authored
28 \class CommonObject
71186b4 Laurent Destailleur New: Support save of NPR vat in order and invoice
eldy authored
29 \brief Classe mere pour h�ritage des classes metiers
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
30 */
31
32 class CommonObject
33 {
34
35 /**
71186b4 Laurent Destailleur New: Support save of NPR vat in order and invoice
eldy authored
36 * \brief Ajoute un contact associ� au l'entit� d�finie dans $this->element
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
37 * \param fk_socpeople Id du contact a ajouter
38 * \param type_contact Type de contact (code ou id)
39 * \param source external=Contact externe (llx_socpeople), internal=Contact interne (llx_user)
40 * \return int <0 si erreur, >0 si ok
41 */
42 function add_contact($fk_socpeople, $type_contact, $source='external')
43 {
44 global $langs;
45
46 dolibarr_syslog("CommonObject::add_contact $fk_socpeople, $type_contact, $source");
47
71186b4 Laurent Destailleur New: Support save of NPR vat in order and invoice
eldy authored
48 // V�rification parametres
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
49 if ($fk_socpeople <= 0)
50 {
51 $this->error=$langs->trans("ErrorWrongValueForParameter","1");
52 dolibarr_syslog("CommonObject::add_contact ".$this->error,LOG_ERR);
53 return -1;
54 }
55 if (! $type_contact)
56 {
57 $this->error=$langs->trans("ErrorWrongValueForParameter","2");
58 dolibarr_syslog("CommonObject::add_contact ".$this->error,LOG_ERR);
59 return -2;
60 }
61
62 $id_type_contact=0;
63 if (is_numeric($type_contact))
64 {
65 $id_type_contact=$type_contact;
66 }
67 else
68 {
69 // On recherche id type_contact
70 $sql = "SELECT tc.rowid";
71 $sql.= " FROM ".MAIN_DB_PREFIX."c_type_contact as tc";
72 $sql.= " WHERE element='".$this->element."'";
73 $sql.= " AND source='".$source."'";
74 $sql.= " AND code='".$type_contact."' AND active=1";
75 $resql=$this->db->query($sql);
76 if ($resql)
77 {
78 $obj = $this->db->fetch_object($resql);
79 $id_type_contact=$obj->rowid;
80 }
81 }
82
83 $datecreate = time();
84
85 // Insertion dans la base
86 $sql = "INSERT INTO ".MAIN_DB_PREFIX."element_contact";
87 $sql.= " (element_id, fk_socpeople, datecreate, statut, fk_c_type_contact) ";
88 $sql.= " VALUES (".$this->id.", ".$fk_socpeople." , " ;
89 $sql.= $this->db->idate($datecreate);
90 $sql.= ", 4, '". $id_type_contact . "' ";
91 $sql.= ")";
92 dolibarr_syslog("CommonObject::add_contact sql=".$sql);
93
94 $resql=$this->db->query($sql);
95 if ($resql)
96 {
97 return 1;
98 }
99 else
100 {
51468b6 Laurent Destailleur Fix: Regression. Le contact doit toujours apparaitre dans la liste des c...
eldy authored
101 if ($this->db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS')
102 {
103 $this->error=$this->db->errno();
104 return -2;
105 }
106 else
107 {
108 $this->error=$this->db->error()." - $sql";
109 dolibarr_syslog($this->error,LOG_ERR);
110 return -1;
111 }
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
112 }
113 }
114
115 /**
116 * \brief Mise a jour du statut d'un contact
71186b4 Laurent Destailleur New: Support save of NPR vat in order and invoice
eldy authored
117 * \param rowid La reference du lien contact-entit�
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
118 * \param statut Le nouveau statut
119 * \param type_contact_id Description du type de contact
120 * \return int <0 si erreur, =0 si ok
121 */
122 function update_contact($rowid, $statut, $type_contact_id)
123 {
124 // Insertion dans la base
125 $sql = "UPDATE ".MAIN_DB_PREFIX."element_contact set";
897f40d Laurent Destailleur Fix: La recup des contacts d'entit� �chouait dans certains cas.
eldy authored
126 $sql.= " statut = ".$statut.",";
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
127 $sql.= " fk_c_type_contact = '".$type_contact_id ."'";
128 $sql.= " where rowid = ".$rowid;
129 // Retour
130 if ( $this->db->query($sql) )
131 {
132 return 0;
133 }
134 else
135 {
136 dolibarr_print_error($this->db);
137 return -1;
138 }
139 }
140
141 /**
142 * \brief Supprime une ligne de contact
143 * \param rowid La reference du contact
144 * \return statur >0 si ok, <0 si ko
145 */
146 function delete_contact($rowid)
147 {
148 $sql = "DELETE FROM ".MAIN_DB_PREFIX."element_contact";
149 $sql.= " WHERE rowid =".$rowid;
d02ba9d Laurent Destailleur Add logs
eldy authored
150
151 dolibarr_syslog("CommonObject::delete_contact sql=".$sql);
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
152 if ($this->db->query($sql))
153 {
154 return 1;
155 }
156 else
157 {
d02ba9d Laurent Destailleur Add logs
eldy authored
158 $this->error=$this->db->lasterror();
159 dolibarr_syslog("CommonObject::delete_contact error=".$this->error, LOG_ERR);
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
160 return -1;
161 }
162 }
163
164 /**
71186b4 Laurent Destailleur New: Support save of NPR vat in order and invoice
eldy authored
165 * \brief R�cup�re les lignes de contact de l'objet
166 * \param statut Statut des lignes detail � r�cup�rer
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
167 * \param source Source du contact external (llx_socpeople) ou internal (llx_user)
168 * \return array Tableau des rowid des contacts
169 */
170 function liste_contact($statut=-1,$source='external')
171 {
172 global $langs;
173
174 $tab=array();
175
176 $sql = "SELECT ec.rowid, ec.statut, ec.fk_socpeople as id,";
177 if ($source == 'internal') $sql.=" '-1' as socid,";
178 if ($source == 'external') $sql.=" t.fk_soc as socid,";
59a3a32 Fix: changement de idp en rowid pour llx_societe et llx_socpeople afin d...
Regis Houssin authored
179 $sql.=" t.name as nom,";
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
180 $sql.= "tc.source, tc.element, tc.code, tc.libelle";
51468b6 Laurent Destailleur Fix: Regression. Le contact doit toujours apparaitre dans la liste des c...
eldy authored
181 $sql.= " FROM ".MAIN_DB_PREFIX."c_type_contact tc,";
182 $sql.= " ".MAIN_DB_PREFIX."element_contact ec";
0bfb774 Laurent Destailleur Fix: La suppression d'un contact n'effacait pas les liens sur element_co...
eldy authored
183 if ($source == 'internal') $sql.=" LEFT JOIN ".MAIN_DB_PREFIX."user t on ec.fk_socpeople = t.rowid";
184 if ($source == 'external') $sql.=" LEFT JOIN ".MAIN_DB_PREFIX."socpeople t on ec.fk_socpeople = t.rowid";
59a3a32 Fix: changement de idp en rowid pour llx_societe et llx_socpeople afin d...
Regis Houssin authored
185 $sql.= " WHERE ec.element_id =".$this->id;
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
186 $sql.= " AND ec.fk_c_type_contact=tc.rowid";
187 $sql.= " AND tc.element='".$this->element."'";
188 if ($source == 'internal') $sql.= " AND tc.source = 'internal'";
189 if ($source == 'external') $sql.= " AND tc.source = 'external'";
190 $sql.= " AND tc.active=1";
59a3a32 Fix: changement de idp en rowid pour llx_societe et llx_socpeople afin d...
Regis Houssin authored
191 if ($statut >= 0) $sql.= " AND ec.statut = '".$statut."'";
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
192 $sql.=" ORDER BY t.name ASC";
193
c99f3d7 Laurent Destailleur Feature: Choix du destinataire (adresse tiers ou adresse contact propal)...
eldy authored
194 dolibarr_syslog("CommonObject::liste_contact sql=".$sql);
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
195 $resql=$this->db->query($sql);
196 if ($resql)
197 {
198 $num=$this->db->num_rows($resql);
199 $i=0;
200 while ($i < $num)
201 {
202 $obj = $this->db->fetch_object($resql);
203
204 $transkey="TypeContact_".$obj->element."_".$obj->source."_".$obj->code;
205 $libelle_type=($langs->trans($transkey)!=$transkey ? $langs->trans($transkey) : $obj->libelle);
206 $tab[$i]=array('source'=>$obj->source,'socid'=>$obj->socid,'id'=>$obj->id,'nom'=>$obj->nom,
207 'rowid'=>$obj->rowid,'code'=>$obj->code,'libelle'=>$libelle_type,'status'=>$obj->statut);
208 $i++;
209 }
210 return $tab;
211 }
212 else
213 {
214 $this->error=$this->db->error();
215 dolibarr_print_error($this->db);
216 return -1;
217 }
218 }
219
220 /**
71186b4 Laurent Destailleur New: Support save of NPR vat in order and invoice
eldy authored
221 * \brief Le d�tail d'un contact
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
222 * \param rowid L'identifiant du contact
223 * \return object L'objet construit par DoliDb.fetch_object
224 */
225 function detail_contact($rowid)
226 {
227 $sql = "SELECT ec.datecreate, ec.statut, ec.fk_socpeople, ec.fk_c_type_contact,";
897f40d Laurent Destailleur Fix: La recup des contacts d'entit� �chouait dans certains cas.
eldy authored
228 $sql.= " tc.code, tc.libelle,";
59a3a32 Fix: changement de idp en rowid pour llx_societe et llx_socpeople afin d...
Regis Houssin authored
229 $sql.= " s.fk_soc";
897f40d Laurent Destailleur Fix: La recup des contacts d'entit� �chouait dans certains cas.
eldy authored
230 $sql.= " FROM (".MAIN_DB_PREFIX."element_contact as ec, ".MAIN_DB_PREFIX."c_type_contact as tc)";
71186b4 Laurent Destailleur New: Support save of NPR vat in order and invoice
eldy authored
231 $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."socpeople as s ON ec.fk_socpeople=s.rowid"; // Si contact de type external, alors il est li� � une societe
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
232 $sql.= " WHERE ec.rowid =".$rowid;
233 $sql.= " AND ec.fk_c_type_contact=tc.rowid";
234 $sql.= " AND tc.element = '".$this->element."'";
235
236 $resql=$this->db->query($sql);
237 if ($resql)
238 {
239 $obj = $this->db->fetch_object($resql);
240 return $obj;
241 }
242 else
243 {
244 $this->error=$this->db->error();
245 dolibarr_print_error($this->db);
246 return null;
247 }
248 }
249
250 /**
251 * \brief La liste des valeurs possibles de type de contacts
252 * \param source internal ou externam
253 * \return array La liste des natures
254 */
255 function liste_type_contact($source)
256 {
257 global $langs;
258
259 $tab = array();
260
261 $sql = "SELECT distinct tc.rowid, tc.code, tc.libelle";
262 $sql.= " FROM ".MAIN_DB_PREFIX."c_type_contact as tc";
263 $sql.= " WHERE element='".$this->element."'";
264 $sql.= " AND source='".$source."'";
265 $sql.= " ORDER by tc.code";
266
267 $resql=$this->db->query($sql);
268 if ($resql)
269 {
270 $num=$this->db->num_rows($resql);
271 $i=0;
272 while ($i < $num)
273 {
274 $obj = $this->db->fetch_object($resql);
275
276 $transkey="TypeContact_".$this->element."_".$source."_".$obj->code;
277 $libelle_type=($langs->trans($transkey)!=$transkey ? $langs->trans($transkey) : $obj->libelle);
278 $tab[$obj->rowid]=$libelle_type;
279 $i++;
280 }
281 return $tab;
282 }
283 else
284 {
285 $this->error=$this->db->error();
286 // dolibarr_print_error($this->db);
287 return null;
288 }
289 }
290
291 /**
71186b4 Laurent Destailleur New: Support save of NPR vat in order and invoice
eldy authored
292 * \brief Retourne id des contacts d'une source et d'un type actif donn�
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
293 * Exemple: contact client de facturation ('external', 'BILLING')
294 * Exemple: contact client de livraison ('external', 'SHIPPING')
295 * Exemple: contact interne suivi paiement ('internal', 'SALESREPFOLL')
0bfb774 Laurent Destailleur Fix: La suppression d'un contact n'effacait pas les liens sur element_co...
eldy authored
296 * \param source 'external' or 'internal'
51468b6 Laurent Destailleur Fix: Regression. Le contact doit toujours apparaitre dans la liste des c...
eldy authored
297 * \param code 'BILLING', 'SHIPPING', 'SALESREPFOLL', ...
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
298 * \return array Liste des id contacts
299 */
300 function getIdContact($source,$code)
301 {
302 $result=array();
303 $i=0;
304
305 $sql = "SELECT ec.fk_socpeople";
306 $sql.= " FROM ".MAIN_DB_PREFIX."element_contact as ec, ".MAIN_DB_PREFIX."c_type_contact as tc";
307 $sql.= " WHERE ec.element_id = ".$this->id;
308 $sql.= " AND ec.fk_c_type_contact=tc.rowid";
309 $sql.= " AND tc.element = '".$this->element."'";
310 $sql.= " AND tc.source = '".$source."'";
311 $sql.= " AND tc.code = '".$code."'";
0bfb774 Laurent Destailleur Fix: La suppression d'un contact n'effacait pas les liens sur element_co...
eldy authored
312 $sql.= " AND tc.active = 1";
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
313
c99f3d7 Laurent Destailleur Feature: Choix du destinataire (adresse tiers ou adresse contact propal)...
eldy authored
314 dolibarr_syslog("CommonObject::getIdContact sql=".$sql);
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
315 $resql=$this->db->query($sql);
316 if ($resql)
317 {
318 while ($obj = $this->db->fetch_object($resql))
319 {
320 $result[$i]=$obj->fk_socpeople;
321 $i++;
322 }
323 }
324 else
325 {
326 $this->error=$this->db->error();
d02ba9d Laurent Destailleur Add logs
eldy authored
327 dolibarr_syslog("CommonObject::getIdContact ".$this->error, LOG_ERR);
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
328 return null;
329 }
330
331 return $result;
332 }
1aacf7d Laurent Destailleur Doc: doxygen
eldy authored
333
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
334 /**
1aacf7d Laurent Destailleur Doc: doxygen
eldy authored
335 * \brief Charge le contact d'id $id dans this->contact
336 * \param contactid Id du contact
0c46bbc Laurent Destailleur Feature: Choix du destinataire (adresse tiers ou adresse contact facutra...
eldy authored
337 * \return int <0 if KO, >0 if OK
fc7dfdf ajout de la fonction fetch_contact pour r�cup�rer le d�tail d'un contact...
Regis Houssin authored
338 */
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
339 function fetch_contact($contactid)
340 {
9ed072a Laurent Destailleur Optimisation m�moire et ajout info
eldy authored
341 require_once(DOL_DOCUMENT_ROOT."/contact.class.php");
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
342 $contact = new Contact($this->db);
343 $result=$contact->fetch($contactid);
344 $this->contact = $contact;
0c46bbc Laurent Destailleur Feature: Choix du destinataire (adresse tiers ou adresse contact facutra...
eldy authored
345 return $result;
346 }
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
347
1aacf7d Laurent Destailleur Doc: doxygen
eldy authored
348 /**
349 * \brief Charge le tiers d'id $this->socid dans this->client
0c46bbc Laurent Destailleur Feature: Choix du destinataire (adresse tiers ou adresse contact facutra...
eldy authored
350 * \return int <0 if KO, >0 if OK
8fabb78 Laurent Destailleur Qual: Mise en facteur des methodes fetch_client et fetch_projet
eldy authored
351 */
352 function fetch_client()
353 {
354 $client = new Societe($this->db);
0c46bbc Laurent Destailleur Feature: Choix du destinataire (adresse tiers ou adresse contact facutra...
eldy authored
355 $result=$client->fetch($this->socid);
8fabb78 Laurent Destailleur Qual: Mise en facteur des methodes fetch_client et fetch_projet
eldy authored
356 $this->client = $client;
0c46bbc Laurent Destailleur Feature: Choix du destinataire (adresse tiers ou adresse contact facutra...
eldy authored
357 return $result;
8fabb78 Laurent Destailleur Qual: Mise en facteur des methodes fetch_client et fetch_projet
eldy authored
358 }
359
1aacf7d Laurent Destailleur Doc: doxygen
eldy authored
360 /**
361 * \brief Charge le projet d'id $this->projet_id dans this->projet
0c46bbc Laurent Destailleur Feature: Choix du destinataire (adresse tiers ou adresse contact facutra...
eldy authored
362 * \return int <0 if KO, >0 if OK
1aacf7d Laurent Destailleur Doc: doxygen
eldy authored
363 */
8fabb78 Laurent Destailleur Qual: Mise en facteur des methodes fetch_client et fetch_projet
eldy authored
364 function fetch_projet()
365 {
366 $projet = new Project($this->db);
0c46bbc Laurent Destailleur Feature: Choix du destinataire (adresse tiers ou adresse contact facutra...
eldy authored
367 $result=$projet->fetch($this->projet_id);
8fabb78 Laurent Destailleur Qual: Mise en facteur des methodes fetch_client et fetch_projet
eldy authored
368 $this->projet = $projet;
0c46bbc Laurent Destailleur Feature: Choix du destinataire (adresse tiers ou adresse contact facutra...
eldy authored
369 return $result;
8fabb78 Laurent Destailleur Qual: Mise en facteur des methodes fetch_client et fetch_projet
eldy authored
370 }
1aacf7d Laurent Destailleur Doc: doxygen
eldy authored
371
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
372 /**
1aacf7d Laurent Destailleur Doc: doxygen
eldy authored
373 * \brief Charge le user d'id userid dans this->user
374 * \param userid Id du contact
0c46bbc Laurent Destailleur Feature: Choix du destinataire (adresse tiers ou adresse contact facutra...
eldy authored
375 * \return int <0 if KO, >0 if OK
1dc6dbc ajout du fetch_user pour r�cup�rer les infos d'un contact interne
Regis Houssin authored
376 */
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
377 function fetch_user($userid)
378 {
379 $user = new User($this->db, $userid);
0c46bbc Laurent Destailleur Feature: Choix du destinataire (adresse tiers ou adresse contact facutra...
eldy authored
380 $result=$user->fetch();
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
381 $this->user = $user;
0c46bbc Laurent Destailleur Feature: Choix du destinataire (adresse tiers ou adresse contact facutra...
eldy authored
382 return $result;
1aacf7d Laurent Destailleur Doc: doxygen
eldy authored
383 }
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
384
0c46bbc Laurent Destailleur Feature: Choix du destinataire (adresse tiers ou adresse contact facutra...
eldy authored
385 /**
386 * \brief Charge l'adresse de livraison d'id $this->adresse_livraison_id dans this->deliveryaddress
387 * \param userid Id du contact
388 * \return int <0 if KO, >0 if OK
389 */
65a25a4 Fix: d�placement de la fonction fetch_adresse_livraison dans la partie c...
Regis Houssin authored
390 function fetch_adresse_livraison($deliveryaddressid)
0c46bbc Laurent Destailleur Feature: Choix du destinataire (adresse tiers ou adresse contact facutra...
eldy authored
391 {
392 $address = new Societe($this->db);
393 $result=$address->fetch_adresse_livraison($deliveryaddressid);
394 $this->deliveryaddress = $address;
395 return $result;
396 }
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
397
b4c399b Fix: mise en commun des fonctions
Regis Houssin authored
398 /**
71186b4 Laurent Destailleur New: Support save of NPR vat in order and invoice
eldy authored
399 * \brief Retourne la liste d�roulante des soci�t�s
b4c399b Fix: mise en commun des fonctions
Regis Houssin authored
400 * \param object Fetch du document
401 * \param var_id Nom de la variable de l'id du document
71186b4 Laurent Destailleur New: Support save of NPR vat in order and invoice
eldy authored
402 * \param selected Societe pr�s�lectionn�e
b4c399b Fix: mise en commun des fonctions
Regis Houssin authored
403 * \param htmlname Nom champ formulaire
404 */
405 function selectCompaniesForNewContact($object, $var_id, $selected = '', $htmlname = 'newcompany')
406 {
15de773 Add: d�but ajout autocompletion ajax sur la liste des soci�t�s
Regis Houssin authored
407 global $conf, $langs;
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
408
b4c399b Fix: mise en commun des fonctions
Regis Houssin authored
409 // On recherche les societes
59a3a32 Fix: changement de idp en rowid pour llx_societe et llx_socpeople afin d...
Regis Houssin authored
410 $sql = "SELECT s.rowid, s.nom FROM";
b4c399b Fix: mise en commun des fonctions
Regis Houssin authored
411 $sql .= " ".MAIN_DB_PREFIX."societe as s";
7288c61 Laurent Destailleur Simplification des options activation ajax/javascript
eldy authored
412 if ($conf->use_javascript_ajax && $conf->global->COMPANY_USE_SEARCH_TO_SELECT)
15de773 Add: d�but ajout autocompletion ajax sur la liste des soci�t�s
Regis Houssin authored
413 {
414 $sql.= " WHERE rowid = ".$selected;
415 }
b4c399b Fix: mise en commun des fonctions
Regis Houssin authored
416 $sql .= " ORDER BY nom ASC";
417
418 $resql = $object->db->query($sql);
419 if ($resql)
420 {
7288c61 Laurent Destailleur Simplification des options activation ajax/javascript
eldy authored
421 if ($conf->use_javascript_ajax && $conf->global->COMPANY_USE_SEARCH_TO_SELECT)
b4c399b Fix: mise en commun des fonctions
Regis Houssin authored
422 {
15de773 Add: d�but ajout autocompletion ajax sur la liste des soci�t�s
Regis Houssin authored
423 $langs->load("companies");
424 $obj = $this->db->fetch_object($resql);
425 $socid = $obj->rowid?$obj->rowid:'';
426 $javaScript = "window.location=\'./contact.php?".$var_id."=".$object->id."&amp;".$htmlname."=\' + document.getElementById(\'newcompany_id\').value;";
427
428 // On applique un delai d'execution pour le bon fonctionnement
429 $htmloption = 'onChange="ac_delay(\''.$javaScript.'\',\'500\')"';
430
26190fc Add: d�but ajout autocompletion ajax sur la liste des soci�t�s
Regis Houssin authored
431 print '<table class="nobordernopadding"><tr class="nocellnopadd">';
432 print '<td class="nobordernopadding">';
15de773 Add: d�but ajout autocompletion ajax sur la liste des soci�t�s
Regis Houssin authored
433 print '<div>';
434 if ($obj->rowid == 0)
435 {
436 print '<input type="text" size="30" id="newcompany" name="newcompany" value="'.$langs->trans("SelectCompany").'" '.$htmloption.' />';
437 }
438 else
439 {
440 print '<input type="text" size="30" id="newcompany" name="newcompany" value="'.$obj->nom.'" '.$htmloption.' />';
441 }
26190fc Add: d�but ajout autocompletion ajax sur la liste des soci�t�s
Regis Houssin authored
442 print ajax_autocompleter($socid,'newcompany','/societe/ajaxcompanies.php','');
443 print '</td>';
444 print '<td class="nobordernopadding" align="left" width="16">';
445 print ajax_indicator($htmlname,'working');
446 print '</td></tr>';
447 print '</table>';
15de773 Add: d�but ajout autocompletion ajax sur la liste des soci�t�s
Regis Houssin authored
448 return $socid;
449 }
450 else
451 {
452 $javaScript = "window.location='./contact.php?".$var_id."=".$object->id."&amp;".$htmlname."=' + form.".$htmlname.".options[form.".$htmlname.".selectedIndex].value;";
453 print '<select class="flat" name="'.$htmlname.'" onChange="'.$javaScript.'">';
454 $num = $object->db->num_rows($resql);
455 $i = 0;
456 if ($num)
457 {
458 while ($i < $num)
459 {
460 $obj = $object->db->fetch_object($resql);
461 if ($i == 0) $firstCompany = $obj->rowid;
462 if ($selected > 0 && $selected == $obj->rowid)
463 {
464 print '<option value="'.$obj->rowid.'" selected="true">'.dolibarr_trunc($obj->nom,24).'</option>';
465 $firstCompany = $obj->rowid;
466 }
467 else
468 {
469 print '<option value="'.$obj->rowid.'">'.dolibarr_trunc($obj->nom,24).'</option>';
470 }
471 $i ++;
472 }
473 }
474 print "</select>\n";
475 return $firstCompany;
476 }
477 }
478 else
479 {
480 dolibarr_print_error($object->db);
481 }
482 }
483
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
484
b4c399b Fix: mise en commun des fonctions
Regis Houssin authored
485 /**
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
486 *
b4c399b Fix: mise en commun des fonctions
Regis Houssin authored
487 */
488 function selectTypeContact($object, $defValue, $htmlname = 'type', $source)
489 {
490 $lesTypes = $object->liste_type_contact($source);
491 print '<select class="flat" name="'.$htmlname.'">';
492 foreach($lesTypes as $key=>$value)
493 {
494 print '<option value="'.$key.'">'.$value.'</option>';
495 }
496 print "</select>\n";
497 }
1aacf7d Laurent Destailleur Doc: doxygen
eldy authored
498
fa3c193 Laurent Destailleur On deplace le bouton Retour Liste au niveau de la ligne de ref car les b...
eldy authored
499
62e5efd Laurent Destailleur Look: Uniformisation fiches avec ref
eldy authored
500 /**
501 * \brief Load properties id_previous and id_next
502 * \param filter Optional filter
503 * \param fieldid Nom du champ a utiliser pour select next et previous
504 * \return int <0 if KO, >0 if OK
505 */
506 function load_previous_next_ref($filter='',$fieldid)
507 {
508 if (! $this->table_element)
509 {
fe62f49 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
510 dolibarr_syslog("CommonObject::load_previous_next was called on objet with property table_element not defined",LOG_ERR);
62e5efd Laurent Destailleur Look: Uniformisation fiches avec ref
eldy authored
511 return -1;
512 }
9b1f74d Fix: mise en fonction du code
Regis Houssin authored
513
62e5efd Laurent Destailleur Look: Uniformisation fiches avec ref
eldy authored
514 $sql = "SELECT MAX(".$fieldid.")";
515 $sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element;
516 $sql.= " WHERE ".$fieldid." < '".addslashes($this->ref)."'";
517 if (isset($filter)) $sql.=" AND ".$filter;
4c96e42 Laurent Destailleur Uniformisation code
eldy authored
518
519 //print $sql;
62e5efd Laurent Destailleur Look: Uniformisation fiches avec ref
eldy authored
520 $result = $this->db->query($sql) ;
521 if (! $result)
522 {
523 $this->error=$this->db->error();
524 return -1;
525 }
526 $row = $this->db->fetch_row($result);
527 $this->ref_previous = $row[0];
4c96e42 Laurent Destailleur Uniformisation code
eldy authored
528
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
529
62e5efd Laurent Destailleur Look: Uniformisation fiches avec ref
eldy authored
530 $sql = "SELECT MIN(".$fieldid.")";
531 $sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element;
532 $sql.= " WHERE ".$fieldid." > '".addslashes($this->ref)."'";
533 if (isset($filter)) $sql.=" AND ".$filter;
8ce7d51 Laurent Destailleur Fix: Delivery date was set to '' instead of null when creating an order
eldy authored
534 // Rem: Bug in some mysql version: SELECT rowid FROM llx_socpeople WHERE rowid > 1 when one row in database with rowid=1, returns 1 instead of null
4c96e42 Laurent Destailleur Uniformisation code
eldy authored
535
8ce7d51 Laurent Destailleur Fix: Delivery date was set to '' instead of null when creating an order
eldy authored
536 //print $sql;
62e5efd Laurent Destailleur Look: Uniformisation fiches avec ref
eldy authored
537 $result = $this->db->query($sql) ;
538 if (! $result)
539 {
540 $this->error=$this->db->error();
541 return -2;
542 }
543 $row = $this->db->fetch_row($result);
544 $this->ref_next = $row[0];
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
545
62e5efd Laurent Destailleur Look: Uniformisation fiches avec ref
eldy authored
546 return 1;
547 }
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
548
549
9b1f74d Fix: mise en fonction du code
Regis Houssin authored
550 /**
71186b4 Laurent Destailleur New: Support save of NPR vat in order and invoice
eldy authored
551 * \brief On r�cup�re les id de liste_contact
9b1f74d Fix: mise en fonction du code
Regis Houssin authored
552 * \param source Source du contact external (llx_socpeople) ou internal (llx_user)
553 * \return array
554 */
555 function getListContactId($source='external')
556 {
557 $contactAlreadySelected = array();
558 $tab = $this->liste_contact(-1,$source);
559 $num=sizeof($tab);
560 $i = 0;
561 while ($i < $num)
562 {
563 $contactAlreadySelected[$i] = $tab[$i]['id'];
564 $i++;
565 }
566 return $contactAlreadySelected;
567 }
62e5efd Laurent Destailleur Look: Uniformisation fiches avec ref
eldy authored
568
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
569
72d107a Laurent Destailleur Qual: Standardisation of code. Clean some code.
eldy authored
570 /**
571 * \brief Link ekement with a project
572 * \param projid Project id to link element to
573 * \return int <0 if KO, >0 if OK
574 */
575 function setProject($projid)
576 {
577 if (! $this->table_element)
578 {
fe62f49 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
579 dolibarr_syslog("CommonObject::setProject was called on objet with property table_element not defined",LOG_ERR);
72d107a Laurent Destailleur Qual: Standardisation of code. Clean some code.
eldy authored
580 return -1;
581 }
582
583 $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
584 if ($projid) $sql.= ' SET fk_projet = '.$projid;
585 else $sql.= ' SET fk_projet = NULL';
586 $sql.= ' WHERE rowid = '.$this->id;
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
587
72d107a Laurent Destailleur Qual: Standardisation of code. Clean some code.
eldy authored
588 dolibarr_syslog("CommonObject::set_project sql=".$sql);
589 if ($this->db->query($sql))
590 {
591 return 1;
592 }
593 else
594 {
595 dolibarr_print_error($this->db);
596 return -1;
597 }
598 }
599
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
600
f9d4f6d Laurent Destailleur Qual: Mutualize some code
eldy authored
601 /**
602 * \brief Set last model used by doc generator
603 * \param user User object that make change
604 * \param modelpdf Modele name
605 * \return int <0 if KO, >0 if OK
606 */
607 function setDocModel($user, $modelpdf)
608 {
609 if (! $this->table_element)
610 {
fe62f49 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
611 dolibarr_syslog("CommonObject::setDocModel was called on objet with property table_element not defined",LOG_ERR);
f9d4f6d Laurent Destailleur Qual: Mutualize some code
eldy authored
612 return -1;
613 }
614
615 $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
616 $sql.= " SET model_pdf = '".$modelpdf."'";
617 $sql.= " WHERE rowid = ".$this->id;
618 // if ($this->element == 'facture') $sql.= " AND fk_statut < 2";
619 // if ($this->element == 'propal') $sql.= " AND fk_statut = 0";
620
621 dolibarr_syslog("CommonObject::setDocModel sql=".$sql);
622 $resql=$this->db->query($sql);
623 if ($resql)
624 {
625 $this->modelpdf=$modelpdf;
626 return 1;
627 }
628 else
629 {
630 dolibarr_print_error($this->db);
631 return 0;
632 }
633 }
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
634
635
fe62f49 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
636 /**
71186b4 Laurent Destailleur New: Support save of NPR vat in order and invoice
eldy authored
637 * \brief Stocke un num�ro de rang pour toutes les lignes de
fe62f49 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
638 * detail d'une facture qui n'en ont pas.
639 */
640 function line_order()
641 {
642 if (! $this->table_element_line)
643 {
644 dolibarr_syslog("CommonObject::line_order was called on objet with property table_element_line not defined",LOG_ERR);
645 return -1;
646 }
647 if (! $this->fk_element)
648 {
649 dolibarr_syslog("CommonObject::line_order was called on objet with property fk_element not defined",LOG_ERR);
650 return -1;
651 }
652
653 $sql = 'SELECT count(rowid) FROM '.MAIN_DB_PREFIX.$this->table_element_line;
654 $sql.= ' WHERE '.$this->fk_element.'='.$this->id;
655 $sql.= ' AND rang = 0';
656 $resql = $this->db->query($sql);
657 if ($resql)
658 {
659 $row = $this->db->fetch_row($resql);
660 $nl = $row[0];
661 }
662 if ($nl > 0)
663 {
664 $sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.$this->table_element_line;
665 $sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
666 $sql.= ' ORDER BY rang ASC, rowid ASC';
667 $resql = $this->db->query($sql);
668 if ($resql)
669 {
670 $num = $this->db->num_rows($resql);
671 $i = 0;
672 while ($i < $num)
673 {
674 $row = $this->db->fetch_row($resql);
675 $li[$i] = $row[0];
676 $i++;
677 }
678 }
679 for ($i = 0 ; $i < sizeof($li) ; $i++)
680 {
681 $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET rang = '.($i+1);
682 $sql.= ' WHERE rowid = '.$li[$i];
683 if (!$this->db->query($sql) )
684 {
685 dolibarr_syslog($this->db->error());
686 }
687 }
688 }
689 }
690
691 function line_up($rowid)
692 {
693 $this->line_order();
694
695 /* Lecture du rang de la ligne */
696 $sql = 'SELECT rang FROM '.MAIN_DB_PREFIX.$this->table_element_line;
697 $sql.= ' WHERE rowid ='.$rowid;
698 $resql = $this->db->query($sql);
699 if ($resql)
700 {
701 $row = $this->db->fetch_row($resql);
702 $rang = $row[0];
703 }
704
705 if ($rang > 1 )
706 {
707 $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET rang = '.$rang ;
708 $sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
709 $sql.= ' AND rang = '.($rang - 1);
710 if ($this->db->query($sql) )
711 {
712 $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET rang = '.($rang - 1);
713 $sql.= ' WHERE rowid = '.$rowid;
714 if (! $this->db->query($sql) )
715 {
716 dolibarr_print_error($this->db);
717 }
718 }
719 else
720 {
721 dolibarr_print_error($this->db);
722 }
723 }
724 }
725
726 function line_down($rowid)
727 {
728 $this->line_order();
729
730 /* Lecture du rang de la ligne */
731 $sql = 'SELECT rang FROM '.MAIN_DB_PREFIX.$this->table_element_line;
732 $sql.= ' WHERE rowid ='.$rowid;
733 $resql = $this->db->query($sql);
734 if ($resql)
735 {
736 $row = $this->db->fetch_row($resql);
737 $rang = $row[0];
738 }
739
740 /* Lecture du rang max de la facture */
741 $sql = 'SELECT max(rang) FROM '.MAIN_DB_PREFIX.$this->table_element_line;
742 $sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
743 $resql = $this->db->query($sql);
744 if ($resql)
745 {
746 $row = $this->db->fetch_row($resql);
747 $max = $row[0];
748 }
749
750 if ($rang < $max)
751 {
752 $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET rang = '.$rang;
753 $sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
754 $sql.= ' AND rang = '.($rang+1);
755 if ($this->db->query($sql) )
756 {
757 $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET rang = '.($rang+1);
758 $sql.= ' WHERE rowid = '.$rowid;
759 if (! $this->db->query($sql) )
760 {
761 dolibarr_print_error($this->db);
762 }
763 }
764 else
765 {
766 dolibarr_print_error($this->db);
767 }
768 }
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
769 }
770
771 /**
772 * \brief Update private note of element
773 * \param note New value for note
774 * \return int <0 if KO, >0 if OK
775 */
776 function update_note($note)
777 {
778 if (! $this->table_element)
779 {
7f0e794 Laurent Destailleur Fix: String must be saved as they are in database. Html detect and conve...
eldy authored
780 dolibarr_syslog("CommonObject::update_note was called on objet with property table_element not defined", LOG_ERR);
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
781 return -1;
782 }
783
784 $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
785 $sql.= " SET note = '".addslashes($note)."'";
786 $sql.= " WHERE rowid =". $this->id;
787
7f0e794 Laurent Destailleur Fix: String must be saved as they are in database. Html detect and conve...
eldy authored
788 dolibarr_syslog("CommonObject::update_note sql=".$sql, LOG_DEBUG);
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
789 if ($this->db->query($sql))
790 {
791 $this->note = $note;
792 return 1;
793 }
794 else
795 {
796 $this->error=$this->db->error();
7f0e794 Laurent Destailleur Fix: String must be saved as they are in database. Html detect and conve...
eldy authored
797 dolibarr_syslog("CommonObject::update_note error=".$this->error, LOG_ERR);
6edf6c8 Laurent Destailleur Qual: Factorize duplicate code
eldy authored
798 return -1;
799 }
800 }
801
802 /**
803 * \brief Update public note of element
804 * \param note_public New value for note
805 * \return int <0 if KO, >0 if OK
806 */
807 function update_note_public($note_public)
808 {
809 if (! $this->table_element)
810 {
811 dolibarr_syslog("CommonObject::update_note_public was called on objet with property table_element not defined",LOG_ERR);
812 return -1;
813 }
814
815 $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
816 $sql.= " SET note_public = '".addslashes($note_public)."'";
817 $sql.= " WHERE rowid =". $this->id;
818
819 dolibarr_syslog("CommonObject::update_note_public sql=".$sql);
820 if ($this->db->query($sql))
821 {
822 $this->note_public = $note_public;
823 return 1;
824 }
825 else
826 {
827 $this->error=$this->db->error();
828 return -1;
829 }
830 }
831
c1edb57 Laurent Destailleur Qual: Remove duplicate code
eldy authored
832 /**
833 * \brief Update total_ht, total_ttc and total_vat for an object (sum of lines)
834 * \return int <0 si ko, >0 si ok
835 */
836 function update_price()
837 {
838 include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php');
839
840 $err=0;
841
842 // List lines to sum
843 $fieldtva='total_tva';
844 if ($this->element == 'facture_fourn') $fieldtva='tva';
845
846 $sql = 'SELECT qty, total_ht, '.$fieldtva.' as total_tva, total_ttc';
847 $sql.= ' FROM '.MAIN_DB_PREFIX.$this->table_element_line;
848 $sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
849
850 dolibarr_syslog("CommonObject::update_price sql=".$sql);
851 $resql = $this->db->query($sql);
852 if ($resql)
853 {
854 $this->total_ht = 0;
855 $this->total_tva = 0;
856 $this->total_ttc = 0;
857
858 $num = $this->db->num_rows($resql);
859 $i = 0;
860 while ($i < $num)
861 {
862 $obj = $this->db->fetch_object($resql);
863
864 $this->total_ht += $obj->total_ht;
71186b4 Laurent Destailleur New: Support save of NPR vat in order and invoice
eldy authored
865 $this->total_tva += $obj->total_tva;
c1edb57 Laurent Destailleur Qual: Remove duplicate code
eldy authored
866 $this->total_ttc += $obj->total_ttc;
867
868 $i++;
869 }
870
871 $this->db->free($resql);
872
873 // Now update field total_ht, total_ttc and tva
874 $fieldht='total_ht';
875 if ($this->element == 'facture') $fieldht='total';
876 $fieldtva='tva';
877 if ($this->element == 'facture_fourn') $fieldtva='total_tva';
7b8a92b Laurent Destailleur New: Support save of NPR vat in customer element (invoice, order, propos...
eldy authored
878 $fieldttc='total_ttc';
879 if ($this->element == 'propal') $fieldttc='total';
880
c1edb57 Laurent Destailleur Qual: Remove duplicate code
eldy authored
881 $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element.' SET';
882 $sql .= " ".$fieldht."='".price2num($this->total_ht)."',";
883 $sql .= " ".$fieldtva."='".price2num($this->total_tva)."',";
7b8a92b Laurent Destailleur New: Support save of NPR vat in customer element (invoice, order, propos...
eldy authored
884 $sql .= " ".$fieldttc."='".price2num($this->total_ttc)."'";
c1edb57 Laurent Destailleur Qual: Remove duplicate code
eldy authored
885 $sql .= ' WHERE rowid = '.$this->id;
886
7b8a92b Laurent Destailleur New: Support save of NPR vat in customer element (invoice, order, propos...
eldy authored
887 //print "xx".$sql;
c1edb57 Laurent Destailleur Qual: Remove duplicate code
eldy authored
888 dolibarr_syslog("CommonObject::update_price sql=".$sql);
889 $resql=$this->db->query($sql);
890 if ($resql)
891 {
892 return 1;
893 }
894 else
895 {
896 $this->error=$this->db->error();
897 dolibarr_syslog("CommonObject::update_price error=".$this->error,LOG_ERR);
898 return -1;
899 }
900 }
901 else
902 {
903 $this->error=$this->db->error();
904 dolibarr_syslog("CommonObject::update_price error=".$this->error,LOG_ERR);
905 return -1;
906 }
907 }
f4b21a3 Laurent Destailleur Mega grosse mise en facteur de code commun.
eldy authored
908 }
909
910 ?>
Something went wrong with that request. Please try again.