app/controllers/setup/project_rules_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true

class Setup::ProjectRulesController < PrivateController
  helper_method :project_rule
  attr_reader :project_rule

  def index
    project = current_project(
      raise_if_published: false
    )
    data_compound = project.project_anchor
                           .nearest_data_compound_for(Date.new) || DataCompound.from(project)
    @orbf_project = MapProjectToOrbfProject.new(
      project,
      data_compound.indicators,
      data_compound.category_combos,
      data_compound.data_elements
    ).map
  end

  def new
    @project_rule = current_project.payment_rules.build(rule_attributes: { kind: "payment" })
    project_rule.rule.formulas.build
  end

  def edit
    @project_rule = current_project.payment_rules.find(params[:id])
    project_rule.valid?
    project_rule.rule.valid?
  end

  def create
    payment_rules_attributes = rule_params
    payment_rules_attributes[:rule_attributes][:kind] = "payment"
    @project_rule = current_project.payment_rules.build(payment_rules_attributes)
    Rails.logger.info project_rule.valid?
    Rails.logger.info project_rule.errors.full_messages
    if project_rule.save
      flash[:notice] = "Rule created !"
      redirect_to(root_path)
    else
      project_rule.rule.formulas.build if project_rule.rule.formulas.empty?
      render action: "new"
    end
  end

  def update
    @project_rule = current_project.payment_rules.find(params[:id])
    project_rule.update(rule_params)
    Rails.logger.info project_rule.valid?
    Rails.logger.info project_rule.errors.full_messages
    if project_rule.save
      flash[:notice] = "Rule updated !"
    else
      project_rule.rule.formulas.build if project_rule.rule.formulas.empty?
    end

    render action: "edit"
  end

  private

  def rule_params
    params.require(:payment_rule)
          .permit(
            :frequency,
            package_ids:     [],
            rule_attributes: [
              :id,
              :name,
              formulas_attributes: Formula::WHITELISTED_FIELDS
            ]
          )
  end
end