New: Can cancel holidays that were previously validated

This commit is contained in:
Laurent Destailleur 2013-09-24 18:06:07 +02:00
parent 2088eaa6fd
commit 3378855694
7 changed files with 111 additions and 51 deletions

View File

@ -57,6 +57,7 @@ For users:
- New: [ task #923 ] Localtax support for ODT templates.
- New: [ task #90 ] Barcode search.
- New: Can send an email from thirdparty card.
- New: Can cancel holidays that were previously validated.
For translators:
- Qual: Normalized sort order of all languages files with english reference files.

View File

@ -506,9 +506,9 @@ if ($step == 2 && $datatoexport)
print '<td>'.$langs->trans("Entities").'</td>';
print '<td>'.$langs->trans("ExportableFields").'</td>';
print '<td width="100" align="center">';
print '<a title='.$langs->trans("All").' alt='.$langs->trans("All").' href="'.$_SERVER["PHP_SELF"].'?step=2&datatoexport='.$datatoexport.'&action=selectfield&field=all">'.$langs->trans("All")."</a>";
print '<a class="liste_titre" title='.$langs->trans("All").' alt='.$langs->trans("All").' href="'.$_SERVER["PHP_SELF"].'?step=2&datatoexport='.$datatoexport.'&action=selectfield&field=all">'.$langs->trans("All")."</a>";
print '/';
print '<a title='.$langs->trans("None").' alt='.$langs->trans("None").' href="'.$_SERVER["PHP_SELF"].'?step=2&datatoexport='.$datatoexport.'&action=unselectfield&field=all">'.$langs->trans("None")."</a>";
print '<a class="liste_titre" title='.$langs->trans("None").' alt='.$langs->trans("None").' href="'.$_SERVER["PHP_SELF"].'?step=2&datatoexport='.$datatoexport.'&action=unselectfield&field=all">'.$langs->trans("None")."</a>";
print '</td>';
print '<td width="44%">'.$langs->trans("ExportedFields").'</td>';
print '</tr>';

View File

@ -47,7 +47,7 @@ class Holiday extends CommonObject
var $date_debut='';
var $date_fin='';
var $halfday='';
var $statut='';
var $statut=''; // 1=draft, 2=validated, 3=approved
var $fk_validator;
var $date_valid='';
var $fk_user_valid;
@ -871,7 +871,7 @@ class Holiday extends CommonObject
*
* @param int $userID Id of user
* @param int $nbHoliday Nb of days
* @return void
* @return int 0=Nothing done, 1=OK, -1=KO
*/
function updateSoldeCP($userID='',$nbHoliday='')
{
@ -907,7 +907,7 @@ class Holiday extends CommonObject
$i = 0;
while($i < $nbUser)
while ($i < $nbUser)
{
$now_holiday = $this->getCPforUser($users[$i]['rowid']);
$new_solde = $now_holiday + $this->getConfCP('nbHolidayEveryMonth');
@ -922,11 +922,18 @@ class Holiday extends CommonObject
$sql2.= " nb_holiday = nb_holiday + ".$nb_holiday;
dol_syslog(get_class($this).'::updateSoldeCP sql='.$sql2);
$this->db->query($sql2);
$result= $this->db->query($sql2);
if ($result) return 1;
else return -1;
}
} else {
return 0;
}
else
{
// Mise à jour pour un utilisateur
$nbHoliday = number_format($nbHoliday,2,'.','');
$nbHoliday = price2num($nbHoliday,2);
// Mise à jour pour un utilisateur
$sql = "UPDATE ".MAIN_DB_PREFIX."holiday_users SET";
@ -934,7 +941,10 @@ class Holiday extends CommonObject
$sql.= " WHERE fk_user = '".$userID."'";
dol_syslog(get_class($this).'::updateSoldeCP sql='.$sql);
$this->db->query($sql);
$result = $this->db->query($sql);
if ($result) return 1;
else return -1;
}
}

View File

@ -1,8 +1,8 @@
<?php
/* Copyright (C) 2011 Dimitri Mouillard <dmouillard@teclib.com>
* Copyright (C) 2012 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2013 Juanjo Menent <jmenent@2byte.es>
/* Copyright (C) 2011 Dimitri Mouillard <dmouillard@teclib.com>
* Copyright (C) 2012-2013 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2013 Juanjo Menent <jmenent@2byte.es>
*
* 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
@ -46,9 +46,9 @@ $user_id = $user->id;
$now=dol_now();
/*******************************************************************
/*
* Actions
********************************************************************/
*/
// Si création de la demande
if ($action == 'create')
@ -232,27 +232,41 @@ if ($action == 'update')
}
// Si suppression de la demande
if ($action == 'confirm_delete' && $_GET['confirm'] == 'yes')
if ($action == 'confirm_delete' && GETPOST('confirm') == 'yes')
{
if($user->rights->holiday->delete)
{
$error=0;
$db->begin();
$cp = new Holiday($db);
$cp->fetch($id);
// Si c'est bien un brouillon
if ($cp->statut == 1)
if ($cp->statut == 1 || $cp->statut == 3)
{
// Si l'utilisateur à le droit de lire cette demande, il peut la supprimer
if ($user->id == $cp->fk_user || $user->rights->holiday->lire_tous)
{
$cp->delete($id);
header('Location: index.php');
exit;
$result=$cp->delete($id);
}
else {
else
{
$error = $langs->trans('ErrorCantDeleteCP');
}
}
if (! $error)
{
$db->commit();
header('Location: index.php');
exit;
}
else
{
$db->rollback();
}
}
}
@ -315,9 +329,9 @@ if ($action == 'confirm_send')
}
// Si l'option pour avertir le valideur en cas de solde inférieur à la demande
if($cp->getConfCP('AlertValidatorSolde'))
if ($cp->getConfCP('AlertValidatorSolde'))
{
$nbopenedday=num_open_day($cp->date_debut,$cp->date_fin,0,1);
$nbopenedday=num_open_day($cp->date_debut,$cp->date_fin,0,1,$cp->halfday);
if ($nbopenedday > $cp->getCPforUser($cp->fk_user))
{
$message.= "\n";
@ -361,9 +375,8 @@ if($action == 'confirm_valid')
$cp->fetch($id);
// Si statut en attente de validation et valideur = utilisateur
if($cp->statut == 2 && $user->id == $cp->fk_validator)
if ($cp->statut == 2 && $user->id == $cp->fk_validator)
{
$cp->date_valid = dol_now();
$cp->fk_user_valid = $user->id;
$cp->statut = 3;
@ -371,13 +384,13 @@ if($action == 'confirm_valid')
$verif = $cp->update($user->id);
// Si pas d'erreur SQL on redirige vers la fiche de la demande
if($verif > 0) {
// Retrait du nombre de jours prit
$nbJour = $nbopenedday=num_open_day($cp->date_debut,$cp->date_fin,0,1);
if ($verif > 0)
{
// Calculcate number of days consummed
$nbopenedday=num_open_day($cp->date_debut,$cp->date_fin,0,1);
$soldeActuel = $cp->getCpforUser($cp->fk_user);
$newSolde = $soldeActuel - ($nbJour*$cp->getConfCP('nbHolidayDeducted'));
$newSolde = $soldeActuel - ($nbopenedday * $cp->getConfCP('nbHolidayDeducted'));
// On ajoute la modification dans le LOG
$cp->addLogCP($user->id, $cp->fk_user, $langs->transnoentitiesnoconv("Holidays"), $newSolde);
@ -441,13 +454,13 @@ if($action == 'confirm_valid')
if ($action == 'confirm_refuse')
{
if(!empty($_POST['detail_refuse']))
if (!empty($_POST['detail_refuse']))
{
$cp = new Holiday($db);
$cp->fetch($_GET['id']);
// Si statut en attente de validation et valideur = utilisateur
if($cp->statut == 2 && $user->id == $cp->fk_validator)
if ($cp->statut == 2 && $user->id == $cp->fk_validator)
{
$cp->date_refuse = date('Y-m-d H:i:s', time());
$cp->fk_user_refuse = $user->id;
@ -457,8 +470,8 @@ if ($action == 'confirm_refuse')
$verif = $cp->update($user->id);
// Si pas d'erreur SQL on redirige vers la fiche de la demande
if($verif > 0) {
if ($verif > 0)
{
// To
$destinataire = new User($db);
$destinataire->fetch($cp->fk_user);
@ -525,16 +538,48 @@ if ($action == 'confirm_cancel' && GETPOST('confirm') == 'yes')
$cp->fetch($_GET['id']);
// Si statut en attente de validation et valideur = utilisateur
if ($cp->statut == 2 && ($user->id == $cp->fk_validator || $user->id == $cp->fk_user))
if (($cp->statut == 2 || $cp->statut == 3) && ($user->id == $cp->fk_validator || $user->id == $cp->fk_user))
{
$db->begin();
$oldstatus = $cp->statut;
$cp->date_cancel = dol_now();
$cp->fk_user_cancel = $user->id;
$cp->statut = 4;
$verif = $cp->update($user->id);
$result = $cp->update($user->id);
if ($result >= 0 && $oldstatus == 3) // holiday was already validated, status 3, so we must increase back sold
{
// Calculcate number of days consummed
$nbopenedday=num_open_day($cp->date_debut,$cp->date_fin,0,1,$cp->halfday);
$soldeActuel = $cp->getCpforUser($cp->fk_user);
$newSolde = $soldeActuel + ($nbopenedday * $cp->getConfCP('nbHolidayDeducted'));
// On ajoute la modification dans le LOG
$result1=$cp->addLogCP($user->id, $cp->fk_user, $langs->transnoentitiesnoconv("HolidaysCancelation"), $newSolde);
// Mise à jour du solde
$result2=$cp->updateSoldeCP($cp->fk_user, $newSolde);
if ($result1 < 0 || $result2 < 0)
{
$error = $langs->trans('ErrorCantDeleteCP');
}
}
if (! $error)
{
$db->commit();
}
else
{
$db->rollback();
}
// Si pas d'erreur SQL on redirige vers la fiche de la demande
if($verif > 0)
if (! $error && $result > 0)
{
// To
$destinataire = new User($db);
@ -829,11 +874,11 @@ else
if($user->id == $cp->fk_user || $user->rights->holiday->lire_tous)
{
if ($action == 'delete' && $cp->statut == 1) {
if ($action == 'delete')
{
if($user->rights->holiday->delete)
{
print $form->formconfirm("fiche.php?id=".$id,$langs->trans("TitleDeleteCP"),$langs->trans("ConfirmDeleteCP"),"confirm_delete", '', 0, 1);
if ($ret == 'html') print '<br />';
}
}
@ -841,29 +886,25 @@ else
if ($action == 'sendToValidate' && $cp->statut == 1 && $user->id == $cp->fk_user)
{
print $form->formconfirm("fiche.php?id=".$id,$langs->trans("TitleToValidCP"),$langs->trans("ConfirmToValidCP"),"confirm_send", '', 1, 1);
if ($ret == 'html') print '<br />';
}
// Si validation de la demande
if ($action == 'valid' && $cp->statut == 2 && $user->id == $cp->fk_validator)
if ($action == 'valid')
{
print $form->formconfirm("fiche.php?id=".$id,$langs->trans("TitleValidCP"),$langs->trans("ConfirmValidCP"),"confirm_valid", '', 1, 1);
if ($ret == 'html') print '<br />';
}
// Si refus de la demande
if ($action == 'refuse' && $cp->statut == 2 && $user->id == $cp->fk_validator)
if ($action == 'refuse')
{
$array_input = array(array('type'=>"text",'label'=> $langs->trans('DetailRefusCP'),'name'=>"detail_refuse",'size'=>"50",'value'=>""));
print $form->formconfirm("fiche.php?id=".$id."&action=confirm_refuse", $langs->trans("TitleRefuseCP"), $langs->trans('ConfirmRefuseCP'), "confirm_refuse", $array_input, 1, 0);
if ($ret == 'html') print '<br />';
}
// Si annulation de la demande
if ($action == 'cancel' && $cp->statut == 2 && ($user->id == $cp->fk_validator || $user->id == $cp->fk_user))
if ($action == 'cancel')
{
print $form->formconfirm("fiche.php?id=".$id,$langs->trans("TitleCancelCP"),$langs->trans("ConfirmCancelCP"),"confirm_cancel", '', 1, 1);
if ($ret == 'html') print '<br />';
}
$head=holiday_prepare_head($cp);
@ -893,7 +934,8 @@ else
$starthalfday=($cp->halfday == -1 || $cp->halfday == 2)?'afternoon':'morning';
$endhalfday=($cp->halfday == 1 || $cp->halfday == 2)?'morning':'afternoon';
if(!$edit) {
if(!$edit)
{
print '<tr>';
print '<td>'.$langs->trans('DateDebCP').' ('.$langs->trans("FirstDayOfHoliday").')</td>';
print '<td>'.dol_print_date($cp->date_debut,'day');
@ -901,7 +943,9 @@ else
print $langs->trans($listhalfday[$starthalfday]);
print '</td>';
print '</tr>';
} else {
}
else
{
print '<tr>';
print '<td>'.$langs->trans('DateDebCP').' ('.$langs->trans("FirstDayOfHoliday").')</td>';
print '<td>';
@ -921,7 +965,9 @@ else
print $langs->trans($listhalfday[$endhalfday]);
print '</td>';
print '</tr>';
} else {
}
else
{
print '<tr>';
print '<td>'.$langs->trans('DateFinCP').' ('.$langs->trans("LastDayOfHoliday").')</td>';
print '<td>';
@ -1053,7 +1099,7 @@ else
{
print '<a href="fiche.php?id='.$_GET['id'].'&action=sendToValidate" class="butAction">'.$langs->trans("Validate").'</a>';
}
if($user->rights->holiday->delete && $cp->statut == 1)
if ($user->rights->holiday->delete && $cp->statut == 1) // If draft
{
print '<a href="fiche.php?id='.$_GET['id'].'&action=delete" class="butActionDelete">'.$langs->trans("DeleteCP").'</a>';
}
@ -1064,7 +1110,7 @@ else
print '<a href="fiche.php?id='.$_GET['id'].'&action=refuse" class="butAction">'.$langs->trans("ActionRefuseCP").'</a>';
}
if (($user->id == $cp->fk_validator || $user->id == $cp->fk_user) && $cp->statut == 2)
if (($user->id == $cp->fk_validator || $user->id == $cp->fk_user) && ($cp->statut == 2 || $cp->statut == 3)) // Status validated or approved
{
if (($cp->date_debut > dol_now()) || $user->admin) print '<a href="fiche.php?id='.$_GET['id'].'&action=cancel" class="butAction">'.$langs->trans("ActionCancelCP").'</a>';
else print '<a href="#" class="butActionRefused" title="'.$langs->trans("HolidayStarted").'">'.$langs->trans("ActionCancelCP").'</a>';

View File

@ -89,6 +89,7 @@ FirstDayOfHoliday=First day of holiday
LastDayOfHoliday=Last day of holiday
HolidaysMonthlyUpdate=Monthly update
ManualUpdate=Manual update
HolidaysCancelation=Holidays cancelation
## Configuration du Module ##
ConfCP=Configuration of holidays module

View File

@ -89,6 +89,7 @@ FirstDayOfHoliday=Premier jour de congés
LastDayOfHoliday=Dernier jour de congés
HolidaysMonthlyUpdate=Mise à jour mensuelle
ManualUpdate=Mise à jour manuelle
HolidaysCancelation=Annulation de congès
## Configuration du Module ##
ConfCP=Configuration du module Congés

View File

@ -1759,6 +1759,7 @@ tr.liste_titre th, th.liste_titre, tr.liste_titre td, td.liste_titre, form.liste
}
.liste_titre td a {
text-shadow: none !important;
color: #<?php echo $colortexttitle; ?>;
}
div.liste_titre {
padding-left: 3px;