From 5b54a286a622d8eb0048b1db2ccc949ea2b73efb Mon Sep 17 00:00:00 2001 From: mimelhaine Date: Tue, 21 Aug 2018 16:13:05 +0200 Subject: [PATCH] Version master petites modifs directes (corrections pb malik avec Etienne) --- src/Controller/AppController.php | 381 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------- src/Controller/DocumentsController.php | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- src/Controller/FournisseursController.php | 15 +++++++++------ src/Controller/MaterielsController.php | 183 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------ src/Controller/SuivisController.php | 5 ++++- src/Model/Table/DocumentsTable.php | 28 ++++++++++++++++++++++++---- src/Model/Table/MaterielsTable.php | 104 ++++++++++++-------------------------------------------------------------------------------------------- src/Template/Documents/edit.ctp | 3 ++- src/Template/Documents/index.ctp | 2 +- src/Template/Element/menu.ctp | 2 ++ src/Template/Element/menu_index.ctp | 4 ++++ src/Template/Element/menu_view.ctp | 40 ++++++++++++++++++++++++++++++++++++---- src/Template/Emprunts/index.ctp | 2 +- src/Template/Fournisseurs/index.ctp | 2 +- src/Template/Layout/Formules/add.ctp | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/Template/Layout/Formules/edit.ctp | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/Template/Layout/Formules/index.ctp | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ src/Template/Layout/Formules/view.ctp | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/Template/Layout/default.ctp | 2 +- src/Template/Materiels/add.ctp | 9 +++++---- src/Template/Materiels/edit.ctp | 138 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------- src/Template/Materiels/index.ctp | 8 +++++--- src/Template/Materiels/view.ctp | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------- src/Template/Pages/tools_menu_sm.ctp | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------- src/Template/Suivis/add.ctp | 31 +++++++++++++++++++++++++++++-- src/Template/Suivis/edit.ctp | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------- src/Template/Suivis/index.ctp | 35 +++++++++++++++++++---------------- src/Template/Suivis/view.ctp | 28 ++++++++++++++++++++-------- src/Template/Users/add.ctp | 1 + src/Template/Users/index.ctp | 2 +- src/Template/Users/index_recap.ctp | 2 +- 31 files changed, 1343 insertions(+), 332 deletions(-) create mode 100755 src/Template/Layout/Formules/add.ctp create mode 100755 src/Template/Layout/Formules/edit.ctp create mode 100755 src/Template/Layout/Formules/index.ctp create mode 100755 src/Template/Layout/Formules/view.ctp diff --git a/src/Controller/AppController.php b/src/Controller/AppController.php index 6bd61d2..22223f2 100755 --- a/src/Controller/AppController.php +++ b/src/Controller/AppController.php @@ -814,10 +814,10 @@ class AppController extends Controller $subject = "Ajout d'un matériel"; $msg = "$acteur a ajouté le matériel \"$nom_materiel\""; break; - case 'edit': - $subject = "Modification d'un matériel"; - $msg = "$acteur a modifié le matériel \"$nom_materiel\""; - break; + // case 'edit': + //$subject = "Modification d'un matériel"; + //$msg = "$acteur a modifié le matériel \"$nom_materiel\""; + // break; case 'delete': $subject = "Suppression d'un matériel"; $msg = "$acteur a supprimé le matériel \"$nom_materiel\""; @@ -831,14 +831,14 @@ class AppController extends Controller if ($materiel->description != "") $msgMore .= "\n\nDescription :\n" . $materiel->description; break; - case 'statusCreated': - $subject = "Dé-validation d'un matériel"; - $msg = "$acteur a dé-validé le matériel \"$nom_materiel\""; - break; - case 'statusValidated': - $subject = "Validation d'un matériel"; - $msg = "$acteur a validé le matériel \"$nom_materiel\""; - break; + //case 'statusCreated': + //$subject = "Dé-validation d'un matériel"; + //$msg = "$acteur a dé-validé le matériel \"$nom_materiel\""; + // break; + //case 'statusValidated': + //$subject = "Validation d'un matériel"; + //$msg = "$acteur a validé le matériel \"$nom_materiel\""; + // break; case 'statusToBeArchived': $subject = "Demande d'archivage d'un matériel"; $msg = "$acteur a demandé l'archivage du matériel \"$nom_materiel\""; @@ -1006,4 +1006,359 @@ class AppController extends Controller } } } -} \ No newline at end of file + + // Fonction d'envoi de mails avec photo jointe + private function sendEmailImgTo($subject, $msg, $mail, $config, $nomImg) + { + if ($mail != null && ! $config->test) { + if (filter_var($mail, FILTER_VALIDATE_EMAIL)) { + $email = new Email(); + $etiquetteFrom = explode("@", $config->sender_mail); + $email->attachments(["/var/www/html/labinvent/webroot/img/photos/$nomImg"]); + $email->transport('default') + ->from([ + $config->sender_mail => $etiquetteFrom[0] + ]) + ->to($mail) + ->subject("[LabInvent] " . $subject) + ->send($msg); + } + } + } + + // Fonction d'envoi de mails avec pièce jointe + private function sendEmailPJTo($subject, $msg, $mail, $config, $nomDoc) + { + if ($mail != null && !$config->test) { + if (filter_var($mail, FILTER_VALIDATE_EMAIL)) { + $email = new Email(); + $etiquetteFrom = explode("@", $config->sender_mail); + $email->attachments(["/var/www/html/labinvent/webroot/files/$nomDoc"]); + $email->transport('default') + ->from([ + $config->sender_mail => $etiquetteFrom[0] + ]) + ->to($mail) + ->subject("[LabInvent] " . $subject) + ->send($msg); + } + } + } + + /**Version noob + * Envoi un mail avec un sujet, contenant un message à destination d'un email, selon l'action effectuée. + * + * @param $entity : + * L'entité concernée (principalement un Matériel, mais ça peut aussi etre un Document) + * @param $subject : + * Sujet du message à envoyer. Si $subject n'est pas renseigné, un sujet par défaut sera généré. + * @param $msg : + * Message à envoyer. Si $msg n'est pas renseigné, un message par défaut sera généré. + */ + public function sendmail($entity, $mode, $subject = null, $msg = null) + { + + + /* + * $_SESSION['Auth']['User'] pour retrouver TOUTES les infos de la session courante (tout est du string) : + * nom $_SESSION['Auth']['User']['sn'][0] + * prenom $_SESSION['Auth']['User']['givenname'][0] + * mail $_SESSION['Auth']['User']['mail'][0] + * login $_SESSION['Auth']['User']['xxx'][0] /!\ Ce champ est suceptible de changer de nom, dans les tests ce champ est ['cn'][0] + * mdp $_SESSION['Auth']['User']['userpassword'][0] + */ + $configuration = $this->confLabinvent; + $action = $this->request->getAttribute('params')['action']; // add or edit or delete or ... + + // Si les deux cases "Activer l'envoi des mails.." sont décochées, on se fatigue pas à exécuter la fonction + if (! $configuration->envoi_mail && ! $configuration->envoi_mail_guests) + return null; + + $mailList = array(); + + // On détermine le message et le sujet du mail en fonction de l'action effectuee + // on bloque l'envoi de mail à l'edition et à la validation pour eviter trop d'envoi de mail + // le temps que soit trouvé une autre solution + $acteur = $_SESSION['Auth']['User']['givenname'][0] . ' ' . $_SESSION['Auth']['User']['sn'][0]; + // if ($entity != null) { + if ($entity instanceof Materiel) { + $materiel = $entity; + $nom_materiel = $materiel->designation; + if ($subject == null && $msg == null) { + $msgMore = ''; + Switch ($action) { + case 'add': + $subject = "Ajout d'un matériel"; + $msg = "$acteur a ajouté le matériel \"$nom_materiel\""; + break; + case 'edit': + $subject = "Modification d'un matériel"; + $msg = "$acteur a modifié le matériel \"$nom_materiel\""; + break; + case 'delete': + $subject = "Suppression d'un matériel"; + $msg = "$acteur a supprimé le matériel \"$nom_materiel\""; + // @todo: mettre le nom des domaine, categ, et sous-categ, et non pas l'id + if ($materiel->sur_categorie_id != "") + $msgMore .= "\n\nDomaine : " . $materiel->sur_categorie_id; + if ($materiel->categorie_id != "") + $msgMore .= "\n\nCatégorie : " . $materiel->categorie_id; + if ($materiel->sous_categorie_id != "") + $msgMore .= "\n\nSous-catégorie : " . $materiel->sous_categorie_id; + if ($materiel->description != "") + $msgMore .= "\n\nDescription :\n" . $materiel->description; + break; + case 'statusCreated': + $subject = "Dé-validation d'un matériel"; + $msg = "$acteur a dé-validé le matériel \"$nom_materiel\""; + break; + case 'statusValidated': + $subject = "Validation d'un matériel"; + $msg = "$acteur a validé le matériel \"$nom_materiel\""; + break; + case 'statusToBeArchived': + $subject = "Demande d'archivage d'un matériel"; + $msg = "$acteur a demandé l'archivage du matériel \"$nom_materiel\""; + break; + case 'statusArchived': + $subject = "Archivage d'un matériel"; + $msg = "$acteur a archivé le matériel \"$nom_materiel\""; + break; + case 'setLabelIsPlaced': + $subject = "Etiquette posée sur un matériel"; + $msg = "Etiquette posée sur le matériel \"$nom_materiel\""; + break; + case 'printLabelRuban': + $subject = "Etiquette imprimée"; + $msg = "L'étiquette concerant votre matériel \"$nom_materiel\" a été imprimée"; + $mailList[0] = $materiel->email_responsable; + default: + $subject = "Action \"$action\" sur un matériel"; + $msg = "$acteur a effectué l'action \"$action\" sur le matériel \"$nom_materiel\""; + break; + } // end switch + // (EP) Ajout de l'ID du materiel !!! + $msg .= " (id=" . $materiel->id . ")."; + // Only for "delete" action (for the moment...) + if ($msgMore) + $msg .= $msgMore; + // $msg .= "\n\n"; + } // subject is null + + // Et maintenant on construit la liste de mails... + // Si l'envoi général est activé (et que l'action ne correspond pas à 'printLabelRuban'): + if ($configuration->envoi_mail && $action != 'printLabelRuban') { + + // owner's mail (utilisateur du matériel) + $mailList[0] = $materiel->email_responsable; + + // resp's mail + $mailsRespMetier = null; + $mailRespThematique = null; + + if ($materiel->groupes_metier_id != null && $materiel->groupes_metier_id != 1) { + // Le ..!= 1 c'est parce que le groupe métier/thématique d'id 1 correspond au groupe N/A, soit aucun groupe + $mailsRespMetier = TableRegistry::get('Users')->find() + ->select('email') + ->where([ + 'role =' => 'Responsable', + 'groupes_metier_id =' => $materiel->groupes_metier_id + ]) + ->toArray(); + $mailRespThematique = TableRegistry::get('Users')->find() + ->select('email') + ->where([ + 'role =' => 'Responsable', + 'groupe_thematique_id =' => $materiel->groupes_thematique_id + ]) + ->toArray(); + } + + if ($mailsRespMetier != null || $mailRespThematique != null) { + $mailsResp = array_unique(array_merge($mailsRespMetier, $mailRespThematique)); + for ($i = 0; $i < sizeof($mailsResp); $i ++) { + $mailList[] = $mailsResp[$i]['email']; + // $mailList[sizeof($mailList)] = $mailsResp[$i]['email']; + } + } + + + + } + }// Materiel + + // @todo: ajouter quelques infos dans ces cas : + else if ($entity instanceof Document) { + $doc = $entity; + $nom_doc = $doc->nom; + $id_doc = $doc->id; + $type_doc = $doc->type_doc; + $id_mat = $doc->materiel_id; + $id_suiv = $doc->suivi_id; + if ($subject == null && $msg == null) { + $msgMore = ''; + Switch ($action) { + case 'add': + $subject = "Ajout d'un document"; + $msg = "$acteur a ajouté le document \"$nom_doc\" au format \"$type_doc\""; + break; + //ajoutons un contenu de message plus clair pour l'envoi de document + case'mailDevis': + $subject = "$acteur a partagé un document avec vous"; + $msg = "$acteur après avoir ajouté le document \"$nom_doc\", a voulu le partager avec vous, c'est un document ayant le format \"$type_doc\" ."; + $msg .="\n\n Le document est en pièce jointe."; + break; + //L'edition + //comme il n'étais pas actuellement activé, on le laisse en commentaire + //case 'edit': + //$subject = "Modification d'un document"; + //$msg = "$acteur a modifié le matériel \"$nom_doc\""; + //break; + //La suppression + //comme il n'étais pas actuellement activé, on le laisse en commentaire + //case 'delete': + //$subject = "Suppression d'un document"; + //$msg = "$acteur a supprimé le document\"$nom_doc\""; + //break; + default: + $subject = "Action \"$action\" sur un matériel"; + $msg = "$acteur a effectué l'action \"$action\" sur le document \"$nom_doc\" au format \"$type_doc\""; + break; + } // end switch + // (EP) Ajout de l'ID du document, et de l'id du materiel associé !!! + + //On change le contenu en fonction de si le document a été lié à un matériel, ou a un suivi + // & nom du fichier à envoyer si nécessaire + + if (!($id_mat == Null)) { + $msg .= "\n\n (id doc=".$doc->id.", Materiel associé d'id=\"$id_mat\")"; + $nomFic =$id_mat."_".$nom_doc."_".$id_doc.".".$type_doc; + } else { + $msg .= "\n\n (id doc=".$doc->id.", Materiel associé d'id=\"$id_suiv\")"; + $nomFic =$id_suiv."_".$nom_doc."_".$id_doc.".".$type_doc; + } + } + // Et maintenant on construit la liste de mails... + // Si l'envoi général est activé (et que l'action ne correspond pas à 'printLabelRuban'): + if ($configuration->envoi_mail && $action != 'printLabelRuban') { + // owner's mail (utilisateur du matériel associé ) + //$mailList[0] = $entity->materiel->email_responsable; + $mailList[0] = 'malikimelhaine@gmail.com'; + + // resp's mail + $mailsRespMetier = null; + $mailRespThematique = null; + /* + if ( $entity->materiel->groupes_metier_id != null && $entity->materiel->groupes_metier_id != 1) { + // Le ..!= 1 c'est parce que le groupe métier/thématique d'id 1 correspond au groupe N/A, soit aucun groupe + $mailsRespMetier = TableRegistry::get('Users')->find() + ->select('email') + ->where([ + 'role =' => 'Responsable', + 'groupes_metier_id =' => $mat->groupes_metier_id + ]) + ->toArray(); + $mailRespThematique = TableRegistry::get('Users')->find() + ->select('email') + ->where([ + 'role =' => 'Responsable', + 'groupe_thematique_id =' => $mat->groupes_thematique_id + ]) + ->toArray(); + } + + //if ($mailsRespMetier != null || $mailRespThematique != null) { + //$mailsResp = array_unique(array_merge($mailsRespMetier, $mailRespThematique)); + //for ($i = 0; $i < sizeof($mailsResp); $i ++) { + //$mailList[] = $mailsResp[$i]['email']; + // $mailList[sizeof($mailList)] = $mailsResp[$i]['email']; + //} + //}*/ + } + } else if ($entity instanceof Suivi) { + ; + } else if ($entity instanceof Emprunt) { + ; + } + /* + * @todo: + * else if ($entity instanceof Configuration) { + * ; + * } + * ... etc ... (il faut qu'on soit plus précis) + */ + $mailList[0] = 'malikimelhaine@gmail.com'; + // Si l'envoi à la liste spécifiée est activé (et que l'action ne correspond pas à 'printLabelRuban'): + $specificUsers = []; + if ($configuration->envoi_mail_guests && $action != 'printLabelRuban') { + // mail aux adresses specifiees dans la config + for ($i = 0; $i < 11; $i ++) { + $specificUser = $configuration['emailGuest' . $i]; + if ($specificUser) + $specificUsers[] = $specificUser; + // $mailList[sizeof($mailList)] = $configuration['emailGuest' . $i]; + $mailList[] = $specificUser; + // Le if vérifie que la ligne soit pas null + } + } + + // On dedoublonne la liste des mails, c'pas tres cool de se faire spam 2-3 fois pour la meme action sur le meme materiel, non mais ! + $mailList = array_unique($mailList); + + // ... Pour envoyer les mails aux personnes concernees + foreach ($mailList as $mail) { + // On envoi des mails à toute la liste, sauf pour "l'acteur", il sait ce qu'il a fait, pas besoin de le spam non plus hein + //if ($mail == $_SESSION['Auth']['User']['mail'][0]) + //continue; + $message = $msg; // Sisi, cette variable $message est utile, m'enfin vous pouvez toujours essayer de la supprimer ..... Et pensez à regarder le contenu de vos mails !!! Sinon ca fait une tumeur + // Génération du message "Vous recevez ce message en tant que $role" + // Si $role inexistant (lorsque c'est un mail de la liste entrée en configuration), le message est plutot "Vous recevez ce message car vous avez demandé à le recevoir. [...]" + //if ($specificUsers) + $role = 'car vous etes dans la liste spécifique des emails de LabInvent. Pour faire retirer votre mail de cette liste, veuillez contacter un SuperAdmin. + '; + //else { + $role = $role. TableRegistry::get('Users')->find() + ->select('role') + ->where([ + 'email =' => $mail + ]) + ->first()['role'].' + '; + // Default role is Utilisateur (for people in LDAP but without priviledge, not in the users table) + // if (is_null($role)) + $role =$role .'en tant que ' .'Utilisateur'; + // $role = $role; + //} + if ($entity != null && ! in_array($action, [ + 'delete', + 'statusValidated', + 'statusCreated' + ])) { + $message .= "\n\nVeuillez vérifier et compléter si besoin la fiche correspondante."; + $message .= "\n\nVous recevez ce message " . $role; + //en fonction du mode à l'appel, on utilise un envoi de mail différent + + + switch($mode) { + //si le mode 1 est sélectionné c'est un envoi de mail avec ajout d'une photo + //explique le document qui a été ajouté, et le met en pièce jointe + case 1 : + $this->sendEmailImgTo("$subject", $message, $mail, $configuration,$nomFic); + break; + //si le mode 2 est sélectionné c'est un envoi de mail avec ajout d'un document + //à personnaliser + case 2 : + $this->sendEmailPJTo("$subject", $message, $mail, $configuration,$nomFic); + break; + //si le mode defaut est sélectionné c'est un simple envoi de mail + //récapitule une action (mieux pour les add...) + default : + $this->sendEmailTo("$subject", $message, $mail, $configuration); + break; + } + + } + } + return $mailList; + } +} + + \ No newline at end of file diff --git a/src/Controller/DocumentsController.php b/src/Controller/DocumentsController.php index 36dcf4c..ba6bcb7 100755 --- a/src/Controller/DocumentsController.php +++ b/src/Controller/DocumentsController.php @@ -36,7 +36,8 @@ class DocumentsController extends AppController if (in_array($action, [ // 'view', // 'add', - 'ficheMateriel' + 'ficheMateriel', + 'mailDevis' ])) return true; @@ -634,4 +635,53 @@ class DocumentsController extends AppController $this->set(compact('suivi', 'unite', 'fiche', 'symbole', 'mesures')); $this->set('fpdf', new FPDF('P', 'mm', 'A4')); } + + + /* + * Envoi de mail - cette fonction sera appelée si l'on clique sur le bouton envelloppe d'un document sur la page vue d'un matériel + * Met en place l'envoi de mail + */ + public function mailDevis($id) + { + + $document = $this->Documents->get($id); + + if ($this->request->is([ + 'patch', + 'post', + 'put', + 'mailDevis' + ])) { + $document = $this->Documents->patchEntity($document, $this->request->data); + } + //Si le document existe, on vérifie si c'est une photo ou autre chose + if(!empty($document)){ + //Si c'est une photo on l'envoi avec le mode d'envoi de mail adapté,.. + //pareil pour les autres docs + if($document->photo){ + $this->sendmail($document,1); + $this->Flash->success(__('Le mail avec la photo en pièce jointe a bien été envoyé.')); + + } else { + $this->sendmail($document,2); + $this->Flash->success(__('Le mail avec le document a bien été envoyé.')); + } + } else { + $this->Flash->error(__('Le mail n\'a pas pu être envoyé.')); + } + //puis on retourne sur la page vue du matériel si on étais sur matériel, sinon sur la page de suivi + if(!empty($document->materiel_id)) { + return $this->redirect([ + 'controller' => 'materiels', + 'action' => 'view', + $document->materiel_id + ]); + } else { + return $this->redirect([ + 'controller' => 'suivis', + 'action' => 'view', + $document->suivi_id + ]); + } + } } diff --git a/src/Controller/FournisseursController.php b/src/Controller/FournisseursController.php index e6e96a0..5217491 100644 --- a/src/Controller/FournisseursController.php +++ b/src/Controller/FournisseursController.php @@ -39,12 +39,16 @@ class FournisseursController extends AppController /* * // Administration + peut ajouter, supprimer ou modifier - * if( in_array($action,['add','delete','edit'])) { - * if ($this->USER_IS_ADMIN_AT_LEAST()) return true; - * return false; + * if( in_array($action,['add'])) { + * return true; * } */ - + //Tout le monde y a accés en ajout + if( in_array($action,['add'])) { + return true; + } + + // Administration peut ajouter, supprimer ou modifier un fournisseur // if($role == 'Administration' && in_array($action,['add','delete','edit'])) return true; @@ -105,8 +109,7 @@ class FournisseursController extends AppController if ($this->Fournisseurs->save($fournisseur)) { $this->Flash->success(__('Le fournisseur a bien été ajouté.')); return $this->redirect([ - 'action' => 'view', - $fournisseur->id + 'action' => 'index' ]); } else { $this->Flash->error(__('Le fournisseur n\'a pas pu être ajouté.')); diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index a1d6ae7..f89472c 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -271,8 +271,8 @@ class MaterielsController extends AppController break; case 'Responsable': // return ($this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])); - return ($this->isRespGroup($id, $userCname)); - break; + //return ($this->isRespGroup($id, $userCname)); + return ($this->isRespGroup($id, $userCname) || $this->isOwnedBy($id, $user['sn'][0] . ' ' . $user['givenname'][0])); // All other roles : Admin and more default: return true; @@ -286,7 +286,6 @@ class MaterielsController extends AppController // DELETE case 'delete': - // /$id = (int) $this->request->getAttribute('params')['pass'][0]; /* * (EP) ACL: @@ -866,7 +865,9 @@ class MaterielsController extends AppController } if ($this->Materiels->save($materiel)) { $this->Flash->success(__('Le matériel a bien été édité.')); - $this->sendEmail($materiel); + //En attendant un remaniement complet de la fonction + //1 = img, doc = 2, mail normal = tout autre argument + //$this->sendmail($materiel,5); return $this->redirect([ 'action' => 'view', $id @@ -1232,8 +1233,13 @@ class MaterielsController extends AppController $materiel->gestionnaire_id = $gestionnaireID; // TODO: SAVE !!! } - $this->sendEmail($materiel); - } + //$this->sendEmail($materiel); + //évite le double envoi car il y a un envoi de mail a la fonction add et à l'état created + //évite les envois succcessifs si qqn fait une erreur sur la fiche, valide la fiche, et dévalide pour remodifier + if ($newStatus == 'ARCHIVED' || $newStatus == 'TOBEARCHIVED') { + $this->sendEmail($materiel); + } + } if (! $onlyOneMateriel) return $success; @@ -1630,29 +1636,108 @@ class MaterielsController extends AppController if ($this->request->getData('s_fournisseur_id') !== null && $this->request->getData('s_fournisseur_id') != '') $fournisseur['Materiels.fournisseur_id ='] = $this->request->getData('s_fournisseur'); - $specificFieldsConditions = [ - 'Materiels.designation LIKE' => '%' . $this->request->getData('s_designation') . '%', - 'Materiels.numero_laboratoire LIKE' => '%' . $this->request->getData('s_numero_laboratoire') . '%', - $this->getConditionForField('numero_commande'), - $date_acquisition, - $periode_acquisitionRequest, - $this->getConditionForFieldNumber('prix_ht'), - $montantRequest, - $this->getConditionForFieldNumber('sur_categorie_id'), - $this->getConditionForFieldNumber('categorie_id'), - $this->getConditionForFieldNumber('sous_categorie_id'), - $this->getConditionForField('nom_responsable'), - $this->getConditionForField('numero_inventaire_organisme'), - $this->getConditionForField('numero_inventaire_old'), - $this->getConditionForFieldNumber('groupes_metier_id'), - $this->getConditionForFieldNumber('groupes_thematique_id'), - $salle, - $fournisseur, - $this->getConditionForFieldNumber('organisme_id'), - $matostypeRequest, - $this->getConditionForFieldNumber('organisme_id'), - $matostypeRequest - ]; + $designation = []; + $designation = explode (" ", $this->request->getData('s_designation')); + if (count($designation) == 1 ) { + $specificFieldsConditions = [ + 'Materiels.designation LIKE' => '%' . $designation[0] . '%', + 'Materiels.numero_laboratoire LIKE' => '%' . $this->request->getData('s_numero_laboratoire') . '%', + $this->getConditionForField('numero_commande'), + $date_acquisition, + $periode_acquisitionRequest, + $this->getConditionForFieldNumber('prix_ht'), + $montantRequest, + $this->getConditionForFieldNumber('sur_categorie_id'), + $this->getConditionForFieldNumber('categorie_id'), + $this->getConditionForFieldNumber('sous_categorie_id'), + $this->getConditionForField('nom_responsable'), + $this->getConditionForField('numero_inventaire_organisme'), + $this->getConditionForField('numero_inventaire_old'), + $this->getConditionForFieldNumber('groupes_metier_id'), + $this->getConditionForFieldNumber('groupes_thematique_id'), + $salle, + $fournisseur, + $this->getConditionForFieldNumber('organisme_id'), + $matostypeRequest, + $this->getConditionForFieldNumber('organisme_id'), + $matostypeRequest + ]; + }else if(count($designation) == 2 ) { + $specificFieldsConditions = [ + 'Materiels.designation LIKE' => '%' . $designation[0]. '%', + 'Materiels.designation LIKE' => '%' . $designation[1]. '%', + 'Materiels.numero_laboratoire LIKE' => '%' . $this->request->getData('s_numero_laboratoire') . '%', + $this->getConditionForField('numero_commande'), + $date_acquisition, + $periode_acquisitionRequest, + $this->getConditionForFieldNumber('prix_ht'), + $montantRequest, + $this->getConditionForFieldNumber('sur_categorie_id'), + $this->getConditionForFieldNumber('categorie_id'), + $this->getConditionForFieldNumber('sous_categorie_id'), + $this->getConditionForField('nom_responsable'), + $this->getConditionForField('numero_inventaire_organisme'), + $this->getConditionForField('numero_inventaire_old'), + $this->getConditionForFieldNumber('groupes_metier_id'), + $this->getConditionForFieldNumber('groupes_thematique_id'), + $salle, + $fournisseur, + $this->getConditionForFieldNumber('organisme_id'), + $matostypeRequest, + $this->getConditionForFieldNumber('organisme_id'), + $matostypeRequest + ]; + }else if(count($designation) == 3 ) { + $specificFieldsConditions = [ + 'Materiels.designation LIKE' => '%' . $designation[0] . '%', + 'Materiels.designation LIKE' => '%' . $designation[1] . '%', + 'Materiels.designation LIKE' => '%' . $designation[2] . '%', + 'Materiels.numero_laboratoire LIKE' => '%' . $this->request->getData('s_numero_laboratoire') . '%', + $this->getConditionForField('numero_commande'), + $date_acquisition, + $periode_acquisitionRequest, + $this->getConditionForFieldNumber('prix_ht'), + $montantRequest, + $this->getConditionForFieldNumber('sur_categorie_id'), + $this->getConditionForFieldNumber('categorie_id'), + $this->getConditionForFieldNumber('sous_categorie_id'), + $this->getConditionForField('nom_responsable'), + $this->getConditionForField('numero_inventaire_organisme'), + $this->getConditionForField('numero_inventaire_old'), + $this->getConditionForFieldNumber('groupes_metier_id'), + $this->getConditionForFieldNumber('groupes_thematique_id'), + $salle, + $fournisseur, + $this->getConditionForFieldNumber('organisme_id'), + $matostypeRequest, + $this->getConditionForFieldNumber('organisme_id'), + $matostypeRequest + ]; + }else { + $specificFieldsConditions = [ + 'Materiels.designation LIKE' => '%' . $this->request->getData('s_designation'). '%', + 'Materiels.numero_laboratoire LIKE' => '%' . $this->request->getData('s_numero_laboratoire') . '%', + $this->getConditionForField('numero_commande'), + $date_acquisition, + $periode_acquisitionRequest, + $this->getConditionForFieldNumber('prix_ht'), + $montantRequest, + $this->getConditionForFieldNumber('sur_categorie_id'), + $this->getConditionForFieldNumber('categorie_id'), + $this->getConditionForFieldNumber('sous_categorie_id'), + $this->getConditionForField('nom_responsable'), + $this->getConditionForField('numero_inventaire_organisme'), + $this->getConditionForField('numero_inventaire_old'), + $this->getConditionForFieldNumber('groupes_metier_id'), + $this->getConditionForFieldNumber('groupes_thematique_id'), + $salle, + $fournisseur, + $this->getConditionForFieldNumber('organisme_id'), + $matostypeRequest, + $this->getConditionForFieldNumber('organisme_id'), + $matostypeRequest + ]; + } if ($this->request->getData('s_status') != '') array_push($specificFieldsConditions, [ @@ -1684,6 +1769,7 @@ class MaterielsController extends AppController ])->limit(1000); $this->paginate = [ + 'maxLimit' => 1000, 'limit' => 1000 ]; $_results = $this->paginate($lastResults); @@ -1693,17 +1779,17 @@ class MaterielsController extends AppController $this->request->session()->write("result", $lastResults->toArray()); } // end if() else if ($resultTri !== null && strstr($this->request->here(), 'sort') != false && strstr($this->request->here(), 'direction') != false) { - $foundMateriel = []; + $findedMateriel = []; foreach ($resultTri as $r) { - array_push($foundMateriel, $r->id); + array_push($findedMateriel, $r->id); } $res = $this->Materiels->find('all', [ 'limit' => 1000 ]); - for ($i = 0; $i < sizeof($foundMateriel); $i ++) { + for ($i = 0; $i < sizeof($findedMateriel); $i ++) { $res->orWhere([ - 'id =' => $foundMateriel[$i] + 'id =' => $findedMateriel[$i] ]); } @@ -2164,11 +2250,7 @@ class MaterielsController extends AppController $organisme = $materiel->organisme ? $materiel->organisme->nom : ''; $numeroInventaireOrganisme = $materiel->numero_inventaire_organisme; - // does not work in all cases : - //$dateAcquisition = substr(str_replace('/','-',$materiel->date_acquisition), 0,-4) . substr($materiel->date_acquisition,-2); - //$dateAcquisition = $materiel->date_acquisition->__toString(); // '20/10/2017' - //$dateAcquisition = $materiel->date_acquisition->i18nFormat('dd-MM-yy'); // // '20-10-17' - $dateAcquisition = $materiel->date_acquisition->i18nFormat('dd-MM-yyyy'); // // '20-10-2017' + $dateAcquisition = substr(str_replace('/','-',$materiel->date_acquisition), 0,-4) . substr($materiel->date_acquisition,-2); $filename = 'inventirap_label.label'; $file = fopen('php://output', 'w'); @@ -2269,22 +2351,15 @@ class MaterielsController extends AppController True False - '. - //.'' . trim("$numeroLab / " . "$organisme") . "\n" . "$dateAcquisition " . trim($numeroInventaireOrganisme ? '/ ' . "$numeroInventaireOrganisme" : '') . - //'' . trim("$numeroLab / " . "$dateAcquisition") . "\n" . "$organisme " . trim($numeroInventaireOrganisme ? '/ ' . "$numeroInventaireOrganisme" : '') . - /* - IRAP-2014-0048 / CNRS - 01-01-2018 - */ - '' . - trim("$numeroLab / $organisme")."\n". - trim("$dateAcquisition"). trim($numeroInventaireOrganisme ? ' / '."$numeroInventaireOrganisme" : ''). - ''. - ' - - - - + '. + //.'' . trim("$numeroLab / " . "$organisme") . "\n" . "$dateAcquisition " . trim($numeroInventaireOrganisme ? '/ ' . "$numeroInventaireOrganisme" : '') . + '' . trim("$numeroLab / " . "$dateAcquisition") . "\n" . "$organisme " . trim($numeroInventaireOrganisme ? '/ ' . "$numeroInventaireOrganisme" : '') . + ' + + + + + diff --git a/src/Controller/SuivisController.php b/src/Controller/SuivisController.php index d84eb75..30034f8 100755 --- a/src/Controller/SuivisController.php +++ b/src/Controller/SuivisController.php @@ -410,13 +410,16 @@ class SuivisController extends AppController 'delete' ]); $suivi = $this->Suivis->get($id); + $id=$suivi->materiel_id; if ($this->Suivis->delete($suivi)) { $this->Flash->success(__('Le suivi a bien été supprimé.')); } else { $this->Flash->error(__('Le suivi n\'a pas pu être supprimé.')); } return $this->redirect([ - 'action' => 'index' + 'controller' => 'materiels', + 'action' => 'view', + $id ]); } diff --git a/src/Model/Table/DocumentsTable.php b/src/Model/Table/DocumentsTable.php index 9d89bb1..00b81a4 100755 --- a/src/Model/Table/DocumentsTable.php +++ b/src/Model/Table/DocumentsTable.php @@ -71,6 +71,11 @@ class DocumentsTable extends AppTable $validator->allowEmpty('suivi_id'); + $validator->add('nom', 'alphaNumeric', [ + 'rule' => 'alphaNumeric', + 'message' => __('Le nom du document ne doit contenir que des chiffres et des lettres.'), + ]); + return $validator; } @@ -189,10 +194,18 @@ class DocumentsTable extends AppTable $file = $entity->get('chemin_file'); if (! empty($file['tmp_name'])) { $extension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); + //nouvelle norme pour les noms de documents uploadés + // + if(!$entity->get('materiel_id')== Null ) { + $id=$entity->get('materiel_id'); + } else { + $id=$entity->get('suivi_id'); + } + $nom=$id."_".$entity->get('nom')."_".$entity->get('id'). '.' . $extension; if ($entity->get('photo')) { - move_uploaded_file($file['tmp_name'], 'img' . DS . 'photos' . DS . $entity->get('id') . '.' . $extension); + move_uploaded_file($file['tmp_name'], 'img' . DS . 'photos' . DS . $nom ); } else { - move_uploaded_file($file['tmp_name'], 'files' . DS . $entity->get('id') . '.' . $extension); + move_uploaded_file($file['tmp_name'], 'files' . DS . $nom ); } } } @@ -202,8 +215,15 @@ class DocumentsTable extends AppTable */ public function afterDelete($event, $entity, $options) { - $nomFichier = $entity->get('id') . '.' . $entity->get('type_doc'); - if ($entity->get('photo')) { + //nouvelle norme pour les noms de documents uploadés + // + if(!$entity->get('materiel_id')== Null ) { + $id=$entity->get('materiel_id'); + } else { + $id=$entity->get('suivi_id'); + } + $nomFichier=$id."_".$entity->get('nom')."_".$entity->get('id').'.' . $entity->get('type_doc'); + if ($entity->get('photo')) { unlink('img' . DS . 'photos' . DS . $nomFichier); } else { unlink('files' . DS . $nomFichier); diff --git a/src/Model/Table/MaterielsTable.php b/src/Model/Table/MaterielsTable.php index 516bdc5..b15acf8 100755 --- a/src/Model/Table/MaterielsTable.php +++ b/src/Model/Table/MaterielsTable.php @@ -88,9 +88,7 @@ class MaterielsTable extends AppTable 'foreignKey' => 'gestionnaire_id' ]); } - - - + /** * Default validation rules. * @@ -101,53 +99,13 @@ class MaterielsTable extends AppTable public function validationDefault(Validator $validator) { $dateValide = function ($entity) { - // $entity format is like '02/01/2018' except for IRAP server which gives back '02/01/18' !!! - //debug($entity); - - // (1) La date saisie doit contenir 2 tirets (dd-mm-yy) : - $components1 = explode('-', $entity); - $components2 = explode('/', $entity); - if ( count($components1)!=3 && count($components2)!=3 ) return false; - $entity = str_replace('/', '-', $entity); - $components = explode('-', $entity); - //debug($components); - if ( count($components)!=3 ) return false; - // (2) La date saisie doit etre JJ-MM-AA ou JJ-MM-AAAA : - /* - debug(strlen($components[0])); - debug(strlen($components[1])); - debug(strlen($components[2])); - */ - list($day,$month,$year) = explode('-', $entity); - // day - if (strlen($day) != 2) return false; - // month - if (strlen($month) != 2) return false; - // year - if (strlen($year) != 2 && strlen($year) != 4) return false; - //if (strlen($components[2]) != 4) return false; - // (2) L'année ne doit pas être 1970 (c'est un bug) - //?? TODO: - // (3) La date saisie ne doit pas être dans le futur (elle doit etre < ou = today) : $time = Time::now(); // On récupère la date et l'heure actuelles - $today = (new date("$time->year-$time->month-$time->day"))->format('Ymd'); // On extrait la date on la formate en un format comparable de type 20171231 - // So we have to use US format !!! - try { - //$timeEntity = new Time($entity); - $dateEntity = Time::parseDate($entity, 'dd-MM-yy'); - // put in US format to be comparable to $today - //$timeEntity->i18nFormat('yyyyMMdd') - - } catch (Exception $e) { - return false; - } - $dateEntity = (new date("$dateEntity->year-$dateEntity->month-$dateEntity->day"))->format('Ymd'); - //exit; - //return ($today >= $dateEntity); - return ($dateEntity <= $today); + $today = (new date("$time->year-$time->month-$time->day"))->format('Ymd'); // On extrait la date on la formatte en un format comparable de type 20171231 + $timeEntity = new time($entity); + $dateEntity = (new date("$timeEntity->year-$timeEntity->month-$timeEntity->day"))->format('Ymd'); + return ($today >= $dateEntity); }; - $validator->integer('id')->allowEmpty('id', 'create'); $validator->notEmpty('designation', 'Ce champ doit être rempli')->add('designation', 'valid', [ 'rule' => 'check_string', @@ -178,37 +136,17 @@ class MaterielsTable extends AppTable ]) ->first(); if ($configuration->date_commande_facultative) { - $validator - ->allowEmpty('date_acquisition') - ->add('date_acquisition', 'custom', [ - 'rule' => $dateValide, - 'message' => 'La date n\'est pas valide' - ] - ); - } else { - $validator - ->notEmpty('date_acquisition', 'Ce champ doit être rempli') - ->add('date_acquisition', 'custom', [ - 'rule' => $dateValide, - 'message' => 'La date n\'est pas valide' - ] - ); - } - $validator - ->allowEmpty('date_reception') - ->add('date_reception', 'custom', [ + $validator->allowEmpty('date_acquisition')->add('date_acquisition', 'custom', [ 'rule' => $dateValide, 'message' => 'La date n\'est pas valide' ]); - /* - $validator - ->allowEmpty('date_fin_garantie') - ->add('date_fin_garantie', 'custom', [ + } else { + $validator->notEmpty('date_acquisition', 'Ce champ doit être rempli')->add('date_acquisition', 'custom', [ 'rule' => $dateValide, 'message' => 'La date n\'est pas valide' ]); - */ - // Attention, configuration désactivée, cela ne génère pas ne num de labo, voir dans config/edit.ctp + } + // Attention, configuration désactivée, cela ne génère pas ne num de labo, voir dans config/edit.ctp $validator->allowEmpty('fournisseur')->add('fournisseur', 'valid', [ 'rule' => 'check_string', 'message' => 'Ce champ contient des caractères interdits', @@ -298,10 +236,9 @@ class MaterielsTable extends AppTable $configuration = TableRegistry::get('Configurations')->find() ->where([ 'id =' => 1 - ])->first(); - + ]) + ->first(); $checkAtLeastOneChecked = function ($entity) { - //debug($entity); exit; return ($entity->materiel_administratif || $entity->materiel_technique); }; // return if price >= $configuration->prix_inventaire_administratif € then must be checked as "administratif" @@ -328,14 +265,6 @@ class MaterielsTable extends AppTable return ($entity->prix_ht !== null); return true; }; - - $check_date_reception_superieure_a_date_acquisition = function ($entity) { - if ($entity->date_acquisition && $entity->date_reception) - return ($entity->date_reception >= $entity->date_acquisition); - return true; - }; - - $rules->add($checkAtLeastOneChecked, [ 'errorField' => 'materiel_administratif', 'message' => 'Le matériel est obligatoirement inventoriable ou technique.' @@ -352,12 +281,6 @@ class MaterielsTable extends AppTable 'errorField' => 'prix_ht', 'message' => 'Le matériel ne peut pas être inventoriable et ne pas avoir de prix' ]); - $rules->add($check_date_reception_superieure_a_date_acquisition, [ - 'errorField' => 'date_reception', - 'message' => "La date de réception doit être ultérieure à la date d'acquisiiton" - ]); - - $rules->add($rules->isUnique([ 'numero_laboratoire' ])); @@ -447,9 +370,6 @@ class MaterielsTable extends AppTable if (empty($entity->get('date_reception'))) { $entity->set('date_reception', null); } - if (empty($entity->get('date_fin_garantie'))) { - $entity->set('date_fin_garantie', null); - } return true; } } diff --git a/src/Template/Documents/edit.ctp b/src/Template/Documents/edit.ctp index b56913b..76af4de 100644 --- a/src/Template/Documents/edit.ctp +++ b/src/Template/Documents/edit.ctp @@ -24,7 +24,8 @@ ]); } - echo $this->Form->input('nom'); + //On met le nom du doc en read only vu qu'il apparait dans le nom du fichier sur le serveur + echo $this->Form->input('nom', ['readonly' => true]); if (isset($photo)) { echo $this->Form->hidden('type_document_id', [ diff --git a/src/Template/Documents/index.ctp b/src/Template/Documents/index.ctp index 0f33c30..81b7419 100755 --- a/src/Template/Documents/index.ctp +++ b/src/Template/Documents/index.ctp @@ -43,7 +43,7 @@ foreach ($documents as $document) : ?> Html->link(__(''), ['action' => 'edit', $document->id], ['title' => 'Editer', 'style' => 'margin: 0 2px', 'escape' => false]) ?> - Form->postLink(__(''), ['action' => 'delete', $document->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $document->id)]) ?> + Form->postLink(__(''), ['action' => 'delete', $document->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer {0} ?', $document->nom)]) ?> Html->link($document->nom, ['action' => 'view', $document->id]) ?> diff --git a/src/Template/Element/menu.ctp b/src/Template/Element/menu.ctp index d825d73..18f841b 100755 --- a/src/Template/Element/menu.ctp +++ b/src/Template/Element/menu.ctp @@ -6,6 +6,8 @@
  • Html->link(' Nouveau matériel', ['controller' => 'Materiels','action' => 'add'], ['escape' => false]);?>
  • + +
  • Html->link(' Mes matériels', ['controller' => 'Materiels', 'action' => 'index', 'MY' => $username ], ['escape' => false]);?>
  • Html->link(__(' Rechercher un matériel'), ['controller' => 'materiels','action' => 'find'], ['escape' => false]);?>
  • diff --git a/src/Template/Element/menu_index.ctp b/src/Template/Element/menu_index.ctp index 77f249f..e3a08ec 100755 --- a/src/Template/Element/menu_index.ctp +++ b/src/Template/Element/menu_index.ctp @@ -50,6 +50,10 @@ if (in_array($singularHumanName, [ $bol = true; } +//Pour l'ajout de fournisseurs par tous les profils il faut que le bouton d'ajout apparaisse +if(in_array($singularHumanName, ['Fournisseur'])) + $bol = true; + if ($bol == true) { $t = strtolower($singularHumanName); diff --git a/src/Template/Element/menu_view.ctp b/src/Template/Element/menu_view.ctp index 3972808..1aa1d78 100755 --- a/src/Template/Element/menu_view.ctp +++ b/src/Template/Element/menu_view.ctp @@ -347,23 +347,55 @@ if ($singularHumanName == 'Matériel') { } if ($isAuthorized == true) { + $determinant = ''; $action = ''; - if (strstr($t, 'catégorie') || strstr($t, 'unité') || strstr($t, 'formule')) + if (strstr($t, 'catégorie') || strstr($t, 'unité') || strstr($t, 'formule')) { $action = ' Supprimer cette'; - elseif (strstr($t, 'utilisateur') || strstr($t, 'emprunt')) + $determinant = 'cette'; + } elseif (strstr($t, 'utilisateur') || strstr($t, 'emprunt')) { $action = ' Supprimer cet'; - else + $determinant = 'cet'; + } else { $action = ' Supprimer ce'; + $determinant = 'ce'; + } echo $this->Form->postLink('' . $action . ' ' . $t, [ 'action' => 'delete', $lien ], [ 'escape' => false, - 'confirm' => __('Êtes-vous sur de vouloir supprimer ' . $lien . ' ?') + 'confirm' => __('Êtes-vous sur de vouloir supprimer '.$determinant.' '. $t . ' ?') ]); } + + + + + ?> + +
  • + + Form->postLink('' . $action . ' ' . $t, [ + 'action' => 'add', + $lien + ], [ + 'escape' => false, + 'confirm' => __('Êtes-vous sur de vouloir quitter la page pour ajouter un utilisateur ?') + ]); + } + + + ?> +
  • \ No newline at end of file diff --git a/src/Template/Emprunts/index.ctp b/src/Template/Emprunts/index.ctp index 61fc239..09b85d9 100755 --- a/src/Template/Emprunts/index.ctp +++ b/src/Template/Emprunts/index.ctp @@ -24,7 +24,7 @@ nom_createur, $emprunt->nom_emprunteur])) || (in_array($role, ['Responsable', 'Administration', 'Administration Plus', 'Super Administrateur']))) { ?> Html->link(__(''), ['action' => 'edit', $emprunt->id], ['title' => 'Editer', 'style' => 'margin: 0 2px', 'escape' => false ]) ?> - Form->postLink(__(''), ['action' => 'delete', $emprunt->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $emprunt->id)]) ?> + Form->postLink(__(''), ['action' => 'delete', $emprunt->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer cet emprunt ?')]) ?> diff --git a/src/Template/Fournisseurs/index.ctp b/src/Template/Fournisseurs/index.ctp index d1cde57..723be7a 100644 --- a/src/Template/Fournisseurs/index.ctp +++ b/src/Template/Fournisseurs/index.ctp @@ -24,7 +24,7 @@ foreach ($fournisseurs as $fournisseur) : - Form->postLink(__(''), ['action' => 'delete', $fournisseur->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $fournisseur->id)]) ?> + Form->postLink(__(''), ['action' => 'delete', $fournisseur->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer {0} ?', $fournisseur->nom)]) ?> diff --git a/src/Template/Layout/Formules/add.ctp b/src/Template/Layout/Formules/add.ctp new file mode 100755 index 0000000..7b1b27e --- /dev/null +++ b/src/Template/Layout/Formules/add.ctp @@ -0,0 +1,96 @@ + +
    + Form->create($formule) ?> +
    +

    + Ajouter une formule +

    + + + Form->input('nommesure', [ + 'label' => 'Nom mesure', + 'required' => 'required' +]); + +echo $this->Form->input('symbole', [ + 'label' => 'Symbole' +]); + +echo $this->Form->input('unite', [ + 'label' => 'Unité', + 'required' => 'required' +]); + +echo $this->Form->input('nbVariable', [ + 'label' => 'Nombre de variable(5 max.)', + 'default' => 1, + 'empty' => 1, + 'required' => 'required' +]); +?> + + + +
    + Form->submit(__('Valider')) ?> + Form->end() ?> +
    + +
    + element('menu'); +echo $this->element('menu_form', [ + 'pluralHumanName' => 'Formules' +]); +?> +
    + + diff --git a/src/Template/Layout/Formules/edit.ctp b/src/Template/Layout/Formules/edit.ctp new file mode 100755 index 0000000..f72a8eb --- /dev/null +++ b/src/Template/Layout/Formules/edit.ctp @@ -0,0 +1,83 @@ + +
    + Form->create($formule) ?> +
    +

    + Ajouter une formule +

    + + + Form->input('nommesure', [ + 'label' => 'Nom mesure', + 'required' => 'required' +]); + +echo $this->Form->input('symbole', [ + 'label' => 'Symbole' +]); + +echo $this->Form->input('unite', [ + 'label' => 'Unité', + 'required' => 'required' +]); + +echo $this->Form->input('nbVariable', [ + 'label' => 'Nombre de variable(5 max.)', + 'default' => 1, + 'empty' => 1, + 'required' => 'required' +]); +?> + + + +
    + Form->submit(__('Valider')) ?> + Form->end() ?> +
    + +
    + element('menu'); +echo $this->element('menu_form', [ + 'pluralHumanName' => 'Formules' +]); +?> +
    + + diff --git a/src/Template/Layout/Formules/index.ctp b/src/Template/Layout/Formules/index.ctp new file mode 100755 index 0000000..f658311 --- /dev/null +++ b/src/Template/Layout/Formules/index.ctp @@ -0,0 +1,49 @@ + +
    + Liste des formules ('.$nbFormules.')'; ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Paginator->sort('id', 'N°') ?>Paginator->sort('nommesure', 'Nom mesure') ?>Paginator->sort('symbole', 'Symbole') ?>Paginator->sort('nbVariable', 'Nombre de variable') ?>Paginator->sort('formule', 'Formule') ?>
    + + Form->postLink(__(''), ['action' => 'delete', $formule->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $formule->id)]) ?> + + Html->link('Formule '.$this->Number->format($formule->id), ['action' => 'view', $formule->id])?>nommesure) ?>symbole) ?>nbVariable) ?>formule) ?>
    + + element('pagination'); ?> + +
    + +
    + element('menu') ?> + element('menu_index', [ + 'pluralHumanName' => 'Formules', + 'singularHumanName' => 'Formule' +])?> +
    \ No newline at end of file diff --git a/src/Template/Layout/Formules/view.ctp b/src/Template/Layout/Formules/view.ctp new file mode 100755 index 0000000..bff2d4a --- /dev/null +++ b/src/Template/Layout/Formules/view.ctp @@ -0,0 +1,71 @@ + +
    +

    Détail formule

    + + + + + + + + id)); + $displayElement(__('Nom mesure'), $formule->has('nommesure') ? h($formule->nommesure) : ''); + $displayElement(__('Symbole'), h($formule->symbole)); + $displayElement(__('Unite'), h($formule->unite)); + $displayElement(__('Nombre variable'), h($formule->nbVariable)); + $displayElement(__('Formule'), h($formule->formule)); + ?> + +
    + +

    + + Variable(s) lié(s) à la formule (variables) ?>) +

    +
    + + variables)) { ?> + + + + + + + + + + + + variables as $variable) : + + ?> + + + + + + + + + + +
    symbolegrandeurphysique ?>symboleunitemesure ?>nomgrandeurphysique ?>domainedef ?>derivepartielle ?>
    + +
    + + +
    + +
    + element('menu') ?> + element('menu_view', [ + 'pluralHumanName' => 'Formules', + 'singularHumanName' => 'Formule', + 'lien' => $formule->id +])?> +
    diff --git a/src/Template/Layout/default.ctp b/src/Template/Layout/default.ctp index c95522e..34668bb 100755 --- a/src/Template/Layout/default.ctp +++ b/src/Template/Layout/default.ctp @@ -119,7 +119,7 @@ $cakeDescription = 'Labinvent 2'; - VERSION 2.8.1.0 (02/02/2018)
    VERSION 2.8.0.7 (23/01/2018)
    Form->create($materiel)?>
    @@ -56,22 +62,24 @@ if ($IS_VALIDATED && $materiel->numero_serie) Html->link('Aller au formulaire d\'édition avancée', [ 'action' => 'administrer', $materiel->id ]); echo '

    '; - } + }*/ ?>
    Form->submit(__('Enregistrer'))?> - Html->link(__(' Annuler'), ['action' => 'index'], ['escape' => false,'onclick' => 'return true;','style' => 'margin-right: 10px'])?> -
    + Html->link(__(' Annuler'), ['action' => 'view', $materiel->id], ['escape' => false,'onclick' => 'return true;','style' => 'margin-right: 10px'])?> + Form->input('designation', [ @@ -183,7 +191,6 @@ if ($IS_VALIDATED && $materiel->numero_serie) echo $this->Form->input('date_acquisition', [ 'type' => 'text', 'label' => 'Date de la commande', - 'dateFormat' => 'dd-MM-yyyy', 'class' => 'datepicker', 'placeholder' => 'Cliquez pour sélectionner une date', 'disabled' => $isReadonlyField('date_acquisition', $myReadonlyFields) @@ -191,7 +198,6 @@ if ($IS_VALIDATED && $materiel->numero_serie) echo $this->Form->input('date_reception', [ 'type' => 'text', 'label' => 'Date de réception', - 'dateFormat' => 'dd-MM-yyyy', 'class' => 'datepicker', 'placeholder' => 'A éditer lors de la réception uniquement.', 'disabled' => $isReadonlyField('date_reception', $myReadonlyFields), @@ -261,10 +267,8 @@ if ($IS_VALIDATED && $materiel->numero_serie) 'default' => 1 ]); - $fieldType = $USER_IS_UTILISATEUR ? 'hidden' : 'input'; - echo $this->Form->$fieldType('nom_responsable', [ + echo $this->Form->input('nom_responsable', [ 'label' => 'Nom de l\'utilisateur', - 'disabled' => $isReadonlyField('nom_responsable', $myReadonlyFields), 'empty' => 'Choisir un utilisateur', 'default' => $username, 'options' => $utilisateurs @@ -330,8 +334,7 @@ if ($IS_VALIDATED && $materiel->numero_serie) * ])) { */ echo '
    Partie administrative'; - echo $this->Form->input('adminEdit', [ - 'type' => 'checkbox', + echo $this->Form->checkbox('adminEdit', [ 'label' => 'Editer la partie administrative', 'onchange' => 'changeAdminEdit();', 'default' => false @@ -348,6 +351,11 @@ if ($IS_VALIDATED && $materiel->numero_serie) 'label' => 'Code comptable', 'disabled' => true ]); + echo $this->Form->input('numero_laboratoire', [ + 'label' => 'Numéro de laboratoire', + 'id' => 'num_labo', + 'disabled' => true + ]); echo $this->Form->input('numero_inventaire_organisme', [ 'label' => 'N° inventaire organisme', 'disabled' => true @@ -358,9 +366,41 @@ if ($IS_VALIDATED && $materiel->numero_serie) ]); echo '
    '; } - echo $this->Form->hidden('nom_modificateur', [ - 'value' => $username - ]); + // if ($role == 'Super Administrateur') { +if ($USER_IS_SUPERADMIN) { + echo '
    Partie administrative avancée'; + /*echo $this->Form->checkbox('adminEditPlus', [ + 'label' => 'Editer la partie administrative avancée', + 'onchange' => 'changeAdminPlus();', + 'default' => false + ]);*/ + + echo $this->Form->input('nom_createur', [ + 'label' => 'Nom du créateur', + 'disabled' => true, + 'options' => $utilisateurs + ]); + + echo $this->Form->input('created', [ + 'label' => 'Date de création', + 'disabled' => true + ]); + echo $this->Form->input('nom_modificateur', [ + 'label' => 'Nom du modificateur', + 'default' => $username, + 'disabled' => true + ]); + echo $this->Form->input('modified', [ + 'label' => 'Date de modification', + 'disabled' => true + ]); + echo '
    '; + } +echo $this->Form->hidden('nom_modificateur', [ + 'value' => $username +]); + + ?>
    Form->submit(__('Enregistrer'))?> @@ -458,5 +498,71 @@ $(document).ready(function () { return false; }); }); + +/** + * Event Mail change + */ + $(document).ready(function () { + $("#nom-responsable").bind("change", function (event) { + var url = document.URL; + var reg=new RegExp("(materiels).*$","g"); + var emailUrl = url.replace(reg, "Users/getLdapEmail/"); + $.ajax({ + url: emailUrl + $("#nom-responsable").val() + }).done(function(data) { + $("#email-responsable").val(data) + }); + }); + }); + + + /** + * Event calcul date fin de garantie + */ + $(document).ready(function () { + $("#duree-garantie").bind("change", function (event) { + if($("#date-reception").val() != "" && $("#duree-garantie").val() != "") { + var url = document.URL; + var reg=new RegExp("(materiels).*$","g"); + var dateUrl = url.replace(reg, "Materiels/getDateGarantie/"); + $.ajax({ + url: dateUrl + $("#date-reception").val() + "/" + $("#duree-garantie").val() + "/" + $("#unite-duree-garantie").val() + }).done(function(data) { + $("#date-fin-garantie").val(data) + }); + } + }); + $("#unite-duree-garantie").bind("change", function (event) { + if($("#date-reception").val() != "" && $("#duree-garantie").val() != "") { + var url = document.URL; + var reg=new RegExp("(materiels).*$","g"); + var dateUrl = url.replace(reg, "Materiels/getDateGarantie/"); + $.ajax({ + url: dateUrl + $("#date-reception").val() + "/" + $("#duree-garantie").val() + "/" + $("#unite-duree-garantie").val() + }).done(function(data) { + $("#date-fin-garantie").val(data) + }); + } + }); +}); + + function changeAdminEdit() { + if (document.getElementById('eotp').disabled) { + document.getElementById('eotp').disabled=false; + document.getElementById('numero-commande').disabled=false; + document.getElementById('code-comptable').disabled=false; + document.getElementById('numero-inventaire-organisme').disabled=false; + document.getElementById('numero-inventaire-old').disabled=false; + document.getElementById('num_labo').disabled=false; + } + else { + document.getElementById('eotp').disabled=true; + document.getElementById('numero-commande').disabled=true; + document.getElementById('code-comptable').disabled=true; + document.getElementById('numero-inventaire-organisme').disabled=true; + document.getElementById('numero-inventaire-old').disabled=true; + document.getElementById('num_labo').disabled=true; + } + } diff --git a/src/Template/Materiels/index.ctp b/src/Template/Materiels/index.ctp index e31ca1a..c2fc538 100755 --- a/src/Template/Materiels/index.ctp +++ b/src/Template/Materiels/index.ctp @@ -195,8 +195,10 @@ if (in_array($materiel->status, [ 'Administration', 'Administration Plus', 'Super Administrateur' - ])) || ($role == 'Responsable' && ((isset($priviledgedUser->groupes_metier_id) && $priviledgedUser->groupes_metier_id != $idGmNa && $materiel->groupes_metier_id == $priviledgedUser->groupes_metier_id) || (isset($priviledgedUser->groupe_thematique_id) && $priviledgedUser->groupe_thematique_id != $idGtNa && $materiel->groupes_thematique_id == $priviledgedUser->groupe_thematique_id)))) { - ?> + ])) || ($role == 'Responsable' && (in_array($username, [ + $materiel ->nom_createur, + $materiel ->nom_responsable + ]))) ||($role == 'Responsable' && ((isset($priviledgedUser->groupes_metier_id) && $priviledgedUser->groupes_metier_id != $idGmNa && $materiel->groupes_metier_id == $priviledgedUser->groupes_metier_id) || (isset($priviledgedUser->groupe_thematique_id) && $priviledgedUser->groupe_thematique_id != $idGtNa && $materiel->groupes_thematique_id == $priviledgedUser->groupe_thematique_id)))) {?> Html->link(__(''), ['action' => 'edit', $materiel->id], ['title' => 'Editer', 'style' => 'margin: 0 2px', 'escape' => false ]) ?> @@ -255,7 +257,7 @@ if (in_array($materiel->status, [ 'title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, - 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $materiel->designation) + 'confirm' => __('Êtes-vous sur de vouloir supprimer {0} ?', $materiel->designation) ]); } } diff --git a/src/Template/Materiels/view.ctp b/src/Template/Materiels/view.ctp index b82a321..4191dbe 100755 --- a/src/Template/Materiels/view.ctp +++ b/src/Template/Materiels/view.ctp @@ -72,6 +72,11 @@ $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER = $USER_IS_UTILISATEUR && in_array($us $materiel->nom_responsable ]); +$USER_IS_RESPONSABLE_AND_CREATOR_OR_OWNER = $USER_IS_RESPONSABLE && in_array($username, [ + $materiel->nom_createur, + $materiel->nom_responsable +]); + $USER_IS_RESPONSABLE_AND_SAME_GROUP = $USER_IS_RESPONSABLE && ((isset($priviledgedUser->groupes_metier_id) && $priviledgedUser->groupes_metier_id != $idGmNa && $materiel->groupes_metier_id == $priviledgedUser->groupes_metier_id) || (isset($priviledgedUser->groupe_thematique_id) && $priviledgedUser->groupe_thematique_id != $idGtNa && $materiel->groupes_thematique_id == $priviledgedUser->groupe_thematique_id)); ?> @@ -103,7 +108,6 @@ $USER_IS_RESPONSABLE_AND_SAME_GROUP = $USER_IS_RESPONSABLE && ((isset($priviledg */ // if (h($materiel->status) == 'ARCHIVED') echo ' '; - if ($IS_ARCHIVED) echo ' '; $panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : ''; @@ -123,12 +127,29 @@ $panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : '';
    Html->image('photos/' . $imgMateriel, [ - 'alt' => 'Photo matériel', - 'style' => 'max-width: 300px; text-align: center;' - ]); - } + //maintenant que les dénominations des fichiers dl on changé on a besoin des + //informations de la photo pour retrouver son nom et l'afficher, l'id ne suffit plus + //on parcourt donc les documents liés à ce matériel + foreach ($materiel->documents as $documents) : + //et si le document est la photo liée, on l'affiche, pour cela + if($documents->photo) { + //on récupère le doc + $photo = $documents; + //on reconstitue le nom a partir des paramètres (idmat_nom_id.extension) + $nomPhoto = $photo->materiel_id . "_" . $photo->nom . "_" . $photo->id . "." .$photo->type_doc; + + //Et si la photo n'est pas vide on l'affiche + if(!empty($photo)) { + echo $this->Html->image('photos/'.$nomPhoto, [ + //si il y a une erreur sur le nom affiche le texte alternatif + 'alt' => 'Photo du matériel', + 'style' => 'max-width: 300px; text-align: center;' + ]); + } + } + endforeach ; + + // Url transformed in QrCode $this->request->session()->write("qrUrl", $this->request->env('SERVER_NAME') . $this->request->env('REQUEST_URI')); $this->requestAction('/QrCodes/creer/'); @@ -151,8 +172,7 @@ $panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : ''; // CREATED or VALIDATED // if ( in_array($materiel->status, ['CREATED','VALIDATED']) ) { if ($IS_CREATED || $IS_VALIDATED) { - if ($USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP ) - /* + if ($USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP || $USER_IS_RESPONSABLE_AND_CREATOR_OR_OWNER)/* //in_array($role, ['Administration','Administration Plus','Super Administrateur']) || ( @@ -229,7 +249,7 @@ $panne = h($materiel->hors_service) ? ' (HORS SERVICE)' : ''; } // BOUTON "Lier un Doc" - if ($USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP) { + if ($USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP || $USER_IS_RESPONSABLE_AND_CREATOR_OR_OWNER) { /* * if ( * in_array($role, ['Administration','Administration Plus','Super Administrateur']) @@ -517,8 +537,11 @@ else if (h($materiel->materiel_administratif) == 1) else if (h($materiel->materiel_technique) == 1) $type = 'Technique'; -echo '' . __('Description') . ' ' . nl2br($materiel->description) . ''; +//echo '' . __('Description') . ' ' . nl2br($materiel->description) . ''; // La variable-fonction $displayElement est définie dans le fichier src/Controller/AppController.php +//On va utiliser $displayElement pour l'affichage de tout les champs pour mettre une norme en place +$displayElement(__('Nom du materiel'),$materiel->designation); +$displayElement(__('Description'),$materiel->description); $displayElement(__('Materiel inventorié'), $type); $displayElement(__('Organisme'), $materiel->has('organisme') ? h($materiel->organisme->nom) : ''); $displayElement(__('Domaine'), $materiel->has('sur_category') ? h($materiel->sur_category->nom) : ''); @@ -618,15 +641,15 @@ if ($USER_IS_ADMIN_OR_MORE) { - - + + suivis as $suivis) :?> Html->link('Suivi ' . $suivis->id, ['controller' => 'suivis','action' => 'view',$suivis->id])?> find()->where(['id =' => h($suivis->type_suivi_id)])->first()['nom'];?> intitule)?> - conforme)?> - - date_prochain_controle) < 0) : ?> - date_prochain_controle)?> - date_prochain_controle) <= 15) : ?> - date_prochain_controle)?> - - date_prochain_controle)?> - + find()->where(['id =' => h($suivis->type_suivi_id)])->first()['nom'] == "Panne" ) {?> + date_controle)?> + date_prochain_controle)?> + + frequence)?> + type_frequence)?> + statut)?> + emprunts as $emprunt) : emprunts as $emprunt) : photo) { - echo $this->Html->link(__(''), '/webroot/img/photos/' . $documents->id . '.' . $documents->type_doc, [ + echo $this->Html->link(__(''), '/webroot/img/photos/' . $documents->materiel_id .'_' . $documents->nom.'_'. $documents->id . '.' . $documents->type_doc, [ 'title' => 'Télécharger', 'style' => 'margin:0', 'escape' => false ]); } else { - echo $this->Html->link(__(''), '/webroot/files/' . $documents->id . '.' . $documents->type_doc, [ + echo $this->Html->link(__(''), '/webroot/files/' . $documents->materiel_id .'_' . $documents->nom.'_'. $documents->id . '.' . $documents->type_doc, [ 'title' => 'Télécharger', 'style' => 'margin:0', 'escape' => false ]); } - if ($USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP) { + if ($USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP || $USER_IS_RESPONSABLE_AND_CREATOR_OR_OWNER) { /* * if ( * in_array($role, ['Administration','Administration Plus','Super Administrateur']) @@ -884,6 +906,16 @@ foreach ($materiel->emprunts as $emprunt) : 'style' => 'margin:0', 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $documents->id) ]); + //rajout d'un lien pour envoyer des mails avec les documents en pj + echo $this->Form->postLink(__(''), [ + 'controller' => 'Documents', + 'action' => __('mailDevis' ,$documents->id), + $documents->id + ], [ + 'escape' => false, + 'style' => 'margin:0', + 'confirm' => __(' Voulez vous envoyer le document par mail ? ') + ]); } ?> diff --git a/src/Template/Pages/tools_menu_sm.ctp b/src/Template/Pages/tools_menu_sm.ctp index 88075be..b6f87fe 100755 --- a/src/Template/Pages/tools_menu_sm.ctp +++ b/src/Template/Pages/tools_menu_sm.ctp @@ -14,19 +14,26 @@ echo $this->Html->link('Voir les liste des Catégories', [ ]); echo ''; -echo ''; -echo $this->Html->link('Liste des sites', [ - 'controller' => 'sites', - 'sort' => 'nom' -]); -echo ''; +//On restreint l'affichage sur les champs qu'un utilisateur n'a besoin de modifier +if (! $USER_IS_UTILISATEUR) { + + echo ''; + echo $this->Html->link('Liste des sites', [ + 'controller' => 'sites', + 'sort' => 'nom' + ]); + echo ''; + + echo ''; + echo $this->Html->link('Liste des organismes', [ + 'controller' => 'organismes', + 'sort' => 'nom' + ]); + echo ''; +} + + -echo ''; -echo $this->Html->link('Liste des organismes', [ - 'controller' => 'organismes', - 'sort' => 'nom' -]); -echo ''; echo ''; echo $this->Html->link('Liste des types de suivis', [ @@ -35,31 +42,37 @@ echo $this->Html->link('Liste des types de suivis', [ ]); echo ''; -$names = explode(" ", $configuration->nom_groupe_thematique); -if (isset($names[1])) { - $nom = $names[0] . 's ' . $names[1] . 's'; -} else { - $nom = $names[0] . 's'; -} -echo ''; -echo $this->Html->link('Liste des ' . $nom, [ - 'controller' => 'groupes_thematiques', - 'sort' => 'nom' -]); -echo ''; -$names = explode(" ", $configuration->nom_groupe_metier); -if (isset($names[1])) { - $nom = $names[0] . 's ' . $names[1] . 's'; -} else { - $nom = $names[0] . 's'; +if (! $USER_IS_UTILISATEUR) { + + + $names = explode(" ", $configuration->nom_groupe_thematique); + if (isset($names[1])) { + $nom = $names[0] . 's ' . $names[1] . 's'; + } else { + $nom = $names[0] . 's'; + } + echo ''; + echo $this->Html->link('Liste des ' . $nom, [ + 'controller' => 'groupes_thematiques', + 'sort' => 'nom' + ]); + echo ''; + + $names = explode(" ", $configuration->nom_groupe_metier); + if (isset($names[1])) { + $nom = $names[0] . 's ' . $names[1] . 's'; + } else { + $nom = $names[0] . 's'; + } + echo ''; + echo $this->Html->link('Liste des ' . $nom, [ + 'controller' => 'groupes_metiers', + 'sort' => 'nom' + ]); + echo ''; + } -echo ''; -echo $this->Html->link('Liste des ' . $nom, [ - 'controller' => 'groupes_metiers', - 'sort' => 'nom' -]); -echo ''; echo ''; echo $this->Html->link('Liste des types de documents', [ @@ -68,12 +81,23 @@ echo $this->Html->link('Liste des types de documents', [ ]); echo ''; -echo ''; -echo $this->Html->link('Liste des unités', [ - 'controller' => 'unites', - 'sort' => 'nom' -]); -echo ''; +if (! $USER_IS_UTILISATEUR) { + echo ''; + echo $this->Html->link('Liste des unités', [ + 'controller' => 'unites', + 'sort' => 'nom' + ]); + echo ''; + + echo ''; + echo $this->Html->link('Liste des formules', [ + 'controller' => 'formules', + 'sort' => 'nom' + ]); + echo ''; + +} + echo ''; echo $this->Html->link('Liste des fournisseurs', [ @@ -82,12 +106,7 @@ echo $this->Html->link('Liste des fournisseurs', [ ]); echo ''; -echo ''; -echo $this->Html->link('Liste des formules', [ - 'controller' => 'formules', - 'sort' => 'nom' -]); -echo ''; + ?> diff --git a/src/Template/Suivis/add.ctp b/src/Template/Suivis/add.ctp index d7a6fb3..ca5a424 100755 --- a/src/Template/Suivis/add.ctp +++ b/src/Template/Suivis/add.ctp @@ -28,12 +28,32 @@ echo $this->Form->input('type_suivi_id', [ 'label' => 'Type d\'intervention', 'options' => $typeSuivis, - 'default' => 3 + 'default' => 3, + 'empty' => "Choisir le type de suivi" ]); echo ''; + echo ''; + echo $this->Form->input('organisme', [ 'label' => 'Prestataire' ]); @@ -111,15 +131,22 @@ echo $this->element('menu_form', [ document.getElementById('typedemesure').innerHTML = ""; $('#listes').hide(); } - if( domaineId == "Réparation"){ + //gère l'affichage dynamique après choix du type de suivi + if( domaineId == "Panne"){ document.getElementById('frequence').innerHTML = ""; $("#frequence").hide(); + $("#dates").show(); + } else { + $("#dates").hide(); $("#frequence").show(); document.getElementById('frequence').innerHTML = "
    "; } }); + + + /** * Event calcul date prochain controle */ diff --git a/src/Template/Suivis/edit.ctp b/src/Template/Suivis/edit.ctp index ecd8aca..846a6c7 100755 --- a/src/Template/Suivis/edit.ctp +++ b/src/Template/Suivis/edit.ctp @@ -22,33 +22,58 @@ 'options' => $typeSuivis, 'disabled' => TRUE ]); - echo ''; + + //Affiche les bonnes informations en fonction du type de suivi + //Améliorable avec une requete pour fonctionner avec el nom de suivi et pas l'id + //Améliorable avec un switch + + if ($suivi->type_suivi_id == 2 ) { + echo $this->Form->input('date_controle', [ + 'type' => 'text', + 'id' => 'date_deb', + 'label' => 'Date de la prise en charge', + 'class' => 'datepicker', + 'placeholder' => 'Cliquez pour sélectionner une date', + 'disabled' => true + ]); + echo $this->Form->input('date_prochain_controle', [ + 'type' => 'text', + 'id' => 'date_fin', + 'label' => 'Date estimee de fin', + 'class' => 'datepicker', + 'placeholder' => 'Cliquez pour sélectionner une date' + ]); + + }else{ + echo '
    '; + echo $this->Form->input('frequence', [ + 'type' => 'text', + 'id' => 'SuiviFrequence', + 'label' => 'Fréquence', + 'disabled' => true, + 'templates' => [ + 'inputContainer' => '
    {{content}}
    ' + ], + 'placeholder' => '' + ]); + echo '
    '; + echo $this->Form->input('type_frequence', [ + 'label' => false, + 'disabled' => true, + 'templates' => [ + 'inputContainer' => '
    {{content}}
    ' + ], + 'options' => [ + '/ Jours' => '/ Jours', + '/ Semaines' => '/ Semaines', + '/ Mois' => '/ Mois', + '/ Ans' => '/ Ans' + ], + 'default' => '/ Mois' + ]); + echo '
    '; + } + echo $this->Form->input('statut', [ 'options' => [ 'En cours' => 'En cours', @@ -187,6 +212,25 @@ $(document).ready(function () { }); +/* + * Vérification date début > date fin dans le cas d'une panne + */ + + + $(document).ready(function () { +d1 = toDate($("#date_deb")[0].value); /* Date de la prise en charge de la panne */ +d2 = toDate($("#date_fin")[0].value); /* Date estimee de fin de la panne */ + +if($("#date_fin")[0].value != undefined){ + if(d1 > d2) { + alert("Les dates ne correspondent pas, la date de début de prise en charge doit être antérieure à la date de fin."); + event.preventDefault(); + } +} + + }); + + /** * Event calcul date prochain controle */ diff --git a/src/Template/Suivis/index.ctp b/src/Template/Suivis/index.ctp index 2460f04..88de8a9 100755 --- a/src/Template/Suivis/index.ctp +++ b/src/Template/Suivis/index.ctp @@ -9,8 +9,8 @@ Paginator->sort('materiel_id', 'Matériel') ?> Paginator->sort('numero_laboratoire', 'N° interne (labo)') ?> Paginator->sort('intitule', "Intitulé") ?> - Paginator->sort('date_controle', 'Date intervention') ?> - Paginator->sort('date_prochain_controle', 'Date prochaine intervention') ?> + Paginator->sort('date_controle', 'Date debut / Frequence') ?> + Paginator->sort('date_prochain_controle', 'Date fin / Repetition') ?> Paginator->sort('type_suivi_id', "Type d'intervention") ?> Paginator->sort('statut', "Statut") ?> @@ -24,29 +24,32 @@ if (($role == 'Utilisateur' && in_array($username, [ $suivi->nom_createur - ])) || (in_array($role, [ - 'Administration', - 'Administration Plus', - 'Super Administrateur' + ])) || ($role == 'Responsable' && in_array($username, [ + $suivi->nom_createur + ])) + || (in_array($role, [ + 'Administration', + 'Administration Plus', + 'Super Administrateur' ])) || ($role == 'Responsable' && ((isset($priviledgedUser->groupes_metier_id) && $priviledgedUser->groupes_metier_id != $idGmNa && $suivi->groupes_metier_id == $priviledgedUser->groupes_metier_id) || (isset($priviledgedUser->groupe_thematique_id) && $priviledgedUser->groupe_thematique_id != $idGtNa && $suivi->groupes_thematique_id == $priviledgedUser->groupe_thematique_id)))) { ?> Html->link(__(''), ['action' => 'edit', $suivi->id], ['title' => 'Editer', 'style' => 'margin: 0 2px', 'escape' => false ]) ?> - Form->postLink(__(''), ['action' => 'delete', $suivi->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $suivi->id)]) ?> + Form->postLink(__(''), ['action' => 'delete', $suivi->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer ce suivi ?')]) ?> Html->link('Suivi '.$this->Number->format($suivi->id), ['action' => 'view', $suivi->id])?> has('materiel') ? $this->Html->link($suivi->materiel->designation, ['controller' => 'Materiels', 'action' => 'view', $suivi->materiel->id]) : '' ?> has('materiel') ? h($suivi->materiel->numero_laboratoire) : '' ?> intitule) ?> - date_controle) ?> - - date_prochain_controle) < 0) : ?> - date_prochain_controle)?> - date_prochain_controle) <= 15) : ?> - date_prochain_controle)?> - - date_prochain_controle)?> - + + + type_suivi_id == 2 ) {?> + date_controle)?> + date_prochain_controle)?> + + frequence)?> + type_frequence)?> + has('type_suivi') ? h($suivi->type_suivi->nom) : '' ?> statut) ?> diff --git a/src/Template/Suivis/view.ctp b/src/Template/Suivis/view.ctp index a782a81..a1a26fb 100755 --- a/src/Template/Suivis/view.ctp +++ b/src/Template/Suivis/view.ctp @@ -10,7 +10,9 @@ nom_createur - ])) || (in_array($role, [ + ])) || ($role == 'Responsable' && in_array($username, [ + $suivi->nom_createur])) + || (in_array($role, [ 'Administration', 'Administration Plus', 'Super Administrateur' @@ -64,12 +66,19 @@ ]) : ''); $displayElement(__('Numéro interne (labo)'), $suivi->has('materiel') ? h($suivi->materiel->numero_laboratoire) : ''); $displayElement(__('Statut'), h($suivi->statut)); - $displayElement(__('Date Derniere Intervention'), h($suivi->date_controle)); - $displayElement(__('Date Prochaine Intervention'), h($suivi->date_prochain_controle), $style); + $displayElement(__('Prestataire'), h($suivi->organisme)); $displayElement(__('Type d\'intervention'), $suivi->has('type_suivi') ? h($suivi->type_suivi->nom) : ''); - $displayElement(__('Prestataire'), h($suivi->organisme)); - $displayElement(__('Fréquence'), h($suivi->frequence) . ' ' . h($suivi->type_frequence)); + if ($suivi->type_suivi_id == "1") { + $displayElement(__('Date Derniere Intervention'), h($suivi->date_controle)); + $displayElement(__('Date Prochaine Intervention'), h($suivi->date_prochain_controle), $style); + $displayElement(__('Fréquence'), h($suivi->frequence) . ' ' . h($suivi->type_frequence)); + + }else { + $displayElement(__('Date Debut Prise en Charge'), h($suivi->date_controle)); + $displayElement(__('Date Estimee de Fin de Panne'), h($suivi->date_prochain_controle), $style); + } + $displayElement(__($configuration->nom_groupe_thematique), $suivi->has('groupes_thematique') ? $this->Html->link($suivi->groupes_thematique->nom, [ 'controller' => 'GroupesThematiques', @@ -151,18 +160,21 @@ if ($suivi->type_suivi->nom == "Vérification métrologique") { documents as $documents): ?> - Html->link(__(''), '/webroot/files/'.$documents->id.'.'.$documents->type_doc, ['title' => 'Télécharger', 'style' => 'margin:0', 'escape' => false ]) ?> + Html->link(__(''),'/webroot/files/'.$documents->suivi_id.'_'.$documents->nom.'_'.$documents->id.'.'.$documents->type_doc, ['title' => 'Télécharger', 'style' => 'margin:0', 'escape' => false ]) ?> nom_createur - ])) || (in_array($role, [ + ])) || ($role == 'Responsable' && in_array($username, [ + $suivi->nom_createur])) + || (in_array($role, [ 'Administration', 'Administration Plus', 'Super Administrateur' ])) || ($role == 'Responsable' && ((isset($priviledgedUser->groupes_metier_id) && $priviledgedUser->groupes_metier_id != $idGmNa && $suivi->groupes_metier_id == $priviledgedUser->groupes_metier_id) || (isset($priviledgedUser->groupe_thematique_id) && $priviledgedUser->groupe_thematique_id != $idGtNa && $suivi->groupes_thematique_id == $priviledgedUser->groupe_thematique_id)))) { ?> Html->link(__(''), ['controller' => 'Documents', 'action' => 'edit', $documents->id], ['escape' => false, 'style' => 'margin:0'])?> - Form->postLink(__(''), ['controller' => 'Documents', 'action' => 'delete', $documents->id], ['escape' => false, 'style' => 'margin:0', 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $documents->id)]) ?> + Form->postLink(__(''), ['controller' => 'Documents', 'action' => 'delete', $documents->id], ['escape' => false, 'style' => 'margin:0', 'confirm' => __('Êtes-vous sur de vouloir supprimer le document nommé {0}?', $documents->nom)]) ?> + Form->postLink(__(''), ['controller' => 'Documents','action' => __('mailDevis' ,$documents->id),$documents->id], ['escape' => false,'style' => 'margin:0','confirm' => __(' Voulez vous envoyer le document par mail ? ')])?> diff --git a/src/Template/Users/add.ctp b/src/Template/Users/add.ctp index 561bb2c..593ab42 100755 --- a/src/Template/Users/add.ctp +++ b/src/Template/Users/add.ctp @@ -48,6 +48,7 @@ echo $this->Form->input('role', [ 'label' => 'Rôle', + 'empty' => 'N/A', 'options' => [ 'Super Administrateur' => 'Super Administrateur', 'Administration Plus' => 'Administration Plus', diff --git a/src/Template/Users/index.ctp b/src/Template/Users/index.ctp index 5642a28..08ca19f 100755 --- a/src/Template/Users/index.ctp +++ b/src/Template/Users/index.ctp @@ -19,7 +19,7 @@ Html->link(__(''), ['action' => 'edit', $user->id], ['title' => 'Editer', 'style' => 'margin: 0 2px', 'escape' => false ]) ?> - Form->postLink(__(''), ['action' => 'delete', $user->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $user->id)]) ?> + Form->postLink(__(''), ['action' => 'delete', $user->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer l\'utilisateur {0} ?', $user->nom)]) ?> Html->link($user->nom, ['action' => 'view', $user->id]) ?> diff --git a/src/Template/Users/index_recap.ctp b/src/Template/Users/index_recap.ctp index 93345c7..73860e0 100644 --- a/src/Template/Users/index_recap.ctp +++ b/src/Template/Users/index_recap.ctp @@ -17,7 +17,7 @@ Html->link(__(''), ['action' => 'edit', $user->id], ['title' => 'Editer', 'style' => 'margin: 0 2px', 'escape' => false ]) ?> - Form->postLink(__(''), ['action' => 'delete', $user->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $user->id)]) ?> + Form->postLink(__(''), ['action' => 'delete', $user->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer l\'utilisateur {0} ?', $user->nom)]) ?> has('sur_categorie_id') ? h($user->sur_category->nom) : '' ?> -- libgit2 0.21.2