Projet

Général

Profil

Development #48480

maelis: ajouter la lecture du planning d'une activité pour un enfant

Ajouté par Serghei Mihai il y a plus de 3 ans. Mis à jour il y a plus de 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
12 novembre 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description


Fichiers

0001-maelis-add-child-month-planning-listing-47172.patch (7,79 ko) 0001-maelis-add-child-month-planning-listing-47172.patch Serghei Mihai, 12 novembre 2020 10:57
0001-maelis-add-child-month-planning-listing-48480.patch (107 ko) 0001-maelis-add-child-month-planning-listing-48480.patch Nicolas Roche, 20 décembre 2020 02:51
0001-maelis-add-child-month-planning-listing-48480.patch (107 ko) 0001-maelis-add-child-month-planning-listing-48480.patch Nicolas Roche, 20 décembre 2020 21:10
0001-maelis-add-child-month-planning-listing-48480.patch (107 ko) 0001-maelis-add-child-month-planning-listing-48480.patch Nicolas Roche, 21 décembre 2020 09:23
Screenshot_2020-12-21 Gestion des plannings de vos enfants.png (64,3 ko) Screenshot_2020-12-21 Gestion des plannings de vos enfants.png Nicolas Roche, 21 décembre 2020 09:52
0001-maelis-add-child-month-planning-listing-48480.patch (108 ko) 0001-maelis-add-child-month-planning-listing-48480.patch Nicolas Roche, 22 décembre 2020 15:22
0004-maelis-decompose-units-related-to-moments-of-the-day.patch (25,3 ko) 0004-maelis-decompose-units-related-to-moments-of-the-day.patch Nicolas Roche, 23 décembre 2020 17:35
0003-maelis-add-child-month-planning-listing-48480.patch (88,2 ko) 0003-maelis-add-child-month-planning-listing-48480.patch Nicolas Roche, 23 décembre 2020 17:35
0002-maelis-allow-school-year-computation-from-a-given-da.patch (5,44 ko) 0002-maelis-allow-school-year-computation-from-a-given-da.patch Nicolas Roche, 23 décembre 2020 17:35
0001-maelis-decompose-datetime-format-constante-48480.patch (1,81 ko) 0001-maelis-decompose-datetime-format-constante-48480.patch Nicolas Roche, 23 décembre 2020 17:35

Demandes liées

Lié à Passerelle - Development #47172: maelis: -lecture- et écriture du calendrier d'activitésRejeté30 septembre 2020

Actions

Révisions associées

Révision bb748877 (diff)
Ajouté par Nicolas Roche il y a plus de 3 ans

maelis: decompose datetime format constante (#48480)

Révision b5da0a74 (diff)
Ajouté par Nicolas Roche il y a plus de 3 ans

maelis: allow school year computation from a given date (#48480)

Révision b6fa7108 (diff)
Ajouté par Nicolas Roche il y a plus de 3 ans

maelis: add child month planning listing (#48480)

Révision f9885e2f (diff)
Ajouté par Nicolas Roche il y a plus de 3 ans

maelis: decompose units related to moments of the day (#48480)

Historique

#1

Mis à jour par Serghei Mihai il y a plus de 3 ans

Les données d'origine (l'objet réponse serialisé) ont l'aspect suivant:

[
    {
        "unit": {
            "id": "A10003123492",
            "idActivity": "A10003123490",
            "libelle": "2 2020-2021  RESTAURATION SCOLAIRE",
            "motif": "X" 
        },
        "listDays": [
            {
                "datePlanning": "2020-11-02T18:12:36.038+01:00",
                "dayType": {
                    "code": "DAY" 
                }
            },
            {
                "datePlanning": "2020-11-03T18:12:36.038+01:00",
                "dayType": {
                    "code": "DAY" 
                }
            }
        ]
    }
]

je les transforme en:

[
    {
        "unit": {
            "id": "A10003123492",
            "idActivity": "A10003123490",
            "libelle": "2 2020-2021  RESTAURATION SCOLAIRE",
            "motif": "X" 
        },
        "id": "A10003123490",
        "text": "2 2020-2021  RESTAURATION SCOLAIRE",
        "days": [
            {
                "type": "DAY",
                "id": "2020-11-02T18:12:36.038+01:00",
                "text": "02/11/2020 18:12:36" 
            },
            {
                "type": "DAY",
                "id": "2020-11-03T18:12:36.038+01:00",
                "text": "03/11/2020 18:12:36" 
            }
        ]
    }
]

#2

Mis à jour par Serghei Mihai il y a plus de 3 ans

  • Lié à Development #47172: maelis: -lecture- et écriture du calendrier d'activités ajouté
#3

Mis à jour par Thomas Noël il y a plus de 3 ans

C'est pour quel usage au final ? Un affichage dans combo (dans ce cas ok, on est assez libre) ou bien dans wcs (et là il va sans doute falloir mieux spécifier pour préparer du widget)

Sur l'id tu choisis de prendre unit.idActivity au lieu de unit.id, tu as pu savoir à quoi chacun truc correspondait pour ça ?

#4

Mis à jour par Frédéric Péters il y a plus de 3 ans

Je continue de mon côté à encourager la question : cette info avec les composants de Publik, elle aurait quelle forme ? Une API dans Chrono qui retourerait une liste des inscriptions ça aurait quelle forme ? Répondre à ça, puis produire la forme que Publik nativement aurait, c'est je pense ce qui assurera une progression vers Publik Famille.

#5

Mis à jour par Serghei Mihai il y a plus de 3 ans

Thomas Noël a écrit :

C'est pour quel usage au final ? Un affichage dans combo (dans ce cas ok, on est assez libre) ou bien dans wcs (et là il va sans doute falloir mieux spécifier pour préparer du widget)

Déjà j'essaie de remonter les informations de base pour wcs mais je suis d'accord qu'il faudrait quelque chose de mieux pour un widget.
Je pense qu'on devrait avoir un endpoint qui remonte toutes les activités avec leur plannings.

Sur l'id tu choisis de prendre unit.idActivity au lieu de unit.id, tu as pu savoir à quoi chacun truc correspondait pour ça ?

J'ai posé la question: en attente de réponse.

#6

Mis à jour par Nicolas Roche il y a plus de 3 ans

  • Sujet changé de maelis: ajouter la lecture du planning d'une activité pour un enfant à maelis: ajouter la lecture du planIl y a encore un troisième niveau de découpage avec les "placeList", qui correspond aux différents lieux (ex: "ALSH PAGNOL", "ALSH MISTRAL").ning d'une activité pour un enfant

A priori,
Les unité sont un découpage des activités par tranches de dates.
Il y a encore un troisième niveau de découpage avec les "placeList", qui correspondent aux différents lieux (ex: "ALSH PAGNOL", "ALSH MISTRAL"), mais qui n'entre pas en compte ici.

$ curl 'https://passerelle.dev.publik.love/maelis/test/activity-list/?NameID=local&personID=21293'
{"data" : [{
   "text" : "2020-2021 ALSH VACANCES PAGNOL (CAPA)",   // activité
   "id" : "A10003131850",
   "openDayList" : [...],
   "unitPortailList" : [
   {
      "dateStart" : "2021-02-28T00:00:00+01:00",   // unité
      "dateEnd" : "2021-03-05T00:00:00+01:00",
      "idUnit" : "A10003131861",
      "label" : "HIVER 2EME SEMAINE",
   },
   {
      "dateStart" : "2020-10-26T00:00:00+01:00",   // unité
      "dateEnd" : "2020-10-30T00:00:00+01:00",
      "idUnit" : "A10003131879",
      "label" : "TOUSSAINT 2EME SEMAINE",
   },
}

Ici, le service web 'readChildMonthPlanning' permet aussi de filtrer sur les unités.
Peut-être ajouter ce paramètre ?

Pour la présentation du résultat, j'avoue être content de ne pas être à ta place,
car je ne saurais pas comment présenter une arborescence sous forme de liste.

#7

Mis à jour par Nicolas Roche il y a plus de 3 ans

  • Sujet changé de maelis: ajouter la lecture du planIl y a encore un troisième niveau de découpage avec les "placeList", qui correspond aux différents lieux (ex: "ALSH PAGNOL", "ALSH MISTRAL").ning d'une activité pour un enfant à maelis: ajouter la lecture du planning d'une activité pour un enfant
#8

Mis à jour par Nicolas Roche il y a plus de 3 ans

Puisque les unités sont un découpage dans les temps, alors une liste convient parfaitement ici.

Je pense qu'on devrait avoir un endpoint qui remonte toutes les activités avec leur plannings.

Pour représenter les activité, je dirais qu'il faudrait potentiellement ajouter autant de endpoints qu'il y a de listes dans l'objet activité.

find_activities(school_Year=None, date_start=None, date_end=None)
find_weekly_calendar_ctivity_list(activityID)
find_open_day_list(activityID)
find_units(activityID=None, placeID=None)
find_conso_tarif_list(unitID)
find_unit_enemies(unitID)
find_places(unitID)

Avec aussi, si l'on est certain d'avoir une arborescence (en imaginant que filtrer sur une année scolaire le permette par exemple) :

find_unit(placeID)
find_activity(unitID)

Et alors, pour représenter le calendrier d'activité il vaudrait mieux utiliser comme ID celui du nœud le plus profond : unitID ici.

[{
  ...
  id = "A10003123492:2020-11-02",            # ssi il existe une et une seule activité par unité
  text = "RESTAURATION SCOLAIRE 02/11/2020"  # je pense que l'heure ne compte pas (elle me semble n'être valable que dans les dates de publication)
}, ...]

#9

Mis à jour par Nicolas Roche il y a plus de 3 ans

Une API dans Chrono qui retournerait une liste des inscriptions ça aurait quelle forme ?

Si les widgets doivent tout faire avec une seule requête, alors il faut fusionner les activités avec les inscriptions d'autant de façon qu'il y aura de widgets.

Mais sinon, et si c'était chrono j'imagine que ce serait ce découpage :
  • activité <=> agenda virtuel
  • unit <=> agenda de type rendez-vous
  • place <=> guichets
  • DAY/AM/PM <=> type des rendez-vous

et je dirais qu'une liste des inscriptions aurais la même forme que les datetimes renvoyés par chrono : des slots avec le minimum d'info en plus (peut-être les différents IDs voir les URL vers l'API de réservation #47172, mais il manque le placeID pour celà).
Ensuite ce serait à l'appelant de connaître la liste des activités pour savoir comment présenter ces slots (comme connaître le placeID par exemple).

Peut-être dans ce ticket juste faire un premier endpoint minimaliste, utilisable par tous les widgets, sachant qu'ensuite il sera dérivé par d'autres plus spécifiques, quand on saura ce dont auront besoin chacun des widgets (comme faire intervenir les dates de publication par exemple) ?

#10

Mis à jour par Serghei Mihai il y a plus de 3 ans

Thomas Noël a écrit :

Sur l'id tu choisis de prendre unit.idActivity au lieu de unit.id, tu as pu savoir à quoi chacun truc correspondait pour ça ?

Réponse du tech de Sigec:

Concernant l'unité, cela correspond à un sous-ensemble d'une activité. L'activité est le cadre principal et les unités sous-jacentes permettent de spécifier éventuellement des périodes (matin, soir, telle date à telle date...), des tarifs...

Les 2 sont importantes. Il faudrait les formatter d'une certaine manière dans "id" pour l'utiliser ensuite lors de la mise à jour.

#11

Mis à jour par Thomas Noël il y a plus de 3 ans

Serghei Mihai a écrit :

Les 2 sont importantes. Il faudrait les formatter d'une certaine manière dans "id" pour l'utiliser ensuite lors de la mise à jour.

Je vois. Dans ce cas, pour d'autres logiciels, on a choisi de construire un id du genre "xxx-yyy" où xxx et yyy sont des deux identifiants. Je ne sais pas très bien si ça s'applique ici, mais voilà.

#12

Mis à jour par Nicolas Roche il y a plus de 3 ans

Puisque les unités sont un découpage dans les temps

En fait non, c'est principalement utilisé pour faire un découpage de la journée :

activityPortail: [
{
  idAct: A10003132030,
  label: 2020-2021 CENTRE DE LOISIRS MERCREDI,
  unitPortailList: [
  {
    idUnit: A10003132034,
    label: JOURNEE,
  }, {
    idUnit: A10003132036,
    label: MATIN,
  }, {
    idUnit: A10003132038,
    label: MATIN ET REPAS,
  }, {
    idUnit: A10003132040,
    label: APRES MIDI
}]}]
#13

Mis à jour par Lauréline Guérin il y a plus de 3 ans

  • Assigné à mis à Serghei Mihai
#14

Mis à jour par Nicolas Roche il y a plus de 3 ans

  • Statut changé de Solution proposée à En cours
  • Assigné à changé de Serghei Mihai à Nicolas Roche

De nos discussions sur la liste, nous avons esquissé ce format en sortie du endpoint :

   {
     "data": [
        {
           "id": "[ID_ACTIVITY]-[ID_UNIT]-[JOUR]-[USER]",
           "category": "École",                      # label activité
           "text": "Accueil Matin",                  # label unit
           "datetime": "2020-08-12 08:00",           # jour
           "user_booking_status": "not-booked",      # statut
           "api": {                                  # (ou pas)
              "fillslots_url": ...,
              "cancel_callback_url": None,
           }
        }
        ...

Aussi, pour les 4 unités libellées : JOURNEE, MATIN, MATIN ET REPAS, APRES MIDI
on prévoit de retourner à leur place 3 unités factices "temps de la journée" : MATIN, REPAS et SOIR.

Ce sera ensuite au endpoint de réservation de retrouver la vrai unité en combinant les occurrences des 3 unités factices.
Le but de cette manipulation est de ne pas à avoir à afficher un bouton radio sur les combinaisons exposées par maélis (jusqu'à 8 ici), mais des cases à cocher sur leur (3) composantes.

#15

Mis à jour par Frédéric Péters il y a plus de 3 ans

MATIN, REPAS et SOIR.

Vu ce à quoi ça correspond, plutôt après-midi que soir. (aussi il s'agira de présenter à l'usager des libellés convenables, donc là où on intervient ne tapons pas tout en majuscules).

#16

Mis à jour par Nicolas Roche il y a plus de 3 ans

Le endpoint s'utilise soit :
  • sans dates : il retourne le planning sur la semaine courante
  • avec une date de début : il retourne le planning sur la semaine qui comprend cette date
  • avec un intervalle de 2 dates : il retourne le planning sur intervalle

Je propose ce format (il manque #47172 pour avoir les URLs de réservations) :

   "data" : [
      {
         "category" : "MULTI ACCUEIL LES OLIVIERS",
         "category_id" : "A10000003840",
         "datetime" : "2020-12-14 00:00",
         "id" : "2020-12-14 00:00-A10000003840-A10000003844",
         "slot_id" : "A10000003844",
         "text" : "MULTI ACCUEIL LES OLIVIERS - Réguliers",
         "user_booking_status" : "not-booked" 
      },
      {
         "category" : "2020-2021 CENTRE DE LOISIRS MERCREDI",
         "category_id" : "A10003132030",
         "datetime" : "2020-12-16 08:00",
         "id" : "2020-12-16 08:00-A10003132030-EO0000000001",
         "slot_id" : "EO000000000001",
         "text" : "Matinée",
         "user_booking_status" : "not-booked" 
      },

J'ai retiré l'usager (user_id) de l'identifiant puisqu'on ne prévoit pas d'en traiter plusieurs en même temps.
J'ai mis la date en premier dans l'id et j'ai trié la liste sur l'identifiant afin qu'elle suive l'ordre attendu sur la maquette.
J'ai ajouté les identifiants des activités ( category_id ) et des unités ( slot_id ), pour clarifier un peu le code du connecteur.

J'ai bien testé et les résultats me semblent cohérents avec ce que remonte les webservices.
Cependant, ça ne colle pas ce que présente le portail de maélis. Cf les accès donnés ici https://dev.entrouvert.org/projects/parsifal-mairie-de-toulouse (puis Gestion des Activtés > Gestion des plannings de vos enfants > voir la semaine du 14 au 20 décembre) à mettre en regard avec le fichier passerelle/tests/data/maelis/child_planning_before_decomposition.json.

On voit que le FO Maélis :
  • n'affiche que 4 lignes alors que le connecteur retourne 8 activités et 14 unités.
  • affiche 4 inscriptions à l'unité "2 2020-2021 RESTAURATION SCOLAIRE", le connecteur aussi.
  • n'affiche pas de ligne concernant les inscriptions pour "1 2020-2021 GARDERIE MATIN" retournées par le connecteur.
  • affiche "2020-2021 CENTRE DE LOISIRS MERCREDI" non réservé le mercredi alors que d'après le connecteur c'est réservé.
  • (sur janvier le planning me renvoyait au connecteur une journée réservée qui n'existe pas dans les activités. Il s'agissait d'une réservation que j'avais faite en testant le WS de réservation. Je l'ai retiré.)
#17

Mis à jour par Nicolas Roche il y a plus de 3 ans

J'ai revu le code de décomposition des unités en me basant sur leur id.
Et j'ai pris en compte un bug du WS readActivityList qui n'accepte pas de borne supérieure si on l'interroge avec deux dates à cheval sur deux année.

#18

Mis à jour par Nicolas Roche il y a plus de 3 ans

En voulant respecter l'ordre d'affichage de la maquette, j'ai réalisé que je pouvais retirer l'heure de l'identifiant,

J'ai un doute pour les noms des champs choisis :
  • category_id pour coller aux catégories de la maquette ; ce que Maélis appelle l'activité.
  • slot_id représenter chaque case à cocher sur la maquette ; ce que Maélis appelle l'unité.

Voici le rendu sur la journée du 16.
Pour la catégorie CENTRE DE LOISIRS MERCREDI il y a une 4ème unité qui vient en plus de Matin, Repas. Je ne sais pas à quoi elle correspond mais je devrais peut-être aussi la découper...

      {
         "category" : "MULTI ACCUEIL LES OLIVIERS",
         "category_id" : "A10000003840",
         "datetime" : "2020-12-16 00:00:00",
         "id" : "2020-12-16-A10000003840-A10000003845",
         "slot_id" : "A10000003845",
         "text" : "MULTI ACCUEIL LES OLIVIERS - Occasionnels",
         "user_booking_status" : "not-booked" 
      },
      {
         "category" : "HALTE GARDERIE LES MAGNOLIAS",
         "category_id" : "A10000006100",
         "datetime" : "2020-12-16 00:00:00",
         "id" : "2020-12-16-A10000006100-A10000006104",
         "slot_id" : "A10000006104",
         "text" : "HALTE GARDERIE LES MAGNOLIAS - Réguliers",
         "user_booking_status" : "not-booked" 
      },
      {
         "category" : "HALTE GARDERIE LES MAGNOLIAS",
         "category_id" : "A10000006100",
         "datetime" : "2020-12-16 00:00:00",
         "id" : "2020-12-16-A10000006100-A10000006105",
         "slot_id" : "A10000006105",
         "text" : "HALTE GARDERIE LES MAGNOLIAS - Occasionnels",
         "user_booking_status" : "not-booked" 
      },

      {
         "category" : "2020-2021 CENTRE DE LOISIRS MERCREDI",
         "category_id" : "A10003132030",
         "datetime" : "2020-12-16 00:00:00",
         "id" : "2020-12-16-A10003132030-A10003132032",
         "slot_id" : "A10003132032",
         "text" : "2020-2021 CENTRE DE LOISIRS MERCREDI",
         "user_booking_status" : "booked" 
      },
      {
         "category" : "2020-2021 CENTRE DE LOISIRS MERCREDI",
         "category_id" : "A10003132030",
         "datetime" : "2020-12-16 08:00:00",
         "id" : "2020-12-16-A10003132030-EO0001PART01",
         "slot_id" : "EO0001PART01",
         "text" : "Matinée",
         "user_booking_status" : "not-booked" 
      },
      {
         "category" : "2020-2021 CENTRE DE LOISIRS MERCREDI",
         "category_id" : "A10003132030",
         "datetime" : "2020-12-16 12:00:00",
         "id" : "2020-12-16-A10003132030-EO0001PART02",
         "slot_id" : "EO0001PART02",
         "text" : "Repas",
         "user_booking_status" : "not-booked" 
      },
      {
         "category" : "2020-2021 CENTRE DE LOISIRS MERCREDI",
         "category_id" : "A10003132030",
         "datetime" : "2020-12-16 14:00:00",
         "id" : "2020-12-16-A10003132030-EO0001PART03",
         "slot_id" : "EO0001PART03",
         "text" : "Après-midi",
         "user_booking_status" : "not-booked" 
      },

      {
         "category" : "COURS DE DANSE",
         "category_id" : "A10003132090",
         "datetime" : "2020-12-16 00:00:00",
         "id" : "2020-12-16-A10003132090-A10003132091",
         "slot_id" : "A10003132091",
         "text" : "COURS DE DANSE",
         "user_booking_status" : "not-booked" 
      },
#19

Mis à jour par Frédéric Péters il y a plus de 3 ans

Pour la catégorie CENTRE DE LOISIRS MERCREDI il y a une 4ème unité qui vient en plus de Matin, Repas. Je ne sais pas à quoi elle correspond mais je devrais peut-être aussi la découper...

Tu peux ajouter ça comme question à leur adresser ?

Sinon, dans leur portail, ils affichent vraiment à l'usager "2020-2021 CENTRE DE LOISIRS MERCREDI", ou ils ont une info ailleurs pour avoir des libellés plus présentables ? (mais je ferai peut-être un ticket séparé pour cette question, ici on obtient un format exploitable, c'est nickel).

'personID': {'description': _('Person ID')},

personID ici c'est l'identifiant d'un enfant ? Si c'est bien ça, tu appellerais ça Child ID ?

#20

Mis à jour par Nicolas Roche il y a plus de 3 ans

Oui, ils affichent vraiment ça.

personID -> childID

oui c'est mieux (le WS s'appelle readChildMonthPlanning mais il prend un numPerson en paramètre)

#21

Mis à jour par Nicolas Roche il y a plus de 3 ans

J'ai juste changé personID en childID et utilisé la fonction parse_date de django.

#22

Mis à jour par Serghei Mihai il y a plus de 3 ans

J'aurais vu un découpage dans plusieurs patchs, d'abord un petit que transforme datetime_format en DATETIME_FORMAT, un autre qui met à jour la fonction get_default_school_year ensuite celui qui remonte le planning.

Cela facilite la lecture et la compréhension.

#23

Mis à jour par Nicolas Roche il y a plus de 3 ans

0001: Je décompose le format des dates pour pouvoir le réutiliser ensuite sur les dates et/ou l'heure.

0002: Je me suis demandé pourquoi tu a fais démarrer la nouvelle année scolaire au 31 juillet plutôt qu'au 1er août (mais de toute façon Brice me dit qu'il n'y a pas de "vrai" date).

0003: Je vais chercher les infos d'abord via readActivityList pour avoir tous les événements réservables, et accessoirement aussi parce qu'il le nom de l'activité (qui permet de remonter une "catégorie"). Ensuite je les rapproche des événements déjà réservés donnés readChildMonthPlanning .

0004: Fait le découpage des unités qui concernant la journée de centre aéré ( matin, repas, aprés-midi) avec en tête que ce soit facile ensuite de faire l'opération inverse (je ne l'ai pas encore fait). J'ai ajouté au endpoint un paramètre qui permettra d'obtenir la réponse originale, ne serait-ce que pour faciliter la mise à jour du fichier de test.

#24

Mis à jour par Serghei Mihai il y a plus de 3 ans

  • Statut changé de Solution proposée à Solution validée

Dans le 0004 petite erreur de typo dans la description du paramètre legacy: Decompose events releted to parts of the day if set => related.
Sinon go.

#25

Mis à jour par Nicolas Roche il y a plus de 3 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit f9885e2fab49510a09022b5aa12dd0904129e317
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Wed Dec 23 17:11:56 2020 +0100

    maelis: decompose units related to moments of the day (#48480)

commit b6fa7108472b49682cf247e5f1058f548b090897
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Wed Dec 23 16:45:32 2020 +0100

    maelis: add child month planning listing (#48480)

commit b5da0a74ea6a7aae543af50b02f255e5c59cb9ed
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Wed Dec 23 15:18:51 2020 +0100

    maelis: allow school year computation from a given date (#48480)

commit bb748877fae9156afd6dab041b6cee5d2ebabd56
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Wed Dec 23 15:08:14 2020 +0100

    maelis: decompose datetime format constante (#48480)
#26

Mis à jour par Frédéric Péters il y a plus de 3 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF