Loading config/autoload/global.php +6 −0 Changes for config/autoload/global.php: 6 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -311,6 +311,12 @@ return array( 'timesheet_modele' => realpath(__DIR__.'/../../data/timesheet_model.xls'), ], // Convention de nommage des Avenants // %s ID de l'activité // %s Date de l'avenant (YYYY-MM-DD) // %s uniqid 'avenant_filename' => 'avenant_%s_%s_%s.pdf', 'generated-documents' => [ 'activity' => [] ], Loading module/Oscar/config/module.config.php +8 −0 Changes for module/Oscar/config/module.config.php: 8 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -290,6 +290,12 @@ return array( 'action' => ['csv', 'csvPayments'], 'roles' => ['user'], ], // AVENANTS [ 'controller' => 'ActivityAvenants', 'action' => ['api'], 'roles' => ['user'], ], // TIMESHEET [ Loading Loading @@ -569,6 +575,7 @@ return array( ], 'factories' => array( \Oscar\Service\ActivityAvenantsService::class => \Oscar\Service\ActivityAvenantsServiceFactory::class, \Oscar\Service\ActivityLogService::class => \Oscar\Service\ActivityLogServiceFactory::class, \Oscar\Service\ActivityPaymentService::class => \Oscar\Service\ActivityPaymentServiceFactory::class, \Oscar\Service\ActivityRequestService::class => \Oscar\Service\ActivityRequestServiceFactory::class, Loading Loading @@ -619,6 +626,7 @@ return array( 'controllers' => array( 'factories' => [ 'Activity' => \Oscar\Controller\ProjectGrantControllerFactory::class, 'ActivityAvenants' => \Oscar\Controller\Factory\ActivityAvenantsControllerFactory::class, 'ActivityDate' => \Oscar\Controller\ActivityDateControllerFactory::class, 'ActivityMotsCles' => \Oscar\Controller\ActivityMotsClesControllerFactory::class, 'ActivityNotes' => \Oscar\Controller\ActivityNotesControllerFactory::class, Loading module/Oscar/config/routes.yml +14 −0 Changes for module/Oscar/config/routes.yml: 14 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -767,6 +767,20 @@ member: avenant: type: literal options: route: /avenant defaults: controller: ActivityAvenants child_routes: api: type: segment options: route: '/fiche/:activity_id[/:avenant_id]' defaults: action: api may_terminate: false ################################################################################ Loading module/Oscar/src/Oscar/Controller/ActivityAvenantsController.php 0 → 100644 +97 −0 Changes for module/Oscar/src/Oscar/Controller/ActivityAvenantsController.php: 97 added lines, 0 removed lines. Original line number Diff line number Diff line <?php namespace Oscar\Controller; use Oscar\Entity\Activity; use Oscar\Service\ActivityAvenantsService; use Oscar\Service\ProjectGrantApiService; use Oscar\Traits\UseLoggerService; use Oscar\Traits\UseLoggerServiceTrait; use Oscar\Traits\UseOscarUserContextService; use Oscar\Traits\UseOscarUserContextServiceTrait; class ActivityAvenantsController extends AbstractOscarController implements UseLoggerService, UseOscarUserContextService { use UseLoggerServiceTrait, UseOscarUserContextServiceTrait; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// private ActivityAvenantsService $activityAvenantsService; public function getActivityAvenantsService(): ActivityAvenantsService { return $this->activityAvenantsService; } public function setActivityAvenantsService(ActivityAvenantsService $activityAvenantsService): self { $this->activityAvenantsService = $activityAvenantsService; return $this; } private ProjectGrantApiService $projectGrantApiService; public function getProjectGrantApiService(): ProjectGrantApiService { return $this->projectGrantApiService; } public function setProjectGrantApiService(ProjectGrantApiService $projectGrantApiService): self { $this->projectGrantApiService = $projectGrantApiService; return $this; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public function apiAction() { $this->getLoggerService()->debug(__METHOD__); $idActivity = $this->params()->fromRoute('activity_id'); try { $activity = $this->getEntityManager()->getRepository(Activity::class)->find($idActivity); } catch (\Exception $e) { return $this->jsonError("Impossible de charger l'activité $idActivity"); } switch ($this->getHttpXMethod()) { case 'GET': try { $datas = $this->getProjectGrantApiService()->getActivityJson( $activity->getId(), $this->url(), $this->getOscarUserContextService(), ProjectGrantApiService::PERIMETER_AVENANTS ); return $this->jsonOutput($datas); } catch (\Exception $e) { return $this->jsonError("Impossible de charger les avenants"); } break; case 'POST': // TODO Tester les droits d'accès $datas = $this->getJsonREST(); try { $this->getActivityAvenantsService()->createAvenantFromArray($activity, $datas); return $this->getResponseOk("Avenant ajouté"); } catch (\Exception $e) { return $this->jsonError("Impossible d'ajouter l'avenant : " . $e->getMessage()); } case 'DELETE': // TODO Tester les droits d'accès try { $id = $this->params()->fromRoute("avenant_id"); $this->getActivityAvenantsService()->deleteAvenantById($id); return $this->getResponseOk("Avenant supprimé"); } catch (\Exception $e) { return $this->jsonError("Impossible de supprimer l'avenant : " . $e->getMessage()); } default: return $this->getResponseBadRequest(); } } } module/Oscar/src/Oscar/Controller/ActivityAvenantsControllerFactory.php 0 → 100644 +30 −0 Changes for module/Oscar/src/Oscar/Controller/ActivityAvenantsControllerFactory.php: 30 added lines, 0 removed lines. Original line number Diff line number Diff line <?php /** * Created by PhpStorm. * User: bouvry * Date: 27/09/19 * Time: 15:50 */ namespace Oscar\Controller; use Interop\Container\ContainerInterface; use Oscar\Service\ActivityAvenantsService; use Oscar\Service\ActivityLogService; use Oscar\Service\LoggerService; use Oscar\Service\MilestoneService; use Oscar\Service\OscarUserContext; use Oscar\Service\ProjectGrantService; use Laminas\ServiceManager\Factory\FactoryInterface; class ActivityAvenantsControllerFactory extends AbstractOscarController { public function __invoke(ContainerInterface $container, $requestedName, array $options = null) { $c = new ActivityAvenantsController(); $c->setActivityAvenantsService(ActivityAvenantsService::class); $c->setLoggerService($container->get('Logger')); $c->setOscarUserContextService($container->get(OscarUserContext::class)); return $c; } } No newline at end of file Loading
config/autoload/global.php +6 −0 Changes for config/autoload/global.php: 6 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -311,6 +311,12 @@ return array( 'timesheet_modele' => realpath(__DIR__.'/../../data/timesheet_model.xls'), ], // Convention de nommage des Avenants // %s ID de l'activité // %s Date de l'avenant (YYYY-MM-DD) // %s uniqid 'avenant_filename' => 'avenant_%s_%s_%s.pdf', 'generated-documents' => [ 'activity' => [] ], Loading
module/Oscar/config/module.config.php +8 −0 Changes for module/Oscar/config/module.config.php: 8 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -290,6 +290,12 @@ return array( 'action' => ['csv', 'csvPayments'], 'roles' => ['user'], ], // AVENANTS [ 'controller' => 'ActivityAvenants', 'action' => ['api'], 'roles' => ['user'], ], // TIMESHEET [ Loading Loading @@ -569,6 +575,7 @@ return array( ], 'factories' => array( \Oscar\Service\ActivityAvenantsService::class => \Oscar\Service\ActivityAvenantsServiceFactory::class, \Oscar\Service\ActivityLogService::class => \Oscar\Service\ActivityLogServiceFactory::class, \Oscar\Service\ActivityPaymentService::class => \Oscar\Service\ActivityPaymentServiceFactory::class, \Oscar\Service\ActivityRequestService::class => \Oscar\Service\ActivityRequestServiceFactory::class, Loading Loading @@ -619,6 +626,7 @@ return array( 'controllers' => array( 'factories' => [ 'Activity' => \Oscar\Controller\ProjectGrantControllerFactory::class, 'ActivityAvenants' => \Oscar\Controller\Factory\ActivityAvenantsControllerFactory::class, 'ActivityDate' => \Oscar\Controller\ActivityDateControllerFactory::class, 'ActivityMotsCles' => \Oscar\Controller\ActivityMotsClesControllerFactory::class, 'ActivityNotes' => \Oscar\Controller\ActivityNotesControllerFactory::class, Loading
module/Oscar/config/routes.yml +14 −0 Changes for module/Oscar/config/routes.yml: 14 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -767,6 +767,20 @@ member: avenant: type: literal options: route: /avenant defaults: controller: ActivityAvenants child_routes: api: type: segment options: route: '/fiche/:activity_id[/:avenant_id]' defaults: action: api may_terminate: false ################################################################################ Loading
module/Oscar/src/Oscar/Controller/ActivityAvenantsController.php 0 → 100644 +97 −0 Changes for module/Oscar/src/Oscar/Controller/ActivityAvenantsController.php: 97 added lines, 0 removed lines. Original line number Diff line number Diff line <?php namespace Oscar\Controller; use Oscar\Entity\Activity; use Oscar\Service\ActivityAvenantsService; use Oscar\Service\ProjectGrantApiService; use Oscar\Traits\UseLoggerService; use Oscar\Traits\UseLoggerServiceTrait; use Oscar\Traits\UseOscarUserContextService; use Oscar\Traits\UseOscarUserContextServiceTrait; class ActivityAvenantsController extends AbstractOscarController implements UseLoggerService, UseOscarUserContextService { use UseLoggerServiceTrait, UseOscarUserContextServiceTrait; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// private ActivityAvenantsService $activityAvenantsService; public function getActivityAvenantsService(): ActivityAvenantsService { return $this->activityAvenantsService; } public function setActivityAvenantsService(ActivityAvenantsService $activityAvenantsService): self { $this->activityAvenantsService = $activityAvenantsService; return $this; } private ProjectGrantApiService $projectGrantApiService; public function getProjectGrantApiService(): ProjectGrantApiService { return $this->projectGrantApiService; } public function setProjectGrantApiService(ProjectGrantApiService $projectGrantApiService): self { $this->projectGrantApiService = $projectGrantApiService; return $this; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public function apiAction() { $this->getLoggerService()->debug(__METHOD__); $idActivity = $this->params()->fromRoute('activity_id'); try { $activity = $this->getEntityManager()->getRepository(Activity::class)->find($idActivity); } catch (\Exception $e) { return $this->jsonError("Impossible de charger l'activité $idActivity"); } switch ($this->getHttpXMethod()) { case 'GET': try { $datas = $this->getProjectGrantApiService()->getActivityJson( $activity->getId(), $this->url(), $this->getOscarUserContextService(), ProjectGrantApiService::PERIMETER_AVENANTS ); return $this->jsonOutput($datas); } catch (\Exception $e) { return $this->jsonError("Impossible de charger les avenants"); } break; case 'POST': // TODO Tester les droits d'accès $datas = $this->getJsonREST(); try { $this->getActivityAvenantsService()->createAvenantFromArray($activity, $datas); return $this->getResponseOk("Avenant ajouté"); } catch (\Exception $e) { return $this->jsonError("Impossible d'ajouter l'avenant : " . $e->getMessage()); } case 'DELETE': // TODO Tester les droits d'accès try { $id = $this->params()->fromRoute("avenant_id"); $this->getActivityAvenantsService()->deleteAvenantById($id); return $this->getResponseOk("Avenant supprimé"); } catch (\Exception $e) { return $this->jsonError("Impossible de supprimer l'avenant : " . $e->getMessage()); } default: return $this->getResponseBadRequest(); } } }
module/Oscar/src/Oscar/Controller/ActivityAvenantsControllerFactory.php 0 → 100644 +30 −0 Changes for module/Oscar/src/Oscar/Controller/ActivityAvenantsControllerFactory.php: 30 added lines, 0 removed lines. Original line number Diff line number Diff line <?php /** * Created by PhpStorm. * User: bouvry * Date: 27/09/19 * Time: 15:50 */ namespace Oscar\Controller; use Interop\Container\ContainerInterface; use Oscar\Service\ActivityAvenantsService; use Oscar\Service\ActivityLogService; use Oscar\Service\LoggerService; use Oscar\Service\MilestoneService; use Oscar\Service\OscarUserContext; use Oscar\Service\ProjectGrantService; use Laminas\ServiceManager\Factory\FactoryInterface; class ActivityAvenantsControllerFactory extends AbstractOscarController { public function __invoke(ContainerInterface $container, $requestedName, array $options = null) { $c = new ActivityAvenantsController(); $c->setActivityAvenantsService(ActivityAvenantsService::class); $c->setLoggerService($container->get('Logger')); $c->setOscarUserContextService($container->get(OscarUserContext::class)); return $c; } } No newline at end of file