27 require
'../../main.inc.php';
29 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formaccounting.class.php';
30 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
31 require_once DOL_DOCUMENT_ROOT.
'/expensereport/class/expensereport.class.php';
32 require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingaccount.class.php';
33 require_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
34 require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
35 require_once DOL_DOCUMENT_ROOT.
'/core/lib/accounting.lib.php';
38 $langs->loadLangs(array(
"compta",
"bills",
"other",
"accountancy",
"trips",
"productbatch",
"hrm"));
40 $optioncss =
GETPOST(
'optioncss',
'aZ');
42 $account_parent =
GETPOST(
'account_parent',
'int');
43 $changeaccount =
GETPOST(
'changeaccount');
45 $search_login =
GETPOST(
'search_login',
'alpha');
46 $search_expensereport =
GETPOST(
'search_expensereport',
'alpha');
47 $search_label =
GETPOST(
'search_label',
'alpha');
48 $search_desc =
GETPOST(
'search_desc',
'alpha');
49 $search_amount =
GETPOST(
'search_amount',
'alpha');
50 $search_account =
GETPOST(
'search_account',
'alpha');
51 $search_vat =
GETPOST(
'search_vat',
'alpha');
52 $search_date_startday =
GETPOST(
'search_date_startday',
'int');
53 $search_date_startmonth =
GETPOST(
'search_date_startmonth',
'int');
54 $search_date_startyear =
GETPOST(
'search_date_startyear',
'int');
55 $search_date_endday =
GETPOST(
'search_date_endday',
'int');
56 $search_date_endmonth =
GETPOST(
'search_date_endmonth',
'int');
57 $search_date_endyear =
GETPOST(
'search_date_endyear',
'int');
58 $search_date_start =
dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear);
59 $search_date_end =
dol_mktime(23, 59, 59, $search_date_endmonth, $search_date_endday, $search_date_endyear);
62 $limit =
GETPOST(
'limit',
'int') ?
GETPOST(
'limit',
'int') : (empty($conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION) ? $conf->liste_limit : $conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION);
63 $sortfield =
GETPOST(
'sortfield',
'aZ09comma');
64 $sortorder =
GETPOST(
'sortorder',
'aZ09comma');
66 if (empty($page) || $page < 0) {
69 $offset = $limit * $page;
70 $pageprev = $page - 1;
71 $pagenext = $page + 1;
73 $sortfield =
"erd.date, erd.rowid";
76 if ($conf->global->ACCOUNTING_LIST_SORT_VENTILATION_DONE > 0) {
87 if ($user->socid > 0) {
90 if (!$user->hasRight(
'accounting',
'mouvements',
'lire')) {
103 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
105 $search_expensereport =
'';
109 $search_account =
'';
111 $search_date_startday =
'';
112 $search_date_startmonth =
'';
113 $search_date_startyear =
'';
114 $search_date_endday =
'';
115 $search_date_endmonth =
'';
116 $search_date_endyear =
'';
117 $search_date_start =
'';
118 $search_date_end =
'';
121 if (is_array($changeaccount) && count($changeaccount) > 0 && $user->hasRight(
'accounting',
'bind',
'write')) {
124 if (!(
GETPOST(
'account_parent',
'int') >= 0)) {
126 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Account")),
null,
'errors');
132 $sql1 =
"UPDATE ".MAIN_DB_PREFIX.
"expensereport_det as erd";
133 $sql1 .=
" SET erd.fk_code_ventilation=".(GETPOST(
'account_parent',
'int') > 0 ?
GETPOST(
'account_parent',
'int') :
'0');
134 $sql1 .=
' WHERE erd.rowid IN ('.$db->sanitize(implode(
',', $changeaccount)).
')';
136 dol_syslog(
'accountancy/expensereport/lines.php::changeaccount sql= '.$sql1);
137 $resql1 = $db->query($sql1);
150 $account_parent =
'';
154 if (
GETPOST(
'sortfield') ==
'erd.date, erd.rowid') {
155 $value = (
GETPOST(
'sortorder') ==
'asc,asc' ? 0 : 1);
156 require_once DOL_DOCUMENT_ROOT.
'/core/lib/admin.lib.php';
157 $res =
dolibarr_set_const($db,
"ACCOUNTING_LIST_SORT_VENTILATION_DONE", $value,
'yesno', 0,
'', $conf->entity);
168 llxHeader(
'', $langs->trans(
"ExpenseReportsVentilation").
' - '.$langs->trans(
"Dispatched"));
170 print
'<script type="text/javascript">
172 $(\'#select-all\').click(function(event) {
173 // Iterate each checkbox
174 $(\':checkbox\').each(function() {
178 $(\'#unselect-all\').click(function(event) {
179 // Iterate each checkbox
180 $(\':checkbox\').each(function() {
181 this.checked = false;
190 $sql =
"SELECT er.ref, er.rowid as erid,";
191 $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,";
192 $sql .=
" f.id as type_fees_id, f.code as type_fees_code, f.label as type_fees_label,";
193 $sql .=
" u.rowid as userid, u.login, u.lastname, u.firstname, u.email, u.gender, u.employee, u.photo, u.statut,";
194 $sql .=
" aa.label, aa.labelshort, aa.account_number";
195 $sql .=
" FROM ".MAIN_DB_PREFIX.
"expensereport as er";
196 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"expensereport_det as erd ON er.rowid = erd.fk_expensereport";
197 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"accounting_account as aa ON aa.rowid = erd.fk_code_ventilation";
198 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"c_type_fees as f ON f.id = erd.fk_c_type_fees";
199 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"user as u ON u.rowid = er.fk_user_author";
200 $sql .=
" WHERE erd.fk_code_ventilation > 0";
201 $sql .=
" AND er.entity IN (".getEntity(
'expensereport', 0).
")";
204 if (strlen(trim($search_login))) {
207 if (strlen(trim($search_expensereport))) {
210 if (strlen(trim($search_label))) {
213 if (strlen(trim($search_desc))) {
216 if (strlen(trim($search_amount))) {
219 if (strlen(trim($search_account))) {
222 if (strlen(trim($search_vat))) {
225 if ($search_date_start) {
226 $sql .=
" AND erd.date >= '".$db->idate($search_date_start).
"'";
228 if ($search_date_end) {
229 $sql .=
" AND erd.date <= '".$db->idate($search_date_end).
"'";
231 $sql .=
" AND er.entity IN (".getEntity(
'expensereport', 0).
")";
233 $sql .= $db->order($sortfield, $sortorder);
236 $nbtotalofrecords =
'';
238 $result = $db->query(
$sql);
239 $nbtotalofrecords = $db->num_rows($result);
240 if (($page * $limit) > $nbtotalofrecords) {
246 $sql .= $db->plimit($limit + 1, $offset);
248 dol_syslog(
"accountancy/expensereport/lines.php", LOG_DEBUG);
249 $result = $db->query(
$sql);
251 $num_lines = $db->num_rows($result);
255 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
256 $param .=
'&contextpage='.urlencode($contextpage);
258 if ($limit > 0 && $limit != $conf->liste_limit) {
259 $param .=
'&limit='.((int) $limit);
262 $param .=
'&search_login='.urlencode($search_login);
264 if ($search_expensereport) {
265 $param .=
"&search_expensereport=".urlencode($search_expensereport);
268 $param .=
"&search_label=".urlencode($search_label);
271 $param .=
"&search_desc=".urlencode($search_desc);
273 if ($search_account) {
274 $param .=
"&search_account=".urlencode($search_account);
277 $param .=
"&search_vat=".urlencode($search_vat);
279 if ($search_date_startday) {
280 $param .=
'&search_date_startday='.urlencode($search_date_startday);
282 if ($search_date_startmonth) {
283 $param .=
'&search_date_startmonth='.urlencode($search_date_startmonth);
285 if ($search_date_startyear) {
286 $param .=
'&search_date_startyear='.urlencode($search_date_startyear);
288 if ($search_date_endday) {
289 $param .=
'&search_date_endday='.urlencode($search_date_endday);
291 if ($search_date_endmonth) {
292 $param .=
'&search_date_endmonth='.urlencode($search_date_endmonth);
294 if ($search_date_endyear) {
295 $param .=
'&search_date_endyear='.urlencode($search_date_endyear);
298 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="post">'.
"\n";
299 print
'<input type="hidden" name="action" value="ventil">';
300 if ($optioncss !=
'') {
301 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
303 print
'<input type="hidden" name="token" value="'.newToken().
'">';
304 print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
305 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
306 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
307 print
'<input type="hidden" name="page" value="'.$page.
'">';
309 print_barre_liste($langs->trans(
"ExpenseReportLinesDone"), $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder,
'', $num_lines, $nbtotalofrecords,
'title_accountancy', 0,
'',
'', $limit);
310 print
'<span class="opacitymedium">'.$langs->trans(
"DescVentilDoneExpenseReport").
'</span><br>';
312 print
'<br><div class="inline-block divButAction paddingbottom">'.$langs->trans(
"ChangeAccount").
' ';
313 print $formaccounting->select_account($account_parent,
'account_parent', 2, array(), 0, 0,
'maxwidth300 maxwidthonsmartphone valignmiddle');
314 print
'<input type="submit" class="button small valignmiddle" value="'.$langs->trans(
"ChangeBinding").
'"/></div>';
318 print
'<div class="div-table-responsive">';
319 print
'<table class="tagtable liste'.($moreforfilter ?
" listwithfilterbefore" :
"").
'">'.
"\n";
321 print
'<tr class="liste_titre_filter">';
322 print
'<td class="liste_titre"><input type="text" name="search_login" class="maxwidth50" value="'.$search_login.
'"></td>';
323 print
'<td class="liste_titre"></td>';
324 print
'<td><input type="text" class="flat maxwidth50" name="search_expensereport" value="'.dol_escape_htmltag($search_expensereport).
'"></td>';
325 if (!empty($conf->global->ACCOUNTANCY_USE_EXPENSE_REPORT_VALIDATION_DATE)) {
326 print
'<td class="liste_titre"></td>';
328 print
'<td class="liste_titre center">';
329 print
'<div class="nowrap">';
330 print
$form->selectDate($search_date_start ? $search_date_start : -1,
'search_date_start', 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'From'));
332 print
'<div class="nowrap">';
333 print
$form->selectDate($search_date_end ? $search_date_end : -1,
'search_date_end', 0, 0, 1,
'', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
'to'));
336 print
'<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_label" value="'.dol_escape_htmltag($search_label).
'"></td>';
337 print
'<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_desc" value="'.dol_escape_htmltag($search_desc).
'"></td>';
338 print
'<td class="liste_titre right"><input type="text" class="flat maxwidth50" name="search_amount" value="'.dol_escape_htmltag($search_amount).
'"></td>';
339 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>';
340 print
'<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_account" value="'.dol_escape_htmltag($search_account).
'"></td>';
341 print
'<td class="liste_titre center">';
342 $searchpicto =
$form->showFilterButtons();
347 print
'<tr class="liste_titre">';
350 print_liste_field_titre(
"ExpenseReport", $_SERVER[
"PHP_SELF"],
"er.ref",
"", $param,
'', $sortfield, $sortorder);
351 if (!empty($conf->global->ACCOUNTANCY_USE_EXPENSE_REPORT_VALIDATION_DATE)) {
352 print_liste_field_titre(
"DateValidation", $_SERVER[
"PHP_SELF"],
"er.date_valid",
"", $param,
'', $sortfield, $sortorder,
'center ');
354 print_liste_field_titre(
"DateOfLine", $_SERVER[
"PHP_SELF"],
"erd.date, erd.rowid",
"", $param,
'', $sortfield, $sortorder,
'center ');
356 print_liste_field_titre(
"Description", $_SERVER[
"PHP_SELF"],
"erd.comments",
"", $param,
'', $sortfield, $sortorder);
357 print_liste_field_titre(
"Amount", $_SERVER[
"PHP_SELF"],
"erd.total_ht",
"", $param,
'', $sortfield, $sortorder,
'right ');
358 print_liste_field_titre(
"VATRate", $_SERVER[
"PHP_SELF"],
"erd.tva_tx",
"", $param,
'', $sortfield, $sortorder,
'center ');
359 print_liste_field_titre(
"AccountAccounting", $_SERVER[
"PHP_SELF"],
"aa.account_number",
"", $param,
'', $sortfield, $sortorder);
360 $checkpicto =
$form->showCheckAddButtons();
366 $userstatic =
new User($db);
369 while ($i < min($num_lines, $limit)) {
370 $objp = $db->fetch_object($result);
372 $expensereportstatic->ref = $objp->ref;
373 $expensereportstatic->id = $objp->erid;
375 $userstatic->id = $objp->userid;
376 $userstatic->ref = $objp->label;
377 $userstatic->login = $objp->login;
378 $userstatic->statut = $objp->statut;
379 $userstatic->email = $objp->email;
380 $userstatic->gender = $objp->gender;
381 $userstatic->firstname = $objp->firstname;
382 $userstatic->lastname = $objp->lastname;
383 $userstatic->employee = $objp->employee;
384 $userstatic->photo = $objp->photo;
386 $accountingaccountstatic->rowid = $objp->fk_compte;
387 $accountingaccountstatic->label = $objp->label;
388 $accountingaccountstatic->labelshort = $objp->labelshort;
389 $accountingaccountstatic->account_number = $objp->account_number;
391 print
'<tr class="oddeven">';
394 print
'<td class="nowraponall">';
395 print $userstatic->getNomUrl(-1,
'', 0, 0, 24, 1,
'login',
'', 1);
399 print
'<td>'.$objp->rowid.
'</td>';
402 print
'<td>'.$expensereportstatic->getNomUrl(1).
'</td>';
405 if (!empty($conf->global->ACCOUNTANCY_USE_EXPENSE_REPORT_VALIDATION_DATE)) {
406 print
'<td class="center">'.dol_print_date($db->jdate($objp->date_valid),
'day').
'</td>';
409 print
'<td class="center">'.dol_print_date($db->jdate($objp->date),
'day').
'</td>';
412 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>';
417 $trunclength = empty($conf->global->ACCOUNTING_LENGTH_DESCRIPTION) ? 32 : $conf->global->ACCOUNTING_LENGTH_DESCRIPTION;
418 print
$form->textwithtooltip(
dol_trunc($text, $trunclength), $objp->comments);
422 print
'<td class="right nowraponall amount">'.price($objp->total_ht).
'</td>';
425 print
'<td class="center">'.vatrate($objp->tva_tx.($objp->vat_src_code ?
' ('.$objp->vat_src_code.
')' :
'')).
'</td>';
429 print $accountingaccountstatic->getNomUrl(0, 1, 1,
'', 1);
430 print
' <a class="editfielda reposition marginleftonly marginrightonly" href="./card.php?id='.$objp->rowid.
'&backtopage='.urlencode($_SERVER[
"PHP_SELF"].($param ?
'?'.$param :
'')).
'">';
433 print
'<td class="center"><input type="checkbox" class="checkforaction" name="changeaccount[]" value="'.$objp->rowid.
'"/></td>';
438 if ($num_lines == 0) {
440 if (!empty($conf->global->ACCOUNTANCY_USE_EXPENSE_REPORT_VALIDATION_DATE)) {
443 print
'<tr><td colspan="'.$colspan.
'"><span class="opacitymedium">'.$langs->trans(
"NoRecordFound").
'</span></td></tr>';
449 if ($nbtotalofrecords > $limit) {
450 print_barre_liste(
'', $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder,
'', $num_lines, $nbtotalofrecords,
'', 0,
'',
'', $limit, 1);
455 print $db->lasterror();