/* Options: Date: 2026-02-04 10:28:18 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: CreateWorkflowStepRequest.* //ExcludeTypes: //ExcludeGenericBaseTypes: False //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True //InitializeCollections: True //TreatTypesAsStrings: //DefaultImports: Foundation,ServiceStack */ import Foundation import ServiceStack // @Route("/WorkflowStep/update", "Post") public class CreateWorkflowStepRequest : WorkflowStep, IReturn { public typealias Return = WorkflowStepResponse required public init(){ super.init() } required public init(from decoder: Decoder) throws { try super.init(from: decoder) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) } } public class WorkflowStepResponse : IResponseRequest, Codable { public var code:Int public var message:String public var insertedId:Int required public init(){} } public class UploadedFiles : BasicUploadedFile { public var id:Int? public var uploadedFile:String public var subDocumentId:Int? public var stepId:Int? public var code:Int required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case id case uploadedFile case subDocumentId case stepId case code } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) id = try container.decodeIfPresent(Int.self, forKey: .id) uploadedFile = try container.decodeIfPresent(String.self, forKey: .uploadedFile) subDocumentId = try container.decodeIfPresent(Int.self, forKey: .subDocumentId) stepId = try container.decodeIfPresent(Int.self, forKey: .stepId) code = try container.decodeIfPresent(Int.self, forKey: .code) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if id != nil { try container.encode(id, forKey: .id) } if uploadedFile != nil { try container.encode(uploadedFile, forKey: .uploadedFile) } if subDocumentId != nil { try container.encode(subDocumentId, forKey: .subDocumentId) } if stepId != nil { try container.encode(stepId, forKey: .stepId) } if code != nil { try container.encode(code, forKey: .code) } } } public class BasicDocument : Codable { // @Required() public var title:String? // @StringLength(4000) public var Description:String // @StringLength(500) public var owner:String public var documentPolicyId:Int? public var updateDocumentId:Int? public var effectBeginDate:Date? public var effectEndDate:Date? public var issuingAgencyId:Int? public var documentTypeId:Int? public var documentGroupId:Int? public var subjectId:Int? // @StringLength(500) public var signBy:String public var signDate:Date? public var statusId:Int? public var isInternal:Bool public var documentNumber:String public var documentCode:String public var isUrgent:Bool? public var scopeType:Int? public var isActive:Bool? required public init(){} } public class StepAttached : Codable { public var id:Int public var documentCode:String public var title:String public var isSequentialSigning:Bool? public var pendingSignFile:UploadedFiles public var originalFile:UploadedFiles public var signerConfigs:[SignerConfigDetail] = [] required public init(){} } public class WorkflowStep : Codable { public var id:Int // @References(typeof(Document)) public var workflowId:Int public var stepOrder:Int? public var statusId:Int? // @Required() // @StringLength(255) public var stepName:String? // @Required() public var isRequired:Bool? public var slaLegalValue:Int? public var slaLegalIsByDay:Bool? public var slaInternalValue:Int? public var slaInternalIsByDay:Bool? public var requireAttachment:Bool public var isUsingForm:Bool? // @Required() public var Description:String? public var createdBy:Int // @Ignore() public var departmentIds:[Int] = [] // @Ignore() public var mainAssigneeIds:[Int] = [] // @Ignore() public var coDepartmentIds:[Int] = [] // @Ignore() public var supportingAssigneeIds:[Int] = [] // @Ignore() public var stepBasisDocumentIds:[Int] = [] // @Ignore() public var attachedDocuments:[StepAttached] = [] required public init(){} } public protocol IResponseRequest { var code:Int { get set } var message:String { get set } } public class Roles : Codable { public var id:Int // @StringLength(50) public var name:String public var createdAt:Date? public var deletedAt:Date? public var updatedAt:Date? public var updatedBy:Int? public var deletedBy:Int? public var createdBy:Int? // @Ignore() public var permission:[String] = [] required public init(){} } public class BasicUploadedFile : Codable { public var fileName:String public var filekey:String public var fileUrl:String public var checksum:String public var eTag:String public var fileSize:Int required public init(){} } public class SignerConfigDetail : SignerConfig { public var profile:WorkFlowProfile public var role:Roles required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case profile case role } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) profile = try container.decodeIfPresent(WorkFlowProfile.self, forKey: .profile) role = try container.decodeIfPresent(Roles.self, forKey: .role) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if profile != nil { try container.encode(profile, forKey: .profile) } if role != nil { try container.encode(role, forKey: .role) } } } public class Document : BasicDocument { public var id:Int // @StringLength(500) public var reasonReturn:String public var accountId:Int? public var deletedAt:Date? // @StringLength(500) public var deletedBy:String // @StringLength(500) public var updatedBy:String public var createdAt:Date? // @StringLength(500) public var createdBy:String public var isParty:Bool? public var isRevisionRequested:Bool public var lastUpdatedAt:Date? public var isPrivate:Bool? public var departmentId:Int? public var publicationDate:Date? public var processStatusId:Int? public var fullTextSearchContent:String required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case id case reasonReturn case accountId case deletedAt case deletedBy case updatedBy case createdAt case createdBy case isParty case isRevisionRequested case lastUpdatedAt case isPrivate case departmentId case publicationDate case processStatusId case fullTextSearchContent } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) id = try container.decodeIfPresent(Int.self, forKey: .id) reasonReturn = try container.decodeIfPresent(String.self, forKey: .reasonReturn) accountId = try container.decodeIfPresent(Int.self, forKey: .accountId) deletedAt = try container.decodeIfPresent(Date.self, forKey: .deletedAt) deletedBy = try container.decodeIfPresent(String.self, forKey: .deletedBy) updatedBy = try container.decodeIfPresent(String.self, forKey: .updatedBy) createdAt = try container.decodeIfPresent(Date.self, forKey: .createdAt) createdBy = try container.decodeIfPresent(String.self, forKey: .createdBy) isParty = try container.decodeIfPresent(Bool.self, forKey: .isParty) isRevisionRequested = try container.decodeIfPresent(Bool.self, forKey: .isRevisionRequested) lastUpdatedAt = try container.decodeIfPresent(Date.self, forKey: .lastUpdatedAt) isPrivate = try container.decodeIfPresent(Bool.self, forKey: .isPrivate) departmentId = try container.decodeIfPresent(Int.self, forKey: .departmentId) publicationDate = try container.decodeIfPresent(Date.self, forKey: .publicationDate) processStatusId = try container.decodeIfPresent(Int.self, forKey: .processStatusId) fullTextSearchContent = try container.decodeIfPresent(String.self, forKey: .fullTextSearchContent) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if id != nil { try container.encode(id, forKey: .id) } if reasonReturn != nil { try container.encode(reasonReturn, forKey: .reasonReturn) } if accountId != nil { try container.encode(accountId, forKey: .accountId) } if deletedAt != nil { try container.encode(deletedAt, forKey: .deletedAt) } if deletedBy != nil { try container.encode(deletedBy, forKey: .deletedBy) } if updatedBy != nil { try container.encode(updatedBy, forKey: .updatedBy) } if createdAt != nil { try container.encode(createdAt, forKey: .createdAt) } if createdBy != nil { try container.encode(createdBy, forKey: .createdBy) } if isParty != nil { try container.encode(isParty, forKey: .isParty) } if isRevisionRequested != nil { try container.encode(isRevisionRequested, forKey: .isRevisionRequested) } if lastUpdatedAt != nil { try container.encode(lastUpdatedAt, forKey: .lastUpdatedAt) } if isPrivate != nil { try container.encode(isPrivate, forKey: .isPrivate) } if departmentId != nil { try container.encode(departmentId, forKey: .departmentId) } if publicationDate != nil { try container.encode(publicationDate, forKey: .publicationDate) } if processStatusId != nil { try container.encode(processStatusId, forKey: .processStatusId) } if fullTextSearchContent != nil { try container.encode(fullTextSearchContent, forKey: .fullTextSearchContent) } } } public class WorkFlowProfile : Codable { public var id:Int public var name:String public var fullName:String public var email:String public var departmentId:Int? public var avatar:String public var telephone:String public var birthday:Date? public var confirmStatus:Int? public var confirmStatusText:String public var signAt:Date? public var signedFileId:Int? public var originalFileId:Int? public var signedFileName:String public var isSigned:Bool public var signStatusText:String required public init(){} } public class SignerConfig : BasicSignerConfig { public var id:Int public var documentId:Int public var stepId:Int? required public init(){ super.init() } private enum CodingKeys : String, CodingKey { case id case documentId case stepId } required public init(from decoder: Decoder) throws { try super.init(from: decoder) let container = try decoder.container(keyedBy: CodingKeys.self) id = try container.decodeIfPresent(Int.self, forKey: .id) documentId = try container.decodeIfPresent(Int.self, forKey: .documentId) stepId = try container.decodeIfPresent(Int.self, forKey: .stepId) } public override func encode(to encoder: Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) if id != nil { try container.encode(id, forKey: .id) } if documentId != nil { try container.encode(documentId, forKey: .documentId) } if stepId != nil { try container.encode(stepId, forKey: .stepId) } } } public class BasicSignerConfig : Codable { public var subDocumentId:Int? public var departmentId:Int? public var signerType:UInt8 public var signerRefId:Int // @Ignore() public var signerRefText:String public var actionType:UInt8 public var orderIndex:Int required public init(){} }