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
mark_as_unpaid
else
raise "Inavalid state #{invoice.status}"
push_error
end
end
private
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
end
def mark_as_cancel
# Paid invoice cannot be cancelled?
raise "Inavalid state #{invoice.status}" unless invoice.cancellable? || invoice.cancelled?
return push_error unless invoice.cancellable? || invoice.cancelled?
invoice.cancel
invoice
end
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
end
def push_error
invoice.errors.add(:base, "Inavalid state #{status}")
false
end
end