diff --git a/CompanyManagment.App.Contracts/Leave/ILeaveApplication.cs b/CompanyManagment.App.Contracts/Leave/ILeaveApplication.cs index edb854ee..a43de371 100644 --- a/CompanyManagment.App.Contracts/Leave/ILeaveApplication.cs +++ b/CompanyManagment.App.Contracts/Leave/ILeaveApplication.cs @@ -33,7 +33,8 @@ public interface ILeaveApplication #region Pooya OperationResult ValidateNewLeaveWithExistingRollCalls(long workshopId, long employeeId, string paidLeaveType, DateTime start, DateTime end); - TimeSpan GetEmployeeLeaveTimeSpanInDates(long workshopId, long employeeId, string startFa, string endFa); + TimeSpan GetEmployeeLeaveTimeSpanInDates(long workshopId, long employeeId, string startFa, string endFa, + string type); #endregion } \ No newline at end of file diff --git a/CompanyManagment.Application/LeaveApplication.cs b/CompanyManagment.Application/LeaveApplication.cs index 5928b143..061bfffd 100644 --- a/CompanyManagment.Application/LeaveApplication.cs +++ b/CompanyManagment.Application/LeaveApplication.cs @@ -540,18 +540,49 @@ public class LeaveApplication : ILeaveApplication return op.Succcedded(); } - public TimeSpan GetEmployeeLeaveTimeSpanInDates(long workshopId, long employeeId, string startFa, string endFa) + public TimeSpan GetEmployeeLeaveTimeSpanInDates(long workshopId, long employeeId, string startFa, string endFa,string type) { - if (startFa.TryToGeorgianDateTime(out var start) == false || endFa.TryToGeorgianDateTime(out var end) == false) - return TimeSpan.Zero; + if (startFa.TryToGeorgianDateTime(out var start) == false || endFa.TryToGeorgianDateTime(out var end) == false) + return TimeSpan.Zero; - var leaves = _leaveRepository.GetByWorkshopIdEmployeeIdInDates(workshopId, employeeId, start, end); + var leaveTotalTimeSpan = TimeSpan.Zero; - var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType != "روزانه").Sum(x => (x.EndLeaveGr - x.StartLeaveGr).Ticks)); - var dailyLeaveCount = leaves.Count(x => x.PaidLeaveType == "روزانه") * new TimeSpan(1, 0, 0, 0); - return timeSpanHourlyLeave + dailyLeaveCount; - } + var leaves = _leaveRepository.GetByWorkshopIdEmployeeIdInDates(workshopId, employeeId, start, end); + //var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType != "روزانه").Sum(x => (x.EndLeaveGr - x.StartLeaveGr).Ticks)); + //var dailyLeaveCount = leaves.Count(x => x.PaidLeaveType == "روزانه") * new TimeSpan(1, 0, 0, 0); + + if (type == "paidLeave") + { + var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType == "ساعتی" && x.LeaveType == "استحقاقی") + .Sum(x => TimeOnly.Parse(x.LeaveHourses).Ticks)); + var dailyLeaveTime = leaves.Where(x => x.PaidLeaveType == "روزانه" && x.LeaveType == "استحقاقی") + .Sum(x => Convert.ToInt32(x.LeaveHourses)) * TimeSpan.FromDays(1); + + leaveTotalTimeSpan = timeSpanHourlyLeave + dailyLeaveTime; + } + else if (type == "sickLeave") + { + var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType == "ساعتی" && x.LeaveType == "استعلاجی") + .Sum(x => TimeOnly.Parse(x.LeaveHourses).Ticks)); + + var dailyLeaveTime = leaves.Where(x => x.PaidLeaveType == "روزانه" && x.LeaveType == "استعلاجی") + .Sum(x => Convert.ToInt32(x.LeaveHourses)) * TimeSpan.FromDays(1); + + leaveTotalTimeSpan = timeSpanHourlyLeave + dailyLeaveTime; + } + else + { + var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType == "ساعتی").Sum(x => TimeOnly.Parse(x.LeaveHourses).Ticks)); + var dailyLeaveTime = leaves.Where(x => x.PaidLeaveType == "روزانه").Sum(x => Convert.ToInt32(x.LeaveHourses)) * TimeSpan.FromDays(1); + leaveTotalTimeSpan = timeSpanHourlyLeave + dailyLeaveTime; + } + + + + + return leaveTotalTimeSpan; + } private TimeSpan CalculateTotalLeaveTimeSpan(List leaves) { diff --git a/CompanyManagment.EFCore/Repository/LeaveRepository.cs b/CompanyManagment.EFCore/Repository/LeaveRepository.cs index 8b7c8548..82c4a149 100644 --- a/CompanyManagment.EFCore/Repository/LeaveRepository.cs +++ b/CompanyManagment.EFCore/Repository/LeaveRepository.cs @@ -384,7 +384,8 @@ public class LeaveRepository : RepositoryBase, ILeaveRepository PaidLeaveType = x.PaidLeaveType, LeaveType = x.LeaveType, StartLeaveGr = x.StartLeave, - EndLeaveGr = x.EndLeave + EndLeaveGr = x.EndLeave, + LeaveHourses = x.LeaveHourses }).ToList(); } diff --git a/ServiceHost/Areas/Client/Pages/Company/Employees/Leave.cshtml b/ServiceHost/Areas/Client/Pages/Company/Employees/Leave.cshtml index 078ea93b..e8ba1923 100644 --- a/ServiceHost/Areas/Client/Pages/Company/Employees/Leave.cshtml +++ b/ServiceHost/Areas/Client/Pages/Company/Employees/Leave.cshtml @@ -2709,7 +2709,8 @@ startFa: startDate, endFa: endDate, month: Number(month), - year: Number(year) + year: Number(year), + type: $('#sendSorting').val() }, headers: { "RequestVerificationToken": $('@Html.AntiForgeryToken()').val() }, success: function (response) { diff --git a/ServiceHost/Areas/Client/Pages/Company/Employees/Leave.cshtml.cs b/ServiceHost/Areas/Client/Pages/Company/Employees/Leave.cshtml.cs index 027b2aa1..f7f54f8d 100644 --- a/ServiceHost/Areas/Client/Pages/Company/Employees/Leave.cshtml.cs +++ b/ServiceHost/Areas/Client/Pages/Company/Employees/Leave.cshtml.cs @@ -393,7 +393,8 @@ namespace ServiceHost.Areas.Client.Pages.Company.Employees #region Calculate total leave in dates - public IActionResult OnGetEmployeeTotalLeave(long employeeId, string startFa, string endFa, int month, int year) + public IActionResult OnGetEmployeeTotalLeave(long employeeId, string startFa, string endFa, int month, int year, + string type) { //اگر بازه تاریخ خالی بود از سال و ماه استفاده می شود if (string.IsNullOrWhiteSpace(startFa) && string.IsNullOrWhiteSpace(endFa)) @@ -401,7 +402,7 @@ namespace ServiceHost.Areas.Client.Pages.Company.Employees startFa = $"{year}/{month:00}/01"; endFa = startFa.FindeEndOfMonth(); } - TimeSpan timeSpan = _leaveApplication.GetEmployeeLeaveTimeSpanInDates(_workshopId, employeeId, startFa, endFa); + TimeSpan timeSpan = _leaveApplication.GetEmployeeLeaveTimeSpanInDates(_workshopId, employeeId, startFa, endFa, type); string message = timeSpan.ToFarsiDaysAndHoursAndMinutes(); return new JsonResult(new {