dolibarr 18.0.6
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
27require '../main.inc.php';
28require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php';
29require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/paymentsocialcontribution.class.php';
30require_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;
43if ($user->socid > 0) {
44 $socid = $user->socid;
45}
46
47$charge = new ChargeSociales($db);
48
49
50/*
51 * Actions
52 */
53
54if ($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
146llxHeader();
147
148$form = new Form($db);
149
150
151// Form of charge payment creation
152if ($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
318llxFooter();
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.
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_get_fiche_end($notab=0)
Return tab footer of a card.
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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.