Packages

PLM Product Lifecycle Management

Retired package: retired

Current section

Files

Jump to
plm lib actors account.ex
Raw

lib/actors/account.ex

defmodule BPE.Account do
@moduledoc """
`PLM.Account` is a process that handles user investments.
"""
require ERP
require BPE
require Record
Record.defrecord(:close_account, [])
Record.defrecord(:tx, [])
def def() do
BPE.process(
name: :n2o.user(),
flows: [
BPE.sequenceFlow(source: :Created, target: :Init),
BPE.sequenceFlow(source: :Init, target: :Upload),
BPE.sequenceFlow(source: :Upload, target: :Payment),
BPE.sequenceFlow(source: :Payment, target: [:Signatory, :Process]),
BPE.sequenceFlow(source: :Process, target: [:Process, :Final]),
BPE.sequenceFlow(source: :Signatory, target: [:Process, :Final])
],
tasks: [
BPE.userTask(name: :Created, module: BPE.Account),
BPE.userTask(name: :Init, module: BPE.Account),
BPE.userTask(name: :Upload, module: BPE.Account),
BPE.userTask(name: :Signatory, module: BPE.Account),
BPE.serviceTask(name: :Payment, module: BPE.Account),
BPE.serviceTask(name: :Process, module: BPE.Account),
BPE.endEvent(name: :Final, module: BPE.Account)
],
beginEvent: :Init,
endEvent: :Final,
events: [BPE.messageEvent(name: :PaymentReceived)]
)
end
def action({:request, :Created}, proc) do
IO.inspect("First Step")
{:reply, proc}
end
def action({:request, :Init}, proc) do
IO.inspect("Second Step")
{:reply, proc}
end
def action({:request, :Payment}, proc) do
payment = :bpe.doc({:payment_notification}, proc)
case payment do
[] -> {:reply, :Process, BPE.process(proc, docs: [tx()])}
_ -> {:reply, :Signatory, Proc}
end
end
def action({:request, :Signatory}, proc) do
{:reply, :Process, proc}
end
def action({:request, :Process}, proc) do
case :bpe.doc(close_account(), proc) do
close_account() -> {:reply, :Final, proc}
_ -> {:reply, proc}
end
end
def action({:request, :Upload}, proc), do: {:reply, proc}
def action({:request, :Final}, proc), do: {:reply, proc}
end