Work on expensereport module

This commit is contained in:
Laurent Destailleur 2015-02-15 22:49:23 +01:00
parent e5b401c8f2
commit 2e0b2fb012
16 changed files with 472 additions and 346 deletions

View File

@ -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();
}
}

View File

@ -0,0 +1,61 @@
<?php
/* Copyright (C) 2011 Regis Houssin <regis.houssin@capnetworks.com>
*
* 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 <http://www.gnu.org/licenses/>.
* 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;
}

View File

@ -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 '<tr>';
print '<td>'.$langs->trans("DateStart").'</td>';
print '<td>';
$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 '</td>';
print '</tr>';
print '<tr>';
print '<td>'.$langs->trans("DateEnd").'</td>';
print '<td>';
$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 '</td>';
print '</tr>';
print '<tr>';
@ -990,8 +943,8 @@ if ($action == 'create')
print '<td>';
$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 '</td>';
print '</tr>';
if (! empty($conf->global->EXPENSEREPORT_ASK_PAYMENTMODE_ON_CREATION))
@ -999,7 +952,7 @@ if ($action == 'create')
print '<tr>';
print '<td>'.$langs->trans("ModePaiement").'</td>';
print '<td>';
$html->select_types_paiements(2,'fk_c_paiement');
$form->select_types_paiements(2,'fk_c_paiement');
print '</td>';
print '</tr>';
}
@ -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 "<form name='update' action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">\n";
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="id" value="'.$id.'">';
dol_fiche_head($head, 'card', $langs->trans("TripCard"), 0, 'trip');
if($object->fk_c_expensereport_statuts==99)
{
@ -1071,7 +1025,6 @@ else
print '<input type="hidden" name="action" value="update">';
}
print '<input type="hidden" name="id" value="'.$id.'">';
print '<table class="border" style="width:100%;">';
@ -1086,13 +1039,13 @@ else
print '<tr>';
print '<td>'.$langs->trans("DateStart").'</td>';
print '<td>';
$html->select_date($object->date_debut,'date_debut');
$form->select_date($object->date_debut,'date_debut');
print '</td>';
print '</tr>';
print '<tr>';
print '<td>'.$langs->trans("DateEnd").'</td>';
print '<td>';
$html->select_date($object->date_fin,'date_fin');
$form->select_date($object->date_fin,'date_fin');
print '</td>';
print '</tr>';
@ -1101,7 +1054,7 @@ else
print '<tr>';
print '<td>'.$langs->trans("ModePaiement").'</td>';
print '<td>';
$html->select_types_paiements($object->fk_c_paiement,'fk_c_paiement');
$form->select_types_paiements($object->fk_c_paiement,'fk_c_paiement');
print '</td>';
print '</tr>';
}
@ -1112,8 +1065,8 @@ else
print '<td>'.$langs->trans("VALIDATOR").'</td>';
print '<td>';
$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 '</td>';
print '</tr>';
}
@ -1149,67 +1102,69 @@ else
print '<tr>';
print '<td>'.$langs->trans("Note").'</td>';
print '<td>';
print '<textarea name="note" class="flat" rows="1" cols="70">'.$object->note.'</textarea>';
print '<textarea name="note" class="flat" rows="'.ROWS_2.'" cols="70">'.$object->note.'</textarea>';
print '</td>';
print '</tr>';
print '</table>';
print '<br><div class="center">';
dol_fiche_end();
print '<div class="center">';
print '<input type="submit" value="'.$langs->trans("Modify").'" name="bouton" class="button"> &nbsp; &nbsp; ';
print '<input type="button" value="'.$langs->trans("CancelAddTrip").'" class="button" onclick="history.go(-1)" />';
print '<input type="button" value="'.$langs->trans("Cancel").'" class="button" onclick="history.go(-1)" />';
print '</div>';
print '</form>';
}
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 '<br>';
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 '<br>';
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 '<br>';
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 '<br>';
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 '<br>';
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 '<br>';
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 '<br>';
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 '<br>';
endif;
if ($action == 'delete_line')
{
$ret=$html->form_confirm($_SEVER["PHP_SELF"]."?id=".$_GET['id']."&amp;rowid=".$_GET['rowid'],$langs->trans("DeleteLine"),$langs->trans("ConfirmDeleteLine"),"confirm_delete_line");
$ret=$form->form_confirm($_SEVER["PHP_SELF"]."?id=".$_GET['id']."&amp;rowid=".$_GET['rowid'],$langs->trans("DeleteLine"),$langs->trans("ConfirmDeleteLine"),"confirm_delete_line");
if ($ret == 'html') print '<br>';
}
@ -1219,11 +1174,11 @@ else
// Ref
print '<tr><td width="25%">'.$langs->trans("Ref").'</td><td>';
print $form->showrefnav($object, 'id', $linkback, 1, 'rowid', 'ref', '');
print $form->showrefnav($object, 'id', $linkback, 1, 'ref', 'ref', '');
print '</td></tr>';
print '<tr>';
print '<td>'.$langs->trans("Periode").'</td>';
print '<td>'.$langs->trans("Period").'</td>';
print '<td>';
print get_date_range($object->date_debut,$object->date_fin,'',$langs,0);
print '</td>';
@ -1313,9 +1268,10 @@ else
print '<td>';
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 '</td></tr>';
@ -1387,7 +1343,7 @@ else
print '<table class="noborder" width="100%">';
print '<tr class="liste_titre">';
if ($action != 'editline') print '<td style="text-align:center;width:9%;">'.$langs->trans('Piece').'</td>';
if ($action != 'editline') print '<td style="text-align:center;">'.$langs->trans('Piece').'</td>';
print '<td style="text-align:center;">'.$langs->trans('Date').'</td>';
print '<td style="text-align:center;">'.$langs->trans('Project').'</td>';
print '<td style="text-align:center;">'.$langs->trans('Type').'</td>';
@ -1418,17 +1374,21 @@ else
{
print '<tr '.$bc[$var].'>';
print '<td style="text-align:center;width:9%;">';
print img_picto("Document", "generic");
print img_picto($langs->trans("Document"), "object_generic");
print ' <span style="color:red;font-weight:bold;font-size:14px;">'.$piece_comptable.'</span></td>';
print '<td style="text-align:center;">'.$objp->date.'</td>';
print '<td style="text-align:center;">'.$objp->projet_ref.'</td>';
print '<td style="text-align:center;">';
$projecttmp->id=$objp->projet_id;
$projecttmp->ref=$objp->projet_ref;
print $projecttmp->getNomUrl(1);
print '</td>';
print '<td style="text-align:center;">'.$langs->trans("TF_".strtoupper($objp->type_fees_libelle)).'</td>';
print '<td style="text-align:left;">'.$objp->comments.'</td>';
print '<td style="text-align:right;">'.vatrate($objp->tva_taux,true).'</td>';
print '<td style="text-align:right;">'.price($objp->value_unit).'</td>';
print '<td style="text-align:right;">'.$objp->qty.'</td>';
print '<td style="text-align:right;">'.$objp->total_ht.'</td>';
print '<td style="text-align:right;">'.$objp->total_ttc.'</td>';
print '<td style="text-align:right;">'.price($objp->total_ht).'</td>';
print '<td style="text-align:right;">'.price($objp->total_ttc).'</td>';
// 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 '<tr '.$bc[$var].'>';
// Sélection date
print '<td style="text-align:center;width:10%;">';
$html->select_date($objp->date,'date');
$form->select_date($objp->date,'date');
print '</td>';
// Sélection projet
@ -1512,12 +1472,13 @@ else
}
//print '</div>';
// 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 '<form method="post" action="'.$_SERVER['PHP_SELF'].'" name="addline">';
print '<input type="hidden" name="id" value="'.$id.'">';
print '<input type="hidden" name="fk_expensereport" value="'.$id.'" />';
print '<input type="hidden" name="action" value="addline" />';
@ -1528,7 +1489,7 @@ else
print '<td>'.$langs->trans('Type').'</td>';
print '<td>'.$langs->trans('Description').'</td>';
print '<td style="text-align:right;">'.$langs->trans('VAT').'</td>';
print '<td style="text-align:right;">'.$langs->trans('UnitPriceTTC').'</td>';
print '<td style="text-align:right;">'.$langs->trans('PriceUTTC').'</td>';
print '<td style="text-align:right;">'.$langs->trans('Qty').'</td>';
print '<td style="text-align:center;"></td>';
print '</tr>';
@ -1537,43 +1498,42 @@ else
// Sélection date
print '<td style="text-align:center;">';
$html->select_date(-1,'date');
$form->select_date($date?$date:-1,'date');
print '</td>';
// Sélection projet
print '<td>';
print select_projet('','','fk_projet');
//$formproject->select_projects('','','fk_projet');
$formproject->select_projects('', GETPOST('fk_projet'), 'fk_projet', 0, 0, 1, 1);
print '</td>';
// Sélection type
print '<td>';
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 '</td>';
// Add comments
print '<td style="text-align:left;">';
print '<textarea class="flat_ndf centpercent" name="comments"></textarea>';
print '<textarea class="flat_ndf centpercent" name="comments">'.GETPOST('comments').'</textarea>';
print '</td>';
// Sélection TVA
print '<td style="text-align:right;">';
$defaultvat=-1;
if (! empty($conf->global->DEPLACEMENT_NO_DEFAULT_VAT)) $conf->global->MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS = 'none';
print '<select class="flat" name="fk_c_tva">';
if (! empty($conf->global->EXPENSEREPORT_NO_DEFAULT_VAT)) $conf->global->MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS = 'none';
print '<select class="flat" name="vatrate">';
print '<option name="none" value="" selected="selected">';
print $form->load_tva('fk_c_tva', (isset($_POST["fk_c_tva"])?$_POST["fk_c_tva"]:$defaultvat), $mysoc, '', 0, 0, '', true);
print $form->load_tva('vatrate', (isset($_POST["vatrate"])?$_POST["vatrate"]:$defaultvat), $mysoc, '', 0, 0, '', true);
print '</select>';
print '</td>';
// Prix unitaire
print '<td style="text-align:right;">';
print '<input type="text" size="10" name="value_unit" />';
print '<input type="text" size="10" name="value_unit" value="'.GETPOST('value_unit').'">';
print '</td>';
// Quantité
print '<td style="text-align:right;">';
print '<input type="text" size="4" name="qty" />';
print '<input type="text" size="4" name="qty" value="'.GETPOST('qty').'">';
print '</td>';
print '<td style="text-align:center;"><input type="submit" value="'.$langs->trans("Add").'" name="bouton" class="button"></td>';
@ -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 '<div class="tabsAction">';
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 '<a class="butAction" href="'.$_SEVER["PHP_SELF"].'?action=edit&id='.$id.'">'.$langs->trans('ModifyInfoGen').'</a>';
// Enregistrer
print '<a class="butAction" href="'.$_SEVER["PHP_SELF"].'?action=save&id='.$id.'">'.$langs->trans('Validate').'</a>';
// Validate
if (count($object->lines) > 0 || count($object->lignes) > 0)
{
print '<a class="butAction" href="'.$_SEVER["PHP_SELF"].'?action=save&id='.$id.'">'.$langs->trans('Validate').'</a>';
}
if ($user->rights->expensereport->supprimer)
{
@ -1694,13 +1659,13 @@ if ($action != 'create' && $action != 'edit')
// Valider
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=validate&id='.$id.'">'.$langs->trans('Approve').'</a>';
// Refuser
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=refuse&id='.$id.'">'.$langs->trans('REFUSE').'</a>';
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=refuse&id='.$id.'">'.$langs->trans('Refuse').'</a>';
//}
if ($object->fk_user_author==$user->id)
{
// Annuler
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=cancel&id='.$id.'">'.$langs->trans('CANCEL').'</a>';
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=cancel&id='.$id.'">'.$langs->trans('Cancel').'</a>';
}
if($user->rights->expensereport->supprimer)
@ -1777,8 +1742,8 @@ print '<div style="width:50%">';
*/
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;

View File

@ -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 '<option value="-1">&nbsp;</option>';
foreach ($tmpep->statuts as $key => $val)
{
if ($selected == $key)
if ($selected != '' && $selected == $key)
{
print '<option value="'.$key.'" selected="true">';
}
@ -1597,7 +1689,7 @@ function select_type_fees_id($selected='',$htmlname='type',$showempty=0)
print '>&nbsp;</option>';
}
$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 '<option value="'.$obj->id.'"';
if ($obj->code == $selected) print ' selected="true"';
if ($obj->code == $selected || $obj->id == $selected) print ' selected="selected"';
print '>';
if ($obj->code != $langs->trans($obj->code)) print $langs->trans($obj->code);
else print $langs->trans($obj->type);

View File

@ -23,12 +23,14 @@
*/
/**
* \file htdocs/compta/expensereport/document.php
* \file htdocs/expensereport/document.php
* \ingroup expensereport
* \brief Page of linked files onto trip and expenses
*/
require '../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/expensereport.lib.php';
require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
$langs->load("other");
$langs->load("trips");
@ -84,7 +86,7 @@ if ($object->id)
{
$object->fetch_thirdparty();
$head=trip_prepare_head($object);
$head=expensereport_prepare_head($object);
dol_fiche_head($head, 'documents', $langs->trans("TripCard"), 0, 'trip');

View File

@ -125,7 +125,7 @@ if (isset($_POST['action']))
$outputlangs = $langs;
$outputlangs->charset_output = 'UTF-8';
$sql = "SELECT d.rowid, d.ref_number, d.date_paiement, d.total_ht, d.total_tva, d.total_ttc";
$sql = "SELECT d.rowid, d.ref, d.date_paiement, d.total_ht, d.total_tva, d.total_ttc";
$sql.= " FROM ".MAIN_DB_PREFIX."expensereport as d";
$sql.= " WHERE date_paiement LIKE '".$select_date."%'";
$sql.= " ORDER BY d.rowid";
@ -144,8 +144,8 @@ if (isset($_POST['action']))
$objet->total_ht = number_format($objet->total_ht,2);
$objet->total_tva = number_format($objet->total_tva,2);
$objet->total_ttc = number_format($objet->total_ttc,2);
$objet->ref_number = trim($objet->ref_number);
$ligne.= "{$objet->rowid}, {$objet->ref_number}, ----, {$objet->date_paiement}, {$objet->total_ht}, {$objet->total_tva}, {$objet->total_ttc}\n";
$objet->ref = trim($objet->ref);
$ligne.= "{$objet->rowid}, {$objet->ref}, ----, {$objet->date_paiement}, {$objet->total_ht}, {$objet->total_tva}, {$objet->total_ttc}\n";
$ligne.= "--->, Ligne, Type, Description, ----, ----, ----\n";

View File

@ -24,9 +24,9 @@
*/
require '../main.inc.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/trip.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/expensereport.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
require_once DOL_DOCUMENT_ROOT.'/compta/expensereport/class/expensereport.class.php';
require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
$langs->load("trips");
@ -48,7 +48,7 @@ if ($id)
$object->fetch($id);
$object->info($id);
$head = trip_prepare_head($object);
$head = expensereport_prepare_head($object);
dol_fiche_head($head, 'info', $langs->trans("TripCard"), 0, 'trip');

View File

@ -53,25 +53,22 @@ llxHeader();
$max_year = 5;
$min_year = 5;
$sortorder = $_GET["sortorder"];
$sortfield = $_GET["sortfield"];
$page = $_GET["page"];
$search_ref = $_GET['search_ref'];
$month_start = $_GET['month_start'];
$year_start = $_GET['year_start'];
$month_end = $_GET['month_end'];
$year_end = $_GET['year_end'];
$search_user = $_GET['search_user'];
$search_state = $_GET['search_state'];
$search_ref = GETPOST('search_ref');
$search_user = GETPOST('search_user','int');
$search_state = GETPOST('search_state','int');
$sortorder = $_GET["sortorder"];
$sortfield = $_GET["sortfield"];
$page = $_GET["page"];
if (!$sortorder) $sortorder="DESC";
if (!$sortfield) $sortfield="d.date_debut";
if ($page == -1) {
$page = 0 ;
}
@ -81,7 +78,7 @@ $offset = $limit * $page;
$pageprev = $page - 1;
$pagenext = $page + 1;
$sql = "SELECT d.rowid, d.ref_number, d.total_ht, d.total_tva, d.total_ttc, d.fk_c_expensereport_statuts as status,";
$sql = "SELECT d.rowid, d.ref, d.total_ht, d.total_tva, d.total_ttc, d.fk_c_expensereport_statuts as status,";
$sql.= " d.date_debut, d.date_fin,";
$sql.= " u.rowid as id_user, u.firstname, u.lastname";
$sql.= " FROM ".MAIN_DB_PREFIX."expensereport d\n";
@ -89,7 +86,7 @@ $sql.= " INNER JOIN ".MAIN_DB_PREFIX."user u ON d.fk_user_author = u.rowid\n";
// WHERE
if(!empty($search_ref)){
$sql.= " WHERE d.ref_number LIKE '%".$db->escape($search_ref)."%'\n";
$sql.= " WHERE d.ref LIKE '%".$db->escape($search_ref)."%'\n";
}else{
$sql.= " WHERE 1 = 1\n";
}
@ -152,27 +149,17 @@ if ($month_start > 0) {
}
}
if(!empty($search_user) && $search_user != -1) {
$sql.= " AND d.fk_user_author = '$search_user'\n";
}
if(!empty($search_state)) {
$sql.= " AND d.fk_c_expensereport_statuts = '$search_state'\n";
}
if (!empty($search_user) && $search_user != -1) $sql.= " AND d.fk_user_author = '$search_user'\n";
if($search_state != '') $sql.= " AND d.fk_c_expensereport_statuts = '$search_state'\n";
// RESTRICT RIGHTS
if (empty($user->rights->expensereport->readall) && empty($user->rights->expensereport->lire_tous)){
$sql.= " AND d.fk_user_author = '{$user->id}'\n";
}
// ORDER
$sql.= $db->order($sortfield,$sortorder);
$sql.= $db->plimit($limit+1, $offset);
if($_GET['debug']=='ok'){
var_dump("<pre>",$sql,"</pre>"); exit();
}
//print $sql;
$resql=$db->query($sql);
if ($resql)
@ -254,7 +241,7 @@ if ($resql)
$var=!$var;
print "<tr ".$bc[$var].">";
print '<td><a href="card.php?id='.$objp->rowid.'">'.img_object($langs->trans("ShowTrip"),"trip").' '.$objp->ref_number.'</a></td>';
print '<td><a href="card.php?id='.$objp->rowid.'">'.img_object($langs->trans("ShowTrip"),"trip").' '.$objp->ref.'</a></td>';
print '<td align="center">'.($objp->date_debut > 0 ? dol_print_date($objp->date_debut, 'day') : '').'</td>';
print '<td align="center">'.($objp->date_fin > 0 ? dol_print_date($objp->date_fin, 'day') : '').'</td>';
print '<td align="left"><a href="'.DOL_URL_ROOT.'/user/card.php?id='.$objp->id_user.'">'.img_object($langs->trans("ShowUser"),"user").' '.dolGetFirstLastname($objp->firstname, $objp->lastname).'</a></td>';

View File

@ -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 '&nbsp;<input type="submit" class="button" value="'.$langs->trans("ViewAccountSynch").'">';
print "</form>";
$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 "<tr $bc[$var]>";
print '<td>'.$objp->ref_number.'</td>';
print '<td>'.$objp->ref.'</td>';
print '<td>'.dol_print_date($db->jdate($objp->date_valide),'day').'</td>';
print '<td><a href="'.DOL_URL_ROOT.'/user/card.php?id='.$objp->fk_user_author.'">'.img_object($langs->trans("ShowUser"),"user").' '.$objp->declarant_NDF.'</a></td>';
print '<td align="center">'.$objp->total_ttc.' '.$langs->trans("EURO").'</td>';
if($objp->integration_compta):
if($objp->integration_compta)
{
print '<td align="center"><a href="synchro_compta.php?action=accountTOndf&idTrip='.$objp->rowid.'&account='.$idAccount.'"><img src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/1leftarrow.png" style="border:0px;" alt="Compte vers NDF" title="Compte vers NDF"/></a></td>';
else:
}
else
{
print '<td align="center"><a href="synchro_compta.php?action=ndfTOaccount&idTrip='.$objp->rowid.'&account='.$idAccount.'"><img src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/1rightarrow.png" style="border:0px;" alt="NDF vers Compte" title="NDF vers Compte"/></a></td>';
endif;
}
print '<td>'.$account->label.'</td>';
if($objp->integration_compta):
if($objp->integration_compta)
{
print '<td align="center"><img src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/tick.png" style="border:0px;" alt="Intégration OK" /></td>';
else:
}
else
{
print '<td align="center"><img src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/off.png" style="border:0px;" alt="Intégration Non OK" /></td>';
endif;
}
print "</tr>";
$i++;

View File

@ -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);

View File

@ -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;

View File

@ -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,

View File

@ -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,

View File

@ -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

View File

@ -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;

View File

@ -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",