Loading module/Oscar/src/Oscar/Entity/ActivityDate.php +3 −1 Original line number Diff line number Diff line Loading @@ -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 Loading module/Oscar/src/Oscar/Service/MilestoneService.php +33 −19 Original line number Diff line number Diff line Loading @@ -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"; } Loading Loading
module/Oscar/src/Oscar/Entity/ActivityDate.php +3 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
module/Oscar/src/Oscar/Service/MilestoneService.php +33 −19 Original line number Diff line number Diff line Loading @@ -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"; } Loading