*/ $displaySearchField = function($params, $searchfor, $html, $form) { /*
echo $html->link('Chercher', [ 'action' => 'index', '?' => $params ], [ 'title' => 'Tous', 'style' => 'margin-right: 5px', 'escape' => false ]); echo "
"; */ //echo $this->Form->create('Materiel', ['url' => '/materiels/find']); /* echo $this->Form->create('Materiel', ['action' => 'index', '?'=>$params]); echo ''; echo $this->Form->button('Chercher', [ 'class'=>'btn btn-outline-success', 'type'=>'submit', 'name' => 'MaterielSAll', 'id' => 'MaterielSAll', 'style' => 'margin: 0px;' ]); echo $this->Form->end(); */ // Bien mais insuffisant car les autres paramètres (page, age, domain, sont perdus) echo $this->Form->create('Materiel', [ // OK mais renvoie sur la vue materiesl/find/ alors qu'on veut rester sur la liste des materiels //'url' => '/materiels/find' //'url' => '/materiels/index?searchfor='.$this->request->getQuery('searchfor'), 'type' => 'get', //'valueSources' => 'query' 'url' => [ 'action' => "index", //'?' => $params ] ]); //echo ''; //echo $this->Form->control('s_all_2', [ echo $this->Form->control('searchfor', [ 'id' => 'MaterielSAll', 'class' => 'search-input', 'label' => 'Chercher', //'type' => 'text', 'placeholder' => "Entrez un ou plusieurs mots séparés par un espace", 'default' => $searchfor, ]); // (EP 202007) Ajouter un champ caché pour chaque paramètre passé dans l'url // afin de ne pas les perdre... $parameters = ['aff', 'age', 'domain', 'status']; foreach ($parameters as $param) if (isset($params[$param])) echo $this->Form->hidden($param, [ 'value' => $params[$param] ]); /* $param = 'age'; echo $this->Form->hidden($param, [ 'value' => isset($params[$param]) ? $params[$param] : null ]); $param = 'domain'; echo $this->Form->hidden($param, [ 'value' => isset($params[$param]) ? $params[$param] : null ]); $param = 'status'; echo $this->Form->hidden($param, [ 'value' => isset($params[$param]) ? $params[$param] : null ]); */ /* echo $this->Form->submit('Chercher', [ 'name' => 'MaterielSAll', 'id' => 'MaterielSAll', 'style' => 'margin: 0px;' ]); */ echo $this->Form->end(); }; $displayStatusButtons = function($SELECTED_STATUS, $params, $nbMateriels, $html) { ?>
'; echo "Afficher les matériels : "; echo '
'; echo '
'; $b_all = $b_cre = $b_val = $b_toarc = $b_arc = ''; $SELECTED = ''; //if (isset($SELECTED_STATUS)) { if ($SELECTED_STATUS) { if ($SELECTED_STATUS == 'CREATED') $b_cre = $SELECTED; else if ($SELECTED_STATUS == 'VALIDATED') $b_val = $SELECTED; else if ($SELECTED_STATUS == 'TOBEARCHIVED') $b_toarc = $SELECTED; else if ($SELECTED_STATUS == 'ARCHIVED') $b_arc = $SELECTED; } else $b_all = $SELECTED; //debug($params); /* * Affichage des boutons de filtrage par statut (en haut de la page) */ $statuses = [ 'TOUS' => [$b_all, 'TOUS', 'Tous les matériels', 5], 'CREATED' => [$b_cre, 'A valider', 'Seulement les matériels créés', 5], 'VALIDATED' => [$b_val, 'Validés', "Seulement les matériels validés", 5], 'TOBEARCHIVED' => [$b_toarc, 'A sortir', "Seulement les matériels à archiver", 5], 'ARCHIVED' => [$b_arc, 'Archivés', "Seulement les matériels sortis de l'inventaire", 0], ]; // https://book.cakephp.org/3/en/views/helpers/html.html#creating-links foreach ($statuses as $status=>$status_params) { $i=-1; if ($status=='TOUS') $status=null; echo $html->link($status_params[++$i].' '.$status_params[++$i], [ //'action' => 'index', //'CREATED', //'?' => ['height' => 400, 'width' => 500] //'?' => $params + ['status'=>'CREATED'] '?' => array_merge($params, ['status'=>$status]) //'?' => null //[$args], //"http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] ], [ 'title' => $status_params[++$i], //'style' => 'margin-right: 5px', 'style' => 'margin-right: '.$status_params[++$i].'px', 'escape' => false ]); } /* //echo $this->Html->link($b_all . ' Tous', [ echo $html->link($b_all . ' TOUS', [ //'action' => 'index', //'?' => $params '?' => array_merge($params, ['status'=>null]) ], [ 'title' => 'Tous', 'style' => 'margin-right: 5px', 'escape' => false ]); $status = 'CREATED'; echo $html->link($b_cre . ' A valider', [ //'action' => 'index', //'CREATED', // https://book.cakephp.org/3/en/views/helpers/html.html#creating-links //'?' => ['height' => 400, 'width' => 500] //'?' => $params + ['status'=>'CREATED'] '?' => array_merge($params, ['status'=>$status]) //'?' => null //[$args], //"http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] ], [ 'title' => 'Liste des matériels créés', 'style' => 'margin-right: 5px', 'escape' => false ]); $status = 'VALIDATED'; echo $html->link($b_val . ' Validés', [ //'action' => 'index', //'VALIDATED', //'?' => $params '?' => array_merge($params, ['status'=>$status]) ], [ 'title' => "Liste des materiels qu'on peut archiver", 'style' => 'margin-right: 5px', 'escape' => false ]); $status = 'TOBEARCHIVED'; echo $html->link($b_toarc . ' A sortir', [ //'action' => 'index', //'TOBEARCHIVED', //'?' => $params '?' => array_merge($params, ['status'=>$status]) ], [ 'title' => "A sortir de l'inventaire", 'style' => 'margin-right: 5px', 'escape' => false ]); $status = 'ARCHIVED'; echo $html->link($b_arc . ' Archivés', [ //'action' => 'index', //'ARCHIVED', //'?' => $params '?' => array_merge($params, ['status'=>$status]) ], [ 'title' => "Sortis de l'inventaire", 'style' => 'margin-right: 0px', 'escape' => false ]); */ echo '

'; // ACTIONS : buttons "Tout selectionner", "Tout decocher" // - show only with "A valider" and "A sortir" if ($SELECTED_STATUS && $nbMateriels>0) { echo $html->link(' Tout cocher', '#all', [ 'onclick' => 'selectAll()', 'title' => 'Sélectionner tout les matériels', 'style' => ': 400px; margin-right: 50px', 'escape' => false ]); echo $html->link(' Tout décocher', '#none', [ 'onclick' => 'selectNone()', 'title' => 'Sélectionner aucun matériel', 'style' => 'margin-right: 50px', 'escape' => false ]); } echo "
"; }; // displayStatusButtons() $displaySelectors = function($form, $request, $displayNbLinesSelector, $displayAgeSelector, $displayDomaineSelector, $domain_options) { //echo '
'; echo '
'; echo ''; echo ''; echo ''; echo ''; echo '
'; $displayNbLinesSelector($form, $request); echo ''; $displayAgeSelector($form, $request); echo ''; $displayDomaineSelector($form, $request, $domain_options); echo '
'; echo '
'; }; $displayNbLinesSelector = function($form, $request) { //echo '
'; //echo $this->Form->create('materiels', [ // echo $this->Form->create('materiels', ['url' => '/materiels/execActions?page=index']); //echo $this->Form->control('aff_par_defaut', [ echo $form->control('aff_par_defaut', [ 'label' => 'Nombre lignes', 'onchange' => "updateUrlWithSelectedValue('aff-par-defaut', 'aff')", 'options' => [ '20' => 20, '30' => 30, '50' => 50, '100' => 100, '150' => 150, '200' => 200 ] ]); //echo '
'; }; // displayNbLinesSelector() $displayAgeSelector = function($form, $request) { //echo '
'; echo $form->control('age_selector', [ 'label' => 'Age', 'onchange' => "updateUrlWithSelectedValue('age-selector', 'age')", 'options' => [ '0' => 'Tous', '5' => 'Récents (5 ans max)', '10' => '5-10 ans', '15' => '10-15 ans', '20' => '15-20 ans', //'20plus' => '+ 20 ans', '21' => '+ 20 ans', //'unknown' => 'inconnu', '-1' => 'inconnu', ], // Inutile car géré via javascript //'default' => '5', ]); //echo '
'; }; // displayNbLinesSelector() $displayDomaineSelector = function($form, $request, $domain_options) { //echo '
'; echo $form->control('domain_selector', [ 'label' => 'Domaine', 'onchange' => "updateUrlWithSelectedValue('domain-selector', 'domain')", 'options' => $domain_options, // Inutile car géré via javascript 'default' => 0, ]); //echo '
'; }; // displayNbLinesSelector() $displayActionButtonsForSelectedOrAllElements = function($form, $SELECTED_STATUS, $USER_IS_RESPONSABLE, $USER_IS_ADMIN_OR_MORE, $USER_IS_SUPERADMIN) { //if (isset($SELECTED_STATUS)) { if ($SELECTED_STATUS) { switch ($SELECTED_STATUS) { case 'CREATED': $action = 'Valider les'; break; case 'VALIDATED': $action = "Demander l'archivage des"; break; case 'TOBEARCHIVED': $action = "Sortir les"; break; } if ($SELECTED_STATUS != 'ARCHIVED') { //if (! ($role == 'Super Administrateur' && $SELECTED_STATUS == 'TOBEARCHIVED')) { if (! ($USER_IS_SUPERADMIN && $SELECTED_STATUS=='TOBEARCHIVED') ) { //echo $this->Form->submit($action . ' matériels cochés', [ // 'name' => 'updateSelectedStatus', // 'id' => 'updateSelectedStatus', // 'style' => 'margin: 0px' //]); //echo $this->Form->button($action . ' matériels cochés', [ 'class'=>'btn btn-outline-success', 'type'=>'submit', 'name' => 'updateSelectedStatus', 'id' => 'updateSelectedStatus', 'style' => 'margin: 0px']); echo $form->button($action . ' matériels cochés', [ 'class'=>'btn btn-outline-success', 'type'=>'submit', 'name' => 'updateSelectedStatus', 'id' => 'updateSelectedStatus', 'style' => 'margin: 0px']); echo "

"; } } //echo $this->Form->submit('Exporter la liste des matériels cochés', [ // 'name' => 'export', // 'id' => 'export', // 'style' => 'margin: 0px;' //]); echo $form->button('Exporter la liste des matériels cochés', ['class'=>'btn btn-outline-success', 'type'=>'submit', 'name' => 'export', 'id' => 'export', 'style' => 'margin: 0px;' ]); echo "

"; } if ($USER_IS_ADMIN_OR_MORE || $USER_IS_RESPONSABLE) //echo $this->Form->submit('Exporter la liste complete', [ // 'name' => 'exportAll', // 'id' => 'exportAll', // 'style' => 'margin: 0px;' //]); echo $form->button('Exporter la liste complete', ['class'=>'btn btn-outline-success', 'type'=>'submit', 'name' => 'exportAll', 'id' => 'exportAll', 'style' => 'margin: 0px;']); }; // $displayActionButtonsForSelectedOrAllElements() /* * Couleurs en fonction du statut du matos * */ $displayColorLegend = function() { // CREATED => bleu // VALIDATED => vert // TBA => orange // ARCHIVED => rouge //echo "

Couleur :

bleu=à valider
; vert=validé ; orange=à sortir ; rouge=archivé (couleur date rouge = fin garantie)

"; echo "

Couleur : bleu=à valider ; vert=validé ; orange=à sortir ; rouge=archivé ; couleur date rouge = fin garantie

"; }; $displayActionButtonsForMateriel = function($materiel, $username, $USER_IS_RESPONSABLE, $USER_IS_ADMIN_OR_MORE, $USER_IS_SUPERADMIN, $controller, $html) { // TODO: Dans l'idéal, ces variables doivent etre définies par le controleur et passées à la vue // (sous forme d'un tableau contenant ces droits pour CHAQUE materiel) // Car la vue doit être la moins "intelligente" possible, la plus simple possible $IS_CREATED = ($materiel->status == 'CREATED'); $IS_VALIDATED = ($materiel->status == 'VALIDATED'); $IS_TOBEARCHIVED = ($materiel->status == 'TOBEARCHIVED'); $IS_ARCHIVED = ($materiel->status == 'ARCHIVED'); /* * Couleurs en fonction du statut du matos * */ // CREATED => bleu if ($IS_CREATED) $color = 'blue'; // VALIDATED => vert if ($IS_VALIDATED) $color = 'green'; // TBA => orange if ($IS_TOBEARCHIVED) $color = 'orange'; // ARCHIVED => rouge if ($IS_ARCHIVED) $color = 'red'; $color = "style='color: $color'"; $USER_IS_CREATOR_OR_OWNER = in_array($username, [$materiel->nom_createur, $materiel->nom_responsable]); $USER_IS_SAME_GROUP_AS_MATERIEL = ( ( isset($priviledgedUser->groupes_metier_id) && $priviledgedUser->groupes_metier_id!=$idGmNa && $materiel->groupes_metier_id==$priviledgedUser->groupes_metier_id ) || ( isset($priviledgedUser->groupes_thematique_id) && $priviledgedUser->groupes_thematique_id!=$idGtNa && $materiel->groupes_thematique_id==$priviledgedUser->groupes_thematique_id ) ); $USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL = $USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL; $CONTEXT1 = $USER_IS_ADMIN_OR_MORE || $USER_IS_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL; // Détermination des autorisations pour tous les boutons "éditer", "supprimer", "valider", ... $id = $materiel->id; $CAN_EDIT = $controller->isAuthorizedAction('edit', $id); //$CAN_EDIT = $IS_CREATED && ($USER_IS_ADMIN_OR_MORE || $USER_IS_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL); //$CAN_EDIT = $IS_CREATED && ($USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL || $USER_IS_RESPONSABLE_AND_CREATOR_OR_OWNER); $CAN_DELETE = $controller->isAuthorizedAction('delete', $id); //$CAN_DELETE = $CAN_EDIT; /* $CAN_VALIDATE_OR_INVALIDATE = $USER_IS_ADMIN_OR_MORE || ( ($materiel->materiel_administratif == 0) && $USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL ); $CAN_VALIDATE = $IS_CREATED && $CAN_VALIDATE_OR_INVALIDATE; $CAN_INVALIDATE = !$IS_CREATED && $CAN_VALIDATE_OR_INVALIDATE; $CAN_TBA = $IS_VALIDATED && ($USER_IS_ADMIN_OR_MORE || $USER_IS_CREATOR_OR_OWNER || ($USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL)); $CAN_ARCHIVE = $IS_TOBEARCHIVED && $CAN_VALIDATE_OR_INVALIDATE; */ $CAN_INVALIDATE = $controller->isAuthorizedAction('statusCreated', $id); $CAN_VALIDATE = $controller->isAuthorizedAction('statusValidated', $id); $CAN_TBA = $controller->isAuthorizedAction('statusTobearchived', $id); $CAN_ARCHIVE = $controller->isAuthorizedAction('statusArchived', $id); echo ''; // 1) EDIT icon /* if ( in_array($materiel->status, [ 'CREATED', // (EP 17/5/19) ben non, on peut pas si c'est validé !!! //'VALIDATED' ]) && ( $USER_IS_ADMIN_OR_MORE || $USER_IS_CREATOR_OR_OWNER || ($USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL) ) ) */ if ($CAN_EDIT) echo $html->link(__(''), ['action' => 'edit', $materiel->id], ['title' => 'Editer', 'style' => 'margin: 0 2px', 'escape' => false ]); // 2) VALIDER/TBA/ARCHIVER icon /* if ( $USER_IS_ADMIN || ($USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL) ) { */ //if ($materiel->status=='CREATED' && !$USER_IS_RESPONSABLE) { if ($CAN_VALIDATE) echo $html->link('', [ 'action' => 'statusValidated', $materiel->id ], [ 'title' => 'Valider', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => 'Êtes-vous sur de vouloir valider ' . $materiel->designation . ' ?' ] ); //else if (h($materiel->status) == 'VALIDATED') { if ($CAN_TBA) echo $html->link('', [ 'action' => 'statusTobearchived', $materiel->id ], [ 'title' => 'Demander la sortie de l\'inventaire', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => 'Êtes-vous sur de vouloir faire une demande d\'archive ' . $materiel->designation . ' ?' ] ); //else if ($materiel->status=='TOBEARCHIVED' && !$USER_IS_RESPONSABLE) if ($CAN_ARCHIVE) echo $html->link('', [ 'action' => 'statusArchived', $materiel->id ], [ 'title' => 'Sortir de l\'inventaire', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => 'Êtes-vous sur de vouloir archiver ' . $materiel->designation . ' ?' ] ); // 3) DELETE icon /* if (h($materiel->status) == 'CREATED') { if ( $USER_IS_ADMIN_OR_MORE || $USER_IS_CREATOR_OR_OWNER || ($USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL) ) */ if ($CAN_DELETE) echo $html->link(__(''), [ 'action' => 'delete', $materiel->id ], [ 'title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer {0} ?', $materiel->designation) ] ); echo ""; return $color; }; // displayActionButtonsForMateriel /* * On récupère les paramètres passés actuellement à l'URL (age, domain, searchfor...) * afin de les rappeler quand on clique sur les boutons de filtrage */ //$args = explode('?',$_SERVER['REQUEST_URI']); //$args = count($args)==2 ? '?'.$args[1] : null; $params = $this->request->getParam('?'); if (!$params) $params=[]; // S'il y a des paramètres, supprimer le paramètre 'page' car inapproprié if ($params) unset($params['page']); ?>
Liste des matériels ('.$nbMateriels.')'; ?> '; echo $this->Html->link(' Nouveau Matériel', [ 'action' => 'add' ], [ 'title' => 'Ajouter un matériel', 'escape' => false ]); echo '

';*/ if ($USER_IS_ADMIN_OR_MORE) $displayStatusButtons($SELECTED_STATUS, $params, $nbMateriels, $this->Html); //
// $displaySelectors($this->Form, $this->request, $displayNbLinesSelector, $displayAgeSelector, $displayDomaineSelector, $domain_options); //$displayNbLinesSelector($this->Form, $this->request); // Formulaire de RECHERCHE de materiels // Search field echo "\n"; echo "\n"; $displaySearchField($params, $searchfor, $this->Html, $this->Form); echo "\n"; echo "\n"; // DEBUT FORMULAIRE echo $this->Form->create('materiels', [ 'url' => '/materiels/execActions?page='.$this->request->getQuery('page') ]); // if ($nbMateriels == 0) echo 'Aucun matériel'; else { // $form2 = $this->Form; // /echo $this->Form->create('materiels', ['url' => '/materiels/execActions']); if ($SELECTED_STATUS) echo $this->Form->hidden('what', ['value'=>$SELECTED_STATUS]); ?> '; }?> ".$this->Paginator->sort('metrologie', 'Metro')."" ?> year-$time->month-$time->day"); // On extrait la date pour la vérification de fin de garantie //$today = $today->format('Ydm'); // On formatte la date initialement en 31-12-2000 (par exemple) en un format qui pourra etre comparé : 20001231 $today = $today->format('Ymd'); // On formatte la date initialement en 31-12-2000 (par exemple) en un format qui pourra etre comparé : 20001231 // BOUCLE SUR CHAQUE MATERIEL, ligne par ligne //$mc = new MaterielsController(); foreach ($materiels as $materiel) : // Date fin garantie ? $date_color = ''; if ($materiel->date_fin_garantie !== NULL) { //debug("today $today"); $timeFin = new time($materiel->date_fin_garantie); $dateFin = new date("$timeFin->year-$timeFin->month-$timeFin->day"); //$dateFin = $dateFin->format('Ydm'); $dateFin = $dateFin->format('Ymd'); //debug("datefin $dateFin"); if ($today>=$dateFin) $date_color = 'style="color: #FF0000"'; //debug("couleur $date_color"); } ?> ;"> // (1) COLONNE SELECTION (checkbox) if ($SELECTED_STATUS) { echo ''; } // $color = $displayActionButtonsForMateriel($materiel, $username, $USER_IS_RESPONSABLE, $USER_IS_ADMIN_OR_MORE, $USER_IS_SUPERADMIN, $controller, $this->Html); ?> status)) { case 'CREATED': $statut = 'C'; break; case 'VALIDATED': $statut = 'V'; break; case 'TOBEARCHIVED': $statut = 'TBA'; break; case 'ARCHIVED': $statut = 'A'; break; default: $statut = ''; break; } ?> '. (h($materiel->metrologie)=='1' ? 'Y':'N').''; ?>
Paginator->sort('designation','Désignation') ?> Paginator->sort('numero_laboratoire', 'N° interne (labo)') ?> paginator->sort('hors_service', ' ') ?> Paginator->sort('categorie_id', 'Catégorie') ?> Paginator->sort('organisme_id', 'Org.') ?> Paginator->sort('numero_inventaire_organisme', 'N° Invent. Org.') ?> Paginator->sort('nom_responsable', "Nom de l'utilisateur") ?> Paginator->sort('status', 'Statut') ?> Paginator->sort('date_acquisition', 'Date Achat') ?> Paginator->sort('etiquette', 'Et') ?>
' . $this->Form->checkbox($materiel->id, [ 'style' => 'margin: 3px', 'id' => $materiel->id ]) . ' has('designation') ? $this->Html->link($materiel->designation, ['controller' => 'Materiels', 'action' => 'view', $materiel->id],[$color]) : '' ?> numero_laboratoire) ?> hors_service) ? 'HS' : '' ?> has('category') ? h($materiel->category->nom) : '' ?> has('organisme') ? h($materiel->organisme->nom) : '' ?> numero_inventaire_organisme) ?> nom_responsable) ?> > >date_acquisition) ?> etiquette)=='1' ? 'Y':'N' ?>
Form, $SELECTED_STATUS, $USER_IS_RESPONSABLE, $USER_IS_ADMIN_OR_MORE, $USER_IS_SUPERADMIN); echo $this->element('pagination_with_first_and_last'); $this->Form->end(); } // (nbMateriels>0) ?>