dolibarr 20.0.0
don.class.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004-2008 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2009 Regis Houssin <regis.houssin@inodbox.com>
5 * Copyright (C) 2014 Florian Henry <florian.henry@open-concept.pro>
6 * Copyright (C) 2015-2017 Alexandre Spangaro <aspangaro@open-dsi.fr>
7 * Copyright (C) 2016 Juanjo Menent <jmenent@2byte.es>
8 * Copyright (C) 2019 Thibault FOUCART <support@ptibogxiv.net>
9 * Copyright (C) 2019-2024 Frédéric France <frederic.france@free.fr>
10 * Copyright (C) 2021 Maxime DEMAREST <maxime@indelog.fr>
11 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 3 of the License, or
16 * (at your option) any later version.
17 *
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with this program. If not, see <https://www.gnu.org/licenses/>.
25 */
26
33require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
34require_once DOL_DOCUMENT_ROOT.'/core/class/commonpeople.class.php';
35
36
40class Don extends CommonObject
41{
42 use CommonPeople;
43
47 public $element = 'don';
48
52 public $table_element = 'don';
53
57 public $fk_element = 'fk_donation';
58
62 public $picto = 'donation';
63
67 public $date;
68
69 public $datec;
70 public $datem;
71
76 public $amount;
77
81 public $socid;
82
86 public $societe;
87
91 public $address;
92
96 public $zip;
97
101 public $town;
102
106 public $email;
107
108 public $phone;
109 public $phone_mobile;
110
111
115 public $mode_reglement;
116
120 public $mode_reglement_code;
121
125 public $public;
126
130 public $fk_project;
131
135 public $fk_typepayment;
136
141 public $num_payment;
142 public $date_valid;
143
147 public $modepaymentid = 0;
148
149 public $paid;
150
151 const STATUS_DRAFT = 0;
152 const STATUS_VALIDATED = 1;
153 const STATUS_PAID = 2;
154 const STATUS_CANCELED = -1;
155
156
162 public function __construct($db)
163 {
164 $this->db = $db;
165
166 $this->ismultientitymanaged = 1;
167 }
168
169
176 public function getLibStatut($mode = 0)
177 {
178 return $this->LibStatut($this->statut, $mode);
179 }
180
181 // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
189 public function LibStatut($status, $mode = 0)
190 {
191 // phpcs:enable
192 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
193 global $langs;
194 $langs->load("donations");
195 $this->labelStatus[-1] = $langs->transnoentitiesnoconv("Canceled");
196 $this->labelStatus[0] = $langs->transnoentitiesnoconv("DonationStatusPromiseNotValidated");
197 $this->labelStatus[1] = $langs->transnoentitiesnoconv("DonationStatusPromiseValidated");
198 $this->labelStatus[2] = $langs->transnoentitiesnoconv("DonationStatusPaid");
199 $this->labelStatusShort[-1] = $langs->transnoentitiesnoconv("Canceled");
200 $this->labelStatusShort[0] = $langs->transnoentitiesnoconv("DonationStatusPromiseNotValidatedShort");
201 $this->labelStatusShort[1] = $langs->transnoentitiesnoconv("DonationStatusPromiseValidatedShort");
202 $this->labelStatusShort[2] = $langs->transnoentitiesnoconv("DonationStatusPaidShort");
203 }
204
205 $statusType = 'status'.$status;
206 if ($status == self::STATUS_CANCELED) {
207 $statusType = 'status9';
208 }
209 if ($status == self::STATUS_PAID) {
210 $statusType = 'status6';
211 }
212
213 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status], '', $statusType, $mode);
214 }
215
216
224 public function initAsSpecimen()
225 {
226 global $conf;
227
228 $now = dol_now();
229
230 // Charge tableau des id de societe socids
231 $socids = array();
232
233 $sql = "SELECT rowid";
234 $sql .= " FROM ".MAIN_DB_PREFIX."societe";
235 $sql .= " WHERE client IN (1, 3)";
236 $sql .= " AND entity = ".$conf->entity;
237 $sql .= " LIMIT 10";
238
239 $resql = $this->db->query($sql);
240 if ($resql) {
241 $num_socs = $this->db->num_rows($resql);
242 $i = 0;
243 while ($i < $num_socs) {
244 $row = $this->db->fetch_row($resql);
245 $socids[$i] = $row[0];
246
247 $i++;
248 }
249 }
250
251 // Initialise parameters
252 $this->id = 0;
253 $this->ref = 'SPECIMEN';
254 $this->specimen = 1;
255 $this->lastname = 'Doe';
256 $this->firstname = 'John';
257 $this->socid = empty($socids[0]) ? 0 : $socids[0];
258 $this->date = $now;
259 $this->date_valid = $now;
260 $this->amount = 100.90;
261 $this->public = 1;
262 $this->societe = 'The Company';
263 $this->address = 'Twist road';
264 $this->zip = '99999';
265 $this->town = 'Town';
266 $this->note_private = 'Private note';
267 $this->note_public = 'Public note';
268 $this->email = 'email@email.com';
269 $this->phone = '0123456789';
270 $this->phone_mobile = '0606060606';
271 $this->status = 1;
272
273 return 1;
274 }
275
276
284 public function check($minimum = 0)
285 {
286 global $langs;
287 $langs->load('main');
288 $langs->load('companies');
289
290 $error_string = array();
291 $err = 0;
292 $amount_invalid = 0;
293
294 if (dol_strlen(trim($this->societe)) == 0) {
295 if ((dol_strlen(trim($this->lastname)) + dol_strlen(trim($this->firstname))) == 0) {
296 $error_string[] = $langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Company').'/'.$langs->transnoentitiesnoconv('Firstname').'-'.$langs->transnoentitiesnoconv('Lastname'));
297 $err++;
298 }
299 }
300
301 if (dol_strlen(trim($this->address)) == 0) {
302 $error_string[] = $langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Address'));
303 $err++;
304 }
305
306 if (dol_strlen(trim($this->zip)) == 0) {
307 $error_string[] = $langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Zip'));
308 $err++;
309 }
310
311 if (dol_strlen(trim($this->town)) == 0) {
312 $error_string[] = $langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Town'));
313 $err++;
314 }
315
316 if (dol_strlen(trim($this->email)) == 0) {
317 $error_string[] = $langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('EMail'));
318 $err++;
319 }
320
321 $this->amount = (float) $this->amount;
322
323 $map = range(0, 9);
324 $len = dol_strlen((string) $this->amount);
325 for ($i = 0; $i < $len; $i++) {
326 if (!isset($map[substr((string) $this->amount, $i, 1)])) {
327 $error_string[] = $langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Amount'));
328 $err++;
329 $amount_invalid = 1;
330 break;
331 }
332 }
333
334 if (!$amount_invalid) {
335 if ($this->amount == 0) {
336 $error_string[] = $langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Amount'));
337 $err++;
338 } else {
339 if ($this->amount < $minimum && $minimum > 0) {
340 $error_string[] = $langs->trans('MinimumAmount', $minimum);
341 $err++;
342 }
343 }
344 }
345
346 if ($err) {
347 $this->errors = $error_string;
348 return 0;
349 } else {
350 return 1;
351 }
352 }
353
362 public function create($user, $notrigger = 0)
363 {
364 global $conf, $langs;
365
366 $error = 0;
367 $ret = 0;
368 $now = dol_now();
369
370 // Clean parameters
371 // $this->address = ($this->address > 0 ? $this->address : $this->address);
372 // $this->zip = ($this->zip > 0 ? $this->zip : $this->zip);
373 // $this->town = ($this->town > 0 ? $this->town : $this->town);
374 // $this->country_id = ($this->country_id > 0 ? $this->country_id : $this->country_id);
375 // $this->country = ($this->country ? $this->country : $this->country);
376 $this->amount = (float) price2num($this->amount);
377
378 // Check parameters
379 if ($this->amount < 0) {
380 $this->error = $langs->trans('FieldCannotBeNegative', $langs->transnoentitiesnoconv("Amount"));
381 return -1;
382 }
383
384 $this->db->begin();
385
386 $sql = "INSERT INTO ".MAIN_DB_PREFIX."don (";
387 $sql .= "datec";
388 $sql .= ", entity";
389 $sql .= ", amount";
390 $sql .= ", fk_payment";
391 $sql .= ", fk_soc";
392 $sql .= ", firstname";
393 $sql .= ", lastname";
394 $sql .= ", societe";
395 $sql .= ", address";
396 $sql .= ", zip";
397 $sql .= ", town";
398 $sql .= ", fk_country";
399 $sql .= ", public";
400 $sql .= ", fk_projet";
401 $sql .= ", note_private";
402 $sql .= ", note_public";
403 $sql .= ", fk_user_author";
404 $sql .= ", fk_user_valid";
405 $sql .= ", datedon";
406 $sql .= ", email";
407 $sql .= ", phone";
408 $sql .= ", phone_mobile";
409 $sql .= ") VALUES (";
410 $sql .= "'".$this->db->idate($this->date ? $this->date : $now)."'";
411 $sql .= ", ".((int) $conf->entity);
412 $sql .= ", ".((float) $this->amount);
413 $sql .= ", ".($this->modepaymentid ? $this->modepaymentid : "null");
414 $sql .= ", ".($this->socid > 0 ? $this->socid : "null");
415 $sql .= ", '".$this->db->escape($this->firstname)."'";
416 $sql .= ", '".$this->db->escape($this->lastname)."'";
417 $sql .= ", '".$this->db->escape($this->societe)."'";
418 $sql .= ", '".$this->db->escape($this->address)."'";
419 $sql .= ", '".$this->db->escape($this->zip)."'";
420 $sql .= ", '".$this->db->escape($this->town)."'";
421 $sql .= ", ".(int) ($this->country_id > 0 ? $this->country_id : 0);
422 $sql .= ", ".(int) $this->public;
423 $sql .= ", ".($this->fk_project > 0 ? (int) $this->fk_project : "null");
424 $sql .= ", ".(!empty($this->note_private) ? ("'".$this->db->escape($this->note_private)."'") : "NULL");
425 $sql .= ", ".(!empty($this->note_public) ? ("'".$this->db->escape($this->note_public)."'") : "NULL");
426 $sql .= ", ".((int) $user->id);
427 $sql .= ", null";
428 $sql .= ", '".$this->db->idate($this->date)."'";
429 $sql .= ", '".(!empty($this->email) ? $this->db->escape(trim($this->email)) : "")."'";
430 $sql .= ", '".(!empty($this->phone) ? $this->db->escape(trim($this->phone)) : "")."'";
431 $sql .= ", '".(!empty($this->phone_mobile) ? $this->db->escape(trim($this->phone_mobile)) : "")."'";
432 $sql .= ")";
433
434 $resql = $this->db->query($sql);
435 if ($resql) {
436 $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."don");
437 $ret = $this->id;
438
439 if (!$notrigger) {
440 // Call trigger
441 $result = $this->call_trigger('DON_CREATE', $user);
442 if ($result < 0) {
443 $error++;
444 }
445 // End call triggers
446 }
447 } else {
448 $this->error = $this->db->lasterror();
449 $error++;
450 }
451
452 // Update extrafield
453 if (!$error) {
454 $result = $this->insertExtraFields();
455 if ($result < 0) {
456 $error++;
457 }
458 }
459
460 if (!$error && (getDolGlobalString('MAIN_DISABLEDRAFTSTATUS') || getDolGlobalString('MAIN_DISABLEDRAFTSTATUS_DONATION'))) {
461 //$res = $this->setValid($user);
462 //if ($res < 0) $error++;
463 }
464
465 if (!$error) {
466 $this->db->commit();
467 return $ret;
468 } else {
469 $this->db->rollback();
470 return -1;
471 }
472 }
473
481 public function update($user, $notrigger = 0)
482 {
483 global $langs;
484
485 $error = 0;
486
487 // Clean parameters
488 // $this->address = ($this->address > 0 ? $this->address : $this->address);
489 // $this->zip = ($this->zip > 0 ? $this->zip : $this->zip);
490 // $this->town = ($this->town > 0 ? $this->town : $this->town);
491 // $this->country_id = ($this->country_id > 0 ? $this->country_id : $this->country_id);
492 // $this->country = ($this->country ? $this->country : $this->country);
493 $this->amount = (float) price2num($this->amount);
494
495 // Check parameters
496 if ($this->amount < 0) {
497 $this->error = $langs->trans('FieldCannotBeNegative', $langs->transnoentitiesnoconv("Amount"));
498 return -1;
499 }
500
501 $this->db->begin();
502
503 $sql = "UPDATE ".MAIN_DB_PREFIX."don SET";
504 $sql .= " amount = ".((float) $this->amount);
505 $sql .= ", fk_payment = ".($this->modepaymentid ? $this->modepaymentid : "null");
506 $sql .= ", firstname = '".$this->db->escape($this->firstname)."'";
507 $sql .= ", lastname='".$this->db->escape($this->lastname)."'";
508 $sql .= ", societe='".$this->db->escape($this->societe)."'";
509 $sql .= ", address='".$this->db->escape($this->address)."'";
510 $sql .= ", zip='".$this->db->escape($this->zip)."'";
511 $sql .= ", town='".$this->db->escape($this->town)."'";
512 $sql .= ", fk_country = ".($this->country_id > 0 ? ((int) $this->country_id) : '0');
513 $sql .= ", public=".((int) $this->public);
514 $sql .= ", fk_projet=".($this->fk_project > 0 ? $this->fk_project : 'null');
515 $sql .= ", note_private=".(!empty($this->note_private) ? ("'".$this->db->escape($this->note_private)."'") : "NULL");
516 $sql .= ", note_public=".(!empty($this->note_public) ? ("'".$this->db->escape($this->note_public)."'") : "NULL");
517 $sql .= ", datedon='".$this->db->idate($this->date)."'";
518 $sql .= ", date_valid=".($this->date_valid ? "'".$this->db->idate($this->date)."'" : "null");
519 $sql .= ", email='".$this->db->escape(trim($this->email))."'";
520 $sql .= ", phone='".$this->db->escape(trim($this->phone))."'";
521 $sql .= ", phone_mobile='".$this->db->escape(trim($this->phone_mobile))."'";
522 $sql .= ", fk_statut=".((int) $this->statut);
523 $sql .= " WHERE rowid = ".((int) $this->id);
524
525 dol_syslog(get_class($this)."::Update", LOG_DEBUG);
526 $resql = $this->db->query($sql);
527 if ($resql) {
528 if (!$notrigger) {
529 // Call trigger
530 $result = $this->call_trigger('DON_MODIFY', $user);
531 if ($result < 0) {
532 $error++;
533 }
534 // End call triggers
535 }
536
537 // Update extrafield
538 if (!$error) {
539 $result = $this->insertExtraFields();
540 if ($result < 0) {
541 $error++;
542 }
543 }
544
545 if (!$error) {
546 $this->db->commit();
547 $result = 1;
548 } else {
549 $this->db->rollback();
550 $result = -1;
551 }
552 } else {
553 $this->error = $this->db->lasterror();
554 $this->errors[] = $this->error;
555 $this->db->rollback();
556 dol_syslog(get_class($this)."::Update error -2 ".$this->error, LOG_ERR);
557 $result = -2;
558 }
559 return $result;
560 }
561
569 public function delete($user, $notrigger = 0)
570 {
571 require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
572
573 $error = 0;
574
575 $this->db->begin();
576
577 if (!$error && !$notrigger) {
578 // Call trigger
579 $result = $this->call_trigger('DON_DELETE', $user);
580
581 if ($result < 0) {
582 $error++;
583 }
584 // End call triggers
585 }
586
587 // Delete donation
588 if (!$error) {
589 $sql = "DELETE FROM ".MAIN_DB_PREFIX."don_extrafields";
590 $sql .= " WHERE fk_object = ".((int) $this->id);
591
592 $resql = $this->db->query($sql);
593 if (!$resql) {
594 $this->errors[] = $this->db->lasterror();
595 $error++;
596 }
597 }
598
599 if (!$error) {
600 $sql = "DELETE FROM ".MAIN_DB_PREFIX."don";
601 $sql .= " WHERE rowid=".((int) $this->id);
602
603 $resql = $this->db->query($sql);
604 if (!$resql) {
605 $this->errors[] = $this->db->lasterror();
606 $error++;
607 } else {
608 // we delete file with dol_delete_dir_recursive
609 $this->deleteEcmFiles(1);
610
611 $dir = DOL_DATA_ROOT.'/'.$this->element.'/'.$this->ref;
612 // For remove dir
613 if (dol_is_dir($dir)) {
614 if (!dol_delete_dir_recursive($dir)) {
615 $this->errors[] = $this->error;
616 }
617 }
618 }
619 }
620
621 if (!$error) {
622 $this->db->commit();
623 return 1;
624 } else {
625 foreach ($this->errors as $errmsg) {
626 dol_syslog(get_class($this)."::delete ".$errmsg, LOG_ERR);
627 $this->error .= ($this->error ? ', '.$errmsg : $errmsg);
628 }
629 dol_syslog(get_class($this)."::delete ".$this->error, LOG_ERR);
630 $this->db->rollback();
631 return -1;
632 }
633 }
634
642 public function fetch($id, $ref = '')
643 {
644 $sql = "SELECT d.rowid, d.datec, d.date_valid, d.tms as datem, d.datedon,";
645 $sql .= " d.fk_soc as socid, d.firstname, d.lastname, d.societe, d.amount, d.fk_statut as status, d.address, d.zip, d.town, ";
646 $sql .= " d.fk_country, d.public, d.amount, d.fk_payment, d.paid, d.note_private, d.note_public, d.email, d.phone, ";
647 $sql .= " d.phone_mobile, d.fk_projet as fk_project, d.model_pdf,";
648 $sql .= " p.ref as project_ref,";
649 $sql .= " cp.libelle as payment_label, cp.code as payment_code,";
650 $sql .= " c.code as country_code, c.label as country";
651 $sql .= " FROM ".MAIN_DB_PREFIX."don as d";
652 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."projet as p ON p.rowid = d.fk_projet";
653 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_paiement as cp ON cp.id = d.fk_payment";
654 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON d.fk_country = c.rowid";
655 $sql .= " WHERE d.entity IN (".getEntity('donation').")";
656 if (!empty($id)) {
657 $sql .= " AND d.rowid=".((int) $id);
658 } elseif (!empty($ref)) {
659 $sql .= " AND d.ref='".$this->db->escape($ref)."'";
660 }
661
662 dol_syslog(get_class($this)."::fetch", LOG_DEBUG);
663 $resql = $this->db->query($sql);
664 if ($resql) {
665 if ($this->db->num_rows($resql)) {
666 $obj = $this->db->fetch_object($resql);
667
668 $this->id = $obj->rowid;
669 $this->ref = $obj->rowid;
670 $this->date_creation = $this->db->jdate($obj->datec);
671 $this->datec = $this->db->jdate($obj->datec);
672 $this->date_validation = $this->db->jdate($obj->date_valid);
673 $this->date_valid = $this->db->jdate($obj->date_valid);
674 $this->date_modification = $this->db->jdate($obj->datem);
675 $this->datem = $this->db->jdate($obj->datem);
676 $this->date = $this->db->jdate($obj->datedon);
677 $this->socid = $obj->socid;
678 $this->firstname = $obj->firstname;
679 $this->lastname = $obj->lastname;
680 $this->societe = $obj->societe;
681 $this->status = $obj->status;
682 $this->statut = $obj->status;
683 $this->address = $obj->address;
684 $this->zip = $obj->zip;
685 $this->town = $obj->town;
686 $this->country_id = $obj->fk_country;
687 $this->country_code = $obj->country_code;
688 $this->country = $obj->country;
689 $this->email = $obj->email;
690 $this->phone = $obj->phone;
691 $this->phone_mobile = $obj->phone_mobile;
692 $this->project = $obj->project_ref;
693 $this->fk_projet = $obj->fk_project; // deprecated
694 $this->fk_project = $obj->fk_project;
695 $this->public = $obj->public;
696 $this->mode_reglement_id = $obj->fk_payment;
697 $this->mode_reglement_code = $obj->payment_code;
698 $this->mode_reglement = $obj->payment_label;
699 $this->paid = $obj->paid;
700 $this->amount = $obj->amount;
701 $this->note_private = $obj->note_private;
702 $this->note_public = $obj->note_public;
703 $this->model_pdf = $obj->model_pdf;
704
705 // Retrieve all extrafield
706 // fetch optionals attributes and labels
707 $this->fetch_optionals();
708 }
709 return 1;
710 } else {
711 dol_print_error($this->db);
712 return -1;
713 }
714 }
715
723 public function setValid($user, $notrigger = 0)
724 {
725 // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
726 return $this->valid_promesse($this->id, $user->id, $notrigger);
727 }
728
729 // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
738 public function valid_promesse($id, $userid, $notrigger = 0)
739 {
740 // phpcs:enable
741 global $user;
742
743 $error = 0;
744
745 $this->db->begin();
746
747 $sql = "UPDATE ".MAIN_DB_PREFIX."don SET fk_statut = 1, fk_user_valid = ".((int) $userid)." WHERE rowid = ".((int) $id)." AND fk_statut = 0";
748
749 $resql = $this->db->query($sql);
750 if ($resql) {
751 if ($this->db->affected_rows($resql)) {
752 if (!$notrigger) {
753 // Call trigger
754 $result = $this->call_trigger('DON_VALIDATE', $user);
755 if ($result < 0) {
756 $error++;
757 }
758 // End call triggers
759 }
760 }
761 } else {
762 $error++;
763 $this->error = $this->db->lasterror();
764 }
765
766 if (!$error) {
767 $this->statut = 1;
768 $this->db->commit();
769 return 1;
770 } else {
771 $this->db->rollback();
772 return -1;
773 }
774 }
775
783 public function setPaid($id, $modepayment = 0)
784 {
785 $sql = "UPDATE ".MAIN_DB_PREFIX."don SET fk_statut = 2, paid = 1";
786 if ($modepayment) {
787 $sql .= ", fk_payment = ".((int) $modepayment);
788 }
789 $sql .= " WHERE rowid = ".((int) $id)." AND fk_statut = 1";
790
791 $resql = $this->db->query($sql);
792 if ($resql) {
793 if ($this->db->affected_rows($resql)) {
794 $this->statut = 2;
795 $this->paid = 1;
796 return 1;
797 } else {
798 return 0;
799 }
800 } else {
801 dol_print_error($this->db);
802 return -1;
803 }
804 }
805
806 // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
813 public function set_cancel($id)
814 {
815 // phpcs:enable
816 $sql = "UPDATE ".MAIN_DB_PREFIX."don SET fk_statut = -1 WHERE rowid = ".((int) $id);
817
818 $resql = $this->db->query($sql);
819 if ($resql) {
820 if ($this->db->affected_rows($resql)) {
821 $this->statut = -1;
822 return 1;
823 } else {
824 return 0;
825 }
826 } else {
827 dol_print_error($this->db);
828 return -1;
829 }
830 }
831
839 public function reopen($user, $notrigger = 0)
840 {
841 // Protection
842 if ($this->statut != self::STATUS_CANCELED) {
843 return 0;
844 }
845
846 return $this->setStatusCommon($user, self::STATUS_VALIDATED, $notrigger, 'DON_REOPEN');
847 }
848
849 // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
856 public function sum_donations($param)
857 {
858 // phpcs:enable
859 global $conf;
860
861 $result = 0;
862
863 $sql = "SELECT sum(amount) as total";
864 $sql .= " FROM ".MAIN_DB_PREFIX."don";
865 $sql .= " WHERE fk_statut = ".((int) $param);
866 $sql .= " AND entity = ".$conf->entity;
867
868 $resql = $this->db->query($sql);
869 if ($resql) {
870 $obj = $this->db->fetch_object($resql);
871 $result = $obj->total;
872 }
873
874 return $result;
875 }
876
882 public function loadStateBoard()
883 {
884 $this->nb = array();
885
886 $sql = "SELECT count(d.rowid) as nb";
887 $sql .= " FROM ".MAIN_DB_PREFIX."don as d";
888 $sql .= " WHERE d.fk_statut > 0";
889 $sql .= " AND d.entity IN (".getEntity('donation').")";
890
891 $resql = $this->db->query($sql);
892 if ($resql) {
893 while ($obj = $this->db->fetch_object($resql)) {
894 $this->nb["donations"] = $obj->nb;
895 }
896 $this->db->free($resql);
897 return 1;
898 } else {
899 dol_print_error($this->db);
900 $this->error = $this->db->error();
901 return -1;
902 }
903 }
904
914 public function getNomUrl($withpicto = 0, $notooltip = 0, $moretitle = '', $save_lastsearch_value = -1)
915 {
916 global $conf, $langs, $hookmanager;
917
918 if (!empty($conf->dol_no_mouse_hover)) {
919 $notooltip = 1; // Force disable tooltips
920 }
921
922 $result = '';
923 $label = img_picto('', $this->picto).' <u class="paddingrightonly">'.$langs->trans("Donation").'</u>';
924 if (isset($this->status)) {
925 $label .= ' '.$this->getLibStatut(5);
926 }
927 if (!empty($this->id)) {
928 $label .= '<br><b>'.$langs->trans('Ref').':</b> '.$this->id;
929 $label .= '<br><b>'.$langs->trans('Date').':</b> '.dol_print_date($this->date, 'day');
930 }
931 if ($moretitle) {
932 $label .= ' - '.$moretitle;
933 }
934
935 $url = DOL_URL_ROOT.'/don/card.php?id='.$this->id;
936
937 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
938 if ($save_lastsearch_value == -1 && isset($_SERVER["PHP_SELF"]) && preg_match('/list\.php/', $_SERVER["PHP_SELF"])) {
939 $add_save_lastsearch_values = 1;
940 }
941 if ($add_save_lastsearch_values) {
942 $url .= '&save_lastsearch_values=1';
943 }
944
945 $linkstart = '<a href="'.$url.'" title="'.dol_escape_htmltag($label, 1).'" class="classfortooltip">';
946 $linkend = '</a>';
947
948 $result .= $linkstart;
949 if ($withpicto) {
950 $result .= img_object(($notooltip ? '' : $label), $this->picto, ($notooltip ? (($withpicto != 2) ? 'class="paddingright"' : '') : 'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip ? 0 : 1);
951 }
952 if ($withpicto != 2) {
953 $result .= $this->ref;
954 }
955 $result .= $linkend;
956 global $action;
957 $hookmanager->initHooks(array($this->element . 'dao'));
958 $parameters = array('id' => $this->id, 'getnomurl' => &$result);
959 $reshook = $hookmanager->executeHooks('getNomUrl', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
960 if ($reshook > 0) {
961 $result = $hookmanager->resPrint;
962 } else {
963 $result .= $hookmanager->resPrint;
964 }
965 return $result;
966 }
967
974 public function info($id)
975 {
976 $sql = 'SELECT d.rowid, d.datec, d.fk_user_author, d.fk_user_valid,';
977 $sql .= ' d.tms as datem';
978 $sql .= ' FROM '.MAIN_DB_PREFIX.'don as d';
979 $sql .= ' WHERE d.rowid = '.((int) $id);
980
981 dol_syslog(get_class($this).'::info', LOG_DEBUG);
982 $result = $this->db->query($sql);
983
984 if ($result) {
985 if ($this->db->num_rows($result)) {
986 $obj = $this->db->fetch_object($result);
987 $this->id = $obj->rowid;
988
989 $this->user_creation_id = $obj->fk_user_author;
990 $this->user_validation_id = $obj->fk_user_valid;
991 $this->date_creation = $this->db->jdate($obj->datec);
992 $this->date_modification = (!empty($obj->tms) ? $this->db->jdate($obj->tms) : "");
993 }
994 $this->db->free($result);
995 } else {
996 dol_print_error($this->db);
997 }
998 }
999
1000
1011 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0)
1012 {
1013 global $conf, $langs;
1014
1015 $langs->load("bills");
1016
1017 if (!dol_strlen($modele)) {
1018 $modele = 'html_cerfafr';
1019
1020 if ($this->model_pdf) {
1021 $modele = $this->model_pdf;
1022 } elseif (getDolGlobalString('DON_ADDON_MODEL')) {
1023 $modele = getDolGlobalString('DON_ADDON_MODEL');
1024 }
1025 }
1026
1027 //$modelpath = "core/modules/dons/";
1028
1029 // TODO Restore use of commonGenerateDocument instead of dedicated code here
1030 //return $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref);
1031
1032 // Increase limit for PDF build
1033 $err = error_reporting();
1034 error_reporting(0);
1035 @set_time_limit(120);
1036 error_reporting($err);
1037
1038 $srctemplatepath = '';
1039
1040 // If selected modele is a filename template (then $modele="modelname:filename")
1041 $tmp = explode(':', $modele, 2);
1042 if (!empty($tmp[1])) {
1043 $modele = $tmp[0];
1044 $srctemplatepath = $tmp[1];
1045 }
1046
1047 // Search template files
1048 $file = '';
1049 $classname = '';
1050 $filefound = 0;
1051 $dirmodels = array('/');
1052 if (is_array($conf->modules_parts['models'])) {
1053 $dirmodels = array_merge($dirmodels, $conf->modules_parts['models']);
1054 }
1055 foreach ($dirmodels as $reldir) {
1056 foreach (array('html', 'doc', 'pdf') as $prefix) {
1057 $file = $prefix."_".preg_replace('/^html_/', '', $modele).".modules.php";
1058
1059 // Verify the path for the module
1060 $file = dol_buildpath($reldir."core/modules/dons/".$file, 0);
1061 if (file_exists($file)) {
1062 $filefound = 1;
1063 $classname = $prefix.'_'.$modele;
1064 break;
1065 }
1066 }
1067 if ($filefound) {
1068 break;
1069 }
1070 }
1071
1072 // Charge le modele
1073 if ($filefound) {
1074 require_once $file;
1075
1076 $object = $this;
1077
1078 $classname = $modele;
1079 $obj = new $classname($this->db);
1080
1081 // We save charset_output to restore it because write_file can change it if needed for
1082 // output format that does not support UTF8.
1083 $sav_charset_output = $outputlangs->charset_output;
1084 if ($obj->write_file($object, $outputlangs, $srctemplatepath, $hidedetails, $hidedesc, $hideref) > 0) {
1085 $outputlangs->charset_output = $sav_charset_output;
1086
1087 // we delete preview files
1088 require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
1090 return 1;
1091 } else {
1092 $outputlangs->charset_output = $sav_charset_output;
1093 dol_syslog("Erreur dans don_create");
1094 dol_print_error($this->db, $obj->error);
1095 return 0;
1096 }
1097 } else {
1098 print $langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists", $file);
1099 return 0;
1100 }
1101 }
1102
1111 public static function replaceThirdparty(DoliDB $dbs, $origin_id, $dest_id)
1112 {
1113 $tables = array(
1114 'don'
1115 );
1116
1117 return CommonObject::commonReplaceThirdparty($dbs, $origin_id, $dest_id, $tables);
1118 }
1119
1125 public function getRemainToPay()
1126 {
1127 dol_syslog(__METHOD__, LOG_DEBUG);
1128
1129 if (empty($this->id)) {
1130 $this->error = 'Missing object id';
1131 $this->errors[] = $this->error;
1132 dol_syslog(__METHOD__.' : '.$this->error, LOG_ERR);
1133 return -1;
1134 }
1135
1136 $sql = "SELECT SUM(amount) as sum_amount FROM ".MAIN_DB_PREFIX."payment_donation WHERE fk_donation = ".((int) $this->id);
1137 $resql = $this->db->query($sql);
1138 if (!$resql) {
1139 dol_print_error($this->db);
1140 return -2;
1141 } else {
1142 $sum_amount = (float) $this->db->fetch_object($resql)->sum_amount;
1143 return (float) ($this->amount - $sum_amount);
1144 }
1145 }
1146
1154 public function getKanbanView($option = '', $arraydata = null)
1155 {
1156 global $conf, $langs;
1157
1158 $selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
1159
1160 $return = '<div class="box-flex-item box-flex-grow-zero">';
1161 $return .= '<div class="info-box info-box-sm">';
1162 $return .= '<span class="info-box-icon bg-infobox-action">';
1163 $return .= img_picto('', $this->picto);
1164 $return .= '</span>';
1165 $return .= '<div class="info-box-content">';
1166 $return .= '<span class="info-box-ref inline-block tdoverflowmax150 valignmiddle">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl(1) : $this->ref).'</span>';
1167 if ($selected >= 0) {
1168 $return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
1169 }
1170 if (property_exists($this, 'date')) {
1171 $return .= ' &nbsp; | &nbsp; <span class="info-box-label">'.dol_print_date($this->date, 'day', 'tzuserrel').'</span>';
1172 }
1173 if (property_exists($this, 'societe') && !empty($this->societe)) {
1174 $return .= '<br><span class="opacitymedium">'.$langs->trans("Company").'</span> : <span class="info-box-label">'.$this->societe.'</span>';
1175 }
1176 if (property_exists($this, 'amount')) {
1177 $return .= '<br><span class="info-box-label amount">'.price($this->amount, 1, $langs, 1, -1, -1, $conf->currency).'</span>';
1178 }
1179 if (method_exists($this, 'LibStatut')) {
1180 $return .= '<br><div class="info-box-status">'.$this->getLibStatut(3).'</div>';
1181 }
1182 $return .= '</div>';
1183 $return .= '</div>';
1184 $return .= '</div>';
1185 return $return;
1186 }
1187}
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:58
print $langs trans("AuditedSecurityEvents").'</strong >< span class="opacitymedium"></span >< br > status
Or an array listing all the potential status of the object: array: int of the status => translated la...
Definition security.php:636
$object ref
Definition info.php:79
Parent class of all other business classes (invoices, contracts, proposals, orders,...
fetch_optionals($rowid=null, $optionsArray=null)
Function to get extra fields of an object into $this->array_options This method is in most cases call...
deleteEcmFiles($mode=0)
Delete related files of object in database.
setStatusCommon($user, $status, $notrigger=0, $triggercode='')
Set to a status.
static commonReplaceThirdparty(DoliDB $dbs, $origin_id, $dest_id, array $tables, $ignoreerrors=0)
Function used to replace a thirdparty id with another one.
insertExtraFields($trigger='', $userused=null)
Add/Update all extra fields values for the current object.
call_trigger($triggerName, $user)
Call trigger based on this instance.
Class to manage Dolibarr database access.
Class to manage donations.
Definition don.class.php:41
getLibStatut($mode=0)
Returns the donation status label (draft, valid, abandoned, paid)
__construct($db)
Constructor.
initAsSpecimen()
Initialise an instance with random values.
create($user, $notrigger=0)
Create donation record into database.
getRemainToPay()
Function to get remaining amount to pay for a donation.
check($minimum=0)
Check params and init ->errors array.
setValid($user, $notrigger=0)
Validate a intervention.
valid_promesse($id, $userid, $notrigger=0)
Validate a promise of donation.
getKanbanView($option='', $arraydata=null)
Return clicable link of object (with eventually picto)
LibStatut($status, $mode=0)
Return the label of a given status.
static replaceThirdparty(DoliDB $dbs, $origin_id, $dest_id)
Function used to replace a thirdparty id with another one.
generateDocument($modele, $outputlangs, $hidedetails=0, $hidedesc=0, $hideref=0)
Create a document onto disk according to template module.
fetch($id, $ref='')
Load donation from database.
reopen($user, $notrigger=0)
Set cancel status.
sum_donations($param)
Sum of donations.
info($id)
Information on record.
update($user, $notrigger=0)
Update a donation record.
set_cancel($id)
Set donation to status cancelled.
loadStateBoard()
Load the indicators this->nb for the state board.
setPaid($id, $modepayment=0)
Classify the donation as paid, the donation was received.
getNomUrl($withpicto=0, $notooltip=0, $moretitle='', $save_lastsearch_value=-1)
Return clicable name (with picto eventually)
trait CommonPeople
Support class for thirdparties, contacts, members, users or resources.
dol_delete_dir_recursive($dir, $count=0, $nophperrors=0, $onlysub=0, &$countdeleted=0, $indexdatabase=1, $nolog=0)
Remove a directory $dir and its subdirectories (or only files and subdirectories)
dol_is_dir($folder)
Test if filename is a directory.
dol_delete_preview($object)
Delete all preview files linked to object instance.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
dol_now($mode='auto')
Return date for now.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
publicphonebutton2 phonegreen basiclayout basiclayout TotalHT VATCode TotalVAT TotalLT1 TotalLT2 TotalTTC TotalHT clearboth nowraponall TAKEPOS_SHOW_SUBPRICE right right right takeposterminal SELECT e e e e e statut
Definition invoice.php:1991