extend procedure.all_revision_types_de_champ
for header section Co-authored-by: mfo <mfo@users.noreply.github.com>
This commit is contained in:
parent
94b3655ff7
commit
16b8995191
3 changed files with 52 additions and 7 deletions
|
@ -71,10 +71,11 @@ class Procedure < ApplicationRecord
|
||||||
brouillon? ? draft_revision : published_revision
|
brouillon? ? draft_revision : published_revision
|
||||||
end
|
end
|
||||||
|
|
||||||
def all_revisions_types_de_champ(parent: nil)
|
def all_revisions_types_de_champ(parent: nil, with_header_section: false)
|
||||||
|
types_de_champ_scope = with_header_section ? TypeDeChamp.with_header_section : TypeDeChamp.fillable
|
||||||
if brouillon?
|
if brouillon?
|
||||||
if parent.nil?
|
if parent.nil?
|
||||||
TypeDeChamp.fillable
|
types_de_champ_scope
|
||||||
.joins(:revision_types_de_champ)
|
.joins(:revision_types_de_champ)
|
||||||
.where(revision_types_de_champ: { revision_id: draft_revision_id, parent_id: nil })
|
.where(revision_types_de_champ: { revision_id: draft_revision_id, parent_id: nil })
|
||||||
.order(:private, :position)
|
.order(:private, :position)
|
||||||
|
@ -82,8 +83,8 @@ class Procedure < ApplicationRecord
|
||||||
draft_revision.children_of(parent)
|
draft_revision.children_of(parent)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
cache_key = ['all_revisions_types_de_champ', published_revision, parent].compact
|
cache_key = ['all_revisions_types_de_champ', published_revision, parent, with_header_section].compact
|
||||||
Rails.cache.fetch(cache_key, expires_in: 1.month) { published_revisions_types_de_champ(parent) }
|
Rails.cache.fetch(cache_key, expires_in: 1.month) { published_revisions_types_de_champ(parent:, with_header_section:) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -875,7 +876,7 @@ class Procedure < ApplicationRecord
|
||||||
@stable_ids_used_by_routing_rules ||= groupe_instructeurs.flat_map { _1.routing_rule&.sources }.compact.uniq
|
@stable_ids_used_by_routing_rules ||= groupe_instructeurs.flat_map { _1.routing_rule&.sources }.compact.uniq
|
||||||
end
|
end
|
||||||
|
|
||||||
def published_revisions_types_de_champ(parent = nil)
|
def published_revisions_types_de_champ(parent: nil, with_header_section: false)
|
||||||
# all published revisions
|
# all published revisions
|
||||||
revision_ids = revisions.ids - [draft_revision_id]
|
revision_ids = revisions.ids - [draft_revision_id]
|
||||||
# fetch all parent types de champ
|
# fetch all parent types de champ
|
||||||
|
@ -889,8 +890,8 @@ class Procedure < ApplicationRecord
|
||||||
|
|
||||||
# fetch all type_de_champ.stable_id for all the revisions expect draft
|
# fetch all type_de_champ.stable_id for all the revisions expect draft
|
||||||
# and for each stable_id take the bigger (more recent) type_de_champ.id
|
# and for each stable_id take the bigger (more recent) type_de_champ.id
|
||||||
recent_ids = TypeDeChamp
|
types_de_champ_scope = with_header_section ? TypeDeChamp.with_header_section : TypeDeChamp.fillable
|
||||||
.fillable
|
recent_ids = types_de_champ_scope
|
||||||
.joins(:revision_types_de_champ)
|
.joins(:revision_types_de_champ)
|
||||||
.where(revision_types_de_champ: { revision_id: revision_ids, parent_id: parent_ids })
|
.where(revision_types_de_champ: { revision_id: revision_ids, parent_id: parent_ids })
|
||||||
.group(:stable_id).select('MAX(types_de_champ.id)')
|
.group(:stable_id).select('MAX(types_de_champ.id)')
|
||||||
|
|
|
@ -171,6 +171,7 @@ class TypeDeChamp < ApplicationRecord
|
||||||
scope :not_repetition, -> { where.not(type_champ: type_champs.fetch(:repetition)) }
|
scope :not_repetition, -> { where.not(type_champ: type_champs.fetch(:repetition)) }
|
||||||
scope :not_condition, -> { where(condition: nil) }
|
scope :not_condition, -> { where(condition: nil) }
|
||||||
scope :fillable, -> { where.not(type_champ: [type_champs.fetch(:header_section), type_champs.fetch(:explication)]) }
|
scope :fillable, -> { where.not(type_champ: [type_champs.fetch(:header_section), type_champs.fetch(:explication)]) }
|
||||||
|
scope :with_header_section, -> { where.not(type_champ: TypeDeChamp.type_champs[:explication]) }
|
||||||
|
|
||||||
scope :dubious, -> {
|
scope :dubious, -> {
|
||||||
where("unaccent(types_de_champ.libelle) ~* unaccent(?)", DubiousProcedure.forbidden_regexp)
|
where("unaccent(types_de_champ.libelle) ~* unaccent(?)", DubiousProcedure.forbidden_regexp)
|
||||||
|
|
|
@ -1885,6 +1885,49 @@ describe Procedure do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#all_revisions_types_de_champ' do
|
||||||
|
let(:types_de_champ_public) do
|
||||||
|
[
|
||||||
|
{ type: :text },
|
||||||
|
{ type: :header_section }
|
||||||
|
]
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when procedure brouillon' do
|
||||||
|
let(:procedure) { create(:procedure, types_de_champ_public:) }
|
||||||
|
|
||||||
|
it 'returns one type de champ' do
|
||||||
|
expect(procedure.all_revisions_types_de_champ.size).to eq 1
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns also section type de champ' do
|
||||||
|
expect(procedure.all_revisions_types_de_champ(with_header_section: true).size).to eq 2
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns types de champ on draft revision" do
|
||||||
|
procedure.draft_revision.add_type_de_champ(type_champ: :text, libelle: 'onemorechamp')
|
||||||
|
expect(procedure.reload.all_revisions_types_de_champ.size).to eq 2
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when procedure is published' do
|
||||||
|
let(:procedure) { create(:procedure, :published, types_de_champ_public:) }
|
||||||
|
|
||||||
|
it 'returns one type de champ' do
|
||||||
|
expect(procedure.all_revisions_types_de_champ.size).to eq 1
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns also section type de champ' do
|
||||||
|
expect(procedure.all_revisions_types_de_champ(with_header_section: true).size).to eq 2
|
||||||
|
end
|
||||||
|
|
||||||
|
it "doesn't return types de champ on draft revision" do
|
||||||
|
procedure.draft_revision.add_type_de_champ(type_champ: :text, libelle: 'onemorechamp')
|
||||||
|
expect(procedure.reload.all_revisions_types_de_champ.size).to eq 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def create_dossier_with_pj_of_size(size, procedure)
|
def create_dossier_with_pj_of_size(size, procedure)
|
||||||
|
|
Loading…
Add table
Reference in a new issue