namespace ECPDAL.Meeting.DTOs;
///
/// A single meeting row in TMEETING — minimal scheduling only (start/end, virtual link,
/// location, type, optional polymorphic business-object link). Per the plan's explicit scope
/// decision this module does not integrate a calendar engine, a video-conferencing provider, or a
/// reminder engine. Meeting minutes/discussion flow through Communication's TCOMMENTTHREAD and
/// meeting-generated action items are FBCK ActionItem rows — both reached only via the shared
/// MENTITY-registry convention (Communication) / a reusable int PK (FBCK ActionItem.ContextId),
/// never via a direct project/code reference to ECPDAL.Communication/BLL or FBCKDAL/BLL.
///
public class MeetingDTO
{
public int MeetingId { get; set; }
public string Title { get; set; } = string.Empty;
public int MeetingTypeId { get; set; } = -1; // -> MGCM/MGCMTYPE
public DateTime StartOn { get; set; }
public DateTime EndOn { get; set; }
public string? VirtualLink { get; set; }
public string? Location { get; set; }
public int OrganizerUserId { get; set; }
public string? OrganizerUserCode { get; set; }
public string? OrganizerUserName { get; set; }
public byte Status { get; set; } = 1; // 1=scheduled 2=completed 3=cancelled
public int ObjectTypeId { get; set; } = -1; // optional polymorphic business-object link
public int ObjectId { 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 int CreatedById { get; set; } = -1;
public DateTime CreatedOn { get; set; }
public int ModifiedById { get; set; } = -1;
public DateTime ModifiedOn { get; set; }
/// Populated in-memory by MeetingBLL when assembling a detail view — never read
/// from TMEETING directly.
public List Participants { get; set; } = [];
}
/// Input shape for SaveMeeting — a smaller surface than the full read DTO.
public class SaveMeetingDTO
{
public int MeetingId { get; set; }
public string Title { get; set; } = string.Empty;
public int MeetingTypeId { get; set; } = -1;
public DateTime StartOn { get; set; }
public DateTime EndOn { get; set; }
public string? VirtualLink { get; set; }
public string? Location { get; set; }
public int ObjectTypeId { get; set; } = -1;
public int ObjectId { get; set; } = -1;
public int OuId { get; set; } = -1;
}
public class UpdateMeetingStatusDTO
{
public int MeetingId { get; set; }
public byte NewStatus { get; set; } // 1=scheduled 2=completed 3=cancelled
}
/// A single participant row in TMEETINGPARTICIPANT.
public class MeetingParticipantDTO
{
public int MeetingParticipantId { get; set; }
public int MeetingId { get; set; }
public int UserId { get; set; }
public string? UserCode { get; set; }
public string? UserName { get; set; }
public byte AttendanceStatus { get; set; } = 1; // 1=invited 2=accepted 3=declined 4=attended 5=no-show
public int TenantId { get; set; } = -1;
public string DatabaseName { get; set; } = string.Empty;
public byte DatabaseType { 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; }
}
public class AddMeetingParticipantDTO
{
public int MeetingId { get; set; }
public int UserId { get; set; }
}
public class UpdateParticipantAttendanceDTO
{
public int MeetingId { get; set; }
public int UserId { get; set; }
public byte AttendanceStatus { get; set; }
}
/// Dropdown-picker row for GetSelectListMeeting — the MGCM/GCMTYPEID "Meeting Type"
/// classification (Planning/Review/Standup/Retrospective in the ECP preview).
public class MeetingTypePicklistDTO
{
public int MeetingTypeId { get; set; }
public string Code { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
}
/// Dropdown-picker row for GetSelectListMeetingDetails (the "invite participant"
/// picker) — users NOT already a participant of the given meeting.
public class MeetingParticipantPicklistDTO
{
public int UserId { get; set; }
public string UserCode { get; set; } = string.Empty;
public string UserName { get; set; } = string.Empty;
}