namespace MarketingDAL.DTO.MarketingCampaign; /// /// MarketMind AI execution layer — a Marketing Campaign (MMKTCAMPAIGN). Named /// "MarketingCampaign"/"MMKTCAMPAIGN" (not bare "Campaign"/"MCAMPAIGN") deliberately: CMS already /// owns a same-named "Campaign" entity (GB5Solution/CMS/CMSDAL/DTO/Campaign/CampaignDTO.cs) that is /// an internal employee learning/content-assignment campaign (targets EmployeeId/LearningPathId), /// not a customer/lead-facing marketing campaign — same word, different domain. This entity is the /// external, customer-facing one referenced by (physical /// column TLEAD.CAMPAIGNID) — see the plan /// (~/.claude/plans/in-entitlement-also-we-async-charm.md, Phase 0 — MarketMind AI) and this /// session's migration for how TLEAD.CAMPAIGNID was wired to this table. /// public class MarketingCampaignDTO { #region MarketingCampaign public int CampaignId { get; set; } public string CampaignCode { get; set; } = string.Empty; public string CampaignName { get; set; } = string.Empty; /// 1=Digital, 2=Event, 3=Content, 4=Email, 5=Social — see CK_MMKTCAMPAIGN_CAMPAIGNTYPE. public byte CampaignType { get; set; } /// Free text/CSV of channels — too varied across tenants to enumerate. public string? ChannelPlan { get; set; } /// Optional FK to MSEGMENT — -1 sentinel = not applicable. public int SegmentId { get; set; } = -1; public string? SegmentCode { get; set; } public string? SegmentName { get; set; } public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } public decimal BudgetAmount { get; set; } public string? Remarks { get; set; } #endregion #region Base public int CreatedById { get; set; } public DateTime CreatedOn { get; set; } public string? CreatedByName { get; set; } public int ModifiedById { get; set; } public DateTime ModifiedOn { get; set; } public string? ModifiedByName { get; set; } #endregion #region Standard public short SortOrder { get; set; } public byte Status { get; set; } public short Version { get; set; } public int TenantId { get; set; } #endregion }