Add a rake task to generate missing Budget::Phase's and migrate descricptions
This commit is contained in:
@@ -12,7 +12,7 @@ class Budget
|
|||||||
validates :budget, presence: true
|
validates :budget, presence: true
|
||||||
validates :kind, presence: true, uniqueness: { scope: :budget }, inclusion: { in: PHASE_KINDS }
|
validates :kind, presence: true, uniqueness: { scope: :budget }, inclusion: { in: PHASE_KINDS }
|
||||||
validates :description, length: { maximum: DESCRIPTION_MAX_LENGTH }
|
validates :description, length: { maximum: DESCRIPTION_MAX_LENGTH }
|
||||||
validate :dates_range_valid?
|
validate :invalid_dates_range?
|
||||||
validate :prev_phase_dates_valid?
|
validate :prev_phase_dates_valid?
|
||||||
validate :next_phase_dates_valid?
|
validate :next_phase_dates_valid?
|
||||||
|
|
||||||
@@ -48,7 +48,7 @@ class Budget
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def dates_range_valid?
|
def invalid_dates_range?
|
||||||
if starts_at.present? && ends_at.present? && starts_at >= ends_at
|
if starts_at.present? && ends_at.present? && starts_at >= ends_at
|
||||||
errors.add(:starts_at, I18n.t('budgets.phases.errors.dates_range_invalid'))
|
errors.add(:starts_at, I18n.t('budgets.phases.errors.dates_range_invalid'))
|
||||||
end
|
end
|
||||||
@@ -59,7 +59,7 @@ class Budget
|
|||||||
def prev_phase_dates_valid?
|
def prev_phase_dates_valid?
|
||||||
if enabled? && starts_at.present? && prev_enabled_phase.present?
|
if enabled? && starts_at.present? && prev_enabled_phase.present?
|
||||||
prev_enabled_phase.assign_attributes(ends_at: starts_at)
|
prev_enabled_phase.assign_attributes(ends_at: starts_at)
|
||||||
if prev_enabled_phase.dates_range_valid?
|
if prev_enabled_phase.invalid_dates_range?
|
||||||
phase_name = I18n.t("budgets.phase.#{prev_enabled_phase.kind}")
|
phase_name = I18n.t("budgets.phase.#{prev_enabled_phase.kind}")
|
||||||
error = I18n.t('budgets.phases.errors.prev_phase_dates_invalid', phase_name: phase_name)
|
error = I18n.t('budgets.phases.errors.prev_phase_dates_invalid', phase_name: phase_name)
|
||||||
errors.add(:starts_at, error)
|
errors.add(:starts_at, error)
|
||||||
@@ -70,7 +70,7 @@ class Budget
|
|||||||
def next_phase_dates_valid?
|
def next_phase_dates_valid?
|
||||||
if enabled? && ends_at.present? && next_enabled_phase.present?
|
if enabled? && ends_at.present? && next_enabled_phase.present?
|
||||||
next_enabled_phase.assign_attributes(starts_at: ends_at)
|
next_enabled_phase.assign_attributes(starts_at: ends_at)
|
||||||
if next_enabled_phase.dates_range_valid?
|
if next_enabled_phase.invalid_dates_range?
|
||||||
phase_name = I18n.t("budgets.phase.#{next_enabled_phase.kind}")
|
phase_name = I18n.t("budgets.phase.#{next_enabled_phase.kind}")
|
||||||
error = I18n.t('budgets.phases.errors.next_phase_dates_invalid', phase_name: phase_name)
|
error = I18n.t('budgets.phases.errors.next_phase_dates_invalid', phase_name: phase_name)
|
||||||
errors.add(:ends_at, error)
|
errors.add(:ends_at, error)
|
||||||
|
|||||||
@@ -13,4 +13,22 @@ namespace :budgets do
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
namespace :phases do
|
||||||
|
desc "Generates Phases for existing Budgets without them & migrates description_* attributes"
|
||||||
|
task generate_missing: :environment do
|
||||||
|
Budget.where.not(id: Budget::Phase.all.pluck(:budget_id).uniq.compact).each do |budget|
|
||||||
|
Budget::Phase::PHASE_KINDS.each do |phase|
|
||||||
|
Budget::Phase.create(
|
||||||
|
budget: budget,
|
||||||
|
kind: phase,
|
||||||
|
description: budget.send("description_#{phase}"),
|
||||||
|
prev_phase: phases&.last,
|
||||||
|
starts_at: phases&.last&.ends_at || Date.current,
|
||||||
|
ends_at: (phases&.last&.ends_at || Date.current) + 1.month
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user