dolibarr  18.0.6
card.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2017-2021 Alexandre Spangaro <aspangaro@open-dsi.fr>
3  * Copyright (C) 2018-2020 Frédéric France <frederic.france@netlogic.fr>
4  * Copyright (C) 2023 Laurent Destailleur <eldy@users.sourceforge.net>
5  * Copyright (C) 2023 Joachim Kueter <git-jk@bloxera.com>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <https://www.gnu.org/licenses/>.
19  */
20 
27 // Load Dolibarr environment
28 require '../../../main.inc.php';
29 require_once DOL_DOCUMENT_ROOT.'/core/lib/bank.lib.php';
30 require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
31 require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/paymentvarious.class.php';
32 require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
33 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
34 require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
35 require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingjournal.class.php';
36 if (isModEnabled('project')) {
37  require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
38  require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
39 }
40 
41 // Load translation files required by the page
42 $langs->loadLangs(array("compta", "banks", "bills", "users", "accountancy", "categories"));
43 
44 // Get parameters
45 $id = GETPOST('id', 'int');
46 $action = GETPOST('action', 'alpha');
47 $confirm = GETPOST('confirm');
48 $cancel = GETPOST('cancel', 'aZ09');
49 $backtopage = GETPOST('backtopage', 'alpha');
50 
51 $accountid = GETPOST("accountid") > 0 ? GETPOST("accountid", "int") : 0;
52 $label = GETPOST("label", "alpha");
53 $sens = GETPOST("sens", "int");
54 $amount = price2num(GETPOST("amount", "alpha"));
55 $paymenttype = GETPOST("paymenttype", "aZ09");
56 $accountancy_code = GETPOST("accountancy_code", "alpha");
57 $projectid = (GETPOST('projectid', 'int') ? GETPOST('projectid', 'int') : GETPOST('fk_project', 'int'));
58 if (isModEnabled('accounting') && !empty($conf->global->ACCOUNTANCY_COMBO_FOR_AUX)) {
59  $subledger_account = GETPOST("subledger_account", "alpha") > 0 ? GETPOST("subledger_account", "alpha") : '';
60 } else {
61  $subledger_account = GETPOST("subledger_account", "alpha");
62 }
63 
64 // Security check
65 $socid = GETPOST("socid", "int");
66 if ($user->socid) {
67  $socid = $user->socid;
68 }
69 $result = restrictedArea($user, 'banque', '', '', '');
70 
71 $object = new PaymentVarious($db);
72 
73 // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
74 $hookmanager->initHooks(array('variouscard', 'globalcard'));
75 
76 $permissiontoadd = $user->hasRight('banque', 'modifier');
77 
78 
83 $parameters = array();
84 $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
85 if ($reshook < 0) {
86  setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
87 }
88 
89 if (empty($reshook)) {
90  if ($cancel) {
91  if ($action != 'addlink' && $action != 'setaccountancy_code' && $action != 'setsubledger_account') {
92  $urltogo = $backtopage ? $backtopage : dol_buildpath('/compta/bank/various_payment/list.php', 1);
93  header("Location: ".$urltogo);
94  exit;
95  }
96  if ($id > 0 || !empty($ref)) {
97  $ret = $object->fetch($id, $ref);
98  }
99  $action = '';
100  }
101 
102  // Link to a project
103  if ($action == 'classin' && $permissiontoadd) {
104  $object->fetch($id);
105  $object->setProject(GETPOST('projectid', 'int'));
106  }
107 
108  if ($action == 'add') {
109  $error = 0;
110 
111  $datep = dol_mktime(12, 0, 0, GETPOST("datepmonth", 'int'), GETPOST("datepday", 'int'), GETPOST("datepyear", 'int'));
112  $datev = dol_mktime(12, 0, 0, GETPOST("datevmonth", 'int'), GETPOST("datevday", 'int'), GETPOST("datevyear", 'int'));
113  if (empty($datev)) {
114  $datev = $datep;
115  }
116 
117  $object->ref = ''; // TODO
118  $object->accountid = GETPOST("accountid", 'int') > 0 ? GETPOST("accountid", "int") : 0;
119  $object->datev = $datev;
120  $object->datep = $datep;
121  $object->amount = price2num(GETPOST("amount", 'alpha'));
122  $object->label = GETPOST("label", 'restricthtml');
123  $object->note = GETPOST("note", 'restricthtml');
124  $object->type_payment = dol_getIdFromCode($db, GETPOST('paymenttype'), 'c_paiement', 'code', 'id', 1);
125  $object->num_payment = GETPOST("num_payment", 'alpha');
126  $object->chqemetteur = GETPOST("chqemetteur", 'alpha');
127  $object->chqbank = GETPOST("chqbank", 'alpha');
128  $object->fk_user_author = $user->id;
129  $object->category_transaction = GETPOST("category_transaction", 'alpha');
130 
131  $object->accountancy_code = GETPOST("accountancy_code") > 0 ? GETPOST("accountancy_code", "alpha") : "";
132  $object->subledger_account = $subledger_account;
133 
134  $object->sens = GETPOSTINT('sens');
135  $object->fk_project = GETPOSTINT('fk_project');
136 
137  if (empty($datep) || empty($datev)) {
138  $langs->load('errors');
139  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Date")), null, 'errors');
140  $error++;
141  }
142  if (empty($object->amount)) {
143  $langs->load('errors');
144  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Amount")), null, 'errors');
145  $error++;
146  }
147  if (isModEnabled("banque") && !$object->accountid > 0) {
148  $langs->load('errors');
149  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("BankAccount")), null, 'errors');
150  $error++;
151  }
152  if (empty($object->type_payment) || $object->type_payment < 0) {
153  $langs->load('errors');
154  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("PaymentMode")), null, 'errors');
155  $error++;
156  }
157  if (isModEnabled('accounting') && !$object->accountancy_code) {
158  $langs->load('errors');
159  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("AccountAccounting")), null, 'errors');
160  $error++;
161  }
162  if ($object->sens < 0) {
163  $langs->load('errors');
164  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Sens")), null, 'errors');
165  $error++;
166  }
167 
168  if (!$error) {
169  $db->begin();
170 
171  $ret = $object->create($user);
172  if ($ret > 0) {
173  $db->commit();
174  $urltogo = ($backtopage ? $backtopage : DOL_URL_ROOT.'/compta/bank/various_payment/list.php');
175  header("Location: ".$urltogo);
176  exit;
177  } else {
178  $db->rollback();
179  setEventMessages($object->error, $object->errors, 'errors');
180  $action = "create";
181  }
182  }
183 
184  $action = 'create';
185  }
186 
187  if ($action == 'confirm_delete' && $confirm == 'yes') {
188  $result = $object->fetch($id);
189 
190  if ($object->rappro == 0) {
191  $db->begin();
192 
193  $ret = $object->delete($user);
194  if ($ret > 0) {
195  if ($object->fk_bank) {
196  $accountline = new AccountLine($db);
197  $result = $accountline->fetch($object->fk_bank);
198  if ($result > 0) {
199  $result = $accountline->delete($user); // $result may be 0 if not found (when bank entry was deleted manually and fk_bank point to nothing)
200  }
201  }
202 
203  if ($result >= 0) {
204  $db->commit();
205  header("Location: ".DOL_URL_ROOT.'/compta/bank/various_payment/list.php');
206  exit;
207  } else {
208  $object->error = $accountline->error;
209  $db->rollback();
210  setEventMessages($object->error, $object->errors, 'errors');
211  }
212  } else {
213  $db->rollback();
214  setEventMessages($object->error, $object->errors, 'errors');
215  }
216  } else {
217  setEventMessages('Error try do delete a line linked to a conciliated bank transaction', null, 'errors');
218  }
219  }
220 
221  if ($action == 'setaccountancy_code') {
222  $db->begin();
223 
224  $result = $object->fetch($id);
225 
226  $object->accountancy_code = GETPOST('accountancy_code', 'alphanohtml');
227 
228  $res = $object->update($user);
229  if ($res > 0) {
230  $db->commit();
231  } else {
232  $db->rollback();
233  setEventMessages($object->error, $object->errors, 'errors');
234  }
235  }
236 
237  if ($action == 'setsubledger_account') {
238  $db->begin();
239 
240  $result = $object->fetch($id);
241 
242  $object->subledger_account = $subledger_account;
243 
244  $res = $object->update($user);
245  if ($res > 0) {
246  $db->commit();
247  } else {
248  $db->rollback();
249  setEventMessages($object->error, $object->errors, 'errors');
250  }
251  }
252 }
253 
254 // Action clone object
255 if ($action == 'confirm_clone' && $confirm != 'yes') {
256  $action = '';
257 }
258 
259 if ($action == 'confirm_clone' && $confirm == 'yes' && $permissiontoadd) {
260  $db->begin();
261 
262  $originalId = $id;
263 
264  $object->fetch($id);
265 
266  if ($object->id > 0) {
267  $object->id = $object->ref = null;
268 
269  if (GETPOST('clone_label', 'alphanohtml')) {
270  $object->label = GETPOST('clone_label', 'alphanohtml');
271  } else {
272  $object->label = $langs->trans("CopyOf").' '.$object->label;
273  }
274 
275  $newdatepayment = dol_mktime(0, 0, 0, GETPOST('clone_date_paymentmonth', 'int'), GETPOST('clone_date_paymentday', 'int'), GETPOST('clone_date_paymentyear', 'int'));
276  $newdatevalue = dol_mktime(0, 0, 0, GETPOST('clone_date_valuemonth', 'int'), GETPOST('clone_date_valueday', 'int'), GETPOST('clone_date_valueyear', 'int'));
277  if ($newdatepayment) {
278  $object->datep = $newdatepayment;
279  }
280  if (!empty($newdatevalue)) {
281  $object->datev = $newdatevalue;
282  } else {
283  $object->datev = $newdatepayment;
284  }
285 
286  if (GETPOSTISSET("clone_sens")) {
287  $object->sens = GETPOST("clone_sens", 'int');
288  } else {
289  $object->sens = $object->sens;
290  }
291 
292  if (GETPOST("clone_amount", "alpha")) {
293  $object->amount = price2num(GETPOST("clone_amount", "alpha"));
294  } else {
295  $object->amount = price2num($object->amount);
296  }
297 
298  if ($object->check()) {
299  $id = $object->create($user);
300  if ($id > 0) {
301  $db->commit();
302  $db->close();
303 
304  header("Location: ".$_SERVER["PHP_SELF"]."?id=".$id);
305  exit;
306  } else {
307  $id = $originalId;
308  $db->rollback();
309 
310  setEventMessages($object->error, $object->errors, 'errors');
311  }
312  } else {
313  $id = $originalId;
314  $db->rollback();
315 
316  setEventMessages($object->error, $object->errors, 'errors');
317  }
318  } else {
319  $db->rollback();
320  dol_print_error($db, $object->error);
321  }
322 }
323 
324 
325 /*
326  * View
327  */
328 $form = new Form($db);
329 if (isModEnabled('accounting')) {
330  $formaccounting = new FormAccounting($db);
331 }
332 if (isModEnabled('project')) {
333  $formproject = new FormProjets($db);
334 }
335 
336 if ($id) {
337  $object = new PaymentVarious($db);
338  $result = $object->fetch($id);
339  if ($result <= 0) {
340  dol_print_error($db);
341  exit;
342  }
343 }
344 
345 $title = $object->ref." - ".$langs->trans('Card');
346 if ($action == 'create') {
347  $title = $langs->trans("NewVariousPayment");
348 }
349 $help_url = 'EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores|DE:Modul_Lieferantenrechnungen';
350 llxHeader('', $title, $help_url);
351 
352 $options = array();
353 
354 // Load bank groups
355 require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/bankcateg.class.php';
356 $bankcateg = new BankCateg($db);
357 
358 foreach ($bankcateg->fetchAll() as $bankcategory) {
359  $options[$bankcategory->id] = $bankcategory->label;
360 }
361 
362 // Create mode
363 if ($action == 'create') {
364  // Update fields properties in realtime
365  if (!empty($conf->use_javascript_ajax)) {
366  print "\n".'<script type="text/javascript">';
367  print '$(document).ready(function () {
368  setPaymentType();
369  $("#selectpaymenttype").change(function() {
370  setPaymentType();
371  });
372  function setPaymentType()
373  {
374  console.log("setPaymentType");
375  var code = $("#selectpaymenttype option:selected").val();
376  if (code == \'CHQ\' || code == \'VIR\')
377  {
378  if (code == \'CHQ\')
379  {
380  $(\'.fieldrequireddyn\').addClass(\'fieldrequired\');
381  }
382  if ($(\'#fieldchqemetteur\').val() == \'\')
383  {
384  var emetteur = jQuery(\'#thirdpartylabel\').val();
385  $(\'#fieldchqemetteur\').val(emetteur);
386  }
387  }
388  else
389  {
390  $(\'.fieldrequireddyn\').removeClass(\'fieldrequired\');
391  $(\'#fieldchqemetteur\').val(\'\');
392  }
393  }
394  ';
395 
396  print ' });'."\n";
397 
398  print ' </script>'."\n";
399  }
400 
401  print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
402  print '<input type="hidden" name="token" value="'.newToken().'">';
403  print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
404  print '<input type="hidden" name="action" value="add">';
405 
406  print load_fiche_titre($langs->trans("NewVariousPayment"), '', 'object_payment');
407 
408  print dol_get_fiche_head('', '');
409 
410  print '<table class="border centpercent">';
411 
412  // Date payment
413  print '<tr><td class="titlefieldcreate">';
414  print $form->editfieldkey('DatePayment', 'datep', '', $object, 0, 'string', '', 1).'</td><td>';
415  print $form->selectDate((empty($datep) ?-1 : $datep), "datep", '', '', '', 'add', 1, 1);
416  print '</td></tr>';
417 
418  // Date value for bank
419  print '<tr><td>';
420  print $form->editfieldkey('DateValue', 'datev', '', $object, 0).'</td><td>';
421  print $form->selectDate((empty($datev) ?-1 : $datev), "datev", '', '', '', 'add', 1, 1);
422  print '</td></tr>';
423 
424  // Label
425  print '<tr><td>';
426  print $form->editfieldkey('Label', 'label', '', $object, 0, 'string', '', 1).'</td><td>';
427  print '<input name="label" id="label" class="minwidth300 maxwidth150onsmartphone" value="'.($label ? $label : $langs->trans("VariousPayment")).'">';
428  print '</td></tr>';
429 
430  // Amount
431  print '<tr><td>';
432  print $form->editfieldkey('Amount', 'amount', '', $object, 0, 'string', '', 1).'</td><td>';
433  print '<input name="amount" id="amount" class="minwidth50 maxwidth100" value="'.$amount.'">';
434  print '</td></tr>';
435 
436  // Bank
437  if (isModEnabled("banque")) {
438  print '<tr><td>';
439  print $form->editfieldkey('BankAccount', 'selectaccountid', '', $object, 0, 'string', '', 1).'</td><td>';
440  print img_picto('', 'bank_account', 'class="pictofixedwidth"');
441  print $form->select_comptes($accountid, "accountid", 0, '', 2, '', 0, '', 1); // Show list of main accounts (comptes courants)
442  print '</td></tr>';
443  }
444 
445  // Type payment
446  print '<tr><td><span class="fieldrequired">'.$langs->trans('PaymentMode').'</span></td><td>';
447  $form->select_types_paiements($paymenttype, 'paymenttype', '', 2);
448  print "</td>\n";
449  print '</tr>';
450 
451  // Number
452  if (isModEnabled("banque")) {
453  print '<tr><td><label for="num_payment">'.$langs->trans('Numero');
454  print ' <em>('.$langs->trans("ChequeOrTransferNumber").')</em>';
455  print '</label></td>';
456  print '<td><input name="num_payment" class="maxwidth150onsmartphone" id="num_payment" type="text" value="'.GETPOST("num_payment").'"></td></tr>'."\n";
457 
458  // Check transmitter
459  print '<tr><td class="'.(GETPOST('paymenttype') == 'CHQ' ? 'fieldrequired ' : '').'fieldrequireddyn"><label for="fieldchqemetteur">'.$langs->trans('CheckTransmitter');
460  print ' <em>('.$langs->trans("ChequeMaker").')</em>';
461  print '</label></td>';
462  print '<td><input id="fieldchqemetteur" name="chqemetteur" size="30" type="text" value="'.GETPOST('chqemetteur', 'alphanohtml').'"></td></tr>';
463 
464  // Bank name
465  print '<tr><td><label for="chqbank">'.$langs->trans('Bank');
466  print ' <em>('.$langs->trans("ChequeBank").')</em>';
467  print '</label></td>';
468  print '<td><input id="chqbank" name="chqbank" size="30" type="text" value="'.GETPOST('chqbank', 'alphanohtml').'"></td></tr>';
469  }
470 
471  // Accountancy account
472  if (isModEnabled('accounting')) {
473  // TODO Remove the fieldrequired and allow instead to edit a various payment to enter accounting code
474  print '<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans("AccountAccounting").'</td>';
475  print '<td>';
476  print $formaccounting->select_account($accountancy_code, 'accountancy_code', 1, null, 1, 1);
477  print '</td></tr>';
478  } else { // For external software
479  print '<tr><td class="titlefieldcreate">'.$langs->trans("AccountAccounting").'</td>';
480  print '<td><input class="minwidth100 maxwidthonsmartphone" name="accountancy_code" value="'.$accountancy_code.'">';
481  print '</td></tr>';
482  }
483 
484  // Subledger account
485  if (isModEnabled('accounting')) {
486  print '<tr><td>'.$langs->trans("SubledgerAccount").'</td>';
487  print '<td>';
488  if (!empty($conf->global->ACCOUNTANCY_COMBO_FOR_AUX)) {
489  print $formaccounting->select_auxaccount($subledger_account, 'subledger_account', 1, '');
490  } else {
491  print '<input type="text" class="maxwidth200 maxwidthonsmartphone" name="subledger_account" value="'.$subledger_account.'">';
492  }
493  print '</td></tr>';
494  } else { // For external software
495  print '<tr><td>'.$langs->trans("SubledgerAccount").'</td>';
496  print '<td><input class="minwidth100 maxwidthonsmartphone" name="subledger_account" value="'.$subledger_account.'">';
497  print '</td></tr>';
498  }
499 
500  // Sens
501  print '<tr><td>';
502  $labelsens = $form->textwithpicto($langs->trans('Sens'), $langs->trans("AccountingDirectionHelp"));
503  print $form->editfieldkey($labelsens, 'sens', '', $object, 0, 'string', '', 1).'</td><td>';
504  $sensarray = array('0' => $langs->trans("Debit"), '1' => $langs->trans("Credit"));
505  print $form->selectarray('sens', $sensarray, $sens, 1, 0, 0, '', 0, 0, 0, '', 'minwidth100', 1);
506  print '</td></tr>';
507 
508  // Project
509  if (isModEnabled('project')) {
510  $formproject = new FormProjets($db);
511 
512  // Associated project
513  $langs->load("projects");
514 
515  print '<tr><td>'.$langs->trans("Project").'</td><td>';
516  print img_picto('', 'bank_account', 'class="pictofixedwidth"');
517  print $formproject->select_projects(-1, $projectid, 'fk_project', 0, 0, 1, 1, 0, 0, 0, '', 1);
518  print '</td></tr>';
519  }
520 
521  // Other attributes
522  $parameters = array();
523  $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
524  print $hookmanager->resPrint;
525 
526  // Category
527  if (is_array($options) && count($options) && $conf->categorie->enabled) {
528  print '<tr><td>'.$langs->trans("RubriquesTransactions").'</td><td>';
529  print img_picto('', 'category').Form::selectarray('category_transaction', $options, GETPOST('category_transaction'), 1, 0, 0, '', 0, 0, 0, '', 'minwidth300', 1);
530  print '</td></tr>';
531  }
532 
533  print '</table>';
534 
535  print dol_get_fiche_end();
536 
537  print $form->buttonsSaveCancel();
538 
539  print '</form>';
540 }
541 
542 
543 /* ************************************************************************** */
544 /* */
545 /* View mode */
546 /* */
547 /* ************************************************************************** */
548 
549 if ($id) {
550  $alreadyaccounted = $object->getVentilExportCompta();
551 
552  $head = various_payment_prepare_head($object);
553 
554  // Clone confirmation
555  if ($action === 'clone') {
556  $set_value_help = $form->textwithpicto('', $langs->trans($langs->trans("AccountingDirectionHelp")));
557  $sensarray = array('0' => $langs->trans("Debit"), '1' => $langs->trans("Credit"));
558 
559  $formquestion = array(
560  array('type' => 'text', 'name' => 'clone_label', 'label' => $langs->trans("Label"), 'value' => $langs->trans("CopyOf").' '.$object->label),
561  array('type' => 'date', 'tdclass'=>'fieldrequired', 'name' => 'clone_date_payment', 'label' => $langs->trans("DatePayment"), 'value' => -1),
562  array('type' => 'date', 'name' => 'clone_date_value', 'label' => $langs->trans("DateValue"), 'value' => -1),
563  array('type' => 'other', 'tdclass'=>'fieldrequired', 'name' => 'clone_accountid', 'label' => $langs->trans("BankAccount"), 'value' => $form->select_comptes($object->fk_account, "accountid", 0, '', 1, '', 0, 'minwidth200', 1)),
564  array('type' => 'text', 'name' => 'clone_amount', 'label' => $langs->trans("Amount"), 'value' => price($object->amount)),
565  array('type' => 'select', 'name' => 'clone_sens', 'label' => $langs->trans("Sens").' '.$set_value_help, 'values' => $sensarray, 'default' => $object->sens),
566  );
567 
568  print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneVariousPayment', $object->ref), 'confirm_clone', $formquestion, 'yes', 1, 350);
569  }
570 
571  // Confirmation of the removal of the Various Payment
572  if ($action == 'delete') {
573  $text = $langs->trans('ConfirmDeleteVariousPayment');
574  print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id, $langs->trans('DeleteVariousPayment'), $text, 'confirm_delete', '', '', 2);
575  }
576 
577  print dol_get_fiche_head($head, 'card', $langs->trans("VariousPayment"), -1, $object->picto);
578 
579  $morehtmlref = '<div class="refidno">';
580  // Project
581  if (isModEnabled('project')) {
582  $langs->load("projects");
583  //$morehtmlref .= '<br>';
584  if ($permissiontoadd) {
585  $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"');
586  if ($action != 'classify') {
587  $morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> ';
588  }
589  if ($action == 'classify') {
590  //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);
591  $morehtmlref .= '<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';
592  $morehtmlref .= '<input type="hidden" name="action" value="classin">';
593  $morehtmlref .= '<input type="hidden" name="token" value="'.newToken().'">';
594  $morehtmlref .= $formproject->select_projects(-1, $object->fk_project, 'projectid', 0, 0, 1, 1, 0, 0, 0, '', 1, 0, 'maxwidth500 widthcentpercentminusxx');
595  $morehtmlref .= '<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';
596  $morehtmlref .= '</form>';
597  } else {
598  $morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, (property_exists($object, 'socid') ? $object->socid : 0), $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, 0, 0, 1, '', 'maxwidth300');
599  }
600  } else {
601  if (!empty($object->fk_project)) {
602  $proj = new Project($db);
603  $proj->fetch($object->fk_project);
604  $morehtmlref .= $proj->getNomUrl(1);
605  if ($proj->title) {
606  $morehtmlref .= '<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).'</span>';
607  }
608  }
609  }
610  }
611 
612  $morehtmlref .= '</div>';
613  $linkback = '<a href="'.DOL_URL_ROOT.'/compta/bank/various_payment/list.php?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
614 
615  $morehtmlright = '';
616 
617  dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlright);
618 
619  print '<div class="fichecenter">';
620  print '<div class="underbanner clearboth"></div>';
621 
622  print '<table class="border centpercent tableforfield">';
623 
624  // Label
625  print '<tr><td class="titlefield">'.$langs->trans("Label").'</td><td>'.$object->label.'</td></tr>';
626 
627  // Payment date
628  print "<tr>";
629  print '<td>'.$langs->trans("DatePayment").'</td><td>';
630  print dol_print_date($object->datep, 'day');
631  print '</td></tr>';
632 
633  // Value date
634  print '<tr><td>'.$langs->trans("DateValue").'</td><td>';
635  print dol_print_date($object->datev, 'day');
636  print '</td></tr>';
637 
638  // Debit / Credit
639  if ($object->sens == '1') {
640  $sens = $langs->trans("Credit");
641  } else {
642  $sens = $langs->trans("Debit");
643  }
644  print '<tr><td>'.$langs->trans("Sens").'</td><td>'.$sens.'</td></tr>';
645 
646  print '<tr><td>'.$langs->trans("Amount").'</td><td><span class="amount">'.price($object->amount, 0, $langs, 1, -1, -1, $conf->currency).'</span></td></tr>';
647 
648  // Account of Chart of account
649  $editvalue = '';
650  if (isModEnabled('accounting')) {
651  print '<tr><td class="nowrap">';
652  print $form->editfieldkey('AccountAccounting', 'accountancy_code', $object->accountancy_code, $object, (!$alreadyaccounted && $user->rights->banque->modifier), 'string', '', 0);
653  print '</td><td>';
654  if ($action == 'editaccountancy_code') {
655  print $form->editfieldval('AccountAccounting', 'accountancy_code', $object->accountancy_code, $object, (!$alreadyaccounted && $user->rights->banque->modifier), 'string', '', 0);
656  } else {
657  $accountingaccount = new AccountingAccount($db);
658  $accountingaccount->fetch('', $object->accountancy_code, 1);
659 
660  print $accountingaccount->getNomUrl(0, 1, 1, '', 1);
661  }
662  print '</td></tr>';
663  } else {
664  print '<tr><td class="nowrap">';
665  print $langs->trans("AccountAccounting");
666  print '</td><td>';
667  print $object->accountancy_code;
668  print '</td></tr>';
669  }
670 
671  // Subledger account
672  print '<tr><td class="nowrap">';
673  print $form->editfieldkey('SubledgerAccount', 'subledger_account', $object->subledger_account, $object, (!$alreadyaccounted && $permissiontoadd), 'string', '', 0);
674  print '</td><td>';
675  print $form->editfieldval('SubledgerAccount', 'subledger_account', $object->subledger_account, $object, (!$alreadyaccounted && $permissiontoadd), 'string', '', 0, null, '', 1, 'lengthAccounta');
676  print '</td></tr>';
677 
678  $bankaccountnotfound = 0;
679 
680  if (isModEnabled('banque')) {
681  print '<tr>';
682  print '<td>'.$langs->trans('BankTransactionLine').'</td>';
683  print '<td colspan="3">';
684  if ($object->fk_bank > 0) {
685  $bankline = new AccountLine($db);
686  $result = $bankline->fetch($object->fk_bank);
687 
688  if ($result <= 0) {
689  $bankaccountnotfound = 1;
690  } else {
691  print $bankline->getNomUrl(1, 0, 'showall');
692  }
693  } else {
694  $bankaccountnotfound = 1;
695 
696  print '<span class="opacitymedium">'.$langs->trans("NoRecordfound").'</span>';
697  }
698  print '</td>';
699  print '</tr>';
700  }
701 
702  // Other attributes
703  $parameters = array('socid'=>$object->id);
704  include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';
705 
706  print '</table>';
707 
708  print '</div>';
709 
710  print '<div class="clearboth"></div>';
711 
712  print dol_get_fiche_end();
713 
714 
715  /*
716  * Action bar
717  */
718  print '<div class="tabsAction">'."\n";
719 
720  // TODO
721  // Add button modify
722 
723  // Clone
724  if ($permissiontoadd) {
725  print '<div class="inline-block divButAction"><a class="butAction" href="'.dol_buildpath("/compta/bank/various_payment/card.php", 1).'?id='.$object->id.'&amp;action=clone">'.$langs->trans("ToClone")."</a></div>";
726  }
727 
728  // Delete
729  if (empty($object->rappro) || $bankaccountnotfound) {
730  if ($permissiontoadd) {
731  if ($alreadyaccounted) {
732  print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("Accounted").'">'.$langs->trans("Delete").'</a></div>';
733  } else {
734  print '<div class="inline-block divButAction"><a class="butActionDelete" href="card.php?id='.$object->id.'&action=delete&token='.newToken().'">'.$langs->trans("Delete").'</a></div>';
735  }
736  } else {
737  print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.(dol_escape_htmltag($langs->trans("NotAllowed"))).'">'.$langs->trans("Delete").'</a></div>';
738  }
739  } else {
740  print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("LinkedToAConciliatedTransaction").'">'.$langs->trans("Delete").'</a></div>';
741  }
742 
743  print "</div>";
744 }
745 
746 // End of page
747 llxFooter();
748 $db->close();
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:118
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Definition: wrapper.php:56
llxFooter()
Empty footer.
Definition: wrapper.php:70
various_payment_prepare_head($object)
Prepare array with list of tabs.
Definition: bank.lib.php:232
Class to manage bank transaction lines.
Class to manage accounting accounts.
Class to manage bank categories.
Class to manage generation of HTML components for accounting management.
Class to manage generation of HTML components Only common components must be here.
Class to manage building of HTML components.
Class to manage various payments.
Class to manage projects.
$parameters
Actions.
Definition: card.php:83
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:143
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.
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...
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
GETPOSTINT($paramname, $method=0)
Return value of a param into GET or POST supervariable.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_get_fiche_end($notab=0)
Return tab footer of a card.
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.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
dol_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id', $entityfilter=0, $filters='')
Return an id or code from a code or id.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo editer/modifier fiche.
restrictedArea(User $user, $features, $object=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.