diff --git a/CHANGELOG b/CHANGELOG index ccfc622c231c3cc282711f0d7896a290a09f2b21..7b16958113112ea3790134f4377063eee788be1f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -66,5 +66,7 @@ Le fichier n'est donc plus placé dans le répertoire `config`, mais à la **rac * notifier-indicateurs * synchronisation * chargens-calcul-effectifs - + * calcul-tableaux-bord + * formule-calcul + Pour cela, se référer à la procédure d'installation de OSE. \ No newline at end of file diff --git a/bin/ose b/bin/ose index bb6fe0eaa2af43ad021c662cafc5c62204796a60..f153b0f8ded7ba9dbbcd11472333a4a853988562 100755 --- a/bin/ose +++ b/bin/ose @@ -27,6 +27,12 @@ switch ($action) { case 'chargens-calcul-effectifs': $oa->exec('chargens-calcul-effectifs'); break; + case 'calcul-tableaux-bord': + $oa->exec('calcul-tableaux-bord'); + break; + case 'formule-calcul': + $oa->exec('formule-calcul'); + break; default: help($c, $oa); break; @@ -109,6 +115,9 @@ function help(Console $c, OseAdmin $oa) $c->println(" - notifier-indicateurs : Envoi des mails relatifs aux indicateurs"); $c->println(" - synchronisation <job> : Effectue la synchronisation des données pour le <job> transmis"); $c->println(" - chargens-calcul-effectifs : Calcul des effectifs du module Charges"); + $c->println(" - calcul-tableaux-bord : Recalcule tous les tableaux de bord de calculs itermédiaires"); + $c->println(" - formule-calcul : Calcul de toutes les heures complémentaires à l'aide de la formule"); + } diff --git a/code/GenDbStructure/DdlGen.php b/code/GenDbStructure/DdlGen.php index 421fa95adfeeccb98b4c3cd2be3920833a65ad1e..e03c08bc369dcc37369f33da6eccfa684aa36919 100644 --- a/code/GenDbStructure/DdlGen.php +++ b/code/GenDbStructure/DdlGen.php @@ -108,41 +108,6 @@ class DdlGen } } } - - $this->ddl[self::JOBS] = []; - - $this->ddl[self::JOBS]['OSE_FORMULE_REFRESH'] = "BEGIN - DBMS_SCHEDULER.CREATE_JOB ( - job_name => 'OSE_FORMULE_REFRESH', - job_type => 'STORED_PROCEDURE', - job_action => 'OSE_FORMULE.CALCULER_TOUT', - number_of_arguments => 1, - start_date => TO_TIMESTAMP_TZ('2014-12-09 10:25:17.032495000 EUROPE/PARIS','YYYY-MM-DD HH24:MI:SS.FF TZR'), - repeat_interval => 'FREQ=DAILY;BYDAY=MON,TUE,WED,THU,FRI,SAT,SUN;BYHOUR=5;BYMINUTE=0;BYSECOND=0', - end_date => NULL, - enabled => TRUE, - auto_drop => FALSE, - comments => 'Recalcul général de la formule de calcul' - ); -END; -/"; - - $this->ddl[self::JOBS]['MAJ_ALL_TBL'] = "BEGIN - DBMS_SCHEDULER.CREATE_JOB ( - job_name => 'MAJ_ALL_TBL', - job_type => 'STORED_PROCEDURE', - job_action => 'OSE_DIVERS.CALCULER_TABLEAUX_BORD', - number_of_arguments => 0, - start_date => TO_TIMESTAMP_TZ('2017-11-06 16:03:22.734108000 EUROPE/PARIS','YYYY-MM-DD HH24:MI:SS.FF TZR'), - repeat_interval => 'FREQ=DAILY;BYHOUR=2,14;BYMINUTE=0;BYSECOND=0', - end_date => NULL, - enabled => TRUE, - auto_drop => FALSE, - comments => 'Mise à jour de tous les tableaux de bord (hors formule de calcul)' - ); -END; -/"; - } diff --git "a/data/D\303\251ploiement/Changements.pdf" "b/data/D\303\251ploiement/Changements.pdf" index 363bda2b2febca8291ef5a81ddf8819de0f47e1c..15556c6d0fe6e5fec57b20597cf0a527b88244c1 100644 Binary files "a/data/D\303\251ploiement/Changements.pdf" and "b/data/D\303\251ploiement/Changements.pdf" differ diff --git "a/data/D\303\251ploiement/Proc\303\251dure d'installation.md" "b/data/D\303\251ploiement/Proc\303\251dure d'installation.md" index 1a1a04cfa4f24a041254f32decbed0f4bee09f83..45f4e256391107d609aae8f030a31453f444b6cc 100644 --- "a/data/D\303\251ploiement/Proc\303\251dure d'installation.md" +++ "b/data/D\303\251ploiement/Proc\303\251dure d'installation.md" @@ -128,48 +128,6 @@ Un script d'initialisation vous est fourni (répertoire data/Déploiement/ose-dd Attention à bien veiller à ce que les accents soient correctement traités. Les caractères du fichier sont en **UTF8**. -En plus de cale, des Jobs Oracle sont à créer pour effectuer une série de tâches. -Certaines données ont en effet besoin d'être mis à jour périodiquement. -A vous d'adapter les périodicités à vos besoins. - -```sql - -/ - -BEGIN - DBMS_SCHEDULER.CREATE_JOB ( - job_name => 'OSE_FORMULE_REFRESH', - job_type => 'STORED_PROCEDURE', - job_action => 'OSE_FORMULE.CALCULER_TOUT', - number_of_arguments => 1, - start_date => TO_TIMESTAMP_TZ('2014-12-09 10:25:17.032495000 EUROPE/PARIS','YYYY-MM-DD HH24:MI:SS.FF TZR'), - repeat_interval => 'FREQ=DAILY;BYDAY=MON,TUE,WED,THU,FRI,SAT,SUN;BYHOUR=5;BYMINUTE=0;BYSECOND=0', - end_date => NULL, - enabled => TRUE, - auto_drop => FALSE, - comments => 'Recalcul général de la formule de calcul' - ); -END; - -/ - -BEGIN - DBMS_SCHEDULER.CREATE_JOB ( - job_name => 'MAJ_ALL_TBL', - job_type => 'STORED_PROCEDURE', - job_action => 'OSE_DIVERS.CALCULER_TABLEAUX_BORD', - number_of_arguments => 0, - start_date => TO_TIMESTAMP_TZ('2017-11-06 16:03:22.734108000 EUROPE/PARIS','YYYY-MM-DD HH24:MI:SS.FF TZR'), - repeat_interval => 'FREQ=DAILY;BYHOUR=2,14;BYMINUTE=0;BYSECOND=0', - end_date => NULL, - enabled => TRUE, - auto_drop => FALSE, - comments => 'Mise à jour de tous les tableaux de bord (hors formule de calcul)' - ); -END; -/ -``` - # Configuration technique Personnalisez le fichier `config.local.php` pour adapter OSE à votre établissement. @@ -185,12 +143,14 @@ Ce mode vous permettra de : Une fois cette étape terminée, il convient de passer OSE en mode production. Cela se fait dans le fichier de configuration `config.local.php`, en positionnant à `false` `global/modeInstallation`. # Mise en place des tâches CRON -Des tâches CRON doivent être lancée sur votre serveur régulièrement. -Elle sert à envoyer les notifications par mail pour les indicateurs à ceux qui se sont abonnés. +Des tâches CRON doivent être lancée sur votre serveur régulièrement pour mettre à jour certaines données +ou réaliser des actions. + +Ces tâches n'ont pas besoin d'être lancées régulièrement sur un serveur de pré-production. Dans tous les cas, c'est le script de OSE qui sera appelé. Le script est situé dans le répertoire de OSE, `bin/ose`. -Il est suivi de l'action à exécuter, puis éventuellement de paramètres. +Il est suivi de l'action à exécuter, puis éventuellement de paramètres à préciser. Exemple d'utilisation pour lancer une tâche de synchronisation appelée `principal`: ```bash @@ -202,6 +162,8 @@ Exemple d'utilisation pour lancer une tâche de synchronisation appelée `princi | Indicateurs : envoi des notifications par mail | Les jours de semaine entre 5h et 17h | notifier-indicateurs | | Synchronisation : Mise en place d'un job pour l'import des données. Plusieurs jobs pourront être créés au besoin | Tous les quarts d'heures entre 7h et 21h sauf le dimanche | synchronisation `<Nom du job>` | | Calcul des effectifs du module Charges | une fois par jour, à 20h tous les jours sauf le dimanche. | chargens-calcul-effectifs | +| Calcul des tableaux de bord | Deux fois par jour sauf le dimanche (Calcul LONG) | calcul-tableaux-bord | +| Calcul des heures complémentaires à l'aide de la formule (calcul LONG) | Les lundi et jeudi à 3h | formule-calcul | Après la commande, on ajoute `1> /tmp/oselog 2>&1` pour loguer le résultat dans le fichier`/tmp/oselog`. A adapter le cas échéant. @@ -210,9 +172,11 @@ Voici un exemple de crontab : ```cron # m h dom mon dow command -0 5-17 * * 1-5 /usr/bin/php /var/www/ose/bin/ose notifier-indicateurs 1> /tmp/oselog 2>&1 -*/15 7-21 * * 1-6 /usr/bin/php /var/www/ose/bin/ose synchronisation job1 1> /tmp/oselog 2>&1 +0 5-17 * * 1-5 /usr/bin/php /var/www/ose/bin/ose notifier-indicateurs 1> /tmp/oselog 2>&1 +*/15 7-21 * * 1-6 /usr/bin/php /var/www/ose/bin/ose synchronisation job1 1> /tmp/oselog 2>&1 0 20 * * 1-6 /usr/bin/php /var/www/ose/bin/ose chargens-calcul-effectifs 1> /tmp/oselog 2>&1 +0 6,14 * * 1-6 /usr/bin/php /var/www/ose/bin/ose calcul-tableaux-bord 1> /tmp/oselog 2>&1 +0 3 * * 1,4 /usr/bin/php /var/www/ose/bin/ose formule-calcul 1> /tmp/oselog 2>&1 ``` OSE est maintenant installé. diff --git "a/data/D\303\251ploiement/Proc\303\251dure d'installation.pdf" "b/data/D\303\251ploiement/Proc\303\251dure d'installation.pdf" index a1557e2f58805c025cc66900d499a088023f53fa..52689c977536916e810755e83df090b179d27f62 100644 Binary files "a/data/D\303\251ploiement/Proc\303\251dure d'installation.pdf" and "b/data/D\303\251ploiement/Proc\303\251dure d'installation.pdf" differ diff --git "a/data/D\303\251ploiement/Proc\303\251dure de mise \303\240 jour.pdf" "b/data/D\303\251ploiement/Proc\303\251dure de mise \303\240 jour.pdf" index 5fb3146d38888f758009784448032796a5f677e3..0f10fcfe3b9f6282db0e370fcf9e9d70745a76ba 100644 Binary files "a/data/D\303\251ploiement/Proc\303\251dure de mise \303\240 jour.pdf" and "b/data/D\303\251ploiement/Proc\303\251dure de mise \303\240 jour.pdf" differ diff --git "a/data/D\303\251ploiement/ose-ddl.sql" "b/data/D\303\251ploiement/ose-ddl.sql" index 0877219ec73a90bf8b2cdcd2175234f3f91e2ca6..556f43aa6b312d64972a5eb730a1c2dc402454cc 100755 --- "a/data/D\303\251ploiement/ose-ddl.sql" +++ "b/data/D\303\251ploiement/ose-ddl.sql" @@ -18686,44 +18686,6 @@ END; / ALTER TRIGGER "WF_ETAPE_DEP_CK" ENABLE; --------------------------------------------------- --- Jobs --------------------------------------------------- - --- OSE_FORMULE_REFRESH -BEGIN - DBMS_SCHEDULER.CREATE_JOB ( - job_name => 'OSE_FORMULE_REFRESH', - job_type => 'STORED_PROCEDURE', - job_action => 'OSE_FORMULE.CALCULER_TOUT', - number_of_arguments => 1, - start_date => TO_TIMESTAMP_TZ('2014-12-09 10:25:17.032495000 EUROPE/PARIS','YYYY-MM-DD HH24:MI:SS.FF TZR'), - repeat_interval => 'FREQ=DAILY;BYDAY=MON,TUE,WED,THU,FRI,SAT,SUN;BYHOUR=5;BYMINUTE=0;BYSECOND=0', - end_date => NULL, - enabled => TRUE, - auto_drop => FALSE, - comments => 'Recalcul général de la formule de calcul' - ); -END; -/ - --- MAJ_ALL_TBL -BEGIN - DBMS_SCHEDULER.CREATE_JOB ( - job_name => 'MAJ_ALL_TBL', - job_type => 'STORED_PROCEDURE', - job_action => 'OSE_DIVERS.CALCULER_TABLEAUX_BORD', - number_of_arguments => 0, - start_date => TO_TIMESTAMP_TZ('2017-11-06 16:03:22.734108000 EUROPE/PARIS','YYYY-MM-DD HH24:MI:SS.FF TZR'), - repeat_interval => 'FREQ=DAILY;BYHOUR=2,14;BYMINUTE=0;BYSECOND=0', - end_date => NULL, - enabled => TRUE, - auto_drop => FALSE, - comments => 'Mise à jour de tous les tableaux de bord (hors formule de calcul)' - ); -END; -/ - -- Table SOURCE diff --git "a/data/Mises \303\240 jour/06.3.sql" "b/data/Mises \303\240 jour/06.3.sql" index 1a34001cb233f575710a6eec4187d0c895c9befc..5aa6176401f37aa306dea3c91d01e156112150a5 100644 --- "a/data/Mises \303\240 jour/06.3.sql" +++ "b/data/Mises \303\240 jour/06.3.sql" @@ -90,6 +90,21 @@ BEGIN force => true); END; / +-- Suppression du JOB OSE_FORMULE_REFRESH +BEGIN + DBMS_SCHEDULER.DROP_JOB(job_name => '"OSE"."OSE_FORMULE_REFRESH"', + defer => false, + force => true); +END; +/ +-- Suppression du JOB OSE_WF_REFRESH +BEGIN + DBMS_SCHEDULER.DROP_JOB(job_name => '"OSE"."OSE_WF_REFRESH"', + defer => false, + force => true); +END; +/ +drop package "OSE"."OSE_IMPORT"; -drop package "OSE"."OSE_IMPORT"; \ No newline at end of file +/ \ No newline at end of file diff --git a/module/Application/Module.php b/module/Application/Module.php index 552bc9b23c5ebad43af0ab20f167d874353b4883..e08855cfc35961bbe785b869ea0d09b53752786c 100755 --- a/module/Application/Module.php +++ b/module/Application/Module.php @@ -163,6 +163,10 @@ class Module implements ConsoleUsageProviderInterface, ConsoleBannerProviderInte ['--force', "Facultatif", "Envoie les mails sytématiquement, sans tenir compte de la fréquence de notification."], "Charges d'enseignement", 'chargens-calc-effectifs' => "Calcul des effectifs du module Charges", + "Tableaux de bord", + 'calcul-tableaux-bord' => "Calcul de tous les tableaux de bord (sauf la formule qui est à part)", + "Formule de calcul", + 'formule-calcul' => "Calcul de toutes les heures complémentaires à l'aide de la formule", ]; } diff --git a/module/Application/config/formule.config.php b/module/Application/config/formule.config.php index 7be8a896eb440a1d80336d2b3ff9b85818d6bc03..e79b53727883753b613a370dbdaa6d94fa05a0cf 100644 --- a/module/Application/config/formule.config.php +++ b/module/Application/config/formule.config.php @@ -3,6 +3,30 @@ namespace Application; return [ + + /* Déclaration du contrôleur */ + 'controllers' => [ + 'factories' => [ + 'Application\Controller\Formule' => Controller\Factory\FormuleControllerFactory::class, + ], + ], + + 'console' => [ + 'router' => [ + 'routes' => [ + 'formule-calcul' => [ + 'options' => [ + 'route' => 'formule-calcul', + 'defaults' => [ + 'controller' => 'Application\Controller\Formule', + 'action' => 'calculer-tout', + ], + ], + ], + ], + ], + ], + 'service_manager' => [ 'invokables' => [ Service\FormuleIntervenantService::class => Service\FormuleIntervenantService::class, diff --git a/module/Application/config/workflow.config.php b/module/Application/config/workflow.config.php index 5899f6135e408022be3199544281be1b64d9fedf..069a575efed0d2de1c9445de2acc063146b1ea1d 100644 --- a/module/Application/config/workflow.config.php +++ b/module/Application/config/workflow.config.php @@ -90,6 +90,23 @@ return [ ], ], ], + + 'console' => [ + 'router' => [ + 'routes' => [ + 'workflow-calcul-tbls' => [ + 'options' => [ + 'route' => 'calcul-tableaux-bord', + 'defaults' => [ + 'controller' => 'Application\Controller\Workflow', + 'action' => 'calcul-tableaux-bord', + ], + ], + ], + ], + ], + ], + 'navigation' => [ 'default' => [ 'home' => [ diff --git a/module/Application/src/Application/Controller/Factory/FormuleControllerFactory.php b/module/Application/src/Application/Controller/Factory/FormuleControllerFactory.php new file mode 100755 index 0000000000000000000000000000000000000000..3f50a3b5247068fdb6ebb98f3a64a0b3cc1f77a5 --- /dev/null +++ b/module/Application/src/Application/Controller/Factory/FormuleControllerFactory.php @@ -0,0 +1,35 @@ +<?php + +namespace Application\Controller\Factory; + +use Zend\Mvc\Controller\ControllerManager as ContainerInterface; +use Application\Controller\FormuleController; + + + +/** + * Description of FormuleControllerFactory + * + * @author LECLUSE Laurent <laurent.lecluse at unicaen.fr> + */ +class FormuleControllerFactory +{ + + /** + * @param ContainerInterface $container + * @param string $requestedName + * @param array|null $options + * + * @return FormuleController + */ + public function __invoke(ContainerInterface $container, $requestedName, $options = null) + { + /* On quitte le ControllerManager */ + $container = $container->getServiceLocator(); + + $controller = new FormuleController; + /* Injectez vos dépendances ICI */ + + return $controller; + } +} \ No newline at end of file diff --git a/module/Application/src/Application/Controller/FormuleController.php b/module/Application/src/Application/Controller/FormuleController.php new file mode 100755 index 0000000000000000000000000000000000000000..8804ec73001c5ef0bac6155a00772f5f1660b0b1 --- /dev/null +++ b/module/Application/src/Application/Controller/FormuleController.php @@ -0,0 +1,19 @@ +<?php + +namespace Application\Controller; + + +/** + * Description of FormuleController + * + * @author LECLUSE Laurent <laurent.lecluse at unicaen.fr> + */ +class FormuleController extends AbstractController +{ + + public function calculerToutAction() + { + $this->em()->getConnection()->exec('BEGIN OSE_FORMULE.CALCULER_TOUT; END;'); + } + +} \ No newline at end of file diff --git a/module/Application/src/Application/Controller/WorkflowController.php b/module/Application/src/Application/Controller/WorkflowController.php index 67bc71dfc90092f278648909d977c964c0f91281..00c32f3af2ec0e3f75cf2b2e7c444a6df65e09e4 100644 --- a/module/Application/src/Application/Controller/WorkflowController.php +++ b/module/Application/src/Application/Controller/WorkflowController.php @@ -143,6 +143,11 @@ class WorkflowController extends AbstractController } + public function calculTableauxBordAction() + { + $this->getServiceWorkflow()->calculerTousTableauxBord(); + } + public function feuilleDeRouteRefreshAction() { diff --git a/module/Application/src/Application/Service/Factory/WorkflowServiceFactory.php b/module/Application/src/Application/Service/Factory/WorkflowServiceFactory.php index 0264ea41150dc86c64275450e6aa33a6217135d4..ad5fa713912f70646e65fcbd909d97bb7dc54920 100644 --- a/module/Application/src/Application/Service/Factory/WorkflowServiceFactory.php +++ b/module/Application/src/Application/Service/Factory/WorkflowServiceFactory.php @@ -5,6 +5,7 @@ namespace Application\Service\Factory; use Application\Service\ContextService; use Application\Service\WorkflowService; use UnicaenTbl\Service\TableauBordService; +use Zend\Console\Console; use Zend\ServiceManager\FactoryInterface; use Zend\ServiceManager\ServiceLocatorInterface; @@ -22,9 +23,11 @@ class WorkflowServiceFactory implements FactoryInterface $serviceLocator->get(ContextService::class) ); - $service->setServiceAuthorize( - $serviceLocator->get('BjyAuthorize\Service\Authorize') - ); + if (!Console::isConsole()) { + $service->setServiceAuthorize( + $serviceLocator->get('BjyAuthorize\Service\Authorize') + ); + } return $service; } diff --git a/module/Application/src/Application/Service/WorkflowService.php b/module/Application/src/Application/Service/WorkflowService.php index 0f65fc49b30cd4c13ac126bf79da11c7c91605de..e7a15a1773a418dd84a42b1b6a50aad38e5248e0 100755 --- a/module/Application/src/Application/Service/WorkflowService.php +++ b/module/Application/src/Application/Service/WorkflowService.php @@ -283,6 +283,17 @@ class WorkflowService extends AbstractService + /** + * @return int + * @throws \Doctrine\DBAL\DBALException + */ + public function calculerTousTableauxBord() + { + return $this->getEntityManager()->getConnection()->exec('BEGIN OSE_DIVERS.CALCULER_TABLEAUX_BORD; END;'); + } + + + /** * @param array $tableauxBords * @param Intervenant|Intervenant[]|string $intervenant