diff --git a/app/avo/resources/promise.rb b/app/avo/resources/promise.rb index cfccd40..b35ccd2 100644 --- a/app/avo/resources/promise.rb +++ b/app/avo/resources/promise.rb @@ -79,7 +79,8 @@ def fields field :text, as: :textarea # field :extracted_keywords_concepts, as: :textarea # field :intended_impact_and_objectives, as: :textarea - field :what_it_means_for_canadians, as: :textarea + field :what_it_means_for_canadians_for_avo, as: :textarea, + name: "What it means for Canadians" # field :linked_evidence_ids, as: :textarea # field :relevant_departments, as: :textarea # field :commitment_history_rationale, as: :code diff --git a/app/models/promise.rb b/app/models/promise.rb index 6d225c7..694465c 100644 --- a/app/models/promise.rb +++ b/app/models/promise.rb @@ -8,6 +8,8 @@ class Promise < ApplicationRecord has_one :lead_department_promise, -> { where(is_lead: true) }, class_name: "DepartmentPromise" has_one :lead_department, through: :lead_department_promise, source: :department + validate :validate_what_it_means_for_canadians_for_avo + def self.ransackable_attributes(auth_object = nil) [ "concise_title" ] end @@ -52,6 +54,47 @@ def update_progress!(inline: false) self.save! end + # Virtual attribute for Avo admin interface + def what_it_means_for_canadians_for_avo + JSON.generate(what_it_means_for_canadians || []) + end + + # Handle array format for Avo admin interface + def what_it_means_for_canadians_for_avo=(value) + error_message = "Must be a valid array format" + if value.is_a?(String) + stripped = value.strip + if stripped.empty? + self.what_it_means_for_canadians = [] + @what_it_means_for_canadians_for_avo_error = nil + return + end + if stripped.start_with?("[") && stripped.end_with?("]") + begin + parsed = JSON.parse(stripped) + if parsed.is_a?(Array) + self.what_it_means_for_canadians = parsed + @what_it_means_for_canadians_for_avo_error = nil + else + @what_it_means_for_canadians_for_avo_error = error_message + end + rescue JSON::ParserError + @what_it_means_for_canadians_for_avo_error = error_message + end + else + @what_it_means_for_canadians_for_avo_error = error_message + end + else + self.what_it_means_for_canadians = value + @what_it_means_for_canadians_for_avo_error = nil + end + end + + private def validate_what_it_means_for_canadians_for_avo + if defined?(@what_it_means_for_canadians_for_avo_error) && @what_it_means_for_canadians_for_avo_error.present? + errors.add(:what_it_means_for_canadians_for_avo, @what_it_means_for_canadians_for_avo_error) + end + end def self.client_fields [