dolibarr  19.0.0-dev
card.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3  * Copyright (C) 2004-2016 Laurent Destailleur <eldy@users.sourceforge.net>
4  * Copyright (C) 2005-2013 Regis Houssin <regis.houssin@inodbox.com>
5  * Copyright (C) 2015-2017 Alexandre Spangaro <aspangaro@open-dsi.fr>
6  * Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
7  * Copyright (C) 2021 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program. If not, see <https://www.gnu.org/licenses/>.
21  */
22 
29 // Load Dolibarr environment
30 require '../../main.inc.php';
31 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
32 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
33 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
34 require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php';
35 require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/paymentvat.class.php';
36 require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
37 require_once DOL_DOCUMENT_ROOT.'/core/lib/vat.lib.php';
38 
39 if (isModEnabled('accounting')) {
40  include_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingjournal.class.php';
41 }
42 
43 // Load translation files required by the page
44 $langs->loadLangs(array('compta', 'banks', 'bills'));
45 
46 $id = GETPOST('id', 'int');
47 $ref = GETPOST('ref', 'alpha');
48 $action = GETPOST('action', 'aZ09');
49 $confirm = GETPOST('confirm', 'alpha');
50 $cancel = GETPOST('cancel', 'aZ09');
51 $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'myobjectcard'; // To manage different context of search
52 $backtopage = GETPOST('backtopage', 'alpha');
53 $backtopageforcancel = GETPOST('backtopageforcancel', 'alpha');
54 
55 $refund = GETPOST("refund", "int");
56 if (GETPOSTISSET('auto_create_paiement') || $action === 'add') {
57  $auto_create_payment = GETPOST("auto_create_paiement", "int");
58 } else {
59  $auto_create_payment = empty($conf->global->CREATE_NEW_VAT_WITHOUT_AUTO_PAYMENT);
60 }
61 
62 if (empty($refund)) {
63  $refund = 0;
64 }
65 
66 $datev = dol_mktime(12, 0, 0, GETPOST("datevmonth", 'int'), GETPOST("datevday", 'int'), GETPOST("datevyear", 'int'));
67 $datep = dol_mktime(12, 0, 0, GETPOST("datepmonth", 'int'), GETPOST("datepday", 'int'), GETPOST("datepyear", 'int'));
68 
69 // Initialize technical objects
70 $object = new Tva($db);
71 $extrafields = new ExtraFields($db);
72 $diroutputmassaction = $conf->tax->dir_output.'/temp/massgeneration/'.$user->id;
73 $hookmanager->initHooks(array('taxvatcard', 'globalcard'));
74 
75 // Fetch optionals attributes and labels
76 $extrafields->fetch_name_optionals_label($object->table_element);
77 
78 if (empty($action) && empty($id) && empty($ref)) {
79  $action = 'view';
80 }
81 
82 // Load object
83 include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once.
84 
85 $permissiontoread = $user->rights->tax->charges->lire;
86 $permissiontoadd = $user->rights->tax->charges->creer; // Used by the include of actions_addupdatedelete.inc.php and actions_lineupdown.inc.php
87 $permissiontodelete = $user->rights->tax->charges->supprimer || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_DRAFT);
88 $permissionnote = $user->rights->tax->charges->creer; // Used by the include of actions_setnotes.inc.php
89 $permissiondellink = $user->rights->tax->charges->creer; // Used by the include of actions_dellink.inc.php
90 $upload_dir = $conf->tax->multidir_output[isset($object->entity) ? $object->entity : 1].'/vat';
91 
92 // Security check
93 $socid = GETPOST('socid', 'int');
94 if (!empty($user->socid)) {
95  $socid = $user->socid;
96 }
97 $result = restrictedArea($user, 'tax', $object->id, 'tva', 'charges');
98 
99 
100 /*
101  * Actions
102  */
103 
104 $parameters = array('socid' => $socid);
105 $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
106 if ($reshook < 0) {
107  setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
108 }
109 
110 if (empty($reshook)) {
111  if ($cancel && !$id) {
112  header("Location: list.php");
113  exit;
114  }
115 
116  if ($action == 'setlib' && $user->rights->tax->charges->creer) {
117  $object->fetch($id);
118  $result = $object->setValueFrom('label', GETPOST('lib', 'alpha'), '', '', 'text', '', $user, 'TAX_MODIFY');
119  if ($result < 0) {
120  setEventMessages($object->error, $object->errors, 'errors');
121  }
122  }
123 
124  if ($action == 'setdatev' && $user->rights->tax->charges->creer) {
125  $object->fetch($id);
126  $object->datev = $datev;
127  $result = $object->update($user);
128  if ($result < 0) {
129  dol_print_error($db, $object->error);
130  }
131 
132  $action = '';
133  }
134 
135  // payment mode
136  if ($action == 'setmode' && $user->rights->tax->charges->creer) {
137  $object->fetch($id);
138  $result = $object->setPaymentMethods(GETPOST('mode_reglement_id', 'int'));
139  if ($result < 0) {
140  setEventMessages($object->error, $object->errors, 'errors');
141  }
142  }
143 
144  // Bank account
145  if ($action == 'setbankaccount' && $user->rights->tax->charges->creer) {
146  $object->fetch($id);
147  $result = $object->setBankAccount(GETPOST('fk_account', 'int'));
148  if ($result < 0) {
149  setEventMessages($object->error, $object->errors, 'errors');
150  }
151  }
152 
153  // Classify paid
154  if ($action == 'confirm_paid' && $user->rights->tax->charges->creer && $confirm == 'yes') {
155  $object->fetch($id);
156  $result = $object->setPaid($user);
157  }
158 
159  if ($action == 'reopen' && $user->rights->tax->charges->creer) {
160  $result = $object->fetch($id);
161  if ($object->paye) {
162  $result = $object->setUnpaid($user);
163  if ($result > 0) {
164  header('Location: '.$_SERVER["PHP_SELF"].'?id='.$id);
165  exit();
166  } else {
167  setEventMessages($object->error, $object->errors, 'errors');
168  }
169  }
170  }
171 
172  if ($action == 'add' && !$cancel) {
173  $error = 0;
174 
175  $object->fk_account = GETPOST("accountid", 'int');
176  $object->type_payment = GETPOST("type_payment", 'alphanohtml');
177  $object->num_payment = GETPOST("num_payment", 'alphanohtml');
178 
179  $object->datev = $datev;
180  $object->datep = $datep;
181 
182  $amount = price2num(GETPOST("amount", 'alpha'));
183  if ($refund == 1) {
184  $amount = -$amount;
185  }
186  $object->amount = $amount;
187  $object->label = GETPOST("label", 'alpha');
188  $object->note = GETPOST("note", 'restricthtml');
189  $object->note_private = GETPOST("note", 'restricthtml');
190 
191  if (empty($object->datep)) {
192  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("DatePayment")), null, 'errors');
193  $error++;
194  }
195  if (empty($object->datev)) {
196  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("PeriodEndDate")), null, 'errors');
197  $error++;
198  }
199  if (!empty($auto_create_payment) && (empty($object->type_payment) || $object->type_payment < 0)) {
200  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("PaymentMode")), null, 'errors');
201  $error++;
202  }
203  if (empty($object->amount)) {
204  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Amount")), null, 'errors');
205  $error++;
206  }
207  if (!empty($auto_create_payment) && ($object->fk_account <= 0)) {
208  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("AccountToCredit")), null, 'errors');
209  $error++;
210  }
211 
212  if (!$error) {
213  $ret = $object->create($user);
214  if ($ret < 0) {
215  $error++;
216  }
217 
218  // Auto create payment
219  if (!empty($auto_create_payment) && !$error) {
220  $db->begin();
221 
222  // Create a line of payments
223  $paiement = new PaymentVAT($db);
224  $paiement->chid = $object->id;
225  $paiement->datepaye = $datep;
226  $paiement->amounts = array($object->id=>$amount); // Tableau de montant
227  $paiement->paiementtype = GETPOST("type_payment", 'alphanohtml');
228  $paiement->num_payment = GETPOST("num_payment", 'alphanohtml');
229  $paiement->note = GETPOST("note", 'restricthtml');
230 
231  if (!$error) {
232  $paymentid = $paiement->create($user, (int) GETPOST('closepaidtva'));
233  if ($paymentid < 0) {
234  $error++;
235  setEventMessages($paiement->error, null, 'errors');
236  $action = 'create';
237  }
238  }
239 
240  if (!$error) {
241  $result = $paiement->addPaymentToBank($user, 'payment_vat', '(VATPayment)', GETPOST('accountid', 'int'), '', '');
242  if (!($result > 0)) {
243  $error++;
244  setEventMessages($paiement->error, null, 'errors');
245  }
246  }
247 
248  if (!$error) {
249  $db->commit();
250  } else {
251  $db->rollback();
252  }
253  }
254  if (empty($error)) {
255  header("Location: card.php?id=" . $object->id);
256  exit;
257  }
258  }
259 
260  $action = 'create';
261  }
262 
263  if ($action == 'confirm_delete' && $confirm == 'yes') {
264  $result = $object->fetch($id);
265  $totalpaid = $object->getSommePaiement();
266 
267  if (empty($totalpaid)) {
268  $db->begin();
269 
270  $ret = $object->delete($user);
271  if ($ret > 0) {
272  if ($object->fk_bank) {
273  $accountline = new AccountLine($db);
274  $result = $accountline->fetch($object->fk_bank);
275  if ($result > 0) {
276  $result = $accountline->delete($user); // $result may be 0 if not found (when bank entry was deleted manually and fk_bank point to nothing)
277  }
278  }
279 
280  if ($result >= 0) {
281  $db->commit();
282  header("Location: ".DOL_URL_ROOT.'/compta/tva/list.php');
283  exit;
284  } else {
285  $object->error = $accountline->error;
286  $db->rollback();
287  setEventMessages($object->error, $object->errors, 'errors');
288  }
289  } else {
290  $db->rollback();
291  setEventMessages($object->error, $object->errors, 'errors');
292  }
293  } else {
294  setEventMessages($langs->trans('DisabledBecausePayments'), null, 'errors');
295  }
296  }
297 
298  if ($action == 'update' && !GETPOST("cancel") && $user->rights->tax->charges->creer) {
299  $amount = price2num(GETPOST('amount', 'alpha'), 'MT');
300 
301  if (empty($amount)) {
302  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Amount")), null, 'errors');
303  $action = 'edit';
304  } elseif (!is_numeric($amount)) {
305  setEventMessages($langs->trans("ErrorFieldMustBeANumeric", $langs->transnoentities("Amount")), null, 'errors');
306  $action = 'create';
307  } else {
308  $result = $object->fetch($id);
309 
310  $object->amount = $amount;
311 
312  $result = $object->update($user);
313  if ($result <= 0) {
314  setEventMessages($object->error, $object->errors, 'errors');
315  }
316  }
317  }
318 
319  // Action clone object
320  if ($action == 'confirm_clone' && $confirm != 'yes') {
321  $action = '';
322  }
323 
324  if ($action == 'confirm_clone' && $confirm == 'yes' && ($user->rights->tax->charges->creer)) {
325  $db->begin();
326 
327  $originalId = $id;
328 
329  $object->fetch($id);
330 
331  if ($object->id > 0) {
332  $object->id = $object->ref = null;
333  $object->paye = 0;
334 
335  if (GETPOST('amount', 'alphanohtml')) {
336  $object->amount = price2num(GETPOST('amount', 'alphanohtml'), 'MT', 2);
337  }
338 
339  if (GETPOST('clone_label', 'alphanohtml')) {
340  $object->label = GETPOST('clone_label', 'alphanohtml');
341  } else {
342  $object->label = $langs->trans("CopyOf").' '.$object->label;
343  }
344 
345  $newdateperiod = dol_mktime(0, 0, 0, GETPOST('clone_periodmonth', 'int'), GETPOST('clone_periodday', 'int'), GETPOST('clone_periodyear', 'int'));
346  if ($newdateperiod) {
347  $object->datev = $newdateperiod;
348  }
349 
350  //if ($object->check()) {
351  $id = $object->create($user);
352  if ($id > 0) {
353  $db->commit();
354  $db->close();
355 
356  header("Location: ".$_SERVER["PHP_SELF"]."?id=".$id);
357  exit;
358  } else {
359  $id = $originalId;
360  $db->rollback();
361 
362  setEventMessages($object->error, $object->errors, 'errors');
363  }
364  //}
365  } else {
366  $db->rollback();
367  dol_print_error($db, $object->error);
368  }
369  }
370 
371  // Actions to build doc
372  include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
373 }
374 
375 
376 /*
377  * View
378  */
379 
380 $form = new Form($db);
381 $formfile = new FormFile($db);
382 $formproject = new FormProjets($db);
383 
384 $title = $langs->trans("VAT")." - ".$langs->trans("Card");
385 $help_url = '';
386 llxHeader('', $title, $help_url);
387 
388 // Form to create a VAT
389 if ($action == 'create') {
390  print load_fiche_titre($langs->trans("VAT").' - '.$langs->trans("New"));
391 
392  if (!empty($conf->use_javascript_ajax)) {
393  print "\n".'<script type="text/javascript">';
394  print '
395  $(document).ready(function () {
396  let onAutoCreatePaiementChange = function () {
397  if($("#auto_create_paiement").is(":checked")) {
398  $("#label_fk_account").addClass("fieldrequired");
399  $("#label_type_payment").addClass("fieldrequired");
400  $(".hide_if_no_auto_create_payment").show();
401  } else {
402  $("#label_fk_account").removeClass("fieldrequired");
403  $("#label_type_payment").removeClass("fieldrequired");
404  $(".hide_if_no_auto_create_payment").hide();
405  }
406  }
407  $("#radiopayment").click(function() {
408  $("#label").val($(this).data("label"));
409  });
410  $("#radiorefund").click(function() {
411  $("#label").val($(this).data("label"));
412 
413  });
414  $("#auto_create_paiement").click(function () {
415  onAutoCreatePaiementChange();
416  });
417  onAutoCreatePaiementChange();
418  });
419  ';
420 
421  print '</script>'."\n";
422  }
423 
424  print '<form name="add" action="'.$_SERVER["PHP_SELF"].'" name="formvat" method="post">';
425  print '<input type="hidden" name="token" value="'.newToken().'">';
426  print '<input type="hidden" name="action" value="add">';
427 
428  print dol_get_fiche_head();
429 
430  print '<table class="border centpercent">';
431 
432  print '<tr><td class="titlefieldcreate fieldrequired">';
433  //print $langs->trans("Type");
434  print '</td><td>';
435 
436  print '<div id="selectmethod">';
437  print '<label for="radiopayment">';
438  print '<input type="radio" id="radiopayment" data-label="'.$langs->trans('VATPayment').'" class="flat" name="refund" value="0"'.($refund ? '' : ' checked="checked"').'>';
439  print '&nbsp;';
440  print $langs->trans("Payment");
441  print '</label>';
442  print '&nbsp;&nbsp;&nbsp;';
443  print '<label for="radiorefund">';
444  print '<input type="radio" id="radiorefund" data-label="'.$langs->trans('VATRefund').'" class="flat" name="refund" value="1"'.($refund ? ' checked="checked"' : '').'>';
445  print '&nbsp;';
446  print $langs->trans("Refund");
447  print '</label>';
448  print '</div>';
449 
450  print '</td>';
451  print "</tr>\n";
452 
453  // Label
454  if ($refund == 1) {
455  $label = $langs->trans("VATRefund");
456  } else {
457  $label = $langs->trans("VATPayment");
458  }
459  print '<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans("Label").'</td><td><input class="minwidth300" name="label" id="label" value="'.(GETPOSTISSET("label") ? GETPOST("label", '', 2) : $label).'" autofocus></td></tr>';
460 
461  print '<tr><td class="titlefieldcreate fieldrequired">'.$form->textwithpicto($langs->trans("PeriodEndDate"), $langs->trans("LastDayTaxIsRelatedTo")).'</td><td>';
462  print $form->selectDate((GETPOST("datevmonth", 'int') ? $datev : -1), "datev", '', '', '', 'add', 1, 1);
463  print '</td></tr>';
464 
465  // Amount
466  print '<tr><td class="fieldrequired">'.$langs->trans("Amount").'</td><td><input name="amount" class="right width75" value="'.GETPOST("amount", "alpha").'"></td></tr>';
467 
468  print '<tr><td colspan="2"><hr></td></tr>';
469 
470  // Auto create payment
471  print '<tr><td><label for="auto_create_paiement">'.$langs->trans('AutomaticCreationPayment').'</label></td>';
472  print '<td><input id="auto_create_paiement" name="auto_create_paiement" type="checkbox" ' . (empty($auto_create_payment) ? '' : 'checked="checked"') . ' value="1"></td></tr>'."\n";
473 
474  print '<tr class="hide_if_no_auto_create_payment">';
475  print '<td class="fieldrequired">'.$langs->trans("DatePayment").'</td><td>';
476  print $form->selectDate($datep, "datep", '', '', '', 'add', 1, 1);
477  print '</td></tr>';
478 
479  // Type payment
480  print '<tr><td class="fieldrequired" id="label_type_payment">'.$langs->trans("PaymentMode").'</td><td>';
481  print $form->select_types_paiements(GETPOST("type_payment", 'int'), "type_payment", '', 0, 1, 0, 0, 1, 'maxwidth500 widthcentpercentminusx', 1);
482  print "</td>\n";
483  print "</tr>";
484 
485  if (isModEnabled("banque")) {
486  // Bank account
487  print '<tr><td class="fieldrequired" id="label_fk_account">'.$langs->trans("BankAccount").'</td><td>';
488  print img_picto('', 'bank_account', 'pictofixedwidth');
489  $form->select_comptes(GETPOST("accountid", 'int'), "accountid", 0, "courant=1", 1, '', 0, 'maxwidth500 widthcentpercentminusx'); // List of bank account available
490  print '</td></tr>';
491  }
492 
493  // Number
494  print '<tr class="hide_if_no_auto_create_payment"><td>'.$langs->trans('Numero');
495  print ' <em>('.$langs->trans("ChequeOrTransferNumber").')</em>';
496  print '<td><input name="num_payment" type="text" value="'.GETPOST("num_payment").'"></td></tr>'."\n";
497 
498  // Comments
499  print '<tr class="hide_if_no_auto_create_payment">';
500  print '<td class="tdtop">'.$langs->trans("Comments").'</td>';
501  print '<td class="tdtop"><textarea name="note" wrap="soft" rows="'.ROWS_3.'" class="quatrevingtpercent">'.GETPOST('note', 'restricthtml').'</textarea></td>';
502  print '</tr>';
503 
504  // Other attributes
505  $parameters = array();
506  $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
507  print $hookmanager->resPrint;
508 
509  print '</table>';
510 
511  print dol_get_fiche_end();
512 
513  print '<div class="center">';
514  print '<div class="hide_if_no_auto_create_payment paddingbottom">';
515  print '<input type="checkbox" checked value="1" name="closepaidtva"> <span class="">'.$langs->trans("ClosePaidVATAutomatically").'</span>';
516  print '<br>';
517  print '</div>';
518 
519  print '<input type="submit" class="button button-save" value="'.$langs->trans("Save").'">';
520  print '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
521  print '<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans("Cancel").'">';
522  print '</div>';
523 
524  print '</form>';
525 }
526 
527 // View mode
528 if ($id > 0) {
529  $formconfirm = '';
530 
531  $head = vat_prepare_head($object);
532 
533  $totalpaid = $object->getSommePaiement();
534 
535  // Clone confirmation
536  if ($action === 'clone') {
537  $formquestion = array(
538  array('type' => 'text', 'name' => 'clone_label', 'label' => $langs->trans("Label"), 'value' => $langs->trans("CopyOf").' '.$object->label),
539  );
540 
541  //$formquestion[] = array('type' => 'date', 'name' => 'clone_date_ech', 'label' => $langs->trans("Date"), 'value' => -1);
542  $formquestion[] = array('type' => 'date', 'name' => 'clone_period', 'label' => $langs->trans("PeriodEndDate"), 'value' => -1);
543  $formquestion[] = array('type' => 'text', 'name' => 'amount', 'label' => $langs->trans("Amount"), 'value' => price($object->amount), 'morecss' => 'width100');
544 
545  $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneVAT', $object->ref), 'confirm_clone', $formquestion, 'yes', 1, 240);
546  }
547 
548  if ($action == 'paid') {
549  $text = $langs->trans('ConfirmPayVAT');
550  $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans('PayVAT'), $text, "confirm_paid", '', '', 2);
551  }
552 
553  if ($action == 'delete') {
554  $text = $langs->trans('ConfirmDeleteVAT');
555  $formconfirm = $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id, $langs->trans('DeleteVAT'), $text, 'confirm_delete', '', '', 2);
556  }
557 
558  if ($action == 'edit') {
559  print '<form name="charge" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'" method="POST">';
560  print '<input type="hidden" name="token" value="'.newToken().'">';
561  print '<input type="hidden" name="action" value="update">';
562  }
563  // Call Hook formConfirm
564  $parameters = array('formConfirm' => $formconfirm, 'lineid' => $lineid);
565  $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
566  if (empty($reshook)) {
567  $formconfirm .= $hookmanager->resPrint;
568  } elseif ($reshook > 0) {
569  $formconfirm = $hookmanager->resPrint;
570  }
571 
572  print dol_get_fiche_head($head, 'card', $langs->trans("VATPayment"), -1, 'payment', 0, '', '', 0, '', 1);
573 
574  // Print form confirm
575  print $formconfirm;
576 
577  $morehtmlref = '<div class="refidno">';
578  // Label of social contribution
579  $morehtmlref .= $form->editfieldkey("Label", 'lib', $object->label, $object, $user->rights->tax->charges->creer, 'string', '', 0, 1);
580  $morehtmlref .= $form->editfieldval("Label", 'lib', $object->label, $object, $user->rights->tax->charges->creer, 'string', '', null, null, '', 1);
581  // Project
582  $morehtmlref .= '</div>';
583 
584  $linkback = '<a href="'.DOL_URL_ROOT.'/compta/tva/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
585 
586  $object->totalpaid = $totalpaid; // To give a chance to dol_banner_tab to use already paid amount to show correct status
587 
588  dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', '');
589 
590  print '<div class="fichecenter">';
591  print '<div class="fichehalfleft">';
592  print '<div class="underbanner clearboth"></div>';
593 
594  print '<table class="border centpercent">';
595 
596  // Label
597  //print '<tr><td class="titlefield">'.$langs->trans("Label").'</td><td>'.$object->label.'</td></tr>';
598 
599  /*print "<tr>";
600  print '<td class="titlefield">'.$langs->trans("DatePayment").'</td><td>';
601  print dol_print_date($object->datep, 'day');
602  print '</td></tr>';*/
603 
604  print '<tr><td>';
605  print $form->editfieldkey($form->textwithpicto($langs->trans("PeriodEndDate"), $langs->trans("LastDayTaxIsRelatedTo")), 'datev', $object->datev, $object, $user->rights->tax->charges->creer, 'day');
606  print '</td><td>';
607  print $form->editfieldval("PeriodEndDate", 'datev', $object->datev, $object, $user->rights->tax->charges->creer, 'day');
608  //print dol_print_date($object->datev,'day');
609  print '</td></tr>';
610 
611  if ($action == 'edit') {
612  print '<tr><td class="fieldrequired">' . $langs->trans("Amount") . '</td><td><input name="amount" size="10" value="' . price($object->amount) . '"></td></tr>';
613  } else {
614  print '<tr><td>' . $langs->trans("Amount") . '</td><td>' . price($object->amount) . '</td></tr>';
615  }
616 
617  // Mode of payment
618  print '<tr><td>';
619  print '<table class="nobordernopadding" width="100%"><tr><td>';
620  print $langs->trans('PaymentMode');
621  print '</td>';
622  if ($action != 'editmode') {
623  print '<td class="right"><a class="editfielda" href="'.$_SERVER["PHP_SELF"].'?action=editmode&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->trans('SetMode'), 1).'</a></td>';
624  }
625  print '</tr></table>';
626  print '</td><td>';
627  if ($action == 'editmode') {
628  $form->form_modes_reglement($_SERVER['PHP_SELF'].'?id='.$object->id, $object->type_payment, 'mode_reglement_id');
629  } else {
630  $form->form_modes_reglement($_SERVER['PHP_SELF'].'?id='.$object->id, $object->type_payment, 'none');
631  }
632  print '</td></tr>';
633 
634  // Bank account
635  if (isModEnabled("banque")) {
636  print '<tr><td class="nowrap">';
637  print '<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
638  print $langs->trans('BankAccount');
639  print '<td>';
640  if ($action != 'editbankaccount' && $user->rights->tax->charges->creer) {
641  print '<td class="right"><a class="editfielda" href="'.$_SERVER["PHP_SELF"].'?action=editbankaccount&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->trans('SetBankAccount'), 1).'</a></td>';
642  }
643  print '</tr></table>';
644  print '</td><td>';
645  if ($action == 'editbankaccount') {
646  $form->formSelectAccount($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'fk_account', 1);
647  } else {
648  $form->formSelectAccount($_SERVER['PHP_SELF'].'?id='.$object->id, $object->fk_account, 'none');
649  }
650  print '</td>';
651  print '</tr>';
652  }
653 
654  // Other attributes
655  $parameters = array();
656  $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
657  print $hookmanager->resPrint;
658 
659  print '</table>';
660 
661  print '</div>';
662 
663  print '<div class="fichehalfright">';
664 
665  $nbcols = 3;
666  if (isModEnabled("banque")) {
667  $nbcols++;
668  }
669 
670  /*
671  * Payments
672  */
673  $sql = "SELECT p.rowid, p.num_paiement as num_payment, p.datep as dp, p.amount,";
674  $sql .= " c.code as type_code,c.libelle as paiement_type,";
675  $sql .= ' ba.rowid as baid, ba.ref as baref, ba.label, ba.number as banumber, ba.account_number, ba.currency_code as bacurrency_code, ba.fk_accountancy_journal';
676  $sql .= " FROM ".MAIN_DB_PREFIX."payment_vat as p";
677  $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'bank as b ON p.fk_bank = b.rowid';
678  $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'bank_account as ba ON b.fk_account = ba.rowid';
679  $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_paiement as c ON p.fk_typepaiement = c.id";
680  $sql .= ", ".MAIN_DB_PREFIX."tva as tva";
681  $sql .= " WHERE p.fk_tva = ".((int) $id);
682  $sql .= " AND p.fk_tva = tva.rowid";
683  $sql .= " AND tva.entity IN (".getEntity('tax').")";
684  $sql .= " ORDER BY dp DESC";
685 
686  //print $sql;
687  $resql = $db->query($sql);
688  if ($resql) {
689  $totalpaid = 0;
690 
691  $num = $db->num_rows($resql);
692  $i = 0;
693  $total = 0;
694 
695  print '<div class="div-table-responsive-no-min">'; // You can use div-table-responsive-no-min if you dont need reserved height for your table
696  print '<table class="noborder paymenttable">';
697  print '<tr class="liste_titre">';
698  print '<td>'.$langs->trans("RefPayment").'</td>';
699  print '<td>'.$langs->trans("Date").'</td>';
700  print '<td>'.$langs->trans("Type").'</td>';
701  if (isModEnabled("banque")) {
702  print '<td class="liste_titre right">'.$langs->trans('BankAccount').'</td>';
703  }
704  print '<td class="right">'.$langs->trans("Amount").'</td>';
705  print '</tr>';
706 
707  if ($num > 0) {
708  $bankaccountstatic = new Account($db);
709  while ($i < $num) {
710  $objp = $db->fetch_object($resql);
711 
712  print '<tr class="oddeven"><td>';
713  print '<a href="'.DOL_URL_ROOT.'/compta/payment_vat/card.php?id='.$objp->rowid.'">'.img_object($langs->trans("Payment"), "payment").' '.$objp->rowid.'</a>';
714  print '</td>';
715  print '<td>'.dol_print_date($db->jdate($objp->dp), 'day')."</td>\n";
716  $labeltype = $langs->trans("PaymentType".$objp->type_code) != ("PaymentType".$objp->type_code) ? $langs->trans("PaymentType".$objp->type_code) : $objp->paiement_type;
717  print "<td>".$labeltype.' '.$objp->num_payment."</td>\n";
718  if (isModEnabled("banque")) {
719  $bankaccountstatic->id = $objp->baid;
720  $bankaccountstatic->ref = $objp->baref;
721  $bankaccountstatic->label = $objp->baref;
722  $bankaccountstatic->number = $objp->banumber;
723  $bankaccountstatic->currency_code = $objp->bacurrency_code;
724 
725  if (isModEnabled('accounting')) {
726  $bankaccountstatic->account_number = $objp->account_number;
727 
728  $accountingjournal = new AccountingJournal($db);
729  $accountingjournal->fetch($objp->fk_accountancy_journal);
730  $bankaccountstatic->accountancy_journal = $accountingjournal->getNomUrl(0, 1, 1, '', 1);
731  }
732 
733  print '<td class="right">';
734  if ($bankaccountstatic->id) {
735  print $bankaccountstatic->getNomUrl(1, 'transactions');
736  }
737  print '</td>';
738  }
739  print '<td class="right"><span class="amount">'.price($objp->amount)."</span></td>\n";
740  print "</tr>";
741  $totalpaid += $objp->amount;
742  $i++;
743  }
744  } else {
745  print '<tr class="oddeven"><td><span class="opacitymedium">'.$langs->trans("None").'</span></td>';
746  print '<td></td><td></td><td></td><td></td>';
747  print '</tr>';
748  }
749 
750  print '<tr><td colspan="'.$nbcols.'" class="right">'.$langs->trans("AlreadyPaid")." :</td><td class=\"right\">".price($totalpaid)."</td></tr>\n";
751  print '<tr><td colspan="'.$nbcols.'" class="right">'.$langs->trans("AmountExpected")." :</td><td class=\"right\">".price($object->amount)."</td></tr>\n";
752 
753  $resteapayer = $object->amount - $totalpaid;
754  $cssforamountpaymentcomplete = 'amountpaymentcomplete';
755 
756  print '<tr><td colspan="'.$nbcols.'" class="right">'.$langs->trans("RemainderToPay")." :</td>";
757  print '<td class="right'.($resteapayer ? ' amountremaintopay' : (' '.$cssforamountpaymentcomplete)).'">'.price($resteapayer)."</td></tr>\n";
758 
759  print "</table>";
760  print '</div>';
761 
762  $db->free($resql);
763  } else {
764  dol_print_error($db);
765  }
766 
767  print '</div>';
768  print '</div>';
769 
770  print '<div class="clearboth"></div>';
771 
772  print dol_get_fiche_end();
773 
774  if ($action == 'edit') {
775  print $form->buttonsSaveCancel();
776 
777  print "</form>\n";
778  }
779 
780 
781  // Buttons for actions
782 
783  print '<div class="tabsAction">'."\n";
784 
785  if ($action != 'edit') {
786  // Reopen
787  if ($object->paye && $user->rights->tax->charges->creer) {
788  print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/compta/tva/card.php?id='.$object->id.'&action=reopen&token='.newToken().'">'.$langs->trans("ReOpen")."</a></div>";
789  }
790 
791  // Edit
792  if ($object->paye == 0 && $user->rights->tax->charges->creer) {
793  print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/compta/tva/card.php?id='.$object->id.'&action=edit&token='.newToken().'">'.$langs->trans("Modify")."</a></div>";
794  }
795 
796  // Emit payment
797  if ($object->paye == 0 && ((price2num($object->amount) < 0 && price2num($resteapayer, 'MT') < 0) || (price2num($object->amount) > 0 && price2num($resteapayer, 'MT') > 0)) && $user->rights->tax->charges->creer) {
798  print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/compta/paiement_vat.php?id='.$object->id.'&action=create&token='.newToken().'">'.$langs->trans("DoPayment").'</a></div>';
799  }
800 
801  // Classify 'paid'
802  if ($object->paye == 0
803  && (
804  (round($resteapayer) <= 0 && $object->amount > 0)
805  || (round($resteapayer) >= 0 && $object->amount < 0)
806  )
807  && $user->rights->tax->charges->creer) {
808  print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/compta/tva/card.php?id='.$object->id.'&token='.newToken().'&action=paid">'.$langs->trans("ClassifyPaid")."</a></div>";
809  }
810 
811  // Clone
812  if ($user->rights->tax->charges->creer) {
813  print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/compta/tva/card.php?id='.$object->id.'&token='.newToken().'&action=clone">'.$langs->trans("ToClone")."</a></div>";
814  }
815 
816  if (!empty($user->rights->tax->charges->supprimer) && empty($totalpaid)) {
817  print '<div class="inline-block divButAction"><a class="butActionDelete" href="card.php?id='.$object->id.'&action=delete&token='.newToken().'">'.$langs->trans("Delete").'</a></div>';
818  } else {
819  print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.(dol_escape_htmltag($langs->trans("DisabledBecausePayments"))).'">'.$langs->trans("Delete").'</a></div>';
820  }
821  }
822  print '</div>'."\n";
823 
824 
825 
826  // Select mail models is same action as presend
827  if (GETPOST('modelselected')) {
828  $action = 'presend';
829  }
830 
831  if ($action != 'presend') {
832  print '<div class="fichecenter"><div class="fichehalfleft">';
833  print '<a name="builddoc"></a>'; // ancre
834 
835  $includedocgeneration = 1;
836 
837  // Documents
838  if ($includedocgeneration) {
839  $objref = dol_sanitizeFileName($object->ref);
840  $relativepath = $objref.'/'.$objref.'.pdf';
841  $filedir = $conf->tax->dir_output.'/vat/'.$objref;
842  $urlsource = $_SERVER["PHP_SELF"]."?id=".$object->id;
843  //$genallowed = $user->rights->tax->charges->lire; // If you can read, you can build the PDF to read content
844  $genallowed = 0;
845  $delallowed = $user->rights->tax->charges->creer; // If you can create/edit, you can remove a file on card
846  print $formfile->showdocuments('tax-vat', $objref, $filedir, $urlsource, $genallowed, $delallowed, $object->model_pdf, 1, 0, 0, 28, 0, '', '', '', $langs->defaultlang);
847  }
848 
849  // Show links to link elements
850  //$linktoelem = $form->showLinkToObjectBlock($object, null, array('myobject'));
851  //$somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
852 
853 
854  print '</div><div class="fichehalfright">';
855 
856  /*
857  $MAXEVENT = 10;
858 
859  $morehtmlcenter = dolGetButtonTitle($langs->trans('SeeAll'), '', 'fa fa-bars imgforviewmode', dol_buildpath('/mymodule/myobject_agenda.php', 1).'?id='.$object->id);
860 
861  // List of actions on element
862  include_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
863  $formactions = new FormActions($db);
864  $somethingshown = $formactions->showactions($object, $object->element.'@'.$object->module, (is_object($object->thirdparty) ? $object->thirdparty->id : 0), 1, '', $MAXEVENT, '', $morehtmlcenter);
865  */
866 
867  print '</div></div>';
868  }
869 
870  //Select mail models is same action as presend
871  if (GETPOST('modelselected')) {
872  $action = 'presend';
873  }
874 
875  // Presend form
876  $modelmail = 'vat';
877  $defaulttopic = 'InformationMessage';
878  $diroutput = $conf->tax->dir_output;
879  $trackid = 'vat'.$object->id;
880 
881  include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php';
882 }
883 
884 llxFooter();
885 $db->close();
if(GETPOST('button_removefilter_x', 'alpha')||GETPOST('button_removefilter.x', 'alpha')||GETPOST('button_removefilter', 'alpha')) if(GETPOST('button_search_x', 'alpha')||GETPOST('button_search.x', 'alpha')||GETPOST('button_search', 'alpha')) if($action=="save" &&empty($cancel)) $help_url
View.
Definition: agenda.php:118
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Definition: wrapper.php:56
llxFooter()
Empty footer.
Definition: wrapper.php:70
Class to manage bank accounts.
Class to manage bank transaction lines.
Class to manage accounting journals.
Class to manage standard extra fields.
Class to offer components to list and upload files.
Class to manage generation of HTML components Only common components must be here.
Class to manage building of HTML components.
Class to manage payments of social contributions.
Put here description of your class.
Definition: tva.class.php:36
$parameters
Actions.
Definition: card.php:83
if(isModEnabled('facture') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') && $user->hasRight('don', 'lire')) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $sql
Social contributions to pay.
Definition: index.php:746
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:143
dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlstatus='', $onlybanner=0, $morehtmlright='')
Show tab footer of a card.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
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.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo editer/modifier fiche.
$formconfirm
if ($action == 'delbookkeepingyear') {
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.
vat_prepare_head($object)
Prepare array with list of tabs.
Definition: vat.lib.php:33