using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using TMSDAL.DTO.TrainingEnrollment; namespace TMSBLL.TrainingEnrollment { public interface ITrainingEnrollmentBLL { // ════════════════════════════════════════════════════════════════════ // READ // ════════════════════════════════════════════════════════════════════ /// Fetch full enrollment record by primary key (JSON). Task GetTrainingEnrollment(int enrollmentId, LoginDTO loginDTO); /// All enrollments for a training instance (JSON). Task GetEnrollmentsByInstance(int instanceId, LoginDTO loginDTO); /// All enrollments for an employee (JSON). Task GetEnrollmentsByEmployee(int employeeId, LoginDTO loginDTO); /// Full tenant enrollment list (JSON). Task GetEnrollmentList(LoginDTO loginDTO); /// Paged / filtered dropdown select-list (JSON). Task GetSelectList(CriteriaDTO criteriaDTO, LoginDTO loginDTO, CancellationToken ct); // ════════════════════════════════════════════════════════════════════ // WRITE // ════════════════════════════════════════════════════════════════════ /// /// Create a new enrollment with capacity check, duplicate guard, /// and AutoNumber generation. Waitlists when instance is full. /// Task SaveTrainingEnrollment(TrainingEnrollmentDTO dto, LoginDTO loginDTO); /// /// Approve or reject an enrollment at the Manager or HR tier. /// Status transition is validated per tier before actioning. /// Task ApproveEnrollment(ApprovalActionDTO dto, LoginDTO loginDTO); /// /// Withdraw an enrollment. Only valid from active statuses. /// Decrements instance enrolled count when a confirmed seat was held. /// Task WithdrawEnrollment(WithdrawEnrollmentDTO dto, LoginDTO loginDTO); /// Soft-delete an enrollment (STATUS = 0). Task DeleteTrainingEnrollment(int enrollmentId, LoginDTO loginDTO); } }