paymentlib/dto/
invoice_response.rsuse chrono::naive::serde::ts_milliseconds;
use chrono::NaiveDateTime;
use common::enums::payment_gateway::PaymentGateway;
use common::utils::serialize_option_naive_date;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use crate::dto::project_request::ProjectRequest;
use crate::enums::invoice_status::InvoiceStatus;
use crate::enums::invoice_status::InvoiceConfirmationStatus;
use crate::jsonb::items::Items;
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct InvoiceResponse {
pub id: Uuid,
#[serde(skip_serializing_if = "Option::is_none")]
pub ver: Option<i32>,
pub currency: String,
#[serde(with = "ts_milliseconds")]
pub issued_date: NaiveDateTime,
#[serde(skip_serializing_if = "Option::is_none")]
pub items: Option<Vec<Items>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(default)]
#[serde(with = "serialize_option_naive_date")]
pub due_date: Option<NaiveDateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
pub number: Option<i32>,
pub amount: f64,
pub tax: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub issuer: Option<Uuid>,
#[serde(skip_serializing_if = "Option::is_none")]
pub issuer_org: Option<Uuid>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payer: Option<Uuid>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payer_org: Option<Uuid>,
#[serde(skip_serializing_if = "Option::is_none")]
pub attachments: Option<Vec<String>>,
pub invoice_status: InvoiceStatus,
pub user_id: Uuid,
#[serde(skip_serializing_if = "Option::is_none")]
pub project: Option<ProjectRequest>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payment_gateway: Option<PaymentGateway>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payment_plan: Option<Uuid>,
#[serde(skip_serializing_if = "Option::is_none")]
pub discounts_applied: Option<Vec<Uuid>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub entity_id: Option<Uuid>,
#[serde(skip_serializing_if = "Option::is_none")]
pub item_id: Option<Uuid>,
pub confirmation_status: InvoiceConfirmationStatus,}