diff --git a/.github/workflows/dotnet-developPublish.yml b/.github/workflows/dotnet-developPublish.yml index 4b5a1e48..d99d345e 100644 --- a/.github/workflows/dotnet-developPublish.yml +++ b/.github/workflows/dotnet-developPublish.yml @@ -33,14 +33,18 @@ jobs: shell: powershell run: | $publishFolder = Resolve-Path ./publish + $server = $env:SERVER_HOST + $user = $env:DEPLOY_USER + $pass = $env:DEPLOY_PASSWORD + & "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" ` -verb:sync ` -source:contentPath="$publishFolder" ` - -dest:contentPath="dadmehrg",computerName="https://$env:SERVER_HOST:8172/msdeploy.axd?site=gozareshgir",userName="$env:DEPLOY_USER",password="$env:DEPLOY_PASSWORD",authType="Basic" ` + -dest:contentPath="dadmehrg",computerName="https://${server}:8172/msdeploy.axd?site=dadmehrg",userName="$user",password="$pass",authType="Basic" ` -allowUntrusted ` -enableRule:AppOffline - env: - SERVER_HOST: 171.22.24.15 - DEPLOY_USER: ${{ secrets.DEPLOY_USER }} - DEPLOY_PASSWORD: ${{ secrets.DEPLOY_PASSWORD }} + env: + SERVER_HOST: ${{ secrets.DEV_HOST }} + DEPLOY_USER: ${{ secrets.DEV_USER }} + DEPLOY_PASSWORD: ${{ secrets.DEV_PASS }} diff --git a/Company.Domain/EmployeeAgg/IEmployeeRepository.cs b/Company.Domain/EmployeeAgg/IEmployeeRepository.cs index ac64b6a0..5bf23937 100644 --- a/Company.Domain/EmployeeAgg/IEmployeeRepository.cs +++ b/Company.Domain/EmployeeAgg/IEmployeeRepository.cs @@ -54,6 +54,7 @@ public interface IEmployeeRepository : IRepository Employee GetIgnoreQueryFilter(long id); + [Obsolete("این متد منسوخ شده است و از متد WorkedEmployeesInWorkshopSelectList استفاده کنید")] Task> WorkedEmployeesInWorkshopSelectList(long workshopId); @@ -85,10 +86,24 @@ public interface IEmployeeRepository : IRepository /// /// /// - Task> ListOfAllEmployees(EmployeeSearchModelDto searchModel, long workshopId); + Task> ListOfAllEmployeesClient(EmployeeSearchModelDto searchModel, long workshopId); + + /// + /// پرینت تجمیعی پرسنل کلاینت + /// api + /// + /// + /// + Task> PrintAllEmployeesInfoClient(long workshopId); + + /// + /// سلکت لیست پرسنل های کارگاه کلاینت + /// + /// + /// + Task> GetWorkingEmployeesSelectList(long workshopId); #endregion - Task> GetWorkingEmployeesSelectList(long workshopId); } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Employee/DTO/PrintAllEmployeesInfoDtoClient.cs b/CompanyManagment.App.Contracts/Employee/DTO/PrintAllEmployeesInfoDtoClient.cs new file mode 100644 index 00000000..67d640d1 --- /dev/null +++ b/CompanyManagment.App.Contracts/Employee/DTO/PrintAllEmployeesInfoDtoClient.cs @@ -0,0 +1,96 @@ +namespace CompanyManagment.App.Contracts.Employee.DTO; + +/// +/// پرینت تجمیعی پرسنل +/// +public class PrintAllEmployeesInfoDtoClient +{ + public PrintAllEmployeesInfoDtoClient(EmployeeListDto source) + { + Id = source.Id; + EmployeeFullName = source.EmployeeFullName; + PersonnelCode = source.PersonnelCode; + MaritalStatus = source.MaritalStatus; + NationalCode = source.NationalCode; + IdNumber = source.IdNumber; + DateOfBirth = source.DateOfBirth; + FatherName = source.FatherName; + NumberOfChildren = source.NumberOfChildren; + LatestContractStartDate = source.LatestContractStartDate; + ContractLeftDate = source.ContractLeftDate; + LatestInsuranceStartDate = source.LatestInsuranceStartDate; + InsuranceLeftDate = source.InsuranceLeftDate; + Black = source.EmployeeStatusInWorkshop == EmployeeStatusInWorkshop.HasLeft; + } + /// + /// آی دی پرسنل + /// + public long Id { get; set; } + + /// + /// نام کامل پرسنل + /// + public string EmployeeFullName { get; set; } + + /// + /// کد پرسنلی + /// + public int PersonnelCode { get; set; } + + /// + /// وضعیت تاهل + /// + public string MaritalStatus { 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 LatestContractStartDate { get; set; } + + /// + /// تاریخ ترک کار قرارداد + /// + public string ContractLeftDate { get; set; } + + + /// + /// آخرین تاریخ شروع بکار بیمه + /// + public string LatestInsuranceStartDate { get; set; } + + /// + /// تاریخ ترک کار بیمه + /// + public string InsuranceLeftDate { 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 3e4ff438..f1bd0180 100644 --- a/CompanyManagment.App.Contracts/Employee/IEmployeeApplication.cs +++ b/CompanyManagment.App.Contracts/Employee/IEmployeeApplication.cs @@ -1,8 +1,10 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Threading.Tasks; using _0_Framework.Application; using CompanyManagment.App.Contracts.Employee.DTO; using CompanyManagment.App.Contracts.EmployeeInsuranceRecord; +using Microsoft.AspNetCore.Mvc; namespace CompanyManagment.App.Contracts.Employee; @@ -73,10 +75,11 @@ public interface IEmployeeApplication long workshopId); Task EditEmployeeInEmployeeDocumentWorkFlow(EditEmployeeInEmployeeDocument command); + [Obsolete("این متد منسوخ شده است و از متد WorkedEmployeesInWorkshopSelectList استفاده کنید")] Task> WorkedEmployeesInWorkshopSelectList(long workshopId); Task> GetEmployeeDataFromApi(string nationalCode, string birthDate); - Task> GetWorkingEmployeesSelectList(long workshopId); + #endregion @@ -112,9 +115,25 @@ public interface IEmployeeApplication /// /// /// - Task> ListOfAllEmployees(EmployeeSearchModelDto searchModel, long workshopId); + Task> ListOfAllEmployeesClient(EmployeeSearchModelDto searchModel, long workshopId); + + /// + /// پرینت تجمیعی پرسنل کلاینت + /// api + /// + /// + /// + Task> PrintAllEmployeesInfoClient(long workshopId); + + /// + /// سلکت لیست پرسنل های کارگاه کلاینت + /// + /// + /// + Task> GetWorkingEmployeesSelectList(long workshopId); #endregion + } public class GetClientEmployeeListSearchModel diff --git a/CompanyManagment.Application/EmployeeAplication.cs b/CompanyManagment.Application/EmployeeAplication.cs index c5c21ca3..fdf7e950 100644 --- a/CompanyManagment.Application/EmployeeAplication.cs +++ b/CompanyManagment.Application/EmployeeAplication.cs @@ -1714,10 +1714,6 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli } - public async Task> GetWorkingEmployeesSelectList(long workshopId) - { - return await _EmployeeRepository.GetWorkingEmployeesSelectList(workshopId); - } #endregion @@ -1738,9 +1734,19 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli return await _EmployeeRepository.GetClientEmployeeList(searchModel, workshopId); } - public async Task> ListOfAllEmployees(EmployeeSearchModelDto searchModel, long workshopId) + public async Task> ListOfAllEmployeesClient(EmployeeSearchModelDto searchModel, long workshopId) { - return await _EmployeeRepository.ListOfAllEmployees(searchModel, workshopId); + return await _EmployeeRepository.ListOfAllEmployeesClient(searchModel, workshopId); + } + + public async Task> PrintAllEmployeesInfoClient(long workshopId) + { + return await _EmployeeRepository.PrintAllEmployeesInfoClient(workshopId); + } + + public async Task> GetWorkingEmployeesSelectList(long workshopId) + { + return await _EmployeeRepository.GetWorkingEmployeesSelectList(workshopId); } #endregion diff --git a/CompanyManagment.EFCore/Repository/EmployeeRepository .cs b/CompanyManagment.EFCore/Repository/EmployeeRepository .cs index 751177b9..cf33ead2 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; @@ -1175,7 +1176,7 @@ public class EmployeeRepository : RepositoryBase, IEmployeeRepos } - public async Task> ListOfAllEmployees(EmployeeSearchModelDto searchModel, long workshopId) + public async Task> ListOfAllEmployeesClient(EmployeeSearchModelDto searchModel, long workshopId) { var hasNotStoppedWorkingYet = Tools.GetUndefinedDateTime(); @@ -1276,28 +1277,81 @@ public class EmployeeRepository : RepositoryBase, IEmployeeRepos return result; } + + public async Task> PrintAllEmployeesInfoClient(long workshopId) + { + var res = await ListOfAllEmployeesClient(new EmployeeSearchModelDto(), workshopId); + + return res + .Where(x=>x.EmployeeStatusInWorkshop != EmployeeStatusInWorkshop.CreatedByClient + && x.EmployeeStatusInWorkshop != EmployeeStatusInWorkshop.LefWorkTemp) + .Select(x => new PrintAllEmployeesInfoDtoClient(x)).ToList(); + } + 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 140009e6..1ed78e45 100644 --- a/ServiceHost/Areas/Client/Controllers/EmployeeController.cs +++ b/ServiceHost/Areas/Client/Controllers/EmployeeController.cs @@ -16,15 +16,20 @@ public class EmployeeController:ClientBaseController _employeeApplication = employeeApplication; _workshopId = authHelper.GetWorkshopId(); } - + + /// + /// سلکت لیست پرسنل + /// + /// [HttpGet("select-list")] public async Task>> GetEmployeeSelectList() { - var result = await _employeeApplication.WorkedEmployeesInWorkshopSelectList(_workshopId); + var result = await _employeeApplication.GetWorkingEmployeesSelectList(_workshopId); return result; } + /// /// دریافت لیست پرسنل /// @@ -33,7 +38,20 @@ public class EmployeeController:ClientBaseController [HttpGet] public async Task>> GetList(EmployeeSearchModelDto searchModel) { - var result = await _employeeApplication.ListOfAllEmployees(searchModel, _workshopId); + var result = await _employeeApplication.ListOfAllEmployeesClient(searchModel, _workshopId); return result; } + + /// + /// پرینت تجمیعی پرسنل + /// + /// + [HttpGet("PrintAllEmployeesInfo")] + public async Task>> PrintAllEmployeesInfo() + { + var result = await _employeeApplication.PrintAllEmployeesInfoClient(_workshopId); + return result; + } + + } \ No newline at end of file