true, 'id' => false ]; public function d($msg) { if ($this->DEBUG) pr($msg); } // Ce qui s'affiche quand on fait echo $entity public function __toString() { return $this->designation; } public function getPreviousStatus() { //debug($this->getSource()); exit; // 'Materiels' (str) return MaterielsTable::getPreviousStatusFrom($this->status); } public function check_date_is_not_too_old($date_field_name) { $d = $this->$date_field_name; if (is_null($d)) return true; // today - 50 ans = trop vieux ! /* Avec TZ $tz = new \DateTimeZone('Europe/Paris'); $date_too_old = new \DateTime('-50 years',$tz); */ // Sans TimeZone (car inutile à ce niveau je crois) $date_too_old = new \DateTime('-50 years'); return $d > $date_too_old; } public function check_date_is_not_future($date_field_name) { $d = $this->$date_field_name; $today = new \DateTime('now'); return $d <= $today; } // date_reception >= date_acquisition et aussi date_fin_garantie >= date_reception public function check_date_d2_gt_d1_but_not_too_much($d2_name,$d1_name) { $d2 = $this->$d2_name; $d1 = $this->$d1_name; //debug("d2:"); debug($d2); //debug("d1:"); debug($d1); // Si une des 2 dates est nulle => return true if (!$d2 || !$d1) return true; /* $tz = new \DateTimeZone('Europe/Paris'); //date_default_timezone_set('Europe/Paris'); // DateTime lit les dates au format JJ-MM-YYYY (et non pas JJ/MM/YYYY) //$d1 = ( new \DateTime(strtr($entity->date_acquisition,'/','-'),$tz) )->format('Ymd'); $d1 = new \DateTime(strtr($d1,'/','-'),$tz); //$d1_text = $d1->format('Ymd'); $d2 = new \DateTime(strtr($d2,'/','-'),$tz); */ //$d2_text = $d2->format('Ymd'); //$today = (new \DateTime('now',$tz))->format('Ymd'); //$ok = ($d2_text >= $d1_text); if ($d2 < $d1) return false; // $d2 > $d1 oui mais pas trop... $diff = $d2->diff($d1); //debug($diff->y); return $diff->y < MAX_DIFF_YEARS; //return true; } public function hasAttachedDocOfType($doc_type) { //debug($this->documents); foreach ($this->documents as $doc) if ($doc->isOfType($doc_type)) return true; // par défaut, faux return false; } /* public function hasDevis() { //debug($this->documents); foreach ($this->documents as $doc) if ($doc->is_devis) return true; // par défaut, faux return false; } */ protected function hasStatus($status) { return $this->status == $status; } // (EP 20200504) // Propriétés virtuelles (attributs virtuels de l'entité matériel) // A utiliser dans le controleur ainsi : $materiel->is_created //public function isCreated() { return $this->status == 'CREATED'; } //protected function _getIsCreated() { return $this->_fields['status'] == 'CREATED'; } protected function _getIsCreated() { return $this->status == 'CREATED'; } //return $this->status == 'CREATED'; protected function _getIsTobeordered() { return $this->status == 'TOBEORDERED'; } protected function _getIsValidated() { return $this->status == 'VALIDATED'; } protected function _getIsValidatedOrMore() { return in_array($this->status, ['VALIDATED', 'TOBEARCHIVED', 'ARCHIVED']); } //protected function _getIsValidated() { return $this->_fields['status'] == 'VALIDATED'; } //public function is_tobearchived() { return $this->status == 'TOBEARCHIVED'; } protected function _getIsTobearchived() { return $this->status == 'TOBEARCHIVED'; } protected function _getIsArchived() { return $this->status == 'ARCHIVED'; } public function getNiceStatus() { return MaterielsTable::getNiceStatus($this->status); } /* public function getNiceStatus() { //if ($this->is_created) return 'À VALIDER'; if ($this->is_created) return 'CRÉÉ - à valider'; if ($this->is_tobeordered) return 'EN COMMANDE - à valider'; if ($this->is_validated) return 'VALIDÉ - livré & payé'; if ($this->is_tobearchived) return 'À SORTIR'; //if ($this->is_archived) return 'ARCHIVÉ'; } */ // Ce matériel est utilisé ou déclaré par l'utilisateur $userfullname // is Owned Or Declared By User // fullname = "Pallier Etienne" (= champ "nom" du user : $user->nom) //public function isUsedOrCreatedByUser($user) { //public function isOwnedOrDeclaredByUser($username) { public function belongsToUser($userfullname) { //debug("userfullname is $userfullname"); $res = in_array($userfullname, [$this->nom_createur, $this->nom_responsable]); //$this->d("$userfullname in [ $this->nom_createur, $this->nom_responsable ] ? ".(int)$res); return $res; } // Ce matériel a le même groupe que l'un de ceux de l'utilisateur courant public function isSameGroupAsUser($user_group_metier_id, $user_group_thematique_id) { // Responsable groupe métier ? //if ($this->groupes_metier_id==null && $this->groupes_thematique_id==null) return false; //if ($user_group_metier_id==null && $user_group_thematique_id==null) return false; $samegroup1 = $this->groupes_metier_id!=null && $this->groupes_metier_id==$user_group_metier_id; $samegroup2 = $this->groupes_thematique_id!=null && $this->groupes_thematique_id==$user_group_thematique_id; return $samegroup1 || $samegroup2; } // isSameGroupAsUser /* * @return true si ce matériel peut être "géré" par l'utilisateur $u, * en autorisant systématiquement à partir du role $from_role * (false sinon) * * Un utilisateur peut "gérer" (éditer, supprimer) un matériel existant ssi : * - a) il a au moins le profil $from_role (ADMIN, SUPERADMIN) * ou * - b) le matériel lui "appartient" (il en est l'utilisateur ou bien il a créé sa fiche) * ou * - c) il est RESPONSABLE et est du même groupe que le matériel */ // Par défaut, autorisé à partir du profil utilisateur ADMIN ($role) public function isManageableByUserOrFromRole(User $u, $from_role='admin') { /* debug("utilisateur1:"); debug($u); if (is_array($u)) $u = new User($u); debug("utilisateur2:"); debug($u); */ // a) if ($from_role=='admin' && $u->is_admin_or_more) return true; if ($from_role=='super' && $u->is_super) return true; // b) if ($this->belongsToUser($u->nom)) return true; //if ($u->ownsMatos($this)) return true; // c) $res = $u->is_resp && $this->isSameGroupAsUser($u->groupes_metier_id, $u->groupes_thematique_id); return $res; //return $u->is_resp && $this->isSameGroupAsUser($u->groupes_metier_id, $u->groupes_thematique_id); //return $this->isSameGroupAsMatos($m); } //@return true si ce matériel peut être "géré" par l'utilisateur $u, false sinon ///public function isManageableByUser(User $u) { return $this->isManageableByUserOrFromRole($u, 'admin'); } public function isDeleteableByUser(User $u) { // on autorise ADMIN(+) à supprimer un matos archivé if ($u->is_admin_or_more && $this->is_archived) return true; // sinon, règle par défaut return $this->is_created && $this->isManageableByUserOrFromRole($u, 'super'); } // 'edit' et 'add' by copy public function isEditableOrCopiableByUser(User $u) { return $this->is_created && $this->isManageableByUserOrFromRole($u, 'admin'); } // Ce matériel peut être PRÊTÉ par $u // ATTENTION AU SENS : On ne regarde pas si $u peut EMPRUNTER, mais s'il peut PRETER (c'est pas pareil) public function canBeLentByUser(User $u) { return $this->is_validated && $this->isManageableByUserOrFromRole($u, 'super'); } //public function isLendableByUser(User $u) { return $this->isManageableByUserFromRole($u, 'super'); } // L'utilisateur $u peut créer un "suivi" de ce matériel // Même conditions que pour le prêt public function canBeSuiviByUser(User $u) { return $this->canBeLentByUser($u); } //return $m->is_validated && $this->isManageableByUserOrFromRole($u, 'super'); public function canDeleteSuiviByUser(User $u) { return $this->isManageableByUserOrFromRole($u, 'super'); } //public function canDeleteSuiviByUser(User $u) { return $this->isManageableByUserOrFromRole($u, 'admin'); } /* 14/1/19 bake autogenerated: protected $_accessible = [ 'designation' => true, 'sur_categorie_id' => true, 'categorie_id' => true, 'sous_categorie_id' => true, 'numero_laboratoire' => true, 'description' => true, 'materiel_administratif' => true, 'materiel_technique' => true, 'status' => true, 'date_acquisition' => true, 'prix_ht' => true, 'eotp' => true, 'numero_commande' => true, 'code_comptable' => true, 'numero_serie' => true, 'groupes_thematique_id' => true, 'groupes_metier_id' => true, 'numero_inventaire_organisme' => true, 'numero_inventaire_old' => true, 'date_archivage' => true, 'etiquette' => true, 'lieu_detail' => true, 'nom_responsable' => true, 'email_responsable' => true, 'gestionnaire_id' => true, 'nom_createur' => true, 'nom_modificateur' => true, 'created' => true, 'modified' => true, 'date_reception' => true, 'organisme_id' => true, 'site_id' => true, 'date_fin_garantie' => true, 'duree_garantie' => true, 'unite_duree_garantie' => true, 'hors_service' => true, 'photo_id' => true, 'metrologie' => true, 'fournisseur_id' => true, 'sur_category' => true, 'category' => true, 'sous_category' => true, 'groupes_thematique' => true, 'groupes_metier' => true, 'organisme' => true, 'site' => true, 'documents' => true, 'emprunts' => true, 'suivis' => true, 'fournisseur' => true, 'user' => true ]; */ }