dolibarr 21.0.0-alpha
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-2024 Frédéric France <frederic.france@free.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->loadLangs(array("banks", "bills", "compta"));
34
35$action = GETPOST('action', 'aZ09');
36$confirm = GETPOST('confirm', 'alpha');
37$cancel = GETPOST('cancel');
38
39$chid = GETPOSTINT("id");
40$amounts = array();
41
42// Security check
43$socid = 0;
44if ($user->socid > 0) {
45 $socid = $user->socid;
46}
47
48$charge = new ChargeSociales($db);
49
50
51/*
52 * Actions
53 */
54
55if (($action == 'add_payment' || ($action == 'confirm_paiement' && $confirm == 'yes')) && $user->hasRight('tax', 'charges', 'creer')) {
56 $error = 0;
57
58 if ($cancel) {
59 $loc = DOL_URL_ROOT.'/compta/sociales/card.php?id='.$chid;
60 header("Location: ".$loc);
61 exit;
62 }
63
64 $datepaye = dol_mktime(12, 0, 0, GETPOSTINT("remonth"), GETPOSTINT("reday"), GETPOSTINT("reyear"));
65
66 if (!(GETPOST("paiementtype") > 0)) {
67 setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("PaymentMode")), null, 'errors');
68 $error++;
69 $action = 'create';
70 }
71 if ($datepaye == '') {
72 setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Date")), null, 'errors');
73 $error++;
74 $action = 'create';
75 }
76 if (isModEnabled("bank") && !(GETPOST("accountid") > 0)) {
77 setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("AccountToCredit")), null, 'errors');
78 $error++;
79 $action = 'create';
80 }
81
82 if (!$error) {
83 $paymentid = 0;
84
85 // Read possible payments
86 foreach ($_POST as $key => $value) {
87 if (substr($key, 0, 7) == 'amount_') {
88 $other_chid = substr($key, 7);
89 $amounts[$other_chid] = (float) price2num(GETPOST($key));
90 }
91 }
92
93 if (count($amounts) <= 0) {
94 $error++;
95 setEventMessages($langs->trans("ErrorNoPaymentDefined"), null, 'errors');
96 $action = 'create';
97 }
98
99 if (!$error) {
100 $db->begin();
101
102 // Create a line of payments
103 $paiement = new PaymentSocialContribution($db);
104 $paiement->chid = $chid;
105 $paiement->datepaye = $datepaye;
106 $paiement->amounts = $amounts; // Amount list
107 $paiement->paiementtype = GETPOST("paiementtype", 'alphanohtml');
108 $paiement->num_payment = GETPOST("num_payment", 'alphanohtml');
109 $paiement->note = GETPOST("note", 'restricthtml');
110 $paiement->note_private = GETPOST("note", 'restricthtml');
111
112 if (!$error) {
113 $paymentid = $paiement->create($user, (GETPOST('closepaidcontrib') == 'on' ? 1 : 0));
114 if ($paymentid < 0) {
115 $error++;
116 setEventMessages($paiement->error, null, 'errors');
117 $action = 'create';
118 }
119 }
120
121 if (!$error) {
122 $result = $paiement->addPaymentToBank($user, 'payment_sc', '(SocialContributionPayment)', GETPOSTINT('accountid'), '', '');
123 if (!($result > 0)) {
124 $error++;
125 setEventMessages($paiement->error, null, 'errors');
126 $action = 'create';
127 }
128 }
129
130 if (!$error) {
131 $db->commit();
132 $loc = DOL_URL_ROOT.'/compta/sociales/card.php?id='.$chid;
133 header('Location: '.$loc);
134 exit;
135 } else {
136 $db->rollback();
137 }
138 }
139 }
140}
141
142
143/*
144 * View
145 */
146
147llxHeader();
148
149$form = new Form($db);
150
151
152// Form of charge payment creation
153if ($action == 'create') {
154 $charge->fetch($chid);
155 $charge->accountid = $charge->fk_account ? $charge->fk_account : $charge->accountid;
156 $charge->paiementtype = $charge->mode_reglement_id ? $charge->mode_reglement_id : $charge->paiementtype;
157
158 $total = $charge->amount;
159 if (!empty($conf->use_javascript_ajax)) {
160 print "\n".'<script type="text/javascript">';
161
162 //Add js for AutoFill
163 print ' $(document).ready(function () {';
164 print ' $(".AutoFillAmount").on(\'click touchstart\', function() {
165 console.log("Click on .AutoFillAmount");
166 var amount = $(this).data("value");
167 document.getElementById($(this).data(\'rowid\')).value = amount ;
168 });';
169 print ' });'."\n";
170
171 print ' </script>'."\n";
172 }
173
174 print load_fiche_titre($langs->trans("DoPayment"));
175
176 print '<form name="add_payment" action="'.$_SERVER['PHP_SELF'].'" method="POST">';
177 print '<input type="hidden" name="token" value="'.newToken().'">';
178 print '<input type="hidden" name="id" value="'.$chid.'">';
179 print '<input type="hidden" name="chid" value="'.$chid.'">';
180 print '<input type="hidden" name="action" value="add_payment">';
181
182 print dol_get_fiche_head([], '');
183
184 print '<table class="border centpercent">';
185
186 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>';
187 print '<tr><td>'.$langs->trans("Label").'</td><td>'.$charge->label."</td></tr>\n";
188 print '<tr><td>'.$langs->trans("Type")."</td><td>".$charge->type_label."</td></tr>\n";
189 print '<tr><td>'.$langs->trans("Period")."</td><td>".dol_print_date($charge->periode, 'day')."</td></tr>\n";
190 /*print '<tr><td>'.$langs->trans("DateDue")."</td><td>".dol_print_date($charge->date_ech,'day')."</td></tr>\n";
191 print '<tr><td>'.$langs->trans("Amount")."</td><td>".price($charge->amount,0,$outputlangs,1,-1,-1,$conf->currency).'</td></tr>';*/
192
193 $sql = "SELECT sum(p.amount) as total";
194 $sql .= " FROM ".MAIN_DB_PREFIX."paiementcharge as p";
195 $sql .= " WHERE p.fk_charge = ".((int) $chid);
196 $resql = $db->query($sql);
197 if ($resql) {
198 $obj = $db->fetch_object($resql);
199 $sumpaid = $obj->total;
200 $db->free($resql);
201 }
202 /*print '<tr><td>'.$langs->trans("AlreadyPaid").'</td><td>'.price($sumpaid,0,$outputlangs,1,-1,-1,$conf->currency).'</td></tr>';
203 print '<tr><td class="tdtop">'.$langs->trans("RemainderToPay").'</td><td>'.price($total-$sumpaid,0,$outputlangs,1,-1,-1,$conf->currency).'</td></tr>';*/
204
205 print '<tr><td class="fieldrequired">'.$langs->trans("Date").'</td><td>';
206 $datepaye = dol_mktime(12, 0, 0, GETPOSTINT("remonth"), GETPOSTINT("reday"), GETPOSTINT("reyear"));
207 $datepayment = !getDolGlobalString('MAIN_AUTOFILL_DATE') ? (GETPOSTISSET("remonth") ? $datepaye : -1) : '';
208 print $form->selectDate($datepayment, '', 0, 0, 0, "add_payment", 1, 1, 0, '', '', $charge->date_ech, '', 1, $langs->trans("DateOfSocialContribution"));
209 print "</td>";
210 print '</tr>';
211
212 print '<tr><td class="fieldrequired">'.$langs->trans("PaymentMode").'</td><td>';
213 print img_picto('', 'bank', 'class="pictofixedwidth"');
214 print $form->select_types_paiements(GETPOSTISSET("paiementtype") ? GETPOST("paiementtype") : $charge->paiementtype, "paiementtype", '', 0, 1, 0, 0, 1, 'maxwidth500 widthcentpercentminusxx', 1);
215 print "</td>\n";
216 print '</tr>';
217
218 print '<tr>';
219 print '<td class="fieldrequired">'.$langs->trans('AccountToDebit').'</td>';
220 print '<td>';
221 print img_picto('', 'bank_account', 'class="pictofixedwidth"');
222 print $form->select_comptes(GETPOSTISSET("accountid") ? GETPOSTINT("accountid") : $charge->accountid, "accountid", 0, '', 2, '', 0, 'maxwidth500 widthcentpercentminusx', 1); // Show opend bank account list
223 print '</td></tr>';
224
225 // Number
226 print '<tr><td>'.$langs->trans('Numero');
227 if (empty($conf->dol_optimize_smallscreen)) {
228 print ' <em>('.$langs->trans("ChequeOrTransferNumber").')</em>';
229 }
230 print '</td>';
231 print '<td><input name="num_payment" class="width100" type="text" value="'.GETPOST('num_payment', 'alphanohtml').'"></td></tr>'."\n";
232
233 print '<tr>';
234 print '<td class="tdtop">'.$langs->trans("Comments").'</td>';
235 print '<td class="tdtop"><textarea class="quatrevingtpercent" name="note" wrap="soft" rows="'.ROWS_3.'">'.GETPOST('note', 'alphanohtml').'</textarea></td>';
236 print '</tr>';
237
238 print '</table>';
239
240 print dol_get_fiche_end();
241
242 /*
243 * Other unpaid charges
244 */
245 $num = 1;
246 $i = 0;
247
248 print '<div class="div-table-responsive-no-min">'; // You can use div-table-responsive-no-min if you don't need reserved height for your table
249 print '<table class="noborder centpercent">';
250 print '<tr class="liste_titre">';
251 //print '<td>'.$langs->trans("SocialContribution").'</td>';
252 print '<td class="left">'.$langs->trans("DateDue").'</td>';
253 print '<td class="right">'.$langs->trans("Amount").'</td>';
254 print '<td class="right">'.$langs->trans("AlreadyPaid").'</td>';
255 print '<td class="right">'.$langs->trans("RemainderToPay").'</td>';
256 print '<td class="center">'.$langs->trans("Amount").'</td>';
257 print "</tr>\n";
258
259 $total = 0;
260 $total_ttc = 0;
261 $totalrecu = 0;
262
263 while ($i < $num) {
264 $objp = $charge;
265
266 print '<tr class="oddeven">';
267
268 if ($objp->date_ech > 0) {
269 print '<td class="left">'.dol_print_date($objp->date_ech, 'day').'</td>'."\n";
270 } else {
271 print "<td align=\"center\"><b>!!!</b></td>\n";
272 }
273
274 print '<td class="right nowraponall"><span class="amount">'.price($objp->amount)."</span></td>";
275
276 print '<td class="right nowraponall"><span class="amount">'.price($sumpaid)."</span></td>";
277
278 print '<td class="right nowraponall"><span class="amount">'.price($objp->amount - $sumpaid)."</span></td>";
279
280 print '<td class="center nowraponall">';
281 if ($sumpaid < $objp->amount) {
282 $namef = "amount_".$objp->id;
283 $nameRemain = "remain_".$objp->id;
284 if (!empty($conf->use_javascript_ajax)) {
285 print img_picto("Auto fill", 'rightarrow', "class='AutoFillAmount' data-rowid='".$namef."' data-value='".($objp->amount - $sumpaid)."'");
286 }
287 $remaintopay = $objp->amount - $sumpaid;
288 print '<input type=hidden class="sum_remain" name="'.$nameRemain.'" value="'.$remaintopay.'">';
289 print '<input type="text" size="8" name="'.$namef.'" id="'.$namef.'" value="'.GETPOST('amount_'.$objp->id, 'alpha').'">';
290 } else {
291 print '-';
292 }
293 print "</td>";
294
295 print "</tr>\n";
296 $total += $objp->total;
297 $total_ttc += $objp->total_ttc;
298 $totalrecu += $objp->amount;
299 $i++;
300 }
301 if ($i > 1) {
302 // Print total
303 print '<tr class="oddeven">';
304 print '<td colspan="2" class="left">'.$langs->trans("Total").':</td>';
305 print '<td class="right"><b>'.price($total_ttc).'</b></td>';
306 print '<td class="right"><b>'.price($totalrecu).'</b></td>';
307 print '<td class="right"><b>'.price($total_ttc - $totalrecu).'</b></td>';
308 print '<td align="center">&nbsp;</td>';
309 print "</tr>\n";
310 }
311
312 print "</table>";
313 print '</div>';
314
315 // Save payment button
316 print '<br><div class="center"><input type="checkbox" checked name="closepaidcontrib"> '.$langs->trans("ClosePaidContributionsAutomatically");
317 print '<br><input type="submit" class="button" name="save" value="'.$langs->trans('ToMakePayment').'">';
318 print '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
319 print '<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans("Cancel").'">';
320 print '</div>';
321
322 print "</form>\n";
323}
324
325llxFooter();
326$db->close();
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Definition wrapper.php:70
Class for managing the social charges.
Class to manage generation of HTML components Only common components must be here.
Class to manage payments of social contributions.
llxFooter()
Footer empty.
Definition document.php:107
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
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=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.