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/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") %>

- - - - - - - - - - - - - <% stats.participants_by_age.values.each do |group| %> +
<%= t("stats.age") %><%= t("stats.male") %><%= t("stats.female") %><%= t("stats.other") %><%= t("stats.total") %>
+ - - - - - + + + + + - <% end %> - -
<%= 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") %>
-
+ + + + <% 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") %>

- - - - - - - - - - - - - <% stats.participants_by_geozone.each do |geozone, participants| %> +
<%= t("stats.geozone") %><%= t("stats.male") %><%= t("stats.female") %><%= t("stats.other") %><%= t("stats.total") %>
+ - - - - - + + + + + - <% end %> - -
<%= 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") %>
-
+ + + + <% 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