materiels_list.ctp 14.6 KB
<?php
use Cake\I18n\Time;
use Cake\I18n\Date;

// - Fonction utilisée seulement pour la 2ème partie (affichage d'une ligne de données)
$displayActionButtonsForMateriel = function($materiel, $statuses_color, $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 => noir
     if ($IS_VALIDATED) $color = 'black';
     //if ($IS_VALIDATED) $color = 'green';
     // TBA => orange
     if ($IS_TOBEARCHIVED) $color = 'orange';
     // ARCHIVED => rouge
     if ($IS_ARCHIVED) $color = 'red';
     */
    $color = $statuses_color[$materiel->status];
    $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 '<td class="actions" style="padding: 6px 0; text-align: left;">';
    
    // 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(__('<i class="icon-pencil"></i>'), ['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('<i class="icon-ok-sign"></i>', [
            '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('<i class="icon-inbox"></i>', [
                'action' => 'statusTobearchived',
                $materiel->id
            ],
                [
                    'title' => 'Demander la sortie de l\'inventaire',
                    'style' => 'margin: 0 2px',
                    'escape' => false,
                    'confirm' => "Êtes-vous sûr de vouloir demander l'archivage de " . $materiel->designation . ' ?'
                ]
                );
            //else if ($materiel->status=='TOBEARCHIVED' && !$USER_IS_RESPONSABLE)
            if ($CAN_ARCHIVE)
                echo $html->link('<i class="icon-inbox"></i>', [
                    '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(__('<i class="icon-trash"></i>'), [
                        'action' => 'delete',
                        $materiel->id
                    ],
                        [
                            'title' => 'Supprimer',
                            'style' => 'margin: 0 2px',
                            'escape' => false,
                            'confirm' => __('Êtes-vous sur de vouloir supprimer {0} ?', $materiel->designation)
                        ]
                        );
                    
                    echo "</td>";
                    
                    return $color;
                    
}; // displayActionButtonsForMateriel





// - Variables passées à cet élément
//$HEADERS = $HEADERS;
//$HAS_COL_METRO = $HAS_COL_METRO;
//$METRO = $METRO;
$SELECTED_STATUS = $SELECTED_STATUS;
// Seulement pour la partie données
$materiels = $materiels;
//debug($materiels);
//$today = $today;
//$materiel = $materiel;
//$color = $color;
//$date_color = $date_color;
?>

<table style="border-collapse: separate; border-spacing: 0;">

<!-- 
 1) LES TITRES DE COLONNES (HEADERS)
 --> 

<thead>
	<tr>
        <?php if ($SELECTED_STATUS) { echo '<th></th>'; }?>
		
		<th class="actions"><?= __('') ?></th>
		
		<th><?= $this->Paginator->sort('designation','Désignation') ?></th>
		<th><?= $this->Paginator->sort('numero_laboratoire', 'N° inv.') ?></th>
		<!-- 
		<th><= $this->Paginator->sort('numero_inventaire_organisme', 'N° inv. compt.') ?></th>
		 -->
		<th><?= $this->Paginator->sort('numero_inventaire_organisme', 'N° tut.') ?></th>
		
		<th><?= $this->paginator->sort('hors_service', ' ') ?></th>

		<th><?= $this->Paginator->sort('numero_commande', 'BC') ?></th>
		
		<!-- 
		<th><= $this->Paginator->sort('nom_responsable', "Nom de l'utilisateur") ?></th>
		 -->
		<th><?= $this->Paginator->sort('nom_user', "Utilisateur") ?></th>

		<!-- 
		<th><= $this->Paginator->sort('Gestionnaires.nom', 'Gestionnaire') ?></th>
		 -->
		<th><?= $this->Paginator->sort('Users.nom', 'Gestionnaire') ?></th>

		<!-- 
		<th><= $this->Paginator->sort('categorie_id', 'Catégorie') ?></th>
		 -->
		<th><?= $this->Paginator->sort('Categories.nom', 'Catégorie') ?></th>
		
		<th><?= $this->Paginator->sort('status', 'Statut') ?></th>
		
		<th><?= $this->Paginator->sort('date_acquisition', 'Date Achat') ?></th>

		<th><?= $this->Paginator->sort('prix_ht', 'Prix') ?></th>

		<th><?= $this->Paginator->sort('Fournisseurs.nom', 'Fournisseur') ?></th>

		<!-- 
		<th><= $this->Paginator->sort('lieu_detail', 'Lieu') ?></th>
		 -->
		<th><?= $this->Paginator->sort('Sites.nom', 'Lieu') ?></th>

		<!-- 
		<th><= $this->Paginator->sort('Organismes.nom', 'Org.') ?></th>
		<th><= $this->Paginator->sort('etiquette', 'Et') ?></th>
		 -->
		 
		<?php
		//if ($HAS_COL_METRO && $METRO) echo "<th>".$this->Paginator->sort('metrologie', 'Metro')."</th>" 
		if ($METRO) echo "<th>".$this->Paginator->sort('metrologie', 'Metro')."</th>" 
        ?>
	</tr>
</thead>



<!-- 
 2) LIGNES DE DONNÉES
--> 

<tbody>
	
   	<?php
    // Pour changer la couleur du nom du matos si la garantie est passée
    $time = Time::now(); // On récupère la date et l'heure actuelles
    $today = new date("$time->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) :
    ?>
        <tr>            
        
            <?php
            // 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");
            }
            
            //<tr style="color:<?=$color>;">
            
            // (1) COLONNE SELECTION (checkbox)
            if ($SELECTED_STATUS) {
                echo '<td class="smallText">' . $this->Form->checkbox($materiel->id, [
                    'style' => 'margin: 3px',
                    'id' => $materiel->id
                ]) . '</td>';
            }
            
            // <!-- (2) COLONNE ACTIONS (Edit, Delete, Validate, TBA, Archive) -->
            $color = $displayActionButtonsForMateriel($materiel, $statuses_color, $username, $USER_IS_RESPONSABLE, $USER_IS_ADMIN_OR_MORE, $USER_IS_SUPERADMIN, $controller, $this->Html);                
            ?>
            
            <td class="smallText"><?= $materiel->has('designation') ?
            $this->Html->link(
                $materiel->designation,
                ['controller' => 'Materiels', 'action' => 'view', $materiel->id],[$color]
            )
            : '' ?>
            </td>
            
            <td class="smallText"><?= h($materiel->numero_laboratoire) ?></td>
            <td class="smallText"><?= h($materiel->numero_inventaire_organisme) ?></td>
            
            <td class="smallText" style="color: red"><strong><?= ($materiel->hors_service) ? 'HS' : '' ?></strong></td>
            
            <td class="smallText"><?= h($materiel->numero_commande) ?></td>
            
            <!-- 
            <td class="smallText"><= h($materiel->nom_responsable) ?></td>
             -->
            <td class="smallText"><?= h($materiel->nom_user) ?></td>
            
            <!-- 
            <td class="smallText"><= $materiel->has('gestionnaire') ? h($materiel->gestionnaire->nom) : '' ?></td>
             -->
            <td class="smallText"><?= $materiel->has('user') ? h($materiel->user->nom) : '' ?></td>
            
            <td class="smallText"><?= $materiel->has('category') ? h($materiel->category->nom) : '' ?></td>
              
            <?php
            // (4) COLONNE MATERIEL STATUS : C/V/TBA/A
            $statut = $materiel->getNiceStatus();
            /*
            switch (h($materiel->status)) {
                case 'CREATED':
                    //$statut = 'C';
                    $statut = 'A Valider';
                    break;
                case 'VALIDATED':
                    //$statut = 'V';
                    $statut = 'Validé';
                    break;
                case 'TOBEARCHIVED':
                    //$statut = 'T';
                    $statut = 'A sortir';
                    break;
                case 'ARCHIVED':
                    //$statut = 'A';
                    $statut = 'Archivé';
                    break;
                default:
                    $statut = '';
                    break;
            }
            */
            ?>
            <td class="smallText" <?=$color?>><?=$statut?></td>
            	
            <td class="smallText" <?=$date_color?>><?= h($materiel->date_acquisition) ?></td>
            
            <td class="smallText"><?= h($materiel->prix_ht.'€') ?></td>
            
            <td class="smallText"><?= $materiel->has('fournisseur') ? h($materiel->fournisseur->nom) : '' ?></td>
            
            <?php 
            $lieu = $materiel->has('site') ? h($materiel->site->nom) : '';
            if ($materiel->lieu_detail) {
                if ($materiel->has('site')) $lieu .= '-';
            	$lieu .= $materiel->lieu_detail;
            }
            ?>
            <td class="smallText"><?=$lieu?></td>
            
            <!-- 
            <td class="smallText"><= $materiel->has('organisme') ? h($materiel->organisme->nom) : '' ?></td>
            <td class="smallText"><= h($materiel->etiquette)=='1' ? 'O':'N' ?></td>
             -->
            
            <!--
            // (6) COLONNE METRO o/n 
            -->
            <?php if ($METRO)
            echo '<td class="smallText">'. (h($materiel->metrologie)=='1' ? 'Y':'N').'</td>';
            ?>
        
        </tr>
            
    <?php 
    //}
    endforeach;
    ?>

</tbody>

</table>