diff --git a/ChangeLog b/ChangeLog index 939b4b898a2..23c596710b7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -28,6 +28,8 @@ For users: - New: Can set a limit for stock alert to 0. - New: Support SMTPS. - New: Added a page /support to provide a help center service on Dolibarr. +- New: Distinct status "running not expired" from "running expired" in lines + contract status. - Fix: Handle correctly the comment in status changing of supplier orders. - Fix: Author, title and topic are correctly encoded in PDF. - Fix: Now HTML output is always UTF8, this solve bad PDF encoding on old users. diff --git a/htdocs/contrat/contrat.class.php b/htdocs/contrat/contrat.class.php index 5edebef6c02..2b4d3feb76c 100644 --- a/htdocs/contrat/contrat.class.php +++ b/htdocs/contrat/contrat.class.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004-2007 Destailleur Laurent + * Copyright (C) 2004-2009 Destailleur Laurent * Copyright (C) 2006 Andre Cianfarani * Copyright (C) 2008 Raphael Bertrand (Resultic) * This program is free software; you can redistribute it and/or modify @@ -319,8 +319,11 @@ class Contrat extends CommonObject { $this->nbofserviceswait=0; $this->nbofservicesopened=0; + $this->nbofservicesexpired=0; $this->nbofservicesclosed=0; + $now=gmmktime(); + // Selectionne les lignes contrats liees a un produit $sql = "SELECT p.label, p.description as product_desc, p.ref,"; $sql.= " d.rowid, d.fk_contrat, d.statut, d.description, d.price_ht, d.tva_tx, d.qty, d.remise_percent, d.subprice,"; @@ -390,7 +393,8 @@ class Contrat extends CommonObject //dolibarr_syslog("2 ".$ligne->product_desc); if ($ligne->statut == 0) $this->nbofserviceswait++; - if ($ligne->statut == 4) $this->nbofservicesopened++; + if ($ligne->statut == 4 && (empty($ligne->date_fin_prevue) || $ligne->date_fin_prevue >= $now)) $this->nbofservicesopened++; + if ($ligne->statut == 4 && $ligne->date_fin_prevue < $now) $this->nbofservicesexpired++; if ($ligne->statut == 5) $this->nbofservicesclosed++; $i++; @@ -464,7 +468,8 @@ class Contrat extends CommonObject $ligne->date_fin_reel = $this->db->jdate($objp->date_cloture); if ($ligne->statut == 0) $this->nbofserviceswait++; - if ($ligne->statut == 4) $this->nbofservicesopened++; + if ($ligne->statut == 4 && (empty($ligne->date_fin_prevue) || $ligne->date_fin_prevue >= $now)) $this->nbofservicesopened++; + if ($ligne->statut == 4 && $ligne->date_fin_prevue < $now) $this->nbofservicesexpired++; if ($ligne->statut == 5) $this->nbofservicesclosed++; $this->lignes[] = $ligne; @@ -1050,17 +1055,14 @@ class Contrat extends CommonObject if ($mode == 4) { $line=new ContratLigne($this->db); - $text=($this->nbofserviceswait+$this->nbofservicesopened+$this->nbofservicesclosed); + $text=($this->nbofserviceswait+$this->nbofservicesopened+$this->nbofservicesexpired+$this->nbofservicesclosed); $text.=' '.$langs->trans("Services"); $text.=':     '; $text.=$this->nbofserviceswait.' '.$line->LibStatut(0,3).'   '; - $text.=$this->nbofservicesopened.' '.$line->LibStatut(4,3).'   '; + $text.=$this->nbofservicesopened.' '.$line->LibStatut(4,3,false).'   '; + $text.=$this->nbofservicesexpired.' '.$line->LibStatut(4,3,true).'   '; $text.=$this->nbofservicesclosed.' '.$line->LibStatut(5,3); return $text; - - if ($statut == 0) { return img_picto($langs->trans('ContractStatusDraft'),'statut0').' '.$langs->trans("ContractStatusDraft"); } - if ($statut == 1) { return img_picto($langs->trans('ContractStatusValidated'),'statut4').' '.$langs->trans("ContractStatusValidated"); } - if ($statut == 2) { return img_picto($langs->trans('ContractStatusClosed'),'statut6').' '.$langs->trans("ContractStatusClosed"); } } if ($mode == 5) { @@ -1387,59 +1389,66 @@ class ContratLigne /** - * \brief Retourne le libelle du statut de la ligne de contrat + * \brief Return label of this contract line status * \param mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto * \return string Libelle */ function getLibStatut($mode) { - return $this->LibStatut($this->statut,$mode); + return $this->LibStatut($this->statut,$mode,(isset($this->date_fin_validite) && $this->date_fin_validite < gmmktime())); } /** - * \brief Renvoi le libelle d'un statut donne + * \brief Return label of a contract line status * \param statut id statut * \param mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto + * \param expired true=Expired * \return string Libelle */ - function LibStatut($statut,$mode) + function LibStatut($statut,$mode,$expired=false) { global $langs; $langs->load("contracts"); if ($mode == 0) { if ($statut == 0) { return $langs->trans("ServiceStatusInitial"); } - if ($statut == 4) { return $langs->trans("ServiceStatusRunning"); } + if ($statut == 4 && ! $expired) { return $langs->trans("ServiceStatusRunning"); } + if ($statut == 4 && $expired) { return $langs->trans("ServiceStatusLate"); } if ($statut == 5) { return $langs->trans("ServiceStatusClosed"); } } if ($mode == 1) { if ($statut == 0) { return $langs->trans("ServiceStatusInitial"); } - if ($statut == 4) { return $langs->trans("ServiceStatusRunning"); } + if ($statut == 4 && ! $expired) { return $langs->trans("ServiceStatusRunning"); } + if ($statut == 4 && $expired) { return $langs->trans("ServiceStatusLateShort"); } if ($statut == 5) { return $langs->trans("ServiceStatusClosed"); } } if ($mode == 2) { if ($statut == 0) { return img_picto($langs->trans('ServiceStatusInitial'),'statut0').' '.$langs->trans("ServiceStatusInitial"); } - if ($statut == 4) { return img_picto($langs->trans('ServiceStatusRunning'),'statut4').' '.$langs->trans("ServiceStatusRunning"); } + if ($statut == 4 && ! $expired) { return img_picto($langs->trans('ServiceStatusRunning'),'statut4').' '.$langs->trans("ServiceStatusRunning"); } + if ($statut == 4 && $expired) { return img_picto($langs->trans('ServiceStatusLate'),'statut3').' '.$langs->trans("ServiceStatusLateShort"); } if ($statut == 5) { return img_picto($langs->trans('ServiceStatusClosed'),'statut6') .' '.$langs->trans("ServiceStatusClosed"); } } if ($mode == 3) { if ($statut == 0) { return img_picto($langs->trans('ServiceStatusInitial'),'statut0'); } - if ($statut == 4) { return img_picto($langs->trans('ServiceStatusRunning'),'statut4'); } + if ($statut == 4 && ! $expired) { return img_picto($langs->trans('ServiceStatusRunning'),'statut4'); } + if ($statut == 4 && $expired) { return img_picto($langs->trans('ServiceStatusLate'),'statut3'); } if ($statut == 5) { return img_picto($langs->trans('ServiceStatusClosed'),'statut6'); } } if ($mode == 4) { if ($statut == 0) { return img_picto($langs->trans('ServiceStatusInitial'),'statut0').' '.$langs->trans("ServiceStatusInitial"); } - if ($statut == 4) { return img_picto($langs->trans('ServiceStatusRunning'),'statut4').' '.$langs->trans("ServiceStatusRunning"); } + if ($statut == 4 && ! $expired) { return img_picto($langs->trans('ServiceStatusRunning'),'statut4').' '.$langs->trans("ServiceStatusRunning"); } + if ($statut == 4 && $expired) { return img_picto($langs->trans('ServiceStatusLate'),'statut3').' '.$langs->trans("ServiceStatusLate"); } if ($statut == 5) { return img_picto($langs->trans('ServiceStatusClosed'),'statut6') .' '.$langs->trans("ServiceStatusClosed"); } } if ($mode == 5) { if ($statut == 0) { return $langs->trans("ServiceStatusInitial").' '.img_picto($langs->trans('ServiceStatusInitial'),'statut0'); } - if ($statut == 4) { return $langs->trans("ServiceStatusRunning").' '.img_picto($langs->trans('ServiceStatusRunning'),'statut4'); } + if ($statut == 4 && ! $expired) { return $langs->trans("ServiceStatusRunning").' '.img_picto($langs->trans('ServiceStatusRunning'),'statut4'); } + if ($statut == 4 && $expired) { return $langs->trans("ServiceStatusLateShort").' '.img_picto($langs->trans('ServiceStatusLate'),'statut3'); } if ($statut == 5) { return $langs->trans("ServiceStatusClosed").' '.img_picto($langs->trans('ServiceStatusClosed'),'statut6'); } } } diff --git a/htdocs/contrat/fiche.php b/htdocs/contrat/fiche.php index bd276da79b1..886f7b90366 100644 --- a/htdocs/contrat/fiche.php +++ b/htdocs/contrat/fiche.php @@ -869,14 +869,14 @@ else if ($objp->date_debut) { print dolibarr_print_date($objp->date_debut); // Warning si date prevu passee et pas en service - if ($objp->statut == 0 && $objp->date_debut < ($now - $conf->contrat->warning_delay)) { print " ".img_warning($langs->trans("Late")); } + if ($objp->statut == 0 && $objp->date_debut < ($now - $conf->contrat->services->inactifs->warning_delay)) { print " ".img_warning($langs->trans("Late")); } } else print $langs->trans("Unknown"); print '  -  '; print $langs->trans("DateEndPlanned").': '; if ($objp->date_fin) { print dolibarr_print_date($objp->date_fin); - if ($objp->statut == 4 && $objp->date_fin < ($now - $conf->contrat->services->inactifs->warning_delay)) { print " ".img_warning($langs->trans("Late")); } + if ($objp->statut == 4 && $objp->date_fin < ($now - $conf->contrat->services->expires->warning_delay)) { print " ".img_warning($langs->trans("Late")); } } else print $langs->trans("Unknown"); diff --git a/htdocs/contrat/index.php b/htdocs/contrat/index.php index d0747eb0938..0b72330c678 100644 --- a/htdocs/contrat/index.php +++ b/htdocs/contrat/index.php @@ -18,11 +18,11 @@ */ /** - \file htdocs/contrat/index.php - \ingroup contrat - \brief Page liste des contrats - \version $Revision$ -*/ + * \file htdocs/contrat/index.php + * \ingroup contrat + * \brief Page liste des contrats + * \version $Revision$ + */ require("./pre.inc.php"); require_once (DOL_DOCUMENT_ROOT."/contrat/contrat.class.php"); @@ -51,6 +51,8 @@ $staticcontratligne=new ContratLigne($db); * View */ +$now = gmmktime(); + llxHeader(); print_fiche_titre($langs->trans("ContractsArea")); @@ -84,7 +86,8 @@ print ''; print ''; print ''; print '
'.$langs->trans("ServicesLegend").'
'; print $staticcontratligne->LibStatut(0,4).'
'; -print $staticcontratligne->LibStatut(4,4).'
'; +print $staticcontratligne->LibStatut(4,4,false).'
'; +print $staticcontratligne->LibStatut(4,4,true).'
'; print $staticcontratligne->LibStatut(5,4).'
'; print '
'; @@ -164,8 +167,9 @@ print ''; $max=5; $sql = 'SELECT '; $sql.= ' sum('.$db->ifsql("cd.statut=0",1,0).') as nb_initial,'; -$sql.= ' sum('.$db->ifsql("cd.statut=4 AND cd.date_fin_validite > ".$db->idate(gmmktime()),1,0).') as nb_running,'; -$sql.= ' sum('.$db->ifsql("cd.statut=4 AND (cd.date_fin_validite IS NULL OR cd.date_fin_validite <= ".$db->idate(gmmktime()).")",1,0).') as nb_late,'; +$sql.= ' sum('.$db->ifsql("cd.statut=4 AND (cd.date_fin_validite IS NULL OR cd.date_fin_validite >= ".$db->idate($now).")",1,0).') as nb_running,'; +$sql.= ' sum('.$db->ifsql("cd.statut=4 AND (cd.date_fin_validite IS NOT NULL AND cd.date_fin_validite < ".$db->idate($now).")",1,0).') as nb_expired,'; +$sql.= ' sum('.$db->ifsql("cd.statut=4 AND (cd.date_fin_validite IS NOT NULL AND cd.date_fin_validite < ".$db->idate($now - $conf->contrat->services->expires->warning_delay).")",1,0).') as nb_late,'; $sql.= ' sum('.$db->ifsql("cd.statut=5",1,0).') as nb_closed,'; $sql.= " c.rowid as cid, c.ref, c.datec, c.tms, c.statut, s.nom, s.rowid as socid"; if (!$user->rights->societe->client->voir && !$socid) $sql .= ", sc.fk_soc, sc.fk_user"; @@ -192,7 +196,7 @@ if ($result) print ''.$langs->trans("LastContracts",5).''; print ''.$langs->trans("DateModification").''; //print ''.$langs->trans("Status").''; - print ''.$langs->trans("Services").''; + print ''.$langs->trans("Services").''; print "\n"; $var=True; @@ -216,8 +220,9 @@ if ($result) print ''.dolibarr_print_date($obj->tms,'dayhour').''; //print ''.$staticcontrat->LibStatut($obj->statut,2).''; print ''.($obj->nb_initial>0 ? $obj->nb_initial.$staticcontratligne->LibStatut(0,3):'').''; - print ''.($obj->nb_running+$obj->nb_late>0 ? ($obj->nb_running+$obj->nb_late).$staticcontratligne->LibStatut(4,3):'').''; - print ''.($obj->nb_closed>0 ? $obj->nb_closed.$staticcontratligne->LibStatut(5,3):'').''; + print ''.($obj->nb_running>0 ? $obj->nb_running.$staticcontratligne->LibStatut(4,3,false):'').''; + print ''.($obj->nb_expired>0 ? $obj->nb_expired.$staticcontratligne->LibStatut(4,3,true):'').''; + print ''.($obj->nb_closed>0 ? $obj->nb_closed.$staticcontratligne->LibStatut(5,3):'').''; print "\n"; $i++; } @@ -235,7 +240,7 @@ print '
'; // Not activated services -$sql = "SELECT cd.rowid as cid, c.ref, cd.statut, cd.label, cd.description as note, cd.fk_contrat, c.fk_soc, s.nom"; +$sql = "SELECT c.ref, c.fk_soc, cd.rowid as cid, cd.statut, cd.label, cd.description as note, cd.fk_contrat, s.nom"; if (!$user->rights->societe->client->voir && !$socid) $sql .= ", sc.fk_soc, sc.fk_user"; $sql.= " FROM ".MAIN_DB_PREFIX."contratdet as cd, ".MAIN_DB_PREFIX."contrat as c, ".MAIN_DB_PREFIX."societe as s"; if (!$user->rights->societe->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; @@ -298,7 +303,7 @@ print '
'; $max=5; $sql = "SELECT c.ref, c.fk_soc, "; -$sql.= " cd.rowid as cid, cd.statut, cd.label, cd.description as note, cd.fk_contrat,"; +$sql.= " cd.rowid as cid, cd.statut, cd.label, cd.description as note, cd.fk_contrat, cd.date_fin_validite,"; $sql.= " s.nom"; if (!$user->rights->societe->client->voir && !$socid) $sql .= ", sc.fk_soc, sc.fk_user"; $sql.= " FROM ".MAIN_DB_PREFIX."contratdet as cd, ".MAIN_DB_PREFIX."contrat as c, ".MAIN_DB_PREFIX."societe as s"; @@ -340,7 +345,8 @@ if ($resql) print $staticcompany->getNomUrl(1,'',20); print ''; print ''; - print $staticcontratligne->LibStatut($obj->statut,5); + $dateend=$db->jdate($obj->date_fin_validite); + print $staticcontratligne->LibStatut($obj->statut,5, ($dateend && $dateend < $now)); print ''; print "\n"; $i++; diff --git a/htdocs/contrat/liste.php b/htdocs/contrat/liste.php index a96f0d8ba19..ea7882bd283 100644 --- a/htdocs/contrat/liste.php +++ b/htdocs/contrat/liste.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004-2008 Laurent Destailleur + * Copyright (C) 2004-2009 Laurent Destailleur * * 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 @@ -60,12 +60,15 @@ $staticcontratligne=new ContratLigne($db); * View */ +$now=gmmktime(); + llxHeader(); $sql = 'SELECT'; $sql.= ' sum('.$db->ifsql("cd.statut=0",1,0).') as nb_initial,'; -$sql.= ' sum('.$db->ifsql("cd.statut=4 AND cd.date_fin_validite > ".$db->idate(mktime()),1,0).') as nb_running,'; -$sql.= ' sum('.$db->ifsql("cd.statut=4 AND (cd.date_fin_validite IS NULL OR cd.date_fin_validite <= ".$db->idate(mktime()).")",1,0).') as nb_late,'; +$sql.= ' sum('.$db->ifsql("cd.statut=4 AND (cd.date_fin_validite IS NULL OR cd.date_fin_validite >= ".$db->idate($now).")",1,0).') as nb_running,'; +$sql.= ' sum('.$db->ifsql("cd.statut=4 AND (cd.date_fin_validite IS NOT NULL AND cd.date_fin_validite < ".$db->idate($now).")",1,0).') as nb_expired,'; +$sql.= ' sum('.$db->ifsql("cd.statut=4 AND (cd.date_fin_validite IS NOT NULL AND cd.date_fin_validite < ".$db->idate($now - $conf->contrat->services->expires->warning_delay).")",1,0).') as nb_late,'; $sql.= ' sum('.$db->ifsql("cd.statut=5",1,0).') as nb_closed,'; $sql.= " c.rowid as cid, c.ref, c.datec, c.date_contrat, c.statut,"; $sql.= " s.nom, s.rowid as socid"; @@ -103,7 +106,8 @@ if ($resql) print_liste_field_titre($langs->trans("DateContract"), $_SERVER["PHP_SELF"], "c.date_contrat","","$param",'align="center"',$sortfield,$sortorder); //print_liste_field_titre($langs->trans("Status"), $_SERVER["PHP_SELF"], "c.statut","","$param",'align="center"',$sortfield,$sortorder); print ''.$staticcontratligne->LibStatut(0,3).''; - print ''.$staticcontratligne->LibStatut(4,3).''; + print ''.$staticcontratligne->LibStatut(4,3,false).''; + print ''.$staticcontratligne->LibStatut(4,3,true).''; print ''.$staticcontratligne->LibStatut(5,3).''; print "\n"; @@ -117,12 +121,11 @@ if ($resql) print ''; print ' '; //print ' '; - print ''; + print ''; print ""; print "\n"; print ''; - $now=mktime(); $var=True; while ($i < min($num,$limit)) { @@ -138,8 +141,9 @@ if ($resql) print ''.dolibarr_print_date($obj->date_contrat).''; //print ''.$staticcontrat->LibStatut($obj->statut,3).''; print ''.($obj->nb_initial>0?$obj->nb_initial:'').''; - print ''.($obj->nb_running+$obj->nb_late>0?$obj->nb_running+$obj->nb_late:'').''; - print ''.($obj->nb_closed>0?$obj->nb_closed:'').''; + print ''.($obj->nb_running>0?$obj->nb_running:'').''; + print ''.($obj->nb_expired>0?$obj->nb_expired:'').''; + print ''.($obj->nb_closed>0 ?$obj->nb_closed:'').''; print "\n"; $i++; } diff --git a/htdocs/contrat/services.php b/htdocs/contrat/services.php index 14188686f19..7a04ca66f9f 100644 --- a/htdocs/contrat/services.php +++ b/htdocs/contrat/services.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004-2008 Laurent Destailleur + * Copyright (C) 2004-2009 Laurent Destailleur * * 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 @@ -63,7 +63,7 @@ $companystatic=new Societe($db); * View */ -$now=mktime(); +$now=gmmktime(); $form=new Form($db); @@ -119,7 +119,7 @@ if ($resql) if (! empty($_REQUEST['filter_op2']) && $_REQUEST['filter_op2'] != -1) $param.='&filter_op2='.urlencode($_REQUEST['filter_op2']); if ($filter_date1 != '') $param.='&op1day='.$_REQUEST['op1day'].'&op1month='.$_REQUEST['op1month'].'&op1year='.$_REQUEST['op1year']; if ($filter_date2 != '') $param.='&op2day='.$_REQUEST['op2day'].'&op2month='.$_REQUEST['op2month'].'&op2year='.$_REQUEST['op2year']; - + print_barre_liste($langs->trans("ListOfServices"), $page, "services.php", $param, $sortfield, $sortorder,'',$num); print ''; @@ -179,9 +179,9 @@ if ($resql) $contractstatic=new Contrat($db); $contractstatic->id=$obj->cid; $contractstatic->ref=$obj->ref?$obj->ref:$obj->cid; - print $contractstatic->getNomUrl(1); + print $contractstatic->getNomUrl(1); print ''; - + // Service print ''; - + // Third party print ''; - + // Start date if ($mode == "0") { print ''; diff --git a/htdocs/index.php b/htdocs/index.php index 93e33d5866b..37646c7dab6 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -404,7 +404,7 @@ if ($conf->contrat->enabled && $user->rights->contrat->lire) print "\n"; } -// Nbre services actifs (ŕ renouveler) +// Nbre services actifs (expired) if ($conf->contrat->enabled && $user->rights->contrat->lire) { $langs->load("contracts"); @@ -415,9 +415,9 @@ if ($conf->contrat->enabled && $user->rights->contrat->lire) $var=!$var; print ''; - print ''; + print ''; print '
'; if ($obj->pid) @@ -193,7 +193,7 @@ if ($resql) print dolibarr_trunc($obj->description,20); } print ''; $companystatic->id=$obj->socid; @@ -201,7 +201,7 @@ if ($resql) $companystatic->client=1; print $companystatic->getNomUrl(1,'customer',32); print ''; @@ -222,12 +222,12 @@ if ($resql) print ''; if ($obj->cstatut == 0) { - print $contractstatic->LibStatut(0,5); + print $contractstatic->LibStatut(0,5,($obj->date_fin_validite && $obj->date_fin_validite < $now)); } else { print ''; - print $staticcontratligne->LibStatut($obj->statut,5); + print $staticcontratligne->LibStatut($obj->statut,5,($obj->date_fin_validite && $obj->date_fin_validite < $now)); print ''; } print '
'.img_object($langs->trans("Contract"),"contract").''.$langs->trans("BoardRunningServices").''.$board->nbtodo.''.$board->nbtodo.''; - print ''; + print ''; print $board->nbtodolate; print ''; print ' (>'.ceil($conf->contrat->services->expires->warning_delay/60/60/24).' '.$langs->trans("days").')'; diff --git a/htdocs/langs/en_US/contracts.lang b/htdocs/langs/en_US/contracts.lang index faca8b66abd..450c7b8eee5 100644 --- a/htdocs/langs/en_US/contracts.lang +++ b/htdocs/langs/en_US/contracts.lang @@ -14,6 +14,7 @@ ContractStatusClosed=Closed ServiceStatusInitial=Not running ServiceStatusRunning=Running ServiceStatusLate=Running, expired +ServiceStatusLateShort=Expired ServiceStatusClosed=Closed ServicesLegend=Services legend Contracts=Contracts diff --git a/htdocs/langs/fr_FR/contracts.lang b/htdocs/langs/fr_FR/contracts.lang index 83373647eac..14b6279c530 100644 --- a/htdocs/langs/fr_FR/contracts.lang +++ b/htdocs/langs/fr_FR/contracts.lang @@ -14,6 +14,7 @@ ContractStatusClosed=Clôturé ServiceStatusInitial=Inactif ServiceStatusRunning=En service ServiceStatusLate=En service, expiré +ServiceStatusLateShort=Expiré ServiceStatusClosed=Fermé ServicesLegend=Légende pour les services Contracts=Contrats