defmodule Meta.Billing.Invoice do alias Meta.Billing.{Partner, Invoice} alias Meta.Odoo use Ecto.Schema embedded_schema do field :display_name, :string field :invoice_date, :date field :invoice_date_due, :date field :amount_total, :float field :access_url, :string field :state, :string end def get_all_for(%Partner{} = partner) do fields = ["id", "display_name", "invoice_date", "invoice_date_due", "amount_total", "access_url", "state"] result = Odoo.query([ "account.move", "search_read", [[["commercial_partner_id", "=", partner.id]]], %{"fields" => fields} ]) structify = fn raw -> args = raw |> Enum.map(fn {k, v} -> {String.to_atom(k), v} end) struct(Invoice, args) end case result do {:ok, entries} -> entries |> Enum.map(structify) _ -> nil end end end