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

[TRA-14055] Modification des infos transporteur affichées sur BsdCard + leur mise à jour #3309

Merged
merged 6 commits into from
May 28, 2024

Conversation

silto
Copy link
Collaborator

@silto silto commented May 8, 2024

Objectif

Il faut afficher la bonne plaque d'immatriculation et champ libre sur les BsdCard dans les rubriques "A collecter" et "Collectés" d'un transporteur. Précédemment, seulement le premier transporteur concerné par le bordereau était affiché. C'est un problème avec l'ajout du multimodal ou avec l'entreposage temporaire.

Capture d’écran 2024-05-10 à 01 41 50

En résumé

On veut donc:

  • afficher la plaque/champ libre correspondant au transporteur connecté et qui doit transporter le déchet
  • lui donner la possibilité de modifier ces champs tant que le BSD est "A collecter" (et si il a les droits)
  • gérer ça pour le multimodal
  • gérer aussi pour l'entreposage temporaire
  • gérer pour tous les types de bordereaux

Les modifications

Récupération des infos du transporteur

Les infos étaient auparavant récupérées depuis la propriété "transporter" des BSD, qui est générée par la backend en prenant le premier transporteur de la liste des transporteurs liés au bordereau. Cette propriété étant utilisée ailleurs dans le code, je ne pouvais pas modifier la façon dont elle était générée en back au risque de tout péter. Donc j'ai plutôt utilisé l'array "transporters", et ajouté une méthode "getCurrentTransporterInfos" pour en sortir les infos du bon transporteur.

BSDD et entreposage temporaire

Le cas du BSDD est particulier car le déchet peut être à collecter par un transporteur alors qu'il est entreposé temporairement, il faut donc aller aussi chercher le transporteur lié à cet entreposage temporaire (BSD forwardedIn). Pour ça, j'ai ajouté une condition sur le statut du bordereau pour déterminer où aller chercher les infos transporteur en fonction du statut.

BSDD/BSDA et transporteur récurrent

Il est possible qu'une même entreprise se charge de plusieurs portions du transport multimodal. Il n'est donc pas possible de faire un simple find du transporteur avec le SIRET. Il y a donc une logique qui est:

  • si on est sur "A collecter", trouver le premier transporteur ayant ce SIRET et n'ayant pas encore pris en charge le déchet
  • si on est sur "Collectés", trouver le dernier transporteur avec ce SIRET ayant pris en charge le déchet

Affichage pour transport routier uniquement et conflit GraphQL

Même si ça ne rentre pas dans le scope du ticket de base, j'ai retiré l'affichage et la modification de la plaque d'immatriculation pour les transports autre que la route. Pour ce faire, il a fallut récupérer l'info transport.mode sur tous les types de bordereau dans la query des BSD du Dashboard. Cette query utilisant un union des différents types de bordereaux, il y a un conflit sur le type de transport.mode (qui est TransportMode! sur le BSDASRI et TransportMode (sans point d'exclamation) ailleurs.

GraphQLError: Fields "transporter" conflict because subfields "transport" conflict because subfields "mode" conflict because they return conflicting types "TransportMode!" and "TransportMode". Use different aliases on the fields to fetch both if this was intentional.

Il y a 2 solutions à ce problème:

  • Utiliser des alias pour le mode
  • retirer le "!" du type sur BsdasriTransport

La propriété correspondant au mode de transport sur BSDASRI a cette définition Prisma:

  transporterTransportMode                    TransportMode?          @default(ROAD)

et sa valeur peut donc être nulle (même si un default est utilisé, si un objet en db n'a pas été écrit en passant par Prisma ou avant que la propriété ait été rajoutée au schema, elle peut être nulle).

Donc j'ai choisi d'harmoniser les types GraphQL et de retirer le "!", ce qui est cohérent avec les modèles de db, plutôt que d'utiliser des alias. Je ne pense pas que ce soit un breaking change puisque ce n'est pas un type d'input.

Modification des infos

L'update du transporteur pour BSDA et BSDD se fait via une mutation spécifique (updateBsdaTransporter/updateFormTransporter), les autres bordereaux sont fait avec la mutation d'update du bordereau.

BSDD forwardedIn et indexation

Dans le cas de l'update du transporteur BSDD, si il s'agit du transporteur du bordereau forwardedIn (entreposage), il y avait un problème d'indexation: le resolver utilise l'update du repository pour réindexer le bordereau lié au transporteur, mais ça n'entraînait pas la réindexation du bordereau forwarding. J'ai donc modifié l'update pour récupérer l'info de si il y a un bordereau forwarding (en ajoutant un include à l'update, pas de requête DB supplémentaire), et si c'est le cas, réindexer le bordereau forwarding plutôt que le bordereau qui est updaté. La routine de réindexation va se charger de lancer l'index du bordereau forwardedIn.

Demo

Demo.BsdCard.mov

  • Mettre à jour la documentation -> TransportMode(!) MàJ automatiquement sur la doc
  • Mettre à jour le change log
  • Documenter les manipulations à faire lors de la mise en production (sur le ticket Favro de release)
  • S'assurer que la numérotation des nouvelles migrations est bien cohérente
  • Informer le data engineer de tout changement de schéma DB

@silto silto added the question Further information is requested label May 10, 2024
@silto silto added ready for review and removed question Further information is requested labels May 14, 2024
Copy link
Member

@benoitguigal benoitguigal left a comment

Choose a reason for hiding this comment

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

Bien joué

front/src/Apps/Dashboard/bsdMapper.ts Outdated Show resolved Hide resolved
silto added 5 commits May 28, 2024 18:10
…d edit to make it possible for the current transporter to update it from the dashboard
…splaying/modifying transporter infos. Modify form update repository to reindex forwarding BSDD when updating forwardedIn BSDD.
…here the same transporter appears multiple times
…ransport mode is not the road

+ remove permission checking function as it didn't simplify the code and is now useless since it only checks the user permission.

+ add changelog entry
…conditions for transporter infos on BsdCard, remove commented out code
Copy link

sonarcloud bot commented May 28, 2024

Quality Gate Passed Quality Gate passed

Issues
1 New issue
0 Accepted issues

Measures
0 Security Hotspots
No data about Coverage
0.0% Duplication on New Code

See analysis details on SonarCloud

@silto silto merged commit 00607d0 into dev May 28, 2024
17 checks passed
@silto silto deleted the tra-14055 branch May 28, 2024 22:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants