source: cpc/branches/senat/project/apps/backend/modules/organisme/actions/actions.class.php @ 2029

Last change on this file since 2029 was 2029, checked in by roux, 9 years ago

nettoyage et refacto sénat ; debug parsing deputes + integration en base et web avec organismes

File size: 12.8 KB
Line 
1<?php
2
3require_once dirname(__FILE__).'/../lib/organismeGeneratorConfiguration.class.php';
4require_once dirname(__FILE__).'/../lib/organismeGeneratorHelper.class.php';
5
6/**
7 * organisme actions.
8 *
9 * @package    cpc
10 * @subpackage organisme
11 * @author     Your name here
12 * @version    SVN: $Id: actions.class.php 12474 2008-10-31 10:41:27Z fabien $
13 */
14class organismeActions extends autoOrganismeActions
15{
16
17  public function executeListCommissions(sfWebRequest $request) {
18    $query = Doctrine_Query::create()
19      ->select('id, nom, slug, po.organisme_id, count(distinct(po.parlementaire_id)) as senateurs, s.organisme_id, count(distinct(s.id)) as seances, sum(s.tagged) as tags')
20      ->from('Organisme o')
21      ->where('o.type = "parlementaire"')
22      ->leftJoin('o.ParlementaireOrganismes po')
23      ->leftJoin('o.Seances s')
24      ->groupBy('o.id')
25      ->orderBy('o.nom');
26    $this->orgas = $query->fetchArray(); 
27
28    $this->seances = Doctrine_Query::create()
29      ->select('id, date, moment, session, organisme_id, tagged, nb_commentaires, i.seance_id, count(distinct(i.id)) as n_interventions, p.seance_id, count(distinct(p.parlementaire_id)) as presents, count(distinct(pr.type)) as sources')
30      ->from('Seance s')
31      ->where('s.type = "commission"')
32      ->andWhere('(s.organisme_id IS NULL) OR (s.organisme_id = 0)')
33      ->leftJoin('s.Interventions i')
34      ->leftJoin('s.Presences p')
35      ->leftJoin('p.Preuves pr')
36      ->groupBy('s.id')
37      ->orderBy('s.date, s.moment')
38      ->fetchArray();
39   
40    if ($suppr = $request->getParameter('suppr')) {
41      if ($suppr == 'commission')
42        $this->delcom = array('id' => $request->getParameter('id'), 'art' => $request->getParameter('art'), 'dep' => $request->getParameter('dep'), 'sea' => $request->getParameter('sea'));
43      else if ($suppr == 'seance')
44        $this->delsea = array('id' => $request->getParameter('seance'), 'pre' => $request->getParameter('pre'), 'prp' => $request->getParameter('prp'));
45    } else if ($request->getParameter('result'))
46      $this->result = $request->getParameter('result');
47  }
48
49  public function executeCommission(sfWebRequest $request) {
50    $orga = $request->getParameter('id');
51    $this->forward404Unless($orga);
52    $this->orga = Doctrine::getTable('Organisme')->find($orga);
53    $this->forward404Unless($this->orga);
54
55    $this->senateurs = Doctrine_Query::create()
56      ->select('nom, slug')
57      ->from('Parlementaire p')
58      ->leftJoin('p.ParlementaireOrganisme po')
59      ->where('po.organisme_id = ?', $orga)
60      ->orderBy('po.importance DESC, p.sexe ASC, p.nom_de_famille ASC')
61      ->fetchArray();
62 
63    $this->seances = Doctrine_Query::create()
64      ->select('id, date, moment, session, organisme_id, tagged, nb_commentaires, i.seance_id, count(distinct(i.id)) as n_interventions, p.seance_id, count(distinct(p.parlementaire_id)) as presents, count(distinct(pr.type)) as sources')
65      ->from('Seance s')
66      ->where('s.organisme_id = ?', $orga)
67      ->leftJoin('s.Interventions i')
68      ->leftJoin('s.Presences p')
69      ->leftJoin('p.Preuves pr')
70      ->groupBy('s.id')
71      ->orderBy('s.date DESC, s.moment DESC')
72      ->fetchArray();
73
74    $this->article = Doctrine::getTable('Article')
75      ->createQuery('a')
76      ->where('categorie = "Organisme"')
77      ->andWhere('object_id = ?', $orga)
78      ->fetchOne();
79
80    $this->suppr = 0;
81    if ($this->suppr = $request->getParameter('suppr')) {
82      if ($request->getParameter('ok')) {
83        $query = Doctrine_Query::create()
84          ->update('Seance')
85          ->set('organisme_id', 'NULL')
86          ->where('organisme_id = ?', $orga);
87        $sea = $query->execute();
88        $query = Doctrine_Query::create()
89          ->delete('ParlementaireOrganisme p')
90          ->where('p.organisme_id = ?', $orga);
91        $dep = $query->execute();
92        $query = Doctrine_Query::create()
93          ->delete('Article a')
94          ->where('a.categorie = "Organisme"')
95          ->andWhere('a.object_id = ?', $orga);
96        $art = $query->execute();
97        $query = Doctrine_Query::create()
98          ->delete('Organisme o')
99          ->where('o.id = ?', $orga);
100        if ($query->execute())
101          $this->redirect('@list_commissions_suppr?id='.$orga.'&sea='.$sea.'&dep='.$dep.'&art='.$art);
102        else $this->redirect('@list_commissions_suppr?id=0&sea='.$sea.'&dep='.$dep.'&art='.$art);
103      } else if ($this->suppr == 2) {
104        $this->delsea = array('id' => $request->getParameter('seance'), 'pre' => $request->getParameter('pre'), 'prp' => $request->getParameter('prp'));
105      }
106    } else if ($request->getParameter('result'))
107      $this->result = $request->getParameter('result');
108  }
109
110  public function executeFuse(sfWebRequest $request) {
111
112    $this->type = $request->getParameter('type');
113    $this->forward404Unless($this->type && preg_match('/^(commission|seance)$/', $this->type));
114    $this->bads = $request->getParameter('bad');
115    $this->goods = $request->getParameter('good');
116    $this->forward404Unless($this->bads && $this->goods && ($this->bads != $this->goods));
117
118    if ($this->type == "seance") {
119      $this->orga = $request->getParameter('id');
120      $this->forward404Unless($this->orga);
121      $ref_seance = 's.id';
122      if (preg_match('/^(\d+),(\d+)$/', $this->orga, $match))
123        $result_link = '@fuse?type=commission&bad='.$match[1].'&good='.$match[2].'&result=';
124      else $result_link = '@commission_fuse_seances?id='.$this->orga.'&result=';
125      $this->bads_arr = explode(',', $this->bads);
126      $this->goods_arr = explode(',', $this->goods);
127      $obj_ids = array_merge($this->bads_arr, $this->goods_arr);
128      $n_dates = count($this->bads_arr);
129      if ($n_dates == 0) $this->redirect($result_link.'wrongdate');
130      $objs_arr = array();
131      for ($i=0; $i<$n_dates; $i++) {
132        $objects = Doctrine::getTable('Seance')
133          ->createQuery('s')
134          ->whereIn('id', array($this->bads_arr[$i], $this->goods_arr[$i]))
135          ->execute();
136        $this->forward404Unless(count($objects) == 2);
137        if ($objects[0]->date != $objects[1]->date)
138          $this->redirect($result_link.'wrongdate');
139        $objs_arr[$i] = $objects;
140      }
141      if ($request->getParameter('doublons'))
142        $this->doublons = 1;
143      $query = Doctrine_Query::create()
144        ->select('count(id) as ct')
145        ->from('Intervention i')
146        ->whereIn('i.seance_id', $this->bads_arr);
147    } else {
148      $ref_seance = 's.organisme_id';
149      $result_link = '@list_commissions_fuse?result=';
150      $this->bad = $this->bads;
151      $this->good = $this->goods;
152      $obj_ids = array($this->bad, $this->good);
153      $objs = Doctrine::getTable('Organisme')
154        ->createQuery('o')
155        ->whereIn('id', $obj_ids)
156        ->execute();
157      $this->forward404Unless(count($objs) == 2);
158      $articles = Doctrine::getTable('Article')
159        ->createQuery('a')
160        ->where('categorie = "Organisme"')
161        ->andWhereIn('object_id', $obj_ids)
162        ->execute();
163      $n_art = count($articles);
164      if ($n_art == 0)
165        $this->article = null;
166      else if ($n_art == 1)
167        $this->article = $articles[0];
168      else $this->redirect($result_link.'wrongart');
169      $doublons_q = Doctrine_Query::create()
170        ->select('id, date, moment, i.seance_id, count(distinct(i.id)) as n_interventions')
171        ->from('Seance s')
172        ->whereIn($ref_seance, $obj_ids)
173        ->leftJoin('s.Interventions i')
174        ->groupBy('s.id')
175        ->orderBy('s.date, s.moment')
176        ->fetchArray();
177      if ($doublons_q) {
178        $tmpstr = "";
179        $doublons_bad = "";
180        $doublons_good = "";
181        foreach($doublons_q as $doublon) {
182          if ($tmpstr != $doublon['date'].$doublon['moment']) {
183            $tmpstr = $doublon['date'].$doublon['moment'];
184            $tmpid = $doublon['id'];
185          } else {
186            if ($doublon['n_interventions'] == 0) {
187              $bd = $doublon['id'];
188              $gd = $tmpid;
189            } else {
190              $gd = $doublon['id'];
191              $bd = $tmpid;
192            }
193            if ($doublons_bad == "") {
194              $doublons_bad .= $bd;
195              $doublons_good .= $gd;
196            } else {
197              $doublons_bad .= ','.$bd;
198              $doublons_good .= ','.$gd;
199            }
200          } 
201        }
202        if ($doublons_bad != "" && $doublons_good != "" && ($doublons_bad != $doublons_good))
203          $this->redirect('@fuse?type=seance&id='.$this->bad.','.$this->good.'&bad='.$doublons_bad.'&good='.$doublons_good.'&doublons=1');
204      }
205      $query = Doctrine_Query::create()
206        ->select('count(distinct(parlementaire_id)) as ct')
207        ->from('ParlementaireOrganisme p')
208        ->where('p.organisme_id = ?', $this->bad);
209    }
210
211  // Interdit la fusion d'une commission ayant des parlementaires ou d'une séance ayant des interventions
212    $composants = $query->fetchOne();
213    if ($composants['ct'] != 0)
214      $this->redirect($result_link.'wrong');
215
216    if (!$request->getParameter('ok')) {
217      if ($request->getParameter('result'))
218        $this->result = $request->getParameter('result');
219
220      $this->seances = Doctrine_Query::create()
221        ->select('id, date, moment, session, organisme_id, tagged, nb_commentaires, i.seance_id, count(distinct(i.id)) as n_interventions, p.seance_id, count(distinct(p.parlementaire_id)) as presents, count(distinct(pr.type)) as sources')
222        ->from('Seance s')
223        ->whereIn($ref_seance, $obj_ids)
224        ->leftJoin('s.Interventions i')
225        ->leftJoin('s.Presences p')
226        ->leftJoin('p.Preuves pr')
227        ->groupBy('s.id')
228        ->orderBy('s.date, s.moment')
229        ->fetchArray();
230
231      if ($this->type == "commission")
232         $this->senateurs = Doctrine_Query::create()
233          ->select('nom, slug')
234          ->from('Parlementaire p')
235          ->leftJoin('p.ParlementaireOrganisme po')
236          ->whereIn('po.organisme_id', $obj_ids)
237          ->orderBy('po.importance DESC, p.sexe ASC, p.nom_de_famille ASC')
238          ->fetchArray();
239
240    } else {
241      if ($this->type == "commission") {
242        foreach ($objs as $obj)
243          if ($obj->id == $this->bad)
244            $bad = $obj;
245          else $good = $obj;
246        $corresp = array(strtolower($bad->nom) => strtolower($good->nom));
247        $option = Doctrine::getTable('VariableGlobale')->findOneByChamp('commissions');
248        if (!$option) {
249          $option = new VariableGlobale();
250          $option->setChamp('commissions');
251          $option->setValue(serialize($corresp));
252        } else $option->setValue(serialize(array_merge(unserialize($option->getValue()), $corresp)));
253        $option->save();
254       
255        if ($this->article && $this->article->object_id == $this->bad) {
256          $this->article->object_id = $this->good;
257          $this->article->save();
258        }
259       
260        $query = Doctrine_Query::create()
261          ->update('Seance')
262          ->set('organisme_id', $this->good)
263          ->where('organisme_id = ?', $this->bad)
264          ->execute();
265
266        $query = Doctrine_Query::create()
267          ->delete('Organisme o')
268          ->where('o.id = ?', $this->bad);
269        if ($query->execute())
270          $results = 'good';
271        else $results = 'fail';
272      } else for ($i=0; $i<$n_dates; $i++) {
273        $this->bad = $this->bads_arr[$i];
274        $this->good = $this->goods_arr[$i];
275        foreach ($objs_arr[$i] as $obj)
276          if ($obj->id == $this->bad)
277            $bad = $obj;
278          else $good = $obj;
279        $this->presences = array();
280        foreach (Doctrine_Query::create()->select('id, type, source, pr.parlementaire_id as senateur')->from('PreuvePresence p')
281          ->leftJoin('p.Presence pr')->where('pr.seance_id = ?', $this->bad)->fetchArray() as $presence) {
282          $this->presences[] = $presence['id'];
283          $good->addPresenceLight($presence['senateur'], $presence['type'], $presence['source']);
284        }
285        if (preg_match('/^(\d{2}:\d{2})/', $bad->moment, $match)) {
286          $goodmom = $match[1];
287          if (!($good->moment == $goodmom)) {
288            if ($bad->moment == $goodmom && $good->organisme_id == $bad->organisme_id) {
289              $bad->moment = $goodmom.'temp';
290              $bad->save();
291            }
292            $good->setMoment($goodmom);
293          }
294        }
295        $good->save();
296
297        if (count($this->presences)) {
298          $query = Doctrine_Query::create()
299            ->delete('PreuvePresence p')
300            ->whereIn('p.id', $this->presences)
301            ->execute();
302          $query = Doctrine_Query::create()
303            ->delete('Presence p')
304            ->where('p.seance_id = ?', $this->bad)
305            ->execute();
306        }
307
308        $query = Doctrine_Query::create()
309          ->delete('Seance s')
310          ->where('s.id = ?', $this->bad);
311        if (! $query->execute()) {
312          $results = 'fail';
313          break;
314        } else $results = 'good';
315      }
316      $this->redirect($result_link.$results);
317    }
318  }
319}
Note: See TracBrowser for help on using the repository browser.