dolibarr  16.0.1
card.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2001-2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3  * Copyright (C) 2004-2017 Laurent Destailleur <eldy@users.sourceforge.net>
4  * Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
5  * Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
6  * Copyright (C) 2015-2016 Alexandre Spangaro <aspangaro@open-dsi.fr>
7  * Copyright (C) 2018-2019 Thibault FOUCART <support@ptibogxiv.net>
8  * Copyright (C) 2018-2020 Frédéric France <frederic.france@netlogic.fr>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program. If not, see <https://www.gnu.org/licenses/>.
22  */
23 
30 require '../main.inc.php';
31 require_once DOL_DOCUMENT_ROOT.'/core/modules/dons/modules_don.php';
32 require_once DOL_DOCUMENT_ROOT.'/core/lib/donation.lib.php';
33 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
34 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
35 require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php';
36 require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
37 require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
38 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
39 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formmargin.class.php';
40 require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
41 if (!empty($conf->project->enabled)) {
42  require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
43  require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
44 }
45 require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
46 
47 $langs->loadLangs(array("bills", "companies", "donations", "users"));
48 
49 $id = GETPOST('rowid') ?GETPOST('rowid', 'int') : GETPOST('id', 'int');
50 $action = GETPOST('action', 'aZ09');
51 $cancel = GETPOST('cancel', 'alpha');
52 $confirm = GETPOST('confirm', 'alpha');
53 
54 $amount = price2num(GETPOST('amount', 'alphanohtml'), 'MT');
55 $donation_date = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear'));
56 $projectid = (GETPOST('projectid') ? GETPOST('projectid', 'int') : 0);
57 $public_donation = (int) GETPOST("public", 'int');
58 
59 $object = new Don($db);
60 $extrafields = new ExtraFields($db);
61 
62 // Security check
63 $result = restrictedArea($user, 'don', $id);
64 
65 // fetch optionals attributes and labels
66 $extrafields->fetch_name_optionals_label($object->table_element);
67 $search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
68 
69 // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
70 $hookmanager->initHooks(array('doncard', 'globalcard'));
71 
72 $upload_dir = $conf->don->dir_output;
73 $permissiontoadd = $user->rights->don->creer;
74 
75 
76 /*
77  * Actions
78  */
79 
80 $parameters = array();
81 
82 $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some
83 if ($reshook < 0) {
84  setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
85 }
86 
87 if (empty($reshook)) {
88  $backurlforlist = DOL_URL_ROOT.'/don/list.php';
89 
90  if (empty($backtopage) || ($cancel && empty($id))) {
91  if (empty($backtopage) || ($cancel && strpos($backtopage, '__ID__'))) {
92  if (empty($id) && (($action != 'add' && $action != 'create') || $cancel)) {
93  $backtopage = $backurlforlist;
94  } else {
95  $backtopage = DOL_URL_ROOT.'/don/card.php?id='.((!empty($id) && $id > 0) ? $id : '__ID__');
96  }
97  }
98  }
99 
100  if ($cancel) {
101  if (!empty($backtopageforcancel)) {
102  header("Location: ".$backtopageforcancel);
103  exit;
104  } elseif (!empty($backtopage)) {
105  header("Location: ".$backtopage);
106  exit;
107  }
108  $action = '';
109  }
110 
111  // Action reopen object
112  if ($action == 'confirm_reopen' && $confirm == 'yes' && $permissiontoadd) {
113  $object->fetch($id);
114 
115  $result = $object->reopen($user);
116  if ($result >= 0) {
117  // Define output language
118  if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
119  if (method_exists($object, 'generateDocument')) {
120  $outputlangs = $langs;
121  $newlang = '';
122  if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id', 'aZ09')) {
123  $newlang = GETPOST('lang_id', 'aZ09');
124  }
125  if ($conf->global->MAIN_MULTILANGS && empty($newlang)) {
126  $newlang = $object->thirdparty->default_lang;
127  }
128  if (!empty($newlang)) {
129  $outputlangs = new Translate("", $conf);
130  $outputlangs->setDefaultLang($newlang);
131  }
132  $model = $object->model_pdf;
133  $ret = $object->fetch($id); // Reload to get new records
134 
135  $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
136  }
137  }
138 
139  header("Location: ".$_SERVER["PHP_SELF"].'?id='.$object->id);
140  exit;
141  } else {
142  setEventMessages($object->error, $object->errors, 'errors');
143  $action = 'create';
144  }
145  }
146 
147 
148  // Action update object
149  if ($action == 'update') {
150  if (!empty($cancel)) {
151  header("Location: ".$_SERVER['PHP_SELF']."?id=".urlencode($id));
152  exit;
153  }
154 
155  $error = 0;
156 
157  if (empty($donation_date)) {
158  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Date")), null, 'errors');
159  $action = "create";
160  $error++;
161  }
162 
163  if (empty($amount)) {
164  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Amount")), null, 'errors');
165  $action = "create";
166  $error++;
167  }
168 
169  if (!$error) {
170  $object->fetch($id);
171 
172  $object->firstname = (string) GETPOST("firstname", 'alpha');
173  $object->lastname = (string) GETPOST("lastname", 'alpha');
174  $object->societe = (string) GETPOST("societe", 'alpha');
175  $object->address = (string) GETPOST("address", 'alpha');
176  $object->amount = price2num(GETPOST("amount", 'alpha'), '', 2);
177  $object->town = (string) GETPOST("town", 'alpha');
178  $object->zip = (string) GETPOST("zipcode", 'alpha');
179  $object->country_id = (int) GETPOST('country_id', 'int');
180  $object->email = (string) GETPOST("email", 'alpha');
181  $object->date = $donation_date;
182  $object->public = $public_donation;
183  $object->fk_project = (int) GETPOST("fk_project", 'int');
184  $object->modepaymentid = (int) GETPOST('modepayment', 'int');
185 
186  // Fill array 'array_options' with data from add form
187  $ret = $extrafields->setOptionalsFromPost(null, $object, '@GETPOSTISSET');
188  if ($ret < 0) {
189  $error++;
190  }
191 
192  if ($object->update($user) > 0) {
193  header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id);
194  exit;
195  } else {
196  setEventMessages($object->error, $object->errors, 'errors');
197  $action = "create";
198  }
199  }
200  }
201 
202 
203  // Action add/create object
204  if ($action == 'add') {
205  if (!empty($cancel)) {
206  header("Location: index.php");
207  exit;
208  }
209 
210  $error = 0;
211 
212  if (!empty($conf->societe->enabled) && !empty($conf->global->DONATION_USE_THIRDPARTIES) && !(GETPOST("socid", 'int') > 0)) {
213  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ThirdParty")), null, 'errors');
214  $action = "create";
215  $error++;
216  }
217  if (empty($donation_date)) {
218  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Date")), null, 'errors');
219  $action = "create";
220  $error++;
221  }
222 
223  if (empty($amount)) {
224  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Amount")), null, 'errors');
225  $action = "create";
226  $error++;
227  }
228 
229  if (!$error) {
230  $object->socid = (int) GETPOST("socid", 'int');
231  $object->firstname = (string) GETPOST("firstname", 'alpha');
232  $object->lastname = (string) GETPOST("lastname", 'alpha');
233  $object->societe = (string) GETPOST("societe", 'alpha');
234  $object->address = (string) GETPOST("address", 'alpha');
235  $object->amount = price2num(GETPOST("amount", 'alpha'), '', 2);
236  $object->zip = (string) GETPOST("zipcode", 'alpha');
237  $object->town = (string) GETPOST("town", 'alpha');
238  $object->country_id = (int) GETPOST('country_id', 'int');
239  $object->email = (string) GETPOST('email', 'alpha');
240  $object->date = $donation_date;
241  $object->note_private = (string) GETPOST("note_private", 'restricthtml');
242  $object->note_public = (string) GETPOST("note_public", 'restricthtml');
243  $object->public = $public_donation;
244  $object->fk_project = (int) GETPOST("fk_project", 'int');
245  $object->modepaymentid = (int) GETPOST('modepayment', 'int');
246 
247  // Fill array 'array_options' with data from add form
248  $ret = $extrafields->setOptionalsFromPost(null, $object);
249  if ($ret < 0) {
250  $error++;
251  }
252 
253  $res = $object->create($user);
254  if ($res > 0) {
255  header("Location: ".$_SERVER['PHP_SELF'].'?id='.$res);
256  exit;
257  } else {
258  setEventMessages($object->error, $object->errors, 'errors');
259  $action = "create";
260  }
261  }
262  }
263 
264  // Action delete object
265  if ($action == 'confirm_delete' && GETPOST("confirm") == "yes" && $user->rights->don->supprimer) {
266  $object->fetch($id);
267  $result = $object->delete($user);
268  if ($result > 0) {
269  header("Location: index.php");
270  exit;
271  } else {
272  dol_syslog($object->error, LOG_DEBUG);
273  setEventMessages($object->error, $object->errors, 'errors');
274  }
275  }
276 
277  // Action validation
278  if ($action == 'valid_promesse') {
279  $object->fetch($id);
280  if ($object->valid_promesse($id, $user->id) >= 0) {
281  setEventMessages($langs->trans("DonationValidated", $object->ref), null);
282  $action = '';
283  } else {
284  setEventMessages($object->error, $object->errors, 'errors');
285  }
286  }
287 
288  // Action cancel
289  if ($action == 'set_cancel') {
290  $object->fetch($id);
291  if ($object->set_cancel($id) >= 0) {
292  $action = '';
293  } else {
294  setEventMessages($object->error, $object->errors, 'errors');
295  }
296  }
297 
298  // Action set paid
299  if ($action == 'set_paid') {
300  $object->fetch($id);
301  if ($object->setPaid($id, $modepayment) >= 0) {
302  $action = '';
303  } else {
304  setEventMessages($object->error, $object->errors, 'errors');
305  }
306  } elseif ($action == 'classin' && $user->rights->don->creer) {
307  $object->fetch($id);
308  $object->setProject($projectid);
309  }
310 
311 
312  // Actions to build doc
313  include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
314 
315 
316  // Remove file in doc form
317  /*if ($action == 'remove_file')
318  {
319  $object = new Don($db, 0, GETPOST('id', 'int'));
320  if ($object->fetch($id))
321  {
322  require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
323 
324  $object->fetch_thirdparty();
325 
326  $langs->load("other");
327  $upload_dir = $conf->don->dir_output;
328  $file = $upload_dir . '/' . GETPOST('file');
329  $ret=dol_delete_file($file,0,0,0,$object);
330  if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs');
331  else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), null, 'errors');
332  $action='';
333  }
334  }
335  */
336 
337  /*
338  * Build doc
339  */
340  /*
341  if ($action == 'builddoc')
342  {
343  $object = new Don($db);
344  $result=$object->fetch($id);
345 
346  // Save last template used to generate document
347  if (GETPOST('model')) $object->setDocModel($user, GETPOST('model','alpha'));
348 
349  // Define output language
350  $outputlangs = $langs;
351  $newlang='';
352  if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id'];
353  if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->thirdparty->default_lang;
354  if (! empty($newlang))
355  {
356  $outputlangs = new Translate("",$conf);
357  $outputlangs->setDefaultLang($newlang);
358  }
359  $result=don_create($db, $object->id, '', $object->model_pdf, $outputlangs);
360  if ($result <= 0)
361  {
362  dol_print_error($db,$result);
363  exit;
364  }
365  }
366  */
367 }
368 
369 
370 /*
371  * View
372  */
373 
374 $title = $langs->trans("Donation");
375 
376 $help_url = 'EN:Module_Donations|FR:Module_Dons|ES:M&oacute;dulo_Donaciones|DE:Modul_Spenden';
377 
378 llxHeader('', $title, $help_url);
379 
380 $form = new Form($db);
381 $formfile = new FormFile($db);
382 $formcompany = new FormCompany($db);
383 if (!empty($conf->project->enabled)) {
384  $formproject = new FormProjets($db);
385 }
386 
387 if ($action == 'create') {
388  print load_fiche_titre($langs->trans("AddDonation"), '', 'object_donation');
389 
390  print '<form name="add" action="'.$_SERVER["PHP_SELF"].'" method="POST">';
391  print '<input type="hidden" name="token" value="'.newToken().'">';
392  print '<input type="hidden" name="action" value="add">';
393 
394  print dol_get_fiche_head('');
395 
396  print '<table class="border centpercent">';
397  print '<tbody>';
398 
399  // Ref
400  print '<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans('Ref').'</td><td>'.$langs->trans('Draft').'</td></tr>';
401 
402  // Company
403  if (!empty($conf->societe->enabled) && !empty($conf->global->DONATION_USE_THIRDPARTIES)) {
404  // Thirdparty
405  if ($soc->id > 0) {
406  print '<td class="fieldrequired">'.$langs->trans('ThirdParty').'</td>';
407  print '<td>';
408  print $soc->getNomUrl(1);
409  print '<input type="hidden" name="socid" value="'.$soc->id.'">';
410  // Outstanding Bill
411  $arrayoutstandingbills = $soc->getOutstandingBills();
412  $outstandingBills = $arrayoutstandingbills['opened'];
413  print ' ('.$langs->trans('CurrentOutstandingBill').': ';
414  print price($outstandingBills, '', $langs, 0, 0, -1, $conf->currency);
415  if ($soc->outstanding_limit != '') {
416  if ($outstandingBills > $soc->outstanding_limit) {
417  print img_warning($langs->trans("OutstandingBillReached"));
418  }
419  print ' / '.price($soc->outstanding_limit, '', $langs, 0, 0, -1, $conf->currency);
420  }
421  print ')';
422  print '</td>';
423  } else {
424  print '<td class="fieldrequired">'.$langs->trans('ThirdParty').'</td>';
425  print '<td>';
426  print $form->select_company($soc->id, 'socid', '(s.client = 1 OR s.client = 3) AND status=1', 'SelectThirdParty', 0, 0, null, 0, 'minwidth300');
427  // Option to reload page to retrieve customer informations. Note, this clear other input
428  if (!empty($conf->global->RELOAD_PAGE_ON_CUSTOMER_CHANGE_DISABLED)) {
429  print '<script type="text/javascript">
430  $(document).ready(function() {
431  $("#socid").change(function() {
432  console.log("We have changed the company - Reload page");
433  var socid = $(this).val();
434  var fac_rec = $(\'#fac_rec\').val();
435  // reload page
436  $("input[name=action]").val("create");
437  $("form[name=add]").submit();
438  });
439  });
440  </script>';
441  }
442  print ' <a href="'.DOL_URL_ROOT.'/societe/card.php?action=create&client=3&fournisseur=0&backtopage='.urlencode($_SERVER["PHP_SELF"].'?action=create').'"><span class="fa fa-plus-circle valignmiddle paddingleft" title="'.$langs->trans("AddThirdParty").'"></span></a>';
443  print '</td>';
444  }
445  print '</tr>'."\n";
446  }
447 
448  // Date
449  print '<tr><td class="fieldrequired titlefieldcreate">'.$langs->trans("Date").'</td><td>';
450  print $form->selectDate($donation_date ? $donation_date : -1, '', '', '', '', "add", 1, 1);
451  print '</td>';
452 
453  // Amount
454  print "<tr>".'<td class="fieldrequired">'.$langs->trans("Amount").'</td><td><input type="text" name="amount" value="'.dol_escape_htmltag(GETPOST("amount")).'" size="10"> '.$langs->trans("Currency".$conf->currency).'</td></tr>';
455 
456  // Public donation
457  print '<tr><td class="fieldrequired">'.$langs->trans("PublicDonation")."</td><td>";
458  print $form->selectyesno("public", $public_donation, 1);
459  print "</td></tr>\n";
460 
461  if (empty($conf->societe->enabled) || empty($conf->global->DONATION_USE_THIRDPARTIES)) {
462  print "<tr>".'<td>'.$langs->trans("Company").'</td><td><input type="text" name="societe" value="'.dol_escape_htmltag(GETPOST("societe")).'" class="maxwidth200"></td></tr>';
463  print "<tr>".'<td>'.$langs->trans("Lastname").'</td><td><input type="text" name="lastname" value="'.dol_escape_htmltag(GETPOST("lastname")).'" class="maxwidth200"></td></tr>';
464  print "<tr>".'<td>'.$langs->trans("Firstname").'</td><td><input type="text" name="firstname" value="'.dol_escape_htmltag(GETPOST("firstname")).'" class="maxwidth200"></td></tr>';
465  print "<tr>".'<td>'.$langs->trans("Address").'</td><td>';
466  print '<textarea name="address" wrap="soft" class="quatrevingtpercent" rows="3">'.dol_escape_htmltag(GETPOST("address", "alphanohtml"), 0, 1).'</textarea></td></tr>';
467 
468  // Zip / Town
469  print '<tr><td>'.$langs->trans("Zip").' / '.$langs->trans("Town").'</td><td>';
470  print $formcompany->select_ziptown((GETPOSTISSET("zipcode") ? GETPOST("zipcode") : $object->zip), 'zipcode', array('town', 'selectcountry_id', 'state_id'), 6);
471  print ' ';
472  print $formcompany->select_ziptown((GETPOSTISSET("town") ? GETPOST("town") : $object->town), 'town', array('zipcode', 'selectcountry_id', 'state_id'));
473  print '</tr>';
474 
475  // Country
476  print '<tr><td><label for="selectcountry_id">'.$langs->trans('Country').'</label></td><td class="maxwidthonsmartphone">';
477  print img_picto('', 'globe-americas', 'class="paddingrightonly"').$form->select_country(GETPOST('country_id') != '' ?GETPOST('country_id') : $object->country_id);
478  if ($user->admin) {
479  print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
480  }
481  print '</td></tr>';
482 
483  print "<tr>".'<td>'.$langs->trans("EMail").'</td><td>'.img_picto('', 'object_email', 'class="paddingrightonly"').'<input type="text" name="email" value="'.dol_escape_htmltag(GETPOST("email")).'" class="maxwidth200"></td></tr>';
484  }
485 
486  // Payment mode
487  print "<tr><td>".$langs->trans("PaymentMode")."</td><td>\n";
488  $selected = GETPOST('modepayment', 'int');
489  $form->select_types_paiements($selected, 'modepayment', 'CRDT', 0, 1);
490  print "</td></tr>\n";
491 
492  // Public note
493  print '<tr>';
494  print '<td class="tdtop">'.$langs->trans('NotePublic').'</td>';
495  print '<td>';
496 
497  $doleditor = new DolEditor('note_public', $note_public, '', 80, 'dolibarr_notes', 'In', 0, false, empty($conf->global->FCKEDITOR_ENABLE_NOTE_PUBLIC) ? 0 : 1, ROWS_3, '90%');
498  print $doleditor->Create(1);
499  print '</td></tr>';
500 
501  // Private note
502  if (empty($user->socid)) {
503  print '<tr>';
504  print '<td class="tdtop">'.$langs->trans('NotePrivate').'</td>';
505  print '<td>';
506 
507  $doleditor = new DolEditor('note_private', $note_private, '', 80, 'dolibarr_notes', 'In', 0, false, empty($conf->global->FCKEDITOR_ENABLE_NOTE_PRIVATE) ? 0 : 1, ROWS_3, '90%');
508  print $doleditor->Create(1);
509  print '</td></tr>';
510  }
511 
512  if (!empty($conf->project->enabled)) {
513  print "<tr><td>".$langs->trans("Project")."</td><td>";
514  $formproject->select_projects(-1, $projectid, 'fk_project', 0, 0, 1, 1, 0, 0, 0, '', 0, 0, 'maxwidth500');
515  print "</td></tr>\n";
516  }
517 
518  // Other attributes
519  $parameters = array();
520  $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
521  print $hookmanager->resPrint;
522  if (empty($reshook)) {
523  print $object->showOptionals($extrafields, 'create', $parameters);
524  }
525 
526  print '</tbody>';
527  print "</table>\n";
528 
529  print dol_get_fiche_end();
530 
531  print $form->buttonsSaveCancel();
532 
533  print "</form>\n";
534 }
535 
536 
537 /* ************************************************************ */
538 /* */
539 /* Donation card in edit mode */
540 /* */
541 /* ************************************************************ */
542 
543 if (!empty($id) && $action == 'edit') {
544  $result = $object->fetch($id);
545  if ($result < 0) {
546  dol_print_error($db, $object->error); exit;
547  }
548  $result = $object->fetch_optionals();
549  if ($result < 0) {
550  dol_print_error($db); exit;
551  }
552 
553  $hselected = 'card';
554  $head = donation_prepare_head($object);
555 
556  print '<form name="update" action="'.$_SERVER["PHP_SELF"].'" method="POST">';
557  print '<input type="hidden" name="token" value="'.newToken().'">';
558  print '<input type="hidden" name="action" value="update">';
559  print '<input type="hidden" name="rowid" value="'.$object->id.'">';
560  print '<input type="hidden" name="amount" value="'.$object->amount.'">';
561 
562 
563  print dol_get_fiche_head($head, $hselected, $langs->trans("Donation"), 0, 'donation');
564 
565  print '<table class="border centpercent">';
566 
567  // Ref
568  print '<tr><td>'.$langs->trans("Ref").'</td><td colspan="2">';
569  print $object->getNomUrl();
570  print '</td>';
571  print '</tr>';
572 
573  // Date
574  print '<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans("Date").'</td><td>';
575  print $form->selectDate($object->date, '', '', '', '', "update");
576  print '</td>';
577 
578  // Amount
579  if ($object->statut == 0) {
580  print "<tr>".'<td class="fieldrequired">'.$langs->trans("Amount").'</td><td><input type="text" name="amount" size="10" value="'.price($object->amount).'"> '.$langs->trans("Currency".$conf->currency).'</td></tr>';
581  } else {
582  print '<tr><td>'.$langs->trans("Amount").'</td><td>';
583  print price($object->amount, 0, $langs, 0, 0, -1, $conf->currency);
584  print '</td></tr>';
585  }
586 
587  print '<tr><td class="fieldrequired">'.$langs->trans("PublicDonation")."</td><td>";
588  print $form->selectyesno("public", $object->public, 1);
589  print "</td>";
590  print "</tr>\n";
591 
592  if (!empty($conf->societe->enabled) && !empty($conf->global->DONATION_USE_THIRDPARTIES)) {
593  $company = new Societe($db);
594 
595  print '<tr><td>'.$langs->trans("ThirdParty").'</td><td colspan="2">';
596  if ($object->socid > 0) {
597  $result = $company->fetch($object->socid);
598  print $company->getNomUrl(1);
599  }
600  print '</td></tr>';
601  } else {
602  $langs->load("companies");
603  print '<tr><td>'.$langs->trans("Company").'</td><td><input type="text" name="societe" class="maxwidth200" value="'.dol_escape_htmltag($object->societe).'"></td></tr>';
604  print '<tr><td>'.$langs->trans("Lastname").'</td><td><input type="text" name="lastname" class="maxwidth200" value="'.dol_escape_htmltag($object->lastname).'"></td></tr>';
605  print '<tr><td>'.$langs->trans("Firstname").'</td><td><input type="text" name="firstname" class="maxwidth200" value="'.dol_escape_htmltag($object->firstname).'"></td></tr>';
606  print '<tr><td>'.$langs->trans("Address").'</td><td>';
607  print '<textarea name="address" wrap="soft" class="quatrevingtpercent" rows="'.ROWS_3.'">'.dol_escape_htmltag($object->address, 0, 1).'</textarea></td></tr>';
608 
609  // Zip / Town
610  print '<tr><td>'.$langs->trans("Zip").' / '.$langs->trans("Town").'</td><td>';
611  print $formcompany->select_ziptown((GETPOSTISSET("zipcode") ? GETPOSTISSET("zipcode") : $object->zip), 'zipcode', array('town', 'selectcountry_id', 'state_id'), 6);
612  print ' ';
613  print $formcompany->select_ziptown((GETPOSTISSET("town") ? GETPOST("town") : $object->town), 'town', array('zipcode', 'selectcountry_id', 'state_id'));
614  print '</tr>';
615 
616  // Country
617  print '<tr><td class="titlefieldcreate">'.$langs->trans('Country').'</td><td>';
618  print $form->select_country((!empty($object->country_id) ? $object->country_id : $mysoc->country_code), 'country_id');
619  if ($user->admin) {
620  print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
621  }
622  print '</td></tr>';
623 
624  print "<tr>".'<td>'.$langs->trans("EMail").'</td><td><input type="text" name="email" class="maxwidth200" value="'.dol_escape_htmltag($object->email).'"></td></tr>';
625  }
626  // Payment mode
627  print "<tr><td>".$langs->trans("PaymentMode")."</td><td>\n";
628  if ($object->mode_reglement_id) {
629  $selected = $object->mode_reglement_id;
630  } else {
631  $selected = '';
632  }
633  $form->select_types_paiements($selected, 'modepayment', 'CRDT', 0, 1);
634  print "</td></tr>\n";
635 
636  // Status
637  print "<tr>".'<td>'.$langs->trans("Status").'</td><td>'.$object->getLibStatut(4).'</td></tr>';
638 
639  // Project
640  if (!empty($conf->project->enabled)) {
641  $formproject = new FormProjets($db);
642 
643  $langs->load('projects');
644  print '<tr><td>'.$langs->trans('Project').'</td><td>';
645  $formproject->select_projects(-1, $object->fk_project, 'fk_project', 0, 0, 1, 1, 0, 0, 0, '', 0, 0, 'maxwidth500');
646  print '</td></tr>';
647  }
648 
649  // Other attributes
650  $parameters = array();
651  $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
652  print $hookmanager->resPrint;
653  if (empty($reshook)) {
654  print $object->showOptionals($extrafields, 'edit', $parameters);
655  }
656 
657  print "</table>\n";
658 
659  print dol_get_fiche_end();
660 
661  print $form->buttonsSaveCancel();
662 
663  print "</form>\n";
664 }
665 
666 
667 
668 /* ************************************************************ */
669 /* */
670 /* Donation card in view mode */
671 /* */
672 /* ************************************************************ */
673 if (!empty($id) && $action != 'edit') {
674  // Confirmation delete
675  if ($action == 'delete') {
676  $text = $langs->trans("ConfirmDeleteADonation");
677  print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans("DeleteADonation"), $text, "confirm_delete", '', '', 1);
678  }
679 
680  $result = $object->fetch($id);
681  if ($result < 0) {
682  dol_print_error($db, $object->error); exit;
683  }
684  $result = $object->fetch_optionals();
685  if ($result < 0) {
686  dol_print_error($db); exit;
687  }
688 
689  $hselected = 'card';
690 
691  $head = donation_prepare_head($object);
692  print dol_get_fiche_head($head, $hselected, $langs->trans("Donation"), -1, 'donation');
693 
694  // Print form confirm
695  print $formconfirm;
696 
697  $linkback = '<a href="'.DOL_URL_ROOT.'/don/list.php'.(!empty($socid) ? '?socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
698 
699  $morehtmlref = '<div class="refidno">';
700  // Project
701  if (!empty($conf->project->enabled)) {
702  $langs->load("projects");
703  $morehtmlref .= $langs->trans('Project').' ';
704  if ($user->rights->don->creer) {
705  if ($action != 'classify') {
706  $morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> : ';
707  }
708  if ($action == 'classify') {
709  //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);
710  $morehtmlref .= '<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';
711  $morehtmlref .= '<input type="hidden" name="action" value="classin">';
712  $morehtmlref .= '<input type="hidden" name="token" value="'.newToken().'">';
713  $morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', 0, 0, 1, 0, 1, 0, 0, '', 1, 0, 'maxwidth500');
714  $morehtmlref .= '<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';
715  $morehtmlref .= '</form>';
716  } else {
717  $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1);
718  }
719  } else {
720  if (!empty($object->fk_project)) {
721  $proj = new Project($db);
722  $proj->fetch($object->fk_project);
723  $morehtmlref .= ' : '.$proj->getNomUrl(1);
724  if ($proj->title) {
725  $morehtmlref .= ' - '.$proj->title;
726  }
727  } else {
728  $morehtmlref .= '';
729  }
730  }
731  }
732  $morehtmlref .= '</div>';
733 
734 
735  dol_banner_tab($object, 'rowid', $linkback, 1, 'rowid', 'ref', $morehtmlref);
736 
737 
738  print '<div class="fichecenter">';
739  print '<div class="fichehalfleft">';
740  print '<div class="underbanner clearboth"></div>';
741 
742  print '<table class="border tableforfield" width="100%">';
743 
744  // Date
745  print '<tr><td class="titlefield">'.$langs->trans("Date").'</td><td colspan="2">';
746  print dol_print_date($object->date, "day");
747  print "</td>";
748 
749  print '<tr><td>'.$langs->trans("Amount").'</td><td colspan="2">';
750  print price($object->amount, 0, $langs, 0, 0, -1, $conf->currency);
751  print '</td></tr>';
752 
753  print '<tr><td>'.$langs->trans("PublicDonation").'</td><td colspan="2">';
754  print yn($object->public);
755  print '</td></tr>';
756 
757  if (!empty($conf->societe->enabled) && !empty($conf->global->DONATION_USE_THIRDPARTIES)) {
758  $company = new Societe($db);
759 
760  print '<tr><td>'.$langs->trans("ThirdParty").'</td><td colspan="2">';
761  if ($object->socid > 0) {
762  $result = $company->fetch($object->socid);
763  print $company->getNomUrl(1);
764  }
765  print '</td></tr>';
766  } else {
767  print '<tr><td>'.$langs->trans("Company").'</td><td colspan="2">'.$object->societe.'</td></tr>';
768  print '<tr><td>'.$langs->trans("Lastname").'</td><td colspan="2">'.$object->lastname.'</td></tr>';
769  print '<tr><td>'.$langs->trans("Firstname").'</td><td colspan="2">'.$object->firstname.'</td></tr>';
770  }
771 
772  // Payment mode
773  print "<tr><td>".$langs->trans("PaymentMode")."</td><td>";
774  $form->form_modes_reglement(null, $object->mode_reglement_id, 'none');
775  print "</td></tr>\n";
776 
777  // Other attributes
778  $cols = 2;
779  include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';
780 
781  print '</table>';
782 
783  print '</div>';
784  print '<div class="fichehalfright">';
785 
786  /*
787  * Payments
788  */
789  $sql = "SELECT p.rowid, p.num_payment, p.datep as dp, p.amount,";
790  $sql .= "c.code as type_code,c.libelle as paiement_type";
791  $sql .= " FROM ".MAIN_DB_PREFIX."payment_donation as p";
792  $sql .= ", ".MAIN_DB_PREFIX."c_paiement as c ";
793  $sql .= ", ".MAIN_DB_PREFIX."don as d";
794  $sql .= " WHERE d.rowid = ".((int) $id);
795  $sql .= " AND p.fk_donation = d.rowid";
796  $sql .= " AND d.entity IN (".getEntity('donation').")";
797  $sql .= " AND p.fk_typepayment = c.id";
798  $sql .= " ORDER BY dp";
799 
800  //print $sql;
801  $resql = $db->query($sql);
802  if ($resql) {
803  $num = $db->num_rows($resql);
804  $i = 0; $total = 0;
805  print '<table class="noborder paymenttable centpercent">';
806  print '<tr class="liste_titre">';
807  print '<td>'.$langs->trans("RefPayment").'</td>';
808  print '<td>'.$langs->trans("Date").'</td>';
809  print '<td>'.$langs->trans("Type").'</td>';
810  print '<td class="right">'.$langs->trans("Amount").'</td>';
811  print '</tr>';
812 
813  while ($i < $num) {
814  $objp = $db->fetch_object($resql);
815 
816  print '<tr class="oddeven"><td>';
817  print '<a href="'.DOL_URL_ROOT.'/don/payment/card.php?id='.$objp->rowid.'">'.img_object($langs->trans("Payment"), "payment").' '.$objp->rowid.'</a></td>';
818  print '<td>'.dol_print_date($db->jdate($objp->dp), 'day')."</td>\n";
819  $labeltype = $langs->trans("PaymentType".$objp->type_code) != ("PaymentType".$objp->type_code) ? $langs->trans("PaymentType".$objp->type_code) : $objp->paiement_type;
820  print "<td>".$labeltype.' '.$objp->num_payment."</td>\n";
821  print '<td class="right">'.price($objp->amount)."</td>\n";
822  print "</tr>";
823  $totalpaid += $objp->amount;
824  $i++;
825  }
826 
827  if ($object->paid == 0) {
828  print "<tr><td colspan=\"3\" class=\"right\">".$langs->trans("AlreadyPaid")." :</td><td class=\"right\">".price($totalpaid)."</td></tr>\n";
829  print "<tr><td colspan=\"3\" class=\"right\">".$langs->trans("AmountExpected")." :</td><td class=\"right\">".price($object->amount)."</td></tr>\n";
830 
831  $remaintopay = $object->amount - $totalpaid;
832 
833  print "<tr><td colspan=\"3\" class=\"right\">".$langs->trans("RemainderToPay")." :</td>";
834  print '<td class="right'.($resteapayeraffiche ? ' amountremaintopay' : '').'">'.price($remaintopay)."</td></tr>\n";
835  }
836  print "</table>";
837  $db->free($resql);
838  } else {
839  dol_print_error($db);
840  }
841 
842  print '</div>';
843  print '</div>';
844 
845  print '<div class="clearboth"></div>';
846 
847  print dol_get_fiche_end();
848 
849  $remaintopay = $object->amount - $totalpaid;
850 
851  // Actions buttons
852 
853  print '<div class="tabsAction">';
854 
855  // Re-open
856  if ($permissiontoadd && $object->statut == $object::STATUS_CANCELED) {
857  print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=confirm_reopen&confirm=yes&token='.newToken().'">'.$langs->trans("ReOpen").'</a>';
858  }
859 
860  print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit&token='.newToken().'&rowid='.$object->id.'">'.$langs->trans('Modify').'</a></div>';
861 
862  if ($object->statut == $object::STATUS_DRAFT) {
863  print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?rowid='.$object->id.'&action=valid_promesse&token='.newToken().'">'.$langs->trans("ValidPromess").'</a></div>';
864  }
865 
866  if (($object->statut == $object::STATUS_DRAFT || $object->statut == $object::STATUS_VALIDATED) && $totalpaid == 0 && $object->paid == 0) {
867  print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?rowid='.$object->id.'&action=set_cancel&token='.newToken().'">'.$langs->trans("ClassifyCanceled")."</a></div>";
868  }
869 
870  // Create payment
871  if ($object->statut == $object::STATUS_VALIDATED && $object->paid == 0 && $user->rights->don->creer) {
872  if ($remaintopay == 0) {
873  print '<div class="inline-block divButAction"><span class="butActionRefused classfortooltip" title="'.$langs->trans("DisabledBecauseRemainderToPayIsZero").'">'.$langs->trans('DoPayment').'</span></div>';
874  } else {
875  print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/don/payment/payment.php?rowid='.$object->id.'&action=create&token='.newToken().'">'.$langs->trans('DoPayment').'</a></div>';
876  }
877  }
878 
879  // Classify 'paid'
880  if ($object->statut == $object::STATUS_VALIDATED && round($remaintopay) == 0 && $object->paid == 0 && $user->rights->don->creer) {
881  print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?rowid='.$object->id.'&action=set_paid&token='.newToken().'">'.$langs->trans("ClassifyPaid")."</a></div>";
882  }
883 
884  // Delete
885  if ($user->rights->don->supprimer) {
886  if ($object->statut == $object::STATUS_CANCELED || $object->statut == $object::STATUS_DRAFT) {
887  print '<div class="inline-block divButAction"><a class="butActionDelete" href="card.php?rowid='.$object->id.'&action=delete&token='.newToken().'">'.$langs->trans("Delete")."</a></div>";
888  } else {
889  print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">'.$langs->trans("Delete")."</a></div>";
890  }
891  } else {
892  print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">'.$langs->trans("Delete")."</a></div>";
893  }
894 
895  print "</div>";
896 
897 
898  print '<div class="fichecenter"><div class="fichehalfleft">';
899 
900  /*
901  * Generated documents
902  */
903  $filename = dol_sanitizeFileName($object->id);
904  $filedir = $conf->don->dir_output."/".dol_sanitizeFileName($object->id);
905  $urlsource = $_SERVER['PHP_SELF'].'?rowid='.$object->id;
906  $genallowed = (($object->paid == 0 || $user->admin) && $user->rights->don->lire);
907  $delallowed = $user->rights->don->creer;
908 
909  print $formfile->showdocuments('donation', $filename, $filedir, $urlsource, $genallowed, $delallowed, $object->model_pdf);
910 
911  // Show links to link elements
912  $linktoelem = $form->showLinkToObjectBlock($object, null, array('don'));
913  $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
914 
915  // Show online payment link
916  $useonlinepayment = (!empty($conf->paypal->enabled) || !empty($conf->stripe->enabled) || !empty($conf->paybox->enabled));
917 
918  if ($useonlinepayment) { //$object->statut != Facture::STATUS_DRAFT &&
919  print '<br><!-- Link to pay -->'."\n";
920  require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php';
921  print showOnlinePaymentUrl('donation', $object->ref).'<br>';
922  }
923 
924  print '</div><div class="fichehalfright">';
925 
926  print '</div></div>';
927 }
928 
929 llxFooter();
930 $db->close();
GETPOST($paramname, $check= 'alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
img_edit($titlealt= 'default', $float=0, $other= '')
Show logo editer/modifier fiche.
yn($yesno, $case=1, $color=0)
Return yes or no in current language.
if($cancel &&!$id) if($action== 'add'&&!$cancel) if($action== 'delete') if($id) $form
Actions.
Definition: card.php:142
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm= 'auto', $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOCSRFCHECK')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Definition: wrapper.php:59
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags= '', $escapeonlyhtmltags=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields...
if(GETPOST('button_removefilter_x', 'alpha')||GETPOST('button_removefilter.x', 'alpha')||GETPOST('button_removefilter', 'alpha')) if(GETPOST('button_search_x', 'alpha')||GETPOST('button_search.x', 'alpha')||GETPOST('button_search', 'alpha')) if($action=="save"&&empty($cancel)) $help_url
View.
Definition: agenda.php:116
img_warning($titlealt= 'default', $moreatt= '', $morecss= 'pictowarning')
Show warning logo.
price($amount, $form=0, $outlangs= '', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code= '')
Function to format a value into an amount for visual output Function used into PDF and HTML pages...
Class to build HTML component for third parties management Only common components are here...
Class to manage standard extra fields.
setEventMessages($mesg, $mesgs, $style= 'mesgs', $messagekey= '')
Set event messages in dol_events session object.
Class to manage generation of HTML components Only common components must be here.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form...
Class to manage third parties objects (customers, suppliers, prospects...)
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin= '1', $morecss= 'hideonsmartphone', $textfordropdown= '')
Show information for admin users or standard users.
Class to manage projects.
load_fiche_titre($titre, $morehtmlright= '', $picto= 'generic', $pictoisfullpath=0, $id= '', $morecssontable= '', $morehtmlcenter= '')
Load a title with picto.
price2num($amount, $rounding= '', $option=0)
Function that return a number with universal decimal format (decimal separator is &#39;...
Class to manage building of HTML components.
img_picto($titlealt, $picto, $moreatt= '', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt= '', $morecss= '', $marginleftonlyshort=2)
Show picto whatever it&#39;s its name (generic function)
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename= '', $restricttologhandler= '', $logcontext=null)
Write log message into outputs.
img_object($titlealt, $picto, $moreatt= '', $pictoisfullpath=false, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
Class to manage translations.
dol_sanitizeFileName($str, $newstr= '_', $unaccent=1)
Clean a string to use it as a file name.
Class to offer components to list and upload files.
restrictedArea($user, $features, $objectid=0, $tableandshare= '', $feature2= '', $dbt_keyfield= 'fk_soc', $dbt_select= 'rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.
if(isModEnabled('facture')&&!empty($user->rights->facture->lire)) if((isModEnabled('fournisseur')&&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)&&$user->rights->fournisseur->facture->lire)||(isModEnabled('supplier_invoice')&&$user->rights->supplier_invoice->lire)) if(isModEnabled('don')&&!empty($user->rights->don->lire)) if(isModEnabled('tax')&&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture')&&isModEnabled('commande')&&$user->rights->commande->lire &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $resql
Social contributions to pay.
Definition: index.php:742
dol_get_fiche_head($links=array(), $active= '', $title= '', $notab=0, $picto= '', $pictoisfullpath=0, $morehtmlright= '', $morecss= '', $limittoshow=0, $moretabssuffix= '')
Show tabs of a record.
Class to manage donations.
Definition: don.class.php:38
dol_print_date($time, $format= '', $tzoutput= 'auto', $outputlangs= '', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_print_error($db= '', $error= '', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
newToken()
Return the value of token currently saved into session with name &#39;newtoken&#39;.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
Class to manage a WYSIWYG editor.
dol_banner_tab($object, $paramid, $morehtml= '', $shownav=1, $fieldid= 'rowid', $fieldref= 'ref', $morehtmlref= '', $moreparam= '', $nodbprefix=0, $morehtmlleft= '', $morehtmlstatus= '', $onlybanner=0, $morehtmlright= '')
Show tab footer of a card.
llxFooter()
Empty footer.
Definition: wrapper.php:73
donation_prepare_head($object)
Prepare array with list of tabs.
$formconfirm
if ($action == &#39;delbookkeepingyear&#39;) {