27 require
'../../../main.inc.php';
28 require_once DOL_DOCUMENT_ROOT.
'/core/lib/bank.lib.php';
29 require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
30 require_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/paymentvarious.class.php';
31 require_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
32 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formaccounting.class.php';
33 require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingaccount.class.php';
34 require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingjournal.class.php';
36 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
37 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
41 $langs->loadLangs(array(
"compta",
"banks",
"bills",
"users",
"accountancy",
"categories"));
45 $action =
GETPOST(
'action',
'alpha');
47 $cancel =
GETPOST(
'cancel',
'aZ09');
48 $backtopage =
GETPOST(
'backtopage',
'alpha');
50 $accountid =
GETPOST(
"accountid") > 0 ?
GETPOST(
"accountid",
"int") : 0;
51 $label =
GETPOST(
"label",
"alpha");
54 $paymenttype =
GETPOST(
"paymenttype",
"aZ09");
55 $accountancy_code =
GETPOST(
"accountancy_code",
"alpha");
56 $projectid = (
GETPOST(
'projectid',
'int') ?
GETPOST(
'projectid',
'int') :
GETPOST(
'fk_project',
'int'));
57 if (
isModEnabled(
'accounting') && !empty($conf->global->ACCOUNTANCY_COMBO_FOR_AUX)) {
58 $subledger_account =
GETPOST(
"subledger_account",
"alpha") > 0 ?
GETPOST(
"subledger_account",
"alpha") :
'';
60 $subledger_account =
GETPOST(
"subledger_account",
"alpha");
64 $socid =
GETPOST(
"socid",
"int");
66 $socid = $user->socid;
73 $hookmanager->initHooks(array(
'variouscard',
'globalcard'));
75 $permissiontoadd = $user->hasRight(
'banque',
'modifier');
83 $reshook = $hookmanager->executeHooks(
'doActions',
$parameters, $object, $action);
88 if (empty($reshook)) {
90 if ($action !=
'addlink' && $action !=
'setaccountancy_code' && $action !=
'setsubledger_account') {
91 $urltogo = $backtopage ? $backtopage :
dol_buildpath(
'/compta/bank/various_payment/list.php', 1);
92 header(
"Location: ".$urltogo);
95 if ($id > 0 || !empty($ref)) {
96 $ret = $object->fetch($id, $ref);
102 if ($action ==
'classin' && $permissiontoadd) {
104 $object->setProject(
GETPOST(
'projectid',
'int'));
107 if ($action ==
'add') {
117 $object->accountid =
GETPOST(
"accountid",
'int') > 0 ?
GETPOST(
"accountid",
"int") : 0;
118 $object->datev = $datev;
119 $object->datep = $datep;
121 $object->label =
GETPOST(
"label",
'restricthtml');
122 $object->note =
GETPOST(
"note",
'restricthtml');
124 $object->num_payment =
GETPOST(
"num_payment",
'alpha');
125 $object->chqemetteur =
GETPOST(
"chqemetteur",
'alpha');
126 $object->chqbank =
GETPOST(
"chqbank",
'alpha');
127 $object->fk_user_author = $user->id;
128 $object->category_transaction =
GETPOST(
"category_transaction",
'alpha');
130 $object->accountancy_code =
GETPOST(
"accountancy_code") > 0 ?
GETPOST(
"accountancy_code",
"alpha") :
"";
131 $object->subledger_account = $subledger_account;
134 $object->fk_project =
GETPOSTINT(
'fk_project');
136 if (empty($datep) || empty($datev)) {
137 $langs->load(
'errors');
138 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Date")),
null,
'errors');
141 if (empty($object->amount)) {
142 $langs->load(
'errors');
143 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount")),
null,
'errors');
146 if (
isModEnabled(
"banque") && !$object->accountid > 0) {
147 $langs->load(
'errors');
148 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"BankAccount")),
null,
'errors');
151 if (empty($object->type_payment) || $object->type_payment < 0) {
152 $langs->load(
'errors');
153 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"PaymentMode")),
null,
'errors');
156 if (
isModEnabled(
'accounting') && !$object->accountancy_code) {
157 $langs->load(
'errors');
158 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"AccountAccounting")),
null,
'errors');
161 if ($object->sens < 0) {
162 $langs->load(
'errors');
163 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Sens")),
null,
'errors');
170 $ret = $object->create($user);
173 $urltogo = ($backtopage ? $backtopage : DOL_URL_ROOT.
'/compta/bank/various_payment/list.php');
174 header(
"Location: ".$urltogo);
186 if ($action ==
'confirm_delete' && $confirm ==
'yes') {
187 $result = $object->fetch($id);
189 if ($object->rappro == 0) {
192 $ret = $object->delete($user);
194 if ($object->fk_bank) {
196 $result = $accountline->fetch($object->fk_bank);
198 $result = $accountline->delete($user);
204 header(
"Location: ".DOL_URL_ROOT.
'/compta/bank/various_payment/list.php');
207 $object->error = $accountline->error;
216 setEventMessages(
'Error try do delete a line linked to a conciliated bank transaction',
null,
'errors');
220 if ($action ==
'setaccountancy_code') {
223 $result = $object->fetch($id);
225 $object->accountancy_code =
GETPOST(
'accountancy_code',
'alpha');
227 $res = $object->update($user);
236 if ($action ==
'setsubledger_account') {
239 $result = $object->fetch($id);
241 $object->subledger_account = $subledger_account;
243 $res = $object->update($user);
254 if ($action ==
'confirm_clone' && $confirm !=
'yes') {
258 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $permissiontoadd) {
265 if ($object->id > 0) {
266 $object->id = $object->ref =
null;
268 if (
GETPOST(
'clone_label',
'alphanohtml')) {
269 $object->label =
GETPOST(
'clone_label',
'alphanohtml');
271 $object->label = $langs->trans(
"CopyOf").
' '.$object->label;
274 $newdatepayment =
dol_mktime(0, 0, 0,
GETPOST(
'clone_date_paymentmonth',
'int'),
GETPOST(
'clone_date_paymentday',
'int'),
GETPOST(
'clone_date_paymentyear',
'int'));
275 $newdatevalue =
dol_mktime(0, 0, 0,
GETPOST(
'clone_date_valuemonth',
'int'),
GETPOST(
'clone_date_valueday',
'int'),
GETPOST(
'clone_date_valueyear',
'int'));
276 if ($newdatepayment) {
277 $object->datep = $newdatepayment;
279 if (!empty($newdatevalue)) {
280 $object->datev = $newdatevalue;
282 $object->datev = $newdatepayment;
286 $object->sens =
GETPOST(
"clone_sens",
'int');
288 $object->sens = $object->sens;
291 if (
GETPOST(
"clone_amount",
"alpha")) {
294 $object->amount =
price2num($object->amount);
297 if ($object->check()) {
298 $id = $object->create($user);
303 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".$id);
337 $result = $object->fetch($id);
344 $title = $object->ref.
" - ".$langs->trans(
'Card');
345 if ($action ==
'create') {
346 $title = $langs->trans(
"NewVariousPayment");
348 $help_url =
'EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores|DE:Modul_Lieferantenrechnungen';
354 require_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/bankcateg.class.php';
357 foreach ($bankcateg->fetchAll() as $bankcategory) {
358 $options[$bankcategory->id] = $bankcategory->label;
362 if ($action ==
'create') {
364 if (!empty($conf->use_javascript_ajax)) {
365 print
"\n".
'<script type="text/javascript">';
366 print
'$(document).ready(function () {
368 $("#selectpaymenttype").change(function() {
371 function setPaymentType()
373 console.log("setPaymentType");
374 var code = $("#selectpaymenttype option:selected").val();
375 if (code == \'CHQ\' || code == \'VIR\')
379 $(\'.fieldrequireddyn\').addClass(\'fieldrequired\');
381 if ($(\'#fieldchqemetteur\').val() == \'\')
383 var emetteur = jQuery(\'#thirdpartylabel\').val();
384 $(\'#fieldchqemetteur\').val(emetteur);
389 $(\'.fieldrequireddyn\').removeClass(\'fieldrequired\');
390 $(\'#fieldchqemetteur\').val(\'\');
397 print
' </script>'.
"\n";
400 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">';
401 print
'<input type="hidden" name="token" value="'.newToken().
'">';
402 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
403 print
'<input type="hidden" name="action" value="add">';
405 print
load_fiche_titre($langs->trans(
"NewVariousPayment"),
'',
'object_payment');
409 print
'<table class="border centpercent">';
412 print
'<tr><td class="titlefieldcreate">';
413 print
$form->editfieldkey(
'DatePayment',
'datep',
'', $object, 0,
'string',
'', 1).
'</td><td>';
414 print
$form->selectDate((empty($datep) ?-1 : $datep),
"datep",
'',
'',
'',
'add', 1, 1);
419 print
$form->editfieldkey(
'DateValue',
'datev',
'', $object, 0).
'</td><td>';
420 print
$form->selectDate((empty($datev) ?-1 : $datev),
"datev",
'',
'',
'',
'add', 1, 1);
425 print
$form->editfieldkey(
'Label',
'label',
'', $object, 0,
'string',
'', 1).
'</td><td>';
426 print
'<input name="label" id="label" class="minwidth300 maxwidth150onsmartphone" value="'.($label ? $label : $langs->trans(
"VariousPayment")).
'">';
431 print
$form->editfieldkey(
'Amount',
'amount',
'', $object, 0,
'string',
'', 1).
'</td><td>';
432 print
'<input name="amount" id="amount" class="minwidth50 maxwidth100" value="'.$amount.
'">';
438 print
$form->editfieldkey(
'BankAccount',
'selectaccountid',
'', $object, 0,
'string',
'', 1).
'</td><td>';
439 print
img_picto(
'',
'bank_account',
'class="pictofixedwidth"');
440 print
$form->select_comptes($accountid,
"accountid", 0,
'', 2,
'', 0,
'', 1);
445 print
'<tr><td><span class="fieldrequired">'.$langs->trans(
'PaymentMode').
'</span></td><td>';
446 $form->select_types_paiements($paymenttype,
'paymenttype',
'', 2);
452 print
'<tr><td><label for="num_payment">'.$langs->trans(
'Numero');
453 print
' <em>('.$langs->trans(
"ChequeOrTransferNumber").
')</em>';
454 print
'</label></td>';
455 print
'<td><input name="num_payment" class="maxwidth150onsmartphone" id="num_payment" type="text" value="'.GETPOST(
"num_payment").
'"></td></tr>'.
"\n";
458 print
'<tr><td class="'.(GETPOST(
'paymenttype') ==
'CHQ' ?
'fieldrequired ' :
'').
'fieldrequireddyn"><label for="fieldchqemetteur">'.$langs->trans(
'CheckTransmitter');
459 print
' <em>('.$langs->trans(
"ChequeMaker").
')</em>';
460 print
'</label></td>';
461 print
'<td><input id="fieldchqemetteur" name="chqemetteur" size="30" type="text" value="'.GETPOST(
'chqemetteur',
'alphanohtml').
'"></td></tr>';
464 print
'<tr><td><label for="chqbank">'.$langs->trans(
'Bank');
465 print
' <em>('.$langs->trans(
"ChequeBank").
')</em>';
466 print
'</label></td>';
467 print
'<td><input id="chqbank" name="chqbank" size="30" type="text" value="'.GETPOST(
'chqbank',
'alphanohtml').
'"></td></tr>';
473 print
'<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans(
"AccountAccounting").
'</td>';
475 print $formaccounting->select_account($accountancy_code,
'accountancy_code', 1,
null, 1, 1);
478 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"AccountAccounting").
'</td>';
479 print
'<td><input class="minwidth100 maxwidthonsmartphone" name="accountancy_code" value="'.$accountancy_code.
'">';
485 print
'<tr><td>'.$langs->trans(
"SubledgerAccount").
'</td>';
487 if (!empty($conf->global->ACCOUNTANCY_COMBO_FOR_AUX)) {
488 print $formaccounting->select_auxaccount($subledger_account,
'subledger_account', 1,
'');
490 print
'<input type="text" class="maxwidth200 maxwidthonsmartphone" name="subledger_account" value="'.$subledger_account.
'">';
494 print
'<tr><td>'.$langs->trans(
"SubledgerAccount").
'</td>';
495 print
'<td><input class="minwidth100 maxwidthonsmartphone" name="subledger_account" value="'.$subledger_account.
'">';
501 $labelsens =
$form->textwithpicto(
'Sens', $langs->trans(
"AccountingDirectionHelp"));
502 print
$form->editfieldkey($labelsens,
'sens',
'', $object, 0,
'string',
'', 1).
'</td><td>';
503 $sensarray = array(
'0' => $langs->trans(
"Debit"),
'1' => $langs->trans(
"Credit"));
504 print
$form->selectarray(
'sens', $sensarray, $sens, 1, 0, 0,
'', 0, 0, 0,
'',
'minwidth100', 1);
512 $langs->load(
"projects");
514 print
'<tr><td>'.$langs->trans(
"Project").
'</td><td>';
515 print
img_picto(
'',
'bank_account',
'class="pictofixedwidth"');
516 print $formproject->select_projects(-1, $projectid,
'fk_project', 0, 0, 1, 1, 0, 0, 0,
'', 1);
522 $reshook = $hookmanager->executeHooks(
'formObjectOptions',
$parameters, $object, $action);
523 print $hookmanager->resPrint;
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);
536 print
$form->buttonsSaveCancel();
549 $alreadyaccounted = $object->getVentilExportCompta();
554 if ($action ===
'clone') {
555 $set_value_help =
$form->textwithpicto(
'', $langs->trans($langs->trans(
"AccountingDirectionHelp")));
556 $sensarray = array(
'0' => $langs->trans(
"Debit"),
'1' => $langs->trans(
"Credit"));
558 $formquestion = array(
559 array(
'type' =>
'text',
'name' =>
'clone_label',
'label' => $langs->trans(
"Label"),
'value' => $langs->trans(
"CopyOf").
' '.$object->label),
560 array(
'type' =>
'date',
'tdclass'=>
'fieldrequired',
'name' =>
'clone_date_payment',
'label' => $langs->trans(
"DatePayment"),
'value' => -1),
561 array(
'type' =>
'date',
'name' =>
'clone_date_value',
'label' => $langs->trans(
"DateValue"),
'value' => -1),
562 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)),
563 array(
'type' =>
'text',
'name' =>
'clone_amount',
'label' => $langs->trans(
"Amount"),
'value' =>
price($object->amount)),
564 array(
'type' =>
'select',
'name' =>
'clone_sens',
'label' => $langs->trans(
"Sens").
' '.$set_value_help,
'values' => $sensarray,
'default' => $object->sens),
567 print
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneVariousPayment', $object->ref),
'confirm_clone', $formquestion,
'yes', 1, 350);
571 if ($action ==
'delete') {
572 $text = $langs->trans(
'ConfirmDeleteVariousPayment');
573 print
$form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $langs->trans(
'DeleteVariousPayment'), $text,
'confirm_delete',
'',
'', 2);
576 print
dol_get_fiche_head($head,
'card', $langs->trans(
"VariousPayment"), -1, $object->picto);
578 $morehtmlref =
'<div class="refidno">';
581 $langs->load(
"projects");
583 if ($permissiontoadd) {
584 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
585 if ($action !=
'classify') {
586 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
588 $morehtmlref .=
$form->form_project($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->socid, $object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
590 if (!empty($object->fk_project)) {
592 $proj->fetch($object->fk_project);
593 $morehtmlref .= $proj->getNomUrl(1);
595 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
601 $morehtmlref .=
'</div>';
602 $linkback =
'<a href="'.DOL_URL_ROOT.
'/compta/bank/various_payment/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
606 dol_banner_tab($object,
'id', $linkback, 1,
'rowid',
'ref', $morehtmlref,
'', 0,
'', $morehtmlright);
608 print
'<div class="fichecenter">';
609 print
'<div class="underbanner clearboth"></div>';
611 print
'<table class="border centpercent tableforfield">';
614 print
'<tr><td class="titlefield">'.$langs->trans(
"Label").
'</td><td>'.$object->label.
'</td></tr>';
618 print
'<td>'.$langs->trans(
"DatePayment").
'</td><td>';
623 print
'<tr><td>'.$langs->trans(
"DateValue").
'</td><td>';
628 if ($object->sens ==
'1') {
629 $sens = $langs->trans(
"Credit");
631 $sens = $langs->trans(
"Debit");
633 print
'<tr><td>'.$langs->trans(
"Sens").
'</td><td>'.$sens.
'</td></tr>';
635 print
'<tr><td>'.$langs->trans(
"Amount").
'</td><td><span class="amount">'.
price($object->amount, 0, $langs, 1, -1, -1, $conf->currency).
'</span></td></tr>';
640 $editvalue = $formaccounting->select_account($object->accountancy_code,
'accountancy_code', 1,
null, 1, 1);
644 print
'<tr><td class="nowrap">';
645 print
$form->editfieldkey(
'AccountAccounting',
'accountancy_code', $object->accountancy_code, $object, (!$alreadyaccounted && $permissiontoadd),
'string',
'', 0);
647 print
$form->editfieldval(
'AccountAccounting',
'accountancy_code', $object->accountancy_code, $object, (!$alreadyaccounted && $permissiontoadd),
'asis', $editvalue, 0,
null,
'', 1,
'lengthAccountg');
651 print
'<tr><td class="nowrap">';
652 print
$form->editfieldkey(
'SubledgerAccount',
'subledger_account', $object->subledger_account, $object, (!$alreadyaccounted && $permissiontoadd),
'string',
'', 0);
654 print
$form->editfieldval(
'SubledgerAccount',
'subledger_account', $object->subledger_account, $object, (!$alreadyaccounted && $permissiontoadd),
'string',
'', 0,
null,
'', 1,
'lengthAccounta');
657 $bankaccountnotfound = 0;
661 print
'<td>'.$langs->trans(
'BankTransactionLine').
'</td>';
662 print
'<td colspan="3">';
663 if ($object->fk_bank > 0) {
665 $result = $bankline->fetch($object->fk_bank);
668 $bankaccountnotfound = 1;
670 print $bankline->getNomUrl(1, 0,
'showall');
673 $bankaccountnotfound = 1;
675 print
'<span class="opacitymedium">'.$langs->trans(
"NoRecordfound").
'</span>';
683 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
689 print
'<div class="clearboth"></div>';
697 print
'<div class="tabsAction">'.
"\n";
703 if ($permissiontoadd) {
704 print
'<div class="inline-block divButAction"><a class="butAction" href="'.dol_buildpath(
"/compta/bank/various_payment/card.php", 1).
'?id='.$object->id.
'&action=clone">'.$langs->trans(
"ToClone").
"</a></div>";
708 if (empty($object->rappro) || $bankaccountnotfound) {
709 if ($permissiontoadd) {
710 if ($alreadyaccounted) {
711 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"Accounted").
'">'.$langs->trans(
"Delete").
'</a></div>';
713 print
'<div class="inline-block divButAction"><a class="butActionDelete" href="card.php?id='.$object->id.
'&action=delete&token='.
newToken().
'">'.$langs->trans(
"Delete").
'</a></div>';
716 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.(dol_escape_htmltag($langs->trans(
"NotAllowed"))).
'">'.$langs->trans(
"Delete").
'</a></div>';
719 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"LinkedToAConciliatedTransaction").
'">'.$langs->trans(
"Delete").
'</a></div>';