Commit 1f3b79f7 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

- Mode privé en cours (Fiche activité)

 - Centralisation des payments
 - Dépenses en cours
parent a8232cea
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -562,6 +562,7 @@ return array(

        'factories' => array(
            \Oscar\Service\ActivityLogService::class => \Oscar\Service\ActivityLogServiceFactory::class,
            \Oscar\Service\ActivityPaymentService::class => \Oscar\Service\ActivityPaymentServiceFactory::class,
            \Oscar\Service\ActivityRequestService::class => \Oscar\Service\ActivityRequestServiceFactory::class,
            \Oscar\Service\ActivityTypeService::class => \Oscar\Service\ActivityTypeServiceFactory::class,
            \Oscar\Service\AdministrativeDocumentService::class => \Oscar\Service\AdministrativeDocumentServiceFactory::class,
+5 −0
Original line number Diff line number Diff line
@@ -299,4 +299,9 @@ class AbstractOscarController extends AbstractActionController implements UseOsc
        $input = json_decode($inputJSON, TRUE);
        return $input;
    }

    protected function getJsonREST()
    {
        return $this->getJsonPosted();
    }
}
+9 −48
Original line number Diff line number Diff line
@@ -10,13 +10,15 @@ use Oscar\Entity\Activity;
use Oscar\Entity\ActivityNote;
use Oscar\Provider\Privileges;
use Oscar\Service\ProjectGrantApiService;
use Oscar\Traits\UseLoggerService;
use Oscar\Traits\UseLoggerServiceTrait;
use Oscar\Traits\UseProjectGrantApiService;
use Oscar\Traits\UseProjectGrantApiServiceTrait;
use Throwable;

class ActivityNotesController extends AbstractOscarController implements UseProjectGrantApiService
class ActivityNotesController extends AbstractOscarController implements UseProjectGrantApiService, UseLoggerService
{
    use UseProjectGrantApiServiceTrait;
    use UseProjectGrantApiServiceTrait, UseLoggerServiceTrait;

    public function apiAction()
    {
@@ -72,52 +74,8 @@ class ActivityNotesController extends AbstractOscarController implements UseProj

    private function getNotes() {
        $activity_id = $this->getRequest()->getQuery('activityid');
//        if (!$activity_id) {
//            throw new \Exception("activityid query param mandatory");
//        }
//
//
//        /** @var Activity $activity */
//        $activity = $this->getEntityManager()->getRepository(Activity::class)->find($activity_id);
//        if (!$activity) {
//            throw new \Exception("activityid not found in DB");
//        }
//
//        $this->getOscarUserContextService()->check(Privileges::ACTIVITY_NOTES_SHOW, $activity);
//
//        $allNotes = $this->getEntityManager()
//                ->getRepository(ActivityNote::class)
//                ->createQueryBuilder('activitynotes')
//                ->select('activitynotes')
//                ->where('activitynotes.activity = :activity_id')
//                ->addOrderBy('COALESCE(activitynotes.dateUpdated, activitynotes.dateCreated)', 'DESC')
//                ->setParameter('activity_id', $activity_id)
//                ->getQuery()
//                ->getResult();
//
//        $json = [
//            'notes' => []
//        ];
//
//        /** @var ActivityNote $note */
//        foreach ($allNotes as $note) {
//            $date_updated = $note->getDateCreated()->format(DateTime::ATOM);
//            if ($note->getDateUpdated() != NULL) {
//                $date_updated = $note->getDateUpdated()->format(DateTime::ATOM);
//            }
//
//            $json['notes'][] = [
//                'id'          => $note->getId(),
//                'content'     => $note->getContent(),
//                'date_updated' => $date_updated,
//                'created_by' => [
//                    'id' => $note->getCreatedBy() ? $note->getCreatedBy()->getId() : -1,
//                    'first_name'      => $note->getCreatedBy() ? $note->getCreatedBy()->getFirstName() : "",
//                    'last_name'      => $note->getCreatedBy() ? $note->getCreatedBy()->getLastName() : "",
//                ],
//            ];
//        }
        $json = $this->getProjectGrantApiService()->getNotesActivity($activity_id, $this->url(), $this->getOscarUserContextService());
        $activity = $this->getEntityManager()->getRepository(Activity::class)->find($activity_id);
        $json = $this->getProjectGrantApiService()->getNotesActivity($activity, $this->url(), $this->getOscarUserContextService());

        $response = new JsonModel();
        $response->setVariables($json);
@@ -125,6 +83,9 @@ class ActivityNotesController extends AbstractOscarController implements UseProj
    }

    private function createNote($action_note_json, $activity) {

        $this->getLoggerService()->info("createNote");
        $this->getLoggerService()->info("by: " . $this->getCurrentPerson());
        $note = new ActivityNote();
        $note->setContent($action_note_json->content);
        $note->setCreatedBy($this->getCurrentPerson());
+1 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ class ActivityNotesControllerFactory implements FactoryInterface
        $c = new ActivityNotesController();
        $c->setEntityManager($container->get(EntityManager::class));
        $c->setOscarUserContextService($container->get(OscarUserContext::class));
        $c->setLoggerService($container->get('Logger'));
        $c->setProjectGrantApiService($container->get(ProjectGrantApiService::class));
        return $c;
    }
+82 −72
Original line number Diff line number Diff line
@@ -10,17 +10,23 @@ namespace Oscar\Controller;

use Oscar\Entity\Activity;
use Oscar\Entity\ActivityPayment;
use Oscar\Exception\OscarException;
use Oscar\Form\ActivityPaymentForm;
use Oscar\Provider\Privileges;
use Oscar\Service\ActivityPaymentService;
use Oscar\Service\NotificationService;
use Oscar\Service\PersonService;
use Oscar\Service\ProjectGrantApiService;
use Oscar\Service\ProjectGrantService;
use Laminas\Http\Request;
use Laminas\View\Model\JsonModel;
use Laminas\View\Model\ViewModel;
use Oscar\Traits\UseServiceContainer;
use Oscar\Traits\UseServiceContainerTrait;

class ActivityPaymentController extends AbstractOscarController
class ActivityPaymentController extends AbstractOscarController implements UseServiceContainer
{
    use UseServiceContainerTrait;

    /////////////////////////////////////////////////////////////////////////////////////////////////////////// SERVICES
    /** @var ProjectGrantService */
@@ -83,9 +89,6 @@ class ActivityPaymentController extends AbstractOscarController
    /////////////////////////////////////////////////////////////////////////////////////////////////////////// SERVICES





    /**
     * Retourne les versements à venir dans les 15 jours à venir.
     */
@@ -123,7 +126,6 @@ class ActivityPaymentController extends AbstractOscarController
    }



    /**
     * @return JsonModel
     */
@@ -140,7 +142,10 @@ class ActivityPaymentController extends AbstractOscarController

            $method = $this->getHttpXMethod();

            if( $method != "GET" && !$this->getOscarUserContextService()->hasPrivileges(Privileges::ACTIVITY_PAYMENT_MANAGE, $activity) ){
            if ($method != "GET" && !$this->getOscarUserContextService()->hasPrivileges(
                    Privileges::ACTIVITY_PAYMENT_MANAGE,
                    $activity
                )) {
                $this->getResponseBadRequest("Vous ne disposez pas des droits suffisants pour gérer les versements");
            }

@@ -148,12 +153,16 @@ class ActivityPaymentController extends AbstractOscarController
                case 'DELETE':
                    try {
                        /** @var ActivityPayment $payment */
                        $payment = $this->getProjectGrantService()->getActivityPaymentById($this->params()->fromQuery('id'));
                        $payment = $this->getProjectGrantService()->getActivityPaymentById(
                            $this->params()->fromQuery('id')
                        );
                        $this->getProjectGrantService()->deleteActivityPayment($payment);
                        return $this->getResponseOk("Le versement a bien été supprimé");
                    } catch (\Exception $e) {
                        $this->getLoggerService()->error($e->getTraceAsString());
                        return $this->getResponseInternalError(sprintf(_("Impossible de supprimer le payment : %s"), $e->getMessage()));
                        return $this->getResponseInternalError(
                            sprintf(_("Impossible de supprimer le payment : %s"), $e->getMessage())
                        );
                    }


@@ -183,7 +192,9 @@ class ActivityPaymentController extends AbstractOscarController
                            return $this->getResponseOk("Le versement a bien été ajouté");
                        } catch (\Exception $e) {
                            $this->getLoggerService()->error($e->getTraceAsString());
                            return $this->getResponseInternalError(sprintf(_("Impossible d'ajouter le payment : %s"), $e->getMessage()));
                            return $this->getResponseInternalError(
                                sprintf(_("Impossible d'ajouter le payment : %s"), $e->getMessage())
                            );
                        }
                    }

@@ -193,7 +204,9 @@ class ActivityPaymentController extends AbstractOscarController
                            $this->getProjectGrantService()->updateActivityPayment($postedDatas);
                            return $this->getResponseOk("Le versement a bien été modifié");
                        } catch (\Exception $e) {
                            return $this->getResponseInternalError(sprintf(_("Impossible de modifier le payment : %s"), $e->getMessage()));
                            return $this->getResponseInternalError(
                                sprintf(_("Impossible de modifier le payment : %s"), $e->getMessage())
                            );
                        }
                    }

@@ -212,67 +225,73 @@ class ActivityPaymentController extends AbstractOscarController
            $search = $this->params()->fromQuery('q', '');
            return $this->getProjectGrantService()->getListActivityPayment($search, $page);
        }
    }

    public function restAction()
    {
        // Deprecated
    }

    /**
     * @return ActivityPaymentService
     * @throws \Psr\Container\ContainerExceptionInterface
     * @throws \Psr\Container\NotFoundExceptionInterface
     */
    private function getActivityPaymentService(): ActivityPaymentService
    {
        return $this->getServiceContainer()->get(ActivityPaymentService::class);
    }
    public function restAction(){
        //var_dump($this->getRequest());

    public function indexRestAction()
    {
        /** @var Request $request */
        $request = $this->getRequest();
        $response = new JsonModel();

        /** @var Activity $entity */
        $entity = $this->getEntityManager()->getRepository(Activity::class)->find($this->params()->fromRoute('idactivity'));
        $this->getOscarUserContextService()->check(Privileges::ACTIVITY_PAYMENT_MANAGE, $entity);
        if( !$entity ){
            return $this->getResponseNotFound("Activité non trouvée");
        }
        $activity = $this->getProjectGrantService()->getActivityById($this->params()->fromRoute('idactivity', null));

        $versement = $this->getEntityManager()->getRepository(ActivityPayment::class)->find($this->params()->fromRoute('id'));
        if( !$entity ){
            return $this->getResponseNotFound("Versement non trouvée");
        }
        $method = $request->getMethod();

        try {
            switch ($method) {
                case 'GET':
                    /** @var ProjectGrantApiService $projectGrantApiService */
                    $projectGrantApiService = $this->getServiceContainer()->get(ProjectGrantApiService::class);
                    $data = $projectGrantApiService->getActivityJson(
                        $activity->getId(),
                        $this->url(),
                        $this->getOscarUserContextService(),
                        'payments'
                    );
                    return $this->jsonOutput($data);

        switch( $this->getHttpXMethod() ){
                case 'DELETE':
                return $this->getResponseOk('Le versement %s a bien été supprimé');
                break;
                    $this->getActivityPaymentService()->deletePayment($this->getActivityPaymentFromQuery());
                    return $this->getResponseOk("Versement supprimé");

                case 'PUT':
                var_dump($request->getPost());
//                return $this->getResponseOk('Le versement %s a bien été supprimé');
                break;
        }
                    $this->getActivityPaymentService()->createPayment($this->getJsonREST(), $activity);
                    return $this->getResponseOk("Versement ajouté");

        return $this->getResponseBadRequest("test");
                case 'POST':
                    $this->getActivityPaymentService()->updatePayment($this->getJsonREST(), $activity);
                    return $this->getResponseOk("Versement modifié");

        return $response;
                default:
                    throw new \Exception("Action inconnue");
            }

    public function indexRestAction(){
        /** @var Request $request */
        $request = $this->getRequest();
        $response = new JsonModel();

        /** @var Activity $entity */
        $entity = $this->getEntityManager()->getRepository(Activity::class)->find($this->params()->fromRoute('idactivity'));
        $this->getOscarUserContextService()->check(Privileges::ACTIVITY_PAYMENT_MANAGE, $entity);

        if( !$entity ){
            return $this->getResponseNotFound("Activité non trouvée");
        } catch (\Exception $exception) {
            return $this->jsonError($exception->getMessage());
        }

        // Récupération des payements
        $payments = [];
        /** @var ActivityPayment $payment */
        foreach( $entity->getPayments() as $payment ){
            $payments[] = $payment->json();
    }

        $response->setVariable('method', $request->getMethod())
            ->setVariable('payments_status', ActivityPayment::getStatusPayments())
            ->setVariable('currencies', $this->getProjectGrantService()->getCurrencies(true))
            ->setVariable('payments', $payments);
    protected function getActivityPaymentFromQuery( string $field = 'id') :ActivityPayment
    {
       $id = $this->params()->fromQuery($field, null);
       if( $id == null ){
           throw new \Exception("ID obligatoire");
       }

        return $response;
       return $this->getActivityPaymentService()->getPaymentById($id);
    }

    public function changeAction()
@@ -287,27 +306,18 @@ class ActivityPaymentController extends AbstractOscarController
        $this->getOscarUserContextService()->check(Privileges::ACTIVITY_PAYMENT_MANAGE, $entity->getActivity());

        if ($request->getMethod() === "DELETE") {
            try {
                $entity->getActivity()->touch();
                $this->getProjectGrantService()->deleteActivityPayment($entity);
                $this->getEntityManager()->flush();

                $this->getActivityLogService()->addUserInfo(
                    sprintf(" a supprimé un %s dans l'activité %s", $entity, $entity->getActivity()->log()),
                    'Activity',
                    $entity->getActivity()->getId()
                );
            }
            catch( \Exception $e ){
                $this->getResponse()->setStatusCode(500);
                $response->setVariable('error', 'Impossible de supprimer cette échéance');
            }
            return $response;
            throw new \Exception("DEPRECATED");
        }
        else {
            /** @var ActivityPaymentForm $form */
            $form = new ActivityPaymentForm();
            $form->setAttribute('action', $this->url()->fromRoute(null, ['idactivity' => $entity->getActivity()->getId(), 'id' => $entity->getId()]));
            $form->setAttribute(
                'action',
                $this->url()->fromRoute(
                    null,
                    ['idactivity' => $entity->getActivity()->getId(), 'id' => $entity->getId()]
                )
            );
            $form->setProjectGrantService($this->getProjectGrantService());
            $form->init();
            $form->bind($entity);
Loading