tvpl.api

<back to all web services

ExportBM05Report

Báo cáo BM05 - Tra cứu VB QPPL & VB Nội bộ NPCETC

Requires Authentication
The following routes are available for this service:
POST/report/bm05/to-excel
import Foundation
import ServiceStack

/**
* Báo cáo BM05 - Tra cứu VB QPPL & VB Nội bộ NPCETC
*/
public class ExportBM05Report : PagingRequest
{
    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 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 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<IDisposable>
    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 protocol IVirtualFile
{
    //virtualPathProvider:IVirtualPathProvider ignored. Swift doesn't support interface properties
    var `extension`:String { get set }
    var length:Int { get set }

}

public protocol IVirtualPathProvider
{
    //rootDirectory:IVirtualDirectory ignored. Swift doesn't support interface properties
    var virtualPathSeparator:String { get set }
    var realPathSeparator:String { get set }

}

public protocol IVirtualDirectory
{
}

// @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 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 }

}

public protocol IHttpFile
{
    var name:String { get set }
    var fileName:String { get set }
    var contentLength:Int { get set }
    var contentType:String { get set }
    var inputStream:Data { get set }

}


Swift ExportBM05Report DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .json suffix or ?format=json

To embed the response in a jsonp callback, append ?callback=myCallback

HTTP + JSON

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /report/bm05/to-excel HTTP/1.1 
Host: etc-api.vsmlab.vn 
Accept: application/json
Content-Type: application/json
Content-Length: length

{"title":"String","typeId":0,"groupId":0,"subjectId":0,"isUrgent":false,"documentSearchStage":"All","isInternal":false,"fromDate":"0001-01-01T00:00:00.0000000+07:06","toDate":"0001-01-01T00:00:00.0000000+07:06","statusId":0,"issuingAgencyId":0,"orderBy":"UpdatedDateDesc","isParty":false,"branchType":0,"effectBeginDateFrom":"0001-01-01T00:00:00.0000000+07:06","effectBeginDateTo":"0001-01-01T00:00:00.0000000+07:06","effectEndDateFrom":"0001-01-01T00:00:00.0000000+07:06","effectEndDateTo":"0001-01-01T00:00:00.0000000+07:06","departmentIds":[0],"page":1,"limit":10}
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: length

{}