The new CSV report was more configurable and could work on proposals,
processes and comments. However, it had several issues.
In the public area, by default it generated a blank file.
In the admin section, the report was hard to configure and it generated
a file with less quality than the old system.
So until we improve this system, we're bringing back the old investment
CSV exporter.
This commit reverts most of commit 9d1ca3bf.
158 lines
5.3 KiB
Ruby
158 lines
5.3 KiB
Ruby
class Legislation::Process < ApplicationRecord
|
|
include ActsAsParanoidAliases
|
|
include Taggable
|
|
include Milestoneable
|
|
include Imageable
|
|
include Documentable
|
|
|
|
acts_as_paranoid column: :hidden_at
|
|
acts_as_taggable_on :customs
|
|
|
|
translates :title, touch: true
|
|
translates :summary, touch: true
|
|
translates :description, touch: true
|
|
translates :additional_info, touch: true
|
|
translates :milestones_summary, touch: true
|
|
translates :homepage, touch: true
|
|
include Globalizable
|
|
|
|
PHASES_AND_PUBLICATIONS = %i[homepage_phase draft_phase debate_phase allegations_phase
|
|
proposals_phase draft_publication result_publication].freeze
|
|
|
|
CSS_HEX_COLOR = /\A#?(?:[A-F0-9]{3}){1,2}\z/i.freeze
|
|
|
|
has_many :draft_versions, -> { order(:id) },
|
|
foreign_key: "legislation_process_id",
|
|
inverse_of: :process,
|
|
dependent: :destroy
|
|
has_one :final_draft_version, -> { where final_version: true, status: "published" },
|
|
class_name: "Legislation::DraftVersion",
|
|
foreign_key: "legislation_process_id",
|
|
inverse_of: :process
|
|
has_many :questions, -> { order(:id) },
|
|
foreign_key: "legislation_process_id",
|
|
inverse_of: :process,
|
|
dependent: :destroy
|
|
has_many :proposals, -> { order(:id) },
|
|
foreign_key: "legislation_process_id",
|
|
inverse_of: :process,
|
|
dependent: :destroy
|
|
|
|
validates_translation :title, presence: true
|
|
validates :start_date, presence: true
|
|
validates :end_date, presence: true
|
|
validates :debate_start_date, presence: true, if: :debate_end_date?
|
|
validates :debate_end_date, presence: true, if: :debate_start_date?
|
|
validates :draft_start_date, presence: true, if: :draft_end_date?
|
|
validates :draft_end_date, presence: true, if: :draft_start_date?
|
|
validates :allegations_start_date, presence: true, if: :allegations_end_date?
|
|
validates :allegations_end_date, presence: true, if: :allegations_start_date?
|
|
validates :proposals_phase_end_date, presence: true, if: :proposals_phase_start_date?
|
|
validate :valid_date_ranges
|
|
validates :background_color, format: { allow_blank: true, with: CSS_HEX_COLOR }
|
|
validates :font_color, format: { allow_blank: true, with: CSS_HEX_COLOR }
|
|
|
|
class << self; undef :open; end
|
|
scope :open, -> { where("start_date <= ? and end_date >= ?", Date.current, Date.current) }
|
|
scope :active, -> { where("end_date >= ?", Date.current) }
|
|
scope :past, -> { where("end_date < ?", Date.current) }
|
|
|
|
scope :published, -> { where(published: true) }
|
|
|
|
def self.not_in_draft
|
|
where("draft_phase_enabled = false or (draft_start_date IS NOT NULL and
|
|
draft_end_date IS NOT NULL and (draft_start_date > ? or
|
|
draft_end_date < ?))", Date.current, Date.current)
|
|
end
|
|
|
|
def past?
|
|
end_date < Date.current
|
|
end
|
|
|
|
def homepage_phase
|
|
Legislation::Process::Phase.new(start_date, end_date, homepage_enabled)
|
|
end
|
|
|
|
def draft_phase
|
|
Legislation::Process::Phase.new(draft_start_date, draft_end_date, draft_phase_enabled)
|
|
end
|
|
|
|
def debate_phase
|
|
Legislation::Process::Phase.new(debate_start_date, debate_end_date, debate_phase_enabled)
|
|
end
|
|
|
|
def allegations_phase
|
|
Legislation::Process::Phase.new(allegations_start_date,
|
|
allegations_end_date, allegations_phase_enabled)
|
|
end
|
|
|
|
def proposals_phase
|
|
Legislation::Process::Phase.new(proposals_phase_start_date,
|
|
proposals_phase_end_date, proposals_phase_enabled)
|
|
end
|
|
|
|
def draft_publication
|
|
Legislation::Process::Publication.new(draft_publication_date, draft_publication_enabled)
|
|
end
|
|
|
|
def result_publication
|
|
Legislation::Process::Publication.new(result_publication_date, result_publication_enabled)
|
|
end
|
|
|
|
def enabled_phases?
|
|
PHASES_AND_PUBLICATIONS.any? { |process| send(process).enabled? }
|
|
end
|
|
|
|
def enabled_phases_and_publications_count
|
|
PHASES_AND_PUBLICATIONS.count { |process| send(process).enabled? }
|
|
end
|
|
|
|
def total_comments
|
|
questions.sum(:comments_count) + draft_versions.map(&:total_comments).sum
|
|
end
|
|
|
|
def status
|
|
today = Date.current
|
|
|
|
if today < start_date
|
|
:planned
|
|
elsif end_date < today
|
|
:closed
|
|
else
|
|
:open
|
|
end
|
|
end
|
|
|
|
def get_last_draft_version
|
|
Legislation::DraftVersion.where(process: self, status: "published").last
|
|
end
|
|
|
|
def get_annotations_from_draft
|
|
Legislation::Annotation.where(legislation_draft_version_id: get_last_draft_version)
|
|
end
|
|
|
|
def get_best_annotation_comments
|
|
Comment.where(commentable_id: get_annotations_from_draft,
|
|
commentable_type: "Legislation::Annotation", ancestry: nil)
|
|
.order("cached_votes_up - cached_votes_down DESC")
|
|
end
|
|
|
|
private
|
|
|
|
def valid_date_ranges
|
|
if end_date && start_date && end_date < start_date
|
|
errors.add(:end_date, :invalid_date_range)
|
|
end
|
|
if debate_end_date && debate_start_date && debate_end_date < debate_start_date
|
|
errors.add(:debate_end_date, :invalid_date_range)
|
|
end
|
|
if draft_end_date && draft_start_date && draft_end_date < draft_start_date
|
|
errors.add(:draft_end_date, :invalid_date_range)
|
|
end
|
|
if allegations_end_date && allegations_start_date &&
|
|
allegations_end_date < allegations_start_date
|
|
errors.add(:allegations_end_date, :invalid_date_range)
|
|
end
|
|
end
|
|
end
|