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

Permettre aux agents de se créer un compte sans organisation via Proconnect #5102

Merged
merged 21 commits into from
Mar 4, 2025

Conversation

victormours
Copy link
Contributor

@victormours victormours commented Feb 19, 2025

Closes #5060

Contexte

voir #5060

On a 3 objectifs :

  • éviter les agents bloqués par une connexion au mauvais compte proconnect
  • permettre la création de compte via proconnect pour ne pas bloquer l'oauth dans le cadre des intégrations
  • expliquer aux agents qui cherchent à rejoindre une organisation comment faire

Solution

On autorise la création de comptes via proconnect, mais uniquement pour le domaine RDV Service Public.
On met à jour le formulaire d'ouverture de compte dans le super admin pour ajouter un agent (optionnel), et on permet de faire cette ouverture si un agent n'a pas d'organisation.

Dans la "state machine" des agents, c'est possible de ne pas avoir de compte dans l'état initial, mais pas dans un état intermédiaire ou final, parce que le compte de l'agent est supprimé s'il est retiré de toutes ses organisations.

L'agent créé ainsi n'a pas de service. On autorise l'ajout de services lorsque l'agent est créé par un super admin ou invité par un autre admin d'orga ou de territoire.

On va voir avec l'équipe déploiement comment on ajoute ces agents à leur crm.

Captures d'écran

Avant Après
Screenshot 2025-03-03 at 12 24 17 Screenshot 2025-03-03 at 12 14 29
Screenshot 2025-03-03 at 12 26 03 Screenshot 2025-03-03 at 12 26 44

@victormours victormours marked this pull request as draft February 19, 2025 16:56
@victormours victormours force-pushed the agents-without-organisations-empty-state branch from 30b7844 to 417486e Compare February 28, 2025 09:59
@victormours victormours changed the title WIP : Permettre aux agents de se créer un compte sans organisation via proconnect Permettre aux agents de se créer un compte sans organisation via Proconnect Mar 3, 2025
@victormours victormours marked this pull request as ready for review March 3, 2025 11:29
@victormours victormours force-pushed the agents-without-organisations-empty-state branch from 1f8a93d to cb488c2 Compare March 3, 2025 11:29
@victormours
Copy link
Contributor Author

Texte :

Pour commencer, aidez-nous à reconnaître votre organisation.

Si vos collègues utilisent déjà RDV Solidarités, ils peuvent vous inviter dans leur espace via le menu “Paramètres > Agents > Ajouter un agent”.

Si vous souhaitez ouvrir un nouvel espace sur RDV Solidarités pour votre organisation, notre équipe est là vous aider.

@MatisAlves
Copy link

MatisAlves commented Mar 3, 2025

Texte :

Il semblerait qu’il y ait un problème.
Pour commencer, aidez-nous à en savoir plus :

  • Votre structure utilise déjà RDV Service Public et vous souhaitez disposer d’un accès ?
    Seuls vos collègues utilisateurs peuvent vous inviter depuis le menu Paramètres > Agents > Ajouter un agent

  • Votre structure n’utilise pas RDV Service Public et vous souhaitez créer un compte ?
    Nous vous invitons à contacter notre équipe. Nous organiserons un temps d’échanges pour vous présenter la solution et créer le compte de votre structure.

-> CTA « contacter notre équipe »

Copy link
Contributor

@francois-ferrandis francois-ferrandis left a comment

Choose a reason for hiding this comment

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

C'est fou de faire tomber autant de certitudes en si peu de code ! 🤯

Je n'ai pas d'objection à merger comme ça. 🚀

@@ -100,7 +100,7 @@ def timeout_in = 14.days # Used by Devise's :timeoutable
# * it validates :email (the invite_key) specifically with Devise.email_regexp.
validates :first_name, presence: true, unless: -> { allow_blank_name || is_an_intervenant? }
validates :last_name, presence: true, unless: -> { allow_blank_name }
validates :agent_services, presence: true
validates :agent_services, presence: true, unless: -> { roles.none? }
Copy link
Contributor

Choose a reason for hiding this comment

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

Je prédit que l'omelette ne se fera pas sans casser des œufs, mais moi aussi j'ai faim ! 😉

=> link_to("Migrer", new_super_admins_agent_migration_path(agent_id: page.resource.id), class: "button")
- if page.resource.roles.none?
= link_to("Ouvrir un compte", new_super_admins_compte_path(agent_id: page.resource.id), class: "button")
Copy link
Contributor

Choose a reason for hiding this comment

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

Trop malin ! 🤩

root to: "admin/organisations#index", as: :authenticated_agent_root, defaults: { follow_unique: "1" }
root to: "agents/pages#home", as: :authenticated_agent_root
Copy link
Contributor

Choose a reason for hiding this comment

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

Beaucoup plus compréhensible et simple !

end

before do
agent.services.delete_all
Copy link
Contributor

Choose a reason for hiding this comment

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

Ah, on crée des services en cascade et donc on doit les supprimer ensuite, c'est ça ?

Je te propose cette implem d'un trait :no_service dans la factory :

    # [...]
    invitation_accepted_at { Time.zone.parse("2020-07-30 10:30").in_time_zone }

    transient do

      service { build(:service) }
      no_service { false }

      trait :no_service do
        no_service { true }
      end
    end
    after(:build) do |agent, evaluator|
      next if evaluator.no_service
      next if agent.agent_services.any?
      next if agent.services.any?

      agent.services = if evaluator.service
                         [evaluator.service]
                       else
                         [build(:service)]
                       end
    end

    transient do
      basic_role_in_organisations { [] }
    end

    # [...]

@@ -12,6 +12,9 @@ def call
@agent = find_agent

if @agent
if @agent.services.none?
@agent.update(service_ids: @agent_params[:service_ids])
Copy link
Contributor

Choose a reason for hiding this comment

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

Et si dans app/controllers/admin/agents_controller.rb:24 on utilise Agent.new(create_agent_params.merge(...)), ça nous permet d'ajouter des conditions sur les services dans la policy. Je ne sais pas si on veut aller jusque là, c'est juste pour évoquer le sujet.

Disons que là je vois qu'on utilise des service_ids qui ne sont jamais observés dans la policy, et donc ça fait sonner l'alerte, mais bon, c'est des service_ids, pas de user_ids. Mais quand même, ça peut être une faille d'escalade de droits dans le futur.

@victormours
Copy link
Contributor Author

Mises à jour suite aux suggestions de Matis :

Screenshot 2025-03-04 at 09 48 23

@victormours victormours enabled auto-merge (squash) March 4, 2025 10:23
@victormours victormours force-pushed the agents-without-organisations-empty-state branch 2 times, most recently from 1855c67 to 6966d79 Compare March 4, 2025 10:29
@victormours victormours force-pushed the agents-without-organisations-empty-state branch from 6966d79 to cc0c1e8 Compare March 4, 2025 10:33
@victormours victormours merged commit c97a127 into production Mar 4, 2025
15 checks passed
@victormours victormours deleted the agents-without-organisations-empty-state branch March 4, 2025 10:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: ✅ Done
Development

Successfully merging this pull request may close these issues.

Création de comptes via ProConnect pour les intégrations
3 participants