示例#1
0
 function validate($annee, $pm, $data)
 {
     extract($data);
     $m = $pm->data;
     $u = $this->unite;
     $a = $annee;
     $t = new Appartenances();
     $tr = new Roles();
     $ti = new Individus();
     $db = $t->getAdapter();
     $db->beginTransaction();
     $tu = $u->findParentTypesUnite();
     try {
         if ($m->get('inscription/individu') == '$$nouveau$$') {
             $i = new Individu();
             $i->prenom = $m->get('fiche/prenom');
             $i->nom = $m->get('fiche/nom');
             $i->sexe = $m->get('fiche/sexe');
             $i->naissance = $a - $tu->age_min . '-01-01';
             $i->portable = $m->get('fiche/portable');
             $i->adelec = $m->get('fiche/adelec');
             $i->slug = $i->getTable()->createSlug(wtk_strtoid($i->getFullname(false, false)));
             $i->save();
         } else {
             $i = $ti->findOne($m->get('inscription/individu'));
             $app_active = $i->findInscriptionsActives()->current();
             if ($app_active) {
                 if ($m->get('cloture/clore')) {
                     $app_active->fin = $m->get('cloture/fin');
                     $app_active->save();
                 }
             }
         }
         if ($m->get('succession/succeder')) {
             $role = $m->get('inscription/role');
             list($role, $titre) = explode('__', $role);
             $r = $tr->findOne($role);
             $apps = $u->findFuturPredecesseurs($r, $titre);
             $app_predecesseur = $apps->current();
             if ($apps->count()) {
                 $app_predecesseur = $apps->current();
                 $app_predecesseur->fin = $m->get('succession/date');
                 $app_predecesseur->save();
             }
         }
         $app = new Appartient();
         $app->unite = $u->id;
         $app->individu = $i->id;
         $app->debut = $m->get('inscription/debut');
         list($role, $titre) = explode('__', $m->get('inscription/role'));
         $app->role = intval($role);
         $app->titre = $titre;
         if ($m->get('inscription/clore')) {
             $app->fin = $m->get('inscription/fin');
         }
         $app->save();
         $message = $i->getFullname(false, false) . " inscrit.";
         $this->controller->logger->info($message);
         $this->controller->_helper->Flash->info($message);
         $db->commit();
     } catch (Exception $e) {
         $db->rollBack();
         throw $e;
     }
     if ($m->get('inscription/continuer')) {
         $this->controller->redirectSimple();
     } else {
         $this->controller->redirectSimple('effectifs');
     }
 }
示例#2
0
 function inscrireAction()
 {
     $this->view->individu = $individu = $this->_helper->Individu();
     $this->metas(array('DC.Title' => 'Éditer le CV'));
     $this->branche->append();
     $this->assert(null, $individu, 'inscrire', "Vous n'avez pas le droit d'inscrire cet individu dans une unité.");
     $this->view->apps = $individu->findAppartenances();
     /* CV scout */
     $apps = $individu->findInscriptionsActives();
     $unites = $individu->findUnitesCandidates();
     $m = new Wtk_Form_Model('inscrire');
     $g = $m->addGroup('actuel');
     $g->addDate('date', "Date d'inscription");
     $gg = $g->addGroup('apps');
     $default_next = null;
     if ($apps->count()) {
         $default_next = $apps->rewind()->current()->unite;
         foreach ($apps as $app) {
             $gg->addBool($app->id, "N'est plus " . $app->getShortDescription(), true);
         }
     }
     if ($unites->count()) {
         $i0 = $g->addBool('inscrire', "Inscrire dans une autre unité ou promouvoir", true)->setReadonly((bool) $apps->count() == 0);
         $i1 = $g->addEnum('unite', "Unité", $default_next);
         foreach ($unites as $u) {
             $i1->addItem($u->id, $u->getFullname());
         }
         if ($apps->count()) {
             $m->addConstraintDepends($i1, $i0);
         }
     } else {
         $message = "Aucune unité pour " . $individu->getFullname() . " !";
         $aide = "Les contraintes d'âge et de sexe ne permettent pas " . "d'inscrire {$individu->getFullname()} dans une unité.";
         throw new Strass_Controller_Action_Exception_Notice($message, 500, $aide);
     }
     $g = $m->addGroup('role');
     $g->addEnum('role', 'Rôle');
     $i0 = $g->addBool('clore', "Ne l'est plus depuis", $apps->count() > 0);
     $i1 = $g->addDate('fin', "Date de fin", $m->get('actuel/date'));
     $m->addConstraintDepends($i1, $i0);
     $this->view->model = $pm = new Wtk_Pages_Model_Form($m);
     $tu = new Unites();
     $tr = new Roles();
     $page = $pm->partialValidate();
     if ($pm->pageCmp($page, 'role') == 0 && !$m->get('actuel/inscrire')) {
         $page = $pm->gotoEnd();
     }
     /* si on veut inscrire, et qu'on connait l'unité */
     if ($pm->pageCmp($page, 'role') >= 0 && $m->get('actuel/inscrire')) {
         $g = $m->getInstance('role');
         /* Sélections des rôles ou on peut l'inscrire */
         $unite = $tu->findOne($m->get('actuel/unite'));
         $roles = $unite->findParentTypesUnite()->findRoles();
         $i = $g->getChild('role');
         foreach ($roles as $role) {
             $i->addItem($role->id . '__', $role->titre);
             foreach ($role->findTitres() as $titre) {
                 $i->addItem($role->id . '__' . $titre->nom, $titre->nom);
             }
         }
     }
     /* Ne préremplir le role que si la page role va etre affichée */
     if ($pm->pageCmp($page, 'role') == 0) {
         $g = $m->getInstance('role');
         $i = $g->getChild('role');
         /* Préselection du role */
         $candidats = $individu->findRolesCandidats($unite);
         if ($candidats->count()) {
             $i->set($candidats->current()->id);
         }
         /* Présélection de la date */
         $annee = intval(strtok($m->get('actuel/date'), '/'));
         if ($app = $individu->findInscriptionSuivante($annee)) {
             /* on a trouvé un successeur, donc potentiellement on clot */
             $m->getInstance('role/clore')->set(TRUE);
             $m->getInstance('role/fin')->set($app->debut);
         } else {
             $i = $m->getInstance('actuel/date');
             $fin = $i->getDateArray();
             $fin['year'] += 1;
             $future = $fin['year'] > date('%Y');
             $m->getInstance('role/clore')->set(!$future);
             $m->getInstance('role/fin')->set($fin);
         }
     }
     if ($pm->validate()) {
         $t = new Appartenances();
         $db = $t->getAdapter();
         $db->beginTransaction();
         try {
             foreach ($m->get('actuel/apps') as $k => $clore) {
                 if (!$clore) {
                     continue;
                 }
                 $app = $t->findOne($k);
                 $app->fin = $m->get('actuel/date');
                 $app->save();
             }
             if ($m->get('actuel/inscrire')) {
                 $app = new Appartient();
                 $app->individu = $individu->id;
                 $app->unite = $m->get('actuel/unite');
                 list($role, $titre) = explode('__', $m->get('role/role'));
                 $app->role = intval($role);
                 $app->titre = $titre;
                 $app->debut = $m->get('actuel/date');
                 if ($m->get('role/clore')) {
                     $app->fin = $m->get('role/fin');
                 }
                 $app->save();
             }
             $this->logger->info("Inscription éditée", $this->_helper->Url('fiche'));
             $db->commit();
         } catch (Exception $e) {
             $db->rollBack();
             throw $e;
         }
         $this->redirectSimple('fiche');
     }
 }