Commit 2b08ec9a authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

Travaux en cours > Récupération des Jalons à faire pour la personne (a...

Travaux en cours > Récupération des Jalons à faire pour la personne (a utiliser dans le mail + écran de suivi des taches)
parent 87a898ef
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ return array(

                [
                    'controller' => 'Public',
                    'action' => ['documentation', 'parameters', 'gitlog'],
                    'action' => ['documentation', 'parameters', 'gitlog', 'todo'],
                    'roles' => ['user'],
                ],

+8 −0
Original line number Diff line number Diff line
@@ -37,6 +37,14 @@ gitlog:
      controller: Public
      action: gitlog

todo:
  type: literal
  options:
    route: /todo
    defaults:
      controller: Public
      action: todo


################################################################################
# ACCÈS aux DONNÉES
+18 −0
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ namespace Oscar\Controller;

use Laminas\View\Model\JsonModel;
use Oscar\Entity\Activity;
use Oscar\Entity\ActivityDate;
use Oscar\Entity\ActivityPerson;
use Oscar\Entity\ActivityRepository;
use Oscar\Entity\ActivityType;
@@ -230,6 +231,23 @@ class PublicController extends AbstractOscarController implements UseTimesheetSe
        return [];
    }


    public function todoAction() {
        if( $this->getCurrentPerson() == null ) {
            die("Vous n'êtes pas associé à une personne");
        }
        try {

            $milestones = $this->getPersonService()->getMiletonesPersonTodo($this->getCurrentPerson());
            foreach ($milestones as $milestone) {
                echo "$milestone\n";
            }
        } catch (\Exception $e) {
            echo $e->getMessage();
        }
        die("ICI");
    }

    /**
     * Page d'accueil.
     *
+97 −1
Original line number Diff line number Diff line
@@ -246,7 +246,103 @@ class ActivityDateRepository extends EntityRepository
        return $query->getQuery()->getSingleScalarResult();
    }

    public function getMilestonesLate(string $dateRef)
    public function getMilestonesPersonTodo( int $personId ) :array
    {
        $sql = <<<SQL
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 
    	d.finishable = true and
    	(ad.finished IS NULL OR ad.finished = 0) and 
    	ad.datestart < now()
),
-- 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

SQL;
        $stt =  $this->getEntityManager()
            ->getConnection()
            ->prepare($sql);
        return $stt->executeQuery([
            'person_id' => $personId
        ])->fetchAllAssociative();
    }
}
+6 −0
Original line number Diff line number Diff line
@@ -3077,4 +3077,10 @@ class PersonService implements UseOscarConfigurationService, UseEntityManager, U
        }
        /********/
    }

    public function getMiletonesPersonTodo(Person $getCurrentPerson)
    {
        return $this->getEntityManager()->getRepository(ActivityDate::class)->getMilestonesPersonTodo($getCurrentPerson->getId());

    }
}