dolibarr 24.0.0-beta
card.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2015-2017 Alexandre Spangaro <aspangaro@open-dsi.fr>
3 * Copyright (C) 2024-2025 MDW <mdeweerd@users.noreply.github.com>
4 * Copyright (C) 2024-2026 Frédéric France <frederic.france@free.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';
35require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
36require_once DOL_DOCUMENT_ROOT.'/expensereport/class/paymentexpensereport.class.php';
37require_once DOL_DOCUMENT_ROOT.'/core/modules/expensereport/modules_expensereport.php';
38require_once DOL_DOCUMENT_ROOT.'/core/lib/expensereport.lib.php';
39if (isModEnabled("bank")) {
40 require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
41}
42
43// Load translation files required by the page
44$langs->loadLangs(array('bills', 'banks', 'companies', 'trips'));
45
46$id = GETPOST('rowid') ? GETPOSTINT('rowid') : GETPOSTINT('id');
47$action = GETPOST('action', 'aZ09');
48$confirm = GETPOST('confirm');
49
51
52if ($id > 0) {
53 $result = $object->fetch($id);
54 if (!$result) {
55 dol_print_error($db, 'Failed to get payment id '.$id);
56 }
57}
58
59// Security check
60if ($user->isExternalUser()) {
61 $socid = $user->isExternalUser();
62}
63
64$result = restrictedArea($user, 'expensereport', $object->fk_expensereport, 'expensereport');
65
66
67/*
68 * Actions
69 */
70
71// Delete payment
72if ($action == 'confirm_delete' && $confirm == 'yes' && $user->hasRight('expensereport', 'supprimer')) {
73 $db->begin();
74
75 $result = $object->delete($user);
76 if ($result > 0) {
77 $db->commit();
78 header("Location: ".DOL_URL_ROOT."/expensereport/index.php");
79 exit;
80 } else {
81 setEventMessages($object->error, $object->errors, 'errors');
82 $db->rollback();
83 }
84}
85
86
87/*
88 * View
89 */
90
91llxHeader('', $langs->trans("ExpenseReportPayment"));
92
93$form = new Form($db);
94
96
97print dol_get_fiche_head($head, 'payment', $langs->trans("ExpenseReportPayment"), -1, 'payment');
98
99/*
100 * Confirm deleting of the payment
101 */
102if ($action == 'delete') {
103 print $form->formconfirm('card.php?id='.$object->id, $langs->trans("DeletePayment"), $langs->trans("ConfirmDeletePayment"), 'confirm_delete', '', 0, 2);
104}
105
106$linkback = '';
107// $linkback = '<a href="' . DOL_URL_ROOT . '/expensereport/payment/list.php">' . $langs->trans("BackToList") . '</a>';
108
109dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', '');
110
111print '<div class="fichecenter">';
112print '<div class="underbanner clearboth"></div>';
113
114print '<table class="border centpercent">'."\n";
115
116// Date payment
117print '<tr><td class="titlefield">'.$langs->trans('Date').'</td><td>'.dol_print_date($object->datep, 'day').'</td></tr>';
118
119// Mode
120print '<tr><td>'.$langs->trans('PaymentMode').'</td><td>'.$langs->trans("PaymentType".$object->type_code).'</td></tr>';
121
122// Number
123print '<tr><td>'.$langs->trans('Numero').'</td><td>'.dol_escape_htmltag($object->num_payment).'</td></tr>';
124
125// Amount
126print '<tr><td>'.$langs->trans('Amount').'</td><td>'.price($object->amount, 0, $langs, 1, -1, -1, $conf->currency).'</td></tr>';
127
128// Note public
129print '<tr><td class="tdtop">'.$langs->trans('Note').'</td><td class="valeur sensiblehtmlcontent">'.dol_string_onlythesehtmltags(dol_htmlentitiesbr((string) $object->note_public)).'</td></tr>';
130
131$disable_delete = 0;
132$title_button = '';
133// Bank account
134if (isModEnabled("bank")) {
135 if ($object->bank_account) {
136 $bankline = new AccountLine($db);
137 $bankline->fetch($object->bank_line);
138 if ($bankline->rappro) {
139 $disable_delete = 1;
140 $title_button = dol_escape_htmltag($langs->transnoentitiesnoconv("CantRemoveConciliatedPayment"));
141 }
142
143 print '<tr>';
144 print '<td>'.$langs->trans('BankTransactionLine').'</td>';
145 print '<td colspan="3">';
146 print $bankline->getNomUrl(1, 0, 'showconciliated');
147 print '</td>';
148 print '</tr>';
149
150 print '<tr>';
151 print '<td>'.$langs->trans('BankAccount').'</td>';
152 print '<td colspan="3">';
153 $accountstatic = new Account($db);
154 $accountstatic->fetch($bankline->fk_account);
155 print $accountstatic->getNomUrl(1);
156 print '</td>';
157 print '</tr>';
158 }
159}
160
161print '</table>';
162
163print '</div>';
164
165print dol_get_fiche_end();
166
167
168/*
169 * List of expense report paid
170 */
171
172$sql = 'SELECT er.rowid as eid, er.paid, er.total_ttc, per.amount';
173$sql .= ' FROM '.MAIN_DB_PREFIX.'payment_expensereport as per,'.MAIN_DB_PREFIX.'expensereport as er';
174$sql .= ' WHERE per.fk_expensereport = er.rowid';
175$sql .= ' AND er.entity IN ('.getEntity('expensereport').')';
176$sql .= ' AND per.rowid = '.((int) $id);
177
178dol_syslog("expensereport/payment/card.php", LOG_DEBUG);
179$resql = $db->query($sql);
180if ($resql) {
181 $num = $db->num_rows($resql);
182
183 $i = 0;
184 $total = 0;
185 print '<br>';
186
187 print '<div class="div-table-responsive">';
188 print '<table class="noborder centpercent">';
189
190 print '<tr class="liste_titre">';
191 print '<td>'.$langs->trans('ExpenseReport').'</td>';
192 print '<td class="right">'.$langs->trans('ExpectedToPay').'</td>';
193 print '<td class="right">'.$langs->trans('PayedByThisPayment').'</td>';
194 print '<td class="right">'.$langs->trans('RemainderToPay').'</td>';
195 print '<td class="center">'.$langs->trans('Status').'</td>';
196 print "</tr>\n";
197
198 if ($num > 0) {
199 while ($i < $num) {
200 $objp = $db->fetch_object($resql);
201
202 print '<tr class="oddeven">';
203
204 $expensereport = new ExpenseReport($db);
205 $expensereport->fetch($objp->eid);
206
207 // Expense report
208 print '<td>';
209 print $expensereport->getNomUrl(1);
210 print "</td>\n";
211
212 // Expected to pay
213 print '<td class="right">'.price($objp->total_ttc).'</td>';
214
215 // Amount paid
216 print '<td class="right">'.price($objp->amount).'</td>';
217
218 // Remain to pay
219 print '<td class="right">'.price($objp->total_ttc - $objp->amount).'</td>';
220
221 // Status
222 print '<td class="center">'.$expensereport->getLibStatut(4).'</td>';
223
224 print "</tr>\n";
225
226 if ($objp->paid == 1) { // If at least one invoice is paid, disable delete
227 $disable_delete = 2;
228 $title_button = $langs->trans("CantRemovePaymentWithOneInvoicePaid");
229 }
230 $total += $objp->amount;
231 $i++;
232 }
233 }
234
235
236 print "</table>\n";
237 print '</div>';
238
239 $db->free($resql);
240} else {
242}
243
244
245
246/*
247 * Actions buttons
248 */
249print '<div class="tabsAction">';
250
251// Delete
252if ($action == '') {
253 if ($user->hasRight('expensereport', 'supprimer')) {
254 if (!$disable_delete) {
255 print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', 1);
256 } else {
257 print dolGetButtonAction($title_button, $langs->trans("Delete"), 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', 0);
258 }
259 }
260}
261
262print '</div>';
263
264// End of page
265llxFooter();
266$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 accounts.
Class to manage bank transaction lines.
Class to manage Trips and Expenses.
Class to manage generation of HTML components Only common components must be here.
Class to manage payments of expense report.
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $conf
The main.inc.php has been included so the following variable are now defined:
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $db
API class for accounts.
payment_expensereport_prepare_head(PaymentExpenseReport $object)
Returns an array with the tabs for the "Expense report payment" section It loads tabs from modules lo...
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_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.
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.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_htmlentitiesbr($stringtoencode, $nl2brmode=0, $pagecodefrom='UTF-8', $removelasteolbr=1)
This function is called to encode a string into a HTML string but differs from htmlentities because a...
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_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.