refactor selectList and PrintAllEmployee Client

This commit is contained in:
SamSys
2025-12-29 16:52:54 +03:30
parent 4ed1907075
commit d5b70d1545
4 changed files with 72 additions and 19 deletions

View File

@@ -20,7 +20,7 @@ public class PrintAllEmployeesInfoDtoClient
ContractLeftDate = source.ContractLeftDate;
LatestInsuranceStartDate = source.LatestInsuranceStartDate;
InsuranceLeftDate = source.InsuranceLeftDate;
EmployeeStatusInWorkshop = source.EmployeeStatusInWorkshop;
Black = source.EmployeeStatusInWorkshop == EmployeeStatusInWorkshop.HasLeft;
}
/// <summary>
/// آی دی پرسنل
@@ -92,5 +92,5 @@ public class PrintAllEmployeesInfoDtoClient
/// <summary>
/// وضعیت پرسنل در کارگاه
/// </summary>
public EmployeeStatusInWorkshop EmployeeStatusInWorkshop { get; set; }
public bool Black { get; set; }
}

View File

@@ -123,9 +123,16 @@ public interface IEmployeeApplication
/// <param name="workshopId"></param>
/// <returns></returns>
Task<List<PrintAllEmployeesInfoDtoClient>> PrintAllEmployeesInfoClient(long workshopId);
/// <summary>
/// سلکت لیست پرسنل های کارگاه کلاینت
/// </summary>
/// <param name="workshopId"></param>
/// <returns></returns>
Task<List<EmployeeSelectListViewModel>> GetWorkingEmployeesSelectList(long workshopId);
#endregion
Task<List<EmployeeSelectListViewModel>> GetWorkingEmployeesSelectList(long workshopId);
}
public class GetClientEmployeeListSearchModel

View File

@@ -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<long, Employee>, IEmployeeRepos
public async Task<List<EmployeeSelectListViewModel>> 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

View File

@@ -16,8 +16,11 @@ public class EmployeeController:ClientBaseController
_employeeApplication = employeeApplication;
_workshopId = authHelper.GetWorkshopId();
}
/// <summary>
/// سلکت لیست پرسنل
/// </summary>
/// <returns></returns>
[HttpGet("select-list")]
public async Task<ActionResult<List<EmployeeSelectListViewModel>>> GetEmployeeSelectList()
{