From 6b6ec79faaf87822cc81743b8c7c821309e5706c Mon Sep 17 00:00:00 2001 From: SamSys Date: Mon, 29 Dec 2025 17:57:24 +0330 Subject: [PATCH] add PrintAllDetailsPersonnelInfoClient metoth controler --- .../EmployeeAgg/IEmployeeRepository.cs | 7 ++ .../PrintAllDetailsPersonnelInfoDtoClient.cs | 54 +++++++++++ .../Employee/IEmployeeApplication.cs | 8 ++ .../EmployeeAplication.cs | 5 + .../Repository/EmployeeRepository .cs | 94 ++++++++++++++++++- .../Client/Controllers/EmployeeController.cs | 12 ++- 6 files changed, 178 insertions(+), 2 deletions(-) create mode 100644 CompanyManagment.App.Contracts/Employee/DTO/PrintAllDetailsPersonnelInfoDtoClient.cs diff --git a/Company.Domain/EmployeeAgg/IEmployeeRepository.cs b/Company.Domain/EmployeeAgg/IEmployeeRepository.cs index 5bf23937..6d4fb5aa 100644 --- a/Company.Domain/EmployeeAgg/IEmployeeRepository.cs +++ b/Company.Domain/EmployeeAgg/IEmployeeRepository.cs @@ -96,6 +96,13 @@ public interface IEmployeeRepository : IRepository /// Task> PrintAllEmployeesInfoClient(long workshopId); + /// + /// پرینت گروهی تفکیکی پرسنل + /// + /// + /// + Task> PrintAllDetailsPersonnelInfoClient(long workshopId); + /// /// سلکت لیست پرسنل های کارگاه کلاینت /// diff --git a/CompanyManagment.App.Contracts/Employee/DTO/PrintAllDetailsPersonnelInfoDtoClient.cs b/CompanyManagment.App.Contracts/Employee/DTO/PrintAllDetailsPersonnelInfoDtoClient.cs new file mode 100644 index 00000000..655dc6d1 --- /dev/null +++ b/CompanyManagment.App.Contracts/Employee/DTO/PrintAllDetailsPersonnelInfoDtoClient.cs @@ -0,0 +1,54 @@ +namespace CompanyManagment.App.Contracts.Employee.DTO; + +/// +/// پرینت گروهی تفکیکی پرسنل +/// +public class PrintAllDetailsPersonnelInfoDtoClient +{ + + + /// + /// نام کامل پرسنل + /// + public string EmployeeFullName { get; set; } + + + + /// + ///کد ملی + /// + public string NationalCode { get; set; } + + /// + /// شماره شناسنامه + /// + public string IdNumber { get; set; } + + /// + /// تاریخ تولد + /// + public string DateOfBirth { get; set; } + + /// + /// نام پدر + /// + public string FatherName { get; set; } + + /// + /// تعداد فرزندان + /// + public string NumberOfChildren { get; set; } + + /// + /// استان + /// + public string State { get; set; } + + /// + /// شهر + /// + public string City { get; set; } + + + public string Address { 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 9347332f..73314de0 100644 --- a/CompanyManagment.App.Contracts/Employee/IEmployeeApplication.cs +++ b/CompanyManagment.App.Contracts/Employee/IEmployeeApplication.cs @@ -124,6 +124,14 @@ public interface IEmployeeApplication /// Task> PrintAllEmployeesInfoClient(long workshopId); + + /// + /// پرینت گروهی تفکیکی پرسنل + /// + /// + /// + Task> PrintAllDetailsPersonnelInfoClient(long workshopId); + /// /// سلکت لیست پرسنل های کارگاه کلاینت /// diff --git a/CompanyManagment.Application/EmployeeAplication.cs b/CompanyManagment.Application/EmployeeAplication.cs index fdf7e950..decb579a 100644 --- a/CompanyManagment.Application/EmployeeAplication.cs +++ b/CompanyManagment.Application/EmployeeAplication.cs @@ -1744,6 +1744,11 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli return await _EmployeeRepository.PrintAllEmployeesInfoClient(workshopId); } + public async Task> PrintAllDetailsPersonnelInfoClient(long workshopId) + { + return await _EmployeeRepository.PrintAllDetailsPersonnelInfoClient(workshopId); + } + public async Task> GetWorkingEmployeesSelectList(long workshopId) { return await _EmployeeRepository.GetWorkingEmployeesSelectList(workshopId); diff --git a/CompanyManagment.EFCore/Repository/EmployeeRepository .cs b/CompanyManagment.EFCore/Repository/EmployeeRepository .cs index fc08b209..e60c5398 100644 --- a/CompanyManagment.EFCore/Repository/EmployeeRepository .cs +++ b/CompanyManagment.EFCore/Repository/EmployeeRepository .cs @@ -1287,7 +1287,99 @@ public class EmployeeRepository : RepositoryBase, IEmployeeRepos && x.EmployeeStatusInWorkshop != EmployeeStatusInWorkshop.LefWorkTemp) .Select(x => new PrintAllEmployeesInfoDtoClient(x)).ToList(); } - + + public async Task> PrintAllDetailsPersonnelInfoClient(long workshopId) + { + 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 employeeIds = baseQuery.Select(x => x.Employee.id).ToList(); + + var leftWorks = await _context.LeftWorkList + .Where(x => x.WorkshopId == workshopId && employeeIds.Contains(x.EmployeeId)) + .ToListAsync(); + + var insuranceLeftWorks = await _context.LeftWorkInsuranceList + .Where(x => x.WorkshopId == workshopId && employeeIds.Contains(x.EmployeeId)) + .ToListAsync(); + + var children = await _context.EmployeeChildrenSet.Where(x => employeeIds.Contains(x.EmployeeId)).ToListAsync(); + + + + + var result = baseQuery.Select(x => + { + 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() : "" + : ""; + int personnelCode = Convert.ToInt32($"{x.PersonnelCode.PersonnelCode}"); + + int numberOfChildren = children.Count(ch => ch.EmployeeId == x.Employee.id); + + bool employeeHasLeft = + (!string.IsNullOrWhiteSpace(insuranceLeft) && !string.IsNullOrWhiteSpace(contractLeft)) + || (left == null && !string.IsNullOrWhiteSpace(insuranceLeft)) + || (insuranceLeftWork == null && !string.IsNullOrWhiteSpace(contractLeft)); + + return new + { + EmployeeFullName = x.Employee.FullName, + PersonnelCode = personnelCode, + NationalCode = x.Employee.NationalCode, + IdNumber = x.Employee.IdNumber, + DateOfBirth = x.Employee.DateOfBirth.ToFarsi(), + FatherName = x.Employee.FatherName, + NumberOfChildren = $"{numberOfChildren}", + Black = employeeHasLeft, + State = x.Employee.State, + City = x.Employee.City, + Address = x.Employee.Address + }; + }).OrderBy(x => x.Black ? 1 : 0).ThenBy(x => x.PersonnelCode).ToList(); + + return result.Select(x => new PrintAllDetailsPersonnelInfoDtoClient + { + EmployeeFullName = x.EmployeeFullName, + NationalCode = x.NationalCode, + IdNumber = x.IdNumber, + FatherName = x.FatherName, + DateOfBirth = x.DateOfBirth, + NumberOfChildren = x.NumberOfChildren, + State = x.State, + City = x.City, + Address = x.Address + + }).ToList(); + + } + public async Task> GetWorkingEmployeesSelectList(long workshopId) { var hasNotStoppedWorkingYet = Tools.GetUndefinedDateTime(); diff --git a/ServiceHost/Areas/Client/Controllers/EmployeeController.cs b/ServiceHost/Areas/Client/Controllers/EmployeeController.cs index 1ed78e45..effd7e1e 100644 --- a/ServiceHost/Areas/Client/Controllers/EmployeeController.cs +++ b/ServiceHost/Areas/Client/Controllers/EmployeeController.cs @@ -52,6 +52,16 @@ public class EmployeeController:ClientBaseController var result = await _employeeApplication.PrintAllEmployeesInfoClient(_workshopId); return result; } - + + /// + /// پرینت گروهی تفکیکی پرسنل + /// + /// + [HttpGet("PrintAllDetailsPersonnelInfo")] + public async Task> PrintAllDetailsPersonnelInfoClient() + { + var result = await _employeeApplication.PrintAllDetailsPersonnelInfoClient(_workshopId); + return result; + } } \ No newline at end of file