1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| public function search($criteres)
{
$q = $this->getOffresQuery();
$rootAlias = $q->getRootAlias();
$q->innerJoin("$rootAlias.sessions s ON s.offre_id = g.id")
->innerJoin('s.LieuFormation l ON l.id = s.lieu_formation_id')
->innerJoin('l.commune k ON l.commune_id = k.code_insee')
->where('g.nombre_heures_total BETWEEN ? AND ?',array($criteres['dureeMin'],$criteres['dureeMax']))
->andWhereIn('k.zone_emploi_id',$criteres['zone'])
->orderBy('g.conventionnement DESC, g.intitule ASC');
if ( !empty($criteres['intitule']) ) $q->andWhere('g.intitule = ?',$criteres['intitule']);
if ( !empty($criteres['nivEntree']) ) $q->andWhere('g.niveau_entree_id = ?', $criteres['nivEntree']);
if ( isset($criteres['conventionne']) && ($criteres['conventionne']==0 || $criteres['conventionne']==1 )) $q->andWhere('g.conventionnement = ?',$criteres['conventionne']);
if ( !empty($criteres['objectif'])) $q->andWhere('g.objectif_general_id = ?', $criteres['objectif']);
$offres_ids = array();
// TODO prendre en charge l'arborescence des formacodes
if ( !empty($criteres['formacode']))
{
$offres_ids = array_merge($offres_ids, Doctrine_Core::getTable('OffreFormacode')->getCodesRelatedOffres($criteres['formacode']));
$use_offres_ids = true;
}
else if ( !empty($criteres['domaine']) )
{
if ( !empty($criteres['sousdomaine']) )
{
$formacodes = Doctrine_Core::getTable('sousDomaine')->getById($criteres['sousdomaine'])->getFormacodesIds();
}
else
{
//echo Doctrine_Core::getTable('Domaine')->getDomaine($criteres['domaine'])->getFormacodes();
$formacodes = Doctrine_Core::getTable('Domaine')->getDomaine($criteres['domaine'])->getFormacodes();
}
// On a les formacodes liés au sous domaine
// on récupère les offres_id liés à ces formacodes
$offres_ids = array_merge($offres_ids, Doctrine_Core::getTable('OffreFormacode')->getCodesRelatedOffres($formacodes));
$use_offres_ids = true;
}
if ( !empty($criteres['rncp']) )
{
$offres_ids = array_merge($offres_ids, Doctrine_Core::getTable('Diplome')->getOffresFromRNCP($criteres['rncp']));
$use_offres_ids = true;
}
else if ( isset($criteres['diplomant']) && ($criteres['diplomant']==0 || $criteres['diplomant']==1) )
{
$q->andWhere('g.certifiante = ?',$criteres['diplomant']);
}
$offres_ids = array_unique($offres_ids);
if (!empty($use_offres_ids))
{
if (count($offres_ids)==0) return array();
$q->whereIn('g.id',$offres_ids);
}
// echo $q;
return $q->execute();
} |
Partager