diff --git a/htdocs/holiday/card.php b/htdocs/holiday/card.php
index f9112f5faad..96a6b40f71b 100644
--- a/htdocs/holiday/card.php
+++ b/htdocs/holiday/card.php
@@ -284,7 +284,7 @@ if (empty($reshook)) {
}
}
- // If this is an update and we are an approver, we can update to change the approver
+ // If this is an update and we are an approver, we can update to change the expected approver with another one (including himself)
if ($action == 'update' && GETPOSTISSET('savevalidator') && !empty($user->rights->holiday->approve)) {
$object->fetch($id);
@@ -558,9 +558,10 @@ if (empty($reshook)) {
if ($object->statut == Holiday::STATUS_VALIDATED && $user->id == $object->fk_validator) {
$object->oldcopy = dol_clone($object);
- $object->date_valid = dol_now();
- $object->fk_user_valid = $user->id;
+ $object->date_approval = dol_now();
+ $object->fk_user_approve = $user->id;
$object->statut = Holiday::STATUS_APPROVED;
+ $object->status = Holiday::STATUS_APPROVED;
$db->begin();
@@ -663,6 +664,7 @@ if (empty($reshook)) {
$object->date_refuse = dol_print_date('dayhour', dol_now());
$object->fk_user_refuse = $user->id;
$object->statut = Holiday::STATUS_REFUSED;
+ $object->status = Holiday::STATUS_REFUSED;
$object->detail_refuse = GETPOST('detail_refuse', 'alphanohtml');
$db->begin();
@@ -751,6 +753,7 @@ if (empty($reshook)) {
$oldstatus = $object->statut;
$object->statut = Holiday::STATUS_DRAFT;
+ $object->status = Holiday::STATUS_DRAFT;
$result = $object->update($user);
if ($result < 0) {
@@ -783,6 +786,7 @@ if (empty($reshook)) {
$object->date_cancel = dol_now();
$object->fk_user_cancel = $user->id;
$object->statut = Holiday::STATUS_CANCELED;
+ $object->status = Holiday::STATUS_CANCELED;
$result = $object->update($user);
@@ -1497,8 +1501,8 @@ if ((empty($id) && empty($ref)) || $action == 'create' || $action == 'add') {
}
}
if ($object->statut == Holiday::STATUS_APPROVED) { // If validated and approved
- if ($user->id == $object->fk_validator || $cancreate || $cancreateall) {
- if (($object->date_debut > dol_now()) || !empty($user->admin)) {
+ if ($user->id == $object->fk_validator || $user->id == $object->fk_user_approve || $cancreate || $cancreateall) {
+ if (($object->date_debut > dol_now()) || !empty($user->admin) || $user->id == $object->fk_user_approve) {
print 'id.'&action=cancel&token='.newToken().'" class="butAction">'.$langs->trans("ActionCancelCP").'';
} else {
print 'trans("NotAllowed").'">'.$langs->trans("ActionCancelCP").'';
diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php
index 6e01f6fd767..714e0ddb55e 100644
--- a/htdocs/holiday/class/holiday.class.php
+++ b/htdocs/holiday/class/holiday.class.php
@@ -89,14 +89,19 @@ class Holiday extends CommonObject
public $date_valid = '';
/**
- * @var int ID of user that has approved (empty if not approved)
+ * @var int ID of user that has validated
*/
public $fk_user_valid;
/**
- * @var int Date approbation
+ * @var int Date approval
*/
- public $date_approbation;
+ public $date_approval;
+
+ /**
+ * @var int ID of user that has approved
+ */
+ public $fk_user_approve;
/**
* @var int Date for refuse
@@ -377,6 +382,8 @@ class Holiday extends CommonObject
$sql .= " cp.fk_validator,";
$sql .= " cp.date_valid,";
$sql .= " cp.fk_user_valid,";
+ $sql .= " cp.date_approval,";
+ $sql .= " cp.fk_user_approve,";
$sql .= " cp.date_refuse,";
$sql .= " cp.fk_user_refuse,";
$sql .= " cp.date_cancel,";
@@ -414,6 +421,8 @@ class Holiday extends CommonObject
$this->fk_validator = $obj->fk_validator;
$this->date_valid = $this->db->jdate($obj->date_valid);
$this->fk_user_valid = $obj->fk_user_valid;
+ $this->date_approval = $this->db->jdate($obj->date_approval);
+ $this->fk_user_approve = $obj->fk_user_approve;
$this->date_refuse = $this->db->jdate($obj->date_refuse);
$this->fk_user_refuse = $obj->fk_user_refuse;
$this->date_cancel = $this->db->jdate($obj->date_cancel);
@@ -467,6 +476,8 @@ class Holiday extends CommonObject
$sql .= " cp.fk_validator,";
$sql .= " cp.date_valid,";
$sql .= " cp.fk_user_valid,";
+ $sql .= " cp.date_approval,";
+ $sql .= " cp.fk_user_approve,";
$sql .= " cp.date_refuse,";
$sql .= " cp.fk_user_refuse,";
$sql .= " cp.date_cancel,";
@@ -535,6 +546,8 @@ class Holiday extends CommonObject
$tab_result[$i]['fk_validator'] = $obj->fk_validator;
$tab_result[$i]['date_valid'] = $this->db->jdate($obj->date_valid);
$tab_result[$i]['fk_user_valid'] = $obj->fk_user_valid;
+ $tab_result[$i]['date_approval'] = $this->db->jdate($obj->date_approval);
+ $tab_result[$i]['fk_user_approve'] = $obj->fk_user_approve;
$tab_result[$i]['date_refuse'] = $this->db->jdate($obj->date_refuse);
$tab_result[$i]['fk_user_refuse'] = $obj->fk_user_refuse;
$tab_result[$i]['date_cancel'] = $this->db->jdate($obj->date_cancel);
@@ -593,6 +606,8 @@ class Holiday extends CommonObject
$sql .= " cp.fk_validator,";
$sql .= " cp.date_valid,";
$sql .= " cp.fk_user_valid,";
+ $sql .= " cp.date_approval,";
+ $sql .= " cp.fk_user_approve,";
$sql .= " cp.date_refuse,";
$sql .= " cp.fk_user_refuse,";
$sql .= " cp.date_cancel,";
@@ -661,6 +676,8 @@ class Holiday extends CommonObject
$tab_result[$i]['fk_validator'] = $obj->fk_validator;
$tab_result[$i]['date_valid'] = $this->db->jdate($obj->date_valid);
$tab_result[$i]['fk_user_valid'] = $obj->fk_user_valid;
+ $tab_result[$i]['date_approval'] = $this->db->jdate($obj->date_approval);
+ $tab_result[$i]['fk_user_approve'] = $obj->fk_user_approve;
$tab_result[$i]['date_refuse'] = $obj->date_refuse;
$tab_result[$i]['fk_user_refuse'] = $obj->fk_user_refuse;
$tab_result[$i]['date_cancel'] = $obj->date_cancel;
@@ -865,6 +882,16 @@ class Holiday extends CommonObject
} else {
$sql .= " fk_user_valid = NULL,";
}
+ if (!empty($this->date_approval)) {
+ $sql .= " date_approval = '".$this->db->idate($this->date_approval)."',";
+ } else {
+ $sql .= " date_approval = NULL,";
+ }
+ if (!empty($this->fk_user_approve)) {
+ $sql .= " fk_user_approve = '".$this->db->escape($this->fk_user_approve)."',";
+ } else {
+ $sql .= " fk_user_approve = NULL,";
+ }
if (!empty($this->date_refuse)) {
$sql .= " date_refuse = '".$this->db->idate($this->date_refuse)."',";
} else {
@@ -980,17 +1007,27 @@ class Holiday extends CommonObject
$sql .= " date_valid = NULL,";
}
if (!empty($this->fk_user_valid)) {
- $sql .= " fk_user_valid = '".$this->db->escape($this->fk_user_valid)."',";
+ $sql .= " fk_user_valid = ".((int) $this->fk_user_valid).",";
} else {
$sql .= " fk_user_valid = NULL,";
}
+ if (!empty($this->date_approval)) {
+ $sql .= " date_approval = '".$this->db->idate($this->date_approval)."',";
+ } else {
+ $sql .= " date_approval = NULL,";
+ }
+ if (!empty($this->fk_user_approve)) {
+ $sql .= " fk_user_approve = ".((int) $this->fk_user_approve).",";
+ } else {
+ $sql .= " fk_user_approve = NULL,";
+ }
if (!empty($this->date_refuse)) {
$sql .= " date_refuse = '".$this->db->idate($this->date_refuse)."',";
} else {
$sql .= " date_refuse = NULL,";
}
if (!empty($this->fk_user_refuse)) {
- $sql .= " fk_user_refuse = '".$this->db->escape($this->fk_user_refuse)."',";
+ $sql .= " fk_user_refuse = ".((int) $this->fk_user_refuse).",";
} else {
$sql .= " fk_user_refuse = NULL,";
}
@@ -1000,7 +1037,7 @@ class Holiday extends CommonObject
$sql .= " date_cancel = NULL,";
}
if (!empty($this->fk_user_cancel)) {
- $sql .= " fk_user_cancel = '".$this->db->escape($this->fk_user_cancel)."',";
+ $sql .= " fk_user_cancel = ".((int) $this->fk_user_cancel).",";
} else {
$sql .= " fk_user_cancel = NULL,";
}
@@ -2206,12 +2243,13 @@ class Holiday extends CommonObject
$sql .= " f.date_create as datec,";
$sql .= " f.tms as date_modification,";
$sql .= " f.date_valid as datev,";
- $sql .= " f.date_approve as datea,";
+ $sql .= " f.date_approval as datea,";
$sql .= " f.date_refuse as dater,";
$sql .= " f.fk_user_create as fk_user_creation,";
$sql .= " f.fk_user_modif as fk_user_modification,";
- $sql .= " f.fk_user_valid as fk_user_approve_done,";
- $sql .= " f.fk_validator as fk_user_approve_expected,";
+ $sql .= " f.fk_user_valid as fk_user_validation,";
+ $sql .= " f.fk_user_approve as fk_user_approval_done,";
+ $sql .= " f.fk_validator as fk_user_approval_expected,";
$sql .= " f.fk_user_refuse as fk_user_refuse";
$sql .= " FROM ".MAIN_DB_PREFIX."holiday as f";
$sql .= " WHERE f.rowid = ".((int) $id);
@@ -2227,16 +2265,16 @@ class Holiday extends CommonObject
$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);
- $this->date_approbation = $this->db->jdate($obj->datea);
+ $this->date_approval = $this->db->jdate($obj->datea);
if (!empty($obj->fk_user_creation)) {
$cuser = new User($this->db);
$cuser->fetch($obj->fk_user_creation);
$this->user_creation = $cuser;
}
- if (!empty($obj->fk_user_approve_done)) {
+ if (!empty($obj->fk_user_valid)) {
$vuser = new User($this->db);
- $vuser->fetch($obj->fk_user_approve_done);
+ $vuser->fetch($obj->fk_user_valid);
$this->user_validation = $vuser;
}
if (!empty($obj->fk_user_modification)) {
@@ -2246,15 +2284,15 @@ class Holiday extends CommonObject
}
if ($obj->status == Holiday::STATUS_APPROVED || $obj->status == Holiday::STATUS_CANCELED) {
- if ($obj->fk_user_approve_done) {
+ if ($obj->fk_user_approval_done) {
$auser = new User($this->db);
- $auser->fetch($obj->fk_user_approve_done);
+ $auser->fetch($obj->fk_user_approval_done);
$this->user_approve = $auser;
}
} else {
- if (!empty($obj->fk_user_approve_expected)) {
+ if (!empty($obj->fk_user_approval_expected)) {
$auser = new User($this->db);
- $auser->fetch($obj->fk_user_approve_expected);
+ $auser->fetch($obj->fk_user_approval_expected);
$this->user_approve = $auser;
}
}
diff --git a/htdocs/install/mysql/migration/16.0.0-17.0.0.sql b/htdocs/install/mysql/migration/16.0.0-17.0.0.sql
index 5f297619c50..1b0d8a33231 100644
--- a/htdocs/install/mysql/migration/16.0.0-17.0.0.sql
+++ b/htdocs/install/mysql/migration/16.0.0-17.0.0.sql
@@ -69,6 +69,10 @@ ALTER TABLE llx_adherent ADD COLUMN default_lang VARCHAR(6) DEFAULT NULL AFTER d
ALTER TABLE llx_adherent_type ADD COLUMN caneditamount integer DEFAULT 0 AFTER amount;
+ALTER TABLE llx_holiday CHANGE COLUMN date_approve date_approval datetime;
+
+UPDATE llx_holiday SET date_approval = date_valid WHEN statut = 3 AND date_approval IS NULL;
+UPDATE llx_holiday SET fk_user_approve = fk_user_valid WHEN statut = 3 AND fk_user_approve IS NULL;
ALTER TABLE llx_inventory ADD COLUMN categories_product VARCHAR(255) DEFAULT NULL AFTER fk_product;
diff --git a/htdocs/install/mysql/tables/llx_holiday.sql b/htdocs/install/mysql/tables/llx_holiday.sql
index be468bd32a5..c6af12d453c 100644
--- a/htdocs/install/mysql/tables/llx_holiday.sql
+++ b/htdocs/install/mysql/tables/llx_holiday.sql
@@ -34,10 +34,10 @@ halfday integer DEFAULT 0, -- 0=start morning and end afternoon, -1=st
nb_open_day double(24,8) DEFAULT NULL, -- denormalized number of open days of holiday. Not always set. More reliable when re-calculated with num_open_days(date_debut, date_fin, halfday).
statut integer NOT NULL DEFAULT 1, -- status of leave request
fk_validator integer NOT NULL, -- who should approve the leave
-date_valid DATETIME DEFAULT NULL, -- date approval (currently both date valid and date_approval)
-fk_user_valid integer DEFAULT NULL, -- user approval (currently both user valid and user that approved)
-date_approve DATETIME DEFAULT NULL, -- date approval (not used yet)
-fk_user_approve integer DEFAULT NULL, -- user approval (not used yet)
+date_valid DATETIME DEFAULT NULL, -- date validation
+fk_user_valid integer DEFAULT NULL, -- user validation
+date_approval DATETIME DEFAULT NULL, -- date approval
+fk_user_approve integer DEFAULT NULL, -- user approval
date_refuse DATETIME DEFAULT NULL,
fk_user_refuse integer DEFAULT NULL,
date_cancel DATETIME DEFAULT NULL,