ProcedureOverview: add object to contain overview logic
This commit is contained in:
parent
98a616c115
commit
e7d39ca650
3 changed files with 172 additions and 0 deletions
|
@ -141,4 +141,7 @@ class Procedure < ActiveRecord::Base
|
|||
}
|
||||
end
|
||||
|
||||
def procedure_overview(start_date, notifications_count)
|
||||
ProcedureOverview.new(self, start_date, notifications_count)
|
||||
end
|
||||
end
|
||||
|
|
82
app/models/procedure_overview.rb
Normal file
82
app/models/procedure_overview.rb
Normal file
|
@ -0,0 +1,82 @@
|
|||
class ProcedureOverview
|
||||
include Rails.application.routes.url_helpers
|
||||
attr_accessor :libelle, :notifications_count, :received_dossiers_count, :created_dossiers_count, :processed_dossiers_count, :date
|
||||
|
||||
def initialize(procedure, start_date, notifications_count)
|
||||
@libelle = procedure.libelle
|
||||
@procedure_url = backoffice_dossiers_procedure_path(procedure)
|
||||
@notifications_count = notifications_count
|
||||
|
||||
@received_dossiers_count = procedure.dossiers.where(state: :received).count
|
||||
@created_dossiers_count = procedure.dossiers
|
||||
.where(created_at: start_date..DateTime.now)
|
||||
.where.not(state: :draft)
|
||||
.count
|
||||
@processed_dossiers_count = procedure.dossiers.where(processed_at: start_date..DateTime.now).count
|
||||
end
|
||||
|
||||
def had_some_activities?
|
||||
[received_dossiers_count,
|
||||
created_dossiers_count,
|
||||
processed_dossiers_count,
|
||||
notifications_count].reduce(:+) > 0
|
||||
end
|
||||
|
||||
def to_html
|
||||
[libelle_description,
|
||||
dossiers_en_instruction_description,
|
||||
created_dossier_description,
|
||||
processed_dossier_description,
|
||||
notifications_description].compact.join('<br>')
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def libelle_description
|
||||
"<a href='#{@procedure_url}'><strong>#{libelle}</strong></a>"
|
||||
end
|
||||
|
||||
def dossiers_en_instruction_description
|
||||
case received_dossiers_count
|
||||
when 0
|
||||
nil
|
||||
when 1
|
||||
"1 dossier est en cours d'instruction"
|
||||
else
|
||||
"#{received_dossiers_count} dossiers sont en cours d'instruction"
|
||||
end
|
||||
end
|
||||
|
||||
def created_dossier_description
|
||||
case created_dossiers_count
|
||||
when 0
|
||||
nil
|
||||
when 1
|
||||
'1 nouveau dossier a été déposé'
|
||||
else
|
||||
"#{created_dossiers_count} nouveaux dossiers ont été déposés"
|
||||
end
|
||||
end
|
||||
|
||||
def processed_dossier_description
|
||||
case processed_dossiers_count
|
||||
when 0
|
||||
nil
|
||||
when 1
|
||||
'1 dossier a été instruit'
|
||||
else
|
||||
"#{processed_dossiers_count} dossiers ont été instruits"
|
||||
end
|
||||
end
|
||||
|
||||
def notifications_description
|
||||
case notifications_count
|
||||
when 0
|
||||
nil
|
||||
when 1
|
||||
'1 notification en attente sur les dossiers que vous suivez'
|
||||
else
|
||||
"#{notifications_count} notifications en attente sur les dossiers que vous suivez"
|
||||
end
|
||||
end
|
||||
end
|
87
spec/models/procedure_overview_spec.rb
Normal file
87
spec/models/procedure_overview_spec.rb
Normal file
|
@ -0,0 +1,87 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe ProcedureOverview, type: :model do
|
||||
let(:procedure) { create(:procedure, libelle: 'libelle') }
|
||||
let(:friday) { DateTime.new(2017, 5, 12) } # vendredi 12 mai 2017, de la semaine du 8 mai
|
||||
let(:monday) { DateTime.new(2017, 5, 8) }
|
||||
|
||||
before :each do
|
||||
Timecop.freeze(friday)
|
||||
end
|
||||
|
||||
let(:procedure_overview) { ProcedureOverview.new(procedure, monday, 0) }
|
||||
|
||||
describe 'received_dossiers_count' do
|
||||
let!(:received_dossier) do
|
||||
dossier = create(:dossier, procedure: procedure, state: :received, created_at: monday)
|
||||
end
|
||||
|
||||
it { expect(procedure_overview.received_dossiers_count).to eq(1) }
|
||||
end
|
||||
|
||||
describe 'created_dossiers_count' do
|
||||
let!(:created_dossier_during_the_week) do
|
||||
create(:dossier, procedure: procedure, created_at: monday, state: :received)
|
||||
end
|
||||
|
||||
let!(:created_dossier_during_the_week_but_in_draft) do
|
||||
create(:dossier, procedure: procedure, created_at: monday, state: :draft)
|
||||
end
|
||||
|
||||
let!(:created_dossier_before_the_week) do
|
||||
create(:dossier, procedure: procedure, created_at: (monday - 1.week), state: :received)
|
||||
end
|
||||
|
||||
it { expect(procedure_overview.created_dossiers_count).to eq(1) }
|
||||
end
|
||||
|
||||
describe 'processed_dossiers_count' do
|
||||
let!(:processed_dossier_during_the_week) do
|
||||
create(:dossier, procedure: procedure, created_at: monday, processed_at: monday)
|
||||
end
|
||||
|
||||
let!(:processed_dossier_before_the_week) do
|
||||
create(:dossier, procedure: procedure, created_at: (monday - 1.week), processed_at: (monday - 1.week))
|
||||
end
|
||||
|
||||
it { expect(procedure_overview.processed_dossiers_count).to eq(1) }
|
||||
end
|
||||
|
||||
describe 'to_html' do
|
||||
subject { procedure_overview.to_html }
|
||||
|
||||
context 'when the different count are equal to 0' do
|
||||
it { is_expected.to match(/^<a href='.+'><strong>libelle<\/strong><\/a>$/) }
|
||||
end
|
||||
|
||||
context 'when the different counts are equal to 1' do
|
||||
before :each do
|
||||
procedure_overview.notifications_count = 1
|
||||
procedure_overview.received_dossiers_count = 1
|
||||
procedure_overview.created_dossiers_count = 1
|
||||
procedure_overview.processed_dossiers_count = 1
|
||||
end
|
||||
|
||||
it { is_expected.to match(/^<a href='.+'><strong>libelle<\/strong><\/a>/) }
|
||||
it { is_expected.to include("1 dossier est en cours d'instruction") }
|
||||
it { is_expected.to include('1 nouveau dossier a été déposé') }
|
||||
it { is_expected.to include('1 dossier a été instruit') }
|
||||
it { is_expected.to include('1 notification en attente sur les dossiers que vous suivez') }
|
||||
end
|
||||
|
||||
context 'when the different counts are equal to 2' do
|
||||
before :each do
|
||||
procedure_overview.notifications_count = 2
|
||||
procedure_overview.received_dossiers_count = 3
|
||||
procedure_overview.created_dossiers_count = 4
|
||||
procedure_overview.processed_dossiers_count = 5
|
||||
end
|
||||
|
||||
it { is_expected.to match(/^<a href='.+'><strong>libelle<\/strong><\/a>/) }
|
||||
it { is_expected.to include("3 dossiers sont en cours d'instruction") }
|
||||
it { is_expected.to include('4 nouveaux dossiers ont été déposés') }
|
||||
it { is_expected.to include('5 dossiers ont été instruits') }
|
||||
it { is_expected.to include('2 notifications en attente sur les dossiers que vous suivez') }
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Reference in a new issue