Commit c7788d30 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

Fix : Erreur d'affichage des affectations lors de l'ajout/modification d'une...

Fix : Erreur d'affichage des affectations lors de l'ajout/modification d'une affectation depuis la fiche activité
Up : Ajout de la liste des versements/jalons à traiter sur la page d'accueil
parent 2b08ec9a
Loading
Loading
Loading
Loading
Loading
+89 −0
Original line number Diff line number Diff line
-------------------------------------------------------------------
-- Retourne les jalons non-faits, faisables, de la personne
-------------------------------------------------------------------
WITH
-- Liste des jalons à faire
jalons_non_faits AS (

    SELECT
        ad.id AS activitydate_id,
        ad.*,
        d.label,
        a.label as activity_label,
        a.codeeotp as activity_numfinancier,
        a.oscarnum as activity_oscarnum,
        p.acronym as acronym

    FROM activitydate ad
             join activity a on a.id = ad.activity_id
             join datetype d on d.id = ad.type_id
             left join project p on p.id = a.project_id

    WHERE
      -- Type de jalons terminables
        d.finishable = true and

      -- Jalon non terminé
        (ad.finished IS NULL OR ad.finished <= 50) and

      -- et passé
        ad.datestart < :dateref and

      -- Sur une activité active
        a.status NOT IN(:inactivestatus)
),
-- Rôles selon les types de jalons
roles_needed AS (
    SELECT datetype_id, role_id
    FROM role_datetype
)

-- Person <> Activity
SELECT DISTINCT
    ud.*
FROM jalons_non_faits ud
         JOIN datetype dt ON dt.id = ud.type_id
         JOIN roles_needed rn ON rn.datetype_id = dt.id
         JOIN activityperson ap
              ON ap.activity_id = ud.activity_id
                  AND ap.roleobj_id = rn.role_id
                  AND ap.person_id = :person_id
UNION
--- Person <> Project>Activity
SELECT DISTINCT
    ud.*
FROM jalons_non_faits ud
         JOIN activity a ON a.id = ud.activity_id
         JOIN datetype dt ON dt.id = ud.type_id
         JOIN roles_needed rn ON rn.datetype_id = dt.id
         JOIN projectmember pm
              ON pm.project_id = a.project_id
                  AND pm.roleobj_id = rn.role_id
                  AND pm.person_id = :person_id
UNION
--- Person <> Organization>Activity
SELECT DISTINCT
    ud.*
FROM jalons_non_faits ud
         JOIN datetype dt ON dt.id = ud.type_id
         JOIN roles_needed rn ON rn.datetype_id = dt.id
         JOIN activityorganization ao
              ON ao.activity_id = ud.activity_id
         JOIN organizationperson op
              ON op.organization_id = ao.organization_id
                  AND op.roleobj_id = rn.role_id
                  AND op.person_id = :person_id
UNION
--- Person <> Organization>Project
SELECT DISTINCT
    ud.*
FROM jalons_non_faits ud
         JOIN activity a ON a.id = ud.activity_id
         JOIN datetype dt ON dt.id = ud.type_id
         JOIN roles_needed rn ON rn.datetype_id = dt.id
         JOIN projectpartner pp
              ON pp.project_id = a.project_id
         JOIN organizationperson op
              ON op.organization_id = pp.organization_id
                  AND op.roleobj_id = rn.role_id
                  AND op.person_id = :person_id
+63 −0
Original line number Diff line number Diff line
-------------------------------------------------------------------
-- Retourne les versements prévisionnels en retard de la personne
-------------------------------------------------------------------
WITH payments_non_faits AS (
    -- Versement en retard
    SELECT ap.*,
           a.label    as activity_label,
           a.oscarnum as activity_oscarnum,
           a.status as activity_status,
           a.codeeotp as activity_numfinancier,
           p.acronym  as project_acronym

    FROM activitypayment ap
             JOIN activity a ON a.id = ap.activity_id
             LEFT JOIN project p ON a.project_id = p.id
    -- Payment prévisionnel du passé
    WHERE ap.status = :status_previsionnel
      AND ap.datepredicted <= CAST(:dateref AS DATE)
),
-- Rôles pouvant éditer les versements
     roles_needed AS (SELECT ur.id, ur.role_id
                      FROM user_role ur
                               JOIN role_privilege rp ON rp.role_id = ur.id
                               JOIN privilege p ON p.id = rp.privilege_id
                               JOIN public.categorie_privilege cp on p.categorie_id = cp.id
                      WHERE p.code = 'PAYMENT_MANAGE'
                        AND cp.code = 'ACTIVITY')

-- Person <> Activity
SELECT DISTINCT pn.*
FROM payments_non_faits pn
         JOIN activityperson ap ON ap.activity_id = pn.activity_id
         JOIN roles_needed rn ON ap.roleobj_id = rn.id
WHERE ap.person_id = :person_id
UNION

--- Person <> Project>Activity
SELECT DISTINCT pn.*
FROM payments_non_faits pn
         JOIN activity a ON a.id = pn.activity_id
         JOIN projectmember pm ON pm.project_id = a.project_id
         JOIN roles_needed rn ON pm.roleobj_id = rn.id
WHERE pm.person_id = :person_id
UNION

--- Person <> Organization>Activity
SELECT DISTINCT pn.*
FROM payments_non_faits pn
         JOIN activityorganization ao ON ao.activity_id = pn.activity_id
         JOIN organizationperson op ON op.organization_id = ao.organization_id
         JOIN roles_needed rn ON rn.id = op.roleobj_id
WHERE op.person_id = :person_id
UNION

--- Person <> Organization>Project
SELECT DISTINCT pn.*
FROM payments_non_faits pn
         JOIN activity a ON a.id = pn.activity_id
         JOIN projectpartner pp ON pp.project_id = a.project_id
         JOIN organizationperson op ON op.organization_id = pp.organization_id
         JOIN roles_needed rn ON op.roleobj_id = rn.id
WHERE op.person_id = :person_id
;
 No newline at end of file
+18 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
namespace Oscar\Controller;

use Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger;
use Laminas\View\Model\ViewModel;
use Oscar\Exception\OscarException;
use Oscar\OscarVersion;
use Oscar\Service\SearchService;
@@ -48,6 +49,23 @@ class AbstractOscarController extends AbstractActionController implements UseOsc
        return $this->getOscarConfigurationService()->oscarText($text);
    }


    protected function renderVueJS(string $script, array $datas = [], array $viewDatas = [])
    {
        if( !array_key_exists('url', $datas) ){
            $datas['url'] = $this->getRequest()->getUri()->getPath();
        }
        $viewDatas['script'] = $script;
        $viewDatas['params'] = $this->vueJsParamJsonBase64($datas);
        $view = new ViewModel($viewDatas);

        return $view->setTemplate('oscar/vuejs-generic.phtml');
    }

    protected function vueJsParamJsonBase64(array $params){
        return base64_encode(json_encode($params));
    }

    /**
     * @throws OscarException
     */
+6 −3
Original line number Diff line number Diff line
@@ -314,12 +314,15 @@ class ActivityDateController extends AbstractOscarController implements UseServi
                    case 'POST':
                        $action = $this->params()->fromPost('action', 'update');


                        $this->getLoggerService()->info("POST action: $action");
                        if ($action == 'create') {
                            throw new Missing404Exception();
                        }

                        try {
                            $milestone = $this->getMilestoneService()->getMilestone($this->params()->fromPost('id'));
                        } catch (\Exception $e) {
                            $this->getLoggerService()->error($e->getMessage());
                        }

                        ////////////////////////////////////////////////////////////
                        // Marquer le jalon comme terminé / non-terminé
+19 −2
Original line number Diff line number Diff line
@@ -185,7 +185,6 @@ class ActivityPaymentController extends AbstractOscarController implements UseSe
                        'datePayment'     => $this->params()->fromPost('datePayment'),
                    ];


                    if ($action == 'create') {
                        try {
                            $this->getProjectGrantService()->addNewActivityPayment($postedDatas);
@@ -249,6 +248,8 @@ class ActivityPaymentController extends AbstractOscarController implements UseSe

        $activity = $this->getProjectGrantService()->getActivityById($this->params()->fromRoute('idactivity', null));

        $this->getOscarUserContextService()->check(Privileges::ACTIVITY_PAYMENT_SHOW, $activity);

        $method = $request->getMethod();

        try {
@@ -265,15 +266,31 @@ class ActivityPaymentController extends AbstractOscarController implements UseSe
                    return $this->jsonOutput($data);

                case 'DELETE':
                    $this->getOscarUserContextService()->check(Privileges::ACTIVITY_PAYMENT_MANAGE, $activity);
                    $this->getActivityPaymentService()->deletePayment($this->getActivityPaymentFromQuery());
                    return $this->getResponseOk("Versement supprimé");

                case 'PUT':
                    $this->getOscarUserContextService()->check(Privileges::ACTIVITY_PAYMENT_MANAGE, $activity);
                    $this->getActivityPaymentService()->createPayment($this->getJsonREST(), $activity);
                    return $this->getResponseOk("Versement ajouté");

                case 'POST':
                    $this->getActivityPaymentService()->updatePayment($this->getJsonREST(), $activity);
                    $this->getOscarUserContextService()->check(Privileges::ACTIVITY_PAYMENT_MANAGE, $activity);
                    $datas = $this->getJsonREST();
                    if( $datas['action']  == 'status' ){
                        try {
                            $this->getLoggerService()->info(json_encode($datas));
                            $this->getProjectGrantService()->updateActivityPaymentStatus($datas);
                            return $this->getResponseOk("Le versement a bien été modifié");
                        } catch (\Exception $e) {
                            return $this->getResponseInternalError(
                                sprintf(_("Impossible de modifier le payment : %s"), $e->getMessage())
                            );
                        }
                    }

                    $this->getActivityPaymentService()->updatePayment($datas, $activity);
                    return $this->getResponseOk("Versement modifié");

                default:
Loading