use super::work_order_item::WorkOrderItem;
use super::MOD_PATH;
use crate::common::{note::Note, related_party::RelatedParty};
use crate::tmf646::appointment::AppointmentRef;
use crate::{HasId, Uri};
use serde::{Deserialize, Serialize};
use tmflib_derive::HasId;
const CLASS_PATH: &str = "workorder";
#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
pub enum WorkOrderStateType {
#[default]
Acknowledged,
Rejected,
Pending,
Held,
InProgress,
Cancelled,
Completed,
Failed,
Partial,
AccessingCancellation,
PendingCancellation,
}
#[derive(Clone, Debug, Default, Deserialize, HasId, Serialize)]
pub struct WorkOrder {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "@type")]
r#type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "@baseType")]
base_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "@schemaLocation")]
schema_location: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub href: Option<Uri>,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub state: Option<WorkOrderStateType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub appointment: Option<AppointmentRef>,
pub work_order_item: Option<Vec<WorkOrderItem>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub note: Option<Vec<Note>>,
#[serde(skip_serializing_if = "Option::is_none")]
related_party: Option<Vec<RelatedParty>>,
}
impl WorkOrder {
pub fn new() -> WorkOrder {
WorkOrder {
state: Some(WorkOrderStateType::default()),
r#type: Some(WorkOrder::get_class()),
base_type: Some(WorkOrder::get_class()),
..WorkOrder::create()
}
}
pub fn add_item(&mut self, item: WorkOrderItem) {
match self.work_order_item.as_mut() {
Some(woi) => {
woi.push(item);
}
None => {
self.work_order_item = Some(vec![item]);
}
}
}
}