Skip to content

Commit

Permalink
Merge pull request #3745 from betagouv/lucien/carte-sollicitation
Browse files Browse the repository at this point in the history
Met à jour les cartes sollicitation
  • Loading branch information
LucienMLD authored Jan 14, 2025
2 parents 25a66ec + 7bb68e9 commit 8e48d3a
Show file tree
Hide file tree
Showing 17 changed files with 146 additions and 167 deletions.
24 changes: 17 additions & 7 deletions app/assets/stylesheets/components/cards.sass
Original file line number Diff line number Diff line change
Expand Up @@ -101,16 +101,23 @@

// Carte solicitation =================================
.card-solicitation
.subtitle
color: $grey-dark
font-size: 0.875rem
h2
font-size: 1.25rem
line-height: 1.5rem
.card__title
flex: 1 1 auto
.subtitle
color: $grey-dark
font-size: 0.875rem
h2
font-size: 1.25rem
line-height: 1.5rem
margin-bottom: 0
.fr-card__content
padding: 1rem 2rem
.fr-card__body
margin-bottom: 0
.card__info
display: flex
justify-content: space-between
margin-bottom: 1rem
.card__fields
margin-right: 1.5rem
.card__description
Expand Down Expand Up @@ -140,7 +147,7 @@
display: flex
justify-content: flex-end
align-items: center
flex: 0 1 50%
flex: 0 1 45%
.modify-badges
cursor: pointer
font-size: 1.5rem
Expand All @@ -151,6 +158,9 @@
.badge-select
flex: 1 1 auto
.badges-list
display: flex
flex-wrap: wrap
justify-content: flex-end
.label
margin: 2px
.dropdown
Expand Down
13 changes: 8 additions & 5 deletions app/controllers/conseiller/solicitations_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@ def index
end

def processed
@solicitations = ordered_solicitations(:processed)
@solicitations = ordered_solicitations(:processed, :desc)
@facilities = get_and_format_facilities
@status = t('solicitations.header.processed')
render :index
end

def canceled
@solicitations = ordered_solicitations(:canceled)
@solicitations = ordered_solicitations(:canceled, :desc)
@facilities = get_and_format_facilities
@status = t('solicitations.header.canceled')
render :index
Expand Down Expand Up @@ -50,7 +50,10 @@ def update_status
if @solicitation.valid?
done = Solicitation.human_attribute_value(:status, status, context: :done, count: 1)
flash.notice = "#{@solicitation} #{done}"
render 'remove'
respond_to do |format|
format.turbo_stream { render turbo_stream: turbo_stream.remove(@solicitation) }
format.html { redirect_back fallback_location: conseiller_solicitations_path }
end
else
flash.alert = @solicitation.errors.full_messages.to_sentence
redirect_to [:conseiller, @solicitation]
Expand Down Expand Up @@ -89,13 +92,13 @@ def mark_as_spam

private

def ordered_solicitations(status)
def ordered_solicitations(status, order = :asc)
Solicitation
.includes(:badge_badgeables, :badges, :landing, :diagnosis, :facility, feedbacks: { user: :antenne },
landing_subject: :subject, institution: :logo, subject_answers: :subject_question)
.where(status: status)
.apply_filters(index_search_params)
.order(:completed_at)
.order(completed_at: order)
.page(params[:page])
end

Expand Down
15 changes: 14 additions & 1 deletion app/controllers/emails/solicitations_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,27 @@ def send_generic_email
if processor.valid?
processor.send_email
flash.notice = t('emails.sent')
render_turbo_stream_or_html
else
flash.alert = t('emails.not_sent')
render_turbo_stream_or_html(status: :unprocessable_entity)
end
redirect_to conseiller_solicitations_path(query: params[:query])
end

private

def render_turbo_stream_or_html(status: :ok)
respond_to do |format|
format.turbo_stream do
render turbo_stream: [
turbo_stream.remove(@solicitation),
turbo_stream.append('flash', partial: 'shared/flashes', locals: { flash: flash })
], status: status, layout: false
end
format.html { redirect_to conseiller_solicitations_path(query: params[:query]) }
end
end

def authorize_index_solicitation
authorize Solicitation, :index?
end
Expand Down
38 changes: 17 additions & 21 deletions app/helpers/solicitation_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,17 @@ def status_action_link(solicitation, new_status, classes = %w[])
path = update_status_conseiller_solicitation_path(solicitation, status: new_status)
classes += STATUS_ACTION_COLORS[new_status.to_sym]
tag.li class: 'fr-menu__item' do
link_to name, path, method: :post, remote: true, class: classes.join(' ')
link_to name, path, method: :post, class: classes.join(' ')
end
end

def subject_button(solicitation, classes = %[])
def subject_link(solicitation)
if solicitation.diagnosis.present? && solicitation.diagnosis.needs.present?
button_for_editable_subject(solicitation.diagnosis.needs.first, classes)
link_for_editable_subject(solicitation.diagnosis.needs.first)
elsif solicitation.landing_subject.present?
solicitation.landing_subject.title
else
button_for_non_editable_subject(solicitation, classes)
I18n.t('helpers.solicitation_number', id: solicitation.id)
end
end

Expand All @@ -52,20 +54,14 @@ def link_to_diagnosis(diagnosis)
t('helpers.solicitation.analysis_in_progress', step: diagnosis.human_attribute_value(:step))
end

link_to text, [:conseiller, diagnosis], class: 'button'
end

def display_region(region, territory_params)
# display region if there is no region filter
return unless ((territory_params.present? && (territory_params == 'uncategorisable')) || territory_params.blank?) && region.present?
tag.li(class: 'item') do
t('helpers.solicitation.localisation_html', region: region.name)
end
link_to text, [:conseiller, diagnosis], class: 'button', 'data-turbo': false
end

def display_solicitation_attribute(solicitation, attribute)
if attribute == :provenance_detail && solicitation.campaign == 'entreprendre'
link_to solicitation.send(attribute), partner_url(solicitation, full: true), title: "#{to_new_window_title(t('needs.show.origin_source_title'))}", target: '_blank', rel: 'noopener'
link_to solicitation.send(attribute), partner_url(solicitation, full: true), title: "#{to_new_window_title(t('needs.show.origin_source_title'))}", target: '_blank', rel: 'noopener', data: { turbo: false }
elsif attribute == :siret
link_to(solicitation.normalized_siret, show_with_siret_companies_path(solicitation.siret), data: { turbo: false })
else
solicitation.send(attribute)
end
Expand All @@ -89,14 +85,14 @@ def partner_url(solicitation, full: false)

private

def button_for_editable_subject(need, classes)
title = t('helpers.solicitation.modify_subject', subject: need.subject)
def link_for_editable_subject(need)
title = t('helpers.solicitation.modify_subject')
path = needs_conseiller_diagnosis_path(need.diagnosis)
link_to need.subject.label, path, class: classes + ' fr-icon-settings-5-fill fr-btn--icon-right ', title: title
end

def button_for_non_editable_subject(solicitation, classes)
tag.button(class: classes, disabled: 'disabled') { solicitation.landing_subject.title }
aria_describedby = "tooltip-#{need.id}"
tag.div do
concat(link_to need.subject.label, path, title: title, 'aria-describedby': aria_describedby, 'data-turbo': false)
concat(tag.span title, class: 'fr-tooltip fr-placement', id: "tooltip-#{need.id}", role: 'tooltip', 'aria-hidden': true)
end
end

def entreprendre_url(solicitation, full: false)
Expand Down
2 changes: 1 addition & 1 deletion app/models/solicitation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -664,7 +664,7 @@ def to_s
end

def display_attributes
%i[normalized_phone_number institution requested_help_amount location provenance_title provenance_detail relaunch]
%i[full_name email siret provenance_detail cooperation]
end

def normalized_siret
Expand Down
4 changes: 2 additions & 2 deletions app/views/conseiller/solicitations/_retry_diagnosis.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
%span.ri-arrow-down-s-line.fr-ml-1w{ 'aria-hidden': 'true' }
%ul.dropdown-content.fr-menu__list
%li.fr-menu__item
= link_to prepare_diagnosis_conseiller_solicitation_path(solicitation), class: 'fr-nav__link', method: :post do
= link_to prepare_diagnosis_conseiller_solicitation_path(solicitation), class: 'fr-nav__link', method: :post, 'data-turbo': false do
= t('.start_auto_diagnosis')
%span.ri-arrow-right-s-line.fr-ml-1w{ 'aria-hidden': 'true' }
%li.fr-menu__item
= link_to new_conseiller_diagnosis_path(solicitation: solicitation.id), class: 'fr-nav__link' do
= link_to new_conseiller_diagnosis_path(solicitation: solicitation.id), class: 'fr-nav__link', 'data-turbo': false do
= t('.start_manual_diagnosis')
%span.ri-arrow-right-s-line.fr-ml-1w{ 'aria-hidden': 'true' }
99 changes: 42 additions & 57 deletions app/views/conseiller/solicitations/_solicitation.haml
Original file line number Diff line number Diff line change
@@ -1,35 +1,12 @@
.card-solicitation.fr-my-4w.card{ id: solicitation.id }
.card__header
.card__title
%h2= [solicitation.to_s, solicitation.full_name].join(' - ')
%span.subtitle= I18n.l(solicitation.completed_at, format: :long)
= render 'solicitation_badges', solicitation: solicitation
.fr-card__body.fr-text--sm
.fr-card__content
.card__info
%ul.card__fields.list-unstyled.fr-p-0
- if solicitation.siret.present?
%li.item.fr-p-0
= t('.siret')
%strong= link_to(solicitation.normalized_siret, show_with_siret_companies_path(solicitation.siret), data: { turbo: false })
%li.item.fr-p-0
= t('.email')
%strong= mail_to(solicitation.email, solicitation.email, target: '_blank')
- solicitation.display_attributes.each do |attribute|
- if solicitation.send(attribute).present?
%li.item.fr-p-0
= Solicitation.human_attribute_name(attribute) + ' : '
%strong= display_solicitation_attribute(solicitation, attribute)
- if solicitation.landing.present?
%li.item.fr-p-0
= t('.source')
%strong= link_to solicitation.landing.slug, landing_path(solicitation.landing)
- if solicitation.landing_subject.present?
%li.item.fr-p-0
= t('.landing_subjects')
= subject_button(solicitation, "fr-btn fr-btn--secondary fr-btn--sm")
= display_region(solicitation.region, params[:territory])

= turbo_frame_tag solicitation do
.card-solicitation.fr-my-4w.card
.card__header
.card__title
%h2= subject_link(solicitation)
%span.subtitle= I18n.l(solicitation.completed_at, format: :long)
= render 'solicitation_badges', solicitation: solicitation
.fr-card__body.fr-text--sm
.fr-card__content
.card__meta
%ul.fr-badge-group.meta__warnings
- if solicitation.facility&.all_nature_activites&.any?
Expand Down Expand Up @@ -60,30 +37,38 @@
= t('.not_sas_html')
%span.fr-tooltip.fr-placement{ 'aria-hidden': "true", role: 'tooltip', id: "tooltip-not-sas-#{solicitation.id}" }
= t('.not_sas_explanation')
- if facilities[solicitation.id].present?
.meta__items
.item= t('.needs_historic')
- facilities[solicitation.id].each do |facility|
= link_to facility[:company_name], needs_company_path(facility[:id])
- if solicitation.cooperation.present?
.logo-institution= display_logo(name: solicitation.cooperation.logo&.filename, path: "cooperations/", extra_params: { class: 'institution-logo' })
.card__description
.card__description__label= t('.description')
.card__description__content.break-word
= simple_format(solicitation.description)
- if solicitation.subject_answers.any?
%ul
- solicitation.subject_answers.each do |answer|
- answer_label = I18n.t(answer.filter_value, scope: [:activerecord, :attributes, :subject_questions, answer.key],
default: I18n.t(answer.filter_value, scope: [:boolean, :text]))
%li
= question_label(answer.key, :short)
%strong= answer_label

.card__description
.card__description__content.break-word
= simple_format(solicitation.description)
- if solicitation.subject_answers.any?
%ul
- solicitation.subject_answers.each do |answer|
- answer_label = I18n.t(answer.filter_value, scope: [:activerecord, :attributes, :subject_questions, answer.key],
default: I18n.t(answer.filter_value, scope: [:boolean, :text]))
%li
= question_label(answer.key, :short)
%strong= answer_label

.card__info
%ul.card__fields.list-unstyled.fr-p-0
- solicitation.display_attributes.each do |attribute|
- if solicitation.send(attribute).present?
%li.item.fr-p-0
= Solicitation.human_attribute_name(attribute) + ' : '
= display_solicitation_attribute(solicitation, attribute)
.card__meta
%ul.fr-badge-group.meta__warnings
- if facilities[solicitation.id].present?
.meta__items
.item= t('.needs_historic')
- facilities[solicitation.id].each do |facility|
= link_to facility[:company_name], needs_company_path(facility[:id]), 'data-turbo': false

.card__feedbacks
%div{ id: "display-feedbacks-#{solicitation.id}" }
= render partial: 'feedbacks/feedback', collection: solicitation.feedbacks
= render 'feedbacks/form', feedback: solicitation.feedbacks.new(category: :solicitation)
.card__footer
= render 'solicitation_actions', solicitation: solicitation
.card__feedbacks
%hr
%div{ id: "display-feedbacks-#{solicitation.id}" }
= render partial: 'feedbacks/feedback', collection: solicitation.feedbacks
= render 'feedbacks/form', feedback: solicitation.feedbacks.new(category: :solicitation)
.card__footer
= render 'solicitation_actions', solicitation: solicitation
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@
= render 'retry_diagnosis', solicitation: solicitation
- else
.actions.success-main-525-bg
= link_to prepare_diagnosis_conseiller_solicitation_path(solicitation), class: 'button', method: :post do
= link_to prepare_diagnosis_conseiller_solicitation_path(solicitation), class: 'button', method: :post, 'data-turbo': false do
%span.ri-rocket-2-fill.fr-mr-1w{ 'aria-hidden': 'true' }
= t('.start_auto_diagnosis')
%span.ri-arrow-right-s-line.fr-ml-1w{ 'aria-hidden': 'true' }
- else
.actions.success-main-525-bg
= link_to new_conseiller_diagnosis_path(solicitation: solicitation.id), class: 'button' do
= link_to new_conseiller_diagnosis_path(solicitation: solicitation.id), class: 'button', 'data-turbo': false do
= t('.start_diagnosis')
%span.ri-arrow-right-s-line.fr-ml-1w{ 'aria-hidden': 'true' }

Expand Down Expand Up @@ -46,7 +46,7 @@
%li.fr-menu__item
= link_to t(email_type, scope: 'solicitations.solicitation_actions.emails'),
emails_solicitation_generic_path(email_type: email_type, id: solicitation.id, query: params[:query]),
method: :post, class: 'fr-nav__link'
method: :post, class: 'fr-nav__link', 'data-turbo': false

.dropdown.actions.grey-medium-bg
%button.button
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@
{},
{ multiple: true, class: 'badge-select', 'data-badges-target': 'select', id: "solicitation-#{solicitation.id}-select-badges" })

= f.submit t('ok'), class: 'fr-btn fr-btn--sm'
= f.submit t('ok'), class: 'fr-btn fr-btn--sm', 'data-turbo': false
%button.ri-price-tag-3-line.fr-mr-1w.modify-badges{ data: { action: 'click->badges#toggleForm', id: "#{solicitation.id}" }, title: t('.add_remove_badges') }
6 changes: 0 additions & 6 deletions app/views/conseiller/solicitations/remove.js.haml

This file was deleted.

2 changes: 1 addition & 1 deletion app/views/feedbacks/_form.html.haml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
= form_with model: feedback, data: { controller: "feedback-form" },
= form_with model: feedback, data: { controller: "feedback-form", turbo: false },
class: "feedbacks-form feedback-form-#{feedback.feedbackable_id} #{'from_alert_box' if local_assigns[:from_alert_box].present?} " do |form|
= form.hidden_field :feedbackable_id, id: "feedbackable-id-#{feedback.feedbackable_id}"
= form.hidden_field :feedbackable_type, id: "feedbackable-type-#{feedback.feedbackable_id}"
Expand Down
5 changes: 2 additions & 3 deletions app/views/layouts/application.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,8 @@
= render 'user_impersonate'
%main#content{ role: 'main' }
-# ajout d'un id pour turbo_stream
#flash
= render 'shared/flashes'
= render 'shared/flashes'
.fr-pt-5w
= content_for?(:content) ? yield(:content) : yield # :content is used by sub-layouts (e.g. side_menu)
- if user_signed_in?
Expand Down
Loading

0 comments on commit 8e48d3a

Please sign in to comment.