diff --git a/CompanyManagment.App.Contracts/Employee/DTO/PrintAllEmployeesInfoDtoClient.cs b/CompanyManagment.App.Contracts/Employee/DTO/PrintAllEmployeesInfoDtoClient.cs index d9781377..67d640d1 100644 --- a/CompanyManagment.App.Contracts/Employee/DTO/PrintAllEmployeesInfoDtoClient.cs +++ b/CompanyManagment.App.Contracts/Employee/DTO/PrintAllEmployeesInfoDtoClient.cs @@ -20,7 +20,7 @@ public class PrintAllEmployeesInfoDtoClient ContractLeftDate = source.ContractLeftDate; LatestInsuranceStartDate = source.LatestInsuranceStartDate; InsuranceLeftDate = source.InsuranceLeftDate; - EmployeeStatusInWorkshop = source.EmployeeStatusInWorkshop; + Black = source.EmployeeStatusInWorkshop == EmployeeStatusInWorkshop.HasLeft; } /// /// آی دی پرسنل @@ -92,5 +92,5 @@ public class PrintAllEmployeesInfoDtoClient /// /// وضعیت پرسنل در کارگاه /// - public EmployeeStatusInWorkshop EmployeeStatusInWorkshop { get; set; } + public bool Black { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Employee/IEmployeeApplication.cs b/CompanyManagment.App.Contracts/Employee/IEmployeeApplication.cs index 5ea7e80e..9347332f 100644 --- a/CompanyManagment.App.Contracts/Employee/IEmployeeApplication.cs +++ b/CompanyManagment.App.Contracts/Employee/IEmployeeApplication.cs @@ -123,9 +123,16 @@ public interface IEmployeeApplication /// /// Task> PrintAllEmployeesInfoClient(long workshopId); + + /// + /// سلکت لیست پرسنل های کارگاه کلاینت + /// + /// + /// + Task> GetWorkingEmployeesSelectList(long workshopId); #endregion - Task> GetWorkingEmployeesSelectList(long workshopId); + } public class GetClientEmployeeListSearchModel diff --git a/CompanyManagment.EFCore/Repository/EmployeeRepository .cs b/CompanyManagment.EFCore/Repository/EmployeeRepository .cs index 0f708422..fc08b209 100644 --- a/CompanyManagment.EFCore/Repository/EmployeeRepository .cs +++ b/CompanyManagment.EFCore/Repository/EmployeeRepository .cs @@ -7,6 +7,7 @@ using Company.Domain.EmployeeAccountAgg; using Company.Domain.EmployeeAgg; using Company.Domain.EmployeeInsuranceRecordAgg; using Company.Domain.InsuranceListAgg; +using Company.Domain.LeftWorkTempAgg; using CompanyManagment.App.Contracts.Employee; using CompanyManagment.App.Contracts.Employee.DTO; using CompanyManagment.App.Contracts.EmployeeInsuranceRecord; @@ -1289,26 +1290,68 @@ public class EmployeeRepository : RepositoryBase, IEmployeeRepos public async Task> GetWorkingEmployeesSelectList(long workshopId) { - var dateNow = DateTime.Now.Date; + var hasNotStoppedWorkingYet = Tools.GetUndefinedDateTime(); + var baseQuery = await + ( + from personnelCode in _context.PersonnelCodeSet + join employee in _context.Employees + on personnelCode.EmployeeId equals employee.id + where personnelCode.WorkshopId == workshopId + select new + { + Employee = employee, + PersonnelCode = personnelCode + } + ).ToListAsync(); - var workshopActiveLeftWorksQuery = _context.LeftWorkList.Where(x => x.WorkshopId == workshopId && - x.StartWorkDate <= dateNow && x.LeftWorkDate > dateNow); + var employeeIds = baseQuery.Select(x => x.Employee.id).ToList(); + var leftWorks = await _context.LeftWorkList + .Where(x => x.WorkshopId == workshopId && employeeIds.Contains(x.EmployeeId)) + .ToListAsync(); - var workshopActiveInsuranceLeftWorksQuery = _context.LeftWorkInsuranceList.Where(x => x.WorkshopId == workshopId && - x.StartWorkDate <= dateNow && (x.LeftWorkDate > dateNow || x.LeftWorkDate == null)); + var insuranceLeftWorks = await _context.LeftWorkInsuranceList + .Where(x => x.WorkshopId == workshopId && employeeIds.Contains(x.EmployeeId)) + .ToListAsync(); - - var employeesQuery = _context.Employees.Where(x => workshopActiveLeftWorksQuery.Any(y => y.EmployeeId == x.id) || - workshopActiveInsuranceLeftWorksQuery.Any(y => y.EmployeeId == x.id)); - - - return await employeesQuery.Select(x => new EmployeeSelectListViewModel() + var result = baseQuery.Select(x => { - Id = x.id, - EmployeeFullName = x.FullName - }).ToListAsync(); + var left = leftWorks + .Where(l => l.EmployeeId == x.Employee.id) + .MaxBy(l => l.StartWorkDate); + + var insuranceLeftWork = insuranceLeftWorks + .Where(l => l.EmployeeId == x.Employee.id).MaxBy(l => l.StartWorkDate); + + + + + var contractLeft = left != null + ? left.LeftWorkDate != hasNotStoppedWorkingYet ? left.LeftWorkDate.ToFarsi() : "" + : ""; + var insuranceLeft = insuranceLeftWork != null + ? insuranceLeftWork.LeftWorkDate != null ? insuranceLeftWork.LeftWorkDate.ToFarsi() : "" + : ""; + + + + + bool employeeHasLeft = + (!string.IsNullOrWhiteSpace(insuranceLeft) && !string.IsNullOrWhiteSpace(contractLeft)) + || (left == null && !string.IsNullOrWhiteSpace(insuranceLeft)) + || (insuranceLeftWork == null && !string.IsNullOrWhiteSpace(contractLeft)); + + return new EmployeeSelectListViewModel + { + Id = x.Employee.id, + EmployeeFullName = x.Employee.FullName, + Black = employeeHasLeft, + }; + }).OrderBy(x => x.Black ? 1 : 0).ToList(); + + return result; + } #endregion diff --git a/ServiceHost/Areas/Client/Controllers/EmployeeController.cs b/ServiceHost/Areas/Client/Controllers/EmployeeController.cs index 5218a7a8..1ed78e45 100644 --- a/ServiceHost/Areas/Client/Controllers/EmployeeController.cs +++ b/ServiceHost/Areas/Client/Controllers/EmployeeController.cs @@ -16,8 +16,11 @@ public class EmployeeController:ClientBaseController _employeeApplication = employeeApplication; _workshopId = authHelper.GetWorkshopId(); } - - + + /// + /// سلکت لیست پرسنل + /// + /// [HttpGet("select-list")] public async Task>> GetEmployeeSelectList() {