app/controllers/eis_billing/directo_response_controller.rb
class EisBilling::DirectoResponseController < EisBilling::BaseController
def update
response = params[:response]
xml_data = params[:xml_data]
@month = params.fetch(:month, false)
process_directo_response(xml_data, response)
render status: :ok, json: { messege: 'Should return new directo number' }
end
private
def process_directo_response(xml, req)
Rails.logger.info "[Directo] - Responded with body: #{xml}"
Nokogiri::XML(req).css('Result').each do |res|
if @month
mark_invoice_as_sent(res: res, req: req)
else
inv = Invoice.find_by(number: res.attributes['docid'].value.to_i)
mark_invoice_as_sent(invoice: inv, res: res, req: req)
end
end
end
def mark_invoice_as_sent(invoice: nil, res:, req:)
directo_record = Directo.new(response: res.as_json.to_h,
request: req, invoice_number: res.attributes['docid'].value.to_i)
if invoice
directo_record.item = invoice
invoice.update(in_directo: true)
end
directo_record.save!
end
end