Skip to content
Snippets Groups Projects
Commit 92e0d5cf authored by lecluse's avatar lecluse
Browse files

Refactoring #4494

parent 710be258
No related branches found
No related tags found
No related merge requests found
Showing
with 819 additions and 377 deletions
SELECT
i.*
FROM
all_indexes i
LEFT JOIN all_constraints c ON c.index_name = i.index_name
WHERE
i.owner='OSE'
AND c.constraint_name IS NULL;
-- enlever _IDX des indexes
select
'ALTER INDEX ' || index_name || ' RENAME TO ' || new_index_name || ';' isql
from (
SELECT
index_name, substr( index_name, 1, length(index_name)-4 ) new_index_name
FROM
all_indexes i
WHERE
owner='OSE'
AND substr( index_name, -3 ) = 'IDX') t1;
-- création d'indexes manquants
SELECT
'CREATE' || un || ' INDEX ' || constraint_name || ' ON ' || table_name || ' (' || cols || ') LOGGING;' isql
FROM (
SELECT
c.constraint_name,
c.constraint_type,
c.table_name,
c.r_constraint_name,
c.index_name,
ose_divers.implode('SELECT column_name FROM all_cons_columns WHERE owner=''OSE'' AND constraint_name=q''[' || c.constraint_name || ']''', ' ASC,') || ' ASC' cols,
CASE WHEN c.constraint_type IN ('P','U') THEN ' UNIQUE' ELSE '' END un
FROM
all_constraints c
LEFT JOIN all_indexes i ON i.index_name = c.constraint_name
WHERE
c.owner = 'OSE'
AND c.constraint_type IN ('P', 'U', 'R')
AND c.table_name NOT LIKE 'BIN$%'
AND c.index_name IS NULL AND i.index_name IS NULL
) t1;
SELECT * FROM all_tables where owner = 'OSE';
select * from all_views where owner='OSE';
select * from SYS.all_cons_columns;
-- CREATE INDEX INTERVENANT_HDFK_IDX ON INTERVENANT (HISTO_DESTRUCTEUR_ID ASC) TABLESPACE OSE_TS LOGGING;
-- CREATE UNIQUE INDEX INTERVENANT_SOURCE__UN ON INTERVENANT ( SOURCE_CODE ASC, ANNEE_ID ASC ) LOGGING;
--SUBSTR(constraint_name,0,26)
\ No newline at end of file
......@@ -9,23 +9,40 @@
*******************************************************************************************************/
select
SELECT
i.prenom || ' ' || i.nom_usuel i_nom,
i.annee_id annee,
pj.histo_creation creation,
--tpj.code,
tpj.libelle, pj.obligatoire, pj.force,
CASE
WHEN f.id IS NULL THEN 'non fourni'
WHEN f.histo_destruction IS NOT NULL THEN 'histo ' || to_char(f.histo_destruction,'dd/mm/yyyy')
ELSE 'fourni le ' || to_char(v.histo_creation,'dd/mm/yyyy')
END fichier,
CASE
WHEN v.id IS NULL THEN 'non validée'
WHEN v.histo_destruction IS NOT NULL THEN 'histo ' || to_char(v.histo_destruction,'dd/mm/yyyy')
ELSE 'validée le ' || to_char(v.histo_creation,'dd/mm/yyyy')
END validation,
pj.histo_destruction pj_del,
i.id i_id,
d.id d_id,
pj.id pj_id,
pj.histo_destruction pj_del,
i.prenom || ' ' || i.nom_usuel i_nom,
i.annee_id annee,
tpj.code, tpj.libelle, pj.obligatoire, pj.force
from
f.id f_id,
v.id v_id
FROM
piece_jointe pj
JOIN dossier d ON d.id = pj.dossier_id AND 1 = ose_divers.comprise_entre( d.histo_creation, d.histo_destruction )
JOIN intervenant i ON i.id = d.intervenant_id AND 1 = ose_divers.comprise_entre( i.histo_creation, i.histo_destruction )
JOIN type_piece_jointe tpj ON tpj.id = pj.TYPE_PIECE_JOINTE_ID AND 1 = ose_divers.comprise_entre( tpj.histo_creation, tpj.histo_destruction )
where
LEFT JOIN piece_jointe_fichier pjf ON pjf.piece_jointe_id = pj.id
LEFT JOIN fichier f ON f.id = pjf.fichier_id
LEFT JOIN validation v ON v.id = pj.validation_id
WHERE
i.source_code = 87944;
i.id = 5573;
SELECT * FROM intervenant WHERE source_code = '20259';
......
......@@ -16,7 +16,8 @@ from
LEFT JOIN structure s ON s.id = a.structure_id AND s.histo_destruction IS NULL
WHERE
a.histo_destruction IS NULL
AND s.source_code IN ('12')
AND p.id = 219
--AND s.source_code IN ('12')
--AND src.code = 'OSE'
ORDER BY
structure, nom, source, role;
......
SELECT
c.id c_id,
c.histo_creation,
i.prenom || ' ' || i.nom_usuel intervenant,
s.libelle_court structure
FROM
contrat c
JOIN intervenant i ON i.id = c.intervenant_id
JOIN type_contrat tc ON tc.id = c.type_contrat_id
JOIN structure s ON s.id = c.structure_id
WHERE
i.id = 4554;
\ No newline at end of file
SELECT
i.id i_id,
i.nom_usuel || ' ' || i.prenom i_nom,
imd.*
FROM
indic_modif_dossier imd
JOIN intervenant i ON i.id = imd.intervenant_id
WHERE
i.id = 4554;
SELECT
*
FROM
dossier d
WHERE
d.intervenant_id = 4554;
-- ********************************************************************* --
-- * à faire AVANT avoir mis à jour le code source * --
-- ********************************************************************* --
BEGIN DBMS_SCHEDULER.disable(name=>'"OSE"."OSE_SRC_SYNC"', force => TRUE); END;
/
CREATE INDEX "OSE"."AII_FK_IDX" ON "OSE"."ADRESSE_INTERVENANT" ("INTERVENANT_ID");
DROP MATERIALIZED VIEW "OSE"."MV_CENTRE_COUT";
CREATE MATERIALIZED VIEW "OSE"."MV_CENTRE_COUT" ("LIBELLE","Z_ACTIVITE_ID","Z_TYPE_RESSOURCE_ID","Z_PARENT_ID","Z_STRUCTURE_ID","SOURCE_ID","SOURCE_CODE")
BUILD IMMEDIATE
USING INDEX REFRESH FORCE ON DEMAND
USING DEFAULT LOCAL ROLLBACK SEGMENT USING ENFORCED CONSTRAINTS
DISABLE QUERY REWRITE AS
SELECT DISTINCT
TRIM(B.ktext) libelle,
CASE
WHEN a.kostl like '%A' THEN 'accueil' -- Activité (au sens compta analytique) ne devant pas permettre la saisie de référentiel
WHEN a.kostl like '%B' THEN 'enseignement'
WHEN a.kostl like '%M' THEN 'pilotage'
END z_activite_id,
CASE
WHEN LENGTH(a.kostl) = 5 THEN 'paye-etat'
WHEN LENGTH(a.kostl) > 5 THEN 'ressources-propres'
END z_type_ressource_id,
NULL z_parent_id,
CASE WHEN A.kostl = 'P950DRRA' THEN 'ECODOCT' ELSE STR.CODE_HARPEGE END z_structure_id,
s.id source_id,
A.kostl source_code
FROM
sapsr3.csks@sifacp A,
sapsr3.cskt@sifacp B,
unicaen_corresp_structure_cc str,
source s
WHERE
s.code = 'SIFAC'
and A.kostl=B.kostl(+)
and A.kokrs=B.kokrs(+)
and substr( a.kostl, 2, 3 ) = str.code_sifac(+)
and B.mandt(+)='500'
and B.spras(+)='F'
and A.kokrs='UCBN'
and A.bkzkp !='X'
and a.kostl LIKE 'P%' AND (a.kostl like '%A' OR a.kostl like '%B' OR a.kostl like '%M')
AND SYSDATE BETWEEN to_date( NVL(A.datab,'10661231'), 'YYYYMMDD') AND to_date( NVL(A.datbi,'99991231'), 'YYYYMMDD')
AND STR.CODE_HARPEGE IS NOT NULL -- à désactiver pour trouver les structures non référencées dans la table de correspondance
UNION
SELECT
TRIM(A.post1) libelle,
CASE
WHEN a.kostl like '%A' THEN 'accueil'
WHEN a.fkstl like '%B' THEN 'enseignement'
WHEN a.fkstl like '%M' THEN 'pilotage'
END z_activite_id,
CASE
WHEN LENGTH(a.fkstl) = 5 THEN 'paye-etat'
WHEN LENGTH(a.fkstl) > 5 THEN 'ressources-propres'
END z_type_ressource_id,
A.fkstl z_parent_id,
CASE WHEN A.posid = 'P950DRRA' THEN 'ECODOCT' ELSE STR.CODE_HARPEGE END z_structure_id,
s.id source_id,
A.posid source_code
FROM
sapsr3.prps@sifacp A,
sapsr3.prte@sifacp B,
unicaen_corresp_structure_cc str,
source s
WHERE
s.code = 'SIFAC'
and A.pspnr=B.posnr(+)
and substr( A.fkstl, 2, 3 ) = str.code_sifac(+)
and A.pkokr='UCBN'
and B.mandt(+)='500'
and a.fkstl LIKE 'P%' AND (a.fkstl like '%A' OR a.kostl like '%B' OR a.fkstl like '%M')
AND SYSDATE BETWEEN to_date( NVL(B.pstrt,'10661231'), 'YYYYMMDD') AND to_date( NVL(B.pende,'99991231'), 'YYYYMMDD')
AND STR.CODE_HARPEGE IS NOT NULL;
CREATE OR REPLACE FORCE VIEW "OSE"."V_ELEMENT_TYPE_MODULATEUR"
( "ELEMENT_PEDAGOGIQUE_ID", "TYPE_MODULATEUR_ID"
) AS
SELECT
ep.id element_pedagogique_id,
tms.type_modulateur_id type_modulateur_id
FROM
element_pedagogique ep
JOIN structure s ON s.id = ep.structure_id
AND ose_divers.comprise_entre( s.histo_creation, s.histo_destruction ) = 1
JOIN type_modulateur_structure tms ON tms.structure_id = s.id
AND ose_divers.comprise_entre( tms.histo_creation, tms.histo_destruction ) = 1
AND ep.annee_id BETWEEN GREATEST(NVL(tms.annee_debut_id,0),ep.annee_id) AND LEAST(NVL(tms.annee_fin_id,9999),ep.annee_id)
UNION
SELECT
tm_ep.element_pedagogique_id element_pedagogique_id,
tm_ep.type_modulateur_id type_modulateur_id
FROM
type_modulateur_ep tm_ep
WHERE
ose_divers.comprise_entre( tm_ep.histo_creation, tm_ep.histo_destruction ) = 1;
CREATE OR REPLACE FORCE VIEW "OSE"."V_ELEMENT_TYPE_INTERVENTION"
( "ELEMENT_PEDAGOGIQUE_ID", "TYPE_INTERVENTION_ID"
) AS
SELECT
ep.id element_pedagogique_id,
ti.id type_intervention_id
FROM
element_pedagogique ep
JOIN structure s_ep ON s_ep.id = ep.structure_id
JOIN type_intervention ti ON 1=1
LEFT JOIN type_intervention_ep ti_ep ON ti_ep.element_pedagogique_id = ep.id
AND ti_ep.type_intervention_id = ti.id
AND 1 = ose_divers.comprise_entre( ti_ep.histo_creation, ti_ep.histo_destruction )
LEFT JOIN type_intervention_structure ti_s ON s_ep.structure_niv2_id = ti_s.structure_id
AND ti_s.type_intervention_id = ti.id
AND 1 = ose_divers.comprise_entre( ti_s.histo_creation, ti_s.histo_destruction )
AND ep.annee_id BETWEEN GREATEST(NVL(ti_s.annee_debut_id,0),ep.annee_id) AND LEAST(NVL(ti_s.annee_fin_id,9999),ep.annee_id)
WHERE
CASE
WHEN TI_EP.VISIBLE IS NULL THEN
CASE
WHEN TI_S.VISIBLE IS NULL THEN TI.VISIBLE
ELSE TI_S.VISIBLE
END
ELSE TI_EP.VISIBLE
END = 1
ORDER BY
TI.ORDRE;
ALTER TABLE "OSE"."TYPE_MODULATEUR_STRUCTURE" ADD ("ANNEE_DEBUT_ID" NUMBER(*,0));
ALTER TABLE "OSE"."TYPE_MODULATEUR_STRUCTURE" ADD ("ANNEE_FIN_ID" NUMBER(*,0));
ALTER TABLE "OSE"."TYPE_MODULATEUR_STRUCTURE" ADD CONSTRAINT "TMS_ANNEE_DEBUT_FK" FOREIGN KEY ("ANNEE_DEBUT_ID") REFERENCES "OSE"."ANNEE"("ID") ENABLE;
ALTER TABLE "OSE"."TYPE_MODULATEUR_STRUCTURE" ADD CONSTRAINT "TMS_ANNEE_FIN_FK" FOREIGN KEY ("ANNEE_FIN_ID") REFERENCES "OSE"."ANNEE"("ID") ENABLE;
ALTER TABLE "OSE"."TYPE_INTERVENTION_STRUCTURE" ADD ("ANNEE_DEBUT_ID" NUMBER(*,0));
ALTER TABLE "OSE"."TYPE_INTERVENTION_STRUCTURE" ADD ("ANNEE_FIN_ID" NUMBER(*,0));
ALTER TABLE "OSE"."TYPE_INTERVENTION_STRUCTURE" ADD CONSTRAINT "TIS_ANNEE_DEBUT_FK" FOREIGN KEY ("ANNEE_DEBUT_ID") REFERENCES "OSE"."ANNEE"("ID") ENABLE;
ALTER TABLE "OSE"."TYPE_INTERVENTION_STRUCTURE" ADD CONSTRAINT "TIS_ANNEE_FIN_FK" FOREIGN KEY ("ANNEE_FIN_ID") REFERENCES "OSE"."ANNEE"("ID") ENABLE;
ALTER TABLE "OSE"."INTERVENANT" ADD ("MONTANT_INDEMNITE_FC" FLOAT(126));
UPDATE "OSE"."TYPE_INTERVENTION_STRUCTURE" SET ANNEE_FIN_ID = 2014 WHERE type_intervention_id = 10;
INSERT INTO CC_ACTIVITE (
ID,
CODE,
LIBELLE,
FI,
FA,
FC,
FC_MAJOREES,
REFERENTIEL,
HISTO_CREATION, HISTO_CREATEUR_ID,
HISTO_MODIFICATION, HISTO_MODIFICATEUR_ID
) VALUES (
CC_ACTIVITE_id_seq.nextval,
'accueil',
'Accueil',
1,
1,
1,
1,
0,
sysdate, (select id from utilisateur where username='lecluse'),
sysdate, (select id from utilisateur where username='lecluse')
);
-- ********************************************************************* --
-- * à faire APRÈS avoir mis à jour le code source * --
-- ********************************************************************* --
BEGIN DBMS_SCHEDULER.enable(name=>'"OSE"."OSE_SRC_SYNC"'); END;
/
BEGIN OSE_FORMULE.CALCULER_TOUT; END;
/
\ No newline at end of file
......@@ -19,7 +19,7 @@ return [
],
'may_terminate' => true,
'child_routes' => [
'default' => [
/*'default' => [
'type' => 'Segment',
'options' => [
'route' => '/:action[/:intervenant]',
......@@ -31,19 +31,25 @@ return [
'action' => 'index',
],
],
],
],*/
'rechercher' => [
'type' => 'Segment',
'type' => 'Literal',
'options' => [
'route' => '/rechercher[/:intervenant]',
'constraints' => [
'intervenant' => '[0-9]*',
],
'route' => '/rechercher',
'defaults' => [
'action' => 'rechercher',
],
],
],
'recherche' => [
'type' => 'Literal',
'options' => [
'route' => '/recherche',
'defaults' => [
'action' => 'recherche',
],
],
],
'fiche' => [
'type' => 'Segment',
'options' => [
......@@ -470,7 +476,7 @@ return [
],
'bjyauthorize' => [
'guards' => [
'Application\Guard\PrivilegeController' => [
Guard\PrivilegeController::class => [
[
'controller' => 'Application\Controller\Intervenant',
'action' => ['rechercher'],
......@@ -505,7 +511,7 @@ return [
[
'controller' => 'Application\Controller\Intervenant',
'action' => ['formule-totaux-hetd'],
'roles' => $R_ALL, /** @todo à sécuriser à l'aide d'une assertion pour éviter qu'un intervenant ne puisse voir les HETD des autres */
'roles' => $R_ALL,
'assertion' => 'IntervenantAssertion',
],
[
......@@ -520,7 +526,7 @@ return [
],
[
'controller' => 'Application\Controller\Intervenant',
'action' => ['choisir', 'rechercher', 'search'],
'action' => ['choisir', 'rechercher', 'recherche'],
'roles' => [R_COMPOSANTE, R_ADMINISTRATEUR],
],
[
......@@ -536,7 +542,7 @@ return [
],
],
'rule_providers' => [
'Application\Provider\Rule\PrivilegeRuleProvider' => [
Provider\Rule\PrivilegeRuleProvider::class => [
'allow' => [
[
'privileges' => Privilege::MODIF_SERVICE_DU_EDITION,
......@@ -560,9 +566,9 @@ return [
],
'controllers' => [
'invokables' => [
'Application\Controller\Intervenant' => 'Application\Controller\IntervenantController',
'Application\Controller\Dossier' => 'Application\Controller\DossierController',
'Application\Controller\ModificationServiceDu' => 'Application\Controller\ModificationServiceDuController',
'Application\Controller\Intervenant' => Controller\IntervenantController::class,
'Application\Controller\Dossier' => Controller\DossierController::class,
'Application\Controller\ModificationServiceDu' => Controller\ModificationServiceDuController::class,
],
'aliases' => [
'IntervenantController' => 'Application\Controller\Intervenant',
......@@ -570,41 +576,42 @@ return [
],
'service_manager' => [
'invokables' => [
'ApplicationIntervenant' => 'Application\\Service\\Intervenant',
'ApplicationMotifModificationServiceDu' => 'Application\\Service\\MotifModificationServiceDu',
'ApplicationCivilite' => 'Application\\Service\\Civilite',
'ApplicationStatutIntervenant' => 'Application\\Service\\StatutIntervenant',
'ApplicationTypeIntervenant' => 'Application\\Service\\TypeIntervenant',
'ApplicationDossier' => 'Application\\Service\\Dossier',
'IntervenantAssertion' => 'Application\\Assertion\\IntervenantAssertion',
'ModificationServiceDuAssertion' => 'Application\\Assertion\\ModificationServiceDuAssertion',
'PeutSaisirDossierRule' => 'Application\Rule\Intervenant\PeutSaisirDossierRule',
'PeutSaisirServiceRule' => 'Application\Rule\Intervenant\PeutSaisirServiceRule',
'PeutSaisirReferentielRule' => 'Application\Rule\Intervenant\PeutSaisirReferentielRule',
'PossedeDossierRule' => 'Application\Rule\Intervenant\PossedeDossierRule',
'ServiceValideRule' => 'Application\Rule\Intervenant\ServiceValideRule',
'PeutValiderServiceRule' => 'Application\Rule\Intervenant\PeutValiderServiceRule',
'ReferentielValideRule' => 'Application\Rule\Intervenant\ReferentielValideRule',
'NecessiteAgrementRule' => 'Application\Rule\Intervenant\NecessiteAgrementRule',
'AgrementFourniRule' => 'Application\Rule\Intervenant\AgrementFourniRule',
'EstAffecteRule' => 'Application\Rule\Intervenant\EstAffecteRule',
'ApplicationIntervenant' => Service\Intervenant::class,
'ApplicationMotifModificationServiceDu' => Service\MotifModificationServiceDu::class,
'ApplicationCivilite' => Service\Civilite::class,
'ApplicationStatutIntervenant' => Service\StatutIntervenant::class,
'ApplicationTypeIntervenant' => Service\TypeIntervenant::class,
'ApplicationDossier' => Service\Dossier::class,
'IntervenantAssertion' => Assertion\IntervenantAssertion::class,
'ModificationServiceDuAssertion' => Assertion\ModificationServiceDuAssertion::class,
'PeutSaisirDossierRule' => Rule\Intervenant\PeutSaisirDossierRule::class,
'PeutSaisirServiceRule' => Rule\Intervenant\PeutSaisirServiceRule::class,
'PeutSaisirReferentielRule' => Rule\Intervenant\PeutSaisirReferentielRule::class,
'PossedeDossierRule' => Rule\Intervenant\PossedeDossierRule::class,
'ServiceValideRule' => Rule\Intervenant\ServiceValideRule::class,
'PeutValiderServiceRule' => Rule\Intervenant\PeutValiderServiceRule::class,
'ReferentielValideRule' => Rule\Intervenant\ReferentielValideRule::class,
'NecessiteAgrementRule' => Rule\Intervenant\NecessiteAgrementRule::class,
'AgrementFourniRule' => Rule\Intervenant\AgrementFourniRule::class,
'EstAffecteRule' => Rule\Intervenant\EstAffecteRule::class,
],
],
'view_helpers' => [
'invokables' => [
'formuleTotauxHetd' => 'Application\View\Helper\Intervenant\TotauxHetdViewHelper',
'Intervenant' => 'Application\View\Helper\Intervenant\IntervenantViewHelper',
'formuleTotauxHetd' => View\Helper\Intervenant\TotauxHetdViewHelper::class,
'Intervenant' => View\Helper\Intervenant\IntervenantViewHelper::class,
],
'initializers' => [
],
],
'form_elements' => [
'invokables' => [
'IntervenantDossier' => 'Application\Form\Intervenant\Dossier',
'IntervenantHeuresCompForm' => 'Application\Form\Intervenant\HeuresCompForm',
'IntervenantModificationServiceDuForm' => 'Application\Form\Intervenant\ModificationServiceDuForm',
'IntervenantModificationServiceDuFieldset' => 'Application\Form\Intervenant\ModificationServiceDuFieldset',
'IntervenantMotifModificationServiceDuFieldset' => 'Application\Form\Intervenant\MotifModificationServiceDuFieldset',
'intervenantForm' => Form\Intervenant\IntervenantForm::class,
'IntervenantDossier' => Form\Intervenant\Dossier::class,
'IntervenantHeuresCompForm' => Form\Intervenant\HeuresCompForm::class,
'IntervenantModificationServiceDuForm' => Form\Intervenant\ModificationServiceDuForm::class,
'IntervenantModificationServiceDuFieldset' => Form\Intervenant\ModificationServiceDuFieldset::class,
'IntervenantMotifModificationServiceDuFieldset' => Form\Intervenant\MotifModificationServiceDuFieldset::class,
],
],
];
......@@ -24,7 +24,7 @@ class Role extends NamedRole
public function __construct($id = self::ROLE_ID, $parent = 'user', $name = 'Rôle', $description = null, $selectable = true)
public function __construct($id = self::ROLE_ID, $parent = 'user', $name = 'Rôle inconnu', $description = null, $selectable = true)
{
parent::__construct($id, $parent, $name, $description, $selectable);
}
......
......@@ -2,11 +2,16 @@
namespace Application\Controller;
use Application\Form\Intervenant\Traits\HeuresCompFormAwareTrait;
use Application\Traits\SessionContainerTrait;
use Zend\Mvc\Controller\AbstractActionController;
use Common\Exception\LogicException;
use Application\Entity\Db\Intervenant;
use Application\Service\Workflow\WorkflowIntervenantAwareInterface;
use Application\Service\Workflow\WorkflowIntervenantAwareTrait;
use Application\Service\Traits\ContextAwareTrait;
use Application\Service\Traits\IntervenantAwareTrait;
use Application\Service\Traits\TypeHeuresAwareTrait;
/**
* Description of IntervenantController
......@@ -14,160 +19,99 @@ use Application\Service\Workflow\WorkflowIntervenantAwareTrait;
* @method \Doctrine\ORM\EntityManager em()
* @method \Application\Controller\Plugin\Context context()
*
* @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr>
*/
class IntervenantController extends AbstractActionController implements WorkflowIntervenantAwareInterface
{
use WorkflowIntervenantAwareTrait,
\Application\Service\Traits\ContextAwareTrait,
\Application\Service\Traits\IntervenantAwareTrait,
\Application\Service\Traits\TypeHeuresAwareTrait
;
use WorkflowIntervenantAwareTrait;
use ContextAwareTrait;
use IntervenantAwareTrait;
use TypeHeuresAwareTrait;
use HeuresCompFormAwareTrait;
use SessionContainerTrait;
/**
* @var Intervenant
*/
private $intervenant;
/**
*
* @return \Zend\View\Model\ViewModel
*/
public function indexAction()
{
$role = $this->getServiceContext()->getSelectedIdentityRole();
if ($role instanceof \Application\Acl\IntervenantRole) {
if ($intervenant = $role->getIntervenant()) {
// redirection selon le workflow
$intervenant = $role->getIntervenant();
$wf = $this->getWorkflowIntervenant()->setIntervenant($intervenant);
$url = $wf->getCurrentStepUrl();
if (!$url) {
$url = $wf->getStepUrl($wf->getLastStep());
}
return $this->redirect()->toUrl($url);
}
return $this->redirect()->toRoute('intervenant/rechercher');
}
public function rechercherAction()
{
$view = $this->choisirAction();
if ($this->intervenant) {
$this->addIntervenantChoisiRecent($this->intervenant);
return $this->redirect()->toRoute('intervenant/fiche', ['intervenant' => $this->intervenant->getSourceCode()]);
$recents = $this->getIntervenantsRecents();
return compact('recents');
}
$view->setTemplate('application/intervenant/choisir');
return $view;
}
/**
*
* @return \Zend\View\Model\ViewModel
*/
public function choisirAction()
{
$intervenant = $this->context()->intervenantFromQuery();
$url = $this->url()->fromRoute('recherche', ['action' => 'intervenantFind']);
$interv = new \UnicaenApp\Form\Element\SearchAndSelect('interv');
$interv->setAutocompleteSource($url)
->setRequired(true)
->setSelectionRequired(true)
->setLabel("Recherchez l'intervenant concerné :")
->setAttributes(['title' => "Saisissez le nom suivi éventuellement du prénom (2 lettres au moins)"]);
if ($intervenant) {
$f = new \Common\Filter\IntervenantTrouveFormatter();
$interv->setValue($f->filter($intervenant));
}
$form = new \Zend\Form\Form('search');
$form->setAttributes([
'action' => $this->getRequest()->getRequestUri(),
'class' => 'intervenant-rech']);
$form->add($interv);
if ($this->getRequest()->isPost()) {
$data = $this->getRequest()->getPost();
$form->setData($data);
if ($form->isValid()) {
$sourceCode = $form->get('interv')->getValueId();
$this->getRequest()->getQuery()->set('sourceCode', $sourceCode);
$this->intervenant = $this->importerAction()->getVariable('intervenant');
if (($redirect = $this->params()->fromQuery('redirect'))) {
$redirect = str_replace('__sourceCode__', $sourceCode, $redirect);
return $this->redirect()->toUrl($redirect);
}
}
}
$viewModel = new \Zend\View\Model\ViewModel();
$viewModel
->setTemplate('application/intervenant/choisir')
->setVariables([
'form' => $form,
'title' => "Rechercher un intervenant",
'recents' => $this->getIntervenantsChoisisRecents()]);
return $viewModel;
}
public function importerAction()
public function rechercheAction()
{
if (!($sourceCode = $this->params()->fromQuery('sourceCode', $this->params()->fromPost('sourceCode')))) {
throw new LogicException("Aucun code source d'intervenant spécifié.");
}
$this->em()->getFilters()->enable('historique')->init([
Intervenant::class,
]);
$intervenant = $this->getServiceIntervenant()->importer($sourceCode);
$critere = $this->params()->fromPost('critere');
$intervenants = $this->getServiceIntervenant()->recherche($critere, 21);
$view = new \Zend\View\Model\ViewModel();
$view->setVariables(['intervenant' => $intervenant]);
return $view;
return compact('intervenants');
}
public function voirAction()
{
$role = $this->getServiceContext()->getSelectedIdentityRole();
$intervenant = $role->getIntervenant() ?: $this->getEvent()->getParam('intervenant');
if ($role instanceof \Application\Acl\IntervenantRole) {
$intervenant = $role->getIntervenant();
} else {
$intervenant = $this->getEvent()->getParam('intervenant');
if (! $intervenant){
throw new \LogicException('Intervenant introuvable');
}
$view = new \Zend\View\Model\ViewModel();
$view->setVariables(compact('intervenant', 'role'));
$this->addIntervenantRecent($intervenant);
return $view;
return compact('intervenant', 'role');
}
public function apercevoirAction()
{
$intervenant = $this->context()->mandatory()->intervenantFromRoute();
$import = $this->getServiceLocator()->get('ImportProcessusImport');
$changements = $import->intervenantGetDifferentiel($intervenant);
$role = $this->getServiceContext()->getSelectedIdentityRole();
$intervenant = $role->getIntervenant() ?: $this->getEvent()->getParam('intervenant');
$title = "Aperçu d'un intervenant";
$short = $this->params()->fromQuery('short', false);
$view = new \Zend\View\Model\ViewModel();
$view->setVariables(compact('intervenant', 'changements', 'title', 'short'));
return $view;
return compact('intervenant', 'title');
}
public function voirHeuresCompAction()
{
$this->em()->getFilters()->enable('historique')->init([
'Application\Entity\Db\Service',
'Application\Entity\Db\VolumeHoraire'
\Application\Entity\Db\Service::class,
\Application\Entity\Db\VolumeHoraire::class,
]);
$intervenant = $this->context()->mandatory()->intervenantFromRoute();
$intervenant = $this->getEvent()->getParam('intervenant');
/* @var $intervenant \Application\Entity\Db\Intervenant */
$form = $this->getFormHeuresComp();
$form = $this->getFormIntervenantHeuresComp();
$typeVolumeHoraire = $this->context()->typeVolumeHoraireFromQuery('type-volume-horaire', $form->get('type-volume-horaire')->getValue());
/* @var $typeVolumeHoraire \Application\Entity\Db\TypeVolumeHoraire */
......@@ -229,13 +173,16 @@ class IntervenantController extends AbstractActionController implements Workflow
$totalHeures = 0;
$fvhs = $service->getFormuleVolumeHoraire($typeVolumeHoraire, $etatVolumeHoraire);
foreach( $fvhs as $fvh ){ /* @var $fvh \Application\Entity\Db\FormuleVolumeHoraire */
foreach ($fvhs as $fvh) {
/* @var $fvh \Application\Entity\Db\FormuleVolumeHoraire */
$totalHeures += $fvh->getHeures();
if (! isset($typesIntervention[$fvh->getTypeIntervention()->getId()])) $typesIntervention[$fvh->getTypeIntervention()->getId()] = [
if (!isset($typesIntervention[$fvh->getTypeIntervention()->getId()])) {
$typesIntervention[$fvh->getTypeIntervention()->getId()] = [
'type-intervention' => $fvh->getTypeIntervention(),
'heures' => 0,
'hetd' => 0,
];
}
$typesIntervention[$fvh->getTypeIntervention()->getId()]['heures'] += $fvh->getHeures();
$hetd = $fvh->getVolumeHoraire()->getFormuleResultatVolumeHoraire()->first()->getTotal();
$typesIntervention[$fvh->getTypeIntervention()->getId()]['hetd'] += $hetd;
......@@ -254,7 +201,7 @@ class IntervenantController extends AbstractActionController implements Workflow
'heures' => [],
'hetd' => [
'total' => 0,
]
],
];
foreach ($typesHeures as $typeHeures) {
......@@ -304,32 +251,43 @@ class IntervenantController extends AbstractActionController implements Workflow
}
}
usort($data['types-intervention'], function($ti1,$ti2){ return $ti1->getOrdre() > $ti2->getOrdre(); });
usort($data['th-taux'], function($ti1,$ti2){ return $ti1->getOrdre() > $ti2->getOrdre(); });
usort($data['th-service'], function($ti1,$ti2){ return $ti1->getOrdre() > $ti2->getOrdre(); });
usort($data['th-compl'], function($ti1,$ti2){ return $ti1->getOrdre() > $ti2->getOrdre(); });
usort($data['types-intervention'], function ($ti1, $ti2) {
return $ti1->getOrdre() > $ti2->getOrdre();
});
usort($data['th-taux'], function ($ti1, $ti2) {
return $ti1->getOrdre() > $ti2->getOrdre();
});
usort($data['th-service'], function ($ti1, $ti2) {
return $ti1->getOrdre() > $ti2->getOrdre();
});
usort($data['th-compl'], function ($ti1, $ti2) {
return $ti1->getOrdre() > $ti2->getOrdre();
});
return compact('form', 'intervenant', 'typeVolumeHoraire', 'etatVolumeHoraire', 'data');
}
public function formuleTotauxHetdAction()
{
$intervenant = $this->context()->mandatory()->intervenantFromRoute(); /* @var $intervenant Intervenant */
$intervenant = $this->getEvent()->getParam('intervenant');
/* @var $intervenant Intervenant */
$typeVolumeHoraire = $this->getEvent()->getParam('typeVolumeHoraire');
$etatVolumeHoraire = $this->getEvent()->getParam('etatVolumeHoraire');
$formuleResultat = $intervenant->getUniqueFormuleResultat($typeVolumeHoraire, $etatVolumeHoraire);
return compact('formuleResultat');
}
public function feuilleDeRouteAction()
{
$role = $this->getServiceContext()->getSelectedIdentityRole();
if ($role instanceof \Application\Acl\IntervenantRole) {
$intervenant = $role->getIntervenant();
}
else {
$intervenant = $this->context()->mandatory()->intervenantFromRoute();
}
$intervenant = $role->getIntervenant() ?: $this->getEvent()->getParam('intervenant');
/* @var $intervenant Intervenant */
if ($intervenant->estPermanent()) {
throw new \Common\Exception\MessageException("Pas encore implémenté pour un permanent");
......@@ -337,80 +295,79 @@ class IntervenantController extends AbstractActionController implements Workflow
$title = sprintf("Feuille de route <small>%s</small>", $intervenant);
$wf = $this->getWorkflowIntervenant()->setIntervenant($intervenant); /* @var $wf \Application\Service\Workflow\WorkflowIntervenant */
$wf = $this->getWorkflowIntervenant()->setIntervenant($intervenant);
/* @var $wf \Application\Service\Workflow\WorkflowIntervenant */
$wf->init();
$view = new \Zend\View\Model\ViewModel();
$view->setVariables(compact('intervenant', 'title', 'wf', 'role'));
if ($wf->getCurrentStep()) {
// var_dump($wf->getStepUrl($wf->getCurrentStep()));
}
return $view;
return compact('intervenant', 'title', 'wf', 'role');
}
private $intervenantsChoisisRecentsSessionContainer;
/**
* @return \Zend\Session\Container
*/
protected function getIntervenantsChoisisRecentsSessionContainer()
{
if (null === $this->intervenantsChoisisRecentsSessionContainer) {
$container = new \Zend\Session\Container(get_class() . '_IntervenantsChoisisRecents');
$container->setExpirationSeconds(3*60*60); // 3 heures
$this->intervenantsChoisisRecentsSessionContainer = $container;
}
return $this->intervenantsChoisisRecentsSessionContainer;
}
/**
*
* @param bool $clear
* @return array
*/
protected function getIntervenantsChoisisRecents($clear = false)
protected function getIntervenantsRecents()
{
$container = $this->getIntervenantsChoisisRecentsSessionContainer();
if ($clear) {
unset($container->intervenants);
}
if (!isset($container->intervenants)) {
$container->intervenants = [];
$container = $this->getSessionContainer();
if (isset($container->recents)) {
return $container->recents;
} else {
return [];
}
return $container->intervenants;
}
/**
*
* @param \Application\Entity\Db\Intervenant $intervenant
*
* @return \Application\Controller\IntervenantController
*/
protected function addIntervenantChoisiRecent(Intervenant $intervenant)
protected function addIntervenantRecent(Intervenant $intervenant)
{
$container = $this->getIntervenantsChoisisRecentsSessionContainer();
$intervenants = (array) $container->intervenants;
if (!array_key_exists($intervenant->getId(), $intervenants)) {
$intervenants["" . $intervenant] = [
'id' => $intervenant->getId(),
'sourceCode' => $intervenant->getSourceCode(),
'nom' => "" . $intervenant,
];
ksort($intervenants);
$container = $this->getSessionContainer();
if (!isset($container->recents)) {
$container->recents = [];
}
$container->intervenants = $intervenants;
return $this;
if (count($container->recents) > 4 && !isset($container->recents[$intervenant->getSourceCode()])) {
$prem = (int)date('U');
foreach ($container->recents as $i) {
$horo = $i['__horo_ajout__'];
if ($horo) {
if ($prem >= $horo) $prem = $horo;
}
}
foreach ($container->recents as $index => $i) {
$horo = $i['__horo_ajout__'];
if ($horo == $prem) {
unset($container->recents[$index]);
}
}
}
/**
*
* @return \Application\Form\Intervenant\HeuresCompForm
*/
protected function getFormHeuresComp()
{
return $this->getServiceLocator()->get('FormElementManager')->get('IntervenantHeuresCompForm');
$container->recents[$intervenant->getSourceCode()] = [
'civilite' => $intervenant->getCivilite()->getLibelleLong(),
'nom' => $intervenant->getNomUsuel(),
'prenom' => $intervenant->getPrenom(),
'date-naissance' => $intervenant->getDateNaissance(),
'structure' => $intervenant->getStructure()->getLibelleCourt(),
'numero-personnel' => $intervenant->getSourceCode(),
'__horo_ajout__' => (int)date('U'),
];
uasort($container->recents, function ($a, $b) {
return $a['nom'] . ' ' . $a['prenom'] > $b['nom'] . ' ' . $b['prenom'];
});
return $this;
}
}
......@@ -72,7 +72,7 @@ class IdentityProvider implements ServiceLocatorAwareInterface, ChainableProvide
/**
* @todo attention : plusieurs intervenants pourront remonter si on peut leur donner plusieurs statuts par an!!
*/
$intervenant = $this->getServiceIntervenant()->importer($utilisateurCode);
$intervenant = $this->getServiceIntervenant()->getBySourceCode($utilisateurCode);
$personnel = $this->getServicePersonnel()->getBySourceCode($utilisateurCode);
/**
......
......@@ -97,7 +97,7 @@ class RoleProvider implements ProviderInterface, EntityManagerAwareInterface
if ($ldapUser = $serviceAuthUserContext->getLdapUser()) {
$numeroPersonnel = (integer)$ldapUser->getSupannEmpId();
$intervenant = $this->getServiceIntervenant()->importer($numeroPersonnel);
$intervenant = $this->getServiceIntervenant()->getBySourceCode($numeroPersonnel);
$personnel = $this->getServicePersonnel()->getBySourceCode($numeroPersonnel);
} else {
$intervenant = null;
......
......@@ -6,8 +6,8 @@ use Application\Acl\Role;
use Application\Entity\Db\Etablissement as EntityEtablissement;
use Application\Entity\Db\Annee as AnneeEntity;
use Application\Entity\Db\Structure as StructureEntity;
use Application\Traits\SessionContainerTrait;
use DateTime;
use Zend\Session\Container;
/**
* Service fournissant les différents contextes de fonctionnement de l'application.
......@@ -21,7 +21,7 @@ class Context extends AbstractService
use Traits\IntervenantAwareTrait;
use Traits\ParametresAwareTrait;
use Traits\StructureAwareTrait;
use SessionContainerTrait;
/**
* selectedIdentityRole
......@@ -67,12 +67,6 @@ class Context extends AbstractService
*/
protected $parametres;
/**
* @var Container
*/
protected $sessionContainer;
......@@ -88,20 +82,15 @@ class Context extends AbstractService
if ($authUserContext->getIdentity()) {
$this->selectedIdentityRole = $authUserContext->getSelectedIdentityRole();
if (
$this->selectedIdentityRole instanceof \Application\Acl\IntervenantRole
&& ! $this->selectedIdentityRole->getIntervenant()
){
// import automatique
$iSourceCode = (int)$authUserContext->getLdapUser()->getSupannEmpId();
$intervenant = $this->getServiceIntervenant()->importer($iSourceCode);
$this->selectedIdentityRole->setIntervenant( $intervenant ); // injection à la volée de l'intervenant
}
if (! $this->selectedIdentityRole instanceof Role) $this->selectedIdentityRole = new Role();
}
}
return $this->selectedIdentityRole;
}
/**
*
* @return EntityEtablissement
......@@ -115,13 +104,17 @@ class Context extends AbstractService
}
$this->etablissement = $this->getServiceEtablissement()->get($sc->etablissement);
}
return $this->etablissement;
}
/**
*
* @param EntityEtablissement $etablissement
* @param boolean $updateParametres
*
* @return self
*/
public function setEtablissement(EntityEtablissement $etablissement, $updateParametres = false)
......@@ -131,9 +124,12 @@ class Context extends AbstractService
if ($updateParametres) {
$this->getServiceParametres()->etablissement = (string)$etablissement->getId();
}
return $this;
}
/**
* Retourne l'année courante.
* C'est à dire :
......@@ -152,13 +148,17 @@ class Context extends AbstractService
$this->annee = $this->getServiceAnnee()->get($sc->annee);
}
return $this->annee;
}
/**
* Retourne l'année N - x, N étant l'année courante.
*
* @param int $x Entier supérieur ou égal à zéro
*
* @return AnneeEntity
*/
public function getAnneeNmoins($x)
......@@ -166,6 +166,8 @@ class Context extends AbstractService
return $this->getServiceAnnee()->getNmoins($this->getAnnee(), $x);
}
/**
*
* @return AnneeEntity
......@@ -175,9 +177,12 @@ class Context extends AbstractService
if (!$this->anneePrecedente) {
$this->anneePrecedente = $this->getServiceAnnee()->getPrecedente($this->getAnnee());
}
return $this->anneePrecedente;
}
/**
*
* @return AnneeEntity
......@@ -187,13 +192,17 @@ class Context extends AbstractService
if (!$this->anneeSuivante) {
$this->anneeSuivante = $this->getServiceAnnee()->getSuivante($this->getAnnee());
}
return $this->anneeSuivante;
}
/**
*
* @param AnneeEntity $annee
* @param boolean $updateParametres
*
* @return self
*/
public function setAnnee(AnneeEntity $annee, $updateParametres = false)
......@@ -206,9 +215,12 @@ class Context extends AbstractService
/* Rafraîchit les années précédentes et suivantes par la même occasion!! */
$this->getAnneePrecedente();
$this->getAnneeSuivante();
return $this;
}
/**
*
* @return DateTime
......@@ -219,20 +231,27 @@ class Context extends AbstractService
if (!$sc->offsetExists('dateObservation')) {
$sc->dateObservation = null;
}
return $sc->dateObservation;
}
/**
*
* @param DateTime $dateObservation
*
* @return self
*/
public function setDateObservation(DateTime $dateObservation)
{
$sc->dateObservation = $dateObservation;
return $this;
}
/**
*
* @return DateTime
......@@ -246,12 +265,16 @@ class Context extends AbstractService
$this->getServiceParametres()->date_fin_saisie_permanents
);
}
return $sc->dateFinSaisiePermanents;
}
/**
*
* @param DateTime $dateFinSaisiePermanents
*
* @return self
*/
public function setDateFinSaisiePermanents(DateTime $dateFinSaisiePermanents, $updateParametres = false)
......@@ -260,9 +283,12 @@ class Context extends AbstractService
if ($updateParametres) {
$this->getServiceParametres()->date_fin_saisie_permanents = $sc->dateFinSaisiePermanents->format('d/m/Y');
}
return $this;
}
/**
*
* @return StructureEntity
......@@ -285,13 +311,17 @@ class Context extends AbstractService
}
$this->structure = $this->getServiceStructure()->get($sc->structure);
}
return $this->structure;
}
/**
*
* @param StructureEntity $structure
* @param boolean $updateParametres
*
* @return self
*/
public function setStructure($structure)
......@@ -303,9 +333,12 @@ class Context extends AbstractService
$this->structure = null;
$this->getSessionContainer()->structure = null;
}
return $this;
}
/**
* Détermine si l'application était opérationnelle l'année spécifiée.
*
......@@ -313,6 +346,7 @@ class Context extends AbstractService
* l'application était opérationnelle.
*
* @param AnneeEntity $annee
*
* @return boolean
*/
public function applicationExists(AnneeEntity $annee)
......@@ -322,16 +356,4 @@ class Context extends AbstractService
return (bool)$found;
}
/**
* @return Container
*/
protected function getSessionContainer()
{
if (null === $this->sessionContainer) {
$this->sessionContainer = new Container(__CLASS__);
}
return $this->sessionContainer;
}
}
\ No newline at end of file
......@@ -11,6 +11,7 @@ use Application\Service\Traits\StatutIntervenantAwareTrait;
use Common\Exception\RuntimeException;
use Doctrine\ORM\QueryBuilder;
use Import\Processus\Import;
use UnicaenApp\Util;
/**
* Description of Intervenant
......@@ -23,6 +24,64 @@ class Intervenant extends AbstractEntityService
/**
* @param string $critere
* @param integer $limit
*
* @return array
*/
public function recherche($critere, $limit = 50)
{
if (strlen($critere) < 2) return [];
$anneeId = (int)$this->getServiceContext()->getAnnee()->getId();
$critere = Util::reduce($critere);
$criteres = explode('_', $critere);
$sql = 'SELECT * FROM V_INTERVENANT_RECHERCHE WHERE rownum <= ' . (int)$limit . ' AND annee_id = ' . $anneeId;
$sqlCri = '';
$criCode = 0;
foreach ($criteres as $c) {
$cc = (int)$c;
if (0 === $cc) {
if ($sqlCri != '') $sqlCri .= ' AND ';
$sqlCri .= 'critere LIKE q\'[%' . $c . '%]\'';
} else {
$criCode = $cc;
}
}
$orc = '';
if ($sqlCri != '') {
$orc[] = '(' . $sqlCri . ')';
}
if ($criCode) {
$orc[] = 'source_code LIKE \'%' . $criCode . '%\'';
}
$orc = implode(' OR ', $orc);
$sql .= ' AND (' . $orc . ') ORDER BY nom_usuel, prenom';
// sqlDump($sql);
$stmt = $this->getEntityManager()->getConnection()->executeQuery($sql);
$intervenants = [];
while ($r = $stmt->fetch()) {
$intervenants[$r['SOURCE_CODE']] = [
'civilite' => $r['CIVILITE'],
'nom' => $r['NOM_USUEL'],
'prenom' => $r['PRENOM'],
'date-naissance' => new \DateTime($r['DATE_NAISSANCE']),
'structure' => $r['STRUCTURE'],
'numero-personnel' => $r['SOURCE_CODE'],
];
}
return $intervenants;
}
/**
* Recherche par :
* - id source exact (numéro Harpege ou autre),
......@@ -98,7 +157,18 @@ class Intervenant extends AbstractEntityService
$annee = $this->getServiceContext()->getAnnee();
}
return $this->getRepo()->findOneBy(['sourceCode' => $sourceCode, 'annee' => $annee->getId()]);
$findParams = ['sourceCode' => $sourceCode, 'annee' => $annee->getId()];
$repo = $this->getRepo();
$result = $repo->findOneBy($findParams);
if (!$result) {
$import = $this->getServiceLocator()->get('importProcessusImport');
/* @var $import Import */
$import->intervenant($sourceCode);
$result = $repo->findOneBy($findParams); // on retente
}
return $result;
}
......@@ -226,10 +296,8 @@ class Intervenant extends AbstractEntityService
/* @var $import Import */
$import->intervenant($sourceCode);
$repo = $this->getEntityManager()->getRepository($this->getEntityClass());
if (!($intervenant = $repo->findOneBySourceCode($sourceCode))) {
throw new RuntimeException("Vous n'êtes pas autorisé à vous connecter à OSE avec ce compte. Vous vous prions de vous rapprocher de votre composante pour en obtenir un valide.");
if (!($intervenant = $this->getRepo()->findOneBySourceCode($sourceCode))) {
// throw new RuntimeException("Vous n'êtes pas autorisé à vous connecter à OSE avec ce compte. Vous vous prions de vous rapprocher de votre composante pour en obtenir un valide.");
}
return $intervenant;
......
......@@ -11,7 +11,6 @@ echo $this->messenger()->addMessagesFromFlashMessenger();
<small>Organisation des Services d'Enseignement</small>
</h1>
<p class="lead">Bienvenue dans l'application de saisie des enseignements de l'université de Caen.</p>
<p>Année <?php echo $annee ?>.</p>
<?php
......@@ -44,6 +43,12 @@ echo $this->messenger()->addMessagesFromFlashMessenger();
$label = $this->translate("Tableau synthétique des enseignements concernant ma composante...");
?><p><a class="btn btn-primary btn-large" href="<?php echo $url ?>"><?php echo $label ?></a></p><?php
}elseif (!$role->getPersonnel()){
?>
<div class="alert alert-danger" role="alert">
Vous n'êtes pas autorisé(e) à vous connecter à OSE avec ce compte. Vous vous prions de vous rapprocher de votre composante pour en obtenir un valide.
</div>
<?php
}
}else{
......
<?php
/* @var $intervenants array */
?>
<table class="table table-bordered table-condensed">
<thead>
<tr>
<th>&nbsp;</th>
<th>Civilité</th>
<th>Nom</th>
<th>Prénom</th>
<th>Structure</th>
<th>Date de naissance</th>
<th>N° personnel</th>
</tr>
</thead>
<tbody class="table-hover">
<?php foreach($intervenants as $sourceCode => $intervenant): ?>
<tr>
<td><a href="<?php echo $this->url('intervenant/fiche', ['intervenant' => $sourceCode]); ?>">
<span class="glyphicon glyphicon-eye-open"></span> Fiche
</a></td>
<td><?php echo $intervenant['civilite'] ?></td>
<td><?php echo $intervenant['nom'] ?></td>
<td><?php echo $intervenant['prenom'] ?></td>
<td><?php echo $intervenant['structure'] ?></td>
<td><?php echo $intervenant['date-naissance']->format(\Common\Constants::DATE_FORMAT) ?></td>
<td><?php echo $intervenant['numero-personnel'] ?></td>
</tr>
</tbody>
<?php endforeach; ?>
</table>
\ No newline at end of file
<?php
/* @var $intervenants array */
$nombre = count($intervenants);
?>
<?php if (empty($intervenants)): ?>
<div class="alert alert-info">Aucun intervenant trouvé!</div>
<?php else: ?>
<div class="alert alert-success"><?php
switch($nombre){
case 1: echo '1 intervenant(e) trouvé(e)'; break;
case 21: echo 'plus de 20 intervenants trouvés. Voici les 20 premiers :'; break;
default: echo $nombre.' intervenants trouvés';
}
?></div>
<?php echo $this->partial('liste', compact('intervenants')); ?>
<?php endif; ?>
<div class="jumbotron">
<?php
/* @var $recents [] */
?>
<h1>Rechercher un intervenant</h1>
</div>
<?php $form->prepare(); ?>
<div class="row">
<div class="col-md-4">
<?php echo $this->form()->openTag($form) ?>
<?php echo $this->formControlGroup($form->get('interv')); ?>
<input class="btn btn-primary" type="submit" value="Consulter" name="submit">
<?php echo $this->form()->closeTag() ?>
<div style="padding:1em">
<div class="intervenant-recherche">
<div class="critere">
Saisissez le nom suivi éventuellement du prénom (2 lettres au moins) :
<input id="critere" class="form-control input" type="text" />
</div>
<div class="col-md-8 intervenant-voir">
<?php if (false !== $intervenant): ?>
<?php echo $intervenant ? $this->intervenant($intervenant) : "Intervenant introuvable dans OSE." ?>
<?php endif ?>
<?php if ($intervenant): ?>
<?php echo $this->navigation('navigation')->menuContextuel()->withTarget($intervenant->getId()) ?>
<?php endif ?>
<div class="recherche" data-url="<?php echo $this->url('intervenant/recherche') ?>">
</div>
</div>
<script>
var url = '<?php echo $this->url('intervenant/default', ['action' => 'voir']) ?>';
$("body").on("submit", "form.intervenant-rech", function(event) {
var form = $(event.target);
var id = $("input.sas", form).val();
$.post(url, { 'id': id }, function(data) {
$("div.intervenant-voir").html(data);
});
event.preventDefault();
});
<?php
$(function() {
$(":input").tooltip();
});
</script>
\ No newline at end of file
if (! empty($recents)){
echo '<h3>Fiches récemment consultées :</h3>';
echo $this->partial('liste', ['intervenants' => $recents]);
}
?>
</div>
......@@ -6,4 +6,4 @@
<hr />
<?php echo $this->partial('application/intervenant/partial/feuille-de-route.phtml', ['intervenant' => $intervenant, 'role' => $role]);
\ No newline at end of file
<?php echo $this->partial('application/intervenant/partial/feuille-de-route.phtml', compact('intervenant','role'));
\ No newline at end of file
......@@ -374,3 +374,11 @@ div#navbar pre {
form#dossier .form-control[disabled], form#dossier .form-control[readonly], form#dossier fieldset[disabled] .form-control {
cursor: text;
}
.intervenant-recherche .critere{
padding-bottom: 1em;
}
\ No newline at end of file
......@@ -102,6 +102,47 @@ function changementAnnee(annee)
);
}
/**
*
* @constructor
*/
$.widget("ose.intervenantRecherche", {
rechercher: function( critere )
{
var that = this;
if (critere.length > 1) {
if (that.getElementRecherche().find('.loading').length == 0){
that.getElementRecherche().prepend('<div class="loading"></div>');
}
that.getElementRecherche().refresh({critere: critere}, function( response, status, xhr ){
if ( status == "error" ) {
var msg = "Sorry but there was an error: ";
that.getElementRecherche().html( msg + xhr.status + " " + xhr.statusText + xhr.responseText );
}
});
}
},
_create: function ()
{
var that = this;
this.element.find( "#critere" ).autocomplete({
source: function( event, ui ) {
that.rechercher(event.term);
return {};
}
});
},
getElementRecherche : function () { return this.element.find('.recherche'); },
});
$(function ()
{
WidgetInitializer.add('intervenant-recherche', 'intervenantRecherche');
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment