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

Fix : Les jalons "mailables" avec une progression et en retard sont inclus dans procédure

parent 66f5ac1e
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -378,7 +378,9 @@ class ActivityDate implements ITrackable

    function __toString()
    {
        return $this->getDateStart()->format('d M Y') . ' (' . $this->getType() . ')';
        return $this->getDateStart()->format('d M Y')
            . ( $this->isFinishable() && $this->isLate() ? ' [En retard]' : '')
            . ' (' . $this->getType() . ')';
    }

    public function isToday(DateTime $dateRef = new DateTime()): bool
+33 −19
Original line number Diff line number Diff line
@@ -282,39 +282,53 @@ class MilestoneService implements UseLoggerService, UseEntityManager, UseOscarUs
        $dateReference = new \DateTime($dateRef);

        //
        $io->info("Mails pour " . $dateReference->format('Y-m-d'));
        $io->section("Mails pour " . $dateReference->format('Y-m-d'));

        // Récupérer la liste des types de jalons
        $datetypes = $this->getDateTypeRepository()->getMailablesMilestones();

        // Calculer les dates éligibles (en fonction de la récursivité)
        $dates = [
            $dateReference->format('Y-m-d'),
        ];
        $milestoneQueryStandard = $this->getEntityManager()->getRepository(ActivityDate::class)
            ->createQueryBuilder('ad')
            ->where('ad.type = :datetype_id AND ad.dateStart IN(:dates)');

        $milestoneQuery = $this->getEntityManager()->getRepository(ActivityDate::class)
        $milestoneQueryFinishable = $this->getEntityManager()->getRepository(ActivityDate::class)
            ->createQueryBuilder('ad')
            ->where('ad.type = :datetype_id')
            ->andWhere('ad.dateStart IN(:dates)')
        ;
            ->where('ad.type = :datetype_id AND ad.dateStart IN(:dates)')
            ->orWhere('ad.dateStart < :dateref AND (ad.finished < 100 OR ad.finished IS NULL)');

        $dateRef = $dateReference->format('Y-m-d');
        foreach ($datetypes as $datetype) {
            $dates = [$dateReference->format('Y-m-d')];

            $io->info($datetype['label']);

            $queryBuilder = $milestoneQueryStandard;

            // Paramètres de la requête
            $parameters = [
                'datetype_id' => $datetype['id'],
                'dates' => [$dateRef],
            ];

            // Si le jalon a une récursivité, on calcule les dates de rappel
            if( $datetype['recursivity'] ){
                foreach (explode(',', $datetype['recursivity']) as $day){
                    $dayAdded = (new \DateTime($dateRef))->modify("+$day days");
                    $dates[] = $dayAdded->format("Y-m-d");
                    $parameters['dates'][] = $dayAdded->format("Y-m-d");
                }
            }
            $io->text($datetype['label']);
            var_dump($dates);

            $milestones = $milestoneQuery
                ->setParameters([
                    'datetype_id' => $datetype['id'],
                    'dates' => $dates,
                ])->getQuery()->getResult()
            ;
            // Si le jalon doit être terminé, on ajoute une contrainte
            // sur le champ 'finished'
            if( $datetype['finishable'] ){
                $io->writeln("Doit être terminé");
                $queryBuilder = $milestoneQueryFinishable;
                $parameters['dateref'][] = $dateRef;
            }

            $io->writeln($queryBuilder->getDQL());

            $milestones = $queryBuilder->setParameters($parameters)->getQuery()->getResult();

            foreach ($milestones as $milestone) {
                echo "$milestone\n";
            }