diff --git a/CompanyManagment.App.Contracts/Leave/ILeaveApplication.cs b/CompanyManagment.App.Contracts/Leave/ILeaveApplication.cs
index 4a08358d..4185d007 100644
--- a/CompanyManagment.App.Contracts/Leave/ILeaveApplication.cs
+++ b/CompanyManagment.App.Contracts/Leave/ILeaveApplication.cs
@@ -47,7 +47,27 @@ public interface ILeaveApplication
///
Task> GetList(
LeaveListSearchModel searchModel);
-
+
+ ///
+ /// دریافت لیست گروه بندی شده
+ ///
+ ///
+ ///
+ Task> GetGroupList(LeaveListSearchModel searchModel);
+
+ ///
+ /// دریافت مجکوع مرخصی پرسنل
+ /// اگر آی دی پرسنل، سال و ماه خالی نباشد
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ TimeSpan SumOfEmployeeLeaveTimeSpanInDates(long workshopId, long employeeId, string yearStr, string monthStr,
+ LeaveType leaveType);
+
Task> PrintAllAsync(List ids, long workshopId);
Task PrintOneAsync(long id, long workshopId);
diff --git a/CompanyManagment.App.Contracts/Leave/LeaveListMultipleDto.cs b/CompanyManagment.App.Contracts/Leave/LeaveListMultipleDto.cs
new file mode 100644
index 00000000..00b8c5e9
--- /dev/null
+++ b/CompanyManagment.App.Contracts/Leave/LeaveListMultipleDto.cs
@@ -0,0 +1,24 @@
+using _0_Framework.Application;
+using System.Collections.Generic;
+
+namespace CompanyManagment.App.Contracts.Leave;
+
+public class LeaveListMultipleDto
+{
+ ///
+ /// لیست گروهبندی شده بر اساس سال و ماه
+ /// اگر در جستجو پرسنل انتخاب شود
+ ///
+ public List? GroupLeaveListDto { get; set; }
+
+ ///
+ /// لیست نرمال PageResult
+ ///
+ public PagedResult? leaveListDto { get; set; }
+
+ ///
+ /// مجموع مرخصی پرسنل
+ /// اگر پرسنل انتخاب شده باشد
+ ///
+ public string? SumOfEmployeeleaves { get; set; }
+}
\ No newline at end of file
diff --git a/CompanyManagment.Application/LeaveApplication.cs b/CompanyManagment.Application/LeaveApplication.cs
index 6dd28650..63c50d32 100644
--- a/CompanyManagment.Application/LeaveApplication.cs
+++ b/CompanyManagment.Application/LeaveApplication.cs
@@ -609,6 +609,59 @@ public class LeaveApplication : ILeaveApplication
return await _leaveRepository.GetList(searchModel);
}
+ public async Task> GetGroupList(LeaveListSearchModel searchModel)
+ {
+ return await _leaveRepository.GetGroupList(searchModel);
+ }
+
+ public TimeSpan SumOfEmployeeLeaveTimeSpanInDates(long workshopId, long employeeId, string yearStr, string monthStr, LeaveType leaveType)
+ {
+
+
+ var startFa = $"{yearStr}/{monthStr:00}/01";
+ var endFa = startFa.FindeEndOfMonth();
+
+ if (startFa.TryToGeorgianDateTime(out var start) == false || endFa.TryToGeorgianDateTime(out var end) == false)
+ return TimeSpan.Zero;
+
+ var leaveTotalTimeSpan = TimeSpan.Zero;
+
+ 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 (leaveType == LeaveType.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 (leaveType == LeaveType.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;
+ }
+
public async Task> PrintAllAsync(List ids,long workshopId)
{
return await _leaveRepository.PrintAllAsync(ids,workshopId);
diff --git a/ServiceHost/Areas/Client/Controllers/LeaveController.cs b/ServiceHost/Areas/Client/Controllers/LeaveController.cs
index acb423af..8e94d7e1 100644
--- a/ServiceHost/Areas/Client/Controllers/LeaveController.cs
+++ b/ServiceHost/Areas/Client/Controllers/LeaveController.cs
@@ -1,8 +1,10 @@
using _0_Framework.Application;
+using Company.Domain.EmployeeAgg;
using CompanyManagment.App.Contracts.InsuranceList;
using CompanyManagment.App.Contracts.Leave;
using Microsoft.AspNetCore.Mvc;
using ServiceHost.BaseControllers;
+using System.Security.Cryptography;
namespace ServiceHost.Areas.Client.Controllers;
@@ -22,13 +24,31 @@ public class LeaveController : ClientBaseController
///
///
[HttpGet("GetLeaveList")]
- public async Task>> GetLeaveList(LeaveListSearchModel searchModel)
+ public async Task> GetLeaveList(LeaveListSearchModel searchModel)
{
+ var result = new LeaveListMultipleDto();
searchModel.WorkshopId = _workshopId;
-
- var leaveList = await _leaveApplication.GetList(searchModel);
- return Ok(leaveList);
+ if (searchModel.EmployeeId > 0)
+ {
+ //لیست گروه بندی شده
+ result.GroupLeaveListDto = await _leaveApplication.GetGroupList(searchModel);
+
+ if (!string.IsNullOrWhiteSpace(searchModel.YearStr) && !string.IsNullOrWhiteSpace(searchModel.MonthStr))
+ {
+ TimeSpan timeSpan = _leaveApplication.SumOfEmployeeLeaveTimeSpanInDates(_workshopId, searchModel.EmployeeId, searchModel.YearStr, searchModel.MonthStr, searchModel.LeaveType);
+ //مجموع مرخصی پرسنل
+ result.SumOfEmployeeleaves = timeSpan.ToFarsiDaysAndHoursAndMinutes();
+ }
+
+ return Ok(result);
+ }
+ //لیست نرمال PageResult
+ result.leaveListDto = await _leaveApplication.GetList(searchModel);
+ return Ok(result);
}
+
+
+
[HttpGet("print/{id}")]
public async Task> PrintOneAsync(long id)
{