From 0e6229f681f18bf564be83636beb776f092cf68f Mon Sep 17 00:00:00 2001 From: SamSys Date: Mon, 12 Aug 2024 21:30:25 +0330 Subject: [PATCH] add employee leaves to TotalHourse --- .../Leave/LeaveSearchModel.cs | 8 ++- .../Leave/LeaveViewModel.cs | 2 + .../Repository/LeaveRepository.cs | 11 ++- .../Repository/RollCallMandatoryRepository.cs | 70 +++++++++++++++++-- .../Pages/Company/Checkouts/Index.cshtml.cs | 3 +- 5 files changed, 85 insertions(+), 9 deletions(-) diff --git a/CompanyManagment.App.Contracts/Leave/LeaveSearchModel.cs b/CompanyManagment.App.Contracts/Leave/LeaveSearchModel.cs index 282a2243..68459d65 100644 --- a/CompanyManagment.App.Contracts/Leave/LeaveSearchModel.cs +++ b/CompanyManagment.App.Contracts/Leave/LeaveSearchModel.cs @@ -1,10 +1,14 @@ -namespace CompanyManagment.App.Contracts.Leave; +using System; + +namespace CompanyManagment.App.Contracts.Leave; public class LeaveSearchModel { public string StartLeave { get; set; } public string EndLeave { get; set; } - public string LeaveHourses { get; set; } + public DateTime? StartLeaveGr { get; set; } + public DateTime? EndLeaveGr { get; set; } + public string LeaveHourses { get; set; } public long WorkshopId { get; set; } public long EmployeeId { get; set; } public string PaidLeaveType { get; set; } diff --git a/CompanyManagment.App.Contracts/Leave/LeaveViewModel.cs b/CompanyManagment.App.Contracts/Leave/LeaveViewModel.cs index 40a37676..450305fc 100644 --- a/CompanyManagment.App.Contracts/Leave/LeaveViewModel.cs +++ b/CompanyManagment.App.Contracts/Leave/LeaveViewModel.cs @@ -22,4 +22,6 @@ public class LeaveViewModel public int Month { get; set; } public string MonthStr { get; set; } public DateTime CreationDate { get; set; } + + public int DayCounter { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.EFCore/Repository/LeaveRepository.cs b/CompanyManagment.EFCore/Repository/LeaveRepository.cs index ee7afa42..6013f27a 100644 --- a/CompanyManagment.EFCore/Repository/LeaveRepository.cs +++ b/CompanyManagment.EFCore/Repository/LeaveRepository.cs @@ -78,8 +78,15 @@ public class LeaveRepository : RepositoryBase, ILeaveRepository (startSearch <= x.EndLeaveGr && endSearch >= x.EndLeaveGr) || (startSearch >= x.StartLeaveGr && startSearch <= x.EndLeaveGr) || (endSearch >= x.StartLeaveGr && endSearch <= x.EndLeaveGr)); - } - + }else if (searchModel.StartLeaveGr != null && searchModel.EndLeaveGr != null) + { + query = query.Where(x => (searchModel.StartLeaveGr <= x.StartLeaveGr && searchModel.EndLeaveGr >= x.StartLeaveGr) || + (searchModel.StartLeaveGr <= x.EndLeaveGr && searchModel.EndLeaveGr >= x.EndLeaveGr) || + (searchModel.StartLeaveGr >= x.StartLeaveGr && searchModel.StartLeaveGr <= x.EndLeaveGr) || + (searchModel.EndLeaveGr >= x.StartLeaveGr && searchModel.EndLeaveGr <= x.EndLeaveGr)); + } + if(searchModel.IsAccepted) + query = query.Where(x => x.IsAccepted == true); return query.OrderByDescending(x => x.Id).ToList(); } diff --git a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs index 8b3d7c21..438d63a8 100644 --- a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs +++ b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs @@ -3,10 +3,12 @@ using System.Collections.Generic; using System.Linq; using _0_Framework.Application; using _0_Framework.InfraStructure; +using Company.Domain.LeaveAgg; using Company.Domain.LeftWorkAgg; using Company.Domain.RollCallAgg; using Company.Domain.YearlySalaryAgg; using CompanyManagment.App.Contracts.Contract; +using CompanyManagment.App.Contracts.Leave; using CompanyManagment.App.Contracts.LeftWork; using CompanyManagment.App.Contracts.RollCall; using CompanyManagment.App.Contracts.WorkingHoursTemp; @@ -20,13 +22,15 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll private readonly CompanyContext _context; private readonly IYearlySalaryRepository _yearlySalaryRepository; private readonly ILeftWorkRepository _leftWorkRepository; + private readonly ILeaveRepository _leaveRepository; public RollCallMandatoryRepository(CompanyContext context, IYearlySalaryRepository yearlySalaryRepository, - ILeftWorkRepository leftWorkRepository) : base(context) + ILeftWorkRepository leftWorkRepository, ILeaveRepository leaveRepository) : base(context) { _context = context; _yearlySalaryRepository = yearlySalaryRepository; _leftWorkRepository = leftWorkRepository; + _leaveRepository = leaveRepository; } public ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, @@ -56,15 +60,73 @@ public class RollCallMandatoryRepository : RepositoryBase, IRoll var groupedRollCall = rollCallResult.GroupBy(x=>x.CreationDate).Select(x => new GroupedRollCalls() { CreationDate = x.Key, - SumOneDaySpan = new TimeSpan(x.Sum(x => x.ShiftSpan.Ticks)), + SumOneDaySpan = new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks)), }).ToList(); + //*****کسر ساعاعت استراحت پرسنل از ساعت کار var rollCallSubtractSpan = groupedRollCall.Select(x => new GroupedRollCalls() { CreationDate = x.CreationDate, AfterSubtractRestSpan = AfterSubtract(command,x.SumOneDaySpan,x.CreationDate), }).ToList(); - var sumSpans = new TimeSpan(rollCallSubtractSpan.Sum(x => x.AfterSubtractRestSpan.Ticks)); - + TimeSpan sumSpans = new TimeSpan(rollCallSubtractSpan.Sum(x => x.AfterSubtractRestSpan.Ticks)); + + + //****افزودن مرخصی پرسنل به مجموع ساعات کار*** + #region AddEmployeeLeavs + + + LeaveSearchModel leaveSearch = new LeaveSearchModel() + { + EmployeeId = employeeId, + WorkshopId = workshopId, + LeaveType = "استحقاقی", + PaidLeaveType = "روزانه", + StartLeaveGr = contractStart, + EndLeaveGr = contractEnd, + IsAccepted = true, + }; + var leaveSearchResult = _leaveRepository.search(leaveSearch); + if (leaveSearchResult.Count > 0) + { + int leavingDayCout = 0; + //مرخصی های مابین + List beatweenCheckout = leaveSearchResult.Where(x => x.StartLeaveGr >= contractStart && x.EndLeaveGr <= contractEnd).Select(x => new LeaveViewModel() + { + DayCounter = Convert.ToInt32(x.LeaveHourses), + + }).ToList(); + leavingDayCout += beatweenCheckout.Sum(x => x.DayCounter); + // مرخصی که شروعش قبل از شروع تصفیه حساب است + List beforeCheckout = leaveSearchResult.Where(x => x.StartLeaveGr < contractStart).Select(x => new LeaveViewModel() + { + DayCounter = (int)(contractStart - x.EndLeaveGr).TotalDays + 1, + + }).ToList(); + leavingDayCout+= beforeCheckout.Sum(x => x.DayCounter); + // مرخصی که پایانش بعد از پایان تصفیه حساب است + List afterCheckout = leaveSearchResult.Where(x => x.EndLeaveGr > contractEnd).Select(x => new LeaveViewModel() + { + DayCounter = (int)(x.StartLeaveGr - contractEnd).TotalDays + 1, + + }).ToList(); + leavingDayCout += afterCheckout.Sum(x => x.DayCounter); + Console.WriteLine(leavingDayCout); + TimeSpan workingPerDayAve = sumSpans / rollCallSubtractSpan.Count;//میانگین ساعت کار در روز + TimeSpan sumLeave = new TimeSpan(); + if (workingPerDayAve <= new TimeSpan(7, 20, 0)) + { + sumLeave = leavingDayCout * workingPerDayAve; + } + else + { + sumLeave = leavingDayCout * new TimeSpan(7, 20, 0); + } + + sumSpans = sumSpans.Add(sumLeave); + } + + Console.WriteLine(sumSpans); + #endregion //***********************************// //ToTalHourse Employe eWorked var totalHourses = (sumSpans.TotalMinutes) / 60; diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs index f3f2318f..5d1078c5 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs @@ -1675,7 +1675,8 @@ public class IndexModel : PageModel LeaveType = "استحقاقی", PaidLeaveType = "روزانه", StartLeave = command.ContarctStart, - EndLeave = command.ContractEnd + EndLeave = command.ContractEnd, + IsAccepted = true, }; var leavList = _leaveApplication.search(serachModel); #region entityes