Merge pull request #2926 from tchak/path-availability
Clarify procedure path availability code
This commit is contained in:
commit
9a3daf0b79
13 changed files with 78 additions and 52 deletions
|
@ -64,10 +64,7 @@ function validatePath(path) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function path_type_init() {
|
function path_type_init() {
|
||||||
$(PROCEDURE_PATH_SELECTOR).bind('autocomplete:select', function(
|
$(PROCEDURE_PATH_SELECTOR).on('autocomplete:select', function(event) {
|
||||||
ev,
|
togglePathMessage(true, event.detail['mine']);
|
||||||
suggestion
|
|
||||||
) {
|
|
||||||
togglePathMessage(true, suggestion['mine']);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,8 +40,7 @@ class Admin::ProceduresController < AdminController
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
@path = @procedure.path || @procedure.default_path
|
@path = @procedure.path || @procedure.default_path
|
||||||
@available = @procedure.path_available?(@path)
|
@availability = @procedure.path_availability(@path)
|
||||||
@mine = @procedure.path_mine?(@path)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
|
@ -60,8 +59,7 @@ class Admin::ProceduresController < AdminController
|
||||||
def new
|
def new
|
||||||
@procedure ||= Procedure.new
|
@procedure ||= Procedure.new
|
||||||
@procedure.module_api_carto ||= ModuleAPICarto.new
|
@procedure.module_api_carto ||= ModuleAPICarto.new
|
||||||
@available = true
|
@availability = Procedure::PATH_AVAILABLE
|
||||||
@mine = true
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
|
@ -72,32 +70,35 @@ class Admin::ProceduresController < AdminController
|
||||||
end
|
end
|
||||||
|
|
||||||
@path = @procedure.path
|
@path = @procedure.path
|
||||||
@available = !Procedure.exists?(path: @path)
|
@availability = Procedure.path_availability(current_administrateur, @procedure.path)
|
||||||
@mine = Procedure.path_mine?(current_administrateur, @path)
|
|
||||||
|
|
||||||
if !@procedure.save
|
if !@procedure.save
|
||||||
flash.now.alert = @procedure.errors.full_messages
|
flash.now.alert = @procedure.errors.full_messages
|
||||||
return render 'new'
|
render 'new'
|
||||||
else
|
else
|
||||||
flash.notice = 'Démarche enregistrée.'
|
flash.notice = 'Démarche enregistrée.'
|
||||||
|
redirect_to admin_procedure_types_de_champ_path(procedure_id: @procedure.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
redirect_to admin_procedure_types_de_champ_path(procedure_id: @procedure.id)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@procedure = current_administrateur.procedures.find(params[:id])
|
@procedure = current_administrateur.procedures.find(params[:id])
|
||||||
|
|
||||||
if !@procedure.update(procedure_params)
|
if !@procedure.update(procedure_params)
|
||||||
flash.alert = @procedure.errors.full_messages
|
flash.now.alert = @procedure.errors.full_messages
|
||||||
|
@path = procedure_params[:path]
|
||||||
|
if @path.present?
|
||||||
|
@availability = @procedure.path_availability(@path)
|
||||||
|
end
|
||||||
|
render 'edit'
|
||||||
elsif Flipflop.publish_draft? && @procedure.brouillon?
|
elsif Flipflop.publish_draft? && @procedure.brouillon?
|
||||||
reset_procedure
|
reset_procedure
|
||||||
flash.notice = 'Démarche modifiée. Tous les dossiers de cette démarche ont été supprimés.'
|
flash.notice = 'Démarche modifiée. Tous les dossiers de cette démarche ont été supprimés.'
|
||||||
|
redirect_to edit_admin_procedure_path(id: @procedure.id)
|
||||||
else
|
else
|
||||||
flash.notice = 'Démarche modifiée.'
|
flash.notice = 'Démarche modifiée.'
|
||||||
|
redirect_to edit_admin_procedure_path(id: @procedure.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
redirect_to edit_admin_procedure_path(id: @procedure.id)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def publish
|
def publish
|
||||||
|
@ -225,11 +226,9 @@ class Admin::ProceduresController < AdminController
|
||||||
|
|
||||||
if procedure_id.present?
|
if procedure_id.present?
|
||||||
procedure = current_administrateur.procedures.find(procedure_id)
|
procedure = current_administrateur.procedures.find(procedure_id)
|
||||||
@available = procedure.path_available?(path)
|
@availability = procedure.path_availability(path)
|
||||||
@mine = procedure.path_mine?(path)
|
|
||||||
else
|
else
|
||||||
@available = !Procedure.exists?(path: path)
|
@availability = Procedure.path_availability(current_administrateur, path)
|
||||||
@mine = Procedure.path_mine?(current_administrateur, path)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -306,16 +306,34 @@ class Procedure < ApplicationRecord
|
||||||
mean_time(:en_instruction_at, :processed_at)
|
mean_time(:en_instruction_at, :processed_at)
|
||||||
end
|
end
|
||||||
|
|
||||||
def path_available?(path)
|
PATH_AVAILABLE = :available
|
||||||
!Procedure.where.not(id: id).exists?(path: path)
|
PATH_AVAILABLE_PUBLIEE = :available_publiee
|
||||||
|
PATH_NOT_AVAILABLE = :not_available
|
||||||
|
PATH_NOT_AVAILABLE_BROUILLON = :not_available_brouillon
|
||||||
|
PATH_CAN_PUBLISH = [PATH_AVAILABLE, PATH_AVAILABLE_PUBLIEE]
|
||||||
|
|
||||||
|
def path_availability(path)
|
||||||
|
Procedure.path_availability(administrateur, path, id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def path_mine?(path)
|
def self.path_availability(administrateur, path, exclude_id = nil)
|
||||||
Procedure.path_mine?(administrateur, path)
|
if exclude_id.present?
|
||||||
end
|
procedure = where.not(id: exclude_id).find_by(path: path)
|
||||||
|
else
|
||||||
|
procedure = find_by(path: path)
|
||||||
|
end
|
||||||
|
|
||||||
def self.path_mine?(administrateur, path)
|
if procedure.blank?
|
||||||
where(administrateur: administrateur).exists?(path: path)
|
PATH_AVAILABLE
|
||||||
|
elsif administrateur.owns?(procedure)
|
||||||
|
if procedure.brouillon?
|
||||||
|
PATH_NOT_AVAILABLE_BROUILLON
|
||||||
|
else
|
||||||
|
PATH_AVAILABLE_PUBLIEE
|
||||||
|
end
|
||||||
|
else
|
||||||
|
PATH_NOT_AVAILABLE
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.find_with_path(path)
|
def self.find_with_path(path)
|
||||||
|
@ -335,7 +353,7 @@ class Procedure < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def can_publish?(path)
|
def can_publish?(path)
|
||||||
path_available?(path) || path_mine?(path)
|
path_availability(path).in?(PATH_CAN_PUBLISH)
|
||||||
end
|
end
|
||||||
|
|
||||||
def after_publish(path)
|
def after_publish(path)
|
||||||
|
|
|
@ -19,8 +19,8 @@
|
||||||
= commencer_test_url(path: '')
|
= commencer_test_url(path: '')
|
||||||
= f.text_field :path, value: @path, class: 'form-control', data: { remote: true, debounce: true, url: admin_procedures_available_path, params: { id: @procedure.id }.to_query(:procedure) }
|
= f.text_field :path, value: @path, class: 'form-control', data: { remote: true, debounce: true, url: admin_procedures_available_path, params: { id: @procedure.id }.to_query(:procedure) }
|
||||||
%p.unavailable-path-message.text-warning
|
%p.unavailable-path-message.text-warning
|
||||||
- if !@available
|
- if @availability != Procedure::PATH_AVAILABLE
|
||||||
= render partial: 'unavailable', locals: { mine: @mine }
|
= render partial: 'unavailable', locals: { availability: @availability }
|
||||||
%p.help-block
|
%p.help-block
|
||||||
%i.fa.fa-info-circle
|
%i.fa.fa-info-circle
|
||||||
Afin de faciliter l’accès à la démarche, vous êtes invité à personnaliser l’adresse d'accès public. C'est ce lien qu'il va falloir communiquer aux usagers souhaitant faire la démarche.
|
Afin de faciliter l’accès à la démarche, vous êtes invité à personnaliser l’adresse d'accès public. C'est ce lien qu'il va falloir communiquer aux usagers souhaitant faire la démarche.
|
||||||
|
|
|
@ -41,7 +41,8 @@
|
||||||
%br
|
%br
|
||||||
Vous ne pouvez pas l’utiliser car il appartient à un autre administrateur.
|
Vous ne pouvez pas l’utiliser car il appartient à un autre administrateur.
|
||||||
#path_is_invalid.text-danger.center.message
|
#path_is_invalid.text-danger.center.message
|
||||||
= t('activerecord.errors.models.procedure.attributes.path.format')
|
Ce lien
|
||||||
|
= t('activerecord.errors.models.procedure.attributes.path.invalid')
|
||||||
.modal-footer
|
.modal-footer
|
||||||
= submit_tag procedure_modal_text(@procedure, :submit), class: %w(btn btn btn-success), disabled: :disabled, id: 'publish'
|
= submit_tag procedure_modal_text(@procedure, :submit), class: %w(btn btn btn-success), disabled: :disabled, id: 'publish'
|
||||||
= button_tag "Annuler", class: %w(btn btn btn-default), data: { dismiss: :modal }, id: 'cancel'
|
= button_tag "Annuler", class: %w(btn btn btn-default), data: { dismiss: :modal }, id: 'cancel'
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
- if mine
|
- case availability
|
||||||
|
- when Procedure::PATH_AVAILABLE_PUBLIEE
|
||||||
Ce lien est déjà utilisé par une de vos démarche.
|
Ce lien est déjà utilisé par une de vos démarche.
|
||||||
%br
|
%br
|
||||||
Si vous voulez l’utiliser, l’ancienne démarche sera archivée lors de la publication de la démarche (plus accessible du public).
|
Si vous voulez l’utiliser, l’ancienne démarche sera archivée lors de la publication de la démarche (plus accessible du public).
|
||||||
- else
|
- when Procedure::PATH_NOT_AVAILABLE_BROUILLON
|
||||||
|
Un brouillon de démarche existe déjà avec ce lien.
|
||||||
|
- when Procedure::PATH_NOT_AVAILABLE
|
||||||
Ce lien est déjà utilisé par une démarche.
|
Ce lien est déjà utilisé par une démarche.
|
||||||
%br
|
%br
|
||||||
Vous ne pouvez pas l’utiliser car il appartient à un autre administrateur.
|
Vous ne pouvez pas l’utiliser car il appartient à un autre administrateur.
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
<% if @available %>
|
<% if @availability == Procedure::PATH_AVAILABLE %>
|
||||||
<%= remove_element('.unavailable-path-message', inner: true) %>
|
<%= remove_element('.unavailable-path-message', inner: true) %>
|
||||||
|
<% else %>
|
||||||
|
<%= render_to_element('.unavailable-path-message', partial: 'unavailable', locals: { availability: @availability }) %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<% if @availability.in?(Procedure::PATH_CAN_PUBLISH) %>
|
||||||
<%= enable_element('button[type=submit]') %>
|
<%= enable_element('button[type=submit]') %>
|
||||||
<% else %>
|
<% else %>
|
||||||
<%= render_to_element('.unavailable-path-message', partial: 'unavailable', locals: { mine: @mine }) %>
|
<%= disable_element('button[type=submit]') %>
|
||||||
<% if @mine %>
|
|
||||||
<%= enable_element('button[type=submit]') %>
|
|
||||||
<% else %>
|
|
||||||
<%= disable_element('button[type=submit]') %>
|
|
||||||
<% end %>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
= form_for @procedure, url: url_for({ controller: 'admin/procedures', action: :update, id: @procedure.id }), multipart: true do |f|
|
= form_for @procedure, url: url_for({ controller: 'admin/procedures', action: :update, id: @procedure.id }), multipart: true do |f|
|
||||||
= render partial: 'informations', locals: { f: f }
|
= render partial: 'informations', locals: { f: f }
|
||||||
.text-right
|
.text-right
|
||||||
- if !Flipflop.publish_draft? || (@available || @mine)
|
- if !Flipflop.publish_draft? || @availability.in?(Procedure::PATH_CAN_PUBLISH)
|
||||||
= f.button 'Enregistrer', class: 'btn btn-success'
|
= f.button 'Enregistrer', class: 'btn btn-success'
|
||||||
- else
|
- else
|
||||||
= f.button 'Enregistrer', class: 'btn btn-success', disabled: true
|
= f.button 'Enregistrer', class: 'btn btn-success', disabled: true
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
= form_for @procedure, url: { controller: 'admin/procedures', action: :create }, multipart: true do |f|
|
= form_for @procedure, url: { controller: 'admin/procedures', action: :create }, multipart: true do |f|
|
||||||
= render partial: 'informations', locals: { f: f }
|
= render partial: 'informations', locals: { f: f }
|
||||||
.text-right
|
.text-right
|
||||||
- if !Flipflop.publish_draft? || (@available || @mine)
|
- if !Flipflop.publish_draft? || @availability.in?(Procedure::PATH_CAN_PUBLISH)
|
||||||
= f.button 'Valider', class: 'btn btn-info', id: 'save-procedure'
|
= f.button 'Valider', class: 'btn btn-info', id: 'save-procedure'
|
||||||
- else
|
- else
|
||||||
= f.button 'Valider', class: 'btn btn-info', id: 'save-procedure', disabled: true
|
= f.button 'Valider', class: 'btn btn-info', id: 'save-procedure', disabled: true
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
= render partial: 'layouts/left_panels/left_panel_admin_procedurescontroller_navbar', locals: { active: 'Description' }
|
|
@ -156,6 +156,10 @@ fr:
|
||||||
taken: déjà utilisé
|
taken: déjà utilisé
|
||||||
password:
|
password:
|
||||||
too_short: 'est trop court'
|
too_short: 'est trop court'
|
||||||
|
procedure:
|
||||||
|
attributes:
|
||||||
|
path:
|
||||||
|
invalid: n'est pas valide. Il doit comporter au moins 3 caractères, au plus 50 caractères et seuls les caractères a-z, 0-9, '_' et '-' sont autorisés.
|
||||||
|
|
||||||
errors:
|
errors:
|
||||||
messages:
|
messages:
|
||||||
|
|
|
@ -2,13 +2,7 @@ fr:
|
||||||
activerecord:
|
activerecord:
|
||||||
attributes:
|
attributes:
|
||||||
procedure:
|
procedure:
|
||||||
path: Lien
|
path: Lien public
|
||||||
organisation: Organisme
|
organisation: Organisme
|
||||||
duree_conservation_dossiers_dans_ds: Durée de conservation des dossiers sur demarches-simplifiees.fr
|
duree_conservation_dossiers_dans_ds: Durée de conservation des dossiers sur demarches-simplifiees.fr
|
||||||
duree_conservation_dossiers_hors_ds: Durée de conservation des dossiers hors demarches-simplifiees.fr
|
duree_conservation_dossiers_hors_ds: Durée de conservation des dossiers hors demarches-simplifiees.fr
|
||||||
errors:
|
|
||||||
models:
|
|
||||||
procedure:
|
|
||||||
attributes:
|
|
||||||
path:
|
|
||||||
format: Ce lien n'est pas valide. Il doit comporter au moins 3 caractères, au plus 50 caractères et seuls les caractères a-z, 0-9, '_' et '-' sont autorisés.
|
|
||||||
|
|
|
@ -735,10 +735,19 @@ describe Admin::ProceduresController, type: :controller do
|
||||||
it { expect(response.body).to include("innerHTML = ''") }
|
it { expect(response.body).to include("innerHTML = ''") }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'my path' do
|
context 'my path (brouillon)' do
|
||||||
let(:procedure_owned) { create(:procedure, :with_path, administrateur: admin) }
|
let(:procedure_owned) { create(:procedure, :with_path, administrateur: admin) }
|
||||||
let(:path) { procedure_owned.path }
|
let(:path) { procedure_owned.path }
|
||||||
|
|
||||||
|
it {
|
||||||
|
expect(response.body).to include('Un brouillon de démarche existe déjà avec ce lien.')
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'my path' do
|
||||||
|
let(:procedure_owned) { create(:procedure, :published, administrateur: admin) }
|
||||||
|
let(:path) { procedure_owned.path }
|
||||||
|
|
||||||
it {
|
it {
|
||||||
expect(response.body).to include('Ce lien est déjà utilisé par une de vos démarche.')
|
expect(response.body).to include('Ce lien est déjà utilisé par une de vos démarche.')
|
||||||
expect(response.body).to include('Si vous voulez l’utiliser, l’ancienne démarche sera archivée')
|
expect(response.body).to include('Si vous voulez l’utiliser, l’ancienne démarche sera archivée')
|
||||||
|
|
Loading…
Add table
Reference in a new issue