Skip to content

Instantly share code, notes, and snippets.

@klippx
Created July 2, 2015 06:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save klippx/51b224f888cc12cdea4b to your computer and use it in GitHub Desktop.
Save klippx/51b224f888cc12cdea4b to your computer and use it in GitHub Desktop.
Final result: PouchOrder::WorkflowManager
module PouchOrder::WorkflowManager
extend ActiveSupport::Concern
included do
include Workflow
workflow_column :status
workflow do
state :new do
event :receive, transitions_to: :received
end
state :received do
event :replace, transitions_to: :replaced
event :make_half_tablet_substitution_control, transitions_to: :half_tablet_substitution_control
end
state :half_tablet_substitution_control do
event :substitutions_done, transitions_to: :interaction_control
end
state :interaction_control do
event :interactions_done, transitions_to: :dosage_control
end
state :dosage_control do
event :confirm_dosage, transitions_to: :awaiting_approval
end
state :awaiting_approval do
event :approve, transitions_to: :approved
event :reject, transitions_to: :rejected
event :replace, transitions_to: :replaced
end
state :approved do
event :upload, transitions_to: :uploading
event :replace, transitions_to: :replaced
end
state :uploading do
event :uploaded, transitions_to: :sent_to_machine
end
state :sent_to_machine do
event :sort, transitions_to: :sorted
end
state :sorted do
event :ship, transitions_to: :shipped
end
state :shipped do
event :unship, transitions_to: :unshipped
end
state :unshipped do
event :ship, transitions_to: :shipped
end
state :rejected
state :replaced
on_transition do |from, to, triggering_event, *event_args|
write_audit(
action: 'update',
audited_changes: {
status: [from, to]
}
)
end
end
end
def on_received_entry(new_state, event, *args)
make_half_tablet_substitution_control!
Resque.enqueue(HalfTabletSubstitutionJob, self.id)
end
def substitutions_done
Resque.enqueue(InteractionJob, self.id)
end
def interactions_done
Resque.enqueue(DosageControlJob, self.id)
end
def on_awaiting_approval_entry(new_state, event, *args)
approve! if Settings.pouch_order_auto_approval == "true" && can_be_auto_approved?
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment