MiraitSystems/enju_trunk

View on GitHub
app/controllers/budget_categories_controller.rb

Summary

Maintainability
B
5 hrs
Test Coverage
class BudgetCategoriesController < ApplicationController
  before_filter :check_client_ip_address
  load_and_authorize_resource
  before_filter :prepare_options, :only => [:new, :edit]

  def index
    page = params[:page] || 1
    @budget_categories = Kaminari.paginate_array(BudgetCategory.all).page(page)
  end

  # GET /budget_categories/search_name.json
  def search_name
    struct_classification = Struct.new(:id, :text)
    if params[:budget_category_id]
      budget_category = BudgetCategory.where(id: params[:budget_category_id]).select("id, display_name, name").first
      result = struct_classification.new(budget_category.id, "#{budget_category.display_name}(#{budget_category.name})")
    else
      result = []
      budget_categories = params[:group_id].blank? ? BudgetCategory : BudgetCategory.where(:group_id => params[:group_id])
      budget_categories = budget_categories.where("name like '%#{params[:search_phrase]}%' OR display_name like '%#{params[:search_phrase]}%'") unless params[:search_phrase].blank?
      budget_categories = budget_categories.select("id, display_name, name").limit(10) || []
      budget_categories.each do |budget_category|
        result << struct_classification.new(budget_category.id, "#{budget_category.display_name}(#{budget_category.name})")
      end
    end
    respond_to do |format|
      format.json { render :text => result.to_json }
    end 
  end 

  def new
    @budget_category = BudgetCategory.new
  end

  def create
    @budget_category = BudgetCategory.new(params[:budget_category])

    respond_to do |format|
      if @budget_category.save
        flash[:notice] = t('controller.successfully_created', :model => t('activerecord.models.budget_category'))
        format.html { redirect_to(@budget_category) }
        format.json { render :json => @budget_category, :status => :created, :location => @budget_category }
      else
        format.html { render :action => "new" }
        format.json { render :json => @budget_category.errors, :status => :unprocessable_entity }
      end
    end
  end

  def edit
    @budget_category = BudgetCategory.find(params[:id])
  end

  def update
    @budget_category = BudgetCategory.find(params[:id])
    if params[:move]
      move_position(@budget_category, params[:move])
      return
    end 
    respond_to do |format|
      if @budget_category.update_attributes(params[:budget_category])
        flash[:notice] = t('controller.successfully_updated', :model => t('activerecord.models.budget_category'))
        format.html { redirect_to(@budget_category) }
        format.json { head :no_content }
      else
        format.html { render :action => "edit" }
        format.json { render :json => @budget_category.errors, :status => :unprocessable_entity }
      end
    end
  end

  def show
    @budget_category = BudgetCategory.find(params[:id])
  end

  def destroy
    @budget_category = BudgetCategory.find(params[:id])
    respond_to do |format|
      if @budget_category.budgets.empty?
        @budget_category.destroy
        format.html { redirect_to(budget_categories_url) }
        format.json { head :no_content }
      else
        format.html { render :action => :index }
        format.json { render :json => @budget_category.errors, :status => :unprocessable_entity }
      end
    end
  end

  private
  def prepare_options
    @budget_groups = Keycode.where(:name => 'budget_category.group') || []
  end

end