diff --git a/app/assets/images/favicons/16x16.png b/app/assets/images/favicons/16x16.png new file mode 100644 index 000000000..c73712dba Binary files /dev/null and b/app/assets/images/favicons/16x16.png differ diff --git a/app/assets/images/favicons/32x32.png b/app/assets/images/favicons/32x32.png new file mode 100644 index 000000000..d23898479 Binary files /dev/null and b/app/assets/images/favicons/32x32.png differ diff --git a/app/assets/images/favicons/96x96.png b/app/assets/images/favicons/96x96.png new file mode 100644 index 000000000..a4d73f1d7 Binary files /dev/null and b/app/assets/images/favicons/96x96.png differ diff --git a/app/assets/javascripts/carte/cadastre.js b/app/assets/javascripts/carte/cadastre.js index ea9de02a8..81bff065c 100644 --- a/app/assets/javascripts/carte/cadastre.js +++ b/app/assets/javascripts/carte/cadastre.js @@ -33,7 +33,7 @@ function display_cadastre(cadastre_array) { else if (cadastre_array.length > 0) { cadastre_array.forEach(function (cadastre) { - $("#cadastre.list ul").append('
  • Parcelle n°' + cadastre.numero + ' - Feuille ' + cadastre.code_arr + ' ' + cadastre.section + ' ' + cadastre.feuille+ '
  • '); + $("#cadastre.list ul").append('
  • Parcelle nº ' + cadastre.numero + ' - Feuille ' + cadastre.code_arr + ' ' + cadastre.section + ' ' + cadastre.feuille+ '
  • '); cadastreItems.addData(cadastre.geometry); }); diff --git a/app/assets/stylesheets/pieces_justificatives_fields.scss b/app/assets/stylesheets/pieces_justificatives_fields.scss new file mode 100644 index 000000000..12a88199c --- /dev/null +++ b/app/assets/stylesheets/pieces_justificatives_fields.scss @@ -0,0 +1,3 @@ +.pieces_justificatives_fields { + .form-inline > .form-group { vertical-align: top; } +} diff --git a/app/controllers/admin/pieces_justificatives_controller.rb b/app/controllers/admin/pieces_justificatives_controller.rb index c899e3486..0f6d14987 100644 --- a/app/controllers/admin/pieces_justificatives_controller.rb +++ b/app/controllers/admin/pieces_justificatives_controller.rb @@ -25,7 +25,7 @@ class Admin::PiecesJustificativesController < AdminController def update_params params .require(:procedure) - .permit(types_de_piece_justificative_attributes: [:libelle, :description, :id, :order_place, :lien_demarche]) + .permit(types_de_piece_justificative_attributes: [:libelle, :description, :id, :order_place, :mandatory, :lien_demarche]) end def move_up diff --git a/app/controllers/backoffice/private_formulaires_controller.rb b/app/controllers/backoffice/private_formulaires_controller.rb index 81a728085..0353b02f3 100644 --- a/app/controllers/backoffice/private_formulaires_controller.rb +++ b/app/controllers/backoffice/private_formulaires_controller.rb @@ -5,12 +5,13 @@ class Backoffice::PrivateFormulairesController < ApplicationController dossier = current_gestionnaire.dossiers.find(params[:dossier_id]) unless params[:champs].nil? - champs_service_errors = ChampsService.save_champs dossier.champs_private, params + ChampsService.save_champs dossier.champs_private, params + champs_service_errors = ChampsService.build_error_messages(dossier.champs_private) if champs_service_errors.empty? flash[:notice] = "Formulaire enregistré" else - flash[:alert] = (champs_service_errors.inject('') { |acc, error| acc+= error[:message]+'
    ' }).html_safe + flash[:alert] = champs_service_errors.join('
    ').html_safe end end diff --git a/app/controllers/users/carte_controller.rb b/app/controllers/users/carte_controller.rb index 0b8a328e9..f38f52ab5 100644 --- a/app/controllers/users/carte_controller.rb +++ b/app/controllers/users/carte_controller.rb @@ -15,8 +15,8 @@ class Users::CarteController < UsersController def save dossier = current_user_dossier - dossier.quartier_prioritaires.map(&:destroy) - dossier.cadastres.map(&:destroy) + dossier.quartier_prioritaires.each(&:destroy) + dossier.cadastres.each(&:destroy) unless params[:json_latlngs].blank? ModuleApiCartoService.save_qp! dossier, params[:json_latlngs] diff --git a/app/controllers/users/description_controller.rb b/app/controllers/users/description_controller.rb index a45a402fb..bdd38cce9 100644 --- a/app/controllers/users/description_controller.rb +++ b/app/controllers/users/description_controller.rb @@ -24,50 +24,38 @@ class Users::DescriptionController < UsersController end def update - @dossier = current_user_dossier - @procedure = @dossier.procedure + dossier = current_user_dossier + procedure = dossier.procedure - return head :forbidden unless @dossier.can_be_initiated? + return head :forbidden unless dossier.can_be_initiated? - @champs = @dossier.ordered_champs + ChampsService.save_champs(dossier.champs, params) if params[:champs] - check_mandatory_fields = !draft_submission? - - if params[:champs] - champs_service_errors = ChampsService.save_champs @dossier.champs, - params, - check_mandatory_fields - - unless champs_service_errors.empty? - flash.alert = (champs_service_errors.inject('') { |acc, error| acc+= error[:message]+'
    ' }).html_safe - return redirect_to users_dossier_description_path(dossier_id: @dossier.id) - end + if procedure.cerfa_flag? && params[:cerfa_pdf] + cerfa = Cerfa.new(content: params[:cerfa_pdf], dossier: dossier, user: current_user) + return redirect_to_description_with_errors(dossier, cerfa.errors.full_messages) unless cerfa.save end - if @procedure.cerfa_flag? && params[:cerfa_pdf] - cerfa = Cerfa.new(content: params[:cerfa_pdf], dossier: @dossier, user: current_user) - unless cerfa.save - flash.alert = cerfa.errors.full_messages.join('
    ').html_safe - return redirect_to users_dossier_description_path(dossier_id: @dossier.id) - end - end + errors_upload = PiecesJustificativesService.upload!(dossier, current_user, params) + return redirect_to_description_with_errors(dossier, errors_upload) if errors_upload.any? - errors_upload = PiecesJustificativesService.upload!(@dossier, current_user, params) - unless errors_upload.empty? - flash.alert = errors_upload.html_safe - return redirect_to users_dossier_description_path(dossier_id: @dossier.id) + if params[:champs] && !draft_submission? + errors = + ChampsService.build_error_messages(dossier.champs) + + PiecesJustificativesService.missing_pj_error_messages(dossier) + return redirect_to_description_with_errors(dossier, errors) if errors.any? end if draft_submission? flash.notice = 'Votre brouillon a bien été sauvegardé.' redirect_to url_for(controller: :dossiers, action: :index, liste: :brouillon) else - if @dossier.draft? - @dossier.initiated! - NotificationMailer.send_notification(@dossier, @dossier.procedure.initiated_mail).deliver_now! + if dossier.draft? + dossier.initiated! + NotificationMailer.send_notification(dossier, procedure.initiated_mail).deliver_now! end flash.notice = 'Félicitations, votre demande a bien été enregistrée.' - redirect_to url_for(controller: :recapitulatif, action: :show, dossier_id: @dossier.id) + redirect_to url_for(controller: :recapitulatif, action: :show, dossier_id: dossier.id) end end @@ -88,9 +76,9 @@ class Users::DescriptionController < UsersController if !((errors_upload = PiecesJustificativesService.upload!(@dossier, current_user, params)).empty?) if flash.alert.nil? - flash.alert = errors_upload.html_safe + flash.alert = errors_upload.join('
    ').html_safe else - flash.alert = (flash.alert + '
    ' + errors_upload.html_safe).html_safe + flash.alert = (flash.alert + '
    ' + errors_upload.join('
    ').html_safe).html_safe end else @@ -111,6 +99,11 @@ class Users::DescriptionController < UsersController private + def redirect_to_description_with_errors(dossier, errors) + flash.alert = errors.join('
    ') + redirect_to users_dossier_description_path(dossier_id: dossier.id) + end + def draft_submission? params[:submit] && params[:submit].keys.first == 'brouillon' end diff --git a/app/controllers/users/sessions_controller.rb b/app/controllers/users/sessions_controller.rb index fee9dfad2..3e8efd878 100644 --- a/app/controllers/users/sessions_controller.rb +++ b/app/controllers/users/sessions_controller.rb @@ -54,10 +54,11 @@ class Users::SessionsController < Sessions::SessionsController sign_out :user - if connected_with_france_connect == 'entreprise' + case connected_with_france_connect + when 'entreprise' redirect_to FRANCE_CONNECT.entreprise_logout_endpoint return - elsif connected_with_france_connect == 'particulier' + when 'particulier' redirect_to FRANCE_CONNECT.particulier_logout_endpoint return end diff --git a/app/decorators/notification_decorator.rb b/app/decorators/notification_decorator.rb index 0763f1dc2..23cc86273 100644 --- a/app/decorators/notification_decorator.rb +++ b/app/decorators/notification_decorator.rb @@ -3,6 +3,6 @@ class NotificationDecorator < Draper::Decorator def index_display ['champs', 'piece_justificative'].include?(type_notif) ? type = liste.join(" ") : type = liste.last - { dossier: "Dossier n°#{dossier.id}", date: created_at.strftime('%d/%m %H:%M'), type: type } + { dossier: "Dossier nº #{dossier.id}", date: created_at.strftime('%d/%m %H:%M'), type: type } end end diff --git a/app/decorators/user_decorator.rb b/app/decorators/user_decorator.rb index d870ccd0a..8f77dc857 100644 --- a/app/decorators/user_decorator.rb +++ b/app/decorators/user_decorator.rb @@ -2,8 +2,12 @@ class UserDecorator < Draper::Decorator delegate_all def gender_fr - return 'M.' if gender == 'male' - return 'Mme' if gender == 'female' + case gender + when 'male' + 'M.' + when 'female' + 'Mme' + end end def birthdate_fr diff --git a/app/mailers/notification_mailer.rb b/app/mailers/notification_mailer.rb index 185543d22..1fa5265ea 100644 --- a/app/mailers/notification_mailer.rb +++ b/app/mailers/notification_mailer.rb @@ -12,7 +12,7 @@ class NotificationMailer < ApplicationMailer end def new_answer dossier - send_mail dossier, "Nouveau message pour votre dossier TPS N°#{dossier.id}" + send_mail dossier, "Nouveau message pour votre dossier TPS nº #{dossier.id}" end private diff --git a/app/models/commentaire.rb b/app/models/commentaire.rb index 09c147dd4..0e39e5eba 100644 --- a/app/models/commentaire.rb +++ b/app/models/commentaire.rb @@ -7,7 +7,7 @@ class Commentaire < ActiveRecord::Base after_save :internal_notification def header - "#{email}, " + created_at.localtime.strftime('%d %b %Y %H:%M') + "#{email}, " + I18n.l(created_at.localtime, format: '%d %b %Y %H:%M') end private diff --git a/app/models/dossier.rb b/app/models/dossier.rb index 14026026f..731320a5f 100644 --- a/app/models/dossier.rb +++ b/app/models/dossier.rb @@ -111,47 +111,49 @@ class Dossier < ActiveRecord::Base fail 'role is not valid' end - if role == 'user' + case role + when 'user' case action - when 'initiate' - if draft? - initiated! - end - when 'update' - if replied? - updated! - end - when 'comment' - if replied? - updated! - end + when 'initiate' + if draft? + initiated! + end + when 'update' + if replied? + updated! + end + when 'comment' + if replied? + updated! + end end - elsif role == 'gestionnaire' + when 'gestionnaire' case action - when 'comment' - if updated? - replied! - elsif initiated? - replied! - end - when 'follow' - if initiated? - updated! - end - when 'close' - if received? - closed! - end - when 'refuse' - if received? - refused! - end - when 'without_continuation' - if received? - without_continuation! - end + when 'comment' + if updated? + replied! + elsif initiated? + replied! + end + when 'follow' + if initiated? + updated! + end + when 'close' + if received? + closed! + end + when 'refuse' + if received? + refused! + end + when 'without_continuation' + if received? + without_continuation! + end end end + state end diff --git a/app/models/mails/closed_mail.rb b/app/models/mails/closed_mail.rb index 3db0d84dc..2d113f71d 100644 --- a/app/models/mails/closed_mail.rb +++ b/app/models/mails/closed_mail.rb @@ -3,7 +3,7 @@ module Mails include MailTemplateConcern DISPLAYED_NAME = "Accusé d'acceptation" - DEFAULT_OBJECT = 'Votre dossier TPS N°--numero_dossier-- a été accepté' + DEFAULT_OBJECT = 'Votre dossier TPS nº --numero_dossier-- a été accepté' end end diff --git a/app/models/mails/initiated_mail.rb b/app/models/mails/initiated_mail.rb index e39aa0e7a..4f401e65e 100644 --- a/app/models/mails/initiated_mail.rb +++ b/app/models/mails/initiated_mail.rb @@ -3,7 +3,7 @@ module Mails include MailTemplateConcern DISPLAYED_NAME = 'Accusé de réception' - DEFAULT_OBJECT = 'Votre dossier TPS N°--numero_dossier-- a été bien reçu' + DEFAULT_OBJECT = 'Votre dossier TPS nº --numero_dossier-- a été bien reçu' end end diff --git a/app/models/mails/received_mail.rb b/app/models/mails/received_mail.rb index 41344f6ca..be65a36b2 100644 --- a/app/models/mails/received_mail.rb +++ b/app/models/mails/received_mail.rb @@ -3,7 +3,7 @@ module Mails include MailTemplateConcern DISPLAYED_NAME = 'Accusé de passage en instruction' - DEFAULT_OBJECT = 'Votre dossier TPS N°--numero_dossier-- va être instruit' + DEFAULT_OBJECT = 'Votre dossier TPS nº --numero_dossier-- va être instruit' end end diff --git a/app/models/mails/refused_mail.rb b/app/models/mails/refused_mail.rb index a1a1af8b4..281788535 100644 --- a/app/models/mails/refused_mail.rb +++ b/app/models/mails/refused_mail.rb @@ -3,7 +3,7 @@ module Mails include MailTemplateConcern DISPLAYED_NAME = 'Accusé de rejet du dossier' - DEFAULT_OBJECT = 'Votre dossier TPS N°--numero_dossier-- a été refusé' + DEFAULT_OBJECT = 'Votre dossier TPS nº --numero_dossier-- a été refusé' end end diff --git a/app/models/mails/without_continuation_mail.rb b/app/models/mails/without_continuation_mail.rb index da9724cf6..3d3bd8f74 100644 --- a/app/models/mails/without_continuation_mail.rb +++ b/app/models/mails/without_continuation_mail.rb @@ -3,7 +3,7 @@ module Mails include MailTemplateConcern DISPLAYED_NAME = 'Accusé de classement sans suite' - DEFAULT_OBJECT = 'Votre dossier TPS N°--numero_dossier-- a été classé sans suite' + DEFAULT_OBJECT = 'Votre dossier TPS nº --numero_dossier-- a été classé sans suite' end end diff --git a/app/models/notification.rb b/app/models/notification.rb index 4ff810f37..2d93de8b3 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -13,7 +13,7 @@ class Notification < ActiveRecord::Base # def broadcast_notification # ActionCable.server.broadcast 'notifications', - # message: "Dossier n°#{self.dossier.id} : #{self.liste.last}", + # message: "Dossier nº #{self.dossier.id} : #{self.liste.last}", # dossier: {id: self.dossier.id} # end end diff --git a/app/models/preference_list_dossier.rb b/app/models/preference_list_dossier.rb index b7880d5c1..60ec5b82c 100644 --- a/app/models/preference_list_dossier.rb +++ b/app/models/preference_list_dossier.rb @@ -36,7 +36,7 @@ class PreferenceListDossier < ActiveRecord::Base table = nil { - dossier_id: create_column('N°', table, 'id', 'id', 1), + dossier_id: create_column('Nº', table, 'id', 'id', 1), created_at: create_column('Créé le', table, 'created_at', 'first_creation', 2), updated_at: create_column('Mise à jour le', table, 'updated_at', 'last_update', 2), state: create_column('État', table, 'state', 'display_state', 1) diff --git a/app/services/accompagnateur_service.rb b/app/services/accompagnateur_service.rb index d526167a0..3c4129e4c 100644 --- a/app/services/accompagnateur_service.rb +++ b/app/services/accompagnateur_service.rb @@ -9,9 +9,10 @@ class AccompagnateurService end def change_assignement! - if @to == ASSIGN + case @to + when ASSIGN AssignTo.create(gestionnaire: @accompagnateur, procedure: @procedure) - elsif @to == NOT_ASSIGN + when NOT_ASSIGN AssignTo.where(gestionnaire: @accompagnateur, procedure: @procedure).delete_all end end diff --git a/app/services/champs_service.rb b/app/services/champs_service.rb index 31b53973f..40c46a993 100644 --- a/app/services/champs_service.rb +++ b/app/services/champs_service.rb @@ -1,11 +1,14 @@ class ChampsService class << self - def save_champs(champs, params, check_mandatory = true) + def save_champs(champs, params) fill_champs(champs, params) champs.select(&:changed?).each(&:save) + end - check_mandatory ? build_error_messages(champs) : [] + def build_error_messages(champs) + champs.select(&:mandatory_and_blank?) + .map { |c| "Le champ #{c.libelle} doit être rempli." } end private @@ -28,14 +31,5 @@ class ChampsService def extract_minute(champ_id, h) h[:time_minute]["'#{champ_id}'"] end - - def build_error_messages(champs) - champs.select(&:mandatory_and_blank?) - .map { |c| build_champ_error_message(c) } - end - - def build_champ_error_message(champ) - { message: "Le champ #{champ.libelle} doit être rempli." } - end end end diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb index 01bfe97e3..18415ebbd 100644 --- a/app/services/notification_service.rb +++ b/app/services/notification_service.rb @@ -34,7 +34,7 @@ class NotificationService when 'champs' attribut when 'submitted' - "Le dossier n°#{@dossier_id} a été déposé." + "Le dossier nº #{@dossier_id} a été déposé." else 'Notification par défaut' end diff --git a/app/services/pieces_justificatives_service.rb b/app/services/pieces_justificatives_service.rb index 266c4fffa..8003e3c92 100644 --- a/app/services/pieces_justificatives_service.rb +++ b/app/services/pieces_justificatives_service.rb @@ -1,40 +1,51 @@ class PiecesJustificativesService - def self.upload! dossier, user, params - errors = '' + def self.upload!(dossier, user, params) + tpj_contents = dossier.types_de_piece_justificative + .map { |tpj| [tpj, params["piece_justificative_#{tpj.id}"]] } + .select { |_, content| content.present? } - dossier.types_de_piece_justificative.each do |type_de_pieces_justificatives| - unless params["piece_justificative_#{type_de_pieces_justificatives.id}"].nil? + without_virus, with_virus = tpj_contents + .partition { |_, content| ClamavService.safe_file?(content.path) } - if ClamavService.safe_file? params["piece_justificative_#{type_de_pieces_justificatives.id}"].path - piece_justificative = PieceJustificative.new(content: params["piece_justificative_#{type_de_pieces_justificatives.id}"], - dossier: dossier, - type_de_piece_justificative: type_de_pieces_justificatives, - user: user) + errors = with_virus + .map { |_, content| content.original_filename + ' : virus détecté' } - unless piece_justificative.save - errors << piece_justificative.errors.messages[:content][0]+" (#{piece_justificative.libelle})"+"
    " - end - else - errors << params["piece_justificative_#{type_de_pieces_justificatives.id}"].original_filename+": Virus détecté !!"+"
    " - end - end - end - errors + errors += without_virus + .map { |tpj, content| save_pj(content, dossier, tpj, user) } + .compact() end def self.upload_one! dossier, user, params - if ClamavService.safe_file? params[:piece_justificative][:content].path - piece_justificative = PieceJustificative.new(content: params[:piece_justificative][:content], - dossier: dossier, - type_de_piece_justificative: nil, - user: user) + content = params[:piece_justificative][:content] + if ClamavService.safe_file? content.path + pj = PieceJustificative.new(content: content, + dossier: dossier, + type_de_piece_justificative: nil, + user: user) - piece_justificative.save + pj.save else - piece_justificative = PieceJustificative.new - piece_justificative.errors.add(:content, params[:piece_justificative][:content].original_filename+": Virus détecté !!") + pj = PieceJustificative.new + pj.errors.add(:content, content.original_filename + ': Virus détecté !!') end - piece_justificative + pj + end + + def self.save_pj(content, dossier, tpj, user) + pj = PieceJustificative.new(content: content, + dossier: dossier, + type_de_piece_justificative: tpj, + user: user) + + pj.save ? nil : "le fichier #{content.original_filename} (#{pj.libelle}) n'a pas pu être sauvegardé" + end + + def self.missing_pj_error_messages(dossier) + mandatory_pjs = dossier.types_de_piece_justificative.select(&:mandatory) + present_pjs = dossier.pieces_justificatives.map(&:type_de_piece_justificative) + missing_pjs = mandatory_pjs - present_pjs + + missing_pjs.map { |pj| "La pièce jointe #{pj.libelle} doit être fournie." } end end diff --git a/app/views/admin/pieces_justificatives/_fields.html.haml b/app/views/admin/pieces_justificatives/_fields.html.haml index 7cbdf5a99..82ec1d409 100644 --- a/app/views/admin/pieces_justificatives/_fields.html.haml +++ b/app/views/admin/pieces_justificatives/_fields.html.haml @@ -1,31 +1,36 @@ -= f.fields_for :types_de_piece_justificative, types_de_piece_justificative, remote: true do |ff| - .form-inline - .form-group - %h4 Libellé - = ff.text_field :libelle, class: 'form-control libelle', placeholder: 'Libellé' - .form-group - %h4 Description - = ff.text_area :description, class: 'form-control description', placeholder: 'Description' - .form-group - %h4 - Lien du formulaire vierge - %small - (optionel) - = ff.url_field :lien_demarche, class: 'form-control', placeholder: 'Lien du document vierge' +.pieces_justificatives_fields + = f.fields_for :types_de_piece_justificative, types_de_piece_justificative, remote: true do |ff| + .form-inline + .form-group + %h4 Libellé + = ff.text_field :libelle, class: 'form-control libelle', placeholder: 'Libellé' + .form-group + %h4 Description + = ff.text_area :description, class: 'form-control description', placeholder: 'Description' + .form-group + %h4 + Lien du formulaire vierge + %small + (optionel) + = ff.url_field :lien_demarche, class: 'form-control', placeholder: 'Lien du document vierge' + + .form-group + = ff.hidden_field :order_place, value: ff.index + = ff.hidden_field :id + - unless ff.object.id.nil? + .form-group + %br   + = ff.object.button_up(index: ff.index, url: move_up_admin_procedure_pieces_justificatives_path(@procedure, ff.index)) + = ff.object.button_down(index: ff.index, url: move_down_admin_procedure_pieces_justificatives_path(@procedure, ff.index)) + + .form-group + %h4 Obligatoire ? + .center + = ff.check_box :mandatory - .form-group - = ff.hidden_field :order_place, value: ff.index - = ff.hidden_field :id - - unless ff.object.id.nil? .form-group %br   - = ff.object.button_up(index: ff.index, url: move_up_admin_procedure_pieces_justificatives_path(@procedure, ff.index)) - = ff.object.button_down(index: ff.index, url: move_down_admin_procedure_pieces_justificatives_path(@procedure, ff.index)) - - - .form-group - %br   - - if ff.object.id.nil? - = f.submit('Ajouter la pièce', class: 'btn btn-success', id: 'add_piece_justificative') - - else - = link_to("", admin_procedure_piece_justificative_path(@procedure, ff.object.id), method: :delete, remote: true, id: "delete_type_de_piece_justificative_#{ff.object.id}", class: %w(form-control btn btn-danger fa fa-trash-o) ) + - if ff.object.id.nil? + = f.submit('Ajouter la pièce', class: 'btn btn-success', id: 'add_piece_justificative') + - else + = link_to("", admin_procedure_piece_justificative_path(@procedure, ff.object.id), method: :delete, remote: true, id: "delete_type_de_piece_justificative_#{ff.object.id}", class: %w(form-control btn btn-danger fa fa-trash-o) ) diff --git a/app/views/backoffice/dossiers/_state_description.html.haml b/app/views/backoffice/dossiers/_state_description.html.haml index b7d58ceea..345b3fecf 100644 --- a/app/views/backoffice/dossiers/_state_description.html.haml +++ b/app/views/backoffice/dossiers/_state_description.html.haml @@ -5,17 +5,18 @@ .col-md-1.col-lg-1.col-sm-1.col-xs-1.col-sm-1.col-xs-1 .fa.fa-info-circle.text-info{ style: 'font-size: 2em; margin-top: 20%;' } .col-xs-11 - - if dossiers_list_facade.liste == 'nouveaux' + - case dossiers_list_facade.liste + - when 'nouveaux' Tous les dossiers présents dans cette liste sont ceux qui %b n'ont jamais été ouvert par votre service. Il attende une première lecture et intervention de votre part. - - elsif dossiers_list_facade.liste == 'a_traiter' + - when 'a_traiter' Tous les dossiers présents dans cette liste sont ceux qui sont %b en cours de construction avec l'usager. Ils ne sont pas figés et ne sont donc pas complets. - - elsif dossiers_list_facade.liste == 'fige' + - when 'fige' Tous les dossiers présents dans cette liste ont été déclarés %b complets @@ -23,14 +24,14 @@ %b plus modifiables par l'usager. Ils attendent donc leurs dépots officiels qui doit être effectué par l'usager. - - elsif dossiers_list_facade.liste == 'deposes' + - when 'deposes' Tous les dossiers présents dans cette liste ont été %b officiellement déposé par l'usager pour examen. Il faut donc que vous confirmiez par "accusé de réception" la bonne réception de toutes les informations et documents demandés avant examen final. - - elsif dossiers_list_facade.liste == 'a_instruire' + - when 'a_instruire' Tous les dossiers présents dans cette liste sont à instruire. Ceux sont tous les dossiers %b qui ont reçu bonne réception. - - elsif dossiers_list_facade.liste == 'termine' + - when 'termine' Tous les dossiers présents dans cette liste sont considérés comme cloturé car ils ont tous reçu un verdict final qui peut être "Validé", "Refusé" ou "Sans suite". diff --git a/app/views/cgu/index.html.haml b/app/views/cgu/index.html.haml index 7f2116cd0..779d6ff83 100644 --- a/app/views/cgu/index.html.haml +++ b/app/views/cgu/index.html.haml @@ -35,7 +35,7 @@ %br/ Code APE 6202A %br/ - N° TVA : FR 22 424 761 419 + Nº TVA : FR 22 424 761 419 %br/ Siège social : 2 rue Kellermann - 59100 Roubaix - France. %br @@ -61,7 +61,7 @@ Déclaration CNIL %p Le SGMAP a procédé à la déclaration CNIL de TPS. Celle-ci porte le numéro "1986658 v 0" à la date du 30 août 2016. Néanmoins les administrations devront procéder à une déclaration complémentaire auprès de la CNIL si les données du formulaire qu’elles ont produit comportent des données de la nature suivante : %ul - %li N° de sécurité sociale, + %li Nº de sécurité sociale, %li Infractions, condamnations, mesures de sécurité, %li %a{ :href => "https://www.declaration.cnil.fr/declarations/declaration/donneesSensibles_DN.display.action" } Opinions philosophiques, politiques, religieuses, syndicales, vie sexuelle, données de santé, origine raciale. @@ -77,10 +77,10 @@ Traitement des données à caractère personnel %h4 Données personnelles : %p - En application de la loi n°78-17 Informatique et Libertés du 6 janvier 1978, vous disposez d'un droit d'accès, de rectification, de modification et de suppression concernant les données qui vous concernent. Vous pouvez exercer ce droit à travers la rubrique + En application de la loi nº 78-17 Informatique et Libertés du 6 janvier 1978, vous disposez d'un droit d'accès, de rectification, de modification et de suppression concernant les données qui vous concernent. Vous pouvez exercer ce droit à travers la rubrique %a{ :href => "http://www.faire-simple.gouv.fr/contact" } Contact %h4 Données de connexion : - %p Conformément à la loi n°2004-575 du 21 juin 2004 pour la confiance dans l’économie numérique, certaines données de connexion sont conservées par le service aux fins de protection contre les intrusions et de poursuites judiciaires le cas échéant. Ces données sont conservées pendant un an. + %p Conformément à la loi nº 2004-575 du 21 juin 2004 pour la confiance dans l’économie numérique, certaines données de connexion sont conservées par le service aux fins de protection contre les intrusions et de poursuites judiciaires le cas échéant. Ces données sont conservées pendant un an. %br %h3#entreprise_information diff --git a/app/views/layouts/_flash_messages.html.haml b/app/views/layouts/_flash_messages.html.haml index 2ed1b4013..a661dcdbd 100644 --- a/app/views/layouts/_flash_messages.html.haml +++ b/app/views/layouts/_flash_messages.html.haml @@ -4,4 +4,4 @@ = flash.notice - if flash.alert .alert.alert-danger - = flash.alert + = flash.alert.html_safe diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 053d04646..0508e568c 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -6,6 +6,10 @@ = t('dynamics.page_title') %meta{ 'http-equiv' => "X-UA-Compatible", :content => "IE=edge" } + = favicon_link_tag(image_url("favicons/16x16.png"), type: "image/png", sizes: "16x16") + = favicon_link_tag(image_url("favicons/32x32.png"), type: "image/png", sizes: "32x32") + = favicon_link_tag(image_url("favicons/96x96.png"), type: "image/png", sizes: "96x96") + = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true = stylesheet_link_tag 'print', media: 'print', 'data-turbolinks-track' => true = javascript_include_tag 'application', 'data-turbolinks-track' => true diff --git a/app/views/layouts/left_panels/_left_panel_backoffice_dossierscontroller_index.html.haml b/app/views/layouts/left_panels/_left_panel_backoffice_dossierscontroller_index.html.haml index cd378550c..d99573c44 100644 --- a/app/views/layouts/left_panels/_left_panel_backoffice_dossierscontroller_index.html.haml +++ b/app/views/layouts/left_panels/_left_panel_backoffice_dossierscontroller_index.html.haml @@ -39,6 +39,6 @@ - @facade_data_view.dossiers_with_unread_notifications.each do |dossier| = link_to backoffice_dossier_path(dossier.id) do .notification - .dossier-index= "Dossier n°#{dossier.id}" + .dossier-index= "Dossier nº #{dossier.id}" .updated-at-index= dossier.first_unread_notification.created_at.strftime('%d/%m %H:%M') .count= dossier.unreaded_notifications.count diff --git a/app/views/mails/closed_mail.html.haml b/app/views/mails/closed_mail.html.haml index 636817517..ac3153c9a 100644 --- a/app/views/mails/closed_mail.html.haml +++ b/app/views/mails/closed_mail.html.haml @@ -1,7 +1,7 @@ Bonjour %br %br -Votre dossier N°--numero_dossier-- a été accepté. +Votre dossier nº --numero_dossier-- a été accepté. %br %br A tout moment, vous pouvez consulter le contenu de vos dossiers et les éventuels commentaires de l'administration à cette adresse : --lien_dossier-- diff --git a/app/views/mails/initiated_mail.html.haml b/app/views/mails/initiated_mail.html.haml index d1e0ab917..ce3ae6324 100644 --- a/app/views/mails/initiated_mail.html.haml +++ b/app/views/mails/initiated_mail.html.haml @@ -1,7 +1,7 @@ Bonjour %br %br -Votre administration vous confirme la bonne réception de votre dossier n°--numero_dossier--. +Votre administration vous confirme la bonne réception de votre dossier nº --numero_dossier--. %br %br A tout moment, vous pouvez consulter le contenu de vos dossiers et les éventuels commentaires de l'administration à cette adresse : --lien_dossier-- diff --git a/app/views/mails/received_mail.html.haml b/app/views/mails/received_mail.html.haml index bc0b64ffa..113139052 100644 --- a/app/views/mails/received_mail.html.haml +++ b/app/views/mails/received_mail.html.haml @@ -1,7 +1,7 @@ Bonjour %br %br -Votre administration vous confirme la bonne réception de votre dossier n°--numero_dossier--. Celui-ci sera instruit dans le délai légal déclaré par votre interlocuteur. +Votre administration vous confirme la bonne réception de votre dossier nº --numero_dossier--. Celui-ci sera instruit dans le délai légal déclaré par votre interlocuteur. %br %br Bonne journée diff --git a/app/views/mails/refused_mail.html.haml b/app/views/mails/refused_mail.html.haml index d98bacab6..900942f26 100644 --- a/app/views/mails/refused_mail.html.haml +++ b/app/views/mails/refused_mail.html.haml @@ -1,7 +1,7 @@ Bonjour %br %br -Votre dossier N°--numero_dossier-- a été refusé. +Votre dossier nº --numero_dossier-- a été refusé. %br %br Pour en savoir plus sur le motif du refus, vous pouvez consulter le contenu de vos dossiers et les éventuels commentaires de l'administration à cette adresse : --lien_dossier-- diff --git a/app/views/mails/without_continuation_mail.html.haml b/app/views/mails/without_continuation_mail.html.haml index 5277c51a6..03ab071cc 100644 --- a/app/views/mails/without_continuation_mail.html.haml +++ b/app/views/mails/without_continuation_mail.html.haml @@ -1,7 +1,7 @@ Bonjour %br %br -Votre dossier N°--numero_dossier-- a été classé sans suite. +Votre dossier nº --numero_dossier-- a été classé sans suite. %br %br Pour en savoir plus sur les raisons de ce classement sans suite, vous pouvez consulter le contenu de vos dossiers et les éventuels commentaires de l'administration à cette adresse : --lien_dossier-- diff --git a/app/views/stats/index.html.haml b/app/views/stats/index.html.haml index 42d6ea90c..19048dfe1 100644 --- a/app/views/stats/index.html.haml +++ b/app/views/stats/index.html.haml @@ -43,11 +43,11 @@ .stat-card.stat-card-half.big-number-card.pull-left %span.big-number-card-title TOTAL DÉMARCHES DÉMATÉRIALISÉES %span.big-number-card-number - = @procedures_count + = number_with_delimiter(@procedures_count) .stat-card.stat-card-half.big-number-card.pull-left %span.big-number-card-title TOTAL DOSSIERS DÉPOSÉS %span.big-number-card-number - = @dossiers_count + = number_with_delimiter(@dossiers_count) .clearfix diff --git a/app/views/users/description/_pieces_justificatives.html.haml b/app/views/users/description/_pieces_justificatives.html.haml index e3a109ba9..bb6604478 100644 --- a/app/views/users/description/_pieces_justificatives.html.haml +++ b/app/views/users/description/_pieces_justificatives.html.haml @@ -18,24 +18,24 @@ - else %input{ type: 'file', name: 'cerfa_pdf', id: 'cerfa_pdf', accept: PieceJustificative.accept_format, :max_file_size => 6.megabytes } - - dossier.types_de_piece_justificative.order('order_place ASC').each do |type_de_piece_justificative| + - dossier.types_de_piece_justificative.order('order_place ASC').each do |tpj| %tr %th.piece-libelle - = type_de_piece_justificative.libelle + = tpj.mandatory ? tpj.libelle + ' *' : tpj.libelle %td - - unless type_de_piece_justificative.lien_demarche.blank? + - unless tpj.lien_demarche.blank? %em Récupérer le formulaire vierge pour mon dossier : - = link_to "Télécharger", type_de_piece_justificative.lien_demarche, target: :blank + = link_to "Télécharger", tpj.lien_demarche, target: :blank %td - - if type_de_piece_justificative.api_entreprise - %span.text-success{ id: "piece_justificative_#{type_de_piece_justificative.id}" } Nous l'avons récupéré pour vous. + - if tpj.api_entreprise + %span.text-success{ id: "piece_justificative_#{tpj.id}" } Nous l'avons récupéré pour vous. - else - - if dossier.retrieve_last_piece_justificative_by_type(type_de_piece_justificative.id).nil? - = file_field_tag "piece_justificative_#{type_de_piece_justificative.id}", accept: PieceJustificative.accept_format, :max_file_size => 6.megabytes + - if dossier.retrieve_last_piece_justificative_by_type(tpj.id).nil? + = file_field_tag "piece_justificative_#{tpj.id}", accept: PieceJustificative.accept_format, :max_file_size => 6.megabytes - else %span.btn.btn-sm.btn-file.btn-success Modifier - = file_field_tag "piece_justificative_#{type_de_piece_justificative.id}", accept: PieceJustificative.accept_format, :max_file_size => 6.megabytes + = file_field_tag "piece_justificative_#{tpj.id}", accept: PieceJustificative.accept_format, :max_file_size => 6.megabytes diff --git a/app/views/users/description/champs/_render_list_champs.html.haml b/app/views/users/description/champs/_render_list_champs.html.haml index 0d1f91f76..01c395d33 100644 --- a/app/views/users/description/champs/_render_list_champs.html.haml +++ b/app/views/users/description/champs/_render_list_champs.html.haml @@ -11,40 +11,41 @@ - if champ.mandatory? * - - if champ.type_champ == 'textarea' + - case champ.type_champ + - when 'textarea' = render partial: 'users/description/champs/textarea', locals: { champ: champ } - - elsif champ.type_champ == 'checkbox' + - when 'checkbox' = render partial: 'users/description/champs/checkbox', locals: { champ: champ } - - elsif champ.type_champ == 'civilite' + - when 'civilite' = render partial: 'users/description/champs/civilite', locals: { champ: champ } - - elsif champ.type_champ == 'datetime' + - when 'datetime' = render partial: 'users/description/champs/datetime', locals: { champ: champ } - - elsif champ.type_champ == 'yes_no' + - when 'yes_no' = render partial: 'users/description/champs/yes_no', locals: { champ: champ } - - elsif %w(drop_down_list multiple_drop_down_list).include?(champ.type_champ) + - when 'drop_down_list', 'multiple_drop_down_list' = render partial: 'users/description/champs/drop_down_list', locals: { champ: champ } - - elsif champ.type_champ == 'pays' + - when 'pays' = render partial: 'users/description/champs/pays', locals: { champ: champ } - - elsif champ.type_champ == 'regions' + - when 'regions' = render partial: 'users/description/champs/regions', locals: { champ: champ } - - elsif champ.type_champ == 'engagement' + - when 'engagement' = render partial: 'users/description/champs/engagement', locals: { champ: champ } - - elsif champ.type_champ == 'departements' + - when 'departements' = render partial: 'users/description/champs/departements', locals: { champ: champ } - - elsif champ.type_champ == 'dossier_link' + - when 'dossier_link' = render partial: 'users/description/champs/dossier_link', locals: { champ: champ } - - elsif champ.type_champ == 'explication' + - when 'explication' - else %input.form-control{ name: "champs['#{champ.id}']", diff --git a/app/views/users/dossiers/_state_description.html.haml b/app/views/users/dossiers/_state_description.html.haml index 52d13cab2..27674ad2b 100644 --- a/app/views/users/dossiers/_state_description.html.haml +++ b/app/views/users/dossiers/_state_description.html.haml @@ -5,33 +5,34 @@ .col-md-1.col-lg-1.col-sm-1.col-xs-1 .fa.fa-info-circle.text-info{ style: 'font-size: 2em; margin-top: 20%;' } .col-xs-11 - - if dossiers_list_facade.liste == 'brouillon' + - case dossiers_list_facade.liste + - when 'brouillon' Les dossiers présents dans cette liste %b n'ont pas encore été soumis aux services instructeurs. Ils ne sont visibles que par vous. - - elsif dossiers_list_facade.liste == 'nouveaux' + - when 'nouveaux' Les dossiers présents dans cette liste %b n'ont pas encore été ouverts par les services instructeurs. Une notification vous sera envoyée quand votre demande aura été étudiée. - - elsif dossiers_list_facade.liste == 'a_traiter' + - when 'a_traiter' Les dossiers présents dans cette liste sont %b visibles par les services instructeurs. %br Ces dossiers ne sont pas encore figés et peuvent être modifiés à souhait. - - elsif dossiers_list_facade.liste == 'en_attente' + - when 'en_attente' Les dossiers présents dans cette liste sont %b en cours de relecture par les services instructeurs. Il reviendra vers vous si des informations ou documents sont manquants pour le futur examen de votre dossier. - - elsif dossiers_list_facade.liste == 'valides' + - when 'valides' Les dossiers présents dans cette liste ont été %b relus et considérés comme complets pour examen par les services instructeurs. Ceux-ci ne peuvent maintenant plus être modifiés. Il faut que vous procédiez à leur dépôt afin qu'une décision finale soit rendue. - - elsif dossiers_list_facade.liste == 'en_instruction' + - when 'en_instruction' Les dossiers présents dans cette liste sont %b en cours de réception @@ -39,12 +40,12 @@ %b en cours d'examen par les services instructeurs. Une notification vous sera envoyée une fois qu'une décision aura été rendue. - - elsif dossiers_list_facade.liste == 'termine' + - when 'termine' Les dossiers présents dans cette liste sont ceux qui ont été instruits et pour lesquels %b une décision finale a été rendue. Ils peuvent posséder trois états différents : Accepté, Refusé ou Sans Suite. - - elsif dossiers_list_facade.liste == 'invite' + - when 'invite' Les dossiers présents dans cette liste sont ceux %b auxquels vous avez été invités diff --git a/config/deploy.rb b/config/deploy.rb index f03e38682..eae817ea8 100644 --- a/config/deploy.rb +++ b/config/deploy.rb @@ -11,7 +11,7 @@ require 'mina/rbenv' # for rbenv support. (http://rbenv.org) # branch - Branch name to deploy. (needed by mina/git) ENV['to'] ||= "staging" -raise "Bad to=#{+ENV['to']}" unless ["staging", "production", "tps_v2"].include?(ENV['to']) +raise "Bad to=#{+ENV['to']}" unless ["staging", "production"].include?(ENV['to']) raise "missing domain, run with 'rake deploy domain=37.187.154.237'" if ENV['domain'].nil? @@ -24,7 +24,8 @@ set :port, 2200 set :deploy_to, '/var/www/tps_dev' -if ENV["to"] == "staging" +case ENV["to"] +when "staging" if ENV['branch'].nil? set :branch, 'staging' else @@ -33,7 +34,7 @@ if ENV["to"] == "staging" set :deploy_to, '/var/www/tps_dev' set :user, 'tps_dev' # Username in the server to SSH to. appname = 'tps_dev' -elsif ENV["to"] == "production" +when "production" if ENV['branch'].nil? set :branch, 'master' else @@ -42,23 +43,10 @@ elsif ENV["to"] == "production" set :deploy_to, '/var/www/tps' set :user, 'tps' # Username in the server to SSH to. appname = 'tps' -elsif ENV["to"] == "tps_v2" - if ENV['branch'].nil? - set :branch, 'staging_v2' - else - set :branch, ENV['branch'] - end - set :deploy_to, '/var/www/tps_v2' - set :user, 'tps_v2' # Username in the server to SSH to. - appname = 'tps_v2' end set :rails_env, ENV["to"] -if ENV["to"] == "tps_v2" - set :rails_env, "staging" -end - # For system-wide RVM install. # set :rvm_path, '/usr/local/rvm/bin/rvm' diff --git a/config/locales/dynamics/fr.yml b/config/locales/dynamics/fr.yml index 72c3aa0f2..9846ccec1 100644 --- a/config/locales/dynamics/fr.yml +++ b/config/locales/dynamics/fr.yml @@ -23,7 +23,7 @@ fr: dossiers: depositaite: "Dépositaire" - numéro: 'Dossier n°' + numéro: 'Dossier nº ' followers: title: "Personnes suivant l'activité de ce dossier" empty: "Aucune personne ne suit ce dossier" diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 5f8a4ad9e..d67a7166c 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -37,13 +37,53 @@ fr: first: Premier number: - currency: - format: - unit: '€' - delimiter: ' ' - separator: ',' - precision: 2 - format: '%n %u' + currency: + format: + delimiter: " " + format: "%n %u" + precision: 2 + separator: "," + significant: false + strip_insignificant_zeros: false + unit: "€" + format: + delimiter: " " + precision: 3 + separator: "," + significant: false + strip_insignificant_zeros: false + human: + decimal_units: + format: "%n %u" + units: + billion: milliard + million: million + quadrillion: million de milliards + thousand: millier + trillion: billion + unit: '' + format: + delimiter: '' + precision: 3 + significant: true + strip_insignificant_zeros: true + storage_units: + format: "%n %u" + units: + byte: + one: octet + other: octets + gb: Go + kb: ko + mb: Mo + tb: To + percentage: + format: + delimiter: '' + format: "%n%" + precision: + format: + delimiter: '' activerecord: errors: models: @@ -149,6 +189,59 @@ fr: extension_white_list_error: "Le format de fichier de la pièce jointe n'est pas valide." procedure_archived: "Cette démarche en ligne a été fermée, il n'est plus possible de déposer de dossier." + date: + abbr_day_names: + - dim + - lun + - mar + - mer + - jeu + - ven + - sam + abbr_month_names: + - + - jan. + - fév. + - mar. + - avr. + - mai + - juin + - juil. + - août + - sept. + - oct. + - nov. + - déc. + day_names: + - dimanche + - lundi + - mardi + - mercredi + - jeudi + - vendredi + - samedi + formats: + default: "%d/%m/%Y" + short: "%e %b" + long: "%e %B %Y" + month_names: + - + - janvier + - février + - mars + - avril + - mai + - juin + - juillet + - août + - septembre + - octobre + - novembre + - décembre + order: + - :day + - :month + - :year datetime: distance_in_words: about_x_hours: diff --git a/db/migrate/20160901082824_initiated_all_received_mail_for_procedure.rb b/db/migrate/20160901082824_initiated_all_received_mail_for_procedure.rb index 225745646..89e5f03cd 100644 --- a/db/migrate/20160901082824_initiated_all_received_mail_for_procedure.rb +++ b/db/migrate/20160901082824_initiated_all_received_mail_for_procedure.rb @@ -11,11 +11,11 @@ class InitiatedAllReceivedMailForProcedure < ActiveRecord::Migration before_save :default_values def default_values - self.object ||= "[TPS] Accusé de réception pour votre dossier n°--numero_dossier--" + self.object ||= "[TPS] Accusé de réception pour votre dossier nº --numero_dossier--" self.body ||= "Bonjour,

    - Votre administration vous confirme la bonne réception de votre dossier n°--numero_dossier-- complet. Celui-ci sera instruit dans le délais légal déclaré par votre interlocuteur.
    + Votre administration vous confirme la bonne réception de votre dossier nº--numero_dossier-- complet. Celui-ci sera instruit dans le délais légal déclaré par votre interlocuteur.

    En vous souhaitant une bonne journée,
    diff --git a/db/migrate/20170328142700_add_mandatory_column_to_types_de_piece_justificative.rb b/db/migrate/20170328142700_add_mandatory_column_to_types_de_piece_justificative.rb new file mode 100644 index 000000000..46f603b62 --- /dev/null +++ b/db/migrate/20170328142700_add_mandatory_column_to_types_de_piece_justificative.rb @@ -0,0 +1,5 @@ +class AddMandatoryColumnToTypesDePieceJustificative < ActiveRecord::Migration[5.0] + def change + add_column :types_de_piece_justificative, :mandatory, :boolean, default: false + end +end diff --git a/db/schema.rb b/db/schema.rb index 0ff0aa06a..e390453da 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20170313140834) do +ActiveRecord::Schema.define(version: 20170328142700) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -403,6 +403,7 @@ ActiveRecord::Schema.define(version: 20170313140834) do t.integer "procedure_id" t.integer "order_place" t.string "lien_demarche" + t.boolean "mandatory", default: false end create_table "users", force: :cascade do |t| diff --git a/spec/factories/mail_templates.rb b/spec/factories/mail_templates.rb index aac0d3615..2f3a72122 100644 --- a/spec/factories/mail_templates.rb +++ b/spec/factories/mail_templates.rb @@ -13,8 +13,8 @@ FactoryGirl.define do end trait :dossier_received do - object "[TPS] Accusé de réception pour votre dossier n°--numero_dossier--" - body "Votre administration vous confirme la bonne réception de votre dossier n°--numero_dossier--" + object "[TPS] Accusé de réception pour votre dossier nº --numero_dossier--" + body "Votre administration vous confirme la bonne réception de votre dossier nº --numero_dossier--" type 'MailReceived' end end diff --git a/spec/mailers/notification_mailer_spec.rb b/spec/mailers/notification_mailer_spec.rb index 0f9aeba80..4c8f26fc1 100644 --- a/spec/mailers/notification_mailer_spec.rb +++ b/spec/mailers/notification_mailer_spec.rb @@ -19,6 +19,6 @@ RSpec.describe NotificationMailer, type: :mailer do it { expect(subject.body).to match('Un nouveau message est disponible dans votre espace TPS.') } it { expect(subject.body).to include("Pour le consulter, merci de vous rendre sur #{users_dossier_recapitulatif_url(dossier_id: dossier.id)}") } - it { expect(subject.subject).to eq("Nouveau message pour votre dossier TPS N°#{dossier.id}") } + it { expect(subject.subject).to eq("Nouveau message pour votre dossier TPS nº #{dossier.id}") } end end diff --git a/spec/models/preference_list_dossier_spec.rb b/spec/models/preference_list_dossier_spec.rb index 76abc8441..c54163e12 100644 --- a/spec/models/preference_list_dossier_spec.rb +++ b/spec/models/preference_list_dossier_spec.rb @@ -26,7 +26,7 @@ describe PreferenceListDossier do describe 'dossier_id' do subject { super()[:dossier_id] } - it { expect(subject[:libelle]).to eq 'N°' } + it { expect(subject[:libelle]).to eq 'Nº' } it { expect(subject[:table]).to be_nil } it { expect(subject[:attr]).to eq 'id' } it { expect(subject[:attr_decorate]).to eq 'id' } diff --git a/spec/services/champs_service_spec.rb b/spec/services/champs_service_spec.rb index 4e8ce53a1..67f4c04d1 100644 --- a/spec/services/champs_service_spec.rb +++ b/spec/services/champs_service_spec.rb @@ -1,15 +1,15 @@ require 'spec_helper' describe ChampsService do - describe 'save_champs' do - let!(:champ) { Champ.create(value: 'toto', type_de_champ: TypeDeChamp.new) } - let!(:champ_mandatory_empty) { Champ.create(type_de_champ: TypeDeChamp.new(libelle: 'mandatory', mandatory: true)) } - let!(:champ_datetime) do - champ_datetime = TypeDeChamp.new(type_champ: 'datetime') - Champ.create(type_de_champ: champ_datetime) - end - let!(:champs) { [champ, champ_mandatory_empty, champ_datetime] } + let!(:champ) { Champ.create(value: 'toto', type_de_champ: TypeDeChamp.new) } + let!(:champ_mandatory_empty) { Champ.create(type_de_champ: TypeDeChamp.new(libelle: 'mandatory', mandatory: true)) } + let!(:champ_datetime) do + champ_datetime = TypeDeChamp.new(type_champ: 'datetime') + Champ.create(type_de_champ: champ_datetime) + end + let!(:champs) { [champ, champ_mandatory_empty, champ_datetime] } + describe 'save_champs' do before :each do params_hash = { champs: { @@ -19,31 +19,22 @@ describe ChampsService do time_hour: { "'#{champ_datetime.id}'" => '12' }, time_minute: { "'#{champ_datetime.id}'" => '24' } } - @errors = ChampsService.save_champs(champs, params_hash, check_mandatory) + ChampsService.save_champs(champs, params_hash) champs.each(&:reload) end - context 'check_mandatory is true' do - let(:check_mandatory) { true } - it 'saves the changed champ' do - expect(champ.value).to eq('yop') - end - - it 'parses and save the date' do - expect(champ_datetime.value).to eq('d 12:24') - end - - it 'adds error for the missing mandatory champ' do - expect(@errors).to match([{ message: 'Le champ mandatory doit être rempli.' }]) - end + it 'saves the changed champ' do + expect(champ.value).to eq('yop') end - context 'check_mandatory is false' do - let(:check_mandatory) { false } + it 'parses and save the date' do + expect(champ_datetime.value).to eq('d 12:24') + end + end - it 'does not add errors' do - expect(@errors).to match([]) - end + describe 'build_error_message' do + it 'adds error for the missing mandatory champ' do + expect(ChampsService.build_error_messages(champs)).to match(['Le champ mandatory doit être rempli.']) end end end diff --git a/spec/services/pieces_justificatives_service_spec.rb b/spec/services/pieces_justificatives_service_spec.rb new file mode 100644 index 000000000..0e6704515 --- /dev/null +++ b/spec/services/pieces_justificatives_service_spec.rb @@ -0,0 +1,92 @@ +require 'spec_helper' + +describe PiecesJustificativesService do + let(:user) { create(:user) } + let(:safe_file) { true } + + before :each do + allow(ClamavService).to receive(:safe_file?).and_return(safe_file) + end + + let(:hash) { {} } + let!(:tpj_not_mandatory) do + TypeDePieceJustificative.create(libelle: 'not mandatory', mandatory: false) + end + let!(:tpj_mandatory) do + TypeDePieceJustificative.create(libelle: 'justificatif', mandatory: true) + end + let(:procedure) { Procedure.create(types_de_piece_justificative: tpjs) } + let(:dossier) { Dossier.create(procedure: procedure) } + let(:errors) { PiecesJustificativesService.upload!(dossier, user, hash) } + let(:tpjs) { [tpj_not_mandatory] } + + describe 'self.upload!' do + context 'when no params are given' do + it { expect(errors).to eq([]) } + end + + context 'when there is something wrong with file save' do + let(:hash) do + { + "piece_justificative_#{tpj_not_mandatory.id}" => + double(path: '', original_filename: 'filename') + } + end + + it { expect(errors).to match(["le fichier filename (not mandatory) n'a pas pu être sauvegardé"]) } + end + + context 'when a virus is provided' do + let(:safe_file) { false } + let(:hash) do + { + "piece_justificative_#{tpj_not_mandatory.id}" => + double(path: '', original_filename: 'bad_file') + } + end + + it { expect(errors).to match(['bad_file : virus détecté']) } + end + + context 'when a regular file is provided' do + let(:content) { double(path: '', original_filename: 'filename') } + let(:hash) do + { + "piece_justificative_#{tpj_not_mandatory.id}" => + content + } + end + + before :each do + expect(PiecesJustificativesService).to receive(:save_pj) + .with(content, dossier, tpj_not_mandatory, user) + .and_return(nil) + end + + it 'is saved' do + expect(errors).to match([]) + end + end + end + + describe 'missing_pj_error_messages' do + let(:errors) { PiecesJustificativesService.missing_pj_error_messages(dossier) } + let(:tpjs) { [tpj_mandatory] } + + context 'when no params are given' do + it { expect(errors).to match(['La pièce jointe justificatif doit être fournie.']) } + end + + context 'when the piece justificative is provided' do + before :each do + # we are messing around piece_justificative + # because directly doubling carrierwave params seems complicated + + piece_justificative_double = double(type_de_piece_justificative: tpj_mandatory) + expect(dossier).to receive(:pieces_justificatives).and_return([piece_justificative_double]) + end + + it { expect(errors).to match([]) } + end + end +end