diff --git a/Company.Domain/RollCallEmployeeAgg/IRollCallEmployeeRepository.cs b/Company.Domain/RollCallEmployeeAgg/IRollCallEmployeeRepository.cs index d04be761..3c164b50 100644 --- a/Company.Domain/RollCallEmployeeAgg/IRollCallEmployeeRepository.cs +++ b/Company.Domain/RollCallEmployeeAgg/IRollCallEmployeeRepository.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using _0_Framework.Domain; using CompanyManagment.App.Contracts.RollCallEmployee; @@ -6,6 +7,7 @@ namespace Company.Domain.RollCallEmployeeAgg; public interface IRollCallEmployeeRepository : IRepository { + bool HasRollCallRecord(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd); List GetByWorkshopId(long workshopId); EditRollCallEmployee GetDetails(long id); RollCallEmployeeViewModel GetByEmployeeIdAndWorkshopId(long employeeId, long workshopId); diff --git a/CompanyManagment.App.Contracts/Checkout/CreateCheckoutListViewModel.cs b/CompanyManagment.App.Contracts/Checkout/CreateCheckoutListViewModel.cs index 2cad9045..76184b0c 100644 --- a/CompanyManagment.App.Contracts/Checkout/CreateCheckoutListViewModel.cs +++ b/CompanyManagment.App.Contracts/Checkout/CreateCheckoutListViewModel.cs @@ -8,6 +8,8 @@ public class CreateCheckoutListViewModel public long PersonnelCode { get; set; } + public long EmployeeId { get; set; } + public string ContractNo { get; set; } public string EmployerName { get; set; } diff --git a/CompanyManagment.Application/RollCallEmployeeStatusApplication.cs b/CompanyManagment.Application/RollCallEmployeeStatusApplication.cs index ede4a1e5..a27afe0b 100644 --- a/CompanyManagment.Application/RollCallEmployeeStatusApplication.cs +++ b/CompanyManagment.Application/RollCallEmployeeStatusApplication.cs @@ -89,60 +89,9 @@ namespace CompanyManagment.Application } public bool HasRollCallRecord(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd) - { - //موقت - // دادمهرگستر 11 * - //585 کاشی گالری سرامیس (بابک ابراهیمی ) - //آموزشگاه ملل 604 * - //کاریابی ملل 605 * - //368 پیتزا امیر آماده سازی - //367 پیتزا امیر رستوران - //286 مرکز توان بخشی رسالت * - //610 بیمارستان پارس - رازقی طعام - DateTime start1404 = new DateTime(2025, 03, 21); - bool skipRollCallByWorkshopId = false; - if (contractStart < start1404) - { - skipRollCallByWorkshopId = workshopId is 11 or 585 or 604 or 605 or 368 or 367 or 286; - } - else - { - skipRollCallByWorkshopId = workshopId is 368 or 367 or 585 or 610; - } - - - - - //#if DEBUG - // skipRollCallByWorkshopId = workshopId is 11 or 585 or 604 or 605 or 368 or 367; - //#endif - if (skipRollCallByWorkshopId) - return false; - - - // 42550 مصطفی مقدس نژاد فومنی - bool skipRollCallByEmployeeId = employeeId is 42550; - if (skipRollCallByEmployeeId) - return false; - - //9211 محسا تازه - if (employeeId == 9211 && contractStart >= start1404) - return false; - - var service = _rollCallServiceRepository.GetAllServiceByWorkshopId(workshopId); - - if (!service.Any(x => x.StartService.Date <= contractStart.Date && x.EndService.Date >= contractEnd.Date)) - return false; - var rollCallEmployee = - _rollCallEmployeeRepository.GetByEmployeeIdAndWorkshopId(employeeId, workshopId); - - if (rollCallEmployee == null) - return false; - - return _employeeRollCallStatusRepository.Exists(x => x.RollCallEmployeeId == rollCallEmployee.Id && - x.StartDate.Date <= contractStart.Date && - x.EndDate.Date >= contractEnd.Date); - } + { + return _rollCallEmployeeRepository.HasRollCallRecord(employeeId, workshopId, contractStart, contractEnd); + } public List GetActiveByWorkshopIdInDate(long workshopId, DateTime startDateGr, DateTime endDateGr) { diff --git a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs index 9af0fd60..f63b297f 100644 --- a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs +++ b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs @@ -3,16 +3,19 @@ using System.Collections.Generic; using System.Data; using System.Globalization; using System.Linq; +using System.Reflection.Metadata.Ecma335; using System.Threading.Tasks; using _0_Framework.Application; using _0_Framework.InfraStructure; using Company.Domain.CheckoutAgg; using Company.Domain.LeftWorkAgg; using Company.Domain.RollCallAgg; +using Company.Domain.RollCallEmployeeAgg; using CompanyManagment.App.Contracts.Checkout; using CompanyManagment.App.Contracts.Contract; using CompanyManagment.App.Contracts.Employee; using CompanyManagment.App.Contracts.HolidayItem; +using CompanyManagment.App.Contracts.InsuranceList; using CompanyManagment.App.Contracts.Leave; using CompanyManagment.App.Contracts.LeftWork; using CompanyManagment.App.Contracts.Loan; @@ -21,6 +24,7 @@ using CompanyManagment.App.Contracts.SalaryAid; using CompanyManagment.App.Contracts.WorkingHours; using CompanyManagment.App.Contracts.WorkingHoursTemp; using CompanyManagment.App.Contracts.Workshop; +using CompanyManagment.EFCore.Migrations; using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; @@ -41,8 +45,9 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos private readonly ILeftWorkRepository _leftWorkRepository; private readonly IRollCallRepository _rollCallRepository; private readonly IRollCallMandatoryRepository _rollCallMandatoryRepository; + private readonly IRollCallEmployeeRepository _rollCallEmployeeRepository; - public CheckoutRepository(IAuthHelper authHelper, CompanyContext context, IConfiguration configuration, ILeftWorkRepository leftWorkRepository, IWorkingHoursTempApplication workingHoursTempApplication, IRollCallRepository rollCallRepository, IRollCallMandatoryRepository rollCallMandatoryRepository) : base(context) + public CheckoutRepository(IAuthHelper authHelper, CompanyContext context, IConfiguration configuration, ILeftWorkRepository leftWorkRepository, IWorkingHoursTempApplication workingHoursTempApplication, IRollCallRepository rollCallRepository, IRollCallMandatoryRepository rollCallMandatoryRepository, IRollCallEmployeeRepository rollCallEmployeeRepository) : base(context) { _authHelper = authHelper; @@ -52,6 +57,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos _workingHoursTempApplication = workingHoursTempApplication; _rollCallRepository = rollCallRepository; _rollCallMandatoryRepository = rollCallMandatoryRepository; + _rollCallEmployeeRepository = rollCallEmployeeRepository; } /// @@ -134,7 +140,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos /// /// /// - public Task GetContractResultToCreateCheckout(long workshopId,long employeeId, string year, string month, string contractStart, + public Task GetContractResultToCreateCheckout(long workshopId, long employeeId, string year, string month, string contractStart, string contractEnd) { DateTime startSreach; @@ -147,17 +153,28 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos } else { - + if (month == "0" && year == "0") { DateTime now = DateTime.Now; startSreach = now; endSearch = (now.ToFarsi().FindeEndOfMonth()).ToGeorgianDateTime(); - } else if (month == "0" && year != "0") + } + else if (month == "0" && year != "0") { DateTime now = DateTime.Now; - startSreach = now; - endSearch = (now.ToFarsi().FindeEndOfMonth()).ToGeorgianDateTime(); + + string startStr = $"{year}/{now.ToFarsi().Substring(5, 2)}/01"; + startSreach = startStr.ToGeorgianDateTime(); + endSearch = (startStr.FindeEndOfMonth()).ToGeorgianDateTime(); + } + else if (month != "0" && year == "0") + { + DateTime now = DateTime.Now; + + string startStr = $"{now.ToFarsi().Substring(0, 4)}/{month}/01"; + startSreach = startStr.ToGeorgianDateTime(); + endSearch = (startStr.FindeEndOfMonth()).ToGeorgianDateTime(); } else { @@ -165,10 +182,99 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos startSreach = startStr.ToGeorgianDateTime(); endSearch = (startStr.FindeEndOfMonth()).ToGeorgianDateTime(); } - + } + var contracts = _context.Contracts - .Where(x => x.WorkshopIds == workshopId && x.IsActiveString == "true" && startSreach < x.ContractEnd && endSearch > x.ContarctStart); + .Where(x => x.WorkshopIds == workshopId && x.IsActiveString == "true" && startSreach < x.ContractEnd && + endSearch > x.ContarctStart) + .Join(_context.Workshops, + contract => contract.WorkshopIds, + workshop => workshop.id, + (contract, workshop) => new { contract, workshop }) + .Join(_context.Employees, + contractWorkshop => contractWorkshop.contract.EmployeeId, + employee => employee.id, + (contractWorkshop, employee) => new { contractWorkshop, employee }) + .Join(_context.LeftWorkList.Where(l => l.WorkshopId == workshopId), + contractWorkshopEmployee => contractWorkshopEmployee.contractWorkshop.contract.EmployeeId, + leftwork => leftwork.EmployeeId, + (contractWorkshopEmployee, leftwork) => new { contractWorkshopEmployee, leftwork }) + .Join(_context.PersonnelCodeSet.Where(p => p.WorkshopId == workshopId), + contractWorkshopEmployeeleftWork => contractWorkshopEmployeeleftWork.contractWorkshopEmployee + .contractWorkshop.contract.EmployerId, + personnelCode => personnelCode.EmployeeId, + (contractWorkshopEmployeeleftWork, personnelCode) => + new { contractWorkshopEmployeeleftWork, personnelCode }) + + .GroupJoin(_context.CheckoutSet, + contractWorkshopEmployeeleftWorkPersonnelCode => contractWorkshopEmployeeleftWorkPersonnelCode + .contractWorkshopEmployeeleftWork.contractWorkshopEmployee.contractWorkshop.contract.id, + checkout => checkout.ContractId, + (contractWorkshopEmployeeleftWorkPersonnelCode, checkout) => + new { contractWorkshopEmployeeleftWorkPersonnelCode, checkout }).ToList(); + + var finalResult = contracts.Select(result => + { + var hasChekout = result.checkout.FirstOrDefault(x => x.ContractStart < endSearch && x.ContractEnd > startSreach && x.IsActiveString == "true"); + + if (hasChekout != null) + { + var checkout + return new CreateCheckoutListViewModel + { + Id = result.checkout., + + EmployeeId = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork + .contractWorkshopEmployee.employee.id, + ContractNo = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork + .contractWorkshopEmployee.contractWorkshop.contract.ContractNo, + //EmployerName = result.contract.EmployerName, + WorkshopName = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork + .contractWorkshopEmployee.contractWorkshop.workshop.WorkshopFullName, + EmployeeName = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork + .contractWorkshopEmployee.employee.FullName, + + PersonnelCode = result.contractWorkshopEmployeeleftWorkPersonnelCode.personnelCode.PersonnelCode, + //PersonnelCodeInt = Convert.ToInt32(result.contract.PersonnelCode), + LaterThanEnd = false, + Extension = false, + Description = "", + }; + } + var employeeIjoin = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork + .contractWorkshopEmployee.employee.id; + + bool hasRollCall = + _rollCallEmployeeRepository.HasRollCallRecord(employeeIjoin, workshopId, startSreach, endSearch); + + var leftWork = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork + .leftwork; + + return new CreateCheckoutListViewModel + { + Id = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork + .contractWorkshopEmployee.contractWorkshop.contract.id, + + EmployeeId = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork + .contractWorkshopEmployee.employee.id, + ContractNo = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork + .contractWorkshopEmployee.contractWorkshop.contract.ContractNo, + //EmployerName = result.contract.EmployerName, + WorkshopName = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork + .contractWorkshopEmployee.contractWorkshop.workshop.WorkshopFullName, + EmployeeName = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork + .contractWorkshopEmployee.employee.FullName, + + PersonnelCode = result.contractWorkshopEmployeeleftWorkPersonnelCode.personnelCode.PersonnelCode, + //PersonnelCodeInt = Convert.ToInt32(result.contract.PersonnelCode), + LaterThanEnd = false, + Extension = false, + Description = "", + }; + + }).ToList(); + if (employeeId > 0) contracts = contracts.Where(x => x.EmployeeId == employeeId); @@ -1209,13 +1315,13 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos firstRCEndDate = firstRollCall.ShiftEndWithoutRest ?? firstRollCall.EndDate; if (secondRollCall != null) secondRCEndDate = secondRollCall.ShiftEndWithoutRest ?? secondRollCall.EndDate; - - + + return new CheckoutDailyRollCallViewModel() { StartDate1 = firstRollCall?.StartDate?.ToString("HH:mm") ?? "", - EndDate1 =firstRCEndDate?.ToString("HH:mm") ?? "", + EndDate1 = firstRCEndDate?.ToString("HH:mm") ?? "", StartDate2 = secondRollCall?.StartDate?.ToString("HH:mm") ?? "", EndDate2 = secondRCEndDate?.ToString("HH:mm") ?? "", diff --git a/CompanyManagment.EFCore/Repository/RollCallEmployeeRepository.cs b/CompanyManagment.EFCore/Repository/RollCallEmployeeRepository.cs index 37e836f4..a084bdc3 100644 --- a/CompanyManagment.EFCore/Repository/RollCallEmployeeRepository.cs +++ b/CompanyManagment.EFCore/Repository/RollCallEmployeeRepository.cs @@ -6,6 +6,8 @@ using System.Linq; using _0_Framework.Application; using _0_Framework.InfraStructure; using Company.Domain.RollCallEmployeeAgg; +using Company.Domain.RollCallEmployeeStatusAgg; +using Company.Domain.RollCallServiceAgg; using CompanyManagment.App.Contracts.LeftWorkTemp; using CompanyManagment.App.Contracts.RollCallEmployee; using CompanyManagment.App.Contracts.RollCallEmployeeStatus; @@ -20,16 +22,77 @@ public class RollCallEmployeeRepository : RepositoryBase private readonly CompanyContext _context; private readonly IPasswordHasher _passwordHasher; private readonly IWebHostEnvironment _webHostEnvironment; + + private IRollCallServiceRepository _rollCallServiceRepository; + + private IRollCallEmployeeStatusRepository _employeeRollCallStatusRepository; // private IRollCallEmployeeRepository _rollCallEmployeeRepositoryImplementation; public RollCallEmployeeRepository(CompanyContext context, IPasswordHasher passwordHasher, - IWebHostEnvironment webHostEnvironment) : base(context) + IWebHostEnvironment webHostEnvironment, IRollCallServiceRepository rollCallServiceRepository, IRollCallEmployeeStatusRepository employeeRollCallStatusRepository) : base(context) { _context = context; _passwordHasher = passwordHasher; _webHostEnvironment = webHostEnvironment; + _rollCallServiceRepository = rollCallServiceRepository; + _employeeRollCallStatusRepository = employeeRollCallStatusRepository; } + + public bool HasRollCallRecord(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd) + { + //موقت + // دادمهرگستر 11 * + //585 کاشی گالری سرامیس (بابک ابراهیمی ) + //آموزشگاه ملل 604 * + //کاریابی ملل 605 * + //368 پیتزا امیر آماده سازی + //367 پیتزا امیر رستوران + //286 مرکز توان بخشی رسالت * + //610 بیمارستان پارس - رازقی طعام + DateTime start1404 = new DateTime(2025, 03, 21); + bool skipRollCallByWorkshopId = false; + if (contractStart < start1404) + { + skipRollCallByWorkshopId = workshopId is 11 or 585 or 604 or 605 or 368 or 367 or 286; + } + else + { + skipRollCallByWorkshopId = workshopId is 368 or 367 or 585 or 610; + } + + + + + //#if DEBUG + // skipRollCallByWorkshopId = workshopId is 11 or 585 or 604 or 605 or 368 or 367; + //#endif + if (skipRollCallByWorkshopId) + return false; + + + // 42550 مصطفی مقدس نژاد فومنی + bool skipRollCallByEmployeeId = employeeId is 42550; + if (skipRollCallByEmployeeId) + return false; + + //9211 محسا تازه + if (employeeId == 9211 && contractStart >= start1404) + return false; + + var service = _rollCallServiceRepository.GetAllServiceByWorkshopId(workshopId); + + if (!service.Any(x => x.StartService.Date <= contractStart.Date && x.EndService.Date >= contractEnd.Date)) + return false; + var rollCallEmployee = GetByEmployeeIdAndWorkshopId(employeeId, workshopId); + + if (rollCallEmployee == null) + return false; + + return _employeeRollCallStatusRepository.Exists(x => x.RollCallEmployeeId == rollCallEmployee.Id && + x.StartDate.Date <= contractStart.Date && + x.EndDate.Date >= contractEnd.Date); + } public List GetByWorkshopId(long workshopId) { var query = _context.RollCallEmployees.Select(x => new RollCallEmployeeViewModel()