dolibarr 21.0.0-beta
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-2024 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 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', 'aZ09');
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 || !empty($ref)) {
109 $ret = $object->fetch($id, $ref);
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 if ($object->fk_bank) {
225 $accountline = new AccountLine($db);
226 $result = $accountline->fetch($object->fk_bank);
227 if ($result > 0) {
228 $result = $accountline->delete($user); // $result may be 0 if not found (when bank entry was deleted manually and fk_bank point to nothing)
229 }
230 } else {
231 $account_line = null;
232 }
233
234 if ($result >= 0) {
235 $db->commit();
236 header("Location: ".DOL_URL_ROOT.'/compta/bank/various_payment/list.php');
237 exit;
238 } else {
239 $object->error = $accountline ? $accountline->error : 'No AccountLine';
240 $db->rollback();
241 setEventMessages($object->error, $object->errors, 'errors');
242 }
243 } else {
244 $db->rollback();
245 setEventMessages($object->error, $object->errors, 'errors');
246 }
247 } else {
248 setEventMessages('Error try do delete a line linked to a conciliated bank transaction', null, 'errors');
249 }
250 }
251
252 if ($action == 'setaccountancy_code' && $permissiontodelete) {
253 $db->begin();
254
255 $result = $object->fetch($id);
256
257 $object->accountancy_code = GETPOST('accountancy_code', 'alphanohtml');
258
259 $res = $object->update($user);
260 if ($res > 0) {
261 $db->commit();
262 } else {
263 $db->rollback();
264 setEventMessages($object->error, $object->errors, 'errors');
265 }
266 }
267
268 if ($action == 'setsubledger_account' && $permissiontodelete) {
269 $db->begin();
270
271 $result = $object->fetch($id);
272
273 $object->subledger_account = $subledger_account;
274
275 $res = $object->update($user);
276 if ($res > 0) {
277 $db->commit();
278 } else {
279 $db->rollback();
280 setEventMessages($object->error, $object->errors, 'errors');
281 }
282 }
283}
284
285// Action clone object
286if ($action == 'confirm_clone' && $confirm != 'yes') { // Test on permission not required
287 $action = '';
288}
289
290if ($action == 'confirm_clone' && $confirm == 'yes' && $permissiontoadd) {
291 $db->begin();
292
293 $originalId = $id;
294
295 $object->fetch($id);
296
297 if ($object->id > 0) {
298 unset($object->id);
299 unset($object->ref);
300
301 if (GETPOST('clone_label', 'alphanohtml')) {
302 $object->label = GETPOST('clone_label', 'alphanohtml');
303 } else {
304 $object->label = $langs->trans("CopyOf").' '.$object->label;
305 }
306
307 $newdatepayment = dol_mktime(0, 0, 0, GETPOSTINT('clone_date_paymentmonth'), GETPOSTINT('clone_date_paymentday'), GETPOSTINT('clone_date_paymentyear'));
308 $newdatevalue = dol_mktime(0, 0, 0, GETPOSTINT('clone_date_valuemonth'), GETPOSTINT('clone_date_valueday'), GETPOSTINT('clone_date_valueyear'));
309 if ($newdatepayment) {
310 $object->datep = $newdatepayment;
311 }
312 if (!empty($newdatevalue)) {
313 $object->datev = $newdatevalue;
314 } else {
315 $object->datev = $newdatepayment;
316 }
317
318 if (GETPOSTISSET("clone_sens")) {
319 $object->sens = GETPOSTINT("clone_sens");
320 } // else { $object->sens = $object->sens; }
321
322 if (GETPOSTISSET("clone_amount")) {
323 $object->amount = GETPOSTFLOAT("clone_amount");
324 } else {
325 $object->amount = (float) price2num($object->amount);
326 }
327
328 if ($object->check()) {
329 $id = $object->create($user);
330 if ($id > 0) {
331 $db->commit();
332 $db->close();
333
334 header("Location: ".$_SERVER["PHP_SELF"]."?id=".$id);
335 exit;
336 } else {
337 $id = $originalId;
338 $db->rollback();
339
340 setEventMessages($object->error, $object->errors, 'errors');
341 }
342 } else {
343 $id = $originalId;
344 $db->rollback();
345
346 setEventMessages($object->error, $object->errors, 'errors');
347 }
348 } else {
349 $db->rollback();
350 dol_print_error($db, $object->error);
351 }
352}
353
354
355/*
356 * View
357 */
358
359$form = new Form($db);
360if (isModEnabled('accounting')) {
361 $formaccounting = new FormAccounting($db);
362} else {
363 $formaccounting = null;
364}
365if (isModEnabled('project')) {
366 $formproject = new FormProjets($db);
367} else {
368 $formproject = null;
369}
370
371if ($id) {
372 $object = new PaymentVarious($db);
373 $result = $object->fetch($id);
374 if ($result <= 0) {
375 dol_print_error($db);
376 exit;
377 }
378}
379
380$title = $object->ref." - ".$langs->trans('Card');
381if ($action == 'create') {
382 $title = $langs->trans("NewVariousPayment");
383}
384$help_url = 'EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores|DE:Modul_Lieferantenrechnungen';
385llxHeader('', $title, $help_url);
386
387$options = array();
388
389// Load bank groups
390require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/bankcateg.class.php';
391$bankcateg = new BankCateg($db);
392
393$arrayofbankcategs = $bankcateg->fetchAll();
394
395foreach ($arrayofbankcategs as $bankcategory) {
396 $options[$bankcategory->id] = $bankcategory->label;
397}
398
399// Create mode
400if ($action == 'create') {
401 // Update fields properties in realtime
402 if (!empty($conf->use_javascript_ajax)) {
403 print "\n".'<script type="text/javascript">';
404 print '$(document).ready(function () {
405 setPaymentType();
406 $("#selectpaymenttype").change(function() {
407 setPaymentType();
408 });
409 function setPaymentType()
410 {
411 console.log("setPaymentType");
412 var code = $("#selectpaymenttype option:selected").val();
413 if (code == \'CHQ\' || code == \'VIR\')
414 {
415 if (code == \'CHQ\')
416 {
417 $(\'.fieldrequireddyn\').addClass(\'fieldrequired\');
418 }
419 if ($(\'#fieldchqemetteur\').val() == \'\')
420 {
421 var emetteur = jQuery(\'#thirdpartylabel\').val();
422 $(\'#fieldchqemetteur\').val(emetteur);
423 }
424 }
425 else
426 {
427 $(\'.fieldrequireddyn\').removeClass(\'fieldrequired\');
428 $(\'#fieldchqemetteur\').val(\'\');
429 }
430 }
431 ';
432
433 print ' });'."\n";
434
435 print ' </script>'."\n";
436 }
437
438 print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
439 print '<input type="hidden" name="token" value="'.newToken().'">';
440 print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
441 print '<input type="hidden" name="action" value="add">';
442
443 print load_fiche_titre($langs->trans("NewVariousPayment"), '', 'object_payment');
444
445 print dol_get_fiche_head([], '');
446
447 print '<table class="border centpercent">';
448
449 // Date payment
450 print '<tr><td class="titlefieldcreate">';
451 print $form->editfieldkey('DatePayment', 'datep', '', $object, 0, 'string', '', 1).'</td><td>';
452 print $form->selectDate((empty($datep) ? -1 : $datep), "datep", 0, 0, 0, 'add', 1, 1);
453 print '</td></tr>';
454
455 // Date value for bank
456 print '<tr><td>';
457 print $form->editfieldkey('DateValue', 'datev', '', $object, 0).'</td><td>';
458 print $form->selectDate((empty($datev) ? -1 : $datev), "datev", 0, 0, 0, 'add', 1, 1);
459 print '</td></tr>';
460
461 // Label
462 print '<tr><td>';
463 print $form->editfieldkey('Label', 'label', '', $object, 0, 'string', '', 1).'</td><td>';
464 print '<input name="label" id="label" class="minwidth300 maxwidth150onsmartphone" value="'.($label ? $label : $langs->trans("VariousPayment")).'">';
465 print '</td></tr>';
466
467 // Amount
468 print '<tr><td>';
469 print $form->editfieldkey('Amount', 'amount', '', $object, 0, 'string', '', 1).'</td><td>';
470 print '<input name="amount" id="amount" class="minwidth50 maxwidth100" value="'.$amount.'">';
471 print '</td></tr>';
472
473 // Bank
474 if (isModEnabled("bank")) {
475 print '<tr><td>';
476 print $form->editfieldkey('BankAccount', 'selectaccountid', '', $object, 0, 'string', '', 1).'</td><td>';
477 print img_picto('', 'bank_account', 'class="pictofixedwidth"');
478 print $form->select_comptes($accountid, "accountid", 0, '', 2, '', (isModEnabled('multicurrency') ? 1 : 0), '', 1); // Show list of main accounts (comptes courants)
479 print '</td></tr>';
480 }
481
482 // Type payment
483 print '<tr><td><span class="fieldrequired">'.$langs->trans('PaymentMode').'</span></td><td>';
484 $form->select_types_paiements($paymenttype, 'paymenttype', '', 2);
485 print "</td>\n";
486 print '</tr>';
487
488 // Number
489 if (isModEnabled("bank")) {
490 print '<tr><td><label for="num_payment">'.$langs->trans('Numero');
491 print ' <em>('.$langs->trans("ChequeOrTransferNumber").')</em>';
492 print '</label></td>';
493 print '<td><input name="num_payment" class="maxwidth150onsmartphone" id="num_payment" type="text" value="'.GETPOST("num_payment").'"></td></tr>'."\n";
494
495 // Check transmitter
496 print '<tr><td class="'.(GETPOST('paymenttype') == 'CHQ' ? 'fieldrequired ' : '').'fieldrequireddyn"><label for="fieldchqemetteur">'.$langs->trans('CheckTransmitter');
497 print ' <em>('.$langs->trans("ChequeMaker").')</em>';
498 print '</label></td>';
499 print '<td><input id="fieldchqemetteur" name="chqemetteur" size="30" type="text" value="'.GETPOST('chqemetteur', 'alphanohtml').'"></td></tr>';
500
501 // Bank name
502 print '<tr><td><label for="chqbank">'.$langs->trans('Bank');
503 print ' <em>('.$langs->trans("ChequeBank").')</em>';
504 print '</label></td>';
505 print '<td><input id="chqbank" name="chqbank" size="30" type="text" value="'.GETPOST('chqbank', 'alphanohtml').'"></td></tr>';
506 }
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('', 'project', '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 '<tr><td colspan="2"><hr></td></tr>';
534
535 // Accountancy account
536 if (isModEnabled('accounting')) {
538 // TODO Remove the fieldrequired and allow instead to edit a various payment to enter accounting code
539 print '<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans("AccountAccounting").'</td>';
540 print '<td>';
541 print $formaccounting->select_account($accountancy_code, 'accountancy_code', 1, array(), 1, 1);
542 print '</td></tr>';
543 } else { // For external software
544 print '<tr><td class="titlefieldcreate">'.$langs->trans("AccountAccounting").'</td>';
545 print '<td><input class="minwidth100 maxwidthonsmartphone" name="accountancy_code" value="'.$accountancy_code.'">';
546 print '</td></tr>';
547 }
548
549 // Subledger account
550 if (isModEnabled('accounting')) {
552 print '<tr><td>'.$langs->trans("SubledgerAccount").'</td>';
553 print '<td>';
554 if (getDolGlobalString('ACCOUNTANCY_COMBO_FOR_AUX')) {
555 print $formaccounting->select_auxaccount($subledger_account, 'subledger_account', 1, '');
556 } else {
557 print '<input type="text" class="maxwidth200 maxwidthonsmartphone" name="subledger_account" value="'.$subledger_account.'">';
558 }
559 print '</td></tr>';
560 } else { // For external software
561 print '<tr><td>'.$langs->trans("SubledgerAccount").'</td>';
562 print '<td><input class="minwidth100 maxwidthonsmartphone" name="subledger_account" value="'.$subledger_account.'">';
563 print '</td></tr>';
564 }
565
566 // Sens
567 print '<tr><td>';
568 $labelsens = $form->textwithpicto($langs->trans('Sens'), $langs->trans("AccountingDirectionHelp"));
569 print $form->editfieldkey($labelsens, 'sens', '', $object, 0, 'string', '', 1).'</td><td>';
570 $sensarray = array('0' => $langs->trans("Debit"), '1' => $langs->trans("Credit"));
571 print $form->selectarray('sens', $sensarray, $sens, 1, 0, 0, '', 0, 0, 0, '', 'minwidth100', 1);
572 print '</td></tr>';
573
574 print '</table>';
575
576 print dol_get_fiche_end();
577
578 print $form->buttonsSaveCancel();
579
580 print '</form>';
581}
582
583// View in read or edit mode
584if ($id) {
585 $alreadyaccounted = $object->getVentilExportCompta();
586
588
589 // Clone confirmation
590 if ($action === 'clone') {
591 $set_value_help = $form->textwithpicto('', $langs->trans($langs->trans("AccountingDirectionHelp")));
592 $sensarray = array('0' => $langs->trans("Debit"), '1' => $langs->trans("Credit"));
593
594 $formquestion = array(
595 array('type' => 'text', 'name' => 'clone_label', 'label' => $langs->trans("Label"), 'value' => $langs->trans("CopyOf").' '.$object->label),
596 array('type' => 'date', 'tdclass' => 'fieldrequired', 'name' => 'clone_date_payment', 'label' => $langs->trans("DatePayment"), 'value' => -1),
597 array('type' => 'date', 'name' => 'clone_date_value', 'label' => $langs->trans("DateValue"), 'value' => -1),
598 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)),
599 array('type' => 'text', 'name' => 'clone_amount', 'label' => $langs->trans("Amount"), 'value' => price($object->amount)),
600 array('type' => 'select', 'name' => 'clone_sens', 'label' => $langs->trans("Sens").' '.$set_value_help, 'values' => $sensarray, 'default' => $object->sens),
601 );
602
603 print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneVariousPayment', $object->ref), 'confirm_clone', $formquestion, 'yes', 1, 350);
604 }
605
606 // Confirmation of the removal of the Various Payment
607 if ($action == 'delete') {
608 $text = $langs->trans('ConfirmDeleteVariousPayment');
609 print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id, $langs->trans('DeleteVariousPayment'), $text, 'confirm_delete', '', '', 2);
610 }
611
612 print dol_get_fiche_head($head, 'card', $langs->trans("VariousPayment"), -1, $object->picto);
613
614 $morehtmlref = '<div class="refidno">';
615 // Project
616 if (isModEnabled('project') && $formproject !== null) {
617 $langs->load("projects");
618 //$morehtmlref .= '<br>';
619 if ($permissiontoadd) {
620 $morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"');
621 if ($action != 'classify') {
622 $morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> ';
623 }
624 if ($action == 'classify') {
625 //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);
626 $morehtmlref .= '<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';
627 $morehtmlref .= '<input type="hidden" name="action" value="classin">';
628 $morehtmlref .= '<input type="hidden" name="token" value="'.newToken().'">';
629 $morehtmlref .= $formproject->select_projects(-1, $object->fk_project, 'projectid', 0, 0, 1, 1, 0, 0, 0, '', 1, 0, 'maxwidth500 widthcentpercentminusxx');
630 $morehtmlref .= '<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';
631 $morehtmlref .= '</form>';
632 } else {
633 $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');
634 }
635 } else {
636 if (!empty($object->fk_project)) {
637 $proj = new Project($db);
638 $proj->fetch($object->fk_project);
639 $morehtmlref .= $proj->getNomUrl(1);
640 if ($proj->title) {
641 $morehtmlref .= '<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).'</span>';
642 }
643 }
644 }
645 }
646
647 $morehtmlref .= '</div>';
648 $linkback = '<a href="'.DOL_URL_ROOT.'/compta/bank/various_payment/list.php?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
649
650 $morehtmlstatus = '';
651
652 dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlstatus);
653
654 print '<div class="fichecenter">';
655 print '<div class="underbanner clearboth"></div>';
656
657 print '<table class="border centpercent tableforfield">';
658
659 // Label
660 print '<tr><td class="titlefield">'.$langs->trans("Label").'</td><td>'.$object->label.'</td></tr>';
661
662 // Payment date
663 print "<tr>";
664 print '<td>'.$langs->trans("DatePayment").'</td><td>';
665 print dol_print_date($object->datep, 'day');
666 print '</td></tr>';
667
668 // Value date
669 print '<tr><td>'.$langs->trans("DateValue").'</td><td>';
670 print dol_print_date($object->datev, 'day');
671 print '</td></tr>';
672
673 // Debit / Credit
674 if ($object->sens == '1') {
675 $sens = $langs->trans("Credit");
676 } else {
677 $sens = $langs->trans("Debit");
678 }
679 print '<tr><td>'.$langs->trans("Sens").'</td><td>'.$sens.'</td></tr>';
680
681 print '<tr><td>'.$langs->trans("Amount").'</td><td><span class="amount">'.price($object->amount, 0, $langs, 1, -1, -1, $conf->currency).'</span></td></tr>';
682
683 // Account of Chart of account
684 $editvalue = '';
685 if (isModEnabled('accounting')) {
687 print '<tr><td class="nowrap">';
688 print $form->editfieldkey('AccountAccounting', 'accountancy_code', $object->accountancy_code, $object, (!$alreadyaccounted && $permissiontoadd), 'string', '', 0);
689 print '</td><td>';
690 if ($action == 'editaccountancy_code' && (!$alreadyaccounted && $permissiontoadd)) {
691 //print $form->editfieldval('AccountAccounting', 'accountancy_code', $object->accountancy_code, $object, (!$alreadyaccounted && $user->hasRight('banque', 'modifier')), 'string', '', 0);
692 print $formaccounting->formAccountingAccount($_SERVER['PHP_SELF'].'?id='.$object->id, $object->accountancy_code, 'accountancy_code', 0, 1, '', 1);
693 } else {
694 $accountingaccount = new AccountingAccount($db);
695 $accountingaccount->fetch(0, $object->accountancy_code, 1);
696
697 print $accountingaccount->getNomUrl(0, 1, 1, '', 1);
698 }
699 print '</td></tr>';
700 } else {
701 print '<tr><td class="nowrap">';
702 print $langs->trans("AccountAccounting");
703 print '</td><td>';
704 print $object->accountancy_code;
705 print '</td></tr>';
706 }
707
708 // Subledger account
709 print '<tr><td class="nowrap">';
710 print $form->editfieldkey('SubledgerAccount', 'subledger_account', $object->subledger_account, $object, (!$alreadyaccounted && $permissiontoadd), 'string', '', 0);
711 print '</td><td>';
712 if ($action == 'editsubledger_account' && (!$alreadyaccounted && $permissiontoadd)) {
713 if (getDolGlobalString('ACCOUNTANCY_COMBO_FOR_AUX')) {
715 print $formaccounting->formAccountingAccount($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->subledger_account, 'subledger_account', 1, 1, '', 1);
716 } else {
717 print $form->editfieldval('SubledgerAccount', 'subledger_account', $object->subledger_account, $object, (!$alreadyaccounted && $permissiontoadd), 'string', '', null, null, '', 1, 'lengthAccounta');
718 }
719 } else {
720 print length_accounta($object->subledger_account);
721 }
722 print '</td></tr>';
723
724 $bankaccountnotfound = 0;
725
726 if (isModEnabled('bank')) {
727 print '<tr>';
728 print '<td>'.$langs->trans('BankTransactionLine').'</td>';
729 print '<td colspan="3">';
730 if ($object->fk_bank > 0) {
731 $bankline = new AccountLine($db);
732 $result = $bankline->fetch($object->fk_bank);
733
734 if ($result <= 0) {
735 $bankaccountnotfound = 1;
736 } else {
737 print $bankline->getNomUrl(1, 0, 'showall');
738 }
739 } else {
740 $bankaccountnotfound = 1;
741
742 print '<span class="opacitymedium">'.$langs->trans("NoRecordfound").'</span>';
743 }
744 print '</td>';
745 print '</tr>';
746 }
747
748 // Other attributes
749 $parameters = array('socid' => $object->id);
750 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';
751
752 print '</table>';
753
754 print '</div>';
755
756 print '<div class="clearboth"></div>';
757
758 print dol_get_fiche_end();
759
760
761 /*
762 * Action bar
763 */
764 print '<div class="tabsAction">'."\n";
765
766 // TODO
767 // Add button modify
768
769 // Clone
770 if ($permissiontoadd) {
771 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>";
772 }
773
774 // Delete
775 if (empty($object->rappro) || $bankaccountnotfound) {
776 if ($permissiontoadd) {
777 if ($alreadyaccounted) {
778 print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("Accounted").'">'.$langs->trans("Delete").'</a></div>';
779 } else {
780 print '<div class="inline-block divButAction"><a class="butActionDelete" href="card.php?id='.$object->id.'&action=delete&token='.newToken().'">'.$langs->trans("Delete").'</a></div>';
781 }
782 } else {
783 print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.(dol_escape_htmltag($langs->trans("NotAllowed"))).'">'.$langs->trans("Delete").'</a></div>';
784 }
785 } else {
786 print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("LinkedToAConciliatedTransaction").'">'.$langs->trans("Delete").'</a></div>';
787 }
788
789 print "</div>";
790}
791
792// End of page
793llxFooter();
794$db->close();
$id
Definition account.php:48
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:66
length_accounta($accounta)
Return Auxiliary accounting account of thirdparties with defined length.
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:71
various_payment_prepare_head($object)
Prepare array with list of tabs.
Definition bank.lib.php:273
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.
llxFooter()
Footer empty.
Definition document.php:107
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...
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)
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)
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_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id', $entityfilter=0, $filters='')
Return an id or code from a code or id.
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.