- tranferred controllers from admin to mew_administrateur
- removed admin/attestation_templates views - changed routes accordingly
This commit is contained in:
parent
42c6900139
commit
5df3838173
8 changed files with 80 additions and 425 deletions
|
@ -1,101 +0,0 @@
|
|||
class Admin::AttestationTemplatesController < AdminController
|
||||
before_action :retrieve_procedure
|
||||
|
||||
def edit
|
||||
@attestation_template = @procedure.attestation_template || AttestationTemplate.new(procedure: @procedure)
|
||||
end
|
||||
|
||||
def update
|
||||
attestation_template = @procedure.attestation_template
|
||||
|
||||
if attestation_template.update(activated_attestation_params)
|
||||
flash.notice = "L'attestation a bien été modifiée"
|
||||
else
|
||||
flash.alert = attestation_template.errors.full_messages.join('<br>')
|
||||
end
|
||||
|
||||
redirect_to edit_admin_procedure_attestation_template_path(@procedure)
|
||||
end
|
||||
|
||||
def create
|
||||
attestation_template = AttestationTemplate.new(activated_attestation_params.merge(procedure_id: @procedure.id))
|
||||
|
||||
if attestation_template.save
|
||||
flash.notice = "L'attestation a bien été sauvegardée"
|
||||
else
|
||||
flash.alert = attestation_template.errors.full_messages.join('<br>')
|
||||
end
|
||||
|
||||
redirect_to edit_admin_procedure_attestation_template_path(@procedure)
|
||||
end
|
||||
|
||||
def disactivate
|
||||
attestation_template = @procedure.attestation_template
|
||||
attestation_template.activated = false
|
||||
attestation_template.save
|
||||
|
||||
flash.notice = "L'attestation a bien été désactivée"
|
||||
|
||||
redirect_to edit_admin_procedure_attestation_template_path(@procedure)
|
||||
end
|
||||
|
||||
def preview
|
||||
attestation = (@procedure.attestation_template || AttestationTemplate.new)
|
||||
attestation.assign_attributes(activated_attestation_params)
|
||||
|
||||
if attestation.valid?
|
||||
@attestation = attestation.render_attributes_for(activated_attestation_params)
|
||||
|
||||
render 'admin/attestation_templates/show', formats: [:pdf]
|
||||
else
|
||||
flash.alert = attestation.errors.full_messages.join('<br>')
|
||||
end
|
||||
end
|
||||
|
||||
def delete_logo
|
||||
@procedure.attestation_template.logo.purge_later
|
||||
|
||||
flash.notice = 'le logo a bien été supprimée'
|
||||
redirect_to edit_admin_procedure_attestation_template_path(@procedure)
|
||||
end
|
||||
|
||||
def delete_signature
|
||||
@procedure.attestation_template.signature.purge_later
|
||||
|
||||
flash.notice = 'la signature a bien été supprimée'
|
||||
redirect_to edit_admin_procedure_attestation_template_path(@procedure)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def activated_attestation_params
|
||||
# cache result to avoid multiple uninterlaced computations
|
||||
if @activated_attestation_params.nil?
|
||||
@activated_attestation_params = params.require(:attestation_template)
|
||||
.permit(:title, :body, :footer)
|
||||
.merge(activated: true)
|
||||
|
||||
logo_file = params['attestation_template'].delete('logo')
|
||||
signature_file = params['attestation_template'].delete('signature')
|
||||
|
||||
if logo_file.present?
|
||||
@activated_attestation_params[:logo] = uninterlaced_png(logo_file)
|
||||
end
|
||||
if signature_file.present?
|
||||
@activated_attestation_params[:signature] = uninterlaced_png(signature_file)
|
||||
end
|
||||
end
|
||||
|
||||
@activated_attestation_params
|
||||
end
|
||||
|
||||
def uninterlaced_png(uploaded_file)
|
||||
if uploaded_file&.content_type == 'image/png'
|
||||
chunky_img = ChunkyPNG::Image.from_io(uploaded_file)
|
||||
chunky_img.save(uploaded_file.tempfile.to_path, interlace: false)
|
||||
uploaded_file.tempfile.reopen(uploaded_file.tempfile.to_path, 'rb')
|
||||
end
|
||||
|
||||
uploaded_file
|
||||
end
|
||||
end
|
|
@ -28,7 +28,7 @@ module Instructeurs
|
|||
def apercu_attestation
|
||||
@attestation = dossier.procedure.attestation_template.render_attributes_for(dossier: dossier)
|
||||
|
||||
render 'admin/attestation_templates/show', formats: [:pdf]
|
||||
render 'new_administrateur/attestation_templates/show', formats: [:pdf]
|
||||
end
|
||||
|
||||
def bilans_bdf
|
||||
|
|
|
@ -0,0 +1,70 @@
|
|||
module NewAdministrateur
|
||||
class AttestationTemplatesController < AdministrateurController
|
||||
before_action :retrieve_procedure
|
||||
|
||||
def edit
|
||||
@attestation_template = @procedure.attestation_template || AttestationTemplate.new(procedure: @procedure)
|
||||
end
|
||||
|
||||
def update
|
||||
attestation_template = @procedure.attestation_template
|
||||
if attestation_template.update(activated_attestation_params)
|
||||
flash.notice = "L'attestation a bien été modifiée"
|
||||
else
|
||||
flash.alert = attestation_template.errors.full_messages.join('<br>')
|
||||
end
|
||||
|
||||
redirect_to edit_admin_procedure_attestation_template_path(@procedure)
|
||||
end
|
||||
|
||||
def create
|
||||
attestation_template = AttestationTemplate.new(activated_attestation_params.merge(procedure_id: @procedure.id))
|
||||
|
||||
if attestation_template.save
|
||||
flash.notice = "L'attestation a bien été sauvegardée"
|
||||
else
|
||||
flash.alert = attestation_template.errors.full_messages.join('<br>')
|
||||
end
|
||||
|
||||
redirect_to edit_admin_procedure_attestation_template_path(@procedure)
|
||||
end
|
||||
|
||||
def preview
|
||||
attestation = @procedure.attestation_template || AttestationTemplate.new
|
||||
@attestation = attestation.render_attributes_for({})
|
||||
|
||||
render 'new_administrateur/attestation_templates/show', formats: [:pdf]
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def activated_attestation_params
|
||||
# cache result to avoid multiple uninterlaced computations
|
||||
if @activated_attestation_params.nil?
|
||||
@activated_attestation_params = params.require(:attestation_template)
|
||||
.permit(:title, :body, :footer, :activated, :logo, :signature)
|
||||
|
||||
logo_file = params['attestation_template'].delete('logo')
|
||||
signature_file = params['attestation_template'].delete('signature')
|
||||
|
||||
if logo_file.present?
|
||||
@activated_attestation_params[:logo] = uninterlaced_png(logo_file)
|
||||
end
|
||||
if signature_file.present?
|
||||
@activated_attestation_params[:signature] = uninterlaced_png(signature_file)
|
||||
end
|
||||
end
|
||||
|
||||
@activated_attestation_params
|
||||
end
|
||||
|
||||
def uninterlaced_png(uploaded_file)
|
||||
if uploaded_file&.content_type == 'image/png'
|
||||
chunky_img = ChunkyPNG::Image.from_io(uploaded_file)
|
||||
chunky_img.save(uploaded_file.tempfile.to_path, interlace: false)
|
||||
uploaded_file.tempfile.reopen(uploaded_file.tempfile.to_path, 'rb')
|
||||
end
|
||||
uploaded_file
|
||||
end
|
||||
end
|
||||
end
|
|
@ -86,8 +86,8 @@ class AttestationTemplate < ApplicationRecord
|
|||
|
||||
{
|
||||
created_at: Time.zone.now,
|
||||
title: dossier ? replace_tags(title, dossier) : params.fetch(:title, ''),
|
||||
body: dossier ? replace_tags(body, dossier) : params.fetch(:body, ''),
|
||||
title: dossier ? replace_tags(title, dossier) : params.fetch(:title, title),
|
||||
body: dossier ? replace_tags(body, dossier) : params.fetch(:body, body),
|
||||
footer: params.fetch(:footer, footer),
|
||||
logo: params.fetch(:logo, logo.attached? ? logo : nil),
|
||||
signature: params.fetch(:signature, signature.attached? ? signature : nil)
|
||||
|
@ -110,7 +110,7 @@ class AttestationTemplate < ApplicationRecord
|
|||
def build_pdf(dossier)
|
||||
attestation = render_attributes_for(dossier: dossier)
|
||||
action_view = ActionView::Base.new(ActionController::Base.view_paths, attestation: attestation)
|
||||
attestation_view = action_view.render(file: 'admin/attestation_templates/show.pdf.prawn')
|
||||
attestation_view = action_view.render(file: 'new_administrateur/attestation_templates/show', formats: [:pdf])
|
||||
|
||||
StringIO.new(attestation_view)
|
||||
end
|
||||
|
|
|
@ -1,90 +0,0 @@
|
|||
= render partial: 'admin/closed_mail_template_attestation_inconsistency_alert'
|
||||
#attestation-template-edit.row.white-back
|
||||
= form_for @attestation_template, url: admin_procedure_attestation_template_path do |f|
|
||||
.row
|
||||
.col-md-10
|
||||
%h1
|
||||
Attestation
|
||||
- if @attestation_template.activated?
|
||||
%small.text-success Activée
|
||||
- else
|
||||
%small Désactivée
|
||||
|
||||
%p.notice
|
||||
L’attestation, si elle est activée, est émise au moment où un dossier est accepté.
|
||||
%br
|
||||
L’email d’accusé d’acceptation envoyé à l’usager comporte alors un lien vers l’attestation ;
|
||||
celle-ci est également disponible au téléchargement depuis l’espace personnel de l’usager.
|
||||
|
||||
.image-upload
|
||||
- if @attestation_template.logo.attached?
|
||||
= image_tag @attestation_template.logo_url, class: 'thumbnail'
|
||||
.form-group
|
||||
= f.label :logo, "Logo de l'attestation"
|
||||
- if @attestation_template.logo.attached?
|
||||
= link_to 'Supprimer le logo', admin_procedure_attestation_template_logo_path(@procedure), method: :delete
|
||||
= f.file_field :logo, accept: 'image/png,image/jpg,image/jpeg'
|
||||
%p.help-block
|
||||
Fichier accepté : JPG / JPEG / PNG
|
||||
%br
|
||||
Dimensions conseillées : au minimum 500 px de largeur ou de hauteur, poids maximum : 0,5 Mo.
|
||||
|
||||
.form-group
|
||||
= f.label :title, 'Titre'
|
||||
= f.text_field :title, class: 'form-control'
|
||||
|
||||
.form-group
|
||||
= f.label :body, 'Corps du document'
|
||||
~ f.text_area :body, class: 'form-control', rows: 10
|
||||
|
||||
.row
|
||||
.col-md-12.balises
|
||||
%table.table.table-striped
|
||||
%tr
|
||||
%th.col-md-3
|
||||
Balise
|
||||
%th
|
||||
Description
|
||||
- @attestation_template.tags.each do |tag|
|
||||
%tr
|
||||
%td
|
||||
%code{ style: "white-space: pre-wrap;" }
|
||||
= "--#{tag[:libelle]}--"
|
||||
%td
|
||||
= tag[:description]
|
||||
|
||||
.image-upload
|
||||
- if @attestation_template.signature.attached?
|
||||
= image_tag @attestation_template.signature_url, class: 'thumbnail'
|
||||
.form-group
|
||||
= f.label :signature, "Tampon de l'attestation"
|
||||
- if @attestation_template.signature.attached?
|
||||
= link_to 'Supprimer le tampon', admin_procedure_attestation_template_signature_path(@procedure), method: :delete
|
||||
= f.file_field :signature, accept: 'image/png, image/jpg, image/jpeg'
|
||||
%p.help-block
|
||||
Fichier accepté : JPG / JPEG / PNG
|
||||
%br
|
||||
Dimensions conseillées : au minimum 500 px de largeur ou de hauteur, poids maximum : 0,5 Mo.
|
||||
|
||||
.form-group
|
||||
= f.label :footer, 'Pied de page'
|
||||
= f.text_field :footer, class: 'form-control', maxlength: 190
|
||||
|
||||
- if @attestation_template.activated && @procedure.locked?
|
||||
.row
|
||||
.col-md-12
|
||||
.pull-right
|
||||
%p.help-block L’attestation ne peut plus être désactivée car la démarche a déjà été publiée.
|
||||
|
||||
%button.btn.btn-primary{ formaction: admin_procedure_attestation_template_preview_path, formtarget: '_blank' } Prévisualiser
|
||||
|
||||
.pull-right
|
||||
- if @attestation_template.activated && !@procedure.locked?
|
||||
%button.btn.btn-warning{ formaction: admin_procedure_attestation_template_disactivate_path } désactiver l'attestation
|
||||
|
||||
- if @attestation_template.new_record? || !@attestation_template.activated
|
||||
%button.btn.btn-success Activer l'attestation
|
||||
- else
|
||||
- save_data = @procedure.locked? ? { confirm: "Attention: les modifications n'affecteront pas les attestations déjà délivrées." } : nil
|
||||
%button.btn.btn-success{ data: save_data } Enregistrer
|
||||
|
|
@ -196,17 +196,6 @@ Rails.application.routes.draw do
|
|||
put 'publish' => 'procedures#publish', as: :publish
|
||||
post 'transfer' => 'procedures#transfer', as: :transfer
|
||||
put 'clone' => 'procedures#clone', as: :clone
|
||||
|
||||
resource :attestation_template, only: [:edit, :update, :create]
|
||||
|
||||
post 'attestation_template/disactivate' => 'attestation_templates#disactivate'
|
||||
patch 'attestation_template/disactivate' => 'attestation_templates#disactivate'
|
||||
|
||||
post 'attestation_template/preview' => 'attestation_templates#preview'
|
||||
patch 'attestation_template/preview' => 'attestation_templates#preview'
|
||||
|
||||
delete 'attestation_template/logo' => 'attestation_templates#delete_logo'
|
||||
delete 'attestation_template/signature' => 'attestation_templates#delete_signature'
|
||||
end
|
||||
|
||||
namespace :assigns do
|
||||
|
@ -408,6 +397,12 @@ Rails.application.routes.draw do
|
|||
resources :mail_templates, only: [] do
|
||||
get 'preview', on: :member
|
||||
end
|
||||
|
||||
resource :attestation_template, only: [:edit, :update, :create] do
|
||||
get 'preview', on: :member
|
||||
end
|
||||
# ADDED TO ACCESS IT FROM THE IFRAME
|
||||
get 'attestation_template/preview' => 'attestation_templates#preview'
|
||||
end
|
||||
|
||||
resources :services, except: [:show] do
|
||||
|
|
|
@ -1,219 +0,0 @@
|
|||
include ActionDispatch::TestProcess
|
||||
|
||||
describe Admin::AttestationTemplatesController, type: :controller do
|
||||
let!(:attestation_template) { create(:attestation_template) }
|
||||
let(:admin) { create(:administrateur) }
|
||||
let!(:procedure) { create :procedure, administrateur: admin, attestation_template: attestation_template }
|
||||
let(:logo) { fixture_file_upload('spec/fixtures/files/white.png', 'image/png') }
|
||||
let(:logo2) { fixture_file_upload('spec/fixtures/files/white.png', 'image/png') }
|
||||
let(:signature) { fixture_file_upload('spec/fixtures/files/black.png', 'image/png') }
|
||||
let(:signature2) { fixture_file_upload('spec/fixtures/files/black.png', 'image/png') }
|
||||
let(:interlaced_logo) { fixture_file_upload('spec/fixtures/files/interlaced-black.png', 'image/png') }
|
||||
let(:uninterlaced_logo) { fixture_file_upload('spec/fixtures/files/uninterlaced-black.png', 'image/png') }
|
||||
let(:invalid_logo) { fixture_file_upload('spec/fixtures/files/invalid_file_format.json', 'application/json') }
|
||||
|
||||
before do
|
||||
sign_in(admin.user)
|
||||
Timecop.freeze(Time.zone.now)
|
||||
end
|
||||
|
||||
after { Timecop.return }
|
||||
|
||||
shared_examples 'rendering a PDF successfully' do
|
||||
render_views
|
||||
it 'renders a PDF' do
|
||||
expect(subject.status).to eq(200)
|
||||
expect(subject.content_type).to eq('application/pdf')
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST #preview' do
|
||||
let(:upload_params) { { title: 't', body: 'b', footer: 'f' } }
|
||||
|
||||
before do
|
||||
post :preview,
|
||||
params: {
|
||||
procedure_id: procedure.id,
|
||||
attestation_template: upload_params
|
||||
}
|
||||
procedure.reload
|
||||
end
|
||||
|
||||
context 'with an interlaced png' do
|
||||
let(:upload_params) { { logo: interlaced_logo } }
|
||||
|
||||
it 'displays the logo' do
|
||||
expect(assigns(:attestation)[:logo].read).to eq(uninterlaced_logo.read)
|
||||
end
|
||||
|
||||
it 'doesn’t save the logo permanently yet' do
|
||||
expect(procedure.attestation_template.logo.attached?).to be(false)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with an invalid logo' do
|
||||
let(:upload_params) { { logo: invalid_logo } }
|
||||
it { expect(procedure.attestation_template.logo.attached?).to be false }
|
||||
it { expect(flash.alert).to be_present }
|
||||
end
|
||||
|
||||
context 'if an attestation template does not exist on the procedure' do
|
||||
let(:attestation_template) { nil }
|
||||
|
||||
context 'with images' do
|
||||
let(:upload_params) { { title: 't', body: 'b', footer: 'f', logo: interlaced_logo } }
|
||||
|
||||
it { expect(assigns(:attestation)).to include({ title: 't', body: 'b', footer: 'f' }) }
|
||||
it { expect(assigns(:attestation)[:logo]).to be_present }
|
||||
it_behaves_like 'rendering a PDF successfully'
|
||||
end
|
||||
|
||||
context 'without images' do
|
||||
let(:upload_params) { { title: 't', body: 'b', footer: 'f' } }
|
||||
|
||||
it { expect(assigns(:attestation)).to include(upload_params) }
|
||||
it_behaves_like 'rendering a PDF successfully'
|
||||
end
|
||||
end
|
||||
|
||||
context 'if an attestation template exists on the procedure' do
|
||||
after { procedure.attestation_template.destroy }
|
||||
|
||||
context 'with images' do
|
||||
let!(:attestation_template) do
|
||||
create(:attestation_template, logo: logo, signature: signature)
|
||||
end
|
||||
|
||||
it { expect(assigns(:attestation)).to include(upload_params) }
|
||||
it { expect(assigns(:attestation)[:created_at]).to eq(Time.zone.now) }
|
||||
it { expect(assigns(:attestation)[:logo].download).to eq(logo2.read) }
|
||||
it { expect(assigns(:attestation)[:signature].download).to eq(signature2.read) }
|
||||
it_behaves_like 'rendering a PDF successfully'
|
||||
end
|
||||
|
||||
context 'without images' do
|
||||
it { expect(assigns(:attestation)).to include(upload_params) }
|
||||
it { expect(assigns(:attestation)[:created_at]).to eq(Time.zone.now) }
|
||||
it { expect(assigns(:attestation)[:logo]).to eq(nil) }
|
||||
it { expect(assigns(:attestation)[:signature]).to eq(nil) }
|
||||
it_behaves_like 'rendering a PDF successfully'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'GET #edit' do
|
||||
before { get :edit, params: { procedure_id: procedure.id } }
|
||||
|
||||
context 'if an attestation template exists on the procedure' do
|
||||
it { expect(subject.status).to eq(200) }
|
||||
it { expect(assigns(:attestation_template)).to eq(attestation_template) }
|
||||
end
|
||||
|
||||
context 'if an attestation template does not exist on the procedure' do
|
||||
let(:attestation_template) { nil }
|
||||
it { expect(subject.status).to eq(200) }
|
||||
it { expect(assigns(:attestation_template).id).to be_nil }
|
||||
it { expect(assigns(:attestation_template)).to be_an_instance_of(AttestationTemplate) }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST #create' do
|
||||
let(:attestation_template) { nil }
|
||||
let(:attestation_params) { { title: 't', body: 'b', footer: 'f' } }
|
||||
|
||||
context 'nominal' do
|
||||
before do
|
||||
post :create,
|
||||
params: {
|
||||
procedure_id: procedure.id,
|
||||
attestation_template: attestation_params.merge(logo: logo, signature: signature)
|
||||
}
|
||||
procedure.reload
|
||||
end
|
||||
|
||||
it { expect(procedure.attestation_template).to have_attributes(attestation_params) }
|
||||
it { expect(procedure.attestation_template.activated).to be true }
|
||||
it { expect(procedure.attestation_template.logo.download).to eq(logo2.read) }
|
||||
it { expect(procedure.attestation_template.signature.download).to eq(signature2.read) }
|
||||
it { expect(response).to redirect_to edit_admin_procedure_attestation_template_path(procedure) }
|
||||
it { expect(flash.notice).to eq("L'attestation a bien été sauvegardée") }
|
||||
|
||||
after { procedure.attestation_template.destroy }
|
||||
end
|
||||
|
||||
context 'when something wrong happens in the attestation template creation' do
|
||||
before do
|
||||
expect_any_instance_of(AttestationTemplate).to receive(:save)
|
||||
.and_return(false)
|
||||
expect_any_instance_of(AttestationTemplate).to receive(:errors)
|
||||
.and_return(double(full_messages: ['nop']))
|
||||
|
||||
post :create,
|
||||
params: {
|
||||
procedure_id: procedure.id,
|
||||
attestation_template: attestation_params
|
||||
}
|
||||
procedure.reload
|
||||
end
|
||||
|
||||
it { expect(response).to redirect_to edit_admin_procedure_attestation_template_path(procedure) }
|
||||
it { expect(flash.alert).to eq('nop') }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'PATCH #update' do
|
||||
let(:attestation_params) { { title: 't', body: 'b', footer: 'f' } }
|
||||
let(:attestation_params_with_images) { attestation_params.merge(logo: logo, signature: signature) }
|
||||
|
||||
context 'nominal' do
|
||||
before do
|
||||
patch :update,
|
||||
params: {
|
||||
procedure_id: procedure.id,
|
||||
attestation_template: attestation_params_with_images
|
||||
}
|
||||
procedure.reload
|
||||
end
|
||||
|
||||
it { expect(procedure.attestation_template).to have_attributes(attestation_params) }
|
||||
it { expect(procedure.attestation_template.logo.download).to eq(logo2.read) }
|
||||
it { expect(procedure.attestation_template.signature.download).to eq(signature2.read) }
|
||||
it { expect(response).to redirect_to edit_admin_procedure_attestation_template_path(procedure) }
|
||||
it { expect(flash.notice).to eq("L'attestation a bien été modifiée") }
|
||||
|
||||
after { procedure.attestation_template.destroy }
|
||||
end
|
||||
|
||||
context 'when something wrong happens in the attestation template creation' do
|
||||
before do
|
||||
expect_any_instance_of(AttestationTemplate).to receive(:update).and_return(false)
|
||||
expect_any_instance_of(AttestationTemplate).to receive(:errors)
|
||||
.and_return(double(full_messages: ['nop']))
|
||||
|
||||
patch :update,
|
||||
params: {
|
||||
procedure_id: procedure.id,
|
||||
attestation_template: attestation_params_with_images
|
||||
}
|
||||
procedure.reload
|
||||
end
|
||||
|
||||
it { expect(response).to redirect_to edit_admin_procedure_attestation_template_path(procedure) }
|
||||
it { expect(flash.alert).to eq('nop') }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'post #disactivate' do
|
||||
context 'when the attestation_template is activated' do
|
||||
let(:attestation_template) { create(:attestation_template, activated: true) }
|
||||
|
||||
before do
|
||||
post :disactivate, params: { procedure_id: procedure.id }
|
||||
attestation_template.reload
|
||||
end
|
||||
|
||||
it { expect(attestation_template.activated).to be false }
|
||||
it { expect(flash.notice).to eq("L'attestation a bien été désactivée") }
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue