Loading module/Oscar/src/Oscar/Controller/ActivityDateController.php +15 −3 Original line number Diff line number Diff line Loading @@ -521,6 +521,19 @@ class ActivityDateController extends AbstractOscarController implements UseServi $currentPerson = $this->getOscarUserContextService()->getCurrentPerson(); if( $currentPerson ){ $dateBounds = $this->getRequest()->getQuery("b", null); $bounds = null; if( $dateBounds == '3months' ){ $first = (new \DateTime())->add(\DateInterval::createFromDateString('-2 month')); $last = (new \DateTime())->add(\DateInterval::createFromDateString('+2 month')); $bounds = [ 'from' => $first->format('Y-m-d'), 'to' => $last->format('Y-m-d') ]; } // Récupération des IDS pour les activités "Directes" $idsActivityDirect = $this->getProjectGrantService()->getActivityRepository() ->getIdsForPersons([$currentPerson->getId()]); Loading @@ -547,12 +560,10 @@ class ActivityDateController extends AbstractOscarController implements UseServi $idsInOrganizations = array_merge($idsInOrganizations, $milestonesIdsOrganizations); } $idsActivities = array_merge($idsActivityDirect, $idsInOrganizations); $milestones = $this->getProjectGrantService()->getActivityDateRepository() ->getMilestonesByIdsActivity($idsActivities); ->getMilestonesByIdsActivity($idsActivities, $bounds); $types = $this->getProjectGrantService()->getActivityDateRepository() ->getMilestonesTypes(); Loading @@ -564,6 +575,7 @@ class ActivityDateController extends AbstractOscarController implements UseServi $out = $formatter->formatAllWithTypes($milestones, true); $out['organizationsDetails'] = $organizationsNamed; $out['direct'] = $idsActivityDirect; $out['bounds'] = $bounds; return new JsonModel($out); } else { throw new OscarException("Votre compte n'est associé à aucune personne"); Loading module/Oscar/src/Oscar/Entity/ActivityDateRepository.php +16 −5 Original line number Diff line number Diff line Loading @@ -178,17 +178,28 @@ class ActivityDateRepository extends EntityRepository * @param array $idsActivities * @return ActivityDate[] */ public function getMilestonesByIdsActivity(array $idsActivities) :array public function getMilestonesByIdsActivity(array $idsActivities, ?array $datesBounds = null) :array { return $this->createQueryBuilder('m') $query = $this->createQueryBuilder('m') ->select('m') ->innerJoin('m.activity', 'a') ->innerJoin('m.type', 't') ->where('a.id IN(:idsActivities)') ->orderBy('m.dateStart', 'desc') ->setParameter('idsActivities', $idsActivities) ->getQuery() ->getResult(); ->setParameter('idsActivities', $idsActivities); if( $datesBounds ){ if( $datesBounds['from'] ){ $query->andWhere('m.dateStart >= :from') ->setParameter('from', $datesBounds['from']); } if( $datesBounds['to'] ){ $query->andWhere('m.dateStart <= :to') ->setParameter('to', $datesBounds['to']); } } return $query->getQuery()->getResult(); } public function getMilestonesTypes() :array Loading module/Oscar/src/Oscar/Formatter/json/MilestoneToJsonFormatter.php +2 −2 Original line number Diff line number Diff line Loading @@ -121,9 +121,9 @@ class MilestoneToJsonFormatter public function formatAllWithTypes(array $milestones, bool $withActivity = false): array { return [ 'types' => $this->getTypesArray(), 'milestones' => $this->formatAll($milestones, $withActivity), 'progressions' => ActivityDate::progressLabels() 'progressions' => ActivityDate::progressLabels(), 'types' => $this->getTypesArray(), ]; } Loading ui/src/views/MilestonesUI.vue +78 −1 Original line number Diff line number Diff line Loading @@ -2,6 +2,9 @@ <h1> <i class="icon-calendar"></i> {{ title }}</h1> <!-- <nav>--> <!-- {{ organizationsDetails }}--> <!-- </nav>--> <section class="milstones"> <article v-for="milestone in milestones" class="milestone card" :class="{ Loading @@ -15,6 +18,13 @@ 'progression-refused': milestone.finished == 400, }" > <div v-if="yearMarkerChange(milestone)" class="dateMarker"> {{ markerYear }} </div> <div v-if="monthMarkerChange(milestone)" class="dateMarker monthMarker"> {{ months[markerMonth] }} </div> <h2 class="card-title"> <strong> <span class="problem-info" v-if="milestone.late"> Loading Loading @@ -123,11 +133,45 @@ export default { milestones: [], progressions: [], organizationsDetails: null, direct: [] direct: [], markerYear: "", markerMonth: "", months:{ "01": "Janvier", "02": "Février", "03": "Mars", "04": "Avril", "05": "Mai", "06": "Juin", "07": "Juillet", "08": "Aout", "09": "Septembre", "10": "Octobre", "11": "Novembre", "12": "Décembre", } } }, methods: { // {{ milestone.dateStart.substring(0, 4) }} yearMarkerChange(milestone) { let year = milestone.dateStart.substr(0, 4); if( year != this.markerYear ){ this.markerYear = year; return true; } return false; }, monthMarkerChange(milestone) { let month = milestone.dateStart.substr(5, 2); if( month != this.markerMonth ){ this.markerMonth = month; return true; } return false; }, handlerProgression(milestone, action) { AxiosOscar.put(milestone.url, {'action': action, 'id': milestone.id}).then((response) => { console.log(response); Loading Loading @@ -190,6 +234,39 @@ export default { } </script> <style> .milstones { padding-top: 1.5em; padding-left: 100px; } .milestone { position: relative; } .dateMarker { border-radius: 8px 0 0 0; background: #484855; font-size: 24px; font-weight: bold; padding: 0 .5em; color: white; position: absolute; display: block; top: -12px; width: 80px; left: -84px; text-align: right; } .monthMarker { text-shadow: -1px 1px 1px rgba(0,0,0,.3); border-radius: 0 0 0 8px; background: #90909b; left: -114px; top:20px; font-weight: 400; width: 110px; font-size: 1em; } .past { opacity: .7; } Loading Loading
module/Oscar/src/Oscar/Controller/ActivityDateController.php +15 −3 Original line number Diff line number Diff line Loading @@ -521,6 +521,19 @@ class ActivityDateController extends AbstractOscarController implements UseServi $currentPerson = $this->getOscarUserContextService()->getCurrentPerson(); if( $currentPerson ){ $dateBounds = $this->getRequest()->getQuery("b", null); $bounds = null; if( $dateBounds == '3months' ){ $first = (new \DateTime())->add(\DateInterval::createFromDateString('-2 month')); $last = (new \DateTime())->add(\DateInterval::createFromDateString('+2 month')); $bounds = [ 'from' => $first->format('Y-m-d'), 'to' => $last->format('Y-m-d') ]; } // Récupération des IDS pour les activités "Directes" $idsActivityDirect = $this->getProjectGrantService()->getActivityRepository() ->getIdsForPersons([$currentPerson->getId()]); Loading @@ -547,12 +560,10 @@ class ActivityDateController extends AbstractOscarController implements UseServi $idsInOrganizations = array_merge($idsInOrganizations, $milestonesIdsOrganizations); } $idsActivities = array_merge($idsActivityDirect, $idsInOrganizations); $milestones = $this->getProjectGrantService()->getActivityDateRepository() ->getMilestonesByIdsActivity($idsActivities); ->getMilestonesByIdsActivity($idsActivities, $bounds); $types = $this->getProjectGrantService()->getActivityDateRepository() ->getMilestonesTypes(); Loading @@ -564,6 +575,7 @@ class ActivityDateController extends AbstractOscarController implements UseServi $out = $formatter->formatAllWithTypes($milestones, true); $out['organizationsDetails'] = $organizationsNamed; $out['direct'] = $idsActivityDirect; $out['bounds'] = $bounds; return new JsonModel($out); } else { throw new OscarException("Votre compte n'est associé à aucune personne"); Loading
module/Oscar/src/Oscar/Entity/ActivityDateRepository.php +16 −5 Original line number Diff line number Diff line Loading @@ -178,17 +178,28 @@ class ActivityDateRepository extends EntityRepository * @param array $idsActivities * @return ActivityDate[] */ public function getMilestonesByIdsActivity(array $idsActivities) :array public function getMilestonesByIdsActivity(array $idsActivities, ?array $datesBounds = null) :array { return $this->createQueryBuilder('m') $query = $this->createQueryBuilder('m') ->select('m') ->innerJoin('m.activity', 'a') ->innerJoin('m.type', 't') ->where('a.id IN(:idsActivities)') ->orderBy('m.dateStart', 'desc') ->setParameter('idsActivities', $idsActivities) ->getQuery() ->getResult(); ->setParameter('idsActivities', $idsActivities); if( $datesBounds ){ if( $datesBounds['from'] ){ $query->andWhere('m.dateStart >= :from') ->setParameter('from', $datesBounds['from']); } if( $datesBounds['to'] ){ $query->andWhere('m.dateStart <= :to') ->setParameter('to', $datesBounds['to']); } } return $query->getQuery()->getResult(); } public function getMilestonesTypes() :array Loading
module/Oscar/src/Oscar/Formatter/json/MilestoneToJsonFormatter.php +2 −2 Original line number Diff line number Diff line Loading @@ -121,9 +121,9 @@ class MilestoneToJsonFormatter public function formatAllWithTypes(array $milestones, bool $withActivity = false): array { return [ 'types' => $this->getTypesArray(), 'milestones' => $this->formatAll($milestones, $withActivity), 'progressions' => ActivityDate::progressLabels() 'progressions' => ActivityDate::progressLabels(), 'types' => $this->getTypesArray(), ]; } Loading
ui/src/views/MilestonesUI.vue +78 −1 Original line number Diff line number Diff line Loading @@ -2,6 +2,9 @@ <h1> <i class="icon-calendar"></i> {{ title }}</h1> <!-- <nav>--> <!-- {{ organizationsDetails }}--> <!-- </nav>--> <section class="milstones"> <article v-for="milestone in milestones" class="milestone card" :class="{ Loading @@ -15,6 +18,13 @@ 'progression-refused': milestone.finished == 400, }" > <div v-if="yearMarkerChange(milestone)" class="dateMarker"> {{ markerYear }} </div> <div v-if="monthMarkerChange(milestone)" class="dateMarker monthMarker"> {{ months[markerMonth] }} </div> <h2 class="card-title"> <strong> <span class="problem-info" v-if="milestone.late"> Loading Loading @@ -123,11 +133,45 @@ export default { milestones: [], progressions: [], organizationsDetails: null, direct: [] direct: [], markerYear: "", markerMonth: "", months:{ "01": "Janvier", "02": "Février", "03": "Mars", "04": "Avril", "05": "Mai", "06": "Juin", "07": "Juillet", "08": "Aout", "09": "Septembre", "10": "Octobre", "11": "Novembre", "12": "Décembre", } } }, methods: { // {{ milestone.dateStart.substring(0, 4) }} yearMarkerChange(milestone) { let year = milestone.dateStart.substr(0, 4); if( year != this.markerYear ){ this.markerYear = year; return true; } return false; }, monthMarkerChange(milestone) { let month = milestone.dateStart.substr(5, 2); if( month != this.markerMonth ){ this.markerMonth = month; return true; } return false; }, handlerProgression(milestone, action) { AxiosOscar.put(milestone.url, {'action': action, 'id': milestone.id}).then((response) => { console.log(response); Loading Loading @@ -190,6 +234,39 @@ export default { } </script> <style> .milstones { padding-top: 1.5em; padding-left: 100px; } .milestone { position: relative; } .dateMarker { border-radius: 8px 0 0 0; background: #484855; font-size: 24px; font-weight: bold; padding: 0 .5em; color: white; position: absolute; display: block; top: -12px; width: 80px; left: -84px; text-align: right; } .monthMarker { text-shadow: -1px 1px 1px rgba(0,0,0,.3); border-radius: 0 0 0 8px; background: #90909b; left: -114px; top:20px; font-weight: 400; width: 110px; font-size: 1em; } .past { opacity: .7; } Loading