app/controllers/eis_billing/invoices_controller.rb
module EisBilling
class InvoicesController < BaseController
before_action :load_invoice, only: :update
def update
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
else
render json: {
error: {
message: @invoice.errors.full_messages
}
}, status: :unprocessable_entity
end
end
private
def load_invoice
@invoice = Invoice.find_by(number: params[:invoice][:invoice_number])
return if @invoice.present?
render json: {
error: {
message: "Invoice with #{params[:invoice][:invoice_number]} number not found",
}
}, status: :not_found and return
end
def modified_params
{
in_directo: params[:invoice][:in_directo],
e_invoice_sent_at: params[:invoice][:sent_at_omniva],
}
end
end
end