using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using AdminDAL.CustomCode.Calendar; using AdminDAL.DTO.Calendar; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.ResponseStandard; using GB5Shared.Validation; namespace AdminBLL.Calendar { public class CalendarBLL : ICalendarBLL { private readonly ICalendarDAL _CalendarDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public CalendarBLL(ICalendarDAL ICalendarDAL, AutoNumber AutoNumber, IValidation Validation) { _CalendarDAL = ICalendarDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetCalendar(int CalendarId, LoginDTO LoginDTO) { try { return await _CalendarDAL.GetCalendar(CalendarId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveCalendar(CalendarDTO CalendarDTO, LoginDTO loginDTO) { if (CalendarDTO == null) throw new ArgumentNullException(nameof(CalendarDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(CalendarDTO.CalendarCode, nameof(CalendarDTO.CalendarCode)); await _Validation.NotEmpty(CalendarDTO.CalendarName, nameof(CalendarDTO.CalendarName)); CalendarDTO.CalendarModifiedById = loginDTO.UserId; CalendarDTO.CalendarModifiedOn = DateTime.UtcNow; int count = 1; if (CalendarDTO.CalendarId == 0) { autoNumberDTO = await _AutoNumber.GetAutoNumber(count, "CALENDAR", loginDTO); CalendarDTO.CalendarId = autoNumberDTO.StartNumber; CalendarDTO.CalendarCreatedById = loginDTO.UserId; CalendarDTO.CalendarCreatedOn = DateTime.UtcNow; if (CalendarDTO.CalendarDetailArray != null) { foreach (var child in CalendarDTO.CalendarDetailArray) { child.CalendarDetailId = CalendarDTO.CalendarId++; child.CalendarId = CalendarDTO.CalendarId; } } await _CalendarDAL.SaveCalendar(CalendarDTO, loginDTO); return $"Calendar saved successfully with CalendarId {CalendarDTO.CalendarId}."; } else { await _CalendarDAL.UpdateCalendar(CalendarDTO, loginDTO); return $"Calendar updated successfully with CalendarId {CalendarDTO.CalendarId}."; } } catch { if (autoNumberDTO != null && CalendarDTO.CalendarId > 0) await _AutoNumber.RollbackAutoNumber("CALENDAR", CalendarDTO.CalendarId, loginDTO); throw; } } public async Task> DeleteCalendar(int CalendarId, LoginDTO LoginDTO) { try { return await _CalendarDAL.DeleteCalendar(CalendarId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListCalendar(CriteriaDTO criteriaDTO, LoginDTO loginDTO) { try { return await _CalendarDAL.GetSelectListCalendar(criteriaDTO, loginDTO); } catch (Exception) { throw; } } } }