dolibarr 21.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 MDW <mdeweerd@users.noreply.github.com>
8 * Copyright (C) 2024 Alexandre SPANGARO <alexandre@inovea-conseil.com>
9 * Copyright (C) 2024 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
40// Load translation files required by the page
41$langs->loadLangs(array('bills', 'banks', 'companies', 'salaries'));
42
43// Security check
44$id = GETPOSTINT("id");
45$action = GETPOST('action', 'aZ09');
46$confirm = GETPOST('confirm');
47if ($user->socid) {
48 $socid = $user->socid;
49}
50
51$salary = new Salary($db);
52
53$object = new PaymentSalary($db);
54if ($id > 0) {
55 $result = $object->fetch($id);
56 if (!$result) {
57 dol_print_error($db, 'Failed to get payment id '.$id);
58 }
59}
60restrictedArea($user, 'salaries', $object->fk_salary, 'salary', ''); // $object is payment of salary
61
62
63/*
64 * Actions
65 */
66
67// Delete payment
68if ($action == 'confirm_delete' && $confirm == 'yes' && $user->hasRight('salaries', 'delete')) {
69 $db->begin();
70
71 $result = $object->delete($user);
72 if ($result > 0) {
73 $db->commit();
74 header("Location: ".DOL_URL_ROOT."/salaries/payments.php");
75 exit;
76 } else {
77 setEventMessages($object->error, $object->errors, 'errors');
78 $db->rollback();
79 }
80}
81
82if ($action == 'setdatep' && GETPOST('datepday') && $user->hasRight('salaries', 'write')) {
83 $datepaye = dol_mktime(GETPOSTINT('datephour'), GETPOSTINT('datepmin'), GETPOSTINT('datepsec'), GETPOSTINT('datepmonth'), GETPOSTINT('datepday'), GETPOSTINT('datepyear'), 'tzuserrel');
84 $res = $object->updatePaymentDate($datepaye);
85 if ($res === 0) {
86 setEventMessages($langs->trans('PaymentDateUpdateSucceeded'), null, 'mesgs');
87 } else {
88 setEventMessages($langs->trans('PaymentDateUpdateFailed'), null, 'errors');
89 }
90}
91
92
93/*
94 * View
95 */
96
97$form = new Form($db);
98
99llxHeader('', $langs->trans("SalaryPayment"));
100
101$h = 0;
102
103$head = array();
104
105$head[$h][0] = DOL_URL_ROOT.'/salaries/payment_salary/card.php?id='.$id;
106$head[$h][1] = $langs->trans("SalaryPayment");
107$hselected = (string) $h;
108$h++;
109
110/*
111$head[$h][0] = DOL_URL_ROOT.'/compta/payment_sc/info.php?id='.$id;
112$head[$h][1] = $langs->trans("Info");
113$h++;
114*/
115
116
117print dol_get_fiche_head($head, $hselected, $langs->trans("SalaryPayment"), -1, 'payment');
118
119/*
120 * Deletion confirmation of payment
121 */
122if ($action == 'delete') {
123 print $form->formconfirm('card.php?id='.$object->id, $langs->trans("DeleteSalary"), $langs->trans("ConfirmDeleteSalaryPayment"), 'confirm_delete', '', 0, 2);
124}
125
126/*
127 * Validation confirmation of payment
128 */
129/*
130if ($action == 'valide')
131{
132 $facid = GETPOST('facid', 'int');
133 print $form->formconfirm('card.php?id='.$object->id.'&amp;facid='.$facid, $langs->trans("ValidatePayment"), $langs->trans("ConfirmValidatePayment"), 'confirm_valide','',0,2);
134
135}
136*/
137
138
139$linkback = '<a href="'.DOL_URL_ROOT.'/salaries/payments.php">'.$langs->trans("BackToList").'</a>';
140
141dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'id', '');
142
143
144print '<div class="fichecenter">';
145print '<div class="underbanner clearboth"></div>';
146
147print '<table class="border centpercent tableforfield">';
148
149// Ref
150/*print '<tr><td class="titlefield">'.$langs->trans('Ref').'</td>';
151print '<td colspan="3">';
152print $form->showrefnav($object,'id','',1,'rowid','id');
153print '</td></tr>';*/
154
155// Date
156print '<tr><td>';
157print $form->editfieldkey("Date", 'datep', $object->datep, $object, 1, 'datehourpicker');
158print '</td><td>';
159print $form->editfieldval("Date", 'datep', $object->datep, $object, 1, 'datehourpicker', '', null, null, '', 0, '', 'id', 'tzuserrel', array('addnowlink' => 1));
160print "</td>";
161print '</tr>';
162
163// Mode
164print '<tr><td>'.$langs->trans('Mode').'</td><td>';
165print $langs->trans("PaymentType".$object->type_code);
166print '</td></tr>';
167
168// Numero
169print '<tr><td>'.$langs->trans('Numero').'</td><td>'.dol_escape_htmltag($object->num_payment).'</td></tr>';
170
171// Montant
172print '<tr><td>'.$langs->trans('Amount').'</td><td>'.price($object->amount, 0, $langs, 1, -1, -1, $conf->currency).'</td></tr>';
173
174// Note
175print '<tr><td>'.$langs->trans('Note').'</td><td class="valeur sensiblehtmlcontent">'.dol_string_onlythesehtmltags(dol_htmlcleanlastbr($object->note_private)).'</td></tr>';
176
177// Bank account
178if (isModEnabled("bank")) {
179 if ($object->bank_account) {
180 $bankline = new AccountLine($db);
181 $bankline->fetch($object->bank_line);
182
183 print '<tr>';
184 print '<td>'.$langs->trans('BankTransactionLine').'</td>';
185 print '<td>';
186 print $bankline->getNomUrl(1, 0, 'showall');
187 print '</td>';
188 print '</tr>';
189 }
190}
191
192print '</table>';
193
194print '</div>';
195
196print dol_get_fiche_end();
197
198
199/*
200 * List of salaries paid
201 */
202
203$disable_delete = 0;
204$sql = 'SELECT f.rowid as scid, f.label, f.paye, f.amount as sc_amount, ps.amount';
205$sql .= ' FROM '.MAIN_DB_PREFIX.'payment_salary as ps,'.MAIN_DB_PREFIX.'salary as f';
206$sql .= ' WHERE ps.fk_salary = f.rowid';
207$sql .= ' AND f.entity = '.$conf->entity;
208$sql .= ' AND ps.rowid = '.((int) $object->id);
209
210dol_syslog("payment_salary/card.php", LOG_DEBUG);
211$resql = $db->query($sql);
212if ($resql) {
213 $num = $db->num_rows($resql);
214
215 $i = 0;
216 $total = 0;
217 print '<br>';
218
219 print '<div class="div-table-responsive">'; // You can use div-table-responsive-no-min if you don't need reserved height for your table
220 print '<table class="noborder centpercent">';
221 print '<tr class="liste_titre">';
222 print '<td>'.$langs->trans('Salary').'</td>';
223 print '<td>'.$langs->trans('Label').'</td>';
224 print '<td class="right">'.$langs->trans('ExpectedToPay').'</td>';
225 print '<td class="center">'.$langs->trans('Status').'</td>';
226 print '<td class="right">'.$langs->trans('PayedByThisPayment').'</td>';
227 print "</tr>\n";
228
229 if ($num > 0) {
230 while ($i < $num) {
231 $objp = $db->fetch_object($resql);
232
233 print '<tr class="oddeven">';
234 // Ref
235 print '<td>';
236 $salary->fetch($objp->scid);
237 print $salary->getNomUrl(1);
238 print "</td>\n";
239 // Label
240 print '<td>'.$objp->label.'</td>';
241 // Expected to pay
242 print '<td class="right">'.price($objp->sc_amount).'</td>';
243 // Status
244 print '<td class="center">'.$salary->getLibStatut(4, $objp->amount).'</td>';
245 // Amount paid
246 print '<td class="right">'.price($objp->amount).'</td>';
247 print "</tr>\n";
248 if ($objp->paye == 1) {
249 // If at least one invoice is paid, disable delete
250 $disable_delete = 1;
251 }
252 $total += $objp->amount;
253 $i++;
254 }
255 }
256
257 print "</table>\n";
258 print "</div>";
259
260 $db->free($resql);
261} else {
262 dol_print_error($db);
263}
264
265
266
267/*
268 * Button actions
269 */
270
271print '<div class="tabsAction">';
272
273if ($action == '') {
274 if ($user->hasRight('salaries', 'delete')) {
275 if (!$disable_delete) {
276 print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', 1);
277 } else {
278 print dolGetButtonAction($langs->trans("CantRemovePaymentSalaryPaid"), $langs->trans("Delete"), 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', 0);
279 }
280 }
281}
282
283print '</div>';
284
285// End of page
286llxFooter();
287$db->close();
$id
Definition account.php:39
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:58
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 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.
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...
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_string_onlythesehtmltags($stringtoclean, $cleanalsosomestyles=1, $removeclassattribute=1, $cleanalsojavascript=0, $allowiframe=0, $allowed_tags=array(), $allowlink=0, $allowscript=0, $allowstyle=0)
Clean a string to keep only desirable HTML tags.
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.
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.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
dol_htmlcleanlastbr($stringtodecode)
This function remove all ending and br at end.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
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.