class AssignTaskCommand < Command attribute :task, Task attribute :owner, User attribute :due_at, DateTime attribute :created_by, User attribute :comments, String attribute :distribute_at, DateTime attribute :distribute_rule_name, String attribute :assign_case, Integer validates :task, :owner, presence: true def initialize(params) self.attributes = { task: params[:task] || (params.has_key?(:task_id) && Task.find(params[:task_id])), owner: params[:owner] || (params.has_key?(:owner_id) && User.find(params[:owner_id])), due_at: params[:due_at] || Task.default_due_date, created_by: params[:created_by] || (params[:created_by_id] && User.find(params[:created_by_id])), distribute_at: params[:distribute_at], distribute_rule_name: params[:distribute_rule_name], comments: params[:comments], assign_case: params[:assign_case] } end protected def format_activity_comment result = "Task assigned to #{owner.full_name}" result << "; #{comments}" if comments end def format_case_assignment_comment result = 'Case assignment followed task assignment' result << "; #{comments}" if comments end def execute_self @previous_owner = task.owner task.owner = owner task.due_at = due_at if task.due_at.nil? || due_at.nil? || due_at > task.due_at self.task.distribute_at = distribute_at self.task.distribute_rule_name = distribute_rule_name task.save end def prepare_sub_commands cmds = [CreateActivityCommand.new(case: task.case, task: task, created_by: created_by, activity_type: 'TASKASSIGNED', comments: format_activity_comment)] case when assign_case == AssignCase::UNASSIGNED && task.case.owner.nil? cmds << AssignCaseCommand.new(case: task.case, owner: owner, comments: format_case_assignment_comment) when assign_case == AssignCase::ALWAYS cmds << AssignCaseCommand.new(case: task.case, owner: owner, comments: format_case_assignment_comment) end cmds end end