From c13ad3a8a7740a7010aa54dcb0fe1ccef2bad1ec Mon Sep 17 00:00:00 2001 From: mahan Date: Wed, 29 Oct 2025 10:46:21 +0330 Subject: [PATCH] feat: update current day roll call API to accept search model for filtering --- .../RollCallAgg/IRollCallRepository.cs | 2 +- .../RollCall/IRollCallApplication.cs | 9 +++++++- .../RollCallApplication.cs | 4 ++-- .../Repository/RollCallRepository.cs | 21 +++++++++++++++---- .../Company/RollCall/CurrentDay.cshtml.cs | 6 +++--- .../Client/Controllers/RollCallController.cs | 4 ++-- .../Company/RollCall/CurrentDay.cshtml.cs | 6 +++--- 7 files changed, 36 insertions(+), 16 deletions(-) diff --git a/Company.Domain/RollCallAgg/IRollCallRepository.cs b/Company.Domain/RollCallAgg/IRollCallRepository.cs index 47f851c6..8e9836b4 100644 --- a/Company.Domain/RollCallAgg/IRollCallRepository.cs +++ b/Company.Domain/RollCallAgg/IRollCallRepository.cs @@ -25,7 +25,7 @@ namespace Company.Domain.RollCallAgg DateTime endSearch); void RemoveEmployeeRollCallsInDate(long workshopId, long employeeId, DateTime date); RollCallsByDateViewModel GetWorkshopRollCallHistory(RollCallSearchModel searchModel); - CurrentDayRollCall GetWorkshopCurrentDayRollCalls(long workshopId); + CurrentDayRollCall GetWorkshopCurrentDayRollCalls(long workshopId,WorkshopCurrentDayRollCallSearchModel searchModel); List GetEmployeeRollCallsForMonth(IEnumerable employeeIds, long workshopId, DateTime start, DateTime end); diff --git a/CompanyManagment.App.Contracts/RollCall/IRollCallApplication.cs b/CompanyManagment.App.Contracts/RollCall/IRollCallApplication.cs index 6ada660b..a4364932 100644 --- a/CompanyManagment.App.Contracts/RollCall/IRollCallApplication.cs +++ b/CompanyManagment.App.Contracts/RollCall/IRollCallApplication.cs @@ -79,7 +79,7 @@ namespace CompanyManagment.App.Contracts.RollCall /// /// گزارش آنلاین حضور غیاب /// - CurrentDayRollCall GetWorkshopCurrentDayRollCalls(long workshopId); + CurrentDayRollCall GetWorkshopCurrentDayRollCalls(long workshopId,WorkshopCurrentDayRollCallSearchModel searchModel); /// /// گزارش آفلاین حضور غیاب کارگاه @@ -126,6 +126,13 @@ namespace CompanyManagment.App.Contracts.RollCall /// OperationResult RecalculateValues(long workshopId, List command); } + + public class WorkshopCurrentDayRollCallSearchModel + { + public long WorkshopId { get; set; } + public int PersonnelCode { get; set; } + } + public class ReCalculateRollCallValues { public long EmployeeId { get; set; } diff --git a/CompanyManagment.Application/RollCallApplication.cs b/CompanyManagment.Application/RollCallApplication.cs index 4d3796cd..a4d34bf8 100644 --- a/CompanyManagment.Application/RollCallApplication.cs +++ b/CompanyManagment.Application/RollCallApplication.cs @@ -144,9 +144,9 @@ public class RollCallApplication : IRollCallApplication return _rollCallRepository.GetWorkshopRollCallHistory(searchModel); } - public CurrentDayRollCall GetWorkshopCurrentDayRollCalls(long workshopId) + public CurrentDayRollCall GetWorkshopCurrentDayRollCalls(long workshopId, WorkshopCurrentDayRollCallSearchModel searchModel) { - return _rollCallRepository.GetWorkshopCurrentDayRollCalls(workshopId); + return _rollCallRepository.GetWorkshopCurrentDayRollCalls(workshopId, searchModel); } public List GetActiveEmployeeRollCallsForDuration(long employeeId, long workshopId, string startDate, diff --git a/CompanyManagment.EFCore/Repository/RollCallRepository.cs b/CompanyManagment.EFCore/Repository/RollCallRepository.cs index 27b00e72..8ea9d9e7 100644 --- a/CompanyManagment.EFCore/Repository/RollCallRepository.cs +++ b/CompanyManagment.EFCore/Repository/RollCallRepository.cs @@ -1052,11 +1052,11 @@ public class RollCallRepository : RepositoryBase, IRollCallRepos //گزارش آنلاین حضور غیاب کارگاه - public CurrentDayRollCall GetWorkshopCurrentDayRollCalls(long workshopId) + public CurrentDayRollCall GetWorkshopCurrentDayRollCalls(long workshopId, + WorkshopCurrentDayRollCallSearchModel searchModel) { var date = DateTime.Now.Date; - - + //get active leaves for workshop which are active today and accepted and are either روزانه and استحقاقی or استعلاجی var leaves = _context.LeaveList .Where(x => @@ -1070,7 +1070,11 @@ public class RollCallRepository : RepositoryBase, IRollCallRepos //var workingEmployees = // _context.LeftWorkList.Where(x => x.WorkshopId == workshopId && x.StartWorkDate < date && x.LeftWorkDate.Date > date); - + if (searchModel.PersonnelCode>0) + { + personnelCodes = personnelCodes.Where(x=>x.PersonnelCode == searchModel.PersonnelCode); + } + //get activated employees var activeEmployees = @@ -1084,6 +1088,15 @@ public class RollCallRepository : RepositoryBase, IRollCallRepos x.WorkshopId == workshopId && (x.ShiftDate.Date == date || x.EndDate == null) && x.RollCallModifyType != RollCallModifyType.Undefined); + if (searchModel.WorkshopId>0) + { + leaves = leaves.Where(x=>x.WorkshopId == searchModel.WorkshopId); + personnelCodes = personnelCodes.Where(x=>x.WorkshopId == searchModel.WorkshopId); + activeEmployees = activeEmployees.Where(x=>x.WorkshopId == searchModel.WorkshopId); + rollCallsQuery = rollCallsQuery.Where(x=>x.WorkshopId == searchModel.WorkshopId); + } + + var mustBePresent = activeEmployees.Where(x => !leaves.Any(y => y.EmployeeId == x.EmployeeId)); diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/RollCall/CurrentDay.cshtml.cs b/ServiceHost/Areas/AdminNew/Pages/Company/RollCall/CurrentDay.cshtml.cs index 36042cba..e8e20909 100644 --- a/ServiceHost/Areas/AdminNew/Pages/Company/RollCall/CurrentDay.cshtml.cs +++ b/ServiceHost/Areas/AdminNew/Pages/Company/RollCall/CurrentDay.cshtml.cs @@ -43,7 +43,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.RollCall WorkshopId = workshopId, }; - RollCallViewModels = _rollCallApplication.GetWorkshopCurrentDayRollCalls(workshopId); + RollCallViewModels = _rollCallApplication.GetWorkshopCurrentDayRollCalls(workshopId, new WorkshopCurrentDayRollCallSearchModel()); return Page(); } else @@ -56,7 +56,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.RollCall public IActionResult OnGetCurrentDayAjax(string type, long workshopId) { - RollCallViewModels = _rollCallApplication.GetWorkshopCurrentDayRollCalls(workshopId); + RollCallViewModels = _rollCallApplication.GetWorkshopCurrentDayRollCalls(workshopId, new WorkshopCurrentDayRollCallSearchModel()); List data = new(); switch (type) @@ -83,7 +83,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.RollCall public IActionResult OnGetCurrentAjaxCount(long workshopId) { - RollCallViewModels = _rollCallApplication.GetWorkshopCurrentDayRollCalls(workshopId); + RollCallViewModels = _rollCallApplication.GetWorkshopCurrentDayRollCalls(workshopId, new WorkshopCurrentDayRollCallSearchModel()); var absentEmployeesCount = RollCallViewModels.AbsentEmployees.Count(x => !x.HasLeave); var leaveEmployeesCount = RollCallViewModels.AbsentEmployees.Count(x => x.HasLeave); diff --git a/ServiceHost/Areas/Client/Controllers/RollCallController.cs b/ServiceHost/Areas/Client/Controllers/RollCallController.cs index fee599a0..83806e3f 100644 --- a/ServiceHost/Areas/Client/Controllers/RollCallController.cs +++ b/ServiceHost/Areas/Client/Controllers/RollCallController.cs @@ -17,9 +17,9 @@ public class RollCallController:ClientBaseController _workshopId = authHelper.GetWorkshopId(); } [HttpGet("current-day")] - public ActionResult GetCurrentDay() + public ActionResult GetCurrentDay(WorkshopCurrentDayRollCallSearchModel searchModel) { - var res = _rollCallApplication.GetWorkshopCurrentDayRollCalls(_workshopId); + var res = _rollCallApplication.GetWorkshopCurrentDayRollCalls(_workshopId, searchModel); return res; } } \ No newline at end of file diff --git a/ServiceHost/Areas/Client/Pages/Company/RollCall/CurrentDay.cshtml.cs b/ServiceHost/Areas/Client/Pages/Company/RollCall/CurrentDay.cshtml.cs index 62dc884e..5ce75715 100644 --- a/ServiceHost/Areas/Client/Pages/Company/RollCall/CurrentDay.cshtml.cs +++ b/ServiceHost/Areas/Client/Pages/Company/RollCall/CurrentDay.cshtml.cs @@ -81,7 +81,7 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall WorkshopId = workshopId, }; - RollCallViewModels = _rollCallApplication.GetWorkshopCurrentDayRollCalls(workshopId); + RollCallViewModels = _rollCallApplication.GetWorkshopCurrentDayRollCalls(workshopId, new WorkshopCurrentDayRollCallSearchModel()); return Page(); } else @@ -103,7 +103,7 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall var workshopId = _passwordHasher.SlugDecrypt(workshopHash); if (workshopId > 0) { - RollCallViewModels = _rollCallApplication.GetWorkshopCurrentDayRollCalls(workshopId); + RollCallViewModels = _rollCallApplication.GetWorkshopCurrentDayRollCalls(workshopId, new WorkshopCurrentDayRollCallSearchModel()); List data = new(); switch (type) @@ -143,7 +143,7 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall var workshopId = _passwordHasher.SlugDecrypt(workshopHash); if (workshopId > 0) { - RollCallViewModels = _rollCallApplication.GetWorkshopCurrentDayRollCalls(workshopId); + RollCallViewModels = _rollCallApplication.GetWorkshopCurrentDayRollCalls(workshopId, new WorkshopCurrentDayRollCallSearchModel()); var absentEmployeesCount = RollCallViewModels.AbsentEmployees.Count(x => !x.HasLeave); var leaveEmployeesCount = RollCallViewModels.AbsentEmployees.Count(x => x.HasLeave);