1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
//! Model struct for InvoicePaymentRequest type.

use serde::{Deserialize, Serialize};

use super::{
    enums::{InvoiceAutomaticPaymentSource, InvoiceRequestMethod, InvoiceRequestType},
    InvoicePaymentReminder, Money,
};

/// Represents a payment request for an [Invoice].
///
/// Invoices can specify a maximum of 13 payment requests, with up to 12 `INSTALLMENT` request
/// types. For more information, see [Configuring payment
/// requests](https://developer.squareup.com/docs/invoices-api/create-publish-invoices#payment-requests).
///
/// Adding `INSTALLMENT` payment requests to an invoice requires an [Invoices Plus
/// subscription](https://developer.squareup.com/docs/invoices-api/overview#invoices-plus-subscription).
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
pub struct InvoicePaymentRequest {
    /// The payment method for an automatic payment.
    ///
    /// The default value is `NONE`.
    pub automatic_payment_source: Option<InvoiceAutomaticPaymentSource>,
    /// The ID of the credit or debit card on file to charge for the payment request. To get the
    /// cards on file for a customer, call
    /// [ListCards](https://developer.squareup.com/reference/square/cards-api/list-cards) and
    /// include the `customer_id` of the invoice recipient.
    ///
    /// Min Length: 1, Max Length: 255
    pub card_id: Option<String>,
    /// **Read only** The amount of the payment request, computed using the order amount and
    /// information from the various payment request fields (`request_type`,
    /// `fixed_amount_requested_money`, and `percentage_requested`).
    pub computed_amount_money: Option<Money>,
    ///The due date (in the invoice's time zone) for the payment request, in `YYYY-MM-DD` format.
    /// This field is required to create a payment request. If an `automatic_payment_source` is
    /// defined for the request, Square charges the payment source on this date.
    ///
    /// After this date, the invoice becomes overdue. For example, a payment `due_date` of
    /// 2021-03-09 with a `timezone` of America/Los_Angeles becomes overdue at midnight on March 9
    /// in America/Los_Angeles (which equals a UTC timestamp of 2021-03-10T08:00:00Z).
    pub due_date: Option<String>,
    /// If the payment request specifies `DEPOSIT` or `INSTALLMENT` as the `request_type`, this
    /// indicates the request amount. You cannot specify this when `request_type` is `BALANCE` or
    /// when the payment request includes the `percentage_requested` field.
    pub fixed_amount_requested_money: Option<Money>,
    /// Specifies the amount for the payment request in percentage:
    ///
    /// - When the payment `request_type` is `DEPOSIT`, it is the percentage of the order's total
    /// amount.
    /// - When the payment `request_type` is `INSTALLMENT`, it is the percentage of the order's
    /// total less the deposit, if requested. The sum of the `percentage_requested` in all
    /// installment payment requests must be equal to 100.
    ///
    /// You cannot specify this when the payment `request_type` is `BALANCE` or when the payment
    /// request specifies the `fixed_amount_requested_money` field.
    pub percentage_requested: Option<String>,
    /// A list of one or more reminders to send for the payment request.
    pub reminders: Option<Vec<InvoicePaymentReminder>>,
    /// Identifies the payment request type. This type defines how the payment request amount is
    /// determined. This field is required to create a payment request.
    pub request_type: Option<InvoiceRequestType>,
    /// **Read only** If the most recent payment was a cash payment in a currency that rounds cash
    /// payments (such as, `CAD` or `AUD`) and the payment is rounded from `computed_amount_money`
    /// in the payment request, then this field specifies the rounding adjustment applied. This
    /// amount might be negative.
    pub rounding_adjustment_included_money: Option<Money>,
    /// If set to true, the Square-hosted invoice page (the `public_url` field of the invoice)
    /// provides a place for the customer to pay a tip.
    ///
    /// This field is allowed only on the final payment request and the payment `request_type` must
    /// be `BALANCE` or `INSTALLMENT`.
    pub tipping_enabled: Option<bool>,
    /// **Read only** The amount of money already paid for the specific payment request. This amount
    /// might include a rounding adjustment if the most recent invoice payment was in cash in a
    /// currency that rounds cash payments (such as, `CAD` or `AUD`).
    pub total_completed_amount_money: Option<Money>,
    /// The Square-generated ID of the payment request in an [Invoice].
    ///
    /// Min Length: 1, Max Length: 255
    pub uid: Option<String>,
    /// Indicates how Square processes the payment request. DEPRECATED at version 2021-01-21.
    /// Replaced by the `Invoice.delivery_method` and
    /// `InvoicePaymentRequest.automatic_payment_source` fields.
    ///
    /// One of the following is required when creating an invoice:
    ///
    /// (Recommended) The `delivery_method` field of the invoice. To configure an automatic payment,
    /// the `automatic_payment_source` field of the payment request is also required.
    /// This `request_method` field. Note that `invoice` objects returned in responses do not
    /// include `request_method`.
    #[deprecated]
    pub request_method: Option<InvoiceRequestMethod>,
}