using System; using System.Linq; using System.Security.Cryptography.X509Certificates; using System.Threading.Tasks; using _0_Framework.Application; using _0_Framework.InfraStructure; using Company.Domain.LeftWorkAgg; using Company.Domain.LeftWorkTempAgg; using CompanyManagment.App.Contracts.LeftWorkTemp; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; namespace CompanyManagment.EFCore.Repository; public class LeftWorkTempRepository : RepositoryBase, ILeftWorkTempRepository { private readonly CompanyContext _companyContext; public LeftWorkTempRepository(CompanyContext companyContext) : base(companyContext) { _companyContext = companyContext; } public async Task GetStartAndLeftWorkDetails(long employeeId, long workshopId) { var employee = await _companyContext.Employees.FindAsync(employeeId); var workshop = await _companyContext.Workshops.FindAsync(workshopId); var leftWorkTemp = await _companyContext.LeftWorkTemps.FirstOrDefaultAsync(x => x.WorkshopId == workshopId && x.EmployeeId == employeeId); if (employee == null || workshop == null || leftWorkTemp == null) { return new GetStartWorkTempDetails(); } var job = await _companyContext.Jobs.FindAsync(leftWorkTemp.JobId); var previousLeftWorks = _companyContext.LeftWorkList .Where(x => leftWorkTemp.EmployeeId == x.EmployeeId && leftWorkTemp.WorkshopId == x.WorkshopId).ToList(); if (leftWorkTemp.LeftWorkType == LeftWorkTempType.LeftWork) { previousLeftWorks = previousLeftWorks.Where(x => x.id != leftWorkTemp.LeftWorkId).ToList(); } var personnelCode = _companyContext.PersonnelCodeSet.FirstOrDefault(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId)?.PersonnelCode; return new GetStartWorkTempDetails { WorkshopId = leftWorkTemp.WorkshopId, EmployeeId = leftWorkTemp.EmployeeId, WorkshopFullName = workshop.WorkshopFullName, EmployeeFullName = employee.FullName, JobId = leftWorkTemp.JobId, JobName = job?.JobName, PersonnelCode = personnelCode ?? 0, LeftWorkTemp = new LeftWorkTempDetailsViewModel() { Id = leftWorkTemp.id, LastDayStanding = leftWorkTemp.LastDayStanding == new DateTime() ? "" : leftWorkTemp.LastDayStanding.ToFarsi(), LeftWork = leftWorkTemp.LeftWork == new DateTime() ? "" : leftWorkTemp.LeftWork.ToFarsi(), StartWork = leftWorkTemp.StartWork.ToFarsi() }, PreviousLeftWorks = previousLeftWorks.Select(x => new LeftWorkTempDetailsViewModel() { Id = x.id, LastDayStanding = x.LeftWorkDate.AddDays(-1).ToFarsi(), LeftWork = x.LeftWorkDate.ToFarsi(), StartWork = x.StartWorkDate.ToFarsi() }).ToList() }; } }