-
Notifications
You must be signed in to change notification settings - Fork 91
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
ETQ Usager, je veux voir dans mon dossier les informations de contact de mon groupe instructeur #9425
Conversation
366d550
to
8aab038
Compare
est ce que le numéro SIRET est obligatoire ? cela poserait des pb car dans les cas où la notion de service traitant ne s'attache pas forcément au groupe d'instructeur... cela risque tout simplement d'être ... bloquant... a partager avec des exemples concrets... ensuite, au début en effet... on est pas obligé de remplir ... wait and see |
@emsnytech Actuellement, j'ai mis le siret obligatoire mais ça peut être changé.
Pas sûr de comprendre. Cette PR attache au groupe instructeur un service. Ou c'est bien un service avec un nom, un organisme, un type d'organisme, un siret et des infos de contact. Et la seule différence avec le service associé à une procédure, c'est que le siret n'est pas obligatoire ? |
Très chouette cette feature 👍 Juste un petit retour : si je suis connecté etq admin, je crée un groupe_service -> je me retrouve connecté etq instructeur. |
Hmm, effectivement, je regarde si je peux corriger cela.
Mais en fouillant un peu, j'ai trouvé ce commit de @mfo : 6e31dec Il semblerait que cela apporte de la confusion. Du coup, peut-être ne pas cloner non plus les services associés aux groupe instructeurs ? @mfo un avis ? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Comme d'hab, PR très sympa à relire grâce a pitis commits 🤗 .
Mise à part le coup de la redirection, mentionné par Eric, en instructeur alors que l'on rajoute des informations de contacte etq administrateur et qui risque d etre un poil compliqué à fixer, j'ai que des retours mineurs.
} | ||
|
||
validates :nom, presence: { message: 'doit être renseigné' }, allow_nil: false | ||
validates :nom, uniqueness: { scope: :groupe_instructeur, message: 'existe déjà' } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
bien joué le scope !
validates :organisme, presence: { message: 'doit être renseigné' }, allow_nil: false | ||
validates :siret, siret_format: true | ||
validates :type_organisme, presence: { message: 'doit être renseigné' }, allow_nil: false | ||
validates :email, presence: { message: 'doit être renseigné' }, allow_nil: false |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
validates :email, presence: { message: 'doit être renseigné' }, allow_nil: false | |
validates :email, format: { with: Devise.email_regexp }, presence: { message: 'doit être renseigné' }, allow_nil: false |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
J'ai rebasé. Intégré dans ce commit : c49c994
t.text :adresse | ||
t.string :email | ||
t.jsonb :etablissement_infos, default: {} | ||
t.decimal :etablissement_lat, precision: 10, scale: 6 | ||
t.decimal :etablissement_lng, precision: 10, scale: 6 | ||
t.text :horaires | ||
t.string :nom, null: false | ||
t.string :organisme | ||
t.string :siret |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pour être raccord avec les contraintes coté model
t.text :adresse | |
t.string :email | |
t.jsonb :etablissement_infos, default: {} | |
t.decimal :etablissement_lat, precision: 10, scale: 6 | |
t.decimal :etablissement_lng, precision: 10, scale: 6 | |
t.text :horaires | |
t.string :nom, null: false | |
t.string :organisme | |
t.string :siret | |
t.text :adresse, null: false | |
t.string :email, null: false | |
t.jsonb :etablissement_infos, default: {} | |
t.decimal :etablissement_lat, precision: 10, scale: 6 | |
t.decimal :etablissement_lng, precision: 10, scale: 6 | |
t.text :horaires, , null: false | |
t.string :nom, null: false | |
t.string :organisme, null: false | |
t.string :siret, null: false |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yep. J'ai rebasé. Intégré dans ce commit : c49c994 (et avec la modif du db/schema.rb)
require 'rails_helper' | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
je crois que tu peux le faire sauter
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Effectivement :)
J'ai rebasé. Intégré dans ce commit : c49c994
private | ||
|
||
def assign_procedure_and_groupe_instructeur | ||
@procedure = Procedure.find params[:procedure_id] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@procedure = Procedure.find params[:procedure_id] | |
@procedure = current_instructeur.procedures.find params[:procedure_id] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
J'ai rebasé. Suggestion intégrée dans ce commit : f9453b5
app/controllers/instructeurs/groupe_instructeur_services_controller.rb
Outdated
Show resolved
Hide resolved
class APIEntreprise::GroupeInstructeurServiceJob < APIEntreprise::ServiceJob | ||
private | ||
|
||
def find_service(service_id) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
si tu peux rajouter un ptit commentaire genre #override find_service from ServiceJob to work with groupe_instructeur_service
ca aiderait le prochain moi, car j'ai mis pas mal de temps à comprendre 😛
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oui, complètement d'accord !
J'ai rebasé. Suggestion intégrée dans 4eeac56 (et j'en ai profité pour modifier également les paramètres en groupe_service_id
)
.card-title Informations de contact | ||
- service = groupe_instructeur.groupe_instructeur_service | ||
- if service.nil? | ||
= "Le groupe #{groupe_instructeur.label} n'a pas de service associé. Les informations de contact affichées à l'usager seront celles du service de la procédure" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Peut être ?
= "Le groupe #{groupe_instructeur.label} n'a pas de service associé. Les informations de contact affichées à l'usager seront celles du service de la procédure" | |
= "Le groupe #{groupe_instructeur.label} n'a pas d'informations de contact. L’usager ne pourra contacter que le service national." |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
J'attends le retour de Philippe sur la notion de service ou d'infos de contact.
Sur "service national", ce n'est pas forcément le cas. On peut avoir une procédure locale, avec plusieurs groupe instructeurs.
= "Le groupe #{groupe_instructeur.label} n'a pas de service associé. Les informations de contact affichées à l'usager seront celles du service de la procédure" | ||
%p.mt-3 | ||
- if groupe_instructeur.instructeurs.include?(current_administrateur.user.instructeur) | ||
= link_to "+ Nouveau service", new_instructeur_groupe_groupe_instructeur_service_path(procedure_id: procedure.id, groupe_id: groupe_instructeur.id), class: "fr-btn" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Peut etre que le terme service
peut être remplacé ici par contact (pas sur).
= link_to "+ Nouveau service", new_instructeur_groupe_groupe_instructeur_service_path(procedure_id: procedure.id, groupe_id: groupe_instructeur.id), class: "fr-btn" | |
= link_to "Ajouter des informations de contact", new_instructeur_groupe_groupe_instructeur_service_path(procedure_id: procedure.id, groupe_id: groupe_instructeur.id), class: "fr-btn" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Même commentaire que precedemment sur service ou info de contact
- else | ||
%p.mt-3 | ||
- if groupe_instructeur.instructeurs.include?(current_administrateur.user.instructeur) | ||
= link_to "Modifier le service #{service.nom}", edit_instructeur_groupe_groupe_instructeur_service_path(procedure_id: procedure.id, groupe_id: groupe_instructeur.id), class: "fr-btn" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
subjectif: plus simple (y'a pas d'ambiguité ici)
= link_to "Modifier le service #{service.nom}", edit_instructeur_groupe_groupe_instructeur_service_path(procedure_id: procedure.id, groupe_id: groupe_instructeur.id), class: "fr-btn" | |
= link_to "Modifier", edit_instructeur_groupe_groupe_instructeur_service_path(procedure_id: procedure.id, groupe_id: groupe_instructeur.id), class: "fr-btn" |
ac02d5b
to
2c60f2f
Compare
3f6c23a
to
8c5465e
Compare
= link_to 'Supprimer', | ||
instructeur_groupe_groupe_instructeur_service_path(procedure_id: @procedure.id, groupe_id: @groupe_instructeur.id), | ||
method: :delete, | ||
data: { confirm: "Confirmez vous la suppression de ce service ?" }, | ||
class: 'fr-btn fr-btn--secondary' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Comme le new appelle cette partial, on a le bouton "Supprimer" dans le formulaire new (et on a une 500 si on clique dessus)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bien vu ! J'ai corrigé. Voir commentaire suivant :)
4a9b66c
to
1a65163
Compare
Nouvelles modifs (et peut-être dernieres 😊 ) suite au dernier rebase :
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
tip top !
|
||
= render Dsfr::InputComponent.new(form: f, attribute: :nom, input_type: :text_field) do |c| | ||
- c.with_hint do | ||
= "Indiquez le nom à utiliser pour contacter le groupe instructeur" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je me demande si le nom est encore pertinent, je ne verrai pas quoi remplir de dedans. Un exemple m'aiderait.
validates :nom, presence: { message: 'doit être renseigné' }, allow_nil: false | ||
validates :nom, uniqueness: { scope: :groupe_instructeur, message: 'existe déjà' } | ||
validates :email, format: { with: Devise.email_regexp, message: "n'est pas valide" }, presence: { message: 'doit être renseigné' }, allow_nil: false | ||
validates :telephone, phone: { possible: true, allow_blank: true } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Je me dis, que maintenant, si tu veux faire des informations de contacts avancées, soit tu remplis tout, soit tu remplis rien.
tu peux pas surcharger les horaires sans modifier le téléphone, sinon un groupe local pourrait modifier les horaires d'ouverture du standard nationale
validates :telephone, phone: { possible: true, allow_blank: true } | |
validates :telephone, phone: { possible: true, allow_blank: false } |
- la modif sur la migration
|
||
= render Dsfr::CalloutComponent.new(title: "Informations de contact") do |c| | ||
- c.body do | ||
Votre démarche sera hébergée par #{APPLICATION_NAME} – mais nous ne pouvons pas assurer le support des démarches. Et malgré la dématérialisation, les usagers se poseront parfois des questions légitimes sur le processus administratif. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
subjectif: simplification
Votre démarche sera hébergée par #{APPLICATION_NAME} – mais nous ne pouvons pas assurer le support des démarches. Et malgré la dématérialisation, les usagers se poseront parfois des questions légitimes sur le processus administratif. | |
Votre démarche est hébergée par #{APPLICATION_NAME} – mais nous n’assurons pas le support des démarches. Malgré la dématérialisation, les usagers se posent des questions légitimes sur le processus administratif. |
par le moyen de leur choix s’ils ont des questions sur votre démarche. | ||
%br | ||
%br | ||
Ces informations de contact seront visibles par les utilisateurs de la démarche, affichées dans le menu « Aide », ainsi qu’en pied de page lors du dépôt d’un dossier. En cas d’informations invalides, #{APPLICATION_NAME} se réserve le droit de suspendre la publication de la démarche. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ces informations de contact seront visibles par les utilisateurs de la démarche, affichées dans le menu « Aide », ainsi qu’en pied de page lors du dépôt d’un dossier. En cas d’informations invalides, #{APPLICATION_NAME} se réserve le droit de suspendre la publication de la démarche. | |
Ces informations de contact seront visibles par les utilisateurs de la démarche, affichées dans le menu « Aide », ainsi qu’en pied de page lors du dépôt d’un dossier. | |
%br | |
%br | |
⚠️ En cas d’informations invalides, #{APPLICATION_NAME} se réserve le droit de suspendre la publication de la démarche. |
@@ -21,6 +21,7 @@ | |||
= I18n.t('users.procedure_footer.contact.email.link') | |||
= link_to service.email, "mailto:#{service.email}", class: "fr-footer__top-link" | |||
|
|||
- if service.present? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- if service.present? |
il me semble que tu peux supprimer cette ligne, car au pire on prend le service de la procédure (ligne 2)
redirect_to admin_procedure_groupe_instructeur_path(@groupe_instructeur, procedure_id: @procedure.id), notice: notice | ||
else | ||
redirect_to instructeur_groupe_path(@groupe_instructeur, procedure_id: @procedure.id), notice: notice |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
redirect_to admin_procedure_groupe_instructeur_path(@groupe_instructeur, procedure_id: @procedure.id), notice: notice | |
else | |
redirect_to instructeur_groupe_path(@groupe_instructeur, procedure_id: @procedure.id), notice: notice | |
redirect_to admin_procedure_groupe_instructeur_path(@procedure, @groupe_instructeur), notice: notice | |
else | |
redirect_to instructeur_groupe_path(@procedure, @groupe_instructeur), notice: notice |
= render SimpleFormatComponent.new(service.adresse, class_names_map: {paragraph: 'fr-footer__content-desc'}) | ||
= service.email | ||
- if service.telephone.present? | ||
%p= service.telephone |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
En regardant la doc de notre librairie de parsage de tel, j'ai vu qu'il proposait de jolis formatages
nationaux : Phonelib.parse(' 0 47 2561 47 3 ').national => "04 72 56 14 73"
internationaux: Phonelib.parse(' 0 4 72 561 473 ').e164 => "+33472561473"
, intéressant pour les urls car ca marcherait avec de tel étranger
Du coup, je me dis qu'on pourrait faire un concern utilisé dans Service
et dans GroupeInstructeurService
qui proposerait def telephone_display
et def telephone_url
et modifier tous nos affichages pour avoir un super rendu.
Je suis conscient que c'est pas trop le sujet de cette pr, mais je me dis que c'est l'occasion.
T'en penses quoi ?
@@ -0,0 +1,21 @@ | |||
class GroupeInstructeurService < ApplicationRecord |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Du coup
class GroupeInstructeurService < ApplicationRecord | |
class ContactInformation < ApplicationRecord |
Je sais que c'est relou, mais j'ai l'impression que ça éviterait des confusions lorsqu'on parlera de service
@@ -16,7 +16,7 @@ | |||
= "Indiquez le nom à utiliser pour contacter le groupe instructeur" | |||
|
|||
= render Dsfr::InputComponent.new(form: f, attribute: :email, input_type: :email_field) | |||
= render Dsfr::InputComponent.new(form: f, attribute: :telephone, input_type: :telephone_field) | |||
= render Dsfr::InputComponent.new(form: f, attribute: :telephone, input_type: :telephone_field, required: false) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
si t'es d'accord avec le telephone obligatoire, il faut le mettre aussi ici
end | ||
|
||
private | ||
|
||
def redirect_to_groupe_instructeur(notice) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
super nice !
1a65163
to
9f279ac
Compare
if admin owns original procedure
even if the dossier is not in brouillon state
after creating or editing groupe instructeur service
9f279ac
to
5b9fbf4
Compare
close #9356
Ce que permet cette PR
l'instructeur d'une procédure routée peut ajouter, modifier ou supprimer un service spécifique au groupe instructeur auquel il appartient
lorsqu'un administrateur clone une procédure routée qui lui appartient, il clone également les groupes instructeurs et leur service spécifique
l'usager voit dans le pied de page les informations de contact du groupe instructeur qui gère son dossier. Si le service spécifique au groupe instructeur ne contient pas de téléphone, c'est le téléphone du service associé à la procédure qui est affiché à l'usager.
désormais, le téléphone du service et ses horaires d'ouverture sont tout le temps affichés (même si le dossier n'est plus en brouillon)
Impressions écran
L'instructeur peut ajouter ou modifier un service spécifique à un groupe instructeur depuis la page du groupe instructeur.