import Dependencies import Foundation public struct PurchaseOrder: Codable, Equatable, Identifiable, Sendable { public let id: Int public var workOrder: Int? public var materials: String public var customer: String public var truckStock: Bool public var createdBy: User public var createdFor: Employee public var vendorBranch: VendorBranch.Detail public var createdAt: Date? public var updatedAt: Date? public init( id: Int, workOrder: Int? = nil, materials: String, customer: String, truckStock: Bool, createdBy: User, createdFor: Employee, vendorBranch: VendorBranch.Detail, createdAt: Date?, updatedAt: Date? ) { self.id = id self.workOrder = workOrder self.materials = materials self.customer = customer self.truckStock = truckStock self.createdBy = createdBy self.createdFor = createdFor self.vendorBranch = vendorBranch self.createdAt = createdAt self.updatedAt = updatedAt } } public extension PurchaseOrder { struct Create: Codable, Sendable { public let id: Int? public let workOrder: Int? public let materials: String public let customer: String public let truckStock: Bool? public let createdByID: User.ID public let createdForID: Employee.ID public let vendorBranchID: VendorBranch.ID public init( id: Int? = nil, workOrder: Int? = nil, materials: String, customer: String, truckStock: Bool? = nil, createdByID: User.ID, createdForID: Employee.ID, vendorBranchID: VendorBranch.ID ) { self.id = id self.workOrder = workOrder self.materials = materials self.customer = customer self.truckStock = truckStock self.createdByID = createdByID self.createdForID = createdForID self.vendorBranchID = vendorBranchID } } struct CreateIntermediate: Codable, Sendable { public let id: Int? public let workOrder: Int? public let materials: String public let customer: String public let truckStock: Bool? public let createdForID: Employee.ID public let vendorBranchID: VendorBranch.ID public init( id: Int? = nil, workOrder: Int? = nil, materials: String, customer: String, truckStock: Bool? = nil, createdForID: Employee.ID, vendorBranchID: VendorBranch.ID ) { self.id = id self.workOrder = workOrder self.materials = materials self.customer = customer self.truckStock = truckStock self.createdForID = createdForID self.vendorBranchID = vendorBranchID } public func toCreate(createdByID userID: User.ID) -> PurchaseOrder.Create { .init( id: id, workOrder: workOrder, materials: materials, customer: customer, truckStock: truckStock, createdByID: userID, createdForID: createdForID, vendorBranchID: vendorBranchID ) } } enum SearchContext: Sendable { case customer(String) case vendor(VendorBranch.ID) case employee(Employee.ID) } } #if DEBUG public extension PurchaseOrder.CreateIntermediate { static func generateMocks( count: Int = 50, employees: [Employee], vendorBranches: [VendorBranch] ) -> [Self] { precondition(employees.count > 0) precondition(vendorBranches.count > 0) return (0 ... count).reduce(into: [Self]()) { array, _ in array.append(.init( materials: "Some materials", customer: "\(RandomNames.firstNames.randomElement()!) \(RandomNames.lastNames.randomElement()!)", createdForID: employees.randomElement()!.id, vendorBranchID: vendorBranches.randomElement()!.id )) } } } #endif