You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
5.0 KiB
98 lines
5.0 KiB
namespace :generate_sales_documentation do |
|
desc "Generate documentation for hard sales validations" |
|
task :describe_sales_validations, %i[year] => :environment do |_task, args| |
|
form_year = args[:year]&.to_i |
|
raise "Usage: rake generate_sales_documentation:describe_sales_validations['year']" if form_year.blank? |
|
|
|
form = FormHandler.instance.forms[FormHandler.instance.form_name_from_start_year(form_year, "sales")] |
|
raise "No form found for given year" if form.blank? |
|
|
|
client = OpenAI::Client.new(access_token: ENV["OPENAI_API_KEY"]) |
|
|
|
documentation_generator = DocumentationGenerator.new |
|
validation_classes = [Validations::Sales::SetupValidations, |
|
Validations::Sales::HouseholdValidations, |
|
Validations::Sales::PropertyValidations, |
|
Validations::Sales::FinancialValidations, |
|
Validations::Sales::SaleInformationValidations, |
|
Validations::SharedValidations, |
|
Validations::LocalAuthorityValidations] |
|
all_validation_methods, all_helper_methods = documentation_generator.validation_and_helper_methods(validation_classes) |
|
documentation_generator.describe_hard_validations(client, form, all_validation_methods, all_helper_methods, "sales") |
|
end |
|
|
|
desc "Generate documentation for soft sales validations" |
|
task :describe_soft_sales_validations, %i[year] => :environment do |_task, args| |
|
form_year = args[:year]&.to_i |
|
raise "Usage: rake generate_sales_documentation:describe_soft_sales_validations['year']" if form_year.blank? |
|
|
|
form = FormHandler.instance.forms[FormHandler.instance.form_name_from_start_year(form_year, "sales")] |
|
raise "No form found for given year" if form.blank? |
|
|
|
client = OpenAI::Client.new(access_token: ENV["OPENAI_API_KEY"]) |
|
documentation_generator = DocumentationGenerator.new |
|
all_helper_methods, all_validation_methods = documentation_generator.get_soft_sales_methods |
|
|
|
documentation_generator.describe_soft_validations(client, form, all_validation_methods, all_helper_methods, "sales") |
|
end |
|
|
|
desc "Generate documentation for hard bu sales validations" |
|
task :describe_bu_sales_validations, %i[year] => :environment do |_task, args| |
|
form_year = args[:year]&.to_i |
|
raise "Usage: rake generate_sales_documentation:describe_bu_sales_validations['year']" if form_year.blank? |
|
|
|
form = FormHandler.instance.forms[FormHandler.instance.form_name_from_start_year(form_year, "sales")] |
|
raise "No form found for given year" if form.blank? |
|
|
|
row_parser_class = "BulkUpload::Sales::Year#{form_year}::RowParser".constantize |
|
client = OpenAI::Client.new(access_token: ENV["OPENAI_API_KEY"]) |
|
all_validation_methods = row_parser_class.private_instance_methods.select { |method| method.starts_with?("validate_") } |
|
all_helper_methods = row_parser_class.private_instance_methods(false) + row_parser_class.instance_methods(false) - all_validation_methods |
|
field_mapping_for_errors = row_parser_class.new.send("field_mapping_for_errors") |
|
|
|
DocumentationGenerator.new.describe_bu_validations(client, form, row_parser_class, all_validation_methods, all_helper_methods, field_mapping_for_errors, "sales") |
|
end |
|
|
|
desc "Generate documentation for sales numeric validations" |
|
task :add_numeric_sales_validations, %i[year] => :environment do |_task, args| |
|
form_year = args[:year]&.to_i |
|
raise "Usage: rake generate_sales_documentation:add_numeric_sales_validations['year']" if form_year.blank? |
|
|
|
form = FormHandler.instance.forms[FormHandler.instance.form_name_from_start_year(form_year, "sales")] |
|
raise "No form found for given year" if form.blank? |
|
|
|
form.numeric_questions.each do |question| |
|
next unless question.min || question.max |
|
|
|
field = question.id |
|
min = [question.prefix, question.min].join("") if question.min |
|
max = [question.prefix, question.max].join("") if question.max |
|
|
|
error_message = I18n.t("validations.shared.numeric.above_min", field:, min:) |
|
validation_name = "minimum" |
|
validation_description = "Field value is lower than the minimum value" |
|
|
|
if min && max |
|
validation_name = "range" |
|
error_message = I18n.t("validations.shared.numeric.within_range", field:, min:, max:) |
|
validation_description = "Field value is lower than the minimum value or higher than the maximum value" |
|
end |
|
|
|
if LogValidation.where(validation_name:, field:, log_type: "sales").exists? |
|
|
|
Rails.logger.info("Validation #{validation_name} already exists for #{field}") |
|
next |
|
end |
|
|
|
LogValidation.create!(log_type: "sales", |
|
validation_name:, |
|
description: validation_description, |
|
field:, |
|
error_message:, |
|
case: validation_description, |
|
section: form.get_question(field, nil)&.subsection&.id, |
|
validation_type: validation_name, |
|
hard_soft: "hard") |
|
end |
|
end |
|
end
|
|
|