From 2e0b2fb012de46ebf136df6c42876ecabed4ca06 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 15 Feb 2015 22:49:23 +0100 Subject: [PATCH] Work on expensereport module --- htdocs/core/class/commonobject.class.php | 3 +- htdocs/core/lib/expensereport.lib.php | 61 +++ htdocs/expensereport/card.php | 415 ++++++++---------- .../class/expensereport.class.php | 224 +++++++--- htdocs/expensereport/document.php | 6 +- htdocs/expensereport/export_csv.php | 6 +- htdocs/expensereport/info.php | 6 +- htdocs/expensereport/list.php | 37 +- htdocs/expensereport/synchro_compta.php | 26 +- htdocs/install/mysql/data/llx_c_type_fees.sql | 2 +- .../install/mysql/migration/3.7.0-3.8.0.sql | 9 +- .../mysql/tables/llx_expensereport.sql | 3 +- .../mysql/tables/llx_expensereport_det.sql | 2 +- htdocs/langs/en_US/projects.lang | 2 +- htdocs/projet/class/project.class.php | 4 + htdocs/projet/element.php | 12 +- 16 files changed, 472 insertions(+), 346 deletions(-) create mode 100644 htdocs/core/lib/expensereport.lib.php diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 6d464cceb29..b4aff6002d0 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -1792,7 +1792,8 @@ abstract class CommonObject if (! $resql) { $error++; - $this->error=$this->db->error(); + $this->error=$this->db->lasterror(); + $this->error[]=$this->db->lasterror(); } } diff --git a/htdocs/core/lib/expensereport.lib.php b/htdocs/core/lib/expensereport.lib.php new file mode 100644 index 00000000000..f46e6416ec6 --- /dev/null +++ b/htdocs/core/lib/expensereport.lib.php @@ -0,0 +1,61 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * or see http://www.gnu.org/ + */ + +/** + * \file htdocs/core/lib/expensereport.lib.php + * \brief Functions for module expensereport + */ + +/** + * Prepare array with list of tabs + * + * @param Object $object Object related to tabs + * @return array Array of tabs to show + */ +function expensereport_prepare_head($object) +{ + global $langs, $conf; + + $h = 0; + $head = array(); + + $head[$h][0] = DOL_URL_ROOT . '/expensereport/card.php?id=' . $object->id; + $head[$h][1] = $langs->trans("Card"); + $head[$h][2] = 'card'; + $h++; + + // Show more tabs from modules + // Entries must be declared in modules descriptor with line + // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab + // $this->tabs = array('entity:-tabname); to remove a tab + complete_head_from_modules($conf,$langs,$object,$head,$h,'expensereport'); + + $head[$h][0] = DOL_URL_ROOT.'/expensereport/document.php?id='.$object->id; + $head[$h][1] = $langs->trans("Documents"); + $head[$h][2] = 'documents'; + $h++; + + $head[$h][0] = DOL_URL_ROOT . '/expensereport/info.php?id=' . $object->id; + $head[$h][1] = $langs->trans("Info"); + $head[$h][2] = 'info'; + $h++; + + complete_head_from_modules($conf,$langs,$object,$head,$h,'expensereport','remove'); + + return $head; +} diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index 4eabd0ea765..b555746c05b 100755 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -29,17 +29,20 @@ require_once(DOL_DOCUMENT_ROOT."/core/class/html.formfile.class.php"); require_once(DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php'); require_once(DOL_DOCUMENT_ROOT."/core/class/html.formmail.class.php"); require_once(DOL_DOCUMENT_ROOT."/core/class/html.formprojet.class.php"); +require_once(DOL_DOCUMENT_ROOT."/projet/class/project.class.php"); require_once(DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'); -require_once(DOL_DOCUMENT_ROOT."/core/lib/trip.lib.php"); +require_once(DOL_DOCUMENT_ROOT."/core/lib/expensereport.lib.php"); dol_include_once('/expensereport/core/modules/expensereport/modules_expensereport.php'); dol_include_once("/expensereport/class/expensereport.class.php"); $langs->load("trips"); $action=GETPOST('action'); +$cancel=GETPOST('cancel'); $date_start = dol_mktime(0, 0, 0, GETPOST('date_debutmonth'), GETPOST('date_debutday'), GETPOST('date_debutyear')); $date_end = dol_mktime(0, 0, 0, GETPOST('date_finmonth'), GETPOST('date_finday'), GETPOST('date_finyear')); - +$date = dol_mktime(0, 0, 0, GETPOST('datemonth'), GETPOST('dateday'), GETPOST('dateyear')); +$fk_projet=GETPOST('fk_projet'); // If socid provided by ajax company selector if (! empty($_REQUEST['socid_id'])) @@ -54,8 +57,6 @@ $id=GETPOST("id",'int'); if ($user->societe_id) $socid=$user->societe_id; $result = restrictedArea($user, 'expensereport', 0, 'expensereport'); -$mesg=""; - // Hack to use expensereport dir $rootfordata = DOL_DATA_ROOT; @@ -74,6 +75,8 @@ $conf->expensereport->dir_output = $rootfordata.'/expensereport'; * Actions */ +if ($cancel) $action=''; + if ($action == 'confirm_delete' && $_GET["confirm"] == "yes" && $id > 0 && $user->rights->expensereport->supprimer) { $object = new ExpenseReport($db); @@ -103,10 +106,12 @@ if ($action == 'add' && $user->rights->expensereport->creer) if ($object->periode_existe($user,dol_print_date($object->date_debut, 'dayrfc'),dol_print_date($object->date_fin, 'dayrfc'))) { + $error++; setEventMessage($langs->trans("ErrorDoubleDeclaration"),'errors'); $action='create'; } - else + + if (! $error) { $db->begin(); @@ -130,7 +135,7 @@ if ($action == 'add' && $user->rights->expensereport->creer) if ($action == 'update' && $user->rights->expensereport->creer) { $object = new ExpenseReport($db); - $object->fetch($_POST['id'],$user); + $object->fetch($id); $object->date_debut = $date_start; $object->date_fin = $date_end; @@ -158,7 +163,7 @@ if ($action == 'update' && $user->rights->expensereport->creer) if ($action == "confirm_save" && GETPOST("confirm") == "yes" && $id > 0 && $user->rights->expensereport->creer) { $object = new ExpenseReport($db); - $object->fetch($id,$user); + $object->fetch($id); $result = $object->set_save($user); if ($result > 0) { @@ -195,8 +200,8 @@ if ($action == "confirm_save" && GETPOST("confirm") == "yes" && $id > 0 && $user if($resultPDF): // ATTACHMENT $filename=array(); $filedir=array(); $mimetype=array(); - array_push($filename,dol_sanitizeFileName($object->ref_number).".pdf"); - array_push($filedir,$conf->expensereport->dir_output . "/" . dol_sanitizeFileName($object->ref_number) . "/" . dol_sanitizeFileName($object->ref_number).".pdf"); + array_push($filename,dol_sanitizeFileName($object->ref).".pdf"); + array_push($filedir,$conf->expensereport->dir_output . "/" . dol_sanitizeFileName($object->ref) . "/" . dol_sanitizeFileName($object->ref).".pdf"); array_push($mimetype,"application/pdf"); // PREPARE SEND @@ -232,7 +237,7 @@ if ($action == "confirm_save" && GETPOST("confirm") == "yes" && $id > 0 && $user if ($action == "confirm_save_from_refuse" && $_GET["confirm"] == "yes" && $id > 0 && $user->rights->expensereport->creer) { $object = new ExpenseReport($db); - $object->fetch($id,$user); + $object->fetch($id); $result = $object->set_save_from_refuse($user); if ($result > 0) { @@ -256,7 +261,7 @@ if ($action == "confirm_save_from_refuse" && $_GET["confirm"] == "yes" && $id > $dateRefusEx = explode(" ",$object->date_refuse); $message = "Bonjour {$destinataire->firstname},\n\n"; - $message.= "Le {$dateRefusEx[0]} à {$dateRefusEx[1]} vous avez refusé d'approuver la note de frais \"{$object->ref_number}\". Vous aviez émis le motif suivant : {$object->detail_refuse}\n\n"; + $message.= "Le {$dateRefusEx[0]} à {$dateRefusEx[1]} vous avez refusé d'approuver la note de frais \"{$object->ref}\". Vous aviez émis le motif suivant : {$object->detail_refuse}\n\n"; $message.= "L'auteur vient de modifier la note de frais, veuillez trouver la nouvelle version en pièce jointe.\n"; $message.= "- Déclarant : {$expediteur->firstname} {$expediteur->lastname}\n"; $message.= "- Période : du {$object->date_debut} au {$object->date_fin}\n"; @@ -270,8 +275,8 @@ if ($action == "confirm_save_from_refuse" && $_GET["confirm"] == "yes" && $id > if($resultPDF): // ATTACHMENT $filename=array(); $filedir=array(); $mimetype=array(); - array_push($filename,dol_sanitizeFileName($object->ref_number).".pdf"); - array_push($filedir,$conf->expensereport->dir_output . "/" . dol_sanitizeFileName($object->ref_number) . "/" . dol_sanitizeFileName($object->ref_number).".pdf"); + array_push($filename,dol_sanitizeFileName($object->ref).".pdf"); + array_push($filedir,$conf->expensereport->dir_output . "/" . dol_sanitizeFileName($object->ref) . "/" . dol_sanitizeFileName($object->ref_number).".pdf"); array_push($mimetype,"application/pdf"); // PREPARE SEND @@ -308,16 +313,13 @@ if ($action == "confirm_save_from_refuse" && $_GET["confirm"] == "yes" && $id > if ($action == "confirm_validate" && GETPOST("confirm") == "yes" && $id > 0 && $user->rights->expensereport->to_validate) { $object = new ExpenseReport($db); - $object->fetch($id,$user); + $object->fetch($id); $result = $object->set_valide($user); if ($result > 0) { if (! empty($conf->global->DEPLACEMENT_TO_CLEAN)) { - $object = new ExpenseReport($db); - $object->fetch($id,$user); - // Send mail // TO @@ -338,7 +340,7 @@ if ($action == "confirm_validate" && GETPOST("confirm") == "yes" && $id > 0 && $ // CONTENT $message = "Bonjour {$destinataire->firstname},\n\n"; - $message.= "Votre note de frais \"{$object->ref_number}\" vient d'être approuvé!\n"; + $message.= "Votre note de frais \"{$object->ref}\" vient d'être approuvé!\n"; $message.= "- Approbateur : {$expediteur->firstname} {$expediteur->lastname}\n"; $message.= "- Lien : {$dolibarr_main_url_root}/expensereport/card.php?id={$object->id}\n\n"; $message.= "Bien cordialement,\n' SI"; @@ -350,12 +352,12 @@ if ($action == "confirm_validate" && GETPOST("confirm") == "yes" && $id > 0 && $ if($resultPDF): // ATTACHMENT $filename=array(); $filedir=array(); $mimetype=array(); - array_push($filename,dol_sanitizeFileName($object->ref_number).".pdf"); + array_push($filename,dol_sanitizeFileName($object->ref).".pdf"); array_push($filedir, $conf->expensereport->dir_output. "/". - dol_sanitizeFileName($object->ref_number) . + dol_sanitizeFileName($object->ref) . "/". - dol_sanitizeFileName($object->ref_number). + dol_sanitizeFileName($object->ref). ".pdf" ); array_push($mimetype,"application/pdf"); @@ -394,16 +396,13 @@ if ($action == "confirm_validate" && GETPOST("confirm") == "yes" && $id > 0 && $ if ($action == "confirm_refuse" && $_POST['confirm']=="yes" && !empty($_POST['detail_refuse']) && $id > 0 && $user->rights->expensereport->to_validate) { $object = new ExpenseReport($db); - $object->fetch($id,$user); + $object->fetch($id); $result = $object->set_refuse($user,$_POST['detail_refuse']); if ($result > 0) { if (! empty($conf->global->DEPLACEMENT_TO_CLEAN)) { - $object = new ExpenseReport($db); - $object->fetch($id,$user); - // Send mail // TO @@ -421,7 +420,7 @@ if ($action == "confirm_refuse" && $_POST['confirm']=="yes" && !empty($_POST['de // CONTENT $message = "Bonjour {$destinataire->firstname},\n\n"; - $message.= "Votre note de frais \"{$object->ref_number}\" vient d'être refusée.\n"; + $message.= "Votre note de frais \"{$object->ref}\" vient d'être refusée.\n"; $message.= "- Refuseur : {$expediteur->firstname} {$expediteur->lastname}\n"; $message.= "- Motif de refus : {$_POST['detail_refuse']}\n"; $message.= "- Lien : {$dolibarr_main_url_root}/expensereport/card.php?id={$object->id}\n\n"; @@ -458,7 +457,8 @@ if ($action == "confirm_refuse" && $_POST['confirm']=="yes" && !empty($_POST['de if ($action == "confirm_cancel" && GETPOST('confirm')=="yes" && !empty($_POST['detail_cancel']) && $id > 0 && $user->rights->expensereport->to_validate) { $object = new ExpenseReport($db); - $object->fetch($id,$user); + $object->fetch($id); + if($user->id == $object->fk_user_validator) { $result = $object->set_cancel($user,$_POST['detail_cancel']); @@ -467,8 +467,6 @@ if ($action == "confirm_cancel" && GETPOST('confirm')=="yes" && !empty($_POST['d { if (! empty($conf->global->DEPLACEMENT_TO_CLEAN)) { - $object = new ExpenseReport($db); - $object->fetch($id,$user); // Send mail @@ -487,7 +485,7 @@ if ($action == "confirm_cancel" && GETPOST('confirm')=="yes" && !empty($_POST['d // CONTENT $message = "Bonjour {$destinataire->firstname},\n\n"; - $message.= "Votre note de frais \"{$object->ref_number}\" vient d'être annulée.\n"; + $message.= "Votre note de frais \"{$object->ref}\" vient d'être annulée.\n"; $message.= "- Annuleur : {$expediteur->firstname} {$expediteur->lastname}\n"; $message.= "- Motif d'annulation : {$_POST['detail_cancel']}\n"; $message.= "- Lien : {$dolibarr_main_url_root}/expensereport/card.php?id={$object->id}\n\n"; @@ -532,14 +530,12 @@ if ($action == "confirm_paid" && $_GET['confirm']=="yes" && $id > 0 && $user->ri { $object = new ExpenseReport($db); $object->fetch($id,$user); + $result = $object->set_paid($user); if ($result > 0) { if (! empty($conf->global->DEPLACEMENT_TO_CLEAN)) { - $object = new ExpenseReport($db); - $object->fetch($id,$user); - // Send mail // TO @@ -557,7 +553,7 @@ if ($action == "confirm_paid" && $_GET['confirm']=="yes" && $id > 0 && $user->ri // CONTENT $message = "Bonjour {$destinataire->firstname},\n\n"; - $message.= "Votre note de frais \"{$object->ref_number}\" vient d'être payée.\n"; + $message.= "Votre note de frais \"{$object->ref}\" vient d'être payée.\n"; $message.= "- Payeur : {$expediteur->firstname} {$expediteur->lastname}\n"; $message.= "- Lien : {$dolibarr_main_url_root}/expensereport/card.php?id={$object->id}\n\n"; $message.= "Bien cordialement,\n' SI"; @@ -579,13 +575,13 @@ if ($action == "confirm_paid" && $_GET['confirm']=="yes" && $id > 0 && $user->ri $idAccount = 1; $object = new ExpenseReport($db); - $object->fetch($idTrip,$user); + $object->fetch($idTrip); $datePaiement = explode("-",$object->date_paiement); $dateop = dol_mktime(12,0,0,$datePaiement[1],$datePaiement[2],$datePaiement[0]); $operation = $object->code_paiement; - $label = "Règlement ".$object->ref_number; + $label = "Règlement ".$object->ref; $amount = - price2num($object->total_ttc); $num_chq = ''; $cat1 = ''; @@ -629,7 +625,7 @@ if ($action == "confirm_paid" && $_GET['confirm']=="yes" && $id > 0 && $user->ri if ($action == "confirm_brouillonner" && $_GET['confirm']=="yes" && $id > 0 && $user->rights->expensereport->creer) { $object = new ExpenseReport($db); - $object->fetch($id,$user); + $object->fetch($id); if($user->id == $object->fk_user_author OR $user->id == $object->fk_user_validator) { $result = $object->set_draft($user); @@ -651,133 +647,107 @@ if ($action == "confirm_brouillonner" && $_GET['confirm']=="yes" && $id > 0 && $ if ($action == "addline") { + $error = 0; + $db->begin(); - $object_ligne = new ExpenseReportLigne($db); + $object_ligne = new ExpenseReportLine($db); - $object_ligne->comments = empty($_POST['comments'])?"Aucun commentaire.":$_POST['comments']; + $object_ligne->comments = GETPOST('comments'); $object_ligne->qty = empty($_POST['qty'])?1:$_POST['qty']; - // Convertion de "," en "." dans le nombre entré dans le champ - if(preg_match("#,#",$_POST['value_unit'])) - { - $object_ligne->value_unit = preg_replace("#,#",".",$_POST['value_unit']); - } - else - { - $object_ligne->value_unit = $_POST['value_unit']; - } + $object_ligne->value_unit = price2num(GETPOST('value_unit')); + $object_ligne->value_unit = price2num($object_ligne->value_unit,'MU'); - $object_ligne->value_unit = number_format($object_ligne->value_unit,3,'.',''); + $object_ligne->date = $date; - $date = explode("/",$_POST['date']); - $object_ligne->date = $date[2]."-".$date[1]."-".$date[0]; + $object_ligne->fk_c_type_fees = GETPOST('fk_c_type_fees'); - $object_ligne->fk_c_type_fees = empty($_POST['fk_c_type_fees'])?1:$_POST['fk_c_type_fees']; - - // Get tax id from rate - $tva_tx=GETPOST('fk_c_tva'); - $sql = "SELECT t.rowid, t.localtax1, t.localtax2, t.localtax1_type, t.localtax2_type"; - $sql .= " FROM ".MAIN_DB_PREFIX."c_tva as t, ".MAIN_DB_PREFIX."c_country as p"; - $sql .= " WHERE t.fk_pays = p.rowid AND p.code = '".$mysoc->country_code."'"; - $sql .= " AND t.taux = ".$db->escape($tva_tx)." AND t.active = 1"; - - dol_syslog("get_localtax sql=".$sql); - $resql=$db->query($sql); - if ($resql) - { - $obj = $db->fetch_object($resql); - $tva=$obj->rowid; - } - else dol_print_error($db); - - // Force la TVA à 0% lorsque c'est du transport - if (! empty($conf->global->DEPLACEMENT_TO_CLEAN)) - { - if ($object_ligne->fk_c_type_fees==10) - { - $tva = 15; // TODO A virer le hardcoding - } - } + $tva=GETPOST('vatrate'); $object_ligne->fk_c_tva = $tva; - $object_ligne->fk_projet = $_POST['fk_projet']; + $object_ligne->fk_projet = $fk_projet; - // Tests des données rentrées - $error = false; + if (! GETPOST('fk_c_type_fees') > 0) + { + $error++; + setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Type")),'errors'); + $action=''; + } + if (GETPOST('vatrate') < 0 || GETPOST('vatrate') == '') + { + $error++; + setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Vat")),'errors'); + $action=''; + } // Si aucun projet n'est défini - if (empty($object_ligne->fk_projet) || $object_ligne->fk_projet==-1) + if ($conf->projet->enabled) { - $error = true; - $text_error[] = "NO_PROJECT"; + if (empty($object_ligne->fk_projet) || $object_ligne->fk_projet==-1) + { + $error++; + setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Project")), 'errors'); + } } // Si aucune date n'est rentrée - if($object_ligne->date=="--"): - $error = true; - $text_error[] = "NO_DATE"; - endif; + if (empty($object_ligne->date) || $object_ligne->date=="--") + { + $error++; + setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Date")), 'errors'); + } // Si aucun prix n'est rentré - if($object_ligne->value_unit==0): - $error = true; - $text_error[] = "NO_PRICE"; - endif; + if($object_ligne->value_unit==0) + { + $error++; + setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("UP")), 'errors'); + } // S'il y'a eu au moins une erreur - if($error) - { - $mesg = implode(",",$text_error); - Header("Location: ".$_SERVER["PHP_SELF"]."?id=".$_POST['fk_expensereport']."&mesg=$mesg"); - exit; - } - else + if (! $error) { $object_ligne->fk_expensereport = $_POST['fk_expensereport']; - $object_ligne->fetch_taux($object_ligne->fk_c_tva); - // Calculs des totos $object_ligne->total_ttc = $object_ligne->value_unit * $object_ligne->qty; - $object_ligne->total_ttc = number_format($object_ligne->total_ttc,2,'.',''); + $object_ligne->total_ttc = price2num($object_ligne->total_ttc,'MT'); - $tx_tva = $object_ligne->tva_taux/100; + $object_ligne->tva_taux = GETPOST('vatrate'); + + $tx_tva = $object_ligne->tva_taux / 100; $tx_tva = $tx_tva + 1; $object_ligne->total_ht = $object_ligne->total_ttc / $tx_tva; $object_ligne->total_ht = price2num($object_ligne->total_ht,'MT'); $object_ligne->total_tva = $object_ligne->total_ttc - $object_ligne->total_ht; - // Fin calculs des totos $result = $object_ligne->insert(); if ($result > 0) { - $object = new ExpenseReport($db); - $object->fetch($_POST['fk_expensereport'],$user); - $object->update_totaux_add($object_ligne->total_ht,$object_ligne->total_tva); - $db->commit(); - Header("Location: ".$_SERVER["PHP_SELF"]."?id=".$_POST['fk_expensereport']); + header("Location: ".$_SERVER["PHP_SELF"]."?id=".$_GET['id']); exit; } else { dol_print_error($db,$object->error); $db->rollback(); - exit; } } + + $action=''; } if ($action == 'confirm_delete_line' && $_POST["confirm"] == "yes") { $object = new ExpenseReport($db); - $object->fetch($_GET["id"],$user); + $object->fetch($id); - $object_ligne = new ExpenseReportLigne($db); + $object_ligne = new ExpenseReportLine($db); $object_ligne->fetch($_GET["rowid"]); $total_ht = $object_ligne->total_ht; $total_tva = $object_ligne->total_tva; @@ -798,60 +768,43 @@ if ($action == 'confirm_delete_line' && $_POST["confirm"] == "yes") if ($action == "updateligne" ) { $object = new ExpenseReport($db); - - $object_id = GETPOST('id','int'); - $object->fetch($object_id,$user); + $object->fetch($id); $rowid = $_POST['rowid']; - $type_fees_id = empty($_POST['fk_c_type_fees'])?1:$_POST['fk_c_type_fees']; - - // Get tax id from rate - $tva_tx=GETPOST('fk_c_tva'); - $sql = "SELECT t.rowid, t.localtax1, t.localtax2, t.localtax1_type, t.localtax2_type"; - $sql .= " FROM ".MAIN_DB_PREFIX."c_tva as t, ".MAIN_DB_PREFIX."c_country as p"; - $sql .= " WHERE t.fk_pays = p.rowid AND p.code = '".$mysoc->country_code."'"; - $sql .= " AND t.taux = ".$db->escape($tva_tx)." AND t.active = 1"; - - dol_syslog("get_localtax sql=".$sql); - $resql=$db->query($sql); - if ($resql) - { - $obj = $db->fetch_object($resql); - $c_tva=$obj->rowid; - } - else dol_print_error($db); - - // Force la TVA à 0% lorsque c'est du transport - if ($type_fees_id==10) - { - $c_tva = 15; - } - + $type_fees_id = GETPOST('fk_c_type_fees'); + $c_tva=GETPOST('vatrate'); $object_ligne->fk_c_tva = $c_tva; - $projet_id = $_POST['fk_projet']; - $comments = $_POST['comments']; - $qty = $_POST['qty']; + $projet_id = $fk_projet; + $comments = GETPOST('comments'); + $qty = GETPOST('qty'); + $value_unit = GETPOST('value_unit'); - // Convertion de "," en "." dans le nombre entré dans le champ - if(preg_match("#,#",$_POST['value_unit'])): - $value_unit = preg_replace("#,#",".",$_POST['value_unit']); - else: - $value_unit = $_POST['value_unit']; - endif; - - $date = explode("/",$_POST['date']); - $date = $date[2]."-".$date[1]."-".$date[0]; - - $result = $object->updateline($rowid, $type_fees_id, $projet_id, $c_tva, $comments, $qty, $value_unit, $date, $object_id); - if ($result >= 0) + if (! GETPOST('fk_c_type_fees') > 0) { - $object->recalculer($object_id); - header("Location: ".$_SERVER["PHP_SELF"]."?id=".$object_id); - exit; + $error++; + setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Type")),'errors'); + $action=''; } - else + if (GETPOST('vatrate') < 0 || GETPOST('vatrate') == '') { - setEventMessages($object->error, $object->errors, 'errors'); + $error++; + setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Vat")),'errors'); + $action=''; + } + + if (! $error) + { + $result = $object->updateline($rowid, $type_fees_id, $projet_id, $c_tva, $comments, $qty, $value_unit, $date, $object_id); + if ($result >= 0) + { + $object->recalculer($object_id); + header("Location: ".$_SERVER["PHP_SELF"]."?id=".$object_id); + exit; + } + else + { + setEventMessages($object->error, $object->errors, 'errors'); + } } } @@ -876,7 +829,7 @@ if ($action == "recalc" && $id > 0) if ($action == 'builddoc') // En get ou en post { $depl = new ExpenseReport($db, 0, $_GET['id']); - $depl->fetch($_GET['id'],$user); + $depl->fetch($id); if ($_REQUEST['model']) { @@ -929,10 +882,10 @@ else if ($action == 'remove_file') llxHeader('', $langs->trans("ExpenseReport")); -$html = new Form($db); -$formfile = new FormFile($db); $form = new Form($db); +$formfile = new FormFile($db); $formproject = new FormProjets($db); +$projecttmp = new Project($db); if (! empty($conf->global->DEPLACEMENT_TO_CLEAN)) { @@ -976,13 +929,13 @@ if ($action == 'create') print ''; print ''.$langs->trans("DateStart").''; print ''; - $html->select_date($date_start?$date_start:-1,'date_debut',0,0,0,'',1,1); + $form->select_date($date_start?$date_start:-1,'date_debut',0,0,0,'',1,1); print ''; print ''; print ''; print ''.$langs->trans("DateEnd").''; print ''; - $html->select_date($date_end?$date_end:-1,'date_fin',0,0,0,'',1,1); + $form->select_date($date_end?$date_end:-1,'date_fin',0,0,0,'',1,1); print ''; print ''; print ''; @@ -990,8 +943,8 @@ if ($action == 'create') print ''; $object = new ExpenseReport($db); $include_users = $object->fetch_users_approver_expensereport(); - $s=$html->select_dolusers((GETPOST('fk_user_validator')?GETPOST('fk_user_validator'):$conf->global->EXPENSEREPORT_DEFAULT_VALIDATOR), "fk_user_validator", 1, "", 0, $include_users); - print $html->textwithpicto($s, $langs->trans("AnyOtherInThisListCanValidate")); + $s=$form->select_dolusers((GETPOST('fk_user_validator')?GETPOST('fk_user_validator'):$conf->global->EXPENSEREPORT_DEFAULT_VALIDATOR), "fk_user_validator", 1, "", 0, $include_users); + print $form->textwithpicto($s, $langs->trans("AnyOtherInThisListCanValidate")); print ''; print ''; if (! empty($conf->global->EXPENSEREPORT_ASK_PAYMENTMODE_ON_CREATION)) @@ -999,7 +952,7 @@ if ($action == 'create') print ''; print ''.$langs->trans("ModePaiement").''; print ''; - $html->select_types_paiements(2,'fk_c_paiement'); + $form->select_types_paiements(2,'fk_c_paiement'); print ''; print ''; } @@ -1026,9 +979,9 @@ else if($id > 0) { $object = new ExpenseReport($db); - $result = $object->fetch($id,$user); + $result = $object->fetch($id); - if ($result) + if ($result > 0) { if ($object->fk_user_author != $user->id) { @@ -1048,19 +1001,20 @@ else } } - //$head = trip_prepare_head($object); - + $head = expensereport_prepare_head($object); + /* $head[0][0] = $_SERVER['PHP_SELF'].'?id='.$object->id; $head[0][1] = $langs->trans('Card'); $head[0][2] = 'card'; - $h++; - - dol_fiche_head($head, 'card', $langs->trans("TripCard"), 0, 'trip'); + $h++;*/ if ($action == 'edit' && ($object->fk_c_expensereport_statuts < 3 || $object->fk_c_expensereport_statuts==99)) { print "
\n"; print ''; + print ''; + + dol_fiche_head($head, 'card', $langs->trans("TripCard"), 0, 'trip'); if($object->fk_c_expensereport_statuts==99) { @@ -1071,7 +1025,6 @@ else print ''; } - print ''; print ''; @@ -1086,13 +1039,13 @@ else print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; @@ -1101,7 +1054,7 @@ else print ''; print ''; print ''; print ''; } @@ -1112,8 +1065,8 @@ else print ''; print ''; print ''; } @@ -1149,67 +1102,69 @@ else print ''; print ''; print ''; print ''; print '
'.$langs->trans("DateStart").''; - $html->select_date($object->date_debut,'date_debut'); + $form->select_date($object->date_debut,'date_debut'); print '
'.$langs->trans("DateEnd").''; - $html->select_date($object->date_fin,'date_fin'); + $form->select_date($object->date_fin,'date_fin'); print '
'.$langs->trans("ModePaiement").''; - $html->select_types_paiements($object->fk_c_paiement,'fk_c_paiement'); + $form->select_types_paiements($object->fk_c_paiement,'fk_c_paiement'); print '
'.$langs->trans("VALIDATOR").''; $include_users = $object->fetch_users_approver_expensereport(); - $s=$html->select_dolusers($object->fk_user_validator,"fk_user_validator",0,"",0,$include_users); - print $html->textwithpicto($s, $langs->trans("AnyOtherInThisListCanValidate")); + $s=$form->select_dolusers($object->fk_user_validator,"fk_user_validator",0,"",0,$include_users); + print $form->textwithpicto($s, $langs->trans("AnyOtherInThisListCanValidate")); print '
'.$langs->trans("Note").''; - print ''; + print ''; print '
'; - print '
'; + dol_fiche_end(); + + print '
'; print '     '; - print ''; + print ''; print '
'; print ''; - } else { + dol_fiche_head($head, 'card', $langs->trans("TripCard"), 0, 'trip'); if ($action == 'save'): - $ret=$html->form_confirm($_SEVER["PHP_SELF"]."?id=".$id,$langs->trans("SaveTrip"),$langs->trans("ConfirmSaveTrip"),"confirm_save","","",1); + $ret=$form->form_confirm($_SEVER["PHP_SELF"]."?id=".$id,$langs->trans("SaveTrip"),$langs->trans("ConfirmSaveTrip"),"confirm_save","","",1); if ($ret == 'html') print '
'; endif; if ($action == 'save_from_refuse'): - $ret=$html->form_confirm($_SEVER["PHP_SELF"]."?id=".$id,$langs->trans("SaveTrip"),$langs->trans("ConfirmSaveTrip"),"confirm_save_from_refuse","","",1); + $ret=$form->form_confirm($_SEVER["PHP_SELF"]."?id=".$id,$langs->trans("SaveTrip"),$langs->trans("ConfirmSaveTrip"),"confirm_save_from_refuse","","",1); if ($ret == 'html') print '
'; endif; if ($action == 'delete'): - $ret=$html->form_confirm($_SEVER["PHP_SELF"]."?id=".$id,$langs->trans("DeleteTrip"),$langs->trans("ConfirmDeleteTrip"),"confirm_delete","","",1); + $ret=$form->form_confirm($_SEVER["PHP_SELF"]."?id=".$id,$langs->trans("DeleteTrip"),$langs->trans("ConfirmDeleteTrip"),"confirm_delete","","",1); if ($ret == 'html') print '
'; endif; if ($action == 'validate'): - $ret=$html->form_confirm($_SEVER["PHP_SELF"]."?id=".$id,$langs->trans("ValideTrip"),$langs->trans("ConfirmValideTrip"),"confirm_validate","","",1); + $ret=$form->form_confirm($_SEVER["PHP_SELF"]."?id=".$id,$langs->trans("ValideTrip"),$langs->trans("ConfirmValideTrip"),"confirm_validate","","",1); if ($ret == 'html') print '
'; endif; if ($action == 'paid'): - $ret=$html->form_confirm($_SEVER["PHP_SELF"]."?id=".$id,$langs->trans("PaidTrip"),$langs->trans("ConfirmPaidTrip"),"confirm_paid","","",1); + $ret=$form->form_confirm($_SEVER["PHP_SELF"]."?id=".$id,$langs->trans("PaidTrip"),$langs->trans("ConfirmPaidTrip"),"confirm_paid","","",1); if ($ret == 'html') print '
'; endif; if ($action == 'cancel'): $array_input = array(array('type'=>"text",'label'=>"Entrez ci-dessous un motif d'annulation :",'name'=>"detail_cancel",'size'=>"50",'value'=>"")); - $ret=$html->form_confirm($_SEVER["PHP_SELF"]."?id=".$id,$langs->trans("ConfirmCancelTrip"),"","confirm_cancel",$array_input,"",0); + $ret=$form->form_confirm($_SEVER["PHP_SELF"]."?id=".$id,$langs->trans("ConfirmCancelTrip"),"","confirm_cancel",$array_input,"",0); if ($ret == 'html') print '
'; endif; if ($action == 'brouillonner'): - $ret=$html->form_confirm($_SEVER["PHP_SELF"]."?id=".$id,$langs->trans("BrouillonnerTrip"),$langs->trans("ConfirmBrouillonnerTrip"),"confirm_brouillonner","","",1); + $ret=$form->form_confirm($_SEVER["PHP_SELF"]."?id=".$id,$langs->trans("BrouillonnerTrip"),$langs->trans("ConfirmBrouillonnerTrip"),"confirm_brouillonner","","",1); if ($ret == 'html') print '
'; endif; if ($action == 'refuse'): $array_input = array(array('type'=>"text",'label'=>"Entrez ci-dessous un motif de refus :",'name'=>"detail_refuse",'size'=>"50",'value'=>"")); - $ret=$html->form_confirm($_SEVER["PHP_SELF"]."?id=".$id,$langs->trans("ConfirmRefuseTrip"),"","confirm_refuse",$array_input,"yes",0); + $ret=$form->form_confirm($_SEVER["PHP_SELF"]."?id=".$id,$langs->trans("ConfirmRefuseTrip"),"","confirm_refuse",$array_input,"yes",0); if ($ret == 'html') print '
'; endif; if ($action == 'delete_line') { - $ret=$html->form_confirm($_SEVER["PHP_SELF"]."?id=".$_GET['id']."&rowid=".$_GET['rowid'],$langs->trans("DeleteLine"),$langs->trans("ConfirmDeleteLine"),"confirm_delete_line"); + $ret=$form->form_confirm($_SEVER["PHP_SELF"]."?id=".$_GET['id']."&rowid=".$_GET['rowid'],$langs->trans("DeleteLine"),$langs->trans("ConfirmDeleteLine"),"confirm_delete_line"); if ($ret == 'html') print '
'; } @@ -1219,11 +1174,11 @@ else // Ref print ''.$langs->trans("Ref").''; - print $form->showrefnav($object, 'id', $linkback, 1, 'rowid', 'ref', ''); + print $form->showrefnav($object, 'id', $linkback, 1, 'ref', 'ref', ''); print ''; print ''; - print ''.$langs->trans("Periode").''; + print ''.$langs->trans("Period").''; print ''; print get_date_range($object->date_debut,$object->date_fin,'',$langs,0); print ''; @@ -1313,9 +1268,10 @@ else print ''; if ($object->fk_user_author > 0) { - $userfee=new User($db); - $userfee->fetch($object->fk_user_author); - print $userfee->getNomUrl(1); + $userauthor=new User($db); + $result=$userauthor->fetch($object->fk_user_author); + if ($result < 0) dol_print_error('',$userauthor->error); + print $userauthor->getNomUrl(1); } print ''; @@ -1387,7 +1343,7 @@ else print ''; print ''; - if ($action != 'editline') print ''; + if ($action != 'editline') print ''; print ''; print ''; print ''; @@ -1418,17 +1374,21 @@ else { print ''; print ''; print ''; - print ''; + print ''; print ''; print ''; print ''; print ''; print ''; - print ''; - print ''; + print ''; + print ''; // Ajout des boutons de modification/suppression if($object->fk_c_expensereport_statuts<2 OR $object->fk_c_expensereport_statuts==99) @@ -1452,7 +1412,7 @@ else print ''; // Sélection date print ''; // Sélection projet @@ -1512,12 +1472,13 @@ else } //print ''; - // Ajouter une ligne + // Add a line if (($object->fk_c_expensereport_statuts==0 || $object->fk_c_expensereport_statuts==99) && $action != 'editline') { print_fiche_titre($langs->trans("AddLine"),'',''); print ''; + print ''; print ''; print ''; @@ -1528,7 +1489,7 @@ else print ''; print ''; print ''; - print ''; + print ''; print ''; print ''; print ''; @@ -1537,43 +1498,42 @@ else // Sélection date print ''; // Sélection projet print ''; // Sélection type print ''; // Add comments print ''; // Sélection TVA print ''; // Prix unitaire print ''; // Quantité print ''; print ''; @@ -1589,9 +1549,10 @@ else { dol_print_error($db); } - } // end edit or not edit - dol_fiche_end(); + dol_fiche_end(); + + } // end edit or not edit } // end of if result else @@ -1614,22 +1575,26 @@ print '
'; if ($action != 'create' && $action != 'edit') { $object = new ExpenseReport($db); - $object->fetch($id,$user); + $object->fetch($id); + /* Si l'état est "Brouillon" * ET user à droit "creer/supprimer" * ET fk_user_author == user courant * Afficher : "Enregistrer" / "Modifier" / "Supprimer" */ - if ($user->rights->expensereport->creer AND $object->fk_c_expensereport_statuts==0) + if ($user->rights->expensereport->creer && $object->fk_c_expensereport_statuts==0) { if ($object->fk_user_author == $user->id) { // Modifier print ''.$langs->trans('ModifyInfoGen').''; - // Enregistrer - print ''.$langs->trans('Validate').''; + // Validate + if (count($object->lines) > 0 || count($object->lignes) > 0) + { + print ''.$langs->trans('Validate').''; + } if ($user->rights->expensereport->supprimer) { @@ -1694,13 +1659,13 @@ if ($action != 'create' && $action != 'edit') // Valider print ''.$langs->trans('Approve').''; // Refuser - print ''.$langs->trans('REFUSE').''; + print ''.$langs->trans('Refuse').''; //} if ($object->fk_user_author==$user->id) { // Annuler - print ''.$langs->trans('CANCEL').''; + print ''.$langs->trans('Cancel').''; } if($user->rights->expensereport->supprimer) @@ -1777,8 +1742,8 @@ print '
'; */ if($user->rights->expensereport->export && $object->fk_c_expensereport_statuts>0 && $action != 'edit') { - $filename = dol_sanitizeFileName($object->ref_number); - $filedir = $conf->expensereport->dir_output . "/" . dol_sanitizeFileName($object->ref_number); + $filename = dol_sanitizeFileName($object->ref); + $filedir = $conf->expensereport->dir_output . "/" . dol_sanitizeFileName($object->ref); $urlsource = $_SERVER["PHP_SELF"]."?id=".$object->id; $genallowed = 1; $delallowed = 1; diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index ee8555a6e69..c357807f315 100755 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -14,7 +14,7 @@ class ExpenseReport extends CommonObject var $fk_element = 'fk_expensereport'; var $id; - var $ref_number; + var $ref; var $lignes=array(); var $total_ht; var $total_tva; @@ -94,11 +94,11 @@ class ExpenseReport extends CommonObject $this->statuts_short[6]='Paid'; $this->statuts_short[99]='Refused'; $this->statuts_logo[0]='statut0'; - $this->statuts_logo[2]='statut4'; - $this->statuts_logo[4]='statut3'; - $this->statuts_logo[5]='statut5'; + $this->statuts_logo[2]='statut1'; + $this->statuts_logo[4]='statut5'; + $this->statuts_logo[5]='statut3'; $this->statuts_logo[6]='statut6'; - $this->statuts_logo[99]='statutx'; + $this->statuts_logo[99]='statut8'; return 1; } @@ -118,7 +118,7 @@ class ExpenseReport extends CommonObject $this->db->begin(); $sql = "INSERT INTO ".MAIN_DB_PREFIX.$this->table_element." ("; - $sql.= "ref_number"; + $sql.= "ref"; $sql.= ",total_ht"; $sql.= ",total_ttc"; $sql.= ",total_tva"; @@ -150,16 +150,16 @@ class ExpenseReport extends CommonObject if ($result) { $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX.$this->table_element); - $this->ref_number='(PROV'.$this->id.')'; + $this->ref='(PROV'.$this->id.')'; - $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element." SET ref_number='".$this->ref_number."' WHERE rowid=".$this->id; + $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element." SET ref='".$this->ref."' WHERE rowid=".$this->id; dol_syslog(get_class($this)."::create sql=".$sql); $resql=$this->db->query($sql); if (!$resql) $error++; foreach ($this->lignes as $i => $val) { - $newndfline=new ExpenseReportLigne($this->db); + $newndfline=new ExpenseReportLine($this->db); $newndfline=$this->lignes[$i]; $newndfline->fk_expensereport=$this->id; if ($result >= 0) @@ -217,13 +217,13 @@ class ExpenseReport extends CommonObject $sql.= " total_ht = ".$this->total_ht; $sql.= " , total_ttc = ".$this->total_ttc; $sql.= " , total_tva = ".$this->total_tva; - $sql.= " , date_debut = '".$this->date_debut."'"; - $sql.= " , date_fin = '".$this->date_fin."'"; + $sql.= " , date_debut = '".$this->db->idate($this->date_debut)."'"; + $sql.= " , date_fin = '".$this->db->idate($this->date_fin)."'"; $sql.= " , fk_user_author = ".($user->id > 0 ? "'".$user->id."'":"null"); $sql.= " , fk_user_validator = ".($this->fk_user_validator > 0 ? $this->fk_user_validator:"null"); $sql.= " , fk_user_valid = ".($this->fk_user_valid > 0 ? $this->fk_user_valid:"null"); $sql.= " , fk_user_paid = ".($this->fk_user_paid > 0 ? $this->fk_user_paid:"null"); - $sql.= " , fk_c_expensereport_statuts = ".($this->fk_c_expensereport_statuts > 0 ? $this->fk_c_expensereport_statuts:"null"); + $sql.= " , fk_c_expensereport_statuts = ".($this->fk_c_expensereport_statuts >= 0 ? $this->fk_c_expensereport_statuts:'0'); $sql.= " , fk_c_paiement = ".($this->fk_c_paiement > 0 ? $this->fk_c_paiement:"null"); $sql.= " , note = ".(!empty($this->note)?"'".$this->db->escape($this->note)."'":"''"); $sql.= " , detail_refuse = ".(!empty($this->detail_refuse)?"'".$this->db->escape($this->detail_refuse)."'":"''"); @@ -246,19 +246,14 @@ class ExpenseReport extends CommonObject * Load an object from database * * @param int $id Id - * @param User $user User we want expense report for + * @param string $ref Ref + * @return int <0 if KO, >0 if OK */ - function fetch($id,$user='') + function fetch($id, $ref='') { global $conf,$db; - if (!$user->rights->expensereport->lire): - $restrict = " AND fk_user_author = ".$user->id; - else: - $restrict = ""; - endif; - - $sql = "SELECT d.rowid, d.ref_number, d.note,"; // DEFAULT + $sql = "SELECT d.rowid, d.ref, d.note,"; // DEFAULT $sql.= " d.detail_refuse, d.detail_cancel, d.fk_user_refuse, d.fk_user_cancel,"; // ACTIONS $sql.= " d.date_refuse, d.date_cancel,"; // ACTIONS $sql.= " d.total_ht, d.total_ttc, d.total_tva,"; // TOTAUX (int) @@ -267,7 +262,8 @@ class ExpenseReport extends CommonObject $sql.= " d.fk_user_valid, d.fk_user_paid,"; // FOREING KEY 2 (int) $sql.= " dp.libelle as libelle_paiement, dp.code as code_paiement"; // INNER JOIN paiement $sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element." d LEFT JOIN ".MAIN_DB_PREFIX."c_paiement dp ON d.fk_c_paiement = dp.id"; - $sql.= " WHERE d.rowid = ".$id; + if ($ref) $sql.= " WHERE d.ref = '".$this->db->escape($ref)."'"; + else $sql.= " WHERE d.rowid = ".$id; $sql.= $restrict; dol_syslog(get_class($this)."::fetch sql=".$sql, LOG_DEBUG); @@ -278,8 +274,7 @@ class ExpenseReport extends CommonObject if ($obj) { $this->id = $obj->rowid; - $this->ref = $obj->ref_number; - $this->ref_number = $obj->ref_number; + $this->ref = $obj->ref; $this->total_ht = $obj->total_ht; $this->total_tva = $obj->total_tva; $this->total_ttc = $obj->total_ttc; @@ -303,11 +298,12 @@ class ExpenseReport extends CommonObject $this->fk_user_cancel = $obj->fk_user_cancel; $user_author = new User($this->db); - $user_author->fetch($this->fk_user_author); + if ($this->fk_user_author > 0) $user_author->fetch($this->fk_user_author); + $this->user_author_infos = dolGetFirstLastname($user_author->firstname, $user_author->lastname); $user_approver = new User($this->db); - $user_approver->fetch($this->fk_user_validator); + if ($this->fk_user_validator > 0) $user_approver->fetch($this->fk_user_validator); $this->user_validator_infos = dolGetFirstLastname($user_approver->firstname, $user_approver->lastname); $this->fk_c_expensereport_statuts = $obj->status; @@ -317,14 +313,14 @@ class ExpenseReport extends CommonObject if ($this->fk_c_expensereport_statuts==5 || $this->fk_c_expensereport_statuts==6) { $user_valid = new User($this->db); - $user_valid->fetch($this->fk_user_valid); + if ($this->fk_user_valid > 0) $user_valid->fetch($this->fk_user_valid); $this->user_valid_infos = dolGetFirstLastname($user_valid->firstname, $user_valid->lastname); } if ($this->fk_c_expensereport_statuts==6) { $user_paid = new User($this->db); - $user_paid->fetch($this->fk_user_paid); + if ($this->fk_user_paid > 0) $user_paid->fetch($this->fk_user_paid); $this->user_paid_infos = dolGetFirstLastname($user_paid->firstname, $user_paid->lastname); } @@ -395,6 +391,66 @@ class ExpenseReport extends CommonObject } + /** + * Load information on object + * + * @param int $id Id of object + * @return void + */ + function info($id) + { + global $conf; + + $sql = "SELECT f.rowid,"; + $sql.= " f.date_create as datec,"; + $sql.= " f.tms as date_modification,"; + $sql.= " f.date_valide as datev,"; + $sql.= " f.fk_user_author,"; + $sql.= " f.fk_user_modif as fk_user_modification,"; + $sql.= " f.fk_user_validator"; + $sql.= " FROM ".MAIN_DB_PREFIX."expensereport as f"; + $sql.= " WHERE f.rowid = ".$id; + $sql.= " AND f.entity = ".$conf->entity; + + $resql = $this->db->query($sql); + if ($resql) + { + if ($this->db->num_rows($resql)) + { + $obj = $this->db->fetch_object($resql); + + $this->id = $obj->rowid; + + $this->date_creation = $this->db->jdate($obj->datec); + $this->date_modification = $this->db->jdate($obj->date_modification); + $this->date_validation = $this->db->jdate($obj->datev); + + $cuser = new User($this->db); + $cuser->fetch($obj->fk_user_author); + $this->user_creation = $cuser; + + if ($obj->fk_user_valid) + { + $vuser = new User($this->db); + $vuser->fetch($obj->fk_user_valid); + $this->user_validation = $vuser; + } + if ($obj->fk_user_modification) + { + $muser = new User($this->db); + $muser->fetch($obj->fk_user_modification); + $this->user_modification = $muser; + } + + } + $this->db->free($resql); + } + else + { + dol_print_error($this->db); + } + } + /** * fetch_line_by_project @@ -429,7 +485,7 @@ class ExpenseReport extends CommonObject $objp = $db->fetch_object($result); - $sql2 = "SELECT d.rowid, d.fk_user_author, d.ref_number, d.fk_c_expensereport_statuts"; + $sql2 = "SELECT d.rowid, d.fk_user_author, d.ref, d.fk_c_expensereport_statuts"; $sql2.= " FROM ".MAIN_DB_PREFIX."expensereport as d"; $sql2.= " WHERE d.rowid = '".$objp->fk_expensereport."'"; @@ -437,7 +493,7 @@ class ExpenseReport extends CommonObject $obj = $db->fetch_object($result2); $objp->fk_user_author = $obj->fk_user_author; - $objp->ref_num = $obj->ref_number; + $objp->ref = $obj->ref; $objp->fk_c_expensereport_status = $obj->fk_c_expensereport_statuts; $objp->rowid = $obj->rowid; @@ -561,15 +617,15 @@ class ExpenseReport extends CommonObject */ function fetch_lines() { + $this->lines=array(); + $sql = ' SELECT de.rowid, de.comments, de.qty, de.value_unit, de.date,'; $sql.= ' de.'.$this->fk_element.', de.fk_c_type_fees, de.fk_projet, de.fk_c_tva,'; $sql.= ' de.total_ht, de.total_tva, de.total_ttc,'; $sql.= ' ctf.code as code_type_fees, ctf.label as libelle_type_fees,'; - $sql.= ' ctv.taux as taux_tva,'; $sql.= ' p.ref as ref_projet, p.title as title_projet'; $sql.= ' FROM '.MAIN_DB_PREFIX.$this->table_element_line.' as de'; $sql.= ' INNER JOIN '.MAIN_DB_PREFIX.'c_type_fees ctf ON de.fk_c_type_fees = ctf.id'; - $sql.= ' INNER JOIN '.MAIN_DB_PREFIX.'c_tva ctv ON de.fk_c_tva = ctv.rowid'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'projet p ON de.fk_projet = p.rowid'; $sql.= ' WHERE de.'.$this->fk_element.' = '.$this->id; @@ -582,7 +638,7 @@ class ExpenseReport extends CommonObject while ($i < $num) { $objp = $this->db->fetch_object($result); - $deplig = new ExpenseReportLigne($this->db); + $deplig = new ExpenseReportLine($this->db); $deplig->rowid = $objp->rowid; $deplig->comments = $objp->comments; @@ -606,6 +662,8 @@ class ExpenseReport extends CommonObject $deplig->projet_title = $objp->title_projet; $this->lignes[$i] = $deplig; + $this->lines[$i] = $deplig; + $i++; } $this->db->free($result); @@ -613,7 +671,7 @@ class ExpenseReport extends CommonObject } else { - $this->error=$this->db->error(); + $this->error=$this->db->lasterror(); dol_syslog('ExpenseReport::fetch_lines: Error '.$this->error,LOG_ERR); return -3; } @@ -673,7 +731,7 @@ class ExpenseReport extends CommonObject // Sélection du numéro de ref suivant $ref_next = $this->getNextNumRef(); - $ref_number_int = ($this->ref_number+1)-1; + $ref_number_int = ($this->ref+1)-1; // Sélection de la date de début de la NDF $sql = 'SELECT date_debut'; @@ -688,13 +746,13 @@ class ExpenseReport extends CommonObject // Création du ref_number suivant if($ref_next) { - $this->ref_number = strtoupper($user->login).$expld_car."NDF".$this->ref_number.$expld_car.$this->date_debut; + $this->ref = strtoupper($user->login).$expld_car."NDF".$this->ref.$expld_car.$this->date_debut; } if ($this->fk_c_expensereport_statuts != 2) { $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; - $sql.= " SET ref_number = '".$this->ref_number."', fk_c_expensereport_statuts = 2"; + $sql.= " SET ref = '".$this->ref."', fk_c_expensereport_statuts = 2"; $sql.= " ,ref_number_int = $ref_number_int"; $sql.= ' WHERE rowid = '.$this->id; @@ -776,7 +834,7 @@ class ExpenseReport extends CommonObject if ($this->fk_c_expensereport_statuts != 5) { $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; - $sql.= " SET ref_number = '".$this->ref_number."', fk_c_expensereport_statuts = 5, fk_user_valid = ".$user->id; + $sql.= " SET ref = '".$this->ref."', fk_c_expensereport_statuts = 5, fk_user_valid = ".$user->id; $sql.= ', date_valide='.$this->date_valide; $sql.= ' WHERE rowid = '.$this->id; @@ -808,7 +866,7 @@ class ExpenseReport extends CommonObject if ($this->fk_c_expensereport_statuts != 99) { $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; - $sql.= " SET ref_number = '".$this->ref_number."', fk_c_expensereport_statuts = 99, fk_user_refuse = ".$user->id; + $sql.= " SET ref = '".$this->ref."', fk_c_expensereport_statuts = 99, fk_user_refuse = ".$user->id; $sql.= ', date_refuse='.$this->date_refuse; $sql.= ", detail_refuse='".addslashes($details)."'"; $sql.= ' WHERE rowid = '.$this->id; @@ -903,7 +961,7 @@ class ExpenseReport extends CommonObject { $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; $sql.= " SET fk_c_deplacement_statuts = 1,"; - //$sql.= " , ref_number = '(PROV".$this->id.")', ref_number_int = 0"; + //$sql.= " , ref = '(PROV".$this->id.")', ref_number_int = 0"; $sql.= " ref_number_int = 0"; $sql.= ' WHERE rowid = '.$this->id; @@ -1005,15 +1063,15 @@ class ExpenseReport extends CommonObject if($this->db->num_rows($result) > 0): $objp = $this->db->fetch_object($result); - $this->ref_number = $objp->ref_number_int; - $this->ref_number++; - while(strlen($this->ref_number) < $num_car): - $this->ref_number = "0".$this->ref_number; + $this->ref = $objp->ref_number_int; + $this->ref++; + while(strlen($this->ref) < $num_car): + $this->ref = "0".$this->ref; endwhile; else: - $this->ref_number = 1; - while(strlen($this->ref_number) < $num_car): - $this->ref_number = "0".$this->ref_number; + $this->ref = 1; + while(strlen($this->ref) < $num_car): + $this->ref = "0".$this->ref; endwhile; endif; @@ -1119,7 +1177,7 @@ class ExpenseReport extends CommonObject $total_tva = $total_ttc - $total_ht; // fin calculs - $ligne = new ExpenseReportLigne($this->db); + $ligne = new ExpenseReportLine($this->db); $ligne->comments = $comments; $ligne->qty = $qty; $ligne->value_unit = $value_unit; @@ -1295,7 +1353,7 @@ class ExpenseReport extends CommonObject /** * Class of expense report details lines */ -class ExpenseReportLigne +class ExpenseReportLine { var $db; var $error; @@ -1328,7 +1386,7 @@ class ExpenseReportLigne * * @param DoliDB $db Handlet database */ - function ExpenseReportLigne($db) + function ExpenseReportLine($db) { $this->db= $db; } @@ -1354,7 +1412,8 @@ class ExpenseReportLigne $result = $this->db->query($sql); - if($result) { + if($result) + { $objp = $this->db->fetch_object($result); $this->rowid = $objp->rowid; @@ -1391,7 +1450,9 @@ class ExpenseReportLigne { global $langs,$user,$conf; - dol_syslog("ExpenseReportLigne::Insert rang=".$this->rang, LOG_DEBUG); + $error=0; + + dol_syslog("ExpenseReportLine::Insert rang=".$this->rang, LOG_DEBUG); // Clean parameters $this->comments=trim($this->comments); @@ -1413,23 +1474,39 @@ class ExpenseReportLigne $sql.= " ".$this->total_ht.","; $sql.= " ".$this->total_tva.","; $sql.= " ".$this->total_ttc.","; - $sql.= "'".$this->date."'"; + $sql.= "'".$this->db->idate($this->date)."'"; $sql.= ")"; - dol_syslog("ExpenseReportLigne::insert sql=".$sql); + dol_syslog("ExpenseReportLine::insert sql=".$sql); $resql=$this->db->query($sql); - - if ($resql): + if ($resql) + { $this->rowid=$this->db->last_insert_id(MAIN_DB_PREFIX.'expensereport_det'); + + $tmpparent=new ExpenseReport($this->db); + $tmpparent->fetch($this->fk_expensereport); + $result = $tmpparent->update_price(); + if ($result < 0) + { + $error++; + $this->error = $tmpparent->error; + $this->errors = $tmpparent->errors; + } + } + + if (! $error) + { $this->db->commit(); return $this->rowid; - else: - $this->error=$this->db->error(); - dol_syslog("ExpenseReportLigne::insert Error ".$this->error, LOG_ERR); + } + else + { + $this->error=$this->db->lasterror(); + dol_syslog("ExpenseReportLine::insert Error ".$this->error, LOG_ERR); $this->db->rollback(); return -2; - endif; + } } /** @@ -1442,6 +1519,8 @@ class ExpenseReportLigne { global $user,$langs,$conf; + $error=0; + // Clean parameters $this->comments=trim($this->comments); @@ -1465,18 +1544,31 @@ class ExpenseReportLigne else $sql.= ",fk_c_tva=null"; $sql.= " WHERE rowid = ".$this->rowid; - dol_syslog("ExpenseReportLigne::update sql=".$sql); + dol_syslog("ExpenseReportLine::update sql=".$sql); $resql=$this->db->query($sql); if ($resql) + { + $tmpparent=new ExpenseReport($db); + $tmpparent->fetch($this->fk_expensereport); + $result = $tmpparent->update_price(); + if ($result < 0) + { + $error++; + $this->error = $tmpparent->error; + $this->errors = $tmpparent->errors; + } + } + + if (! $error) { $this->db->commit(); return 1; } else { - $this->error=$this->db->error(); - dol_syslog("ExpenseReportLigne::update Error ".$this->error, LOG_ERR); + $this->error=$this->db->lasterror(); + dol_syslog("ExpenseReportLine::update Error ".$this->error, LOG_ERR); $this->db->rollback(); return -2; } @@ -1503,7 +1595,7 @@ function select_expensereport_statut($selected='',$htmlname='fk_c_expensereport_ if ($useempty) print ''; foreach ($tmpep->statuts as $key => $val) { - if ($selected == $key) + if ($selected != '' && $selected == $key) { print ''; } - $sql = "SELECT c.code, c.label as type,c.id FROM ".MAIN_DB_PREFIX."c_type_fees as c"; + $sql = "SELECT c.id, c.code, c.label as type FROM ".MAIN_DB_PREFIX."c_type_fees as c"; $sql.= " ORDER BY c.label ASC"; $resql=$db->query($sql); if ($resql) @@ -1609,7 +1701,7 @@ function select_type_fees_id($selected='',$htmlname='type',$showempty=0) { $obj = $db->fetch_object($resql); print '
"; - print ''; + print ''; print ''; print ''; print ''; diff --git a/htdocs/expensereport/synchro_compta.php b/htdocs/expensereport/synchro_compta.php index 7d427c44fa1..211f5c4cc0a 100755 --- a/htdocs/expensereport/synchro_compta.php +++ b/htdocs/expensereport/synchro_compta.php @@ -38,7 +38,7 @@ if ($_GET["action"] == 'confirm_ndf_to_account' && $_GET["confirm"] == "yes"): $dateop = dol_mktime(12,0,0,$datePaiement[1],$datePaiement[2],$datePaiement[0]); $operation = $expensereport->code_paiement; - $label = "Règlement ".$expensereport->ref_number; + $label = "Règlement ".$expensereport->ref; $amount = - price2num($expensereport->total_ttc); $num_chq = ''; $cat1 = ''; @@ -73,7 +73,7 @@ if ($_GET["action"] == 'confirm_account_to_ndf' && $_GET["confirm"] == "yes"): $expensereport->fetch($idTrip,$user); $sql = "DELETE FROM ".MAIN_DB_PREFIX."bank"; - $sql.= " WHERE label LIKE '%".$expensereport->ref_number."%'"; + $sql.= " WHERE label LIKE '%".$expensereport->ref."%'"; $resql=$db->query($sql); if ($resql > 0): $sql = " UPDATE ".MAIN_DB_PREFIX."expensereport d"; @@ -137,7 +137,7 @@ else: print ' '; print ""; - $sql = "SELECT d.fk_bank_account, d.ref_number, d.rowid, d.date_valide, d.fk_user_author, d.total_ttc, d.integration_compta, d.fk_c_expensereport_statuts"; + $sql = "SELECT d.fk_bank_account, d.ref, d.rowid, d.date_valide, d.fk_user_author, d.total_ttc, d.integration_compta, d.fk_c_expensereport_statuts"; $sql.= " ,CONCAT(u.firstname,' ',u.lastname) as declarant_NDF"; $sql.= " FROM ".MAIN_DB_PREFIX."expensereport d"; $sql.= " INNER JOIN ".MAIN_DB_PREFIX."user u ON d.fk_user_author = u.rowid"; @@ -169,24 +169,30 @@ else: $objp = $db->fetch_object($resql); $var=!$var; print ""; - print ''; + print ''; print ''; print ''; print ''; - if($objp->integration_compta): + if($objp->integration_compta) + { print ''; - else: + } + else + { print ''; - endif; + } print ''; - if($objp->integration_compta): + if($objp->integration_compta) + { print ''; - else: + } + else + { print ''; - endif; + } print ""; $i++; diff --git a/htdocs/install/mysql/data/llx_c_type_fees.sql b/htdocs/install/mysql/data/llx_c_type_fees.sql index 9e763bf5ba8..19ee7865e9f 100644 --- a/htdocs/install/mysql/data/llx_c_type_fees.sql +++ b/htdocs/install/mysql/data/llx_c_type_fees.sql @@ -31,5 +31,5 @@ -- insert into llx_c_type_fees (code,label,active) values ('TF_OTHER', 'Other', 1); -insert into llx_c_type_fees (code,label,active) values ('TF_TRIP', 'Trip', 1); +insert into llx_c_type_fees (code,label,active) values ('TF_TRIP', 'Transportation', 1); insert into llx_c_type_fees (code,label,active) values ('TF_LUNCH', 'Lunch', 1); diff --git a/htdocs/install/mysql/migration/3.7.0-3.8.0.sql b/htdocs/install/mysql/migration/3.7.0-3.8.0.sql index 0acea91984b..7217a53b890 100755 --- a/htdocs/install/mysql/migration/3.7.0-3.8.0.sql +++ b/htdocs/install/mysql/migration/3.7.0-3.8.0.sql @@ -117,7 +117,7 @@ ALTER TABLE llx_stock_mouvement ADD COLUMN sellby date DEFAULT NULL; CREATE TABLE llx_expensereport ( rowid integer NOT NULL AUTO_INCREMENT PRIMARY KEY, - ref_number varchar(50) NOT NULL, + ref varchar(50) NOT NULL, entity integer DEFAULT 1 NOT NULL, -- multi company id ref_number_int integer DEFAULT NULL, ref_ext integer, @@ -131,6 +131,7 @@ CREATE TABLE llx_expensereport ( date_paiement datetime, date_valide datetime, date_create datetime NOT NULL, + tms timestamp, fk_user_author integer NOT NULL, fk_user_modif integer DEFAULT NULL, fk_user_validator integer DEFAULT NULL, @@ -151,12 +152,9 @@ CREATE TABLE llx_expensereport ( model_pdf varchar(50) DEFAULT NULL ) ENGINE=innodb; - - - CREATE TABLE llx_expensereport_det ( - rowid integer PRIMARY KEY NOT NULL, + rowid integer NOT NULL AUTO_INCREMENT PRIMARY KEY, fk_expensereport integer NOT NULL, fk_c_type_fees integer NOT NULL, fk_projet integer NOT NULL, @@ -184,4 +182,3 @@ CREATE TABLE llx_expensereport_det ) ENGINE=innodb; - diff --git a/htdocs/install/mysql/tables/llx_expensereport.sql b/htdocs/install/mysql/tables/llx_expensereport.sql index 6fcdfa92291..e998343e6db 100755 --- a/htdocs/install/mysql/tables/llx_expensereport.sql +++ b/htdocs/install/mysql/tables/llx_expensereport.sql @@ -18,7 +18,7 @@ CREATE TABLE llx_expensereport ( rowid integer NOT NULL AUTO_INCREMENT PRIMARY KEY, - ref_number varchar(50) NOT NULL, + ref varchar(50) NOT NULL, entity integer DEFAULT 1 NOT NULL, -- multi company id ref_number_int integer DEFAULT NULL, ref_ext integer, @@ -32,6 +32,7 @@ CREATE TABLE llx_expensereport ( date_paiement datetime, date_valide datetime, date_create datetime NOT NULL, + tms timestamp, fk_user_author integer NOT NULL, fk_user_modif integer DEFAULT NULL, fk_user_validator integer DEFAULT NULL, diff --git a/htdocs/install/mysql/tables/llx_expensereport_det.sql b/htdocs/install/mysql/tables/llx_expensereport_det.sql index 644668f5713..98e7c33265e 100644 --- a/htdocs/install/mysql/tables/llx_expensereport_det.sql +++ b/htdocs/install/mysql/tables/llx_expensereport_det.sql @@ -18,7 +18,7 @@ CREATE TABLE llx_expensereport_det ( - rowid integer PRIMARY KEY NOT NULL, + rowid integer NOT NULL AUTO_INCREMENT PRIMARY KEY, fk_expensereport integer NOT NULL, fk_c_type_fees integer NOT NULL, fk_projet integer NOT NULL, diff --git a/htdocs/langs/en_US/projects.lang b/htdocs/langs/en_US/projects.lang index b3c150d1687..0587ce39bfe 100644 --- a/htdocs/langs/en_US/projects.lang +++ b/htdocs/langs/en_US/projects.lang @@ -67,7 +67,7 @@ ListSupplierOrdersAssociatedProject=List of supplier's orders associated with th ListSupplierInvoicesAssociatedProject=List of supplier's invoices associated with the project ListContractAssociatedProject=List of contracts associated with the project ListFichinterAssociatedProject=List of interventions associated with the project -ListTripAssociatedProject=List of trips and expenses associated with the project +ListExpenseReportsAssociatedProject=List of expense reports associated with the project ListActionsAssociatedProject=List of events associated with the project ActivityOnProjectThisWeek=Activity on project this week ActivityOnProjectThisMonth=Activity on project this month diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php index 90fdae1232b..047f0bff057 100644 --- a/htdocs/projet/class/project.class.php +++ b/htdocs/projet/class/project.class.php @@ -424,6 +424,10 @@ class Project extends CommonObject if (empty($datefieldname)) return 'Error this object has no date field defined'; $sql.=" AND (".$datefieldname." <= '".$this->db->idate($datee)."' OR ".$datefieldname." IS NULL)"; } + if ($type == 'expensereport') + { + $sql ='eeee'; + } if (! $sql) return -1; //print $sql; diff --git a/htdocs/projet/element.php b/htdocs/projet/element.php index 1abaa37cac1..226f4afb573 100644 --- a/htdocs/projet/element.php +++ b/htdocs/projet/element.php @@ -38,6 +38,7 @@ if (! empty($conf->fournisseur->enabled)) require_once DOL_DOCUMENT_ROOT.'/fourn if (! empty($conf->contrat->enabled)) require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php'; if (! empty($conf->ficheinter->enabled)) require_once DOL_DOCUMENT_ROOT.'/fichinter/class/fichinter.class.php'; if (! empty($conf->deplacement->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/deplacement/class/deplacement.class.php'; +if (! empty($conf->expensereport->enabled)) require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; if (! empty($conf->agenda->enabled)) require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; $langs->load("projects"); @@ -225,13 +226,22 @@ $listofreferent=array( 'test'=>$conf->ficheinter->enabled && $user->rights->ficheinter->lire), 'trip'=>array( 'name'=>"TripsAndExpenses", - 'title'=>"ListTripAssociatedProject", + 'title'=>"ListExpenseReportsAssociatedProject", 'class'=>'Deplacement', 'table'=>'deplacement', 'datefieldname'=>'dated', 'margin'=>'minus', 'disableamount'=>1, 'test'=>$conf->deplacement->enabled && $user->rights->deplacement->lire), +'expensereport'=>array( + 'name'=>"ExpenseReports", + 'title'=>"ListExpenseReportsAssociatedProject", + 'class'=>'ExpenseReportLine', + 'table'=>'expensereport', + 'datefieldname'=>'date', + 'margin'=>'minus', + 'disableamount'=>1, + 'test'=>$conf->expensereport->enabled && $user->rights->expensereport->lire), 'agenda'=>array( 'name'=>"Agenda", 'title'=>"ListActionsAssociatedProject",
'.$langs->trans('Piece').''.$langs->trans('Piece').''.$langs->trans('Date').''.$langs->trans('Project').''.$langs->trans('Type').'
'; - print img_picto("Document", "generic"); + print img_picto($langs->trans("Document"), "object_generic"); print ' '.$piece_comptable.''.$objp->date.''.$objp->projet_ref.''; + $projecttmp->id=$objp->projet_id; + $projecttmp->ref=$objp->projet_ref; + print $projecttmp->getNomUrl(1); + print ''.$langs->trans("TF_".strtoupper($objp->type_fees_libelle)).''.$objp->comments.''.vatrate($objp->tva_taux,true).''.price($objp->value_unit).''.$objp->qty.''.$objp->total_ht.''.$objp->total_ttc.''.price($objp->total_ht).''.price($objp->total_ttc).'
'; - $html->select_date($objp->date,'date'); + $form->select_date($objp->date,'date'); print '
'.$langs->trans('Type').''.$langs->trans('Description').''.$langs->trans('VAT').''.$langs->trans('UnitPriceTTC').''.$langs->trans('PriceUTTC').''.$langs->trans('Qty').'
'; - $html->select_date(-1,'date'); + $form->select_date($date?$date:-1,'date'); print ''; - print select_projet('','','fk_projet'); - //$formproject->select_projects('','','fk_projet'); + $formproject->select_projects('', GETPOST('fk_projet'), 'fk_projet', 0, 0, 1, 1); print ''; - select_type_fees_id('TF_TRAIN','fk_c_type_fees'); + select_type_fees_id(GETPOST('fk_c_type_fees'),'fk_c_type_fees',1); print ''; - print ''; + print ''; print ''; $defaultvat=-1; - if (! empty($conf->global->DEPLACEMENT_NO_DEFAULT_VAT)) $conf->global->MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS = 'none'; - print ''; print ''; - print ''; + print ''; print ''; - print ''; + print ''; print '
'.img_object($langs->trans("ShowTrip"),"trip").' '.$objp->ref_number.''.img_object($langs->trans("ShowTrip"),"trip").' '.$objp->ref.''.($objp->date_debut > 0 ? dol_print_date($objp->date_debut, 'day') : '').''.($objp->date_fin > 0 ? dol_print_date($objp->date_fin, 'day') : '').''.img_object($langs->trans("ShowUser"),"user").' '.dolGetFirstLastname($objp->firstname, $objp->lastname).'
'.$objp->ref_number.''.$objp->ref.''.dol_print_date($db->jdate($objp->date_valide),'day').''.img_object($langs->trans("ShowUser"),"user").' '.$objp->declarant_NDF.''.$objp->total_ttc.' '.$langs->trans("EURO").'Compte vers NDFNDF vers Compte'.$account->label.'Intégration OKIntégration Non OK