diff --git a/htdocs/holiday/card.php b/htdocs/holiday/card.php
index e8a059b84f8..a58806e2e4f 100644
--- a/htdocs/holiday/card.php
+++ b/htdocs/holiday/card.php
@@ -50,7 +50,7 @@ $ref = GETPOST('ref', 'alpha');
$fuserid = (GETPOST('fuserid', 'int') ?GETPOST('fuserid', 'int') : $user->id);
// Load translation files required by the page
-$langs->loadLangs(array("other", "holiday", "mails"));
+$langs->loadLangs(array("other", "holiday", "mails", "trips"));
$error = 0;
@@ -264,6 +264,7 @@ if (empty($reshook)) {
}
}
+ // If update and we are an approver, we can update with another approver
if ($action == 'update' && GETPOSTISSET('savevalidator') && !empty($user->rights->holiday->approve)) {
$object->fetch($id);
@@ -316,6 +317,8 @@ if (empty($reshook)) {
// If this is the requestor or has read/write rights
if ($cancreate) {
$approverid = GETPOST('valideur', 'int');
+ // TODO Check this approver user id has the permission for approval
+
$description = trim(GETPOST('description', 'restricthtml'));
// If no start date
@@ -743,8 +746,8 @@ if (empty($reshook)) {
$object->fetch($id);
// If status pending validation and validator = validator or user, or rights to do for others
- if (($object->statut == Holiday::STATUS_VALIDATED || $object->statut == Holiday::STATUS_APPROVED) && ($user->id == $object->fk_validator || in_array($object->fk_user, $childids)
- || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->holiday->writeall_advance)))) {
+ if (($object->statut == Holiday::STATUS_VALIDATED || $object->statut == Holiday::STATUS_APPROVED) &&
+ (!empty($user->admin) || $user->id == $object->fk_validator || in_array($object->fk_user, $childids) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->holiday->writeall_advance)))) {
$db->begin();
$oldstatus = $object->statut;
@@ -1438,25 +1441,48 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') {
if ($cancreate && $object->statut == Holiday::STATUS_DRAFT) {
print 'id.'&action=edit" class="butAction">'.$langs->trans("EditCP").'';
}
+
if ($cancreate && $object->statut == Holiday::STATUS_DRAFT) { // If draft
print 'id.'&action=sendToValidate" class="butAction">'.$langs->trans("Validate").'';
}
+
if ($object->statut == Holiday::STATUS_VALIDATED) { // If validated
+ // Button Approve / Refuse
if ($user->id == $object->fk_validator) {
print 'id.'&action=valid" class="butAction">'.$langs->trans("Approve").'';
print 'id.'&action=refuse" class="butAction">'.$langs->trans("ActionRefuseCP").'';
} else {
print ''.$langs->trans("Approve").'';
print ''.$langs->trans("ActionRefuseCP").'';
+
+ // Button Cancel (because we can't approve)
+ if (in_array($object->fk_user, $childids) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->holiday->writeall_advance))) {
+ if (($object->date_debut > dol_now()) || !empty($user->admin)) {
+ print 'id.'&action=cancel&token='.newToken().'" class="butAction">'.$langs->trans("ActionCancelCP").'';
+ } else {
+ print 'trans("NotAllowed").'">'.$langs->trans("ActionCancelCP").'';
+ }
+ }
}
}
- if (($user->id == $object->fk_validator || in_array($object->fk_user, $childids) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->holiday->writeall_advance))) && ($object->statut == 2 || $object->statut == 3)) { // Status validated or approved
- if (($object->date_debut > dol_now()) || $user->admin) {
- print 'id.'&action=cancel" class="butAction">'.$langs->trans("ActionCancelCP").'';
- } else {
- print ''.$langs->trans("ActionCancelCP").'';
+ if ($object->statut == Holiday::STATUS_APPROVED) { // If validated or approved
+ if ($user->id == $object->fk_validator
+ || in_array($object->fk_user, $childids)
+ || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->holiday->writeall_advance))) {
+ if (($object->date_debut > dol_now()) || !empty($user->admin)) {
+ print 'id.'&action=cancel&token='.newToken().'" class="butAction">'.$langs->trans("ActionCancelCP").'';
+ } else {
+ print 'trans("NotAllowed").'">'.$langs->trans("ActionCancelCP").'';
+ }
+ } else { // I have no rights on the user of the holiday.
+ if (!empty($user->admin)) { // If current validator can't cancel an approved leave, we allow admin user
+ print 'id.'&action=cancel&token='.newToken().'" class="butAction">'.$langs->trans("ActionCancelCP").'';
+ } else {
+ print ''.$langs->trans("ActionCancelCP").'';
+ }
}
}
+
if ($cancreate && $object->statut == Holiday::STATUS_CANCELED) {
print 'id.'&action=backtodraft" class="butAction">'.$langs->trans("SetToDraft").'';
}
diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php
index 8b609bdf84e..95462ddd77e 100644
--- a/htdocs/holiday/class/holiday.class.php
+++ b/htdocs/holiday/class/holiday.class.php
@@ -1665,6 +1665,7 @@ class Holiday extends CommonObject
$sql .= " WHERE u.entity IN (".getEntity('user').")";
}
$sql .= " AND u.statut > 0";
+ $sql .= " AND u.employee = 1"; // We only want employee users for holidays
if ($filters) {
$sql .= $filters;
}
@@ -1755,6 +1756,7 @@ class Holiday extends CommonObject
}
$sql .= " AND u.statut > 0";
+ $sql .= " AND u.employee = 1"; // We only want employee users for holidays
if ($filters) {
$sql .= $filters;
}