You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1008 B
39 lines
1008 B
class ProjectPackages::RefuseApplyService < ApplicationService
|
|
Error = Class.new(StandardError)
|
|
|
|
attr_reader :apply, :package, :params
|
|
|
|
def initialize(apply, params)
|
|
@apply = apply
|
|
@package = apply.project_package
|
|
@params = params
|
|
end
|
|
|
|
def call
|
|
raise Error, '该状态下不能进行此操作' unless apply.may_refuse? && package.may_refuse?
|
|
|
|
ActiveRecord::Base.transaction do
|
|
apply.refuse
|
|
apply.reason = params[:reason].to_s.strip
|
|
apply.save!
|
|
|
|
# 发布
|
|
package.refuse!
|
|
|
|
# 消息
|
|
send_refuse_notify!
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def send_refuse_notify!
|
|
Tiding.where(container_id: package.id, container_type: 'ProjectPackage',
|
|
tiding_type: 'Apply', status: 0).update_all(status: 1)
|
|
|
|
Tiding.create!(user_id: package.creator_id, trigger_user_id: 1,
|
|
container_id: package.id, container_type: 'ProjectPackage',
|
|
tiding_type: 'System', status: 2, extra: apply.reason)
|
|
end
|
|
end
|