dolibarr 21.0.0-beta
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
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 $result = $object->delete($user);
80 if ($result > 0) {
81 $db->commit();
82 header("Location: ".DOL_URL_ROOT."/salaries/payments.php");
83 exit;
84 } else {
85 setEventMessages($object->error, $object->errors, 'errors');
86 $db->rollback();
87 }
88}
89
90if ($action == 'setdatep' && GETPOST('datepday') && $user->hasRight('salaries', 'write')) {
91 $datepaye = dol_mktime(GETPOSTINT('datephour'), GETPOSTINT('datepmin'), GETPOSTINT('datepsec'), GETPOSTINT('datepmonth'), GETPOSTINT('datepday'), GETPOSTINT('datepyear'), 'tzuserrel');
92 $res = $object->updatePaymentDate($datepaye);
93 if ($res === 0) {
94 setEventMessages($langs->trans('PaymentDateUpdateSucceeded'), null, 'mesgs');
95 } else {
96 setEventMessages($langs->trans('PaymentDateUpdateFailed'), null, 'errors');
97 }
98}
99
100
101/*
102 * View
103 */
104
105$form = new Form($db);
106
107llxHeader('', $langs->trans("SalaryPayment"));
108
109$h = 0;
110
111$head = array();
112
113$head[$h][0] = DOL_URL_ROOT.'/salaries/payment_salary/card.php?id='.$id;
114$head[$h][1] = $langs->trans("SalaryPayment");
115$hselected = (string) $h;
116$h++;
117
118/*
119$head[$h][0] = DOL_URL_ROOT.'/compta/payment_sc/info.php?id='.$id;
120$head[$h][1] = $langs->trans("Info");
121$h++;
122*/
123
124
125print dol_get_fiche_head($head, $hselected, $langs->trans("SalaryPayment"), -1, 'payment');
126
127/*
128 * Deletion confirmation of payment
129 */
130if ($action == 'delete') {
131 print $form->formconfirm('card.php?id='.$object->id, $langs->trans("DeleteSalary"), $langs->trans("ConfirmDeleteSalaryPayment"), 'confirm_delete', '', 0, 2);
132}
133
134/*
135 * Validation confirmation of payment
136 */
137/*
138if ($action == 'valide')
139{
140 $facid = GETPOST('facid', 'int');
141 print $form->formconfirm('card.php?id='.$object->id.'&amp;facid='.$facid, $langs->trans("ValidatePayment"), $langs->trans("ConfirmValidatePayment"), 'confirm_valide','',0,2);
142
143}
144*/
145
146
147$linkback = '<a href="'.DOL_URL_ROOT.'/salaries/payments.php">'.$langs->trans("BackToList").'</a>';
148
149dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'id', '');
150
151
152print '<div class="fichecenter">';
153print '<div class="underbanner clearboth"></div>';
154
155print '<table class="border centpercent tableforfield">';
156
157// Ref
158/*print '<tr><td class="titlefield">'.$langs->trans('Ref').'</td>';
159print '<td colspan="3">';
160print $form->showrefnav($object,'id','',1,'rowid','id');
161print '</td></tr>';*/
162
163// Date
164print '<tr><td>';
165print $form->editfieldkey("Date", 'datep', $object->datep, $object, 1, 'datehourpicker');
166print '</td><td>';
167print $form->editfieldval("Date", 'datep', $object->datep, $object, 1, 'datehourpicker', '', null, null, '', 0, '', 'id', 'tzuserrel', array('addnowlink' => 1));
168print "</td>";
169print '</tr>';
170
171// Mode
172print '<tr><td>'.$langs->trans('Mode').'</td><td>';
173print $langs->trans("PaymentType".$object->type_code);
174print '</td></tr>';
175
176// Numero
177print '<tr><td>'.$langs->trans('Numero').'</td><td>'.dol_escape_htmltag($object->num_payment).'</td></tr>';
178
179// Montant
180print '<tr><td>'.$langs->trans('Amount').'</td><td>'.price($object->amount, 0, $langs, 1, -1, -1, $conf->currency).'</td></tr>';
181
182// Note
183print '<tr><td>'.$langs->trans('Note').'</td><td class="valeur sensiblehtmlcontent">'.dol_string_onlythesehtmltags(dol_htmlcleanlastbr($object->note_private)).'</td></tr>';
184
185// Bank account
186if (isModEnabled("bank")) {
187 if ($object->bank_account) {
188 $bankline = new AccountLine($db);
189 $bankline->fetch($object->bank_line);
190
191 print '<tr>';
192 print '<td>'.$langs->trans('BankTransactionLine').'</td>';
193 print '<td>';
194 print $bankline->getNomUrl(1, 0, 'showall');
195 print '</td>';
196 print '</tr>';
197 }
198}
199
200print '</table>';
201
202print '</div>';
203
204print dol_get_fiche_end();
205
206
207/*
208 * List of salaries paid
209 */
210
211$disable_delete = 0;
212$sql = 'SELECT f.rowid as scid, f.label, f.paye, f.amount as sc_amount, ps.amount';
213$sql .= ' FROM '.MAIN_DB_PREFIX.'payment_salary as ps,'.MAIN_DB_PREFIX.'salary as f';
214$sql .= ' WHERE ps.fk_salary = f.rowid';
215$sql .= ' AND f.entity = '.$conf->entity;
216$sql .= ' AND ps.rowid = '.((int) $object->id);
217
218dol_syslog("payment_salary/card.php", LOG_DEBUG);
219$resql = $db->query($sql);
220if ($resql) {
221 $num = $db->num_rows($resql);
222
223 $i = 0;
224 $total = 0;
225 print '<br>';
226
227 print '<div class="div-table-responsive">'; // You can use div-table-responsive-no-min if you don't need reserved height for your table
228 print '<table class="noborder centpercent">';
229 print '<tr class="liste_titre">';
230 print '<td>'.$langs->trans('Salary').'</td>';
231 print '<td>'.$langs->trans('Label').'</td>';
232 print '<td class="right">'.$langs->trans('ExpectedToPay').'</td>';
233 print '<td class="center">'.$langs->trans('Status').'</td>';
234 print '<td class="right">'.$langs->trans('PayedByThisPayment').'</td>';
235 print "</tr>\n";
236
237 if ($num > 0) {
238 while ($i < $num) {
239 $objp = $db->fetch_object($resql);
240
241 print '<tr class="oddeven">';
242 // Ref
243 print '<td>';
244 $salary->fetch($objp->scid);
245 print $salary->getNomUrl(1);
246 print "</td>\n";
247 // Label
248 print '<td>'.$objp->label.'</td>';
249 // Expected to pay
250 print '<td class="right">'.price($objp->sc_amount).'</td>';
251 // Status
252 print '<td class="center">'.$salary->getLibStatut(4, $objp->amount).'</td>';
253 // Amount paid
254 print '<td class="right">'.price($objp->amount).'</td>';
255 print "</tr>\n";
256 if ($objp->paye == 1) {
257 // If at least one invoice is paid, disable delete
258 $disable_delete = 1;
259 }
260 $total += $objp->amount;
261 $i++;
262 }
263 }
264
265 print "</table>\n";
266 print "</div>";
267
268 $db->free($resql);
269} else {
270 dol_print_error($db);
271}
272
273
274
275/*
276 * Button actions
277 */
278
279print '<div class="tabsAction">';
280
281if ($action == '') {
282 if ($user->hasRight('salaries', 'delete')) {
283 if (!$disable_delete) {
284 print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', 1);
285 } else {
286 print dolGetButtonAction($langs->trans("CantRemovePaymentSalaryPaid"), $langs->trans("Delete"), 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', 0);
287 }
288 }
289}
290
291print '</div>';
292
293// End of page
294llxFooter();
295$db->close();
$id
Definition account.php:48
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:66
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:71
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...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
Definition member.php:79
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.