Justinzh1/Emunah

View on GitHub
app/controllers/submittals_controller.rb

Summary

Maintainability
C
7 hrs
Test Coverage
class SubmittalsController < ApplicationController

    def submittal_params
        params.require(:submittal).permit(:title, :notes, :family_id)
    end

    def new
        @family = Family.find(params[:family_id])
        @users = User.all
    end

    # def all
    #     @submittal = Submittal.all.order(:reviewed)
    # end

    def show
        @user ||= User.find(session[:user_id]) if session[:user_id]
        @submittal = Submittal.find(params[:id])
    end

    def edit
        @family = Family.find(params[:family_id])
        @submittal = Submittal.find(params[:id])
        @users = User.all
        # Include all users
    end

    def update 
        @submittal = Submittal.find(params[:id])
        @submittal.update_attributes!(submittal_params)
        @family = Family.find_by(params[:family_id])
        user = User.find(params[:user][:id])
        if !params[:task].nil?
            task_title, task_notes = params[:task][:title], params[:task][:notes] 
            completed = params[:task_completed].nil? ? false : true
            if !task_title.nil? and !task_notes.nil? and !task_title.empty? and !task_notes.empty?
                @task = Task.create!(:title => task_title, :notes => task_notes, :completed => completed)
                user.managements << Management.new(:task_id => @task.id, :user_id => user.id)
                user.save!
              # @task = Task.create!(task_params.merge(:users => [User.first, User.second]))
            end
        end
        flash[:notice] = "Submittal for #{@family.family_name} was successfully updated."
        redirect_to family_path(@family)
    end 

    def index
        # @user ||= User.find(session[:user_id]) if session[:user_id]
        # @family = Family.find_by(params[:family_id])
  #       @submittals = @family.submittals
        @user ||= User.find(session[:user_id]) if session[:user_id]
        @submittals = Submittal.all.order(:reviewed)
    end

    def create
        @family = Family.find(params[:family_id])
        title, notes = submittal_params[:title], submittal_params[:notes]
        if !title.nil? and !notes.nil? and !title.empty? and !notes.empty?
            @family.submittals.build(submittal_params.merge(:family_name => @family.family_name)).save!
            # Tasks, need to change to handle multiple tasks later
            # currently we could do,
            # :users => params[:task][:task_users] where params[:task][:task_users] is an array of User objects
            # but params[:task][:task_users] front-end isn't there to handle User objects

            # task_title, task_notes = task_params["title"], task_params["notes"]
            # if !task_title.nil? and !task_notes.nil? and !task_title.empty? and !task_notes.empty?
            # end
            user = User.find(params[:user][:id])
            if !params[:task].nil?
                task_title, task_notes = params[:task][:title], params[:task][:notes] 
                completed = params[:task_completed].nil? ? false : true
                if !task_title.nil? and !task_notes.nil? and !task_title.empty? and !task_notes.empty?
                    @task = Task.create!(:title => task_title, :notes => task_notes, :completed => completed)
                    user.managements << Management.new(:task_id => @task.id, :user_id => user.id)
                    user.save!
                end
            end 

            redirect_to family_path(@family), :flash => { :success => "Submittal successfully created for family: #{@family.family_name}"}
        else
            redirect_to new_family_submittal_path(@family.id), :flash => { :error => "Please fill out all fields"}
        end
    end

     def destroy
        submittal = Submittal.find_by_id_and_family_id(params[:id], params[:family_id])
        submittal.destroy!
    end

    def approve
        @user ||= User.find(session[:user_id]) if session[:user_id]
        if @user.can_revoke?
            submittal = Submittal.find(params[:submittal_id])
            submittal.approve
            submittal.save!
            redirect_to family_path(params[:family_id]), :flash => { success: "Submittal was successfully approved."}
        else
            redirect_to family_path(params[:family_id]), :flash => { error: "Unauthorized"}
        end
    end

    def revoke
        @user ||= User.find(session[:user_id]) if session[:user_id]
        if @user.can_revoke?
            submittal = Submittal.find(params[:submittal_id])
            submittal.revoke
            submittal.save!
            redirect_to family_path(params[:family_id]), :flash => { success: "Submittal was successfully revoked."}
        else
            redirect_to family_path(params[:family_id]), :flash => { error: "Unauthorized"}
        end
    end 

end