defmodule Stripe.Climate.Order do
use Stripe.Entity
@moduledoc "Orders represent your intent to purchase a particular Climate product. When you create an order, the\npayment is deducted from your merchant balance."
(
defstruct [
:amount_fees,
:amount_subtotal,
:amount_total,
:beneficiary,
:canceled_at,
:cancellation_reason,
:certificate,
:confirmed_at,
:created,
:currency,
:delayed_at,
:delivered_at,
:delivery_details,
:expected_delivery_year,
:id,
:livemode,
:metadata,
:metric_tons,
:object,
:product,
:product_substituted_at,
:status
]
@typedoc "The `climate.order` type.\n\n * `amount_fees` Total amount of [Frontier](https://frontierclimate.com/)'s service fees in the currency's smallest unit.\n * `amount_subtotal` Total amount of the carbon removal in the currency's smallest unit.\n * `amount_total` Total amount of the order including fees in the currency's smallest unit.\n * `beneficiary` \n * `canceled_at` Time at which the order was canceled. Measured in seconds since the Unix epoch.\n * `cancellation_reason` Reason for the cancellation of this order.\n * `certificate` For delivered orders, a URL to a delivery certificate for the order.\n * `confirmed_at` Time at which the order was confirmed. Measured in seconds since the Unix epoch.\n * `created` Time at which the object was created. Measured in seconds since the Unix epoch.\n * `currency` Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase, representing the currency for this order.\n * `delayed_at` Time at which the order's expected_delivery_year was delayed. Measured in seconds since the Unix epoch.\n * `delivered_at` Time at which the order was delivered. Measured in seconds since the Unix epoch.\n * `delivery_details` Details about the delivery of carbon removal for this order.\n * `expected_delivery_year` The year this order is expected to be delivered.\n * `id` Unique identifier for the object.\n * `livemode` Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode.\n * `metadata` Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format.\n * `metric_tons` Quantity of carbon removal that is included in this order.\n * `object` String representing the object's type. Objects of the same type share the same value.\n * `product` Unique ID for the Climate `Product` this order is purchasing.\n * `product_substituted_at` Time at which the order's product was substituted for a different product. Measured in seconds since the Unix epoch.\n * `status` The current status of this order.\n"
@type t :: %__MODULE__{
amount_fees: integer,
amount_subtotal: integer,
amount_total: integer,
beneficiary: term,
canceled_at: integer | nil,
cancellation_reason: binary | nil,
certificate: binary | nil,
confirmed_at: integer | nil,
created: integer,
currency: binary,
delayed_at: integer | nil,
delivered_at: integer | nil,
delivery_details: term,
expected_delivery_year: integer,
id: binary,
livemode: boolean,
metadata: term,
metric_tons: binary,
object: binary,
product: binary | Stripe.Climate.Product.t(),
product_substituted_at: integer | nil,
status: binary
}
)
(
@typedoc "Publicly sharable reference for the end beneficiary of carbon removal. Assumed to be the Stripe account if not set."
@type beneficiary :: %{optional(:public_name) => binary}
)
(
nil
@doc "<p>Retrieves the details of a Climate order object with the given ID.</p>\n\n#### Details\n\n * Method: `get`\n * Path: `/v1/climate/orders/{order}`\n"
(
@spec retrieve(
order :: binary(),
params :: %{optional(:expand) => list(binary)},
opts :: Keyword.t()
) ::
{:ok, Stripe.Climate.Order.t()} | {:error, Stripe.ApiErrors.t()} | {:error, term()}
def retrieve(order, params \\ %{}, opts \\ []) do
path =
Stripe.OpenApi.Path.replace_path_params(
"/v1/climate/orders/{order}",
[
%OpenApiGen.Blueprint.Parameter{
in: "path",
name: "order",
required: true,
schema: %OpenApiGen.Blueprint.Parameter.Schema{
name: "order",
title: nil,
type: "string",
items: [],
properties: [],
any_of: []
}
}
],
[order]
)
Stripe.Request.new_request(opts)
|> Stripe.Request.put_endpoint(path)
|> Stripe.Request.put_params(params)
|> Stripe.Request.put_method(:get)
|> Stripe.Request.make_request()
end
)
)
(
nil
@doc "<p>Lists all Climate order objects. The orders are returned sorted by creation date, with the\nmost recently created orders appearing first.</p>\n\n#### Details\n\n * Method: `get`\n * Path: `/v1/climate/orders`\n"
(
@spec list(
params :: %{
optional(:ending_before) => binary,
optional(:expand) => list(binary),
optional(:limit) => integer,
optional(:starting_after) => binary
},
opts :: Keyword.t()
) ::
{:ok, Stripe.List.t(Stripe.Climate.Order.t())}
| {:error, Stripe.ApiErrors.t()}
| {:error, term()}
def list(params \\ %{}, opts \\ []) do
path = Stripe.OpenApi.Path.replace_path_params("/v1/climate/orders", [], [])
Stripe.Request.new_request(opts)
|> Stripe.Request.put_endpoint(path)
|> Stripe.Request.put_params(params)
|> Stripe.Request.put_method(:get)
|> Stripe.Request.make_request()
end
)
)
(
nil
@doc "<p>Creates a Climate order object for a given Climate product. The order will be processed immediately\nafter creation and payment will be deducted your Stripe balance.</p>\n\n#### Details\n\n * Method: `post`\n * Path: `/v1/climate/orders`\n"
(
@spec create(
params :: %{
optional(:amount) => integer,
optional(:beneficiary) => beneficiary,
optional(:currency) => binary,
optional(:expand) => list(binary),
optional(:metadata) => %{optional(binary) => binary},
optional(:metric_tons) => binary,
optional(:product) => binary
},
opts :: Keyword.t()
) ::
{:ok, Stripe.Climate.Order.t()} | {:error, Stripe.ApiErrors.t()} | {:error, term()}
def create(params \\ %{}, opts \\ []) do
path = Stripe.OpenApi.Path.replace_path_params("/v1/climate/orders", [], [])
Stripe.Request.new_request(opts)
|> Stripe.Request.put_endpoint(path)
|> Stripe.Request.put_params(params)
|> Stripe.Request.put_method(:post)
|> Stripe.Request.make_request()
end
)
)
(
nil
@doc "<p>Updates the specified order by setting the values of the parameters passed.</p>\n\n#### Details\n\n * Method: `post`\n * Path: `/v1/climate/orders/{order}`\n"
(
@spec update(
order :: binary(),
params :: %{
optional(:beneficiary) => beneficiary | binary,
optional(:expand) => list(binary),
optional(:metadata) => %{optional(binary) => binary}
},
opts :: Keyword.t()
) ::
{:ok, Stripe.Climate.Order.t()} | {:error, Stripe.ApiErrors.t()} | {:error, term()}
def update(order, params \\ %{}, opts \\ []) do
path =
Stripe.OpenApi.Path.replace_path_params(
"/v1/climate/orders/{order}",
[
%OpenApiGen.Blueprint.Parameter{
in: "path",
name: "order",
required: true,
schema: %OpenApiGen.Blueprint.Parameter.Schema{
name: "order",
title: nil,
type: "string",
items: [],
properties: [],
any_of: []
}
}
],
[order]
)
Stripe.Request.new_request(opts)
|> Stripe.Request.put_endpoint(path)
|> Stripe.Request.put_params(params)
|> Stripe.Request.put_method(:post)
|> Stripe.Request.make_request()
end
)
)
(
nil
@doc "<p>Cancels a Climate order. You can cancel an order within 30 days of creation. Stripe refunds the\nreservation <code>amount_subtotal</code>, but not the <code>amount_fees</code> for user-triggered cancellations. Frontier\nmight cancel reservations if suppliers fail to deliver. If Frontier cancels the reservation, Stripe\nprovides 90 days advance notice and refunds the <code>amount_total</code>.</p>\n\n#### Details\n\n * Method: `post`\n * Path: `/v1/climate/orders/{order}/cancel`\n"
(
@spec cancel(
order :: binary(),
params :: %{optional(:expand) => list(binary)},
opts :: Keyword.t()
) ::
{:ok, Stripe.Climate.Order.t()} | {:error, Stripe.ApiErrors.t()} | {:error, term()}
def cancel(order, params \\ %{}, opts \\ []) do
path =
Stripe.OpenApi.Path.replace_path_params(
"/v1/climate/orders/{order}/cancel",
[
%OpenApiGen.Blueprint.Parameter{
in: "path",
name: "order",
required: true,
schema: %OpenApiGen.Blueprint.Parameter.Schema{
name: "order",
title: nil,
type: "string",
items: [],
properties: [],
any_of: []
}
}
],
[order]
)
Stripe.Request.new_request(opts)
|> Stripe.Request.put_endpoint(path)
|> Stripe.Request.put_params(params)
|> Stripe.Request.put_method(:post)
|> Stripe.Request.make_request()
end
)
)
end