diff --git a/app/models/budget/stats.rb b/app/models/budget/stats.rb
index cbf704ee557..3550562c418 100644
--- a/app/models/budget/stats.rb
+++ b/app/models/budget/stats.rb
@@ -2,26 +2,6 @@ class Budget::Stats
include Statisticable
alias_method :budget, :resource
- def self.stats_methods
- super + support_phase_methods + vote_phase_methods + every_phase_methods
- end
-
- def self.support_phase_methods
- %i[total_participants_support_phase total_budget_investments
- total_selected_investments total_unfeasible_investments headings]
- end
-
- def self.vote_phase_methods
- %i[total_votes total_participants_vote_phase]
- end
- def self.every_phase_methods
- %i[total_participants_every_phase]
- end
-
- def stats_methods
- super + base_stats_methods + participation_methods + phase_methods
- end
-
def phases
%w[accepting support vote].select { |phase| send("#{phase}_phase_finished?") }
end
@@ -49,7 +29,7 @@ def total_participants
end
def total_participants_accepting_phase
- User.where("users.id in (?)",authors).pluck(:id).uniq.count
+ authors.uniq.count
end
def total_participants_accepting_gender
@@ -59,6 +39,9 @@ def total_participants_accepting_gender
[male,female,other]
end
+ def participants
+ @participants ||= User.unscoped.where(id: participant_ids)
+ end
def total_participants_support_phase
voters.count
@@ -194,8 +177,7 @@ def accepting_by_heading(heading)
def poll_voters_by_heading(heading)
if !budget.poll.blank?
- budget.poll.voters.where(votable: heading.investments)
- .distinct.pluck(:user_id)
+ budget.poll.voters.distinct.pluck(:user_id)
else
[]
end
@@ -240,7 +222,7 @@ def calculate_heading_stats_with_totals(heading_totals, groups_totals, populatio
end
def voters_and_balloters_by_heading(heading)
- (accepting_by_heading(heading).distinct.pluck(:id) + voters_by_heading(heading) + balloters_by_heading(heading.id))
+ (accepting_by_heading(heading) + voters_by_heading(heading) + balloters_by_heading(heading.id))
end
def participants_percent(heading_totals, groups_totals, phase)
@@ -256,9 +238,4 @@ def supports(supportable)
Vote.where(votable: supportable.investments)
end
- # stats_cache(*stats_methods)
-
- # def stats_cache(key, &block)
- # Rails.cache.fetch("budgets_stats/#{budget.id}/#{phases.join}/#{key}/#{version}", &block)
- # end
end
diff --git a/app/models/concerns/statisticable.rb b/app/models/concerns/statisticable.rb
index 9dd9c1c8d98..639d163fb16 100644
--- a/app/models/concerns/statisticable.rb
+++ b/app/models/concerns/statisticable.rb
@@ -63,7 +63,7 @@ def participants_by_age
count = participants.between_ages(start, finish).count
female = participants.female.between_ages(start, finish).count
male = participants.male.between_ages(start, finish).count
- other = participants.where("gender IS NULL OR date_of_birth IS NULL OR geozone_id IS NULL").between_ages(start, finish).count
+ other = participants.where("gender IS NULL OR gender = ''").between_ages(start, finish).count
[
"#{start} - #{finish}",
@@ -87,7 +87,7 @@ def participants_by_geozone
count: stats.count,
female: stats.geozone_participants.female.count,
male: stats.geozone_participants.male.count,
- other: stats.geozone_participants.where("gender IS NULL OR date_of_birth IS NULL OR geozone_id IS NULL").count,
+ other: stats.geozone_participants.where("gender IS NULL OR gender = ''").count,
percentage: stats.percentage
}
]
diff --git a/app/views/budgets/stats/_advanced_stats.html.erb b/app/views/budgets/stats/_advanced_stats.html.erb
index 7cbbb20f1a0..51141c4d553 100644
--- a/app/views/budgets/stats/_advanced_stats.html.erb
+++ b/app/views/budgets/stats/_advanced_stats.html.erb
@@ -5,7 +5,7 @@
<%= t("stats.budgets.total_investments") %>
<%= number_with_info_tags(
- stats.total_budget_investments,
+ budget_stats.find_by(name:'total_budget_investments', budget_id: @budget.id).try(:value).to_i,
t("stats.budgets.total_investments"),
html_class: "total-investments"
) %>
@@ -13,12 +13,13 @@
<%= number_with_info_tags(265,
t("stats.budgets.total_unfeasible_investments")) %>
<%else%>
- <%= number_with_info_tags(stats.total_unfeasible_investments,
+ <%= number_with_info_tags(budget_stats.find_by(name:'total_unfeasible_investments', budget_id: @budget.id).try(:value).to_i,
t("stats.budgets.total_unfeasible_investments")) %>
<%end%>
- <%= number_with_info_tags(stats.total_selected_investments,
+ <%= number_with_info_tags(budget_stats.find_by(name:'total_selected_investments', budget_id: @budget.id).try(:value).to_i,
+
t("stats.budgets.total_selected_investments")) %>
@@ -27,28 +28,18 @@
<% stats.phases.each do |phase| %>
<%= t("stats.budgets.participants_#{phase}_phase") %>
- <%= number_with_info_tags(
- stats.send("total_participants_#{phase}_phase"),
- t("stats.budgets.participants_#{phase}_phase")
- ) %>
+ <%= number_with_info_tags(budget_stats.find_by(name:"total_participants_#{phase}_phase", budget_id: @budget.id).try(:value).to_i,
+ t("stats.budgets.participants_#{phase}_phase"))%>
<%= t("stats.by_gender_#{phase}") %>
- <%= number_with_info_tags(
- stats.send("total_participants_#{phase}_gender")[0],
- t("stats.men_percentage", percentage: number_to_stats_percentage( stats.send("total_participants_#{phase}_gender")[0].to_f/stats.send("total_participants_#{phase}_phase").to_f*100)),
- html_class: "participants male"
- ) %>
+ <%['male','female', 'other'].each do |sex|%>
+ <%= number_with_info_tags(
+ budget_stats.find_by(name:"total_participants_#{phase}_gender_#{sex}", budget_id: @budget.id).try(:value).to_i,
+ t("stats.#{sex}_percentage", percentage: number_to_stats_percentage( budget_stats.find_by(name:"total_participants_#{phase}_gender_#{sex}", budget_id: @budget.id).try(:value).to_f/budget_stats.find_by(name:"total_participants_#{phase}_phase", budget_id: @budget.id).try(:value).to_f*100)),
+ html_class: "participants #{sex}"
+ ) %>
+ <%end%>
- <%= number_with_info_tags(
- stats.send("total_participants_#{phase}_gender")[1],
- t("stats.women_percentage", percentage: number_to_stats_percentage(stats.send("total_participants_#{phase}_gender")[1].to_f/stats.send("total_participants_#{phase}_phase").to_f*100)),
- html_class: "participants female"
- ) %>
- <%= number_with_info_tags(
- stats.send("total_participants_#{phase}_gender")[2],
- t("stats.other_percentage", percentage: number_to_stats_percentage(stats.send("total_participants_#{phase}_gender")[2].to_f/stats.send("total_participants_#{phase}_phase").to_f*100)),
- ) %>
-
<% end %>
@@ -106,42 +97,42 @@
- <%= budget_stats.find_by(name: "total_investments_count", budget_heading_id: heading.id).try(:value).to_i %>
+ <%= budget_stats.find_by(name: "total_investments_count", budget_id: @budget.id, budget_heading_id: heading.id).try(:value).to_i %>
|
- <%= budget_stats.find_by(name: "total_investments_male_count", budget_heading_id: heading.id).try(:value).to_i %>
+ <%= budget_stats.find_by(name: "total_investments_male_count", budget_id: @budget.id, budget_heading_id: heading.id).try(:value).to_i %>
|
- <%= budget_stats.find_by(name: "total_investments_female_count", budget_heading_id: heading.id).try(:value).to_i %>
+ <%= budget_stats.find_by(name: "total_investments_female_count", budget_id: @budget.id, budget_heading_id: heading.id).try(:value).to_i %>
|
- <%= budget_stats.find_by(name: "total_investments_other_count", budget_heading_id: heading.id).try(:value).to_i %>
+ <%= budget_stats.find_by(name: "total_investments_other_count", budget_id: @budget.id, budget_heading_id: heading.id).try(:value).to_i %>
|
<% stats.all_phases.each do |phase| %>
- <%= budget_stats.find_by(name: "total_participants_#{phase}_phase", budget_heading_id: heading.id).try(:value).to_i %>
+ <%= budget_stats.find_by(name: "total_participants_#{phase}_phase", budget_id: @budget.id, budget_heading_id: heading.id).try(:value).to_i %>
|
- <%= budget_stats.find_by(name: "total_participants_#{phase}_male", budget_heading_id: heading.id).try(:value).to_i%>
+ <%= budget_stats.find_by(name: "total_participants_#{phase}_male", budget_id: @budget.id, budget_heading_id: heading.id).try(:value).to_i%>
|
- <%= budget_stats.find_by(name: "total_participants_#{phase}_female", budget_heading_id: heading.id).try(:value).to_i %>
+ <%= budget_stats.find_by(name: "total_participants_#{phase}_female", budget_id: @budget.id, budget_heading_id: heading.id).try(:value).to_i %>
|
- <%= budget_stats.find_by(name: "total_participants_#{phase}_other", budget_heading_id: heading.id).try(:value).to_i %>
+ <%= budget_stats.find_by(name: "total_participants_#{phase}_other", budget_id: @budget.id, budget_heading_id: heading.id).try(:value).to_i %>
|
- <%= number_to_stats_percentage(budget_stats.find_by(name: "percentage_participants_#{phase}_phase" , budget_heading_id: heading.id).try(:value))%>
+ <%= number_to_stats_percentage(budget_stats.find_by(name: "percentage_participants_#{phase}_phase", budget_id: @budget.id , budget_heading_id: heading.id).try(:value))%>
|
- <%= number_to_stats_percentage(budget_stats.find_by(name: "percentage_district_population_#{phase}_phase" , budget_heading_id: heading.id).try(:value)) %>
+ <%= number_to_stats_percentage(budget_stats.find_by(name: "percentage_district_population_#{phase}_phase", budget_id: @budget.id , budget_heading_id: heading.id).try(:value)) %>
|
<% end %>
diff --git a/app/views/budgets/stats/show.html.erb b/app/views/budgets/stats/show.html.erb
index 73d14e5e070..25a1865a4a8 100644
--- a/app/views/budgets/stats/show.html.erb
+++ b/app/views/budgets/stats/show.html.erb
@@ -27,12 +27,12 @@
- <%= render "shared/stats/links", stats: @stats %>
+ <%= render "shared/stats/links", stats: @stats, budget_stats: @budget_stats %>
<%= render "advanced_stats_links" if @stats.advanced? %>
- <%= render "shared/stats/participation", stats: @stats %>
+ <%= render "shared/stats/participation", stats: @stats, budget_stats: @budget_stats %>
<%= render "advanced_stats", budget_stats: @budget_stats, stats: @stats if @stats.advanced? %>
diff --git a/app/views/shared/stats/_age.html.erb b/app/views/shared/stats/_age.html.erb
index 61a53ae07f9..b86942d2470 100644
--- a/app/views/shared/stats/_age.html.erb
+++ b/app/views/shared/stats/_age.html.erb
@@ -1,34 +1,38 @@
-
-
<%= t("stats.by_age") %>
+<% if !budget_stats.blank?%>
+
+<%else%>
+
+
<%= t("stats.by_age") %>
-
-
-
- <%= t("stats.age") %> |
- <%= t("stats.male") %> |
- <%= t("stats.female") %> |
- <%= t("stats.other") %> |
- <%= t("stats.total") %> |
-
-
-
-
- <% stats.participants_by_age.values.each do |group| %>
+
+
- <%= group[:range] %> |
- <%= group[:male] %> |
- <%= group[:female] %> |
- <%= group[:other] %> |
-
-
- <%= "#{group[:count]} (#{number_to_stats_percentage(group[:percentage])})" %>
-
-
-
-
- |
+ <%= t("stats.age") %> |
+ <%= t("stats.male") %> |
+ <%= t("stats.female") %> |
+ <%= t("stats.other") %> |
+ <%= t("stats.total") %> |
- <% end %>
-
-
-
+
+
+
+ <% stats.participants_by_age.values.each do |group| %>
+
+ <%= group[:range] %> |
+ <%= group[:male] %> |
+ <%= group[:female] %> |
+ <%= group[:other] %> |
+
+
+ <%= "#{group[:count]} (#{number_to_stats_percentage(group[:percentage])})" %>
+
+
+
+
+ |
+
+ <% end %>
+
+
+
+<%end%>
\ No newline at end of file
diff --git a/app/views/shared/stats/_gender.html.erb b/app/views/shared/stats/_gender.html.erb
index fbb85da793b..ca869c7152b 100644
--- a/app/views/shared/stats/_gender.html.erb
+++ b/app/views/shared/stats/_gender.html.erb
@@ -1,19 +1,41 @@
-
-
<%= t("stats.by_gender") %>
+<% if !budget_stats.blank?%>
+
+
<%= t("stats.by_gender") %>
- <%= number_with_info_tags(
- stats.participants.where("upper(gender) = upper('male')").count,
- t("stats.men_percentage", percentage: number_to_stats_percentage(stats.participants.where("upper(gender) = upper('male')").count.to_f/stats.participants.count.to_f*100 )),
- html_class: "participants male"
- ) %>
+ <%= number_with_info_tags(
+ budget_stats.find_by(name: 'total_male_participants', budget: @budget.id).try(:value).to_i,
+ t("stats.male_percentage", percentage: number_to_stats_percentage(budget_stats.find_by(name: 'total_male_participants', budget: @budget.id).try(:value).to_f/budget_stats.find_by(name: 'total_participants', budget: @budget.id).try(:value).to_f*100 )),
+ html_class: "participants male"
+ ) %>
- <%= number_with_info_tags(
- stats.participants.where("upper(gender) = upper('female')").count,
- t("stats.women_percentage", percentage: number_to_stats_percentage(stats.participants.where("upper(gender) = upper('female')").count.to_f/stats.participants.count.to_f*100)),
- html_class: "participants female"
- ) %>
- <%= number_with_info_tags(
- stats.participants.where("gender is null or gender = ''").count,
- t("stats.other_percentage", percentage: number_to_stats_percentage(stats.participants.where("gender is null or gender = ''").count.to_f/stats.participants.count.to_f*100))
- ) %>
-
+ <%= number_with_info_tags(
+ budget_stats.find_by(name: 'total_female_participants', budget: @budget.id).try(:value).to_i,
+ t("stats.female_percentage", percentage: number_to_stats_percentage(budget_stats.find_by(name: 'total_female_participants', budget: @budget.id).try(:value).to_f/budget_stats.find_by(name: 'total_participants', budget: @budget.id).try(:value).to_f*100)),
+ html_class: "participants female"
+ ) %>
+ <%= number_with_info_tags(
+ budget_stats.find_by(name: 'total_other_participants', budget: @budget.id).try(:value).to_i,
+ t("stats.other_percentage", percentage: number_to_stats_percentage(budget_stats.find_by(name: 'total_other_participants', budget: @budget.id).try(:value).to_f/budget_stats.find_by(name: 'total_participants', budget: @budget.id).try(:value).to_f*100))
+ ) %>
+
+<%else%>
+
+
<%= t("stats.by_gender") %>
+
+ <%= number_with_info_tags(
+ stats.participants.where("upper(gender) = upper('male')").count,
+ t("stats.men_percentage", percentage: number_to_stats_percentage(stats.participants.where("upper(gender) = upper('male')").count.to_f/stats.participants.count.to_f*100 )),
+ html_class: "participants male"
+ ) %>
+
+ <%= number_with_info_tags(
+ stats.participants.where("upper(gender) = upper('female')").count,
+ t("stats.women_percentage", percentage: number_to_stats_percentage(stats.participants.where("upper(gender) = upper('female')").count.to_f/stats.participants.count.to_f*100)),
+ html_class: "participants female"
+ ) %>
+ <%= number_with_info_tags(
+ stats.participants.where("gender is null or gender = ''").count,
+ t("stats.other_percentage", percentage: number_to_stats_percentage(stats.participants.where("gender is null or gender = ''").count.to_f/stats.participants.count.to_f*100))
+ ) %>
+
+ <%end%>
diff --git a/app/views/shared/stats/_geozone.html.erb b/app/views/shared/stats/_geozone.html.erb
index 6d006894000..c2473280ef6 100644
--- a/app/views/shared/stats/_geozone.html.erb
+++ b/app/views/shared/stats/_geozone.html.erb
@@ -1,27 +1,30 @@
-
-
<%= t("stats.by_geozone") %>
+<% if !budget_stats.blank?%>
+<%else%>
+
+
<%= t("stats.by_geozone") %>
-
-
-
- <%= t("stats.geozone") %> |
- <%= t("stats.male") %> |
- <%= t("stats.female") %> |
- <%= t("stats.other") %> |
- <%= t("stats.total") %> |
-
-
-
-
- <% stats.participants_by_geozone.each do |geozone, participants| %>
+
+
- <%= geozone %> |
- <%= "#{participants[:male]}" %> |
- <%= "#{participants[:female]}" %> |
- <%= "#{participants[:other]}" %> |
- <%= "#{participants[:count]} (#{number_to_stats_percentage(participants[:percentage])})" %> |
+ <%= t("stats.geozone") %> |
+ <%= t("stats.male") %> |
+ <%= t("stats.female") %> |
+ <%= t("stats.other") %> |
+ <%= t("stats.total") %> |
- <% end %>
-
-
-
+
+
+
+ <% stats.participants_by_geozone.each do |geozone, participants| %>
+
+ <%= geozone %> |
+ <%= "#{participants[:male]}" %> |
+ <%= "#{participants[:female]}" %> |
+ <%= "#{participants[:other]}" %> |
+ <%= "#{participants[:count]} (#{number_to_stats_percentage(participants[:percentage])})" %> |
+
+ <% end %>
+
+
+
+<%end%>
\ No newline at end of file
diff --git a/app/views/shared/stats/_participation.html.erb b/app/views/shared/stats/_participation.html.erb
index 82fceb44b6a..d55ea3b0e42 100644
--- a/app/views/shared/stats/_participation.html.erb
+++ b/app/views/shared/stats/_participation.html.erb
@@ -1,17 +1,37 @@
-
+<% if !budget_stats.blank?%>
+
<%= t("stats.title") %>
<%= t("stats.total_participants") %>
<%= number_with_info_tags(
- stats.total_participants,
+ budget_stats.find_by(name: 'total_participants', budget: @budget.id).try(:value).to_i,
"",
html_class: "participants total-participants"
) %>
<% stats.participations.each do |participation| %>
- <%= render "shared/stats/#{participation}", stats: stats %>
+ <%= render "shared/stats/#{participation}", budget_stats: budget_stats %>
<% end %>
+<%else%>
+
+
<%= t("stats.title") %>
+
+
+
<%= t("stats.total_participants") %>
+
+ <%= number_with_info_tags(
+ budget_stats.find_by(name: 'total_participants', budget: @budget.id),
+ "",
+ html_class: "participants total-participants"
+ ) %>
+
+
+ <% stats.participations.each do |participation| %>
+ <%= render "shared/stats/#{participation}", stats: stats %>
+ <% end %>
+
+<% end %>
diff --git a/config/locales/es/stats.yml b/config/locales/es/stats.yml
index a9109970ab9..3f7334e8c73 100644
--- a/config/locales/es/stats.yml
+++ b/config/locales/es/stats.yml
@@ -9,8 +9,8 @@ es:
by_gender_vote: "Participantes por género fase de votación"
by_age: "Participantes por grupos de edad"
by_geozone: "Participantes por distritos"
- men_percentage: "%{percentage} Hombres"
- women_percentage: "%{percentage} Mujeres"
+ male_percentage: "%{percentage} Hombres"
+ female_percentage: "%{percentage} Mujeres"
other_percentage: "%{percentage} No definido"
age: "Edad"
male: Total masculino
diff --git a/db/migrate/20220714065946_add_table_type_to_budget_investment_stats.rb b/db/migrate/20220714065946_add_table_type_to_budget_investment_stats.rb
new file mode 100644
index 00000000000..8c03efdf1db
--- /dev/null
+++ b/db/migrate/20220714065946_add_table_type_to_budget_investment_stats.rb
@@ -0,0 +1,5 @@
+class AddTableTypeToBudgetInvestmentStats < ActiveRecord::Migration[5.0]
+ def change
+ add_column :budget_investment_stats, :table_type, :string
+ end
+end
diff --git a/lib/tasks/budget_stats.rake b/lib/tasks/budget_stats.rake
index 815f176aef6..b13532a8513 100644
--- a/lib/tasks/budget_stats.rake
+++ b/lib/tasks/budget_stats.rake
@@ -58,106 +58,95 @@ namespace :budgets do
end
desc "Calcular estadísticas en fases posteriores a la de votación"
- task stats_budget: :environment do
+ task stats_budget: :environment do
Budget.all.each do |budget|
stats = Budget::Stats.new(budget)
- headings = budget.headings.sort_by_name
- headings.each do |heading|
- budget_stats = Budget::Investment::Stat.find_by(budget_id: budget.id, budget_heading_id: heading.id, name: 'total_investments_count')
- budget_stats = Budget::Investment::Stat.new if budget_stats.blank?
- if budget_stats.value != stats.headings[heading.id][:total_investments_count]
- budget_stats.budget = budget
- budget_stats.heading = heading
- budget_stats.name = 'total_investments_count'
- budget_stats.value = stats.headings[heading.id][:total_investments_count]
- budget_stats.save
- end
- budget_stats = Budget::Investment::Stat.find_by(budget_id: budget.id, budget_heading_id: heading.id, name: 'total_investments_male_count')
+ ['total_participants', 'total_participants_accepting_phase' ,'total_participants_support_phase',
+ 'total_participants_vote_phase', 'total_participants_every_phase' ,'total_budget_investments',
+ 'total_votes', 'total_selected_investments', 'total_unfeasible_investments', 'male_percentage',
+ 'female_percentage', 'total_male_participants' ,'total_female_participants', 'total_no_demographic_data'].each do |name|
+ budget_stats = Budget::Investment::Stat.find_by(budget_id: budget.id, budget_heading_id: nil, name: name.to_s)
budget_stats = Budget::Investment::Stat.new if budget_stats.blank?
- if budget_stats.value != stats.headings[heading.id][:total_investments_male_count]
+ if budget_stats.value.blank? || budget_stats.value.to_i != stats.send(name.to_s).to_i
budget_stats.budget = budget
- budget_stats.heading = heading
- budget_stats.name = 'total_investments_male_count'
- budget_stats.value =stats.headings[heading.id][:total_investments_male_count]
+ budget_stats.heading = nil
+ budget_stats.name = name.to_s
+ budget_stats.value = stats.send(name.to_s)
budget_stats.save
- end
- budget_stats = Budget::Investment::Stat.find_by(budget_id: budget.id, budget_heading_id: heading.id, name: 'total_investments_female_count')
- budget_stats = Budget::Investment::Stat.new if budget_stats.blank?
- if budget_stats.value != stats.headings[heading.id][:total_investments_female_count]
+ end
+ end
+ stats.participants_by_age.values.each do |group|
+ ['count','male','female','other','percentage'].each do |type|
+ budget_stats = Budget::Investment::Stat.find_by(budget_id: budget.id, budget_heading_id: nil, table_type: "#{group[:range]}_#{type}")
+ budget_stats = Budget::Investment::Stat.new if budget_stats.blank?
budget_stats.budget = budget
- budget_stats.heading = heading
- budget_stats.name = 'total_investments_female_count'
- budget_stats.value = stats.headings[heading.id][:total_investments_female_count]
+ budget_stats.heading = nil
+ budget_stats.name = group[:range]
+ budget_stats.table_type = "#{group[:range]}_#{type}"
+ budget_stats.value = group[type.to_sym]
budget_stats.save
- end
- budget_stats = Budget::Investment::Stat.find_by(budget_id: budget.id, budget_heading_id: heading.id, name: 'total_investments_other_count')
- budget_stats = Budget::Investment::Stat.new if budget_stats.blank?
- if budget_stats.value != stats.headings[heading.id][:total_investments_other_count]
+ end
+ end
+ stats.participants_by_geozone.each do |geozone, participants|
+ ['count','male','female','other','percentage'].each do |type|
+ budget_stats = Budget::Investment::Stat.find_by(budget_id: budget.id, budget_heading_id: nil, table_type: "#{geozone}_#{type}")
+ budget_stats = Budget::Investment::Stat.new if budget_stats.blank?
budget_stats.budget = budget
- budget_stats.heading = heading
- budget_stats.name = 'total_investments_other_count'
- budget_stats.value = stats.headings[heading.id][:total_investments_other_count]
+ budget_stats.heading = nil
+ budget_stats.name = geozone
+ budget_stats.table_type = "#{geozone}_#{type}"
+ budget_stats.value = participants[type.to_sym]
budget_stats.save
- end
- stats.all_phases.each do |phase|
- budget_stats = Budget::Investment::Stat.find_by(budget_id: budget.id, budget_heading_id: heading.id, name: "total_participants_#{phase}_phase")
+ end
+ end
+ ['total_participants_accepting_gender','total_participants_support_gender','total_participants_vote_gender'].each do |name|
+ ['male','female','other'].each_with_index do |gender, index|
+ stats = Budget::Stats.new(budget)
+ budget_stats = Budget::Investment::Stat.find_by(budget_id: budget.id, budget_heading_id: nil, name: "#{name}_#{gender}")
budget_stats = Budget::Investment::Stat.new if budget_stats.blank?
- if budget_stats.value != stats.headings[heading.id]["total_participants_#{phase}_phase".to_sym]
+ if budget_stats.value.blank? || budget_stats.value.to_i != stats.send(name.to_s)[index]
budget_stats.budget = budget
- budget_stats.heading = heading
- budget_stats.name = "total_participants_#{phase}_phase"
- budget_stats.value = stats.headings[heading.id]["total_participants_#{phase}_phase".to_sym]
+ budget_stats.heading = nil
+ budget_stats.name = "#{name}_#{gender}"
+ budget_stats.value = stats.send(name.to_s)[index]
budget_stats.save
- end
- budget_stats = Budget::Investment::Stat.find_by(budget_id: budget.id, budget_heading_id: heading.id, name: "total_participants_#{phase}_male")
- budget_stats = Budget::Investment::Stat.new if budget_stats.blank?
- if budget_stats.value != stats.headings[heading.id]["total_participants_#{phase}_male".to_sym]
- budget_stats.budget = budget
- budget_stats.heading = heading
- budget_stats.name = "total_participants_#{phase}_male"
- budget_stats.value = stats.headings[heading.id]["total_participants_#{phase}_male".to_sym]
- budget_stats.save
- end
- budget_stats = Budget::Investment::Stat.find_by(budget_id: budget.id, budget_heading_id: heading.id, name: "total_participants_#{phase}_female")
- budget_stats = Budget::Investment::Stat.new if budget_stats.blank?
- if budget_stats.value != stats.headings[heading.id]["total_participants_#{phase}_female".to_sym]
- budget_stats.budget = budget
- budget_stats.heading = heading
- budget_stats.name = "total_participants_#{phase}_female"
- budget_stats.value = stats.headings[heading.id]["total_participants_#{phase}_female".to_sym]
- budget_stats.save
- end
- budget_stats = Budget::Investment::Stat.find_by(budget_id: budget.id, budget_heading_id: heading.id, name: "total_participants_#{phase}_other")
- budget_stats = Budget::Investment::Stat.new if budget_stats.blank?
- if budget_stats.value != stats.headings[heading.id]["total_participants_#{phase}_other".to_sym]
- budget_stats.budget = budget
- budget_stats.heading = heading
- budget_stats.name = "total_participants_#{phase}_other"
- budget_stats.value = stats.headings[heading.id]["total_participants_#{phase}_other".to_sym]
- budget_stats.save
- end
- budget_stats = Budget::Investment::Stat.find_by(budget_id: budget.id, budget_heading_id: heading.id, name: "percentage_participants_#{phase}_phase")
+ index = index + 1
+ end
+ end
+ end
+ headings = budget.headings.sort_by_name
+ headings.each do |heading|
+ ['total_investments_count','total_investments_male_count','total_investments_female_count',
+ 'total_investments_other_count'].each do |name|
+ budget_stats = Budget::Investment::Stat.find_by(budget_id: budget.id, budget_heading_id: heading.id, name: name.to_s)
budget_stats = Budget::Investment::Stat.new if budget_stats.blank?
- if budget_stats.value != stats.headings[heading.id]["percentage_participants_#{phase}_phase".to_sym]
+ if budget_stats.value != stats.headings[heading.id][name.to_s.to_sym]
budget_stats.budget = budget
budget_stats.heading = heading
- budget_stats.name = "percentage_participants_#{phase}_phase"
- budget_stats.value = stats.headings[heading.id]["percentage_participants_#{phase}_phase".to_sym]
+ budget_stats.name = name.to_s
+ budget_stats.value = stats.headings[heading.id][name.to_s.to_sym]
budget_stats.save
end
- budget_stats = Budget::Investment::Stat.find_by(budget_id: budget.id, budget_heading_id: heading.id, name: "percentage_district_population_#{phase}_phase")
+ end
+ names = []
+ stats.all_phases.each do |phase|
+ names << ["total_participants_#{phase}_phase", "total_participants_#{phase}_male",
+ "total_participants_#{phase}_female", "total_participants_#{phase}_other",
+ "percentage_participants_#{phase}_phase", "percentage_district_population_#{phase}_phase"]
+ end
+ names.compact.flatten.each do |name|
+ budget_stats = Budget::Investment::Stat.find_by(budget_id: budget.id, budget_heading_id: heading.id, name: name.to_s)
budget_stats = Budget::Investment::Stat.new if budget_stats.blank?
- if budget_stats.value != stats.headings[heading.id]["percentage_district_population_#{phase}_phase".to_sym]
+ if budget_stats.value != stats.headings[heading.id][name.to_sym]
budget_stats.budget = budget
budget_stats.heading = heading
- budget_stats.name = "percentage_district_population_#{phase}_phase"
- budget_stats.value = stats.headings[heading.id]["percentage_district_population_#{phase}_phase".to_sym]
+ budget_stats.name = name.to_s
+ budget_stats.value = stats.headings[heading.id][name.to_sym]
budget_stats.save
end
end
end
- end
-
+ end
end
desc "Calcular ballot_lines_count"
@@ -168,7 +157,5 @@ namespace :budgets do
end
end
-
end
-
end
diff --git a/lib/tasks/import_data.rake b/lib/tasks/import_data.rake
index 377f5b67cd0..576efcb4a68 100644
--- a/lib/tasks/import_data.rake
+++ b/lib/tasks/import_data.rake
@@ -838,7 +838,7 @@ namespace :import_data do
desc "Añadir resultados totales a budget_investments"
task add_result_balloting: :environment do
- Budget.find(5).investments.find_each do |inv|
+ Budget.last.investments.find_each do |inv|
inv.result_balloting_votes = inv.ballot_lines_total_votes
inv.save(validate: false)
end