redmine-workflow-engine/app/controllers/workflow_steps_controller.rb
ioresponse e67fb92189 Initial commit: Redmine Workflow Engine Plugin
Features:
- Custom workflow creation per project/tracker
- Step-by-step workflow definition
- Assignees per step (user, role group, department)
- Next/Previous step navigation
- Reject to first step
- Skip step (admin only)
- Step deadline settings
- Workflow dashboard
- Group member selection when proceeding

🤖 Generated with Claude Code
2025-12-23 00:16:43 +09:00

92 lines
2.6 KiB
Ruby

class WorkflowStepsController < ApplicationController
layout 'admin'
before_action :require_admin
before_action :find_workflow, only: [:create, :update, :destroy, :move]
before_action :find_step, only: [:update, :destroy, :move]
def create
@step = @workflow.workflow_steps.build(step_params)
if @step.save
flash[:notice] = '단계가 추가되었습니다.'
else
flash[:error] = @step.errors.full_messages.join(', ')
end
redirect_to custom_workflow_path(@workflow)
end
def update
if @step.update(step_params)
flash[:notice] = '단계가 수정되었습니다.'
else
flash[:error] = @step.errors.full_messages.join(', ')
end
redirect_to custom_workflow_path(@workflow)
end
def destroy
@step.destroy
flash[:notice] = '단계가 삭제되었습니다.'
redirect_to custom_workflow_path(@workflow)
end
def move
direction = params[:direction]
if direction == 'up' && @step.position > 0
swap_step = @workflow.workflow_steps.find_by(position: @step.position - 1)
if swap_step
swap_step.update(position: @step.position)
@step.update(position: @step.position - 1)
end
elsif direction == 'down'
swap_step = @workflow.workflow_steps.find_by(position: @step.position + 1)
if swap_step
swap_step.update(position: @step.position)
@step.update(position: @step.position + 1)
end
end
redirect_to custom_workflow_path(@workflow)
end
# 담당자 추가
def add_assignee
@step = WorkflowStep.find(params[:step_id])
assignee = @step.workflow_step_assignees.build(
assignee_type: params[:assignee_type],
assignee_id: params[:assignee_id]
)
if assignee.save
flash[:notice] = '담당자가 추가되었습니다.'
else
flash[:error] = assignee.errors.full_messages.join(', ')
end
redirect_to custom_workflow_path(@step.custom_workflow)
end
# 담당자 제거
def remove_assignee
@step = WorkflowStep.find(params[:step_id])
assignee = @step.workflow_step_assignees.find(params[:id])
assignee.destroy
flash[:notice] = '담당자가 제거되었습니다.'
redirect_to custom_workflow_path(@step.custom_workflow)
end
private
def find_workflow
@workflow = CustomWorkflow.find(params[:workflow_id])
rescue ActiveRecord::RecordNotFound
render_404
end
def find_step
@step = @workflow.workflow_steps.find(params[:id])
rescue ActiveRecord::RecordNotFound
render_404
end
def step_params
params.require(:workflow_step).permit(:name, :description, :issue_status_id, :is_start, :is_end, :due_days)
end
end