namespace ECPDAL.Correspondence.DTOs; /// /// A single correspondence record in TCORRESPONDENCE — modernized shape of the legacy /// TINTERACTION, polymorphic via ObjectTypeId+ObjectId (resolved against MENTITY.ENTITYID). /// public class CorrespondenceDTO { public int CorrespondenceId { get; set; } public int ObjectTypeId { get; set; } public int ObjectId { get; set; } public int CorrespondenceTypeId { get; set; } public string? CorrespondenceTypeCode { get; set; } public string? CorrespondenceTypeName { get; set; } public int BizTransactionTypeId { get; set; } = -1; public byte Direction { get; set; } = 2; // 1=in 2=out public byte Mode { get; set; } // 1=mail 2=sms public string? Subject { get; set; } public int TemplateId { get; set; } = -1; // -> MMERGE.MERGEID public int GeneratedAttachmentId { get; set; } = -1; // -> TATTACHMENT.ATTACHMENTID public string? FromId { get; set; } public string? ToIds { get; set; } public string? CcIds { get; set; } public string? BccIds { get; set; } public DateTime? ScheduledOn { get; set; } public DateTime? SentOn { get; set; } public byte ActionStatus { get; set; } = 1; // 1=pending 2=processed 3=failed public int BizTransactionId { get; set; } = -1; public int OuId { get; set; } = -1; public int TenantId { get; set; } = -1; public string DatabaseName { get; set; } = string.Empty; public byte DatabaseType { get; set; } public short Version { get; set; } public byte Status { get; set; } = 1; // 1=Active 2=Deleted public int CreatedById { get; set; } = -1; public DateTime CreatedOn { get; set; } public int ModifiedById { get; set; } = -1; public DateTime ModifiedOn { get; set; } } /// /// Shared input shape for both preview (no persistence) and save-and-send. The caller supplies /// the merge data context directly — per the plan, Correspondence doesn't own business data, so /// it never resolves Fields/Tables from ObjectTypeId+ObjectId itself (that stays the owning /// module's responsibility, same "floor" delegation pattern as Communication's CanView check). /// public class CorrespondenceRenderRequestDTO { public int ObjectTypeId { get; set; } public int ObjectId { get; set; } public int CorrespondenceTypeId { get; set; } public int TemplateId { get; set; } /// Flat ##Field## values. byte[] values are treated as image-merge fields (##IMG:Field##). public Dictionary Fields { get; set; } = []; /// Named repeating-row datasets, keyed by the ##REPEAT:Name## marker used in the template. public Dictionary>> Tables { get; set; } = []; } /// Input for SaveAndSendCorrespondence — render request + delivery/routing fields. public class SaveAndSendCorrespondenceDTO : CorrespondenceRenderRequestDTO { public byte Mode { get; set; } // 1=mail 2=sms public string? Subject { get; set; } public string? FromId { get; set; } public string? ToIds { get; set; } public string? CcIds { get; set; } public string? BccIds { get; set; } public int BizTransactionTypeId { get; set; } = -1; public int BizTransactionId { get; set; } = -1; public int OuId { get; set; } = -1; } /// Input for UpdateCorrespondence — editable routing/scheduling fields only. Identity /// fields (ObjectTypeId/ObjectId/TemplateId/GeneratedAttachmentId/Direction) are not editable /// after creation. Version is required for optimistic concurrency (same convention as /// SignatoryDTO's Save/Update pair). public class UpdateCorrespondenceDTO { public int CorrespondenceId { get; set; } public int CorrespondenceTypeId { get; set; } public int BizTransactionTypeId { get; set; } = -1; public byte Mode { get; set; } // 1=mail 2=sms public string? Subject { get; set; } public string? FromId { get; set; } public string? ToIds { get; set; } public string? CcIds { get; set; } public string? BccIds { get; set; } public DateTime? ScheduledOn { get; set; } public int BizTransactionId { get; set; } = -1; public int OuId { get; set; } = -1; public short Version { get; set; } }