Commit 12ac54f4 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

Avenants en cours (backup)

parent 2c1ae7d6
Loading
Loading
Loading
Loading
Loading
+6 −0
Changes for config/autoload/global.php: 6 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -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' => []
        ],
+8 −0
Changes for module/Oscar/config/module.config.php: 8 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -290,6 +290,12 @@ return array(
                    'action' => ['csv', 'csvPayments'],
                    'roles' => ['user'],
                ],
                // AVENANTS
                [
                    'controller' => 'ActivityAvenants',
                    'action' => ['api'],
                    'roles' => ['user'],
                ],

                // TIMESHEET
                [
@@ -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,
@@ -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,
+14 −0
Changes for module/Oscar/config/routes.yml: 14 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -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


################################################################################
+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();
        }
    }
}
+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