commit
7a597a802c
2 changed files with 70 additions and 26 deletions
|
@ -5,10 +5,10 @@ class StatsController < ApplicationController
|
||||||
dossiers = Dossier.where.not(:state => :draft)
|
dossiers = Dossier.where.not(:state => :draft)
|
||||||
|
|
||||||
@procedures_30_days_flow = thirty_days_flow_hash(procedures)
|
@procedures_30_days_flow = thirty_days_flow_hash(procedures)
|
||||||
@dossiers_30_days_flow = thirty_days_flow_hash(dossiers)
|
@dossiers_30_days_flow = thirty_days_flow_hash(dossiers, :initiated_at)
|
||||||
|
|
||||||
@procedures_cumulative = cumulative_hash(procedures)
|
@procedures_cumulative = cumulative_hash(procedures)
|
||||||
@dossiers_cumulative = cumulative_hash(dossiers)
|
@dossiers_cumulative = cumulative_hash(dossiers, :initiated_at)
|
||||||
|
|
||||||
@procedures_count = procedures.count
|
@procedures_count = procedures.count
|
||||||
@dossiers_count = dossiers.count
|
@dossiers_count = dossiers.count
|
||||||
|
@ -16,13 +16,13 @@ class StatsController < ApplicationController
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def thirty_days_flow_hash(association)
|
def thirty_days_flow_hash(association, date_attribute = :created_at)
|
||||||
min_date = 30.days.ago.to_date
|
min_date = 30.days.ago.to_date
|
||||||
max_date = Time.now.to_date
|
max_date = Time.now.to_date
|
||||||
|
|
||||||
thirty_days_flow_hash = association
|
thirty_days_flow_hash = association
|
||||||
.where(:created_at => min_date..max_date)
|
.where(date_attribute => min_date..max_date)
|
||||||
.group("date_trunc('day', created_at)")
|
.group("date_trunc('day', #{date_attribute.to_s})")
|
||||||
.count
|
.count
|
||||||
|
|
||||||
clean_hash(thirty_days_flow_hash, min_date, max_date)
|
clean_hash(thirty_days_flow_hash, min_date, max_date)
|
||||||
|
@ -42,10 +42,10 @@ class StatsController < ApplicationController
|
||||||
h
|
h
|
||||||
end
|
end
|
||||||
|
|
||||||
def cumulative_hash(association)
|
def cumulative_hash(association, date_attribute = :created_at)
|
||||||
sum = 0
|
sum = 0
|
||||||
association
|
association
|
||||||
.group("DATE_TRUNC('month', created_at)")
|
.group("DATE_TRUNC('month', #{date_attribute.to_s})")
|
||||||
.count
|
.count
|
||||||
.to_a
|
.to_a
|
||||||
.sort{ |x, y| x[0] <=> y[0] }
|
.sort{ |x, y| x[0] <=> y[0] }
|
||||||
|
|
|
@ -2,42 +2,86 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe StatsController, type: :controller do
|
describe StatsController, type: :controller do
|
||||||
describe '#thirty_days_flow_hash' do
|
describe '#thirty_days_flow_hash' do
|
||||||
before do
|
context "without a date_attribut" do
|
||||||
FactoryGirl.create(:procedure, :created_at => 45.days.ago)
|
before do
|
||||||
FactoryGirl.create(:procedure, :created_at => 15.days.ago)
|
FactoryGirl.create(:procedure, :created_at => 45.days.ago)
|
||||||
FactoryGirl.create(:procedure, :created_at => 1.day.ago)
|
FactoryGirl.create(:procedure, :created_at => 15.days.ago)
|
||||||
|
FactoryGirl.create(:procedure, :created_at => 1.day.ago)
|
||||||
|
|
||||||
@expected_hash = {}
|
@expected_hash = {}
|
||||||
(30.days.ago.to_date..Time.now.to_date).each do |day|
|
(30.days.ago.to_date..Time.now.to_date).each do |day|
|
||||||
if [15.days.ago.to_date, 1.day.ago.to_date].include?(day)
|
if [15.days.ago.to_date, 1.day.ago.to_date].include?(day)
|
||||||
@expected_hash[day] = 1
|
@expected_hash[day] = 1
|
||||||
else
|
else
|
||||||
@expected_hash[day] = 0
|
@expected_hash[day] = 0
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
let (:association) { Procedure.all }
|
||||||
|
|
||||||
|
subject { StatsController.new.send(:thirty_days_flow_hash, association) }
|
||||||
|
|
||||||
|
it { expect(subject).to eq(@expected_hash) }
|
||||||
end
|
end
|
||||||
|
|
||||||
let (:association) { Procedure.all }
|
context "with a date_attribut" do
|
||||||
|
before do
|
||||||
|
FactoryGirl.create(:procedure, :created_at => 45.days.ago, :updated_at => 50.days.ago)
|
||||||
|
FactoryGirl.create(:procedure, :created_at => 15.days.ago, :updated_at => 10.days.ago)
|
||||||
|
FactoryGirl.create(:procedure, :created_at => 1.day.ago, :updated_at => 3.days.ago)
|
||||||
|
|
||||||
subject { StatsController.new.send(:thirty_days_flow_hash, association) }
|
@expected_hash = {}
|
||||||
|
(30.days.ago.to_date..Time.now.to_date).each do |day|
|
||||||
|
if [10.days.ago.to_date, 3.day.ago.to_date].include?(day)
|
||||||
|
@expected_hash[day] = 1
|
||||||
|
else
|
||||||
|
@expected_hash[day] = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it { expect(subject).to eq(@expected_hash) }
|
let (:association) { Procedure.all }
|
||||||
|
|
||||||
|
subject { StatsController.new.send(:thirty_days_flow_hash, association, :updated_at) }
|
||||||
|
|
||||||
|
it { expect(subject).to eq(@expected_hash) }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#cumulative_hash' do
|
describe '#cumulative_hash' do
|
||||||
|
context "without a date attribute" do
|
||||||
|
before do
|
||||||
|
FactoryGirl.create(:procedure, :created_at => 45.days.ago)
|
||||||
|
FactoryGirl.create(:procedure, :created_at => 15.days.ago)
|
||||||
|
FactoryGirl.create(:procedure, :created_at => 15.days.ago)
|
||||||
|
end
|
||||||
|
|
||||||
|
let (:association) { Procedure.all }
|
||||||
|
|
||||||
|
subject { StatsController.new.send(:cumulative_hash, association) }
|
||||||
|
|
||||||
|
it { expect(subject).to eq({
|
||||||
|
45.days.ago.beginning_of_month => 1,
|
||||||
|
15.days.ago.beginning_of_month => 3
|
||||||
|
}) }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "with a date attribute" do
|
||||||
before do
|
before do
|
||||||
FactoryGirl.create(:procedure, :created_at => 45.days.ago)
|
FactoryGirl.create(:procedure, :created_at => 45.days.ago, :updated_at => 20.days.ago)
|
||||||
FactoryGirl.create(:procedure, :created_at => 15.days.ago)
|
FactoryGirl.create(:procedure, :created_at => 15.days.ago, :updated_at => 20.days.ago)
|
||||||
FactoryGirl.create(:procedure, :created_at => 15.days.ago)
|
FactoryGirl.create(:procedure, :created_at => 15.days.ago, :updated_at => 10.days.ago)
|
||||||
end
|
end
|
||||||
|
|
||||||
let (:association) { Procedure.all }
|
let (:association) { Procedure.all }
|
||||||
|
|
||||||
subject { StatsController.new.send(:cumulative_hash, association) }
|
subject { StatsController.new.send(:cumulative_hash, association, :updated_at) }
|
||||||
|
|
||||||
it { expect(subject).to eq({
|
it { expect(subject).to eq({
|
||||||
45.days.ago.beginning_of_month => 1,
|
20.days.ago.beginning_of_month => 2,
|
||||||
15.days.ago.beginning_of_month => 3
|
10.days.ago.beginning_of_month => 3
|
||||||
}) }
|
}) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue