app/controllers/setup/packages_controller.rb

Summary

Maintainability
A
25 mins
Test Coverage
C
78%
# frozen_string_literal: true

class Setup::PackagesController < PrivateController
  helper_method :package
  attr_reader :package

  def edit
    @package = current_project.packages.find(params[:id])
    render :edit
  end

  def update
    @package = current_project.packages.find(params[:id])

    package.update(params_package)

    update_package_constants

    if package.valid? && params[:package][:main_entity_groups]
      entity_groups = package.create_package_entity_groups(
        params[:package][:main_entity_groups],
        params[:package][:target_entity_groups]
      )
      package.package_entity_groups = []
      package.package_entity_groups.create(entity_groups)
      package.save!
      package.package_states.each(&:save!)
      SynchroniseDegDsWorker.perform_async(current_project.project_anchor.id)
      flash[:success] = "Package updated"
      redirect_to(root_path)
    else
      Rails.logger.info "!!!!!!!! package invalid : #{package.errors.full_messages.join(',')}"
      flash[:failure] = "Package doesn't look valid..."
      flash[:failure] += "Please select at least one organisation group" unless params[:package][:main_entity_groups]
      render :edit

    end
  end

  def new
    @package = current_project.packages.build
  end

  def create
    @package = current_project.packages.build(params_package)

    state_ids = params_package[:state_ids].reject(&:empty?)

    update_package_constants

    package.states = current_project.states.find(state_ids)

    if package.invalid?
      flash[:failure] = "Package not valid..."
      render "new"
      return
    end

    entity_groups = package.create_package_entity_groups(
      params[:package][:main_entity_groups],
      params[:package][:target_entity_groups]
    )
    package.data_element_group_ext_ref = "todo"
    if package.save

      package.package_entity_groups.create(entity_groups)
      SynchroniseDegDsWorker.perform_async(current_project.project_anchor.id)
      flash[:success] = "Package of Activities created success"
      redirect_to(root_path)
    else
      flash[:failure] = "Error creating Package of Activities"
      render "new"
    end
  end

  private

  def update_package_constants
    package.package_states.each do |package_state|
      de_external_reference = params["data_elements"][package_state.state_id.to_s] if params["data_elements"]
      package_state.de_external_reference = de_external_reference if de_external_reference
    end
  end

  def params_package
    params.require(:package).permit(
      :name, :description, :frequency, :kind, :ogs_reference, :include_main_orgunit,
      :loop_over_combo_ext_id,
      state_ids: [], activity_ids: [], groupsets_ext_refs: []
    )
  end
end