foodcoops/foodsoft

View on GitHub
app/controllers/home_controller.rb

Summary

Maintainability
A
1 hr
Test Coverage
class HomeController < ApplicationController
  def index
    # unaccepted tasks
    @unaccepted_tasks = Task.order(:due_date).unaccepted_tasks_for(current_user)
    # task in next week
    @next_tasks = Task.order(:due_date).next_assigned_tasks_for(current_user)
    # count tasks with no responsible person
    # tasks for groups the current user is not a member are ignored
    @unassigned_tasks = Task.order(:due_date).next_unassigned_tasks_for(current_user)
  end

  def profile; end

  def reference_calculator
    if current_user.ordergroup
      @types = FinancialTransactionType.with_name_short.order(:name)
      @bank_accounts = @types.includes(:bank_account).map(&:bank_account).uniq.compact
      @bank_accounts = [BankAccount.last] if @bank_accounts.empty?
    else
      redirect_to root_url, alert: I18n.t('group_orders.errors.no_member')
    end
  end

  def update_profile
    if @current_user.update(user_params)
      @current_user.ordergroup.update(ordergroup_params) if ordergroup_params
      session[:locale] = @current_user.locale
      redirect_to my_profile_url, notice: I18n.t('home.changes_saved')
    else
      render :profile
    end
  end

  def ordergroup
    @user = @current_user
    @ordergroup = @user.ordergroup

    if @ordergroup.nil?
      redirect_to root_path, alert: I18n.t('home.no_ordergroups')
    else

      @ordergroup = Ordergroup.include_transaction_class_sum.find(@ordergroup.id)

      sort = if params['sort']
               case params['sort']
               when 'date' then 'created_on'
               when 'note'   then 'note'
               when 'amount' then 'amount'
               when 'date_reverse' then 'created_on DESC'
               when 'note_reverse' then 'note DESC'
               when 'amount_reverse' then 'amount DESC'
               end
             else
               'created_on DESC'
             end

      @financial_transactions = @ordergroup.financial_transactions.visible.page(params[:page]).per(@per_page).order(sort)
      if params[:query].present?
        @financial_transactions = @financial_transactions.where('financial_transactions.note LIKE ?',
                                                                "%#{params[:query]}%")
      end

    end
  end

  # cancel personal memberships direct from the myProfile-page
  def cancel_membership
    membership = if params[:membership_id]
                   @current_user.memberships.find(params[:membership_id])
                 else
                   @current_user.memberships.find_by_group_id!(params[:group_id])
                 end
    membership.destroy
    redirect_to my_profile_path, notice: I18n.t('home.ordergroup_cancelled', group: membership.group.name)
  end

  protected

  def user_params
    params
      .require(:user)
      .permit(:first_name, :last_name, :email, :phone,
              :password, :password_confirmation).merge(params[:user].slice(:settings_attributes))
  end

  def ordergroup_params
    return unless params[:user][:ordergroup]

    params.require(:user).require(:ordergroup).permit(:contact_address)
  end
end