dolibarr 25.0.0-alpha
card.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004-2014 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2005 Marc Barilley / Ocebo <marc@ocebo.com>
5 * Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
6 * Copyright (C) 2021 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
7 * Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
8 * Copyright (C) 2024 Alexandre SPANGARO <alexandre@inovea-conseil.com>
9 * Copyright (C) 2024-2026 Frédéric France <frederic.france@free.fr>
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 3 of the License, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program. If not, see <https://www.gnu.org/licenses/>.
23 */
24
32// Load Dolibarr environment
33require '../../main.inc.php';
34require_once DOL_DOCUMENT_ROOT.'/salaries/class/salary.class.php';
35require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php';
36require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
37require_once DOL_DOCUMENT_ROOT.'/core/modules/facture/modules_facture.php';
38require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
39
48// Load translation files required by the page
49$langs->loadLangs(array('bills', 'banks', 'companies', 'salaries'));
50
51// Security check
52$id = GETPOSTINT("id");
53$action = GETPOST('action', 'aZ09');
54$confirm = GETPOST('confirm');
55if ($user->socid) {
56 $socid = $user->socid;
57}
58
59$salary = new Salary($db);
60
61$object = new PaymentSalary($db);
62if ($id > 0) {
63 $result = $object->fetch($id);
64 if (!$result) {
65 dol_print_error($db, 'Failed to get payment id '.$id);
66 }
67}
68restrictedArea($user, 'salaries', $object->fk_salary, 'salary', ''); // $object is payment of salary
69
70
71/*
72 * Actions
73 */
74
75// Delete payment
76if ($action == 'confirm_delete' && $confirm == 'yes' && $user->hasRight('salaries', 'delete')) {
77 $db->begin();
78
79 $object->oldcopy = dol_clone($object, 2); // @phan-suppress-current-line PhanTypeMismatchProperty
80 $result = $object->delete($user);
81 if ($result > 0) {
82 $db->commit();
83 header("Location: ".DOL_URL_ROOT."/salaries/payments.php");
84 exit;
85 } else {
86 setEventMessages($object->error, $object->errors, 'errors');
87 $db->rollback();
88 }
89}
90
91if ($action == 'setdatep' && GETPOST('datepday') && $user->hasRight('salaries', 'write')) {
92 $datepaye = dol_mktime(GETPOSTINT('datephour'), GETPOSTINT('datepmin'), GETPOSTINT('datepsec'), GETPOSTINT('datepmonth'), GETPOSTINT('datepday'), GETPOSTINT('datepyear'), 'tzuserrel');
93 $res = $object->updatePaymentDate($datepaye);
94 if ($res === 0) {
95 setEventMessages($langs->trans('PaymentDateUpdateSucceeded'), null, 'mesgs');
96 } else {
97 setEventMessages($langs->trans('PaymentDateUpdateFailed'), null, 'errors');
98 }
99}
100
101
102/*
103 * View
104 */
105
106$form = new Form($db);
107
108llxHeader('', $langs->trans("SalaryPayment"));
109
110$h = 0;
111
112$head = array();
113
114$head[$h][0] = DOL_URL_ROOT.'/salaries/payment_salary/card.php?id='.$id;
115$head[$h][1] = $langs->trans("SalaryPayment");
116$hselected = (string) $h;
117$h++;
118
119/*
120$head[$h][0] = DOL_URL_ROOT.'/compta/payment_sc/info.php?id='.$id;
121$head[$h][1] = $langs->trans("Info");
122$h++;
123*/
124
125
126print dol_get_fiche_head($head, $hselected, $langs->trans("SalaryPayment"), -1, 'payment');
127
128/*
129 * Deletion confirmation of payment
130 */
131if ($action == 'delete') {
132 print $form->formconfirm('card.php?id='.$object->id, $langs->trans("DeleteSalary"), $langs->trans("ConfirmDeleteSalaryPayment"), 'confirm_delete', '', 0, 2);
133}
134
135/*
136 * Validation confirmation of payment
137 */
138/*
139if ($action == 'valide')
140{
141 $facid = GETPOST('facid', 'int');
142 print $form->formconfirm('card.php?id='.$object->id.'&amp;facid='.$facid, $langs->trans("ValidatePayment"), $langs->trans("ConfirmValidatePayment"), 'confirm_valide','',0,2);
143
144}
145*/
146
147
148$linkback = '<a href="'.DOL_URL_ROOT.'/salaries/payments.php">'.$langs->trans("BackToList").'</a>';
149
150dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'id', '');
151
152
153print '<div class="fichecenter">';
154print '<div class="underbanner clearboth"></div>';
155
156print '<table class="border centpercent tableforfield">';
157
158// Ref
159/*print '<tr><td class="titlefield">'.$langs->trans('Ref').'</td>';
160print '<td colspan="3">';
161print $form->showrefnav($object,'id','',1,'rowid','id');
162print '</td></tr>';*/
163
164// Date
165print '<tr><td>';
166print $form->editfieldkey("Date", 'datep', $object->datep, $object, 1, 'datehourpicker');
167print '</td><td>';
168print $form->editfieldval("Date", 'datep', $object->datep, $object, 1, 'datehourpicker', '', null, null, '', 0, '', 'id', 'tzuserrel', array('addnowlink' => 1));
169print "</td>";
170print '</tr>';
171
172// Mode
173print '<tr><td>'.$langs->trans('Mode').'</td><td>';
174print $langs->trans("PaymentType".$object->type_code);
175print '</td></tr>';
176
177// Numero
178print '<tr><td>'.$langs->trans('Numero').'</td><td>'.dol_escape_htmltag($object->num_payment).'</td></tr>';
179
180// Montant
181print '<tr><td>'.$langs->trans('Amount').'</td><td>'.price($object->amount, 0, $langs, 1, -1, -1, $conf->currency).'</td></tr>';
182
183// Note
184print '<tr><td>'.$langs->trans('Note').'</td><td class="valeur sensiblehtmlcontent">'.dol_string_onlythesehtmltags(dol_htmlcleanlastbr($object->note_private)).'</td></tr>';
185
186// Bank account
187if (isModEnabled("bank")) {
188 if ($object->bank_account && isset($object->bank_line)) {
189 $bankline = new AccountLine($db);
190 $bankline->fetch((int) $object->bank_line);
191
192 print '<tr>';
193 print '<td>'.$langs->trans('BankTransactionLine').'</td>';
194 print '<td>';
195 print $bankline->getNomUrl(1, 0, 'showall');
196 print '</td>';
197 print '</tr>';
198 }
199}
200
201print '</table>';
202
203print '</div>';
204
205print dol_get_fiche_end();
206
207
208/*
209 * List of salaries paid
210 */
211
212$disable_delete = 0;
213$sql = 'SELECT f.rowid as scid, f.label, f.paye, f.amount as sc_amount, ps.amount';
214$sql .= ' FROM '.MAIN_DB_PREFIX.'payment_salary as ps,'.MAIN_DB_PREFIX.'salary as f';
215$sql .= ' WHERE ps.fk_salary = f.rowid';
216$sql .= ' AND f.entity = '.((int) $conf->entity);
217$sql .= ' AND ps.rowid = '.((int) $object->id);
218
219dol_syslog("payment_salary/card.php", LOG_DEBUG);
220$resql = $db->query($sql);
221if ($resql) {
222 $num = $db->num_rows($resql);
223
224 $i = 0;
225 $total = 0;
226 print '<br>';
227
228 print '<div class="div-table-responsive">'; // You can use div-table-responsive-no-min if you don't need reserved height for your table
229 print '<table class="noborder centpercent">';
230 print '<tr class="liste_titre">';
231 print '<td>'.$langs->trans('Salary').'</td>';
232 print '<td>'.$langs->trans('Label').'</td>';
233 print '<td class="right">'.$langs->trans('ExpectedToPay').'</td>';
234 print '<td class="center">'.$langs->trans('Status').'</td>';
235 print '<td class="right">'.$langs->trans('PayedByThisPayment').'</td>';
236 print "</tr>\n";
237
238 if ($num > 0) {
239 while ($i < $num) {
240 $objp = $db->fetch_object($resql);
241
242 print '<tr class="oddeven">';
243 // Ref
244 print '<td>';
245 $salary->fetch($objp->scid);
246 print $salary->getNomUrl(1);
247 print "</td>\n";
248 // Label
249 print '<td>'.$objp->label.'</td>';
250 // Expected to pay
251 print '<td class="right">'.price($objp->sc_amount).'</td>';
252 // Status
253 print '<td class="center">'.$salary->getLibStatut(4, $objp->amount).'</td>';
254 // Amount paid
255 print '<td class="right">'.price($objp->amount).'</td>';
256 print "</tr>\n";
257 if ($objp->paye == 1) {
258 // If at least one invoice is paid, disable delete
259 $disable_delete = 1;
260 }
261 $total += $objp->amount;
262 $i++;
263 }
264 }
265
266 print "</table>\n";
267 print "</div>";
268
269 $db->free($resql);
270} else {
271 dol_print_error($db);
272}
273
274
275
276/*
277 * Button actions
278 */
279
280print '<div class="tabsAction">';
281
282if ($action == '') {
283 if ($user->hasRight('salaries', 'delete')) {
284 if (!$disable_delete) {
285 print dolGetButtonAction($langs->trans("Delete"), $langs->trans("Delete"), 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', 1, array('attr' => array('class' => 'reposition')))."\n";
286 } else {
287 print dolGetButtonAction($langs->trans("CantRemovePaymentSalaryPaid"), $langs->trans("Delete"), 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', 0);
288 }
289 }
290}
291
292print '</div>';
293
294// End of page
295llxFooter();
296$db->close();
$id
Support class for third parties, contacts, members, users or resources.
Definition account.php:47
if(! $sortfield) if(! $sortorder) $object
Definition account.php:100
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
Definition wrapper.php:91
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:73
Class to manage bank transaction lines.
Class to manage generation of HTML components Only common components must be here.
Class to manage payments of salaries.
Class to manage salary payments.
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $conf
The main.inc.php has been included so the following variable are now defined:
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...
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.
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, $nodefault=0)
Return value of a param into GET or POST supervariable.
dol_htmlcleanlastbr($stringtodecode)
This function remove all ending and br at end.
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_clone($srcobject, $native=2)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dol_string_onlythesehtmltags($stringtoclean, $cleanalsosomestyles=1, $removeclassattribute=1, $cleanalsojavascript=0, $allowiframe=0, $allowed_tags=array(), $allowlink=0, $allowscript=0, $allowstyle=0, $allowphp=0)
Clean a string to keep only desirable HTML tags.
isModEnabled($module)
Is Dolibarr module enabled.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
Definition html.lib.php:540
dol_get_fiche_end($notab=0)
Return tab footer of a card.
Definition html.lib.php:738
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Definition html.lib.php:181
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $nodie=0, $mode='')
Check permissions of a user to show a page and an object.