dolibarr  17.0.4
paiement_charge.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2004-2014 Laurent Destailleur <eldy@users.sourceforge.net>
3  * Copyright (C) 2016-2018 Frédéric France <frederic.france@netlogic.fr>
4  * Copyright (C) 2022 Alexandre Spangaro <aspangaro@open-dsi.fr>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <https://www.gnu.org/licenses/>.
18  */
19 
26 // Load Dolibarr environment
27 require '../main.inc.php';
28 require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php';
29 require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/paymentsocialcontribution.class.php';
30 require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
31 
32 // Load translation files required by the page
33 $langs->load("bills");
34 
35 $chid = GETPOST("id", 'int');
36 $action = GETPOST('action', 'aZ09');
37 $cancel = GETPOST('cancel');
38 
39 $amounts = array();
40 
41 // Security check
42 $socid = 0;
43 if ($user->socid > 0) {
44  $socid = $user->socid;
45 }
46 
47 $charge = new ChargeSociales($db);
48 
49 
50 /*
51  * Actions
52  */
53 
54 if ($action == 'add_payment' || ($action == 'confirm_paiement' && $confirm == 'yes')) {
55  $error = 0;
56 
57  if ($cancel) {
58  $loc = DOL_URL_ROOT.'/compta/sociales/card.php?id='.$chid;
59  header("Location: ".$loc);
60  exit;
61  }
62 
63  $datepaye = dol_mktime(12, 0, 0, GETPOST("remonth", "int"), GETPOST("reday", "int"), GETPOST("reyear", "int"));
64 
65  if (!(GETPOST("paiementtype") > 0)) {
66  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("PaymentMode")), null, 'errors');
67  $error++;
68  $action = 'create';
69  }
70  if ($datepaye == '') {
71  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Date")), null, 'errors');
72  $error++;
73  $action = 'create';
74  }
75  if (isModEnabled("banque") && !(GETPOST("accountid") > 0)) {
76  setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("AccountToCredit")), null, 'errors');
77  $error++;
78  $action = 'create';
79  }
80 
81  if (!$error) {
82  $paymentid = 0;
83 
84  // Read possible payments
85  foreach ($_POST as $key => $value) {
86  if (substr($key, 0, 7) == 'amount_') {
87  $other_chid = substr($key, 7);
88  $amounts[$other_chid] = price2num(GETPOST($key));
89  }
90  }
91 
92  if (count($amounts) <= 0) {
93  $error++;
94  setEventMessages($langs->trans("ErrorNoPaymentDefined"), null, 'errors');
95  $action = 'create';
96  }
97 
98  if (!$error) {
99  $db->begin();
100 
101  // Create a line of payments
102  $paiement = new PaymentSocialContribution($db);
103  $paiement->chid = $chid;
104  $paiement->datepaye = $datepaye;
105  $paiement->amounts = $amounts; // Amount list
106  $paiement->paiementtype = GETPOST("paiementtype", 'alphanohtml');
107  $paiement->num_payment = GETPOST("num_payment", 'alphanohtml');
108  $paiement->note = GETPOST("note", 'restricthtml');
109  $paiement->note_private = GETPOST("note", 'restricthtml');
110 
111  if (!$error) {
112  $paymentid = $paiement->create($user, (GETPOST('closepaidcontrib') == 'on' ? 1 : 0));
113  if ($paymentid < 0) {
114  $error++;
115  setEventMessages($paiement->error, null, 'errors');
116  $action = 'create';
117  }
118  }
119 
120  if (!$error) {
121  $result = $paiement->addPaymentToBank($user, 'payment_sc', '(SocialContributionPayment)', GETPOST('accountid', 'int'), '', '');
122  if (!($result > 0)) {
123  $error++;
124  setEventMessages($paiement->error, null, 'errors');
125  $action = 'create';
126  }
127  }
128 
129  if (!$error) {
130  $db->commit();
131  $loc = DOL_URL_ROOT.'/compta/sociales/card.php?id='.$chid;
132  header('Location: '.$loc);
133  exit;
134  } else {
135  $db->rollback();
136  }
137  }
138  }
139 }
140 
141 
142 /*
143  * View
144  */
145 
146 llxHeader();
147 
148 $form = new Form($db);
149 
150 
151 // Form of charge payment creation
152 if ($action == 'create') {
153  $charge->fetch($chid);
154  $charge->accountid = $charge->fk_account ? $charge->fk_account : $charge->accountid;
155  $charge->paiementtype = $charge->mode_reglement_id ? $charge->mode_reglement_id : $charge->paiementtype;
156 
157  $total = $charge->amount;
158  if (!empty($conf->use_javascript_ajax)) {
159  print "\n".'<script type="text/javascript">';
160 
161  //Add js for AutoFill
162  print ' $(document).ready(function () {';
163  print ' $(".AutoFillAmount").on(\'click touchstart\', function(){
164  var amount = $(this).data("value");
165  document.getElementById($(this).data(\'rowid\')).value = amount ;
166  });';
167  print ' });'."\n";
168 
169  print ' </script>'."\n";
170  }
171 
172  print load_fiche_titre($langs->trans("DoPayment"));
173 
174  print '<form name="add_payment" action="'.$_SERVER['PHP_SELF'].'" method="POST">';
175  print '<input type="hidden" name="token" value="'.newToken().'">';
176  print '<input type="hidden" name="id" value="'.$chid.'">';
177  print '<input type="hidden" name="chid" value="'.$chid.'">';
178  print '<input type="hidden" name="action" value="add_payment">';
179 
180  print dol_get_fiche_head('', '');
181 
182  print '<table class="border centpercent">';
183 
184  print '<tr><td class="titlefieldcreate">'.$langs->trans("Ref").'</td><td><a href="'.DOL_URL_ROOT.'/compta/sociales/card.php?id='.$chid.'">'.$chid.'</a></td></tr>';
185  print '<tr><td>'.$langs->trans("Label").'</td><td>'.$charge->label."</td></tr>\n";
186  print '<tr><td>'.$langs->trans("Type")."</td><td>".$charge->type_label."</td></tr>\n";
187  print '<tr><td>'.$langs->trans("Period")."</td><td>".dol_print_date($charge->periode, 'day')."</td></tr>\n";
188  /*print '<tr><td>'.$langs->trans("DateDue")."</td><td>".dol_print_date($charge->date_ech,'day')."</td></tr>\n";
189  print '<tr><td>'.$langs->trans("Amount")."</td><td>".price($charge->amount,0,$outputlangs,1,-1,-1,$conf->currency).'</td></tr>';*/
190 
191  $sql = "SELECT sum(p.amount) as total";
192  $sql .= " FROM ".MAIN_DB_PREFIX."paiementcharge as p";
193  $sql .= " WHERE p.fk_charge = ".((int) $chid);
194  $resql = $db->query($sql);
195  if ($resql) {
196  $obj = $db->fetch_object($resql);
197  $sumpaid = $obj->total;
198  $db->free($resql);
199  }
200  /*print '<tr><td>'.$langs->trans("AlreadyPaid").'</td><td>'.price($sumpaid,0,$outputlangs,1,-1,-1,$conf->currency).'</td></tr>';
201  print '<tr><td class="tdtop">'.$langs->trans("RemainderToPay").'</td><td>'.price($total-$sumpaid,0,$outputlangs,1,-1,-1,$conf->currency).'</td></tr>';*/
202 
203  print '<tr><td class="fieldrequired">'.$langs->trans("Date").'</td><td>';
204  $datepaye = dol_mktime(12, 0, 0, GETPOST("remonth", 'int'), GETPOST("reday", 'int'), GETPOST("reyear", 'int'));
205  $datepayment = empty($conf->global->MAIN_AUTOFILL_DATE) ? (GETPOSTISSET("remonth") ? $datepaye : -1) : '';
206  print $form->selectDate($datepayment, '', '', '', 0, "add_payment", 1, 1, 0, '', '', $charge->date_ech, '', 1, $langs->trans("DateOfSocialContribution"));
207  print "</td>";
208  print '</tr>';
209 
210  print '<tr><td class="fieldrequired">'.$langs->trans("PaymentMode").'</td><td>';
211  $form->select_types_paiements(GETPOSTISSET("paiementtype") ? GETPOST("paiementtype") : $charge->paiementtype, "paiementtype");
212  print "</td>\n";
213  print '</tr>';
214 
215  print '<tr>';
216  print '<td class="fieldrequired">'.$langs->trans('AccountToDebit').'</td>';
217  print '<td>';
218  print img_picto('', 'bank_account', 'class="pictofixedwidth"');
219  $form->select_comptes(GETPOSTISSET("accountid") ? GETPOST("accountid", 'int') : $charge->accountid, "accountid", 0, '', 2); // Show opend bank account list
220  print '</td></tr>';
221 
222  // Number
223  print '<tr><td>'.$langs->trans('Numero');
224  print ' <em>('.$langs->trans("ChequeOrTransferNumber").')</em>';
225  print '</td>';
226  print '<td><input name="num_payment" type="text" value="'.GETPOST('num_payment', 'alphanohtml').'"></td></tr>'."\n";
227 
228  print '<tr>';
229  print '<td class="tdtop">'.$langs->trans("Comments").'</td>';
230  print '<td class="tdtop"><textarea name="note" wrap="soft" cols="60" rows="'.ROWS_3.'">'.GETPOST('note', 'alphanohtml').'</textarea></td>';
231  print '</tr>';
232 
233  print '</table>';
234 
235  print dol_get_fiche_end();
236 
237  /*
238  * Other unpaid charges
239  */
240  $num = 1;
241  $i = 0;
242 
243  print '<table class="noborder centpercent">';
244  print '<tr class="liste_titre">';
245  //print '<td>'.$langs->trans("SocialContribution").'</td>';
246  print '<td class="left">'.$langs->trans("DateDue").'</td>';
247  print '<td class="right">'.$langs->trans("Amount").'</td>';
248  print '<td class="right">'.$langs->trans("AlreadyPaid").'</td>';
249  print '<td class="right">'.$langs->trans("RemainderToPay").'</td>';
250  print '<td class="center">'.$langs->trans("Amount").'</td>';
251  print "</tr>\n";
252 
253  $total = 0;
254  $total_ttc = 0;
255  $totalrecu = 0;
256 
257  while ($i < $num) {
258  $objp = $charge;
259 
260  print '<tr class="oddeven">';
261 
262  if ($objp->date_ech > 0) {
263  print '<td class="left">'.dol_print_date($objp->date_ech, 'day').'</td>'."\n";
264  } else {
265  print "<td align=\"center\"><b>!!!</b></td>\n";
266  }
267 
268  print '<td class="right"><span class="amount">'.price($objp->amount)."</span></td>";
269 
270  print '<td class="right"><span class="amount">'.price($sumpaid)."</span></td>";
271 
272  print '<td class="right"><span class="amount">'.price($objp->amount - $sumpaid)."</span></td>";
273 
274  print '<td class="center">';
275  if ($sumpaid < $objp->amount) {
276  $namef = "amount_".$objp->id;
277  $nameRemain = "remain_".$objp->id;
278  if (!empty($conf->use_javascript_ajax)) {
279  print img_picto("Auto fill", 'rightarrow', "class='AutoFillAmount' data-rowid='".$namef."' data-value='".($objp->amount - $sumpaid)."'");
280  }
281  $remaintopay = $objp->amount - $sumpaid;
282  print '<input type=hidden class="sum_remain" name="'.$nameRemain.'" value="'.$remaintopay.'">';
283  print '<input type="text" size="8" name="'.$namef.'" id="'.$namef.'" value="'.GETPOST('amount_'.$objp->id, 'alpha').'">';
284  } else {
285  print '-';
286  }
287  print "</td>";
288 
289  print "</tr>\n";
290  $total += $objp->total;
291  $total_ttc += $objp->total_ttc;
292  $totalrecu += $objp->amount;
293  $i++;
294  }
295  if ($i > 1) {
296  // Print total
297  print '<tr class="oddeven">';
298  print '<td colspan="2" class="left">'.$langs->trans("Total").':</td>';
299  print '<td class="right"><b>'.price($total_ttc).'</b></td>';
300  print '<td class="right"><b>'.price($totalrecu).'</b></td>';
301  print '<td class="right"><b>'.price($total_ttc - $totalrecu).'</b></td>';
302  print '<td align="center">&nbsp;</td>';
303  print "</tr>\n";
304  }
305 
306  print "</table>";
307 
308  // Save payment button
309  print '<br><div class="center"><input type="checkbox" checked name="closepaidcontrib"> '.$langs->trans("ClosePaidContributionsAutomatically");
310  print '<br><input type="submit" class="button" name="save" value="'.$langs->trans('ToMakePayment').'">';
311  print '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
312  print '<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans("Cancel").'">';
313  print '</div>';
314 
315  print "</form>\n";
316 }
317 
318 llxFooter();
319 $db->close();
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
Classe permettant la gestion des paiements des charges La tva collectee n'est calculee que sur les fa...
Class to manage generation of HTML components Only common components must be here.
Class to manage payments of social contributions.
if(isModEnabled('facture') &&!empty($user->rights->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') &&!empty($user->rights->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)) $resql
Social contributions to pay.
Definition: index.php:745
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:143
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='')
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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='')
Set event messages in dol_events session object.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
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.