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

- Indication de l'Année/Mois disponible dans la vue "Mes Jalons"

 - Préparatif du filtre sur la période en cours
parent e0a9347d
Loading
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -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()]);
@@ -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();
@@ -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");
+16 −5
Original line number Diff line number Diff line
@@ -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
+2 −2
Original line number Diff line number Diff line
@@ -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(),
        ];
    }

+78 −1
Original line number Diff line number Diff line
@@ -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="{
@@ -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">
@@ -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);
@@ -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;
}