/* Options: Date: 2026-08-01 04:46:54 SwiftVersion: 6.0 Version: 8.80 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://api.dev.dynamics.trendsic.com //BaseClass: //AddModelExtensions: True //AddServiceStackTypes: True //MakePropertiesOptional: True IncludeTypes: ProjectMaterialRequest.* //ExcludeTypes: //ExcludeGenericBaseTypes: False //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True //InitializeCollections: True //TreatTypesAsStrings: //DefaultImports: Foundation,ServiceStack */ import Foundation import ServiceStack // @Route("/v1/ProjectMaterial", "GET,POST,PUT,DELETE,OPTIONS") // @Route("/v1/ProjectMaterial/{ProjectMaterialID}", "GET,POST,PUT,DELETE,OPTIONS") public class ProjectMaterialRequest : IReturn, Codable { public typealias Return = ProjectMaterialResponse public var projectMaterialID:Int? public var projectMaterial:[ProjectMaterial] = [] required public init(){} } public class ProjectMaterialResponse : Codable { public var responseStatus:ResponseStatus? public var projectMaterial:[ProjectMaterial] = [] required public init(){} } public class Location : Codable { public var id:String? public var clientId:String? public var name:String? public var address1:String? public var address2:String? public var city:String? public var state:String? public var zip:String? public var phone:String? public var fax:String? public var url:String? public var email:String? public var timeZone:String? public var active:Bool? public var entDate:Date? public var modDate:Date? public var locationImage:String? required public init(){} } public class ProjectMaterial : Material { public var projectMaterialID:Int? public var projectID:Int? public var projectEndDate:Date? public var firstJobUseDate:Date? public var lastJobUseDate:Date? public var materialCost:Double? public var jobID:Int? public var billedMaterialCost:Double? public var materialQty:Int? public var source:String? public var allocated:Int? public var availableQty:Int? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case projectMaterialID case projectID case projectEndDate case firstJobUseDate case lastJobUseDate case materialCost case jobID case billedMaterialCost case materialQty case source case allocated case availableQty } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) projectMaterialID = try container.decodeIfPresent(Int.self, forKey: .projectMaterialID) projectID = try container.decodeIfPresent(Int.self, forKey: .projectID) projectEndDate = try container.decodeIfPresent(Date.self, forKey: .projectEndDate) firstJobUseDate = try container.decodeIfPresent(Date.self, forKey: .firstJobUseDate) lastJobUseDate = try container.decodeIfPresent(Date.self, forKey: .lastJobUseDate) materialCost = try container.decodeIfPresent(Double.self, forKey: .materialCost) jobID = try container.decodeIfPresent(Int.self, forKey: .jobID) billedMaterialCost = try container.decodeIfPresent(Double.self, forKey: .billedMaterialCost) materialQty = try container.decodeIfPresent(Int.self, forKey: .materialQty) source = try container.decodeIfPresent(String.self, forKey: .source) allocated = try container.decodeIfPresent(Int.self, forKey: .allocated) availableQty = try container.decodeIfPresent(Int.self, forKey: .availableQty) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if projectMaterialID != nil { try container.encode(projectMaterialID, forKey: .projectMaterialID) } if projectID != nil { try container.encode(projectID, forKey: .projectID) } if projectEndDate != nil { try container.encode(projectEndDate, forKey: .projectEndDate) } if firstJobUseDate != nil { try container.encode(firstJobUseDate, forKey: .firstJobUseDate) } if lastJobUseDate != nil { try container.encode(lastJobUseDate, forKey: .lastJobUseDate) } if materialCost != nil { try container.encode(materialCost, forKey: .materialCost) } if jobID != nil { try container.encode(jobID, forKey: .jobID) } if billedMaterialCost != nil { try container.encode(billedMaterialCost, forKey: .billedMaterialCost) } if materialQty != nil { try container.encode(materialQty, forKey: .materialQty) } if source != nil { try container.encode(source, forKey: .source) } if allocated != nil { try container.encode(allocated, forKey: .allocated) } if availableQty != nil { try container.encode(availableQty, forKey: .availableQty) } } } public class Material : Codable { public var materialID:Int? public var materialName:String? public var materialTypeID:Int16? public var materialStatusID:UInt8? public var quantity:Int? public var supplier:String? public var orderDate:Date? public var deliveryDate:Date? public var onSiteDate:Date? public var materialLocation:String? public var manufacturer:String? public var serialNumber:String? public var barCode:String? public var trackingInfo:String? public var materialDescription:String? public var notes:String? public var imageURL:String? public var detailsURL:String? public var createdByUID:String? public var active:Bool? public var recordCreatedDate:Date? public var statusId:Int? public var materialTypeName:String? public var cost:Double? public var materialStatusName:String? public var projects:[Project] = [] required public init(){} } public class Project : Codable { public var projectID:Int? public var projectUID:String? public var projectName:String? public var imageURL:String? public var imageKey:String? public var clientName:String? public var clientPhone:String? public var clientEmail:String? public var notifyCustomerOnVisitCompletion:Bool? public var clientContactID:Int? public var projectManagerID:Int? public var projectManagerName:String? public var startDate:Date? public var endDate:Date? public var actualStartDate:Date? public var actualEndDate:Date? public var jobCount:Int? public var crewMemberCount:Int? public var crewAvatarsJson:String? public var crewNamesSearch:String? public var equipmentCount:Int? public var materialCount:Int? public var projectStatusID:Int16? public var projectStatusDescription:String? public var budget:Double? public var costToDate:Double? public var projectLocation:String? public var projectType:String? public var projectSponsor:String? public var createdBy:String? public var createdAt:Date? public var updatedAt:Date? public var projectDescription:String? public var scope:String? public var statusId:Int? public var branchId:String? public var branchName:String? public var location:Location? required public init(){} }