mirror of
https://github.com/internetee/registry.git
synced 2025-07-31 15:06:23 +02:00
added state machine for invoice
This commit is contained in:
parent
c9ed31771b
commit
a4bf967e1d
3 changed files with 83 additions and 34 deletions
44
app/models/invoice_state_machine.rb
Normal file
44
app/models/invoice_state_machine.rb
Normal file
|
@ -0,0 +1,44 @@
|
|||
# enum status: %i[unpaid paid cancelled failed]
|
||||
|
||||
class InvoiceStateMachine
|
||||
attr_reader :invoice, :status
|
||||
|
||||
def initialize(invoice:, status:)
|
||||
@invoice = invoice
|
||||
@status = status.to_sym
|
||||
end
|
||||
|
||||
def call
|
||||
case status
|
||||
when :paid
|
||||
mark_as_paid
|
||||
when :cancelled
|
||||
mark_as_cancel
|
||||
when :unpaid
|
||||
mark_as_unpaid
|
||||
else
|
||||
raise "Inavalid state #{invoice.status}"
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def mark_as_paid
|
||||
raise "Inavalid state #{invoice.status}" unless invoice.unpaid? || invoice.paid?
|
||||
|
||||
invoice.autobind_manually
|
||||
end
|
||||
|
||||
def mark_as_cancel
|
||||
# Paid invoice cannot be cancelled?
|
||||
raise "Inavalid state #{invoice.status}" unless invoice.cancellable? || invoice.cancelled?
|
||||
|
||||
invoice.cancel
|
||||
end
|
||||
|
||||
def mark_as_unpaid
|
||||
raise "Inavalid state #{invoice.status}" unless invoice.paid? && invoice.payment_orders.present? || invoice.unpaid?
|
||||
|
||||
invoice.cancel_manualy
|
||||
end
|
||||
end
|
|
@ -30,6 +30,10 @@ module PaymentOrders
|
|||
valid_hmac? && valid_amount? && valid_account?
|
||||
end
|
||||
|
||||
def payment_reference?
|
||||
response['payment_reference'].present?
|
||||
end
|
||||
|
||||
def settled_payment?
|
||||
SUCCESSFUL_PAYMENT.include?(response['payment_state'])
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue