Blame view

src/Controller/SuivisController.php 15.1 KB
6c4edfa3   Alexandre   First Commit LabI...
1
2
3
4
<?php
namespace App\Controller;

use App\Controller\AppController;
19798ef9   Alexandre   Mode_install, maj...
5
use Cake\ORM\TableRegistry;
6c4edfa3   Alexandre   First Commit LabI...
6
7
8
9
10
11
12
13
14

/**
 * Suivis Controller
 *
 * @property \App\Model\Table\SuivisTable $Suivis
 */
class SuivisController extends AppController
{

04a6b875   Alexandre   Version: 2.4.2.0
15
16
17
18
19
20
21
22
23
24
25
26
27
28
	/**
	 * @param $user
	 *
	 * Give authorization for suivis
	 *
	 * @return boolean
	 */
	public function isAuthorized($user)
	{
		$configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first();
		$role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
		 
		$action = $this->request->params['action'];
		 
bc2274a0   Alexandre   Version: 2.4.6.3
29
		if($this->userHasRole('Administration')) return true;
5973ba4e   Alexis Proust   mise a jour fichier
30
		
04a6b875   Alexandre   Version: 2.4.2.0
31
32
33
		//Pour un "utilisateur"
		if (in_array($action, ['edit', 'delete'])) {
			$id = (int)$this->request->params['pass'][0];
3f179b66   Alexandre   Version: 2.5.4.2
34
			if($this->isOwnedBy($id, $user['sn'][0].' '.$user['givenname'][0])) return true;
bc2274a0   Alexandre   Version: 2.4.6.3
35
			if($role == 'Responsable' && $this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])) return true;
04a6b875   Alexandre   Version: 2.4.2.0
36
37
38
39
40
41
42
43
44
45
46
		}
		 
		return parent::isAuthorized($user);
	}
	
	
	public function isOwnedBy($id, $nomCreateur)
	{
		return $this->Suivis->exists(['id' => $id, 'nom_createur' => $nomCreateur]);
	}

bc2274a0   Alexandre   Version: 2.4.6.3
47
48
49
50
	public function isRespGroup($id, $loginResponsable)
	{
		$u = TableRegistry::get('Users')->find()->where(['username' => $loginResponsable])->first();
	
602e9d7a   Alexandre   Version: 2.5.5.0
51
52
53
54
55
56
57
58
59
		if(isset($u['groupes_metier_id']) && $u['groupes_metier_id'] != TableRegistry::get('GroupesMetiers')->find()->where(['nom =' => 'N/A'])->first()['id']) {
			return ($this->Suivis->exists(['id' => $id, 'groupes_metier_id' => $u['groupes_metier_id']]));
		}
		else if (isset($u['groupe_thematique_id']) && $u['groupe_thematique_id'] != TableRegistry::get('GroupesThematiques')->find()->where(['nom =' => 'N/A'])->first()['id']) {
			return ($this->Suivis->exists(['id' => $id, 'groupes_thematique_id' => $u['groupe_thematique_id']]));
		}
		else {
			return false;
		}
bc2274a0   Alexandre   Version: 2.4.6.3
60
	}
04a6b875   Alexandre   Version: 2.4.2.0
61
	
6c4edfa3   Alexandre   First Commit LabI...
62
63
64
65
66
67
68
    /**
     * Index method
     *
     * @return \Cake\Network\Response|null
     */
    public function index()
    {
302307ec   Alexandre   Version: 2.4.7.0
69
    	$condition = '';
5973ba4e   Alexis Proust   mise a jour fichier
70
    
302307ec   Alexandre   Version: 2.4.7.0
71
    	$GM = $this->request->query('GM');
602e9d7a   Alexandre   Version: 2.5.5.0
72
73
74
75
76
77
78
79
80
81
82
83
    	$GT = $this->request->query('GT');
    	
    	if(isset($GM) || isset($GT)) {
    		if(isset($GM) && $GM != TableRegistry::get('GroupesMetiers')->find()->where(['nom =' => 'N/A'])->first()['id']) {
    			$condition = ['Suivis.groupes_metier_id =' => $GM];
    		}
    		else if (isset($GT) && $GT != TableRegistry::get('GroupesThematiques')->find()->where(['nom =' => 'N/A'])->first()['id']) {
    			$condition = ['Suivis.groupes_thematique_id =' => $GT];
    		}
    		else {
    			$condition = ['Suivis.id =' => 0];
    		}
302307ec   Alexandre   Version: 2.4.7.0
84
85
    	}
    	
6c4edfa3   Alexandre   First Commit LabI...
86
        $this->paginate = [
ebe38bef   Alexandre   #3586 Ajout assoc...
87
            'contain' => ['Materiels', 'TypeSuivis']
6c4edfa3   Alexandre   First Commit LabI...
88
        ];
302307ec   Alexandre   Version: 2.4.7.0
89
        $suivis = $this->paginate($this->Suivis->find('all', ['conditions' => $condition]));
6c4edfa3   Alexandre   First Commit LabI...
90

302307ec   Alexandre   Version: 2.4.7.0
91
        $this->set('nbSuivis', $this->Suivis->find('all', ['conditions' => $condition])->count());
183ce554   Alexandre   Ajout de test, su...
92
        
6c4edfa3   Alexandre   First Commit LabI...
93
94
95
96
97
98
99
100
101
102
103
104
105
106
        $this->set(compact('suivis'));
        $this->set('_serialize', ['suivis']);
    }

    /**
     * View method
     *
     * @param string|null $id Suivi id.
     * @return \Cake\Network\Response|null
     * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
     */
    public function view($id = null)
    {
        $suivi = $this->Suivis->get($id, [
5973ba4e   Alexis Proust   mise a jour fichier
107
            'contain' => ['Materiels', 'Documents', 'TypeSuivis', 'GroupesThematiques', 'GroupesMetiers','Unites','Fichemetrologiques']
6c4edfa3   Alexandre   First Commit LabI...
108
        ]);
5973ba4e   Alexis Proust   mise a jour fichier
109
110
111
112
113
114
115
116
117
118
119
		$typeDocuments = TableRegistry::get('TypeDocuments');
		$fichemet= TableRegistry::get('Fichemetrologiques')->find('all',['conditions' => [ 'suivi_id' => $this->passedArgs[0] ] ,'order' =>  ('id DESC')]);
		
		if($fichemet == null)
			$fiche = null;
		else
			$fiche = $fichemet->first();
		
		$this->set('typeDocuments', $typeDocuments);
		$this->set('suivi', $suivi);
		$this->set('fiche', $fiche);
6c4edfa3   Alexandre   First Commit LabI...
120
121
122
123
124
125
126
127
128
129
130
131
132
        $this->set('_serialize', ['suivi']);
    }

    /**
     * Add method
     *
     * @return \Cake\Network\Response|void Redirects on successful add, renders view otherwise.
     */
    public function add()
    {
        $suivi = $this->Suivis->newEntity();
        if ($this->request->is('post')) {
            $suivi = $this->Suivis->patchEntity($suivi, $this->request->data);
5973ba4e   Alexis Proust   mise a jour fichier
133
134
			if($this->request->data['typemesure']=="1")
				$suivi->typemesure="Indirect";
3ef8f907   Alexandre   Version: 2.4.5.0
135
            $suivi->panne_resolu = false;
6c4edfa3   Alexandre   First Commit LabI...
136
            if ($this->Suivis->save($suivi)) {
3601f4f5   Alexandre   Traduction messag...
137
                $this->Flash->success(__('Le suivi a bien été ajouté.'));
63a22db6   Alexandre   Version: 2.2.5.0
138
                return $this->redirect(['controller' => 'Materiels', 'action' => 'view', $this->passedArgs[0]]);
6c4edfa3   Alexandre   First Commit LabI...
139
            } else {
3601f4f5   Alexandre   Traduction messag...
140
                $this->Flash->error(__('Le suivi n\'a pas pu être ajouté.'));
5973ba4e   Alexis Proust   mise a jour fichier
141
				return $this->redirect(['controller' => 'Materiels', 'action' => 'view', $this->passedArgs[0]]);
6c4edfa3   Alexandre   First Commit LabI...
142
143
            }
        }
19798ef9   Alexandre   Mode_install, maj...
144
        $materiels = $this->Suivis->Materiels->find('list');
5973ba4e   Alexis Proust   mise a jour fichier
145
146
147
148
149
150
151
152
153
        $unite = TableRegistry::get('Unites')->find('list', [ 'keyfield' => 'id', 'valueField' =>'nom']);
		$formule = TableRegistry::get('Formules')->find('list', [ 'keyfield' => 'id', 'valueField' =>'formule']);
		$formules = TableRegistry::get('Formules')->find('all');
        $metro = TableRegistry::get('Materiels')->find()->select('metrologie')->where(['id =' => $this->passedArgs[0]])->first()['metrologie'];
        $variables = TableRegistry::get('Variables')->find('list')->toArray();
		
		$materiel = $this->Suivis->Materiels->find()->where(['id =' => $this->passedArgs[0]])->first();
        //$domaineresp= TableRegistry::get('Users')->find()->select('sur_categorie_id')->where(['username =' => $this->LdapAuth->user($this->request->session()->read('authType'))[0]])->first()['sur_categorie_id'];
		if($metro ==1){
ebe38bef   Alexandre   #3586 Ajout assoc...
154
        $typeSuivis = $this->Suivis->TypeSuivis->find('list', [ 'keyField' => 'id', 'valueField' => 'nom']);
5973ba4e   Alexis Proust   mise a jour fichier
155
156
157
158
159
160
161
162
163
164
165
		}else{
		$typeSuivis = $this->Suivis->TypeSuivis->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'conditions' => [ 'AND' => [['id !=' => '4'] , ['id !=' => '5'], ['id !=' => '6']]]]);
        }
		$dom= TableRegistry::get('Materiels')->find()->select('sur_categorie_id')->where(['id =' => $materiel->id])->first()['sur_categorie_id'];
		$domaines= TableRegistry::get('Users')->find()->select('sur_categorie_id')->where(['username =' => $this->LdapAuth->user($this->request->session()->read('authType'))[0]])->first()['sur_categorie_id'];
		if($dom == $domaines)
			$domaineresp=true;
		else
			$domaineresp=false;
		
		
e9a0cc56   Alexandre   Version: 2.4.6.0
166
167
        $groupesThematiques = $this->Suivis->GroupesThematiques->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'order' => 'GroupesThematiques.nom']);
        $groupesMetiers = $this->Suivis->GroupesMetiers->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'order' => 'GroupesMetiers.nom']);
5973ba4e   Alexis Proust   mise a jour fichier
168
169
       
        $this->set(compact('variables','formule','formules','unite','domaineresp','suivi', 'materiels', 'typeSuivis', 'materiel', 'groupesThematiques', 'groupesMetiers'));
6c4edfa3   Alexandre   First Commit LabI...
170
171
172
        $this->set('_serialize', ['suivi']);
    }

5973ba4e   Alexis Proust   mise a jour fichier
173
	
6c4edfa3   Alexandre   First Commit LabI...
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
    /**
     * Edit method
     *
     * @param string|null $id Suivi id.
     * @return \Cake\Network\Response|void Redirects on successful edit, renders view otherwise.
     * @throws \Cake\Network\Exception\NotFoundException When record not found.
     */
    public function edit($id = null)
    {
        $suivi = $this->Suivis->get($id, [
            'contain' => []
        ]);
        if ($this->request->is(['patch', 'post', 'put'])) {
            $suivi = $this->Suivis->patchEntity($suivi, $this->request->data);
            if ($this->Suivis->save($suivi)) {
3601f4f5   Alexandre   Traduction messag...
189
                $this->Flash->success(__('Le suivi a bien été édité.'));
d40786f0   Alexandre   Version: 2.4.2.3
190
                return $this->redirect(['action' => 'view', $id]);
6c4edfa3   Alexandre   First Commit LabI...
191
            } else {
3601f4f5   Alexandre   Traduction messag...
192
                $this->Flash->error(__('Le suivi n\'a pas pu être édité.'));
6c4edfa3   Alexandre   First Commit LabI...
193
194
            }
        }
19798ef9   Alexandre   Mode_install, maj...
195
        $materiels = $this->Suivis->Materiels->find('list');
5973ba4e   Alexis Proust   mise a jour fichier
196
197
		$materiel = $this->Suivis->Materiels->find()->where(['id =' => $suivi->materiel_id])->first();
        $unite = TableRegistry::get('Unites')->find('list', [ 'keyfield' => 'id', 'valueField' =>'nom']);
19798ef9   Alexandre   Mode_install, maj...
198
199
        
        $numMateriel = $this->Suivis->Materiels->find()->select('numero_laboratoire')->where(['id =' => $suivi->get('materiel_id')])->first()['numero_laboratoire'];
5973ba4e   Alexis Proust   mise a jour fichier
200
201
        $metro = TableRegistry::get('Materiels')->find()->select('metrologie')->where(['id =' => $suivi->materiel_id])->first()['metrologie'];
       
ebe38bef   Alexandre   #3586 Ajout assoc...
202
        $typeSuivis = $this->Suivis->TypeSuivis->find('list', [ 'keyField' => 'id', 'valueField' => 'nom']);
19798ef9   Alexandre   Mode_install, maj...
203
        
5973ba4e   Alexis Proust   mise a jour fichier
204
		$groupesThematiques = $this->Suivis->GroupesThematiques->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'order' => 'GroupesThematiques.nom']);
e9a0cc56   Alexandre   Version: 2.4.6.0
205
206
        $groupesMetiers = $this->Suivis->GroupesMetiers->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'order' => 'GroupesMetiers.nom']);
        
5973ba4e   Alexis Proust   mise a jour fichier
207
208
209
210
211
212
213
214
215
216
217
218
219
		if($metro == 1){
        $typeSuivis = $this->Suivis->TypeSuivis->find('list', [ 'keyField' => 'id', 'valueField' => 'nom']);
		}else{
		$typeSuivis = $this->Suivis->TypeSuivis->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'conditions' => [ 'AND' => [['id !=' => '4'] , ['id !=' => '5'], ['id !=' => '6']]]]);
        }
		$dom= TableRegistry::get('Materiels')->find()->select('sur_categorie_id')->where(['id =' => $suivi->materiel_id])->first()['sur_categorie_id'];
		$domaines= TableRegistry::get('Users')->find()->select('sur_categorie_id')->where(['username =' => $this->LdapAuth->user($this->request->session()->read('authType'))[0]])->first()['sur_categorie_id'];
		if($dom == $domaines)
			$domaineresp=true;
		else
			$domaineresp=false;

        $this->set(compact('unite','metro','domaineresp','suivi','materiel', 'materiels', 'typeSuivis', 'numMateriel', 'groupesThematiques', 'groupesMetiers'));
6c4edfa3   Alexandre   First Commit LabI...
220
        $this->set('_serialize', ['suivi']);
5973ba4e   Alexis Proust   mise a jour fichier
221
222
		
		
6c4edfa3   Alexandre   First Commit LabI...
223
224
225
226
227
228
229
230
231
232
233
234
235
236
    }

    /**
     * Delete method
     *
     * @param string|null $id Suivi id.
     * @return \Cake\Network\Response|null Redirects to index.
     * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
     */
    public function delete($id = null)
    {
        $this->request->allowMethod(['post', 'delete']);
        $suivi = $this->Suivis->get($id);
        if ($this->Suivis->delete($suivi)) {
3601f4f5   Alexandre   Traduction messag...
237
            $this->Flash->success(__('Le suivi a bien été supprimé.'));
6c4edfa3   Alexandre   First Commit LabI...
238
        } else {
3601f4f5   Alexandre   Traduction messag...
239
            $this->Flash->error(__('Le suivi n\'a pas pu être supprimé.'));
6c4edfa3   Alexandre   First Commit LabI...
240
241
242
        }
        return $this->redirect(['action' => 'index']);
    }
e9a0cc56   Alexandre   Version: 2.4.6.0
243
    
5973ba4e   Alexis Proust   mise a jour fichier
244
245
		
	
e9a0cc56   Alexandre   Version: 2.4.6.0
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
    /**
     * GetConditionForField method
     *
     * @param unknown $fieldName
     * @return string[]|NULL
     */
    private function getConditionForField($fieldName) {
    	$searchFieldName = 's_' . $fieldName;
    	if ( isset($this->request->data[$searchFieldName]) && ($this->request->data[$searchFieldName] != '')) return ["Suivis.$fieldName LIKE" => '%'.$this->request->data[$searchFieldName].'%'];
    	return NULL;
    }
    
    
    /**
     * GetConditionForFieldNumber method
     *
     * @param unknown $fieldName
     * @return $string[]|NULL
     */
    private function getConditionForFieldNumber($fieldName) {
    	$searchFieldName = 's_' . $fieldName;
    	if ( isset($this->request->data[$searchFieldName]) && ($this->request->data[$searchFieldName] != '')) return ["Suivis.$fieldName =" => $this->request->data[$searchFieldName]];
    	return NULL;
    }
    
    
    /**
     * Find method
     */
    public function find() {
    
    	$s_groupes_thematiques = $this->Suivis->GroupesThematiques->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'order' => 'GroupesThematiques.nom']);
    	$s_groupes_metiers = $this->Suivis->GroupesMetiers->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'order' => 'GroupesMetiers.nom']);
    	$s_type_suivis = $this->Suivis->TypeSuivis;
    	$materiels = $this->Suivis->Materiels;
    	
    	$this->set(compact('s_groupes_thematiques', 's_groupes_metiers', 's_type_suivis', 'materiels'));
    	 
    	$resultTri = $this->request->session()->read("resultTri");
    	 
    	if ($this->request->is('post')) {
    		$specificFieldsConditions = NULL;
5973ba4e   Alexis Proust   mise a jour fichier
288
289
			
			$periode_interventionRequest = NULL;
e9a0cc56   Alexandre   Version: 2.4.6.0
290
291
292
293
294
295
296
297
298
299
    		$date_intervention = NULL;
    		if ($this->request->data['s_periode_controle1'] != '') $periode_interventionRequest['Suivis.date_controle >='] = date('Y-m-d', strtotime(str_replace('/', '-', $this->request->data['s_periode_controle1'])));
    		if ($this->request->data['s_periode_controle2'] != '') $periode_interventionRequest['Suivis.date_controle <='] = date('Y-m-d', strtotime(str_replace('/', '-', $this->request->data['s_periode_controle2'])));
	 		if ($this->request->data['s_date_controle'] != '') $date_intervention['Suivis.date_controle ='] = date('Y-m-d', strtotime(str_replace('/', '-', $this->request->data['s_date_controle'])));
    		
    		$specificFieldsConditions = [
				$date_intervention,
				$periode_interventionRequest,
    			$this->getConditionForFieldNumber('type_suivi_id'),
    			$this->getConditionForField('organisme'),
aca4ed9b   Alexandre   Version: 2.5.4.0
300
    			$this->getConditionForField('statut'),
e9a0cc56   Alexandre   Version: 2.4.6.0
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
   				$this->getConditionForFieldNumber('groupes_metier_id'),
    			$this->getConditionForFieldNumber('groupes_thematique_id'),					
    		];
    
    		// CONSTRUCTION DE LA REQUETE SQL COMPLETE = $specificFieldsConditions
    		// by default, no sort
    		$lastResults = $this->Suivis->find('all', ['conditions' => $specificFieldsConditions]);
    
    		$this->paginate = ['limit' => 1000];
    		$_results = $this->paginate($lastResults);
    		$this->set(compact('_results'));
    
    	} // end if()
    	else if (isset($resultTri) && strstr($this->request->here(), 'sort') != false && strstr($this->request->here(), 'direction') != false) {
    		$findedSuivis = [];
    
    		foreach($resultTri as $r) {
    			array_push($findedSuivis, $r->id);
    		}
    		$res = $this->Suivis->find('all', ['limit' => 1000]);
    		for($i = 0; $i < sizeof($findedSuivis); $i++) {
    			$res->orWhere(['id =' => $findedSuivis[$i]]);
    		}
    
    		$this->paginate = ['limit' => 1000];
    		$_results = $this->paginate($res);
    		$this->set(compact('_results'));

    	}
    }
    
3ab8435b   Alexandre   Version: 2.4.6.4
332
    // called from Javascript (Ajax)
94e21fe8   Alexandre   Version: 2.4.6.9
333
    public function getNextDate($dateORjour, $frequenceORmois, $typeFrequenceORannee, $frequence = null, $typeFrequence = null) {
3ab8435b   Alexandre   Version: 2.4.6.4
334

94e21fe8   Alexandre   Version: 2.4.6.9
335
    	if($frequence != null && $typeFrequence != null) {
cccac752   Alexandre   Version: 2.4.6.8
336
    		$date = $dateORjour.'-'.$frequenceORmois.'-'.$typeFrequenceORannee;
cccac752   Alexandre   Version: 2.4.6.8
337
338
    	} else {
    		$date = $dateORjour;
94e21fe8   Alexandre   Version: 2.4.6.9
339
340
    		$frequence = $frequenceORmois;
    		$typeFrequence = $typeFrequenceORannee;
cccac752   Alexandre   Version: 2.4.6.8
341
342
    	}
    	
94e21fe8   Alexandre   Version: 2.4.6.9
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
    	$date_next = date_create_from_format('d-m-Y', $date);
    	
    	switch($typeFrequence) {
    		case "Jours":
    			date_add($date_next, date_interval_create_from_date_string($frequence.' days'));
    			break;
    		case "Semaines":
    			date_add($date_next, date_interval_create_from_date_string((7*$frequence).' days'));
    			break;
    		case "Mois":
    			date_add($date_next, date_interval_create_from_date_string($frequence.' months'));
    			break;
    		case "Ans":
    			date_add($date_next, date_interval_create_from_date_string($frequence.' years'));
    			break;
    	}
cccac752   Alexandre   Version: 2.4.6.8
359
    	
94e21fe8   Alexandre   Version: 2.4.6.9
360
    	$this->set ('date', date_format($date_next, 'd-m-Y'));
3ab8435b   Alexandre   Version: 2.4.6.4
361
362
363
364

    
    	$this->viewBuilder()->layout = 'ajax';
    }
e9a0cc56   Alexandre   Version: 2.4.6.0
365
    
6c4edfa3   Alexandre   First Commit LabI...
366
}