75 lines
1.7 KiB
Ruby
75 lines
1.7 KiB
Ruby
class TaskRequestsController < ApplicationController
|
|
layout "project"
|
|
|
|
before_action :set_project
|
|
before_action :build_task_request, only: [:new, :create]
|
|
before_action :set_task_request, only: [:show, :edit, :update, :cancel]
|
|
|
|
def index
|
|
@task_requests = task_requests.order_by_recent.paginate(page: params[:page])
|
|
end
|
|
|
|
def new
|
|
end
|
|
|
|
def create
|
|
@task_request.attributes = task_request_params_with_email
|
|
|
|
if @task_request.save
|
|
log_create_analytics
|
|
redirect_to [@project, :task_requests], notice: t(".notice")
|
|
else
|
|
render :new
|
|
end
|
|
end
|
|
|
|
def show
|
|
end
|
|
|
|
def edit
|
|
end
|
|
|
|
def update
|
|
if @task_request.update(task_request_params)
|
|
redirect_to [@project, :task_requests], notice: t(".notice")
|
|
else
|
|
render :edit
|
|
end
|
|
end
|
|
|
|
def cancel
|
|
@task_request.cancelled!
|
|
redirect_to [@project, :task_requests], notice: t(".notice")
|
|
end
|
|
|
|
private
|
|
|
|
def task_request_params
|
|
params.require(:task_request).permit(:description, :deadline, :time_allowed, :additional_notes, files: [])
|
|
end
|
|
|
|
def task_request_params_with_email
|
|
task_request_params.merge(user_email: Current.user.email)
|
|
end
|
|
|
|
def set_project
|
|
@project = policy_scope(Project).find(params[:project_id])
|
|
end
|
|
|
|
def set_task_request
|
|
@task_request = authorize policy_scope(TaskRequest).find(params[:id])
|
|
end
|
|
|
|
def task_requests
|
|
authorize policy_scope(@project.task_requests)
|
|
end
|
|
|
|
def build_task_request
|
|
@task_request = authorize @project.task_requests.build
|
|
end
|
|
|
|
def log_create_analytics
|
|
TrackAnalyticsJob.perform_later(Current.user, Current.account, :track_create_task_request, user_agent: request.user_agent, user_ip: request.remote_ip)
|
|
end
|
|
end
|