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 ''.$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,