added state machine for invoice

This commit is contained in:
olegphenomenon 2023-02-07 11:05:40 +02:00
parent c9ed31771b
commit a4bf967e1d
3 changed files with 83 additions and 34 deletions

View file

@ -9,8 +9,9 @@ module EisBilling
before_action :load_invoice, only: :update
def update
if @invoice.update(modified_params) && payment_orders_handler
# if @invoice.update(modified_params) && payment_orders_handler
state = InvoiceStateMachine.new(invoice: @invoice, status: params[:status])
if @invoice.update(modified_params) && state.call
render json: {
message: 'Invoice data was successfully updated',
}, status: :ok
@ -25,41 +26,41 @@ module EisBilling
private
def payment_orders_handler
return false if @invoice.cancelled? && status.paid? || @invoice.cancelled? && status.issued?
return false if @invoice.paid? && (status.failed? || status.cancelled?)
# def payment_orders_handler
# return false if @invoice.cancelled? && status.paid? || @invoice.cancelled? && status.issued?
# return false if @invoice.paid? && (status.failed? || status.cancelled?)
case
when @invoice.paid? && status.paid?
true
when @invoice.unpaid? && status.issued?
true
when @invoice.cancelled? && (status.cancelled? || status.failed?)
true
when status.issued?
@invoice.cancel_manualy
when status.paid?
@invoice.autobind_manually
else
@invoice.cancel
end
end
# case
# when @invoice.paid? && status.paid?
# true
# when @invoice.unpaid? && status.issued?
# true
# when @invoice.cancelled? && (status.cancelled? || status.failed?)
# true
# when status.issued?
# @invoice.cancel_manualy
# when status.paid?
# @invoice.autobind_manually
# else
# @invoice.cancel
# end
# end
def status
status = case params[:status]
when 'paid'
'paid'
when 'cancelled'
'cancelled'
when 'failed'
'failed'
else
'unpaid'
end
# def status
# status = case params[:status]
# when 'paid'
# 'paid'
# when 'cancelled'
# 'cancelled'
# when 'failed'
# 'failed'
# else
# 'unpaid'
# end
Struct.new(:paid?, :cancelled?, :issued?, :failed?)
.new(status == PAID, status == CANCELLED, status == ISSUED, status == FAILED)
end
# Struct.new(:paid?, :cancelled?, :issued?, :failed?)
# .new(status == PAID, status == CANCELLED, status == ISSUED, status == FAILED)
# end
def load_invoice
@invoice = Invoice.find_by(number: params[:invoice][:invoice_number])