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';
37 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
38 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
42 $langs->loadLangs(array(
"compta",
"banks",
"bills",
"users",
"accountancy",
"categories"));
46 $action =
GETPOST(
'action',
'alpha');
48 $cancel =
GETPOST(
'cancel',
'aZ09');
49 $backtopage =
GETPOST(
'backtopage',
'alpha');
51 $accountid =
GETPOST(
"accountid") > 0 ?
GETPOST(
"accountid",
"int") : 0;
52 $label =
GETPOST(
"label",
"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") :
'';
61 $subledger_account =
GETPOST(
"subledger_account",
"alpha");
65 $socid =
GETPOST(
"socid",
"int");
67 $socid = $user->socid;
74 $hookmanager->initHooks(array(
'variouscard',
'globalcard'));
76 $permissiontoadd = $user->hasRight(
'banque',
'modifier');
84 $reshook = $hookmanager->executeHooks(
'doActions',
$parameters, $object, $action);
89 if (empty($reshook)) {
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);
96 if ($id > 0 || !empty($ref)) {
97 $ret = $object->fetch($id, $ref);
103 if ($action ==
'classin' && $permissiontoadd) {
105 $object->setProject(
GETPOST(
'projectid',
'int'));
108 if ($action ==
'add') {
118 $object->accountid =
GETPOST(
"accountid",
'int') > 0 ?
GETPOST(
"accountid",
"int") : 0;
119 $object->datev = $datev;
120 $object->datep = $datep;
122 $object->label =
GETPOST(
"label",
'restricthtml');
123 $object->note =
GETPOST(
"note",
'restricthtml');
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');
131 $object->accountancy_code =
GETPOST(
"accountancy_code") > 0 ?
GETPOST(
"accountancy_code",
"alpha") :
"";
132 $object->subledger_account = $subledger_account;
135 $object->fk_project =
GETPOSTINT(
'fk_project');
137 if (empty($datep) || empty($datev)) {
138 $langs->load(
'errors');
139 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Date")),
null,
'errors');
142 if (empty($object->amount)) {
143 $langs->load(
'errors');
144 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Amount")),
null,
'errors');
147 if (
isModEnabled(
"banque") && !$object->accountid > 0) {
148 $langs->load(
'errors');
149 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"BankAccount")),
null,
'errors');
152 if (empty($object->type_payment) || $object->type_payment < 0) {
153 $langs->load(
'errors');
154 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"PaymentMode")),
null,
'errors');
157 if (
isModEnabled(
'accounting') && !$object->accountancy_code) {
158 $langs->load(
'errors');
159 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"AccountAccounting")),
null,
'errors');
162 if ($object->sens < 0) {
163 $langs->load(
'errors');
164 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Sens")),
null,
'errors');
171 $ret = $object->create($user);
174 $urltogo = ($backtopage ? $backtopage : DOL_URL_ROOT.
'/compta/bank/various_payment/list.php');
175 header(
"Location: ".$urltogo);
187 if ($action ==
'confirm_delete' && $confirm ==
'yes') {
188 $result = $object->fetch($id);
190 if ($object->rappro == 0) {
193 $ret = $object->delete($user);
195 if ($object->fk_bank) {
197 $result = $accountline->fetch($object->fk_bank);
199 $result = $accountline->delete($user);
205 header(
"Location: ".DOL_URL_ROOT.
'/compta/bank/various_payment/list.php');
208 $object->error = $accountline->error;
217 setEventMessages(
'Error try do delete a line linked to a conciliated bank transaction',
null,
'errors');
221 if ($action ==
'setaccountancy_code') {
224 $result = $object->fetch($id);
226 $object->accountancy_code =
GETPOST(
'accountancy_code',
'alpha');
228 $res = $object->update($user);
237 if ($action ==
'setsubledger_account') {
240 $result = $object->fetch($id);
242 $object->subledger_account = $subledger_account;
244 $res = $object->update($user);
255 if ($action ==
'confirm_clone' && $confirm !=
'yes') {
259 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $permissiontoadd) {
266 if ($object->id > 0) {
267 $object->id = $object->ref =
null;
269 if (
GETPOST(
'clone_label',
'alphanohtml')) {
270 $object->label =
GETPOST(
'clone_label',
'alphanohtml');
272 $object->label = $langs->trans(
"CopyOf").
' '.$object->label;
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;
280 if (!empty($newdatevalue)) {
281 $object->datev = $newdatevalue;
283 $object->datev = $newdatepayment;
287 $object->sens =
GETPOST(
"clone_sens",
'int');
289 $object->sens = $object->sens;
292 if (
GETPOST(
"clone_amount",
"alpha")) {
295 $object->amount =
price2num($object->amount);
298 if ($object->check()) {
299 $id = $object->create($user);
304 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".$id);
338 $result = $object->fetch($id);
345 $title = $object->ref.
" - ".$langs->trans(
'Card');
346 if ($action ==
'create') {
347 $title = $langs->trans(
"NewVariousPayment");
349 $help_url =
'EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores|DE:Modul_Lieferantenrechnungen';
355 require_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/bankcateg.class.php';
358 foreach ($bankcateg->fetchAll() as $bankcategory) {
359 $options[$bankcategory->id] = $bankcategory->label;
363 if ($action ==
'create') {
365 if (!empty($conf->use_javascript_ajax)) {
366 print
"\n".
'<script type="text/javascript">';
367 print
'$(document).ready(function () {
369 $("#selectpaymenttype").change(function() {
372 function setPaymentType()
374 console.log("setPaymentType");
375 var code = $("#selectpaymenttype option:selected").val();
376 if (code == \'CHQ\' || code == \'VIR\')
380 $(\'.fieldrequireddyn\').addClass(\'fieldrequired\');
382 if ($(\'#fieldchqemetteur\').val() == \'\')
384 var emetteur = jQuery(\'#thirdpartylabel\').val();
385 $(\'#fieldchqemetteur\').val(emetteur);
390 $(\'.fieldrequireddyn\').removeClass(\'fieldrequired\');
391 $(\'#fieldchqemetteur\').val(\'\');
398 print
' </script>'.
"\n";
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">';
406 print
load_fiche_titre($langs->trans(
"NewVariousPayment"),
'',
'object_payment');
410 print
'<table class="border centpercent">';
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);
420 print
$form->editfieldkey(
'DateValue',
'datev',
'', $object, 0).
'</td><td>';
421 print
$form->selectDate((empty($datev) ?-1 : $datev),
"datev",
'',
'',
'',
'add', 1, 1);
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")).
'">';
432 print
$form->editfieldkey(
'Amount',
'amount',
'', $object, 0,
'string',
'', 1).
'</td><td>';
433 print
'<input name="amount" id="amount" class="minwidth50 maxwidth100" value="'.$amount.
'">';
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);
446 print
'<tr><td><span class="fieldrequired">'.$langs->trans(
'PaymentMode').
'</span></td><td>';
447 $form->select_types_paiements($paymenttype,
'paymenttype',
'', 2);
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";
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>';
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>';
474 print
'<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans(
"AccountAccounting").
'</td>';
476 print $formaccounting->select_account($accountancy_code,
'accountancy_code', 1,
null, 1, 1);
479 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"AccountAccounting").
'</td>';
480 print
'<td><input class="minwidth100 maxwidthonsmartphone" name="accountancy_code" value="'.$accountancy_code.
'">';
486 print
'<tr><td>'.$langs->trans(
"SubledgerAccount").
'</td>';
488 if (!empty($conf->global->ACCOUNTANCY_COMBO_FOR_AUX)) {
489 print $formaccounting->select_auxaccount($subledger_account,
'subledger_account', 1,
'');
491 print
'<input type="text" class="maxwidth200 maxwidthonsmartphone" name="subledger_account" value="'.$subledger_account.
'">';
495 print
'<tr><td>'.$langs->trans(
"SubledgerAccount").
'</td>';
496 print
'<td><input class="minwidth100 maxwidthonsmartphone" name="subledger_account" value="'.$subledger_account.
'">';
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);
513 $langs->load(
"projects");
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);
523 $reshook = $hookmanager->executeHooks(
'formObjectOptions',
$parameters, $object, $action);
524 print $hookmanager->resPrint;
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);
537 print
$form->buttonsSaveCancel();
550 $alreadyaccounted = $object->getVentilExportCompta();
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"));
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),
568 print
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneVariousPayment', $object->ref),
'confirm_clone', $formquestion,
'yes', 1, 350);
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);
577 print
dol_get_fiche_head($head,
'card', $langs->trans(
"VariousPayment"), -1, $object->picto);
579 $morehtmlref =
'<div class="refidno">';
582 $langs->load(
"projects");
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> ';
589 $morehtmlref .=
$form->form_project($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->socid, $object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
591 if (!empty($object->fk_project)) {
593 $proj->fetch($object->fk_project);
594 $morehtmlref .= $proj->getNomUrl(1);
596 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
602 $morehtmlref .=
'</div>';
603 $linkback =
'<a href="'.DOL_URL_ROOT.
'/compta/bank/various_payment/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
607 dol_banner_tab($object,
'id', $linkback, 1,
'rowid',
'ref', $morehtmlref,
'', 0,
'', $morehtmlright);
609 print
'<div class="fichecenter">';
610 print
'<div class="underbanner clearboth"></div>';
612 print
'<table class="border centpercent tableforfield">';
615 print
'<tr><td class="titlefield">'.$langs->trans(
"Label").
'</td><td>'.$object->label.
'</td></tr>';
619 print
'<td>'.$langs->trans(
"DatePayment").
'</td><td>';
624 print
'<tr><td>'.$langs->trans(
"DateValue").
'</td><td>';
629 if ($object->sens ==
'1') {
630 $sens = $langs->trans(
"Credit");
632 $sens = $langs->trans(
"Debit");
634 print
'<tr><td>'.$langs->trans(
"Sens").
'</td><td>'.$sens.
'</td></tr>';
636 print
'<tr><td>'.$langs->trans(
"Amount").
'</td><td><span class="amount">'.
price($object->amount, 0, $langs, 1, -1, -1, $conf->currency).
'</span></td></tr>';
641 $editvalue = $formaccounting->select_account($object->accountancy_code,
'accountancy_code', 1,
null, 1, 1);
645 print
'<tr><td class="nowrap">';
646 print
$form->editfieldkey(
'AccountAccounting',
'accountancy_code', $object->accountancy_code, $object, (!$alreadyaccounted && $permissiontoadd),
'string',
'', 0);
648 print
$form->editfieldval(
'AccountAccounting',
'accountancy_code', $object->accountancy_code, $object, (!$alreadyaccounted && $permissiontoadd),
'asis', $editvalue, 0,
null,
'', 1,
'lengthAccountg');
652 print
'<tr><td class="nowrap">';
653 print
$form->editfieldkey(
'SubledgerAccount',
'subledger_account', $object->subledger_account, $object, (!$alreadyaccounted && $permissiontoadd),
'string',
'', 0);
655 print
$form->editfieldval(
'SubledgerAccount',
'subledger_account', $object->subledger_account, $object, (!$alreadyaccounted && $permissiontoadd),
'string',
'', 0,
null,
'', 1,
'lengthAccounta');
658 $bankaccountnotfound = 0;
662 print
'<td>'.$langs->trans(
'BankTransactionLine').
'</td>';
663 print
'<td colspan="3">';
664 if ($object->fk_bank > 0) {
666 $result = $bankline->fetch($object->fk_bank);
669 $bankaccountnotfound = 1;
671 print $bankline->getNomUrl(1, 0,
'showall');
674 $bankaccountnotfound = 1;
676 print
'<span class="opacitymedium">'.$langs->trans(
"NoRecordfound").
'</span>';
684 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
690 print
'<div class="clearboth"></div>';
698 print
'<div class="tabsAction">'.
"\n";
704 if ($permissiontoadd) {
705 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>";
709 if (empty($object->rappro) || $bankaccountnotfound) {
710 if ($permissiontoadd) {
711 if ($alreadyaccounted) {
712 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"Accounted").
'">'.$langs->trans(
"Delete").
'</a></div>';
714 print
'<div class="inline-block divButAction"><a class="butActionDelete" href="card.php?id='.$object->id.
'&action=delete&token='.
newToken().
'">'.$langs->trans(
"Delete").
'</a></div>';
717 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.(dol_escape_htmltag($langs->trans(
"NotAllowed"))).
'">'.$langs->trans(
"Delete").
'</a></div>';
720 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"LinkedToAConciliatedTransaction").
'">'.$langs->trans(
"Delete").
'</a></div>';