28require
'../../main.inc.php';
30require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formaccounting.class.php';
31require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
32require_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
33require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingaccount.class.php';
34require_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
35require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
36require_once DOL_DOCUMENT_ROOT.
'/core/lib/accounting.lib.php';
39$langs->loadLangs(array(
"compta",
"bills",
"other",
"accountancy",
"trips",
"productbatch",
"hrm"));
41$optioncss =
GETPOST(
'optioncss',
'aZ');
43$account_parent =
GETPOST(
'account_parent');
44$changeaccount =
GETPOST(
'changeaccount');
46$search_lineid =
GETPOST(
'search_lineid',
'alpha');
47$search_login =
GETPOST(
'search_login',
'alpha');
48$search_expensereport =
GETPOST(
'search_expensereport',
'alpha');
49$search_label =
GETPOST(
'search_label',
'alpha');
50$search_desc =
GETPOST(
'search_desc',
'alpha');
51$search_amount =
GETPOST(
'search_amount',
'alpha');
52$search_account =
GETPOST(
'search_account',
'alpha');
53$search_vat =
GETPOST(
'search_vat',
'alpha');
54$search_date_startday =
GETPOSTINT(
'search_date_startday');
55$search_date_startmonth =
GETPOSTINT(
'search_date_startmonth');
56$search_date_startyear =
GETPOSTINT(
'search_date_startyear');
57$search_date_endday =
GETPOSTINT(
'search_date_endday');
58$search_date_endmonth =
GETPOSTINT(
'search_date_endmonth');
59$search_date_endyear =
GETPOSTINT(
'search_date_endyear');
60$search_date_start =
dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear);
61$search_date_end =
dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear);
65$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
66$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
68if (empty($page) || $page < 0) {
71$offset = $limit * $page;
75 $sortfield =
"erd.date, erd.rowid";
86if (!isModEnabled(
'accounting')) {
89if ($user->socid > 0) {
92if (!$user->hasRight(
'accounting',
'bind',
'write')) {
105if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
108 $search_expensereport =
'';
112 $search_account =
'';
114 $search_date_startday =
'';
115 $search_date_startmonth =
'';
116 $search_date_startyear =
'';
117 $search_date_endday =
'';
118 $search_date_endmonth =
'';
119 $search_date_endyear =
'';
120 $search_date_start =
'';
121 $search_date_end =
'';
124if (is_array($changeaccount) && count($changeaccount) > 0 && $user->hasRight(
'accounting',
'bind',
'write')) {
129 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Account")),
null,
'errors');
135 $sql1 =
"UPDATE ".MAIN_DB_PREFIX.
"expensereport_det as erd";
136 $sql1 .=
" SET erd.fk_code_ventilation=".(GETPOSTINT(
'account_parent') > 0 ?
GETPOSTINT(
'account_parent') :
'0');
137 $sql1 .=
' WHERE erd.rowid IN ('.$db->sanitize(implode(
',', $changeaccount)).
')';
139 dol_syslog(
'accountancy/expensereport/lines.php::changeaccount sql= '.$sql1);
140 $resql1 = $db->query($sql1);
153 $account_parent =
'';
157if (
GETPOST(
'sortfield') ==
'erd.date, erd.rowid') {
158 $value = (
GETPOST(
'sortorder') ==
'asc,asc' ? 0 : 1);
159 require_once DOL_DOCUMENT_ROOT.
'/core/lib/admin.lib.php';
160 $res =
dolibarr_set_const($db,
"ACCOUNTING_LIST_SORT_VENTILATION_DONE", $value,
'yesno', 0,
'', $conf->entity);
168$form =
new Form($db);
171$help_url =
'EN:Module_Double_Entry_Accounting|FR:Module_Comptabilité_en_Partie_Double#Liaisons_comptables';
173llxHeader(
'', $langs->trans(
"ExpenseReportsVentilation").
' - '.$langs->trans(
"Dispatched"), $help_url,
'', 0, 0,
'',
'',
'',
'mod-accountancy accountancy-expensereport page-lines');
175print
'<script type="text/javascript">
177 $(\'#select-all\').click(function(event) {
178 // Iterate each checkbox
179 $(\':checkbox\').each(function() {
183 $(\'#unselect-all\').click(function(event) {
184 // Iterate each checkbox
185 $(\':checkbox\').each(function() {
186 this.checked = false;
195$sql =
"SELECT er.ref, er.rowid as erid,";
196$sql .=
" erd.rowid, erd.fk_c_type_fees, erd.comments, erd.total_ht, erd.fk_code_ventilation, erd.tva_tx, erd.vat_src_code, erd.date,";
197$sql .=
" f.id as type_fees_id, f.code as type_fees_code, f.label as type_fees_label,";
198$sql .=
" u.rowid as userid, u.login, u.lastname, u.firstname, u.email, u.gender, u.employee, u.photo, u.statut,";
199$sql .=
" aa.label, aa.labelshort, aa.account_number";
200$sql .=
" FROM ".MAIN_DB_PREFIX.
"expensereport as er";
201$sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"expensereport_det as erd ON er.rowid = erd.fk_expensereport";
202$sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"accounting_account as aa ON aa.rowid = erd.fk_code_ventilation";
203$sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"c_type_fees as f ON f.id = erd.fk_c_type_fees";
204$sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"user as u ON u.rowid = er.fk_user_author";
205$sql .=
" WHERE erd.fk_code_ventilation > 0";
206$sql .=
" AND er.entity IN (".getEntity(
'expensereport', 0).
")";
209if (strlen($search_lineid)) {
212if (strlen(trim($search_login))) {
215if (strlen(trim($search_expensereport))) {
218if (strlen(trim($search_label))) {
221if (strlen(trim($search_desc))) {
224if (strlen(trim($search_amount))) {
227if (strlen(trim($search_account))) {
230if (strlen(trim($search_vat))) {
233if ($search_date_start) {
234 $sql .=
" AND erd.date >= '".$db->idate($search_date_start).
"'";
236if ($search_date_end) {
237 $sql .=
" AND erd.date <= '".$db->idate($search_date_end).
"'";
239$sql .=
" AND er.entity IN (".getEntity(
'expensereport', 0).
")";
241$sql .= $db->order($sortfield, $sortorder);
244$nbtotalofrecords =
'';
246 $result = $db->query($sql);
247 $nbtotalofrecords = $db->num_rows($result);
248 if (($page * $limit) > $nbtotalofrecords) {
254$sql .= $db->plimit($limit + 1, $offset);
256dol_syslog(
"accountancy/expensereport/lines.php", LOG_DEBUG);
257$result = $db->query($sql);
259 $num_lines = $db->num_rows($result);
263 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
264 $param .=
'&contextpage='.urlencode($contextpage);
266 if ($limit > 0 && $limit != $conf->liste_limit) {
267 $param .=
'&limit='.((int) $limit);
270 $param .=
'&search_login='.urlencode($search_login);
272 if ($search_expensereport) {
273 $param .=
"&search_expensereport=".urlencode($search_expensereport);
276 $param .=
"&search_label=".urlencode($search_label);
279 $param .=
"&search_desc=".urlencode($search_desc);
281 if ($search_account) {
282 $param .=
"&search_account=".urlencode($search_account);
285 $param .=
"&search_vat=".urlencode($search_vat);
287 if ($search_date_startday) {
288 $param .=
'&search_date_startday='.urlencode((
string) ($search_date_startday));
290 if ($search_date_startmonth) {
291 $param .=
'&search_date_startmonth='.urlencode((
string) ($search_date_startmonth));
293 if ($search_date_startyear) {
294 $param .=
'&search_date_startyear='.urlencode((
string) ($search_date_startyear));
296 if ($search_date_endday) {
297 $param .=
'&search_date_endday='.urlencode((
string) ($search_date_endday));
299 if ($search_date_endmonth) {
300 $param .=
'&search_date_endmonth='.urlencode((
string) ($search_date_endmonth));
302 if ($search_date_endyear) {
303 $param .=
'&search_date_endyear='.urlencode((
string) ($search_date_endyear));
306 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="post">'.
"\n";
307 print
'<input type="hidden" name="action" value="ventil">';
308 if ($optioncss !=
'') {
309 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
311 print
'<input type="hidden" name="token" value="'.newToken().
'">';
312 print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
313 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
314 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
315 print
'<input type="hidden" name="page" value="'.$page.
'">';
318 print_barre_liste($langs->trans(
"ExpenseReportLinesDone"), $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder,
'', $num_lines, $nbtotalofrecords,
'title_accountancy', 0,
'',
'', $limit);
319 print
'<span class="opacitymedium">'.$langs->trans(
"DescVentilDoneExpenseReport").
'</span><br>';
321 print
'<br>'.$langs->trans(
"ChangeAccount").
' <div class="inline-block paddingbottom">';
322 print $formaccounting->select_account($account_parent,
'account_parent', 2, array(), 0, 0,
'maxwidth300 maxwidthonsmartphone valignmiddle');
323 print
'<input type="submit" class="button small smallpaddingimp valignmiddle" value="'.$langs->trans(
"ChangeBinding").
'"/></div>';
327 print
'<div class="div-table-responsive">';
328 print
'<table class="tagtable liste'.($moreforfilter ?
" listwithfilterbefore" :
"").
'">'.
"\n";
330 print
'<tr class="liste_titre_filter">';
331 print
'<td class="liste_titre"><input type="text" class="flat maxwidth40" name="search_lineid" value="'.dol_escape_htmltag($search_lineid).
'"></td>';
332 print
'<td class="liste_titre"><input type="text" name="search_login" class="maxwidth50" value="'.$search_login.
'"></td>';
333 print
'<td><input type="text" class="flat maxwidth50" name="search_expensereport" value="'.dol_escape_htmltag($search_expensereport).
'"></td>';
335 print
'<td class="liste_titre"></td>';
337 print
'<td class="liste_titre center">';
338 print
'<div class="nowrapfordate">';
339 print $form->selectDate($search_date_start ? $search_date_start : -1,
'search_date_start', 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'From'));
341 print
'<div class="nowrapfordate">';
342 print $form->selectDate($search_date_end ? $search_date_end : -1,
'search_date_end', 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'to'));
345 print
'<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_label" value="'.dol_escape_htmltag($search_label).
'"></td>';
346 print
'<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_desc" value="'.dol_escape_htmltag($search_desc).
'"></td>';
347 print
'<td class="liste_titre right"><input type="text" class="flat maxwidth50" name="search_amount" value="'.dol_escape_htmltag($search_amount).
'"></td>';
348 print
'<td class="liste_titre center"><input type="text" class="flat maxwidth50" name="search_vat" size="1" placeholder="%" value="'.dol_escape_htmltag($search_vat).
'"></td>';
349 print
'<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_account" value="'.dol_escape_htmltag($search_account).
'"></td>';
350 print
'<td class="liste_titre center">';
351 $searchpicto = $form->showFilterButtons();
356 print
'<tr class="liste_titre">';
359 print_liste_field_titre(
"ExpenseReport", $_SERVER[
"PHP_SELF"],
"er.ref",
"", $param,
'', $sortfield, $sortorder);
361 print_liste_field_titre(
"DateValidation", $_SERVER[
"PHP_SELF"],
"er.date_valid",
"", $param,
'', $sortfield, $sortorder,
'center ');
363 print_liste_field_titre(
"DateOfLine", $_SERVER[
"PHP_SELF"],
"erd.date, erd.rowid",
"", $param,
'', $sortfield, $sortorder,
'center ');
365 print_liste_field_titre(
"Description", $_SERVER[
"PHP_SELF"],
"erd.comments",
"", $param,
'', $sortfield, $sortorder);
366 print_liste_field_titre(
"Amount", $_SERVER[
"PHP_SELF"],
"erd.total_ht",
"", $param,
'', $sortfield, $sortorder,
'right ');
367 print_liste_field_titre(
"VATRate", $_SERVER[
"PHP_SELF"],
"erd.tva_tx",
"", $param,
'', $sortfield, $sortorder,
'center ');
368 print_liste_field_titre(
"AccountAccounting", $_SERVER[
"PHP_SELF"],
"aa.account_number",
"", $param,
'', $sortfield, $sortorder);
369 $checkpicto = $form->showCheckAddButtons();
375 $userstatic =
new User($db);
378 while ($i < min($num_lines, $limit)) {
379 $objp = $db->fetch_object($result);
381 $expensereportstatic->ref = $objp->ref;
382 $expensereportstatic->id = $objp->erid;
384 $userstatic->id = $objp->userid;
385 $userstatic->ref = $objp->label;
386 $userstatic->login = $objp->login;
387 $userstatic->status = $objp->statut;
388 $userstatic->email = $objp->email;
389 $userstatic->gender = $objp->gender;
390 $userstatic->firstname = $objp->firstname;
391 $userstatic->lastname = $objp->lastname;
392 $userstatic->employee = $objp->employee;
393 $userstatic->photo = $objp->photo;
395 $accountingaccountstatic->rowid = $objp->fk_compte;
396 $accountingaccountstatic->label = $objp->label;
397 $accountingaccountstatic->labelshort = $objp->labelshort;
398 $accountingaccountstatic->account_number = $objp->account_number;
400 print
'<tr class="oddeven">';
403 print
'<td>'.$objp->rowid.
'</td>';
406 print
'<td class="nowraponall">';
407 print $userstatic->getNomUrl(-1,
'', 0, 0, 24, 1,
'login',
'', 1);
411 print
'<td>'.$expensereportstatic->getNomUrl(1).
'</td>';
415 print
'<td class="center">'.dol_print_date($db->jdate($objp->date_valid),
'day').
'</td>';
418 print
'<td class="center">'.dol_print_date($db->jdate($objp->date),
'day').
'</td>';
421 print
'<td class="tdoverflow">'.($langs->trans($objp->type_fees_code) == $objp->type_fees_code ? $objp->type_fees_label : $langs->trans(($objp->type_fees_code))).
'</td>';
427 print $form->textwithtooltip(
dol_trunc($text, $trunclength), $objp->comments);
431 print
'<td class="right nowraponall amount">'.price($objp->total_ht).
'</td>';
434 print
'<td class="center">'.vatrate($objp->tva_tx.($objp->vat_src_code ?
' ('.$objp->vat_src_code.
')' :
'')).
'</td>';
437 print
'<td class="tdoverflowmax200" title="'.dol_escape_htmltag($accountingaccountstatic->label).
'">';
438 print
'<a class="editfielda reposition marginleftonly marginrightonly" href="./card.php?id='.$objp->rowid.
'&backtopage='.urlencode($_SERVER[
"PHP_SELF"].($param ?
'?'.$param :
'')).
'">';
441 print $accountingaccountstatic->getNomUrl(0, 1, 1,
'', 1);
444 print
'<td class="center"><input type="checkbox" class="checkforaction" name="changeaccount[]" value="'.$objp->rowid.
'"/></td>';
449 if ($num_lines == 0) {
454 print
'<tr><td colspan="'.$colspan.
'"><span class="opacitymedium">'.$langs->trans(
"NoRecordFound").
'</span></td></tr>';
460 if ($nbtotalofrecords > $limit) {
461 print_barre_liste(
'', $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder,
'', $num_lines, $nbtotalofrecords,
'', 0,
'',
'', $limit, 1);
466 print $db->lasterror();
dolibarr_set_const($db, $name, $value, $type='chaine', $visible=0, $note='', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
Class to manage accounting accounts.
Class to manage Trips and Expenses.
const STATUS_CLOSED
Classified paid.
Class to manage Dolibarr users.
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...
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dolGetFirstLineOfText($text, $nboflines=1, $charset='UTF-8')
Return first line of text.
dol_string_nohtmltag($stringtoclean, $removelinefeed=1, $pagecodeto='UTF-8', $strip_tags=0, $removedoublespaces=1)
Clean a string from all HTML tags and entities.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
natural_search($fields, $value, $mode=0, $nofirstand=0)
Generate natural SQL search string for a criteria (this criteria can be tested on one or several fiel...
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '…' if string larger than length.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.