use serde::{Deserialize, Serialize};
use uuid::Uuid;
use chrono::{DateTime, Utc, NaiveDate};
use rust_decimal::Decimal;
use crate::domain::entity::*;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct MaintenanceRequestId(pub Uuid);
impl MaintenanceRequestId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for MaintenanceRequestId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<MaintenanceRequestId> for Uuid {
fn from(id: MaintenanceRequestId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MaintenanceRequestDto {
pub id: MaintenanceRequestId,
pub name: String,
pub description: Option<String>,
pub request_date: NaiveDate,
pub schedule_date: Option<DateTime<Utc>>,
pub schedule_end: Option<DateTime<Utc>>,
pub close_date: Option<NaiveDate>,
pub duration: Decimal,
pub owner_user_id: Option<Uuid>,
pub user_id: Option<Uuid>,
pub asset_id: Option<Uuid>,
pub stage_id: Uuid,
pub kanban_state: RequestKanbanState,
pub priority: RequestPriority,
pub maintenance_type: MaintenanceType,
pub recurring: bool,
pub repeat_interval: i32,
pub repeat_unit: RepeatUnit,
pub repeat_type: RepeatType,
pub repeat_until: Option<NaiveDate>,
pub successor_request_id: Option<Uuid>,
pub successor_of_request_id: Option<Uuid>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MaintenanceRequestSummary {
pub id: MaintenanceRequestId,
pub name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MaintenanceRequestRef {
pub id: MaintenanceRequestId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct MaintenanceScheduleId(pub Uuid);
impl MaintenanceScheduleId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for MaintenanceScheduleId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<MaintenanceScheduleId> for Uuid {
fn from(id: MaintenanceScheduleId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MaintenanceScheduleDto {
pub id: MaintenanceScheduleId,
pub asset_id: Uuid,
pub name: String,
pub interval_days: i32,
pub next_due_date: NaiveDate,
pub status: MaintenanceScheduleStatus,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MaintenanceScheduleSummary {
pub id: MaintenanceScheduleId,
pub name: String,
pub status: MaintenanceScheduleStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MaintenanceScheduleRef {
pub id: MaintenanceScheduleId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct MaintenanceStageId(pub Uuid);
impl MaintenanceStageId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for MaintenanceStageId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<MaintenanceStageId> for Uuid {
fn from(id: MaintenanceStageId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MaintenanceStageDto {
pub id: MaintenanceStageId,
pub name: String,
pub sequence: i32,
pub fold: bool,
pub done: bool,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MaintenanceStageSummary {
pub id: MaintenanceStageId,
pub name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MaintenanceStageRef {
pub id: MaintenanceStageId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct MaintenanceVisitId(pub Uuid);
impl MaintenanceVisitId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for MaintenanceVisitId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<MaintenanceVisitId> for Uuid {
fn from(id: MaintenanceVisitId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MaintenanceVisitDto {
pub id: MaintenanceVisitId,
pub asset_id: Uuid,
pub schedule_id: Option<Uuid>,
pub maintenance_type: MaintenanceType,
pub status: VisitStatus,
pub warehouse_id: Option<Uuid>,
pub warranty_claim_id: Option<Uuid>,
pub scheduled_date: NaiveDate,
pub performed_date: Option<NaiveDate>,
pub labor_cost: Decimal,
pub parts_cost: Decimal,
pub total_cost: Decimal,
pub maintenance_expense_account_id: Option<Uuid>,
pub parts_inventory_account_id: Option<Uuid>,
pub labor_payable_account_id: Option<Uuid>,
pub journal_id: Option<Uuid>,
pub accounting_post_id: Option<Uuid>,
pub notes: Option<String>,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MaintenanceVisitSummary {
pub id: MaintenanceVisitId,
pub status: VisitStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MaintenanceVisitRef {
pub id: MaintenanceVisitId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct MaintenanceVisitPartId(pub Uuid);
impl MaintenanceVisitPartId {
pub fn new(id: Uuid) -> Self {
Self(id)
}
pub fn into_inner(self) -> Uuid {
self.0
}
}
impl From<Uuid> for MaintenanceVisitPartId {
fn from(id: Uuid) -> Self {
Self(id)
}
}
impl From<MaintenanceVisitPartId> for Uuid {
fn from(id: MaintenanceVisitPartId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MaintenanceVisitPartDto {
pub id: MaintenanceVisitPartId,
pub visit_id: Uuid,
pub item_id: Uuid,
pub quantity: Decimal,
pub unit_cost: Decimal,
pub amount: Decimal,
pub metadata: serde_json::Value,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MaintenanceVisitPartSummary {
pub id: MaintenanceVisitPartId,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MaintenanceVisitPartRef {
pub id: MaintenanceVisitPartId,
}