Current section

Files

Jump to
campaign_flow lib campaign_flow client invoices.ex
Raw

lib/campaign_flow/client/invoices.ex

defmodule CampaignFlow.Client.Invoices do
@moduledoc """
Invoice resource operations for the Campaign Flow API.
"""
alias CampaignFlow.Client
alias CampaignFlow.Client.Request
@doc """
Lists all invoices.
## Options
* `:page` - Page number for pagination
* `:per_page` - Number of items per page
## Examples
{:ok, invoices} = CampaignFlow.Client.Invoices.list(client)
{:ok, invoices} = CampaignFlow.Client.Invoices.list(client, page: 2)
"""
@spec list(Client.t(), keyword()) :: {Client.Request.response(), Client.t()}
def list(client, params \\ []) do
Request.get(client, "/invoices", params: params)
end
@doc """
Retrieves a specific invoice by ID.
## Examples
{:ok, invoice} = CampaignFlow.Client.Invoices.get(client, 123)
"""
@spec get(Client.t(), integer()) :: {Client.Request.response(), Client.t()}
def get(client, id) do
Request.get(client, "/invoices/#{id}")
end
@doc """
Applies a payment to an invoice.
## Examples
{:ok, payment} = CampaignFlow.Client.Invoices.create_payment(client, 123, %{
amount: 500.00,
payment_method: "credit_card"
})
"""
@spec create_payment(Client.t(), integer(), map()) :: {Client.Request.response(), Client.t()}
def create_payment(client, invoice_id, params) do
Request.post(client, "/invoices/#{invoice_id}/payments", json: params)
end
@doc """
Retrieves a specific payment for an invoice.
## Examples
{:ok, payment} = CampaignFlow.Client.Invoices.get_payment(client, 123, 1)
"""
@spec get_payment(Client.t(), integer(), integer()) :: {Client.Request.response(), Client.t()}
def get_payment(client, invoice_id, payment_number) do
Request.get(client, "/invoices/#{invoice_id}/payments/#{payment_number}")
end
end