using _0_Framework.Application; using _0_Framework.Application.Sms; using _0_Framework.Application.UID; using AccountManagement.Application.Contracts.Task; using AccountManagement.Application.Contracts.Ticket; using CompanyManagment.App.Contracts.ClientDashboard; using CompanyManagment.App.Contracts.HolidayItem; using Microsoft.AspNetCore.Mvc; using PersianTools.Core; using ServiceHost.BaseControllers; namespace ServiceHost.Areas.Admin.Controllers; public class DashboardController : AdminBaseController { private readonly ISmsService _smsService; private readonly IHolidayItemApplication _holidayItemApplication; private readonly ITaskApplication _taskApplication; private readonly ITicketApplication _ticketApplication; private readonly IUidService _uidService; private long UserId; public DashboardController(ISmsService smsService, IHolidayItemApplication holidayItemApplication, ITaskApplication taskApplication,IAuthHelper authHelper, ITicketApplication ticketApplication, IUidService uidService) { _smsService = smsService; _holidayItemApplication = holidayItemApplication; _taskApplication = taskApplication; _ticketApplication = ticketApplication; _uidService = uidService; UserId = authHelper.CurrentAccountId(); } [HttpGet] public async Task> Index() { var calenderList = new List(); var todayGr = DateTime.Today; var todayFa = todayGr.ToFarsi(); var todayPersian = new PersianDateTime( int.Parse(todayFa.Substring(0, 4)), int.Parse(todayFa.Substring(5, 2)), int.Parse(todayFa.Substring(8, 2)) ); var startDate =new PersianDateTime(todayGr.AddDays(-3)); var endDate =new PersianDateTime(todayGr.AddDays(3)); for (var day = startDate; day <= endDate; day = day.AddDays(1)) { var calenderNewItem = new CalenderViewModel { DayNumber = day.ToString("dd"), IsToday = day.DateTime == todayGr, DayOfWeek = day.DayOfWeek, Holiday = _holidayItemApplication.IsHoliday(day.ToGregorianDateTime()) || day.DayOfWeek== "جمعه" }; calenderList.Add(calenderNewItem); } var taskCount = await _taskApplication.RequestedAndOverdueTasksCount(UserId); var ticketCount = _ticketApplication.GetAdminTicketsCount(); return new AdminDashboardViewModel(calenderList, taskCount, ticketCount,todayPersian.Year,todayPersian.MonthOfYear,todayPersian.Day,todayPersian.DayOfWeek); } [HttpGet("sms-remaining")] public async Task> OnGetSmsRemaining() { var result = (int)await _smsService.GetCreditAmount(); return new SmsRemainingResult(result); } } public record SmsRemainingResult(int Data); public record AdminDashboardViewModel(List Calender, int TaskCount, int TicketCount,int Year,string Month,int Day,string DayOfWeek);