add motifs.sectorisation_level to allow desectorisation
Created by: adipasquale
Changements
Cette PR introduit un changement conceptuel assez profond de la sectorisation.
Actuellement la secto est activée ou désactivée à l'échelle d'un département via une variable d'env. Sur les départements activés, les règles d'attribution des secteurs (à l'agent ou à l'orga) s'appliquent à tous les motifs.
Pour rappel, un secteur =
- un ensemble de communes (ou de rues)
- attribuées à
- un ensemble d'organisations entières OU d'agents spécifiques
Dans cette PR on introduit un sectorisation_level
au niveau des motifs qui peut avoir trois valeurs :
-
departement
: les créneaux proposés pour ce motif seront dispos pour tout le département -
organisation
: les créneaux proposés pour ce motif seront dispos uniquement pour les secteurs attribués à des orgas entières -
agent
: les créneaux proposés pour ce motif seront dispos uniquement pour les secteurs attribués à des agents spécifiques
On supprime donc le besoin de la variable d'environnement et on permet plus d'autonomie aux départements souhaitant se lancer. C'est aussi moins compliqué qu'aujourd'hui que de commencer à sectoriser, puisqu'on peut sectoriser uniquement un motif, sans que d'un coup les autres ne soient plus accessibles par défaut
Implémentation
Premier commit de refacto préliminaire des specs de geo_search
- split en deux fichiers . un de specs plus ou moins unitaires, un de specs d'integration avec des scenarios plus complets et plusieurs méthodes testées
- inlining de la majeure partie des contextes, ça devrait te plaire @yaf ! je commence à me convertir.
Contextualisations
J'ai rajouté pas mal d'infos contextuelles pour aider à la configuration :
- dans les vues motifs#index, motifs#edit et sectors#show
- dans les vues motifs le but est d'avertir s'il existe des secteurs correspondants au niveau choisi. C'est à dire que pour un motif sectorisé niveau orga on va afficher le nombre de secteurs attribués à l'orga du motif. Pour un motif sectorisé niveau agent, on va afficher le nombre de secteurs attribués à des agents du service du motif.
- dans les vues secteurs, c'est l'opposé, on veut informer sur l'existence de motifs correspondants au secteur affiché.
Migration
Reduction du scope :
## en prod:
irb(main):010:0> ENV["SECTORISATION_ENABLED_DEPARTMENT_LIST"].split
=> ["62", "77", "12"]
irb(main):008:0> SectorAttribution.where(organisation: Organisation.where(departement: ENV["SECTORISATION_ENABLED_DEPARTMENT_LIST"].split)).level_agent.count
=> 0
## sur demo
irb(main):002:0> ENV["SECTORISATION_ENABLED_DEPARTMENT_LIST"]&.split
=> nil
Donc pour bien migrer il suffit de :
- pour les départements où la secto est desactivée : on passe tous les motifs en
sectorisation_level
=departement
- pour les départements où la secto est activée : on passe tous les motifs en
sectorisation_level
=organisation
après simulation de migration sur la prod :
pp Motif.includes(:organisation).to_a.group_by { _1.organisation.departement }.transform_values{ |motifs| motifs.group_by(&:sectorisation_level).transform_valu
es { _1.count } }; nil
{"77"=>{"organisation"=>478},
"62"=>{"organisation"=>99},
"12"=>{"organisation"=>34},
"14"=>{"departement"=>32},
"64"=>{"departement"=>89},
"55"=>{"departement"=>34},
"26"=>{"departement"=>37},
"80"=>{"departement"=>255},
"92"=>{"departement"=>32},
"22"=>{"departement"=>52},
"33"=>{"departement"=>1},
"86"=>{"departement"=>40},
"08"=>{"departement"=>1},
"95"=>{"departement"=>2}}
puis j'ai testé des recherches usagers dans un dpt sectorisé, et dans un autre non sectorisé ça correspond aux résultats en prod
Documentation
J'ai adapté la doc : https://doc.rdv-solidarites.fr/sectorisation-geographique
Review Apps Tests
il faut s'accrocher pour tester faut avoir le contexte bien en tete pour detecter des pbs :)
Voici un superbe schéma de l'état sur la review app. J'ai créé et découpé paris en deux secteurs nord et sud associés à deux orgas différentes. j'ai aussi créé des sous-secteurs attribués à des agents pour quelques départements, avec certains motifs uniquement sectorisés à l'agent.
On peut donc faire des recherches usagers avec ce genre d'adresses :
- rue du louvre (2e, nord)
- rue des pyrénées (20e, nord)
- métro trocadéro (16e nord)
- pernéty (14e sud)
- place d'italie (13e sud)
je n'ai pas vu d'erreurs pour l'instant