use serde::{Deserialize, Serialize};
use uuid::Uuid;
use chrono::{DateTime, Utc};
use rust_decimal::Decimal;
use crate::domain::entity::*;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct PosClosingEntryId(pub Uuid);
impl PosClosingEntryId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for PosClosingEntryId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<PosClosingEntryId> for Uuid {
fn from(id: PosClosingEntryId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosClosingEntryDto {
pub id: PosClosingEntryId,
pub pos_profile_id: Uuid,
pub opening_entry_id: Uuid,
pub closed_at: DateTime<Utc>,
pub cashier_party_id: Uuid,
pub totals_by_method: Option<serde_json::Value>,
pub grand_total: Decimal,
pub invoice_count: i32,
pub difference_total: Decimal,
pub status: PosClosingStatus,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosClosingEntrySummary {
pub id: PosClosingEntryId,
pub status: PosClosingStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosClosingEntryRef {
pub id: PosClosingEntryId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct PosInvoiceId(pub Uuid);
impl PosInvoiceId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for PosInvoiceId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<PosInvoiceId> for Uuid {
fn from(id: PosInvoiceId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosInvoiceDto {
pub id: PosInvoiceId,
pub pos_profile_id: Uuid,
pub opening_entry_id: Uuid,
pub branch_id: Option<Uuid>,
pub customer_id: Option<Uuid>,
pub pos_table_id: Option<Uuid>,
pub receipt_number: String,
pub client_uuid: Option<Uuid>,
pub posting_at: DateTime<Utc>,
pub net_total: Decimal,
pub tax_total: Decimal,
pub grand_total: Decimal,
pub rounding_adjustment: Decimal,
pub rounded_total: Decimal,
pub paid_total: Decimal,
pub change_due: Decimal,
pub billing_invoice_id: Option<Uuid>,
pub payment_entry_id: Option<Uuid>,
pub is_return: bool,
pub return_against: Option<Uuid>,
pub status: PosInvoiceStatus,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosInvoiceSummary {
pub id: PosInvoiceId,
pub status: PosInvoiceStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosInvoiceRef {
pub id: PosInvoiceId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct PosInvoiceItemId(pub Uuid);
impl PosInvoiceItemId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for PosInvoiceItemId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<PosInvoiceItemId> for Uuid {
fn from(id: PosInvoiceItemId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosInvoiceItemDto {
pub id: PosInvoiceItemId,
pub pos_invoice_id: Uuid,
pub item_id: Uuid,
pub description: Option<String>,
pub client_uuid: Option<Uuid>,
pub course: Option<i32>,
pub quantity: Decimal,
pub unit_price: Decimal,
pub discount_amount: Decimal,
pub net_amount: Decimal,
pub revenue_account_id: Option<Uuid>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosInvoiceItemSummary {
pub id: PosInvoiceItemId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosInvoiceItemRef {
pub id: PosInvoiceItemId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct PosPaymentId(pub Uuid);
impl PosPaymentId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for PosPaymentId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<PosPaymentId> for Uuid {
fn from(id: PosPaymentId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosPaymentDto {
pub id: PosPaymentId,
pub pos_invoice_id: Uuid,
pub payment_method: PosPaymentMethod,
pub amount: Decimal,
pub reference_no: Option<String>,
pub client_uuid: Option<Uuid>,
pub payment_entry_id: Option<Uuid>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosPaymentSummary {
pub id: PosPaymentId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosPaymentRef {
pub id: PosPaymentId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct PosProfileId(pub Uuid);
impl PosProfileId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for PosProfileId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<PosProfileId> for Uuid {
fn from(id: PosProfileId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosProfileDto {
pub id: PosProfileId,
pub branch_id: Option<Uuid>,
pub name: String,
pub default_customer_id: Option<Uuid>,
pub currency: String,
pub income_account_id: Option<Uuid>,
pub receivable_account_id: Option<Uuid>,
pub cash_account_id: Option<Uuid>,
pub write_off_account_id: Option<Uuid>,
pub tax_account_id: Option<Uuid>,
pub tax_rate: Decimal,
pub tax_template_ids: Option<serde_json::Value>,
pub warehouse_id: Option<Uuid>,
pub cogs_account_id: Option<Uuid>,
pub inventory_account_id: Option<Uuid>,
pub allow_discount: bool,
pub cash_rounding_strategy: PosCashRoundingStrategy,
pub cash_rounding_unit: Decimal,
pub status: PosProfileStatus,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosProfileSummary {
pub id: PosProfileId,
pub name: String,
pub status: PosProfileStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosProfileRef {
pub id: PosProfileId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct PosOpeningEntryId(pub Uuid);
impl PosOpeningEntryId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for PosOpeningEntryId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<PosOpeningEntryId> for Uuid {
fn from(id: PosOpeningEntryId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosOpeningEntryDto {
pub id: PosOpeningEntryId,
pub pos_profile_id: Uuid,
pub branch_id: Option<Uuid>,
pub cashier_party_id: Uuid,
pub opened_at: DateTime<Utc>,
pub opening_balances: Option<serde_json::Value>,
pub status: PosSessionStatus,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosOpeningEntrySummary {
pub id: PosOpeningEntryId,
pub status: PosSessionStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosOpeningEntryRef {
pub id: PosOpeningEntryId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct PosCashMovementId(pub Uuid);
impl PosCashMovementId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for PosCashMovementId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<PosCashMovementId> for Uuid {
fn from(id: PosCashMovementId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosCashMovementDto {
pub id: PosCashMovementId,
pub pos_profile_id: Uuid,
pub opening_entry_id: Uuid,
pub cashier_party_id: Uuid,
pub movement_type: PosCashMovementType,
pub amount: Decimal,
pub reason: Option<String>,
pub moved_at: DateTime<Utc>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosCashMovementSummary {
pub id: PosCashMovementId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosCashMovementRef {
pub id: PosCashMovementId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct PosDiscountId(pub Uuid);
impl PosDiscountId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for PosDiscountId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<PosDiscountId> for Uuid {
fn from(id: PosDiscountId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosDiscountDto {
pub id: PosDiscountId,
pub name: String,
pub percentage: Decimal,
pub description: Option<String>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosDiscountSummary {
pub id: PosDiscountId,
pub name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosDiscountRef {
pub id: PosDiscountId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct PosManagerPinId(pub Uuid);
impl PosManagerPinId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for PosManagerPinId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<PosManagerPinId> for Uuid {
fn from(id: PosManagerPinId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosManagerPinDto {
pub id: PosManagerPinId,
pub employee_party_id: Uuid,
pub pin_hash: String,
pub failed_attempts: i32,
pub locked_until: Option<DateTime<Utc>>,
pub last_attempt_at: Option<DateTime<Utc>>,
pub last_attempt_ip: Option<String>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosManagerPinSummary {
pub id: PosManagerPinId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosManagerPinRef {
pub id: PosManagerPinId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct PosFloorPlanId(pub Uuid);
impl PosFloorPlanId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for PosFloorPlanId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<PosFloorPlanId> for Uuid {
fn from(id: PosFloorPlanId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosFloorPlanDto {
pub id: PosFloorPlanId,
pub branch_id: Option<Uuid>,
pub name: String,
pub position: Option<i32>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosFloorPlanSummary {
pub id: PosFloorPlanId,
pub name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosFloorPlanRef {
pub id: PosFloorPlanId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct PosTableId(pub Uuid);
impl PosTableId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for PosTableId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<PosTableId> for Uuid {
fn from(id: PosTableId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosTableDto {
pub id: PosTableId,
pub pos_floor_plan_id: Uuid,
pub name: Option<String>,
pub seats: Option<i32>,
pub shape: Option<String>,
pub position: Option<serde_json::Value>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosTableSummary {
pub id: PosTableId,
pub name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PosTableRef {
pub id: PosTableId,
}