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