change logic of state machine

This commit is contained in:
olegphenomenon 2023-02-07 12:55:02 +02:00
parent a4bf967e1d
commit e00e87a15c

View file

@ -17,28 +17,36 @@ class InvoiceStateMachine
when :unpaid when :unpaid
mark_as_unpaid mark_as_unpaid
else else
raise "Inavalid state #{invoice.status}" push_error
end end
end end
private private
def mark_as_paid def mark_as_paid
raise "Inavalid state #{invoice.status}" unless invoice.unpaid? || invoice.paid? return push_error unless invoice.payable? || invoice.paid?
invoice.autobind_manually invoice.autobind_manually
invoice
end end
def mark_as_cancel def mark_as_cancel
# Paid invoice cannot be cancelled? return push_error unless invoice.cancellable? || invoice.cancelled?
raise "Inavalid state #{invoice.status}" unless invoice.cancellable? || invoice.cancelled?
invoice.cancel invoice.cancel
invoice
end end
def mark_as_unpaid def mark_as_unpaid
raise "Inavalid state #{invoice.status}" unless invoice.paid? && invoice.payment_orders.present? || invoice.unpaid? return push_error if invoice.paid? || !invoice.cancellable?
invoice.cancel_manualy invoice.cancel_manualy
invoice
end
def push_error
invoice.errors.add(:base, "Inavalid state #{status}")
false
end end
end end