/* Options: Date: 2026-04-03 04:38:27 SwiftVersion: 5.0 Version: 6.110 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://etc-api.vsmlab.vn //BaseClass: //AddModelExtensions: True //AddServiceStackTypes: True IncludeTypes: ExportBM05Report.* //ExcludeTypes: //ExcludeGenericBaseTypes: False //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True //InitializeCollections: True //TreatTypesAsStrings: //DefaultImports: Foundation,ServiceStack */ import Foundation import ServiceStack /** * Báo cáo BM05 - Tra cứu VB QPPL & VB Nội bộ NPCETC */ // @Route("/report/bm05/to-excel", "POST") public class ExportBM05Report : PagingRequest, IReturn { public typealias Return = HttpResult public var title:String public var typeId:Int? public var groupId:Int? public var subjectId:Int? public var isUrgent:Bool? public var documentSearchStage:DocumentSearchStage public var isInternal:Bool? public var fromDate:Date? public var toDate:Date? public var statusId:Int? public var issuingAgencyId:Int? public var orderBy:SearchOrderBy public var isParty:Bool? public var branchType:Int16? public var effectBeginDateFrom:Date? public var effectBeginDateTo:Date? public var effectEndDateFrom:Date? public var effectEndDateTo:Date? public var departmentIds:[Int] = [] required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case title case typeId case groupId case subjectId case isUrgent case documentSearchStage case isInternal case fromDate case toDate case statusId case issuingAgencyId case orderBy case isParty case branchType case effectBeginDateFrom case effectBeginDateTo case effectEndDateFrom case effectEndDateTo case departmentIds } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) title = try container.decodeIfPresent(String.self, forKey: .title) typeId = try container.decodeIfPresent(Int.self, forKey: .typeId) groupId = try container.decodeIfPresent(Int.self, forKey: .groupId) subjectId = try container.decodeIfPresent(Int.self, forKey: .subjectId) isUrgent = try container.decodeIfPresent(Bool.self, forKey: .isUrgent) documentSearchStage = try container.decodeIfPresent(DocumentSearchStage.self, forKey: .documentSearchStage) isInternal = try container.decodeIfPresent(Bool.self, forKey: .isInternal) fromDate = try container.decodeIfPresent(Date.self, forKey: .fromDate) toDate = try container.decodeIfPresent(Date.self, forKey: .toDate) statusId = try container.decodeIfPresent(Int.self, forKey: .statusId) issuingAgencyId = try container.decodeIfPresent(Int.self, forKey: .issuingAgencyId) orderBy = try container.decodeIfPresent(SearchOrderBy.self, forKey: .orderBy) isParty = try container.decodeIfPresent(Bool.self, forKey: .isParty) branchType = try container.decodeIfPresent(Int16.self, forKey: .branchType) effectBeginDateFrom = try container.decodeIfPresent(Date.self, forKey: .effectBeginDateFrom) effectBeginDateTo = try container.decodeIfPresent(Date.self, forKey: .effectBeginDateTo) effectEndDateFrom = try container.decodeIfPresent(Date.self, forKey: .effectEndDateFrom) effectEndDateTo = try container.decodeIfPresent(Date.self, forKey: .effectEndDateTo) departmentIds = try container.decodeIfPresent([Int].self, forKey: .departmentIds) ?? [] } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if title != nil { try container.encode(title, forKey: .title) } if typeId != nil { try container.encode(typeId, forKey: .typeId) } if groupId != nil { try container.encode(groupId, forKey: .groupId) } if subjectId != nil { try container.encode(subjectId, forKey: .subjectId) } if isUrgent != nil { try container.encode(isUrgent, forKey: .isUrgent) } if documentSearchStage != nil { try container.encode(documentSearchStage, forKey: .documentSearchStage) } if isInternal != nil { try container.encode(isInternal, forKey: .isInternal) } if fromDate != nil { try container.encode(fromDate, forKey: .fromDate) } if toDate != nil { try container.encode(toDate, forKey: .toDate) } if statusId != nil { try container.encode(statusId, forKey: .statusId) } if issuingAgencyId != nil { try container.encode(issuingAgencyId, forKey: .issuingAgencyId) } if orderBy != nil { try container.encode(orderBy, forKey: .orderBy) } if isParty != nil { try container.encode(isParty, forKey: .isParty) } if branchType != nil { try container.encode(branchType, forKey: .branchType) } if effectBeginDateFrom != nil { try container.encode(effectBeginDateFrom, forKey: .effectBeginDateFrom) } if effectBeginDateTo != nil { try container.encode(effectBeginDateTo, forKey: .effectBeginDateTo) } if effectEndDateFrom != nil { try container.encode(effectEndDateFrom, forKey: .effectEndDateFrom) } if effectEndDateTo != nil { try container.encode(effectEndDateTo, forKey: .effectEndDateTo) } if departmentIds.count > 0 { try container.encode(departmentIds, forKey: .departmentIds) } } } public class HttpResult : Codable { public var responseText:String public var responseStream:Data public var fileInfo:FileInfo //virtualFile:IVirtualFile ignored. Swift doesn't support interface properties public var contentType:String public var headers:[String:String] = [:] public var cookies:[Cookie] = [] public var eTag:String @TimeSpan public var age:TimeInterval? @TimeSpan public var maxAge:TimeInterval? public var expires:Date? public var lastModified:Date? public var cacheControl:CacheControl public var resultScope:Func public var allowsPartialResponse:Bool public var options:[String:String] = [:] public var status:Int public var statusCode:HttpStatusCode public var statusDescription:String //response:Object ignored. Type could not be extended in Swift //responseFilter:IContentTypeWriter ignored. Swift doesn't support interface properties //requestContext:IRequest ignored. Swift doesn't support interface properties public var view:String public var template:String public var paddingLength:Int public var isPartialRequest:Bool required public init(){} } public class PagingRequest : Codable { public var page:Int public var limit:Int required public init(){} } public enum DocumentSearchStage : String, Codable { case All case AllProcessing case Draft case PendingApproval case IsRevisionRequested case PendingCompilation case PendingReport case Published case Active case InActive } public enum SearchOrderBy : String, Codable { case UpdatedDateDesc case PublishDateDesc case TitleAsc case DocumentCodeAsc } public protocol IVirtualFile { //virtualPathProvider:IVirtualPathProvider ignored. Swift doesn't support interface properties var `extension`:String { get set } var length:Int { get set } } // @Flags() public enum CacheControl : Int, Codable { case None = 0 case Public = 1 case Private = 2 case MustRevalidate = 4 case NoCache = 8 case NoStore = 16 case NoTransform = 32 case ProxyRevalidate = 64 } public protocol IContentTypeWriter { } public protocol IRequest { //originalRequest:Object ignored. Type could not be extended in Swift //response:IResponse ignored. Swift doesn't support interface properties var operationName:String { get set } var verb:String { get set } var requestAttributes:RequestAttributes { get set } //requestPreferences:IRequestPreferences ignored. Swift doesn't support interface properties //dto:Object ignored. Type could not be extended in Swift var contentType:String { get set } var isLocal:Bool { get set } var userAgent:String { get set } var cookies:[String:Cookie] { get set } var responseContentType:String { get set } var hasExplicitResponseContentType:Bool { get set } var items:[String:Object] { get set } var headers:NameValueCollection { get set } var queryString:NameValueCollection { get set } var formData:NameValueCollection { get set } var useBufferedStream:Bool { get set } var rawUrl:String { get set } var absoluteUri:String { get set } var userHostAddress:String { get set } var remoteIp:String { get set } var authorization:String { get set } var isSecureConnection:Bool { get set } var acceptTypes:[String] { get set } var pathInfo:String { get set } var originalPathInfo:String { get set } var inputStream:Data { get set } var contentLength:Int { get set } var files:[IHttpFile] { get set } var urlReferrer:Uri { get set } } public protocol IVirtualDirectory { } public protocol IVirtualPathProvider { //rootDirectory:IVirtualDirectory ignored. Swift doesn't support interface properties var virtualPathSeparator:String { get set } var realPathSeparator:String { get set } } public protocol IResponse { //originalResponse:Object ignored. Type could not be extended in Swift //request:IRequest ignored. Swift doesn't support interface properties var statusCode:Int { get set } var statusDescription:String { get set } var contentType:String { get set } var outputStream:Data { get set } //dto:Object ignored. Type could not be extended in Swift var useBufferedStream:Bool { get set } var isClosed:Bool { get set } var keepAlive:Bool { get set } var hasStarted:Bool { get set } var items:[String:Object] { get set } } // @Flags() public enum RequestAttributes : Int, Codable { case None = 0 case Localhost = 1 case LocalSubnet = 2 case External = 4 case Secure = 8 case InSecure = 16 case AnySecurityMode = 24 case HttpHead = 32 case HttpGet = 64 case HttpPost = 128 case HttpPut = 256 case HttpDelete = 512 case HttpPatch = 1024 case HttpOptions = 2048 case HttpOther = 4096 case AnyHttpMethod = 8160 case OneWay = 8192 case Reply = 16384 case AnyCallStyle = 24576 case Soap11 = 32768 case Soap12 = 65536 case Xml = 131072 case Json = 262144 case Jsv = 524288 case ProtoBuf = 1048576 case Csv = 2097152 case Html = 4194304 case Wire = 8388608 case MsgPack = 16777216 case FormatOther = 33554432 case AnyFormat = 67076096 case Http = 67108864 case MessageQueue = 134217728 case Tcp = 268435456 case Grpc = 536870912 case EndpointOther = 1073741824 case AnyEndpoint = 2080374784 case InProcess = -2147483648 case InternalNetworkAccess = -2147483645 case AnyNetworkAccessType = -2147483641 case Any = -1 } public protocol IRequestPreferences { var acceptsBrotli:Bool { get set } var acceptsDeflate:Bool { get set } var acceptsGzip:Bool { get set } }