Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(PC-29882)[BO] feat: Logging of location modification during venue up… #12919

Conversation

anougbele-pass
Copy link
Contributor

@anougbele-pass anougbele-pass commented Jun 25, 2024

logger dans action_history les modification de localisation lors de la modification d'un lieu

But de la pull request

Ticket Jira (ou description si BSR) : https://passculture.atlassian.net/browse/PC-29882

Vérifications

  • J'ai écrit les tests nécessaires
  • J'ai relu attentivement les migrations, en particulier pour éviter les locks, et je préviens les équipes Shérif et Data
  • J'ai ajouté des screenshots pour d'éventuels changements graphiques

Copy link
Contributor

github-actions bot commented Jun 25, 2024

mypy cop report: 411 (master) ↗ 412 (your branch)

@anougbele-pass anougbele-pass force-pushed the PC-29882-bo-modifier-laction-history-de-changement-de-localisation-de-lieu-pour-prendre-en-compte-les-changements-dans-lofferer-address-liee branch from 0ecd149 to 03679c9 Compare June 25, 2024 09:55
address = get_or_create_address(location_data)
location_data_ = {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je trouve que le nom porte à confusion. Est-ce que l'on pourrait prendre quelque chose comme snapshot_location_data ?

@@ -756,6 +756,20 @@ def format_modified_info_name(info_name: str) -> str:
return "Date d'éligibilité à la nouvelle interface Pro"
case "confidenceRule.confidenceLevel":
return "Validation des offres"
case "Offereraddress.addressid":
return "Table Addresse <> ID Adresse"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Est-ce que les noms ont été vus avec PO ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Non j'ai proposé ça mais je reboucle avec lui.

Copy link
Contributor

@prouzet prouzet Jun 28, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je te laisse revoir, mais une chose est sûre : un seul « d » dans Adresse en français 🙂

@@ -756,6 +756,20 @@ def format_modified_info_name(info_name: str) -> str:
return "Date d'éligibilité à la nouvelle interface Pro"
case "confidenceRule.confidenceLevel":
return "Validation des offres"
case "Offereraddress.addressid":
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Est-ce pertinent d'avoir l'ID ici ? Je ne vois pas d'autres IDs définies ailleurs dans ce case.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oui c'est un peu particulier par ce qu'on a ce comportement que sur OA. C'est pour marquer l'association de l'OA à une autre adresse. Est ce qu'on l'omet ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je ne suis pas convaincu que ce soit une information compréhensible pour le support.
En tout cas, la "traduction" ne semble pas fonctionner :
image

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

J'en profite aussi pour ressusciter ça : je suis pas hyper convaincu non plus d'afficher le changement d'id, je sais pas si ça va vraiment servir à l'utilisateur...

@@ -1105,6 +1165,7 @@ def test_update_venue_without_double_model_writing(self, authenticated_client, o
assert mails_testing.outbox[0]["template"] == TransactionalEmail.VENUE_NEEDS_PICTURE.value.__dict__
assert mails_testing.outbox[0]["params"]["VENUE_NAME"] == venue.common_name
assert mails_testing.outbox[0]["params"]["VENUE_FORM_URL"] == urls.build_pc_pro_venue_link(venue)
# assert not double action_history data
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oubli ?

Copy link
Contributor

@prouzet prouzet left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Peux-tu rebase sur master s'il te plaît, pour clarifier les différences après résolution des conflits ?

@anougbele-pass anougbele-pass force-pushed the PC-29882-bo-modifier-laction-history-de-changement-de-localisation-de-lieu-pour-prendre-en-compte-les-changements-dans-lofferer-address-liee branch 2 times, most recently from 0d0b773 to a74c7ff Compare June 28, 2024 14:07
Comment on lines 110 to 113
if not venue.isVirtual and FeatureToggle.ENABLE_ADDRESS_WRITING_WHILE_CREATING_UPDATING_VENUE.is_active():
venue_snapshot = update_venue_location(venue, modifications, author=author, is_manual_edition=is_manual_edition)
else:
venue_snapshot = history_api.ObjectUpdateSnapshot(venue, author)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je pense qu'il serait préférable de garder la création de l'objet snapshot toujours au même endroit et de la passer en paramètre, plutôt que le créer soit ici soit dans l'autre fonction en fonction de la situation.

Suggested change
if not venue.isVirtual and FeatureToggle.ENABLE_ADDRESS_WRITING_WHILE_CREATING_UPDATING_VENUE.is_active():
venue_snapshot = update_venue_location(venue, modifications, author=author, is_manual_edition=is_manual_edition)
else:
venue_snapshot = history_api.ObjectUpdateSnapshot(venue, author)
venue_snapshot = history_api.ObjectUpdateSnapshot(venue, author)
if not venue.isVirtual and FeatureToggle.ENABLE_ADDRESS_WRITING_WHILE_CREATING_UPDATING_VENUE.is_active():
update_venue_location(venue, modifications, author=author, venue_snapshot, is_manual_edition=is_manual_edition)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mais du coup la fonction update location ne peut pas realiser les update (en db) vu que l'update doit etre fait juste avant le .add_action pour garder qu'une ligne dans l'historique. On aura alors une fonction update_location qui update rien. ça peut prêter a confusion.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je ne comprends pas le problème, puisque ma suggestion est de toujours créer l'objet ici, donc avant l'appel à la fonction plutôt qu'exactement la même ligne au tout début de la fonction appelée. Quelle différence dans le résultat ?

Copy link
Contributor Author

@anougbele-pass anougbele-pass Jun 28, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On arrive à la même chose. j'avoue que je m'attend à une homogénéité des signature sur les fonctions qui sont logiquement semblable. Mais c'est un autre sujet

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok je te laisse choisir ce qui te semble la meilleure solution en fonction aussi des autres utilisations de cette fonction.

@@ -756,6 +756,20 @@ def format_modified_info_name(info_name: str) -> str:
return "Date d'éligibilité à la nouvelle interface Pro"
case "confidenceRule.confidenceLevel":
return "Validation des offres"
case "Offereraddress.addressid":
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je ne suis pas convaincu que ce soit une information compréhensible pour le support.
En tout cas, la "traduction" ne semble pas fonctionner :
image

@@ -756,6 +756,20 @@ def format_modified_info_name(info_name: str) -> str:
return "Date d'éligibilité à la nouvelle interface Pro"
case "confidenceRule.confidenceLevel":
return "Validation des offres"
case "Offereraddress.addressid":
return "Table Addresse <> ID Adresse"
Copy link
Contributor

@prouzet prouzet Jun 28, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je te laisse revoir, mais une chose est sûre : un seul « d » dans Adresse en français 🙂

assert update_snapshot["latitude"]["new_info"] == "48.87171"
assert update_snapshot["longitude"]["new_info"] == "2.308289" # rounding due to Decimal column in db
assert update_snapshot["venueTypeCode"]["new_info"] == data["venue_type_code"]
assert update_snapshot["offererAddress.address.latitude"]["new_info"] == "48.87171"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Peux-tu ajouter vérifier dans un test qu'on n'a pas de modification sur latitude et longitude lorsqu'elle n'a pas changé ? Car en édition manuelle j'obtiens.

image

Peut-être l'un des tests en-dessous se prête-t-il à la vérification.

Indice pour corriger le bug : https://github.com/pass-culture/pass-culture-main/blob/v296.0.1/api/src/pcapi/core/history/api.py#L94

@@ -748,6 +748,20 @@ def format_modified_info_name(info_name: str) -> str:
return "Date d'éligibilité à la nouvelle interface Pro"
case "confidenceRule.confidenceLevel":
return "Validation des offres"
case "Offereraddress.addressid":
return "Table Addresse <> ID Adresse"
case "offereraddress.address.city":
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Vraisemblablement la correspondance ne se fait pas pour tous les champs :
image
N'oublie pas de vérifier en utilisant l'interface du BO :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je ne vois que l'inseecode qui manque.
Est ce que le wording: ex "Table Address <> Longitude" te va ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

J'aurais probablement simplement écrit « Adresse - Longitude » mais ça reste mineur et se corrige.
Certes inseeCode manque, mais addressid et address.city ne sont pas bien affichés.

@anougbele-pass anougbele-pass force-pushed the PC-29882-bo-modifier-laction-history-de-changement-de-localisation-de-lieu-pour-prendre-en-compte-les-changements-dans-lofferer-address-liee branch 2 times, most recently from 8d86f3d to 94840c4 Compare July 1, 2024 09:06
case "offererAddress.addressId":
return "Adresse - ID Adresse"
case "offererAddress.address.inseeCode":
return "Address - Code Insee"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
return "Address - Code Insee"
return "Adresse - Code Insee"

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tu n'as pas modifié...

@@ -248,13 +260,39 @@ def update_venue_location(venue: models.Venue, modifications: dict, is_manual_ed
)

address = get_or_create_address(location_data, is_manual_edition=is_manual_edition)

snaphot_location_data = {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
snaphot_location_data = {
snapshot_location_data = {

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Et pourquoi pas snapshot_address_data d'ailleurs ?

Comment on lines 286 to 287
if venue.offererAddress
else geography_models.Address()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je comprends pas ce if else. On teste juste au-dessus l'existence de venue.offererAddressId...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

c'est surtout pour contenter mypy.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dans ce cas, soit tu peux faire un if venue.offererAddress plus haut, soit tu peux utiliser un assert juste avant, avec une mention que c'est pour mypy (cf les nombreux # helps mypy que tu peux trouver)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

J'insiste un peu pour ces ifs, ça ne rend vraiment pas le code clair

Comment on lines 292 to 290
target = venue.offererAddress if venue.offererAddress else models.OffererAddress()
venue_snapshot.trace_update(
{"addressId": address.id}, target=target, field_name_template="offererAddress.{}"
)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

C'est un doublon ? Ou alors je comprends pas ce qu'on fait...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

en fait il y a OffererAddress.AddressId et OffererAddress.address.id. Il faudrait avoir un id dans le snapshot. mais la on aurait doublon.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah... Mais ça donnera du coup un doublon dans l'historique non ? Enfin, sur le BO, on aura les deux lignes de modif ?

@@ -695,6 +689,7 @@ def update_venue(venue_id: int) -> utils.BackofficeResponse:
contact_data=contact_data,
criteria=criteria,
external_accessibility_url=form.acceslibre_url.data if hasattr(form, "acceslibre_url") else "",
is_manual_edition=((not venue.isVirtual) and form.is_manual_address.data == "on"),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On ne garde pas le if du FF ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

il est dans le update_venue. et l'argument est utilisé que la bas.

@anougbele-pass anougbele-pass force-pushed the PC-29882-bo-modifier-laction-history-de-changement-de-localisation-de-lieu-pour-prendre-en-compte-les-changements-dans-lofferer-address-liee branch from 94840c4 to 789e7f5 Compare July 1, 2024 13:27
Comment on lines 286 to 287
if venue.offererAddress
else geography_models.Address()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

J'insiste un peu pour ces ifs, ça ne rend vraiment pas le code clair

venue_snapshot.trace_update(
snapshot_location_data, target=target, field_name_template="offererAddress.address.{}"
)
target = venue.offererAddress if venue.offererAddress else models.OffererAddress()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Et pareil pour ce if

case "offererAddress.addressId":
return "Adresse - ID Adresse"
case "offererAddress.address.inseeCode":
return "Address - Code Insee"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tu n'as pas modifié...

api/src/pcapi/routes/backoffice/filters.py Show resolved Hide resolved
@anougbele-pass anougbele-pass force-pushed the PC-29882-bo-modifier-laction-history-de-changement-de-localisation-de-lieu-pour-prendre-en-compte-les-changements-dans-lofferer-address-liee branch from 789e7f5 to 19cd424 Compare July 2, 2024 08:05
@anougbele-pass anougbele-pass force-pushed the PC-29882-bo-modifier-laction-history-de-changement-de-localisation-de-lieu-pour-prendre-en-compte-les-changements-dans-lofferer-address-liee branch from 19cd424 to c1541ae Compare July 3, 2024 14:04
@anougbele-pass anougbele-pass force-pushed the PC-29882-bo-modifier-laction-history-de-changement-de-localisation-de-lieu-pour-prendre-en-compte-les-changements-dans-lofferer-address-liee branch from c1541ae to 82d0b2c Compare July 3, 2024 17:33
@anougbele-pass anougbele-pass merged commit 6e2c6aa into master Jul 3, 2024
22 checks passed
@anougbele-pass anougbele-pass deleted the PC-29882-bo-modifier-laction-history-de-changement-de-localisation-de-lieu-pour-prendre-en-compte-les-changements-dans-lofferer-address-liee branch July 3, 2024 18:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants