Skip to content

Introduction du niveau Territoire au dessus des organisations

Vincent Agnano requested to merge feature/departements into master

Created by: adipasquale

Migration 1 : new tables

  • nouvelle table territories : departement_number , name, phone_number, phone_number_formatted
  • nouvelle table agent_territorial_roles : agent_id + territory_id
  • ajout colonne organisations.territory_id
  • ajout colonne sectors.territory_id

On créé les agents territoriaux lors de la migration à partir d'une liste prédéfinie. C'est en effet assez sensible, donc ça serait dangereux de dire "tous les admins deviennent admins territoriaux" en prod par exemple. J'ai donc constitué une liste prédéfinie département -> agent_email; que j'ai uploadé format CSV sur un gist privé (infos modérément sensible mais je ne la partage pas ici dans le doute).

Il faudra définir MIGRATION_AGENT_TERRITORIAL_ROLES_CSV_URL en prod et staging avant de lancer la migration. Il vaudra mieux lancer cette migration à un moment de faible usage au cas où.

En développement la migration se fait sans fichiers externes; en donnant les droits territoriaux à tous les agents admin

Migration 2 : destroy columns

à executer plus tard dans une PR successive :

class RemoveDepartementColumns < ActiveRecord::Migration[6.0]
  def up
    remove_column :organisations, :departement
    remove_column :sectors, :departement
  end
end
  • remove organisations.departement
  • remove sectors.departement

Cette migration sera déployée et lancée plus tard. On veut s'assurer que la migration initiale a bien fonctionné avant de lancer celle-ci.

Screenshots

Le lien n'est plus vers la Sectorisation mais la "Configuration" plus générale du territoire

Screenshot 2021-03-10 at 14 36 24

Nouvelle interface d'administration du territoire

Screenshot 2021-03-11 at 13 48 55

Policies

Je continue selon les directions du refacto #1222 en limitant le contexte a l'agent courant

  • refacto complet des policies Zone, Sector, SectorAttribution, AgentRole
  • modification de AgentPolicy::Scope pour permettre aux agents territoriaux de lister tous les agents d'un territoire meme s'ils ne sont pas admin dans chacune des orgas

Controllers

  • extraction d'un concern commun AuthenticatedControllerConcern
  • introduction de policy_scope_admin et authorize_admin pour remplacer progressivement l'override de policy_scope et de authorize qui est perturbant

Autres précisions

  • On empêche la suppression du dernier admin de territoire pour éviter des territoires orphelins, calqué sur ce qu'on fait pour les rôles agents.
  • Utilisation des données de la db sur la page contact plutôt qu'hardcodées
  • La vérification qu'un nouvel utilisateur ne créé pas une orga dans un département déjà utilisé avec un warning particulier devient beaucoup plus simple qu'avant
  • J'ai stocké une liste de noms de départements dans le code ce qui permet de le définir automatiquement à partir du numéro lorsqu'un agent créé une nouvelle orga dans un nouveau territoire depuis la page publique.

Test list

  • create orga from public page + test dpt unicity error message
  • create orga from admin page
  • test sectorisation
  • public stats
  • user rdv search and book
  • warnings other rdvs conflicting in other orga for regular agent
  • check secto application on prod data

Merge request reports