Projet

Général

Profil

Development #67292

Pouvoir dupliquer un événement

Ajouté par Anaïs Ecuvillon il y a presque 2 ans. Mis à jour il y a plus d'un an.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
12 juillet 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

On a déjà les événements récurrents, mais parfois la récurrence peut-être juste :
  • horaire, c'est-à-dire le même événement, le même jour, seule l'heure change ;
  • sans logique mathématique, c'est-à-dire le même événement, mais un autre jour, un autre horaire, pas de récurrence régulière.

Je rencontre ces deux cas lors de la mise en place d'inscription à des formations proposées en interne par une collectivité à ses agents.
Le même évènement va être proposé régulièrement plusieurs fois dans l'année, ce serait bien pratique de pouvoir dupliquer un événement existant. Le dupliquer avec toutes les données remplies à l'identique, sauf le jour et l'heure de l'évènement.


Fichiers

0001-manager-allow-duplication-of-events-67292.patch (5,3 ko) 0001-manager-allow-duplication-of-events-67292.patch A. Berriot, 12 juillet 2022 15:41
Screenshot 2022-07-12 at 15-38-04 Agendas - Visites du jardin botanique.png (111 ko) Screenshot 2022-07-12 at 15-38-04 Agendas - Visites du jardin botanique.png option dupliquer dans le menu déroulant A. Berriot, 12 juillet 2022 15:42
Screenshot 2022-07-12 at 15-38-22 Agendas - Visites du jardin botanique.png (137 ko) Screenshot 2022-07-12 at 15-38-22 Agendas - Visites du jardin botanique.png modale ouvert après clic sur dupliquer, avec les informations préremplies A. Berriot, 12 juillet 2022 15:42
Screenshot 2022-07-12 at 15-39-10 Agendas - Visites du jardin botanique.png (138 ko) Screenshot 2022-07-12 at 15-39-10 Agendas - Visites du jardin botanique.png bouton dupliquer dans l'appbar, sur la page de paramètrage d'un évènement A. Berriot, 12 juillet 2022 15:42
0001-manager-allow-duplication-of-events-67292.patch (8,2 ko) 0001-manager-allow-duplication-of-events-67292.patch A. Berriot, 20 juillet 2022 08:46
0001-manager-allow-duplication-of-events-67292.patch (8,23 ko) 0001-manager-allow-duplication-of-events-67292.patch A. Berriot, 20 juillet 2022 09:02
0001-manager-allow-duplication-of-events-67292.patch (8,26 ko) 0001-manager-allow-duplication-of-events-67292.patch A. Berriot, 21 juillet 2022 09:03
Peek 2022-07-21 09-01.mp4 (580 ko) Peek 2022-07-21 09-01.mp4 A. Berriot, 21 juillet 2022 09:07
0001-manager-allow-duplication-of-events-67292.patch (8,36 ko) 0001-manager-allow-duplication-of-events-67292.patch A. Berriot, 18 août 2022 10:04
0001-manager-allow-duplication-of-events-67292.patch (9,49 ko) 0001-manager-allow-duplication-of-events-67292.patch A. Berriot, 18 août 2022 11:26
0001-manager-allow-duplication-of-events-67292.patch (9,49 ko) 0001-manager-allow-duplication-of-events-67292.patch A. Berriot, 18 août 2022 11:50
0001-manager-allow-duplication-of-events-67292.patch (9,5 ko) 0001-manager-allow-duplication-of-events-67292.patch A. Berriot, 18 août 2022 11:52

Révisions associées

Révision bca73caa (diff)
Ajouté par A. Berriot il y a plus d'un an

manager: allow duplication of events (#67292)

Historique

#1

Mis à jour par A. Berriot il y a presque 2 ans

  • Assigné à mis à A. Berriot
#2

Mis à jour par A. Berriot il y a presque 2 ans

#3

Mis à jour par A. Berriot il y a presque 2 ans

Anaïs, je te laisse regarder les captures ci-jointe et me dire si ça correspond au besoin exprimé. En gros ce qui est fait lors d'un clic sur dupliquer, depuis la page d'un évènement A :

1. On ouvre une modale (la même que pour la création d'un évènement) avec les informations de l'énèvenement A préremplies
2. L'utilisateur·ice doit choisir une date et peut optionnellement changer les valeurs pré remplies
3. Lors de la sauvegarde, on copie aussi les données de l'évènement A qui ne sont pas affichées dans le formulaire vers l'évènement B (liste d'attente, prix, description, URL).

#4

Mis à jour par Anaïs Ecuvillon il y a presque 2 ans

top, nickel

#5

Mis à jour par Lauréline Guérin il y a presque 2 ans

Pas vraiment lu le code, je me suis arrêtée au résultat :)
Ce qui me gêne: sur d'autres écrans chrono (ou même combo ou wcs), on a plutôt un formulaire "dupliquer" qui ne présente que les champs éditables (ici ça serait jour et heure si on suit la demande, peut-être les champs qui parlent de récurrence si la source est un event récurrent);
Je ne crois pas qu'on ait un formulaire de création init avec des données existantes (mais je peux me tromper).

Autres retours bienvenus.

#6

Mis à jour par Anaïs Ecuvillon il y a presque 2 ans

a minima, il faudrait libellé, jour, heure.
Le reste peut se paramétrer par la suite.

#7

Mis à jour par A. Berriot il y a presque 2 ans

Lauréline Guerin a écrit :

Pas vraiment lu le code, je me suis arrêtée au résultat :)
Ce qui me gêne: sur d'autres écrans chrono (ou même combo ou wcs), on a plutôt un formulaire "dupliquer" qui ne présente que les champs éditables (ici ça serait jour et heure si on suit la demande, peut-être les champs qui parlent de récurrence si la source est un event récurrent);
Je ne crois pas qu'on ait un formulaire de création init avec des données existantes (mais je peux me tromper).

Autres retours bienvenus.

Est-ce un problème que la fonction dupliquer permette d'éditer ces champs ? Ça me parait plus confortable pour l'utilisateur qui souhaite dupliquer un évènement et changer le nombre de places dispo de pouvoir le faire directement, avec le même formulaire que pour créer un évènement, plutôt que de devoir faire une première duplication, et ensuite devoir remodifier l'entrée après plusieurs clics.

(et au niveau code c'est aussi plus simple, puisqu'on peut réutiliser exactement les mêmes formulaires, ne pas rajouter de vues, templates, etc.)

#8

Mis à jour par Anaïs Ecuvillon il y a presque 2 ans

Agate Berriot a écrit :

Est-ce un problème que la fonction dupliquer permette d'éditer ces champs ? Ça me parait plus confortable pour l'utilisateur qui souhaite dupliquer un évènement et changer le nombre de places dispo de pouvoir le faire directement, avec le même formulaire que pour créer un évènement, plutôt que de devoir faire une première duplication, et ensuite devoir remodifier l'entrée après plusieurs clics.

(et au niveau code c'est aussi plus simple, puisqu'on peut réutiliser exactement les mêmes formulaires, ne pas rajouter de vues, templates, etc.)

je vous laisse techniquement décider de ce qui est mieux ou non, mais d'un point de vue fonctionnel, le même form qu'à la création est plus ergo je trouve. ça créé des habitudes.

#9

Mis à jour par Frédéric Péters il y a presque 2 ans

Sur l'existant d'un tour assez rapide, on est plutôt à avoir un mini-formulaire pour la duplication,

  • dans combo sur la duplication d'une page on demande juste le titre, champ vide,
  • dans chrono sur la duplication d'un agenda pareil,
  • dans w.c.s. sur la duplication d'un formulaire on demande juste le titre mais on préremplit le champ avec "titre existant (copie)",

mais ce qu'on a combo/wcs c'est qu'une fois dupliqué le nouvel élément n'est pas "actif" par défaut (soit désactivé pour le formulaire, soit hors de la navigation pour une page), et pour chrono on peut se dire que c'est pareil, sans formulaire qui en présente les créneaux, c'est comme s'il était désactivé.

Mais ça ne s'applique pas aux événements, dès qu'on va le dupliquer il peut apparaître dans une démarche branchée sur l'agenda, donc ça me semble plutôt nécessaire de pouvoir le paramétrer dès le début.

Oui on pourrait forcer une date de publication sur l'événement dupliqué pour permettre la configuration mais je ne suis pas tout à fait à l'aise avec ça, si c'était juste un flag "publié" ça m'irait mieux, je crois. (mais ça demanderait davantage de réflexions).

#10

Mis à jour par Valentin Deniaud il y a presque 2 ans

Je pense aussi que ça aurait été bien de suivre le même mode de duplication que dans les autres briques mais qu'on est coincé par le fait que l'évènement va direct apparaître dans les formulaires, donc l'approche ici me va.

Remarques sur le code :
  • Ça me paraît important de réussir à passer par Event.duplicate (ça nécessitera d'ajouter un paramètre save vrai par défaut).
  • Je préférerais ne pas complexifier la vue d'ajout, plutôt avoir une nouvelle vue de duplication dédiée.

J'imagine que ça se fait bien avec une UpdateView et le get_object qui fait event = super().get_object(); return event.duplicate(save=False), plus besoin d'aller jouer du initial/setattr. Si ça ne se fait pas bien alors il ne faut peut-être pas m'écouter :)

#11

Mis à jour par A. Berriot il y a presque 2 ans

Valentin Deniaud a écrit :

Je pense aussi que ça aurait été bien de suivre le même mode de duplication que dans les autres briques mais qu'on est coincé par le fait que l'évènement va direct apparaître dans les formulaires, donc l'approche ici me va.

Remarques sur le code :
  • Ça me paraît important de réussir à passer par Event.duplicate (ça nécessitera d'ajouter un paramètre save vrai par défaut).
  • Je préférerais ne pas complexifier la vue d'ajout, plutôt avoir une nouvelle vue de duplication dédiée.

J'imagine que ça se fait bien avec une UpdateView et le get_object qui fait event = super().get_object(); return event.duplicate(save=False), plus besoin d'aller jouer du initial/setattr. Si ça ne se fait pas bien alors il ne faut peut-être pas m'écouter :)

Sauf erreur de ma part, la fonction Event.duplicate copie un certain nombre de choses qu'on ne va pas vouloir garder sur un nouvel évènement, par exemple la date de publication, le nombre de places déjà réservées, si l'évènement est complet, divers timestamps…

Pour le fait de ne pas complexifier la vue d'ajout, je veux bien créer une vue dédiée duplicate, mais je ne vois pas forcément l'intérêt : un duplicate, c'est dans les fait une création en changeant certaines choses.

Un dernier point concernant l'UX : quand on fait une duplication comme sur les autres formulaires, au hasard duplication d'un agenda ou d'un formulaire, on se retrouve avec un formulaire sans contexte : on ne sait pas ce qu'on duplique, quels sont les attributs de l'objet source. Utiliser le même formulaire que pour la création avec un pré-remplissage permet de résoudre ce problème, tout en offrant davantage de flexibilité à l'utilisateur.

Maintenant si le consensus est de garder la cohérence avec l'existant, je fais ça :)

#12

Mis à jour par Valentin Deniaud il y a presque 2 ans

Agate Berriot a écrit :

Sauf erreur de ma part, la fonction Event.duplicate copie un certain nombre de choses qu'on ne va pas vouloir garder sur un nouvel évènement, par exemple la date de publication, le nombre de places déjà réservées, si l'évènement est complet, divers timestamps…

Mon idée c'est qu'il ne faut pas que la vue ait à se soucier de savoir comment dupliquer un évènement. Au début j'étais parti pour dire qu'il manquait dans le patch la duplication des custom fields et je me suis aperçu qu'en fait ça manquait dans Event.duplicate. Mais l'argument reste le même, le jour où ça sera géré on ne voudra avoir qu'un seul endroit à modifier. De même, si on ajoute un champ au modèle évènement modifier le code dans la vue de duplication sera systématiquement oublié (encore plus si elle s'appelle vue d'ajout :)).

Event.duplicate sert vraiment à dupliquer un évènement, si ça dupliquait aussi le statut complet/nombre de places réservées etc ce serait un bug. Tu as raison cette partie est tout à fait obscure, c'est il me semble mis à jour par des triggers en db (#54747).

J'ai effectivement l'impression que ça duplique les timestamps, ça ressemble à un bug : mais c'est à investiguer/gérer dans un autre ticket.

Pour la date de publication, je pense qu'il faut la dupliquer, ça me paraît peu clair que la duplication modifie la valeur de certains champs.

Pour le fait de ne pas complexifier la vue d'ajout, je veux bien créer une vue dédiée duplicate, mais je ne vois pas forcément l'intérêt : un duplicate, c'est dans les fait une création en changeant certaines choses.

C'est sûrement subjectif alors, moi je trouve qu'il faudrait mieux distinguer les deux. Par exemple avoir un titre contenant le mot « Duplication » dans la popup, peut-être ne garder dans le formulaire que les champs qui configurent la date. Modification mineures qui seraient compliquées à faire dans la vue d'ajout, faciles si on sépare les choses.

Un dernier point concernant l'UX : quand on fait une duplication comme sur les autres formulaires, au hasard duplication d'un agenda ou d'un formulaire, on se retrouve avec un formulaire sans contexte : on ne sait pas ce qu'on duplique, quels sont les attributs de l'objet source. Utiliser le même formulaire que pour la création avec un pré-remplissage permet de résoudre ce problème, tout en offrant davantage de flexibilité à l'utilisateur.

Mais le formulaire d'ajout étant partiel, ça va quand même prendre des attributs de l'objet source sans les afficher explicitement (en vérité ça m'irait bien que la duplication amène direct sur le formulaire d'édition avec tous les champs, mais peut-être ne changeons pas tout à la fois).

#13

Mis à jour par Valentin Deniaud il y a presque 2 ans

Valentin Deniaud a écrit :

la duplication des custom fields et je me suis aperçu qu'en fait ça manquait dans Event.duplicate

En fait si c'est juste un JSONField donc c'est géré par la duplication telle qu'elle est codée, j'ai rien dit.

#15

Mis à jour par A. Berriot il y a presque 2 ans

Mon dernier patch passe sure une vue et un formulaire de duplication dédiée. Par contre j'ai un problème avec mon env de dev, les changements dans le code ne sont pas pris en compte quand je démarre le service. J'essaye de comprendre pourquoi.

#17

Mis à jour par A. Berriot il y a presque 2 ans

Agate Berriot a écrit :

Mon dernier patch passe sure une vue et un formulaire de duplication dédiée. Par contre j'ai un problème avec mon env de dev, les changements dans le code ne sont pas pris en compte quand je démarre le service. J'essaye de comprendre pourquoi.

C'est bon j'ai trouvé le souci, tout fonctionne comme discuté (modale qui affiche juste le label et la date/heure de l'évènement à dupliquer, appel à la fonction Event.duplicate)

#18

Mis à jour par Valentin Deniaud il y a presque 2 ans

Top, encore quelques remarques :
  • Je pense que la duplication sera toujours utilisée depuis la vue paramétrage, l'accès direct à la duplication dans manager_event_detail.html peut être retirée
  • Il est tout à fait légitime d'avoir plusieurs évènements avec le même label, à mon avis ce sera même le cas d'usage majoritaire, donc ça serait bien d'avoir le champ label prérempli
  • messages.info puis dans le message « successfully », plutôt messages.success alors ?
    • Je ne comprends pas du tout le len(form.instance.label) dans le message (et c'est souvent bien de vérifier dans les tests qu'il apparaît)
  • Le bouton cancel dans le template redirige vers le formulaire (oui c'est marginal et visible seulement en ouvrant le lien dupliquer dans un nouvel onglet), il faudrait qu'il redirige vers la page précédente genre la vue settings
  • Dans le breadcrumb on peut ajouter une ligne <a href="{{ agenda.get_settings_url }}">{% trans 'Settings' %}</a>
    • Tu peux aussi essayer d'utiliser le template assez minimal et générique manager_agenda_form.html pour ne pas t'embêter

De manière générale je ne suis toujours pas 100% convaincu par le parcours popup -> formulaire d'édition, ça pourrait être direct formulaire d'édition ou au contraire juste popup et aller éditer l'évènement si besoin, mais passons ça comme ça et voyons les éventuels retours.

#20

Mis à jour par A. Berriot il y a presque 2 ans

Merci pour les retours ! J'ai

Top, encore quelques remarques :
  • Je pense que la duplication sera toujours utilisée depuis la vue paramétrage, l'accès direct à la duplication dans manager_event_detail.html peut être retirée

J'ai laissé, je considère que dans le popup ce n'est pas gênant, et cela évite un clic supplémentaire pour dupliquer un évènement. Et comme dans ce popup on a toutes les actions possibles pour un évènement (supprimer, annuler, éditer, etc.) ça me parait logique d'avoir aussi le dupliquer ici.

  • Il est tout à fait légitime d'avoir plusieurs évènements avec le même label, à mon avis ce sera même le cas d'usage majoritaire, donc ça serait bien d'avoir le champ label prérempli

C'est normalement le cas, cf la vidéo ci-jointe qui montre l'intégralité du flow.

  • messages.info puis dans le message « successfully », plutôt messages.success alors ?

Fait

  • Je ne comprends pas du tout le len(form.instance.label) dans le message (et c'est souvent bien de vérifier dans les tests qu'il apparaît)

C'était un reliquat d'un copier coller, c'est corrigé ;)

  • Le bouton cancel dans le template redirige vers le formulaire (oui c'est marginal et visible seulement en ouvrant le lien dupliquer dans un nouvel onglet), il faudrait qu'il redirige vers la page précédente genre la vue settings

Corrigé

  • Dans le breadcrumb on peut ajouter une ligne <a href="{{ agenda.get_settings_url }}">{% trans 'Settings' %}</a>
    • Tu peux aussi essayer d'utiliser le template assez minimal et générique manager_agenda_form.html pour ne pas t'embêter

J'ai changé de template de base comme suggéré

De manière générale je ne suis toujours pas 100% convaincu par le parcours popup -> formulaire d'édition, ça pourrait être direct formulaire d'édition ou au contraire juste popup et aller éditer l'évènement si besoin, mais passons ça comme ça et voyons les éventuels retours.

Ça me va.

#21

Mis à jour par Valentin Deniaud il y a presque 2 ans

Agate Berriot a écrit :

Et comme dans ce popup on a toutes les actions possibles pour un évènement (supprimer, annuler, éditer, etc.)

Oui mais si tu regardes comment est fabriquée l'action éditer il y a un paramètre ?next en plus, pour qu'un parcours visualisation reste sur les vues de visualisation et un parcours paramétrage reste sur les vues paramétrage. Et même ça ce n'est pas très bien fait (le lien breadcrumb ne correspond pas à la page précédente).

Donc on simplifie pas mal de chose à ne pas avoir le bouton dupliquer côté visualisation. Certes on l'a puisqu'on peut éditer -> dupliquer, mais ça me va de négliger ça ou de regarder si request.GET.next == 'settings' pour le masquer ou non.

Side note, il me semble que le bouton dupliquer vivrait mieux à côté de la croix pour supprimer un évènement dans la vue de paramétrage, mais c'est sûrement pas si simple à faire gardons ça pour un autre ticket.

  • Je ne comprends pas du tout le len(form.instance.label) dans le message (et c'est souvent bien de vérifier dans les tests qu'il apparaît)

C'était un reliquat d'un copier coller, c'est corrigé ;)

Il manque le bout de test :)

  • Dans le breadcrumb on peut ajouter une ligne <a href="{{ agenda.get_settings_url }}">{% trans 'Settings' %}</a>
    • Tu peux aussi essayer d'utiliser le template assez minimal et générique manager_agenda_form.html pour ne pas t'embêter

J'ai changé de template de base comme suggéré

Mmmh je ne vois pas la modif dans le patch ?


Point important, je me rends compte qu'il manque un (petit) truc pour gérer les évènements récurrents. La manière dont on a construit ça c'est que quand un évènement récurrent est créé, il n'est lui-même pas réservable par contre il entraîne la création de nouveaux évènements qui eux le sont, suivant la récurrence définie. Ces évènements sont liés à l'évènement récurrent par l'attribut primary_event. Pour gérer ça il faut :
  • Ne pas permettre la duplication de ces évènements, ne permettre que la duplication de l'évènement de base (donc juste checker que primary_event est nul pour permettre la duplication).
    • La raison c'est qu'un cron tourne pour mettre à jour tout ça à l'ajout d'exceptions et qu'il ne s'attend pas à ce que les évènements liés à un évènement récurrent diffèrent de ceux qu'on a créé automatiquement.
  • Copier/coller le save() de NewEventForm pour que les récurrences soient créées à la duplication (actuellement elles le sont au save() de la vue d'édition qui suit, mais on est pas obligé de cliquer sur enregistrer sur cette page).
#23

Mis à jour par A. Berriot il y a plus d'un an

Valentin Deniaud a écrit :

Agate Berriot a écrit :

Et comme dans ce popup on a toutes les actions possibles pour un évènement (supprimer, annuler, éditer, etc.)

Oui mais si tu regardes comment est fabriquée l'action éditer il y a un paramètre ?next en plus, pour qu'un parcours visualisation reste sur les vues de visualisation et un parcours paramétrage reste sur les vues paramétrage. Et même ça ce n'est pas très bien fait (le lien breadcrumb ne correspond pas à la page précédente).

Donc on simplifie pas mal de chose à ne pas avoir le bouton dupliquer côté visualisation. Certes on l'a puisqu'on peut éditer -> dupliquer, mais ça me va de négliger ça ou de regarder si request.GET.next == 'settings' pour le masquer ou non.

Okay, je retire :)

Il manque le bout de test :)

C'est la dernière ligne du test test_duplicate_event: assert 'Event successfully duplicated.' in str(resp.body)

  • Dans le breadcrumb on peut ajouter une ligne <a href="{{ agenda.get_settings_url }}">{% trans 'Settings' %}</a>
    • Tu peux aussi essayer d'utiliser le template assez minimal et générique manager_agenda_form.html pour ne pas t'embêter

J'ai changé de template de base comme suggéré

Mmmh je ne vois pas la modif dans le patch ?

Effectivement, je pensais l'avoir fait, ça devrait être bon

Point important, je me rends compte qu'il manque un (petit) truc pour gérer les évènements récurrents. La manière dont on a construit ça c'est que quand un évènement récurrent est créé, il n'est lui-même pas réservable par contre il entraîne la création de nouveaux évènements qui eux le sont, suivant la récurrence définie. Ces évènements sont liés à l'évènement récurrent par l'attribut primary_event. Pour gérer ça il faut :
  • Ne pas permettre la duplication de ces évènements, ne permettre que la duplication de l'évènement de base (donc juste checker que primary_event est nul pour permettre la duplication).
    • La raison c'est qu'un cron tourne pour mettre à jour tout ça à l'ajout d'exceptions et qu'il ne s'attend pas à ce que les évènements liés à un évènement récurrent diffèrent de ceux qu'on a créé automatiquement.
  • Copier/coller le save() de NewEventForm pour que les récurrences soient créées à la duplication (actuellement elles le sont au save() de la vue d'édition qui suit, mais on est pas obligé de cliquer sur enregistrer sur cette page).

J'ai rajouté une condition pour masquer le bouton dans ce cas, une exclusion pure et simple des évènements liés au niveau de la vue, je pense que ça devrait le faire. (Et le code dans le save du form pour créer les occurences aussi)

#24

Mis à jour par Valentin Deniaud il y a plus d'un an

Agate Berriot a écrit :

Il manque le bout de test :)

C'est la dernière ligne du test test_duplicate_event: assert 'Event successfully duplicated.' in str(resp.body)

Vu, je cherchais ça juste après le resp = resp.form.submit().follow().

  • Dans le breadcrumb on peut ajouter une ligne <a href="{{ agenda.get_settings_url }}">{% trans 'Settings' %}</a>
    • Tu peux aussi essayer d'utiliser le template assez minimal et générique manager_agenda_form.html pour ne pas t'embêter

J'ai changé de template de base comme suggéré

Mmmh je ne vois pas la modif dans le patch ?

Effectivement, je pensais l'avoir fait, ça devrait être bon

Je me suis mal exprimé, je voulais dire soit ajouter la ligne soit génériciser un peu plus manager_agenda_form et l'utiliser directement. Ici hériter d'un template pour une ligne ne me paraît pas justifié, donc ma préférence irait à l'ajout explicite de <a href="{{ agenda.get_settings_url }}">{% trans 'Settings' %}</a> en héritant de manager_agenda_view comme avant.

J'ai rajouté une condition pour masquer le bouton dans ce cas

Nickel.

une exclusion pure et simple des évènements liés au niveau de la vue

Une petite ligne pour tester ça genre assert app.get(f'/manage/agendas/{agenda.pk}/events/{event.pk}/duplicate', status=404) ? (pas sûr de la forme)

Et le code dans le save du form pour créer les occurences aussi

Pareil, couvrir ce if ce serait bien ! (on est un peu fiers de la couverture de code de chrono, pour ce fichier de 1500 lignes c'est moins de 10 lignes qui ne sont pas couvertes https://jenkins.entrouvert.org/job/chrono-wip/job/wip%252F67292-Pouvoir-dupliquer-un-evenement/6/Coverage_20Report_20_28native_29/)

Dernier truc, pour faire comme partout il faudrait remplacer primary_event=None par primary_event__isnull=True et str(resp.body) par resp.text.

#26

Mis à jour par A. Berriot il y a plus d'un an

Valentin Deniaud a écrit :

Je me suis mal exprimé, je voulais dire soit ajouter la ligne soit génériciser un peu plus manager_agenda_form et l'utiliser directement. Ici hériter d'un template pour une ligne ne me paraît pas justifié, donc ma préférence irait à l'ajout explicite de <a href="{{ agenda.get_settings_url }}">{% trans 'Settings' %}</a> en héritant de manager_agenda_view comme avant.

Fait.

Une petite ligne pour tester ça genre assert app.get(f'/manage/agendas/{agenda.pk}/events/{event.pk}/duplicate', status=404) ? (pas sûr de la forme)

Ah oui, justement, je n'étais pas sûre de comment tester ça !

Pareil, couvrir ce if ce serait bien ! (on est un peu fiers de la couverture de code de chrono, pour ce fichier de 1500 lignes c'est moins de 10 lignes qui ne sont pas couvertes https://jenkins.entrouvert.org/job/chrono-wip/job/wip%252F67292-Pouvoir-dupliquer-un-evenement/6/Coverage_20Report_20_28native_29/)

J'ai rajouté un test dédié pour ça

Dernier truc, pour faire comme partout il faudrait remplacer primary_event=None par primary_event__isnull=True et str(resp.body) par resp.text.

Fait :)

#27

Mis à jour par Valentin Deniaud il y a plus d'un an

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

Aller, dernier pinaillage test_duplicate_event_creates_occurences remplacer « occurences » par « recurrences », et c'est tout bon !

#28

Mis à jour par A. Berriot il y a plus d'un an

#30

Mis à jour par A. Berriot il y a plus d'un an

  • Statut changé de Solution proposée à Résolu (à déployer)
commit bca73caaeab210e004b6fd7b692fe146ff2ad365
Author: Agate <aberriot@entrouvert.com>
Date:   Tue Jul 12 15:41:34 2022 +0200

    manager: allow duplication of events (#67292)
#31

Mis à jour par Transition automatique il y a plus d'un an

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

Mis à jour par Transition automatique il y a plus d'un an

Automatic expiration

Formats disponibles : Atom PDF