internetee/registry

View on GitHub
app/controllers/eis_billing/invoices_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
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