Compare commits
6 Commits
Feature/Ex
...
Feature/Cl
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
69476f3f2d | ||
|
|
4bc65e500d | ||
| 07587d162f | |||
|
|
59bbb7aae6 | ||
|
|
89de3162de | ||
|
|
132c8ac5a4 |
@@ -1,8 +1,10 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Domain;
|
||||
using CompanyManagment.App.Contracts.InstitutionPlan;
|
||||
using CompanyManagment.App.Contracts.Leave;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Company.Domain.LeaveAgg;
|
||||
|
||||
@@ -27,6 +29,8 @@ public interface ILeaveRepository : IRepository<long, Leave>
|
||||
List<LeaveMainViewModel> searchClient(LeaveSearchModel searchModel);
|
||||
LeavePrintViewModel PrintOne(long id);
|
||||
List<LeavePrintViewModel> PrintAll(List<long> id);
|
||||
|
||||
Task<List<LeavePrintResponseViewModel>> PrintAllAsync(List<long> ids, long workshopId);
|
||||
|
||||
#region Vafa
|
||||
|
||||
@@ -34,4 +38,20 @@ public interface ILeaveRepository : IRepository<long, Leave>
|
||||
|
||||
#endregion
|
||||
bool CheckIfValidToEdit(long id);
|
||||
|
||||
/// <summary>
|
||||
/// دریافت لیست مرخصی ها در کلاینت
|
||||
/// Api
|
||||
/// </summary>
|
||||
/// <param name="searchModel"></param>
|
||||
/// <returns></returns>
|
||||
Task<PagedResult<leaveListDto>> GetList(
|
||||
LeaveListSearchModel searchModel);
|
||||
|
||||
/// <summary>
|
||||
/// دریافت لیست گروه بندی شده
|
||||
/// </summary>
|
||||
/// <param name="searchModel"></param>
|
||||
/// <returns></returns>
|
||||
Task<List<GroupLeaveListDto>> GetGroupList(LeaveListSearchModel searchModel);
|
||||
}
|
||||
88
CompanyManagment.App.Contracts/Leave/GroupLeaveListDto.cs
Normal file
88
CompanyManagment.App.Contracts/Leave/GroupLeaveListDto.cs
Normal file
@@ -0,0 +1,88 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.Leave;
|
||||
|
||||
public class GroupLeaveListDto
|
||||
{
|
||||
/// <summary>
|
||||
/// سال مرخصی
|
||||
/// </summary>
|
||||
public string YearStr { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// ماه مرخصی
|
||||
/// </summary>
|
||||
public string MonthStr { get; set; }
|
||||
/// <summary>
|
||||
/// آیتم های هر گروه
|
||||
/// </summary>
|
||||
public List<LeaveListItemsDto> LeaveListItemsDto { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// آیتم های هر گروه
|
||||
/// </summary>
|
||||
public class LeaveListItemsDto
|
||||
{
|
||||
/// <summary>
|
||||
/// نوع مرخصی، استحقاقی/استعلاجی
|
||||
/// </summary>
|
||||
public string LeaveType { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// تاریخ شروع مرخصی
|
||||
/// </summary>
|
||||
public string StartLeave { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// تاریخ پایان مرخصی
|
||||
/// </summary>
|
||||
public string EndLeave { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// زمان مرخصی
|
||||
/// بازه مرخصی ساعتی
|
||||
/// </summary>
|
||||
public string HourlyInterval { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// مدت مرخصی
|
||||
/// </summary>
|
||||
public string LeaveDuration { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// موافقت/عدم موافقت کارفرما
|
||||
/// </summary>
|
||||
public bool IsAccepted { get; set; }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// آی دی
|
||||
/// </summary>
|
||||
public long Id { get; set; }
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// آی دی گارگاه
|
||||
/// </summary>
|
||||
public long WorkshopId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// آی دی پرسنل
|
||||
/// </summary>
|
||||
public long EmployeeId { get; set; }
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
///آیا فاقد اعتبار است. فاقد اعتبار ها فقط برای فیش های غیررسمی مورد استفاده قرار میگیرند
|
||||
/// </summary>
|
||||
public bool IsInvalid { get; set; }
|
||||
}
|
||||
@@ -36,5 +36,67 @@ public interface ILeaveApplication
|
||||
TimeSpan GetEmployeeLeaveTimeSpanInDates(long workshopId, long employeeId, string startFa, string endFa,
|
||||
string type);
|
||||
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// دریافت لیست مرخصی ها در کلاینت
|
||||
/// Api
|
||||
/// </summary>
|
||||
/// <param name="searchModel"></param>
|
||||
/// <returns></returns>
|
||||
Task<PagedResult<leaveListDto>> GetList(
|
||||
LeaveListSearchModel searchModel);
|
||||
|
||||
/// <summary>
|
||||
/// دریافت لیست گروه بندی شده
|
||||
/// </summary>
|
||||
/// <param name="searchModel"></param>
|
||||
/// <returns></returns>
|
||||
Task<List<GroupLeaveListDto>> GetGroupList(LeaveListSearchModel searchModel);
|
||||
|
||||
/// <summary>
|
||||
/// دریافت مجکوع مرخصی پرسنل
|
||||
/// اگر آی دی پرسنل، سال و ماه خالی نباشد
|
||||
/// </summary>
|
||||
/// <param name="workshopId"></param>
|
||||
/// <param name="employeeId"></param>
|
||||
/// <param name="yearStr"></param>
|
||||
/// <param name="monthStr"></param>
|
||||
/// <param name="leaveType"></param>
|
||||
/// <returns></returns>
|
||||
TimeSpan SumOfEmployeeLeaveTimeSpanInDates(long workshopId, long employeeId, string yearStr, string monthStr,
|
||||
LeaveType leaveType);
|
||||
|
||||
Task<List<LeavePrintResponseViewModel>> PrintAllAsync(List<long> ids, long workshopId);
|
||||
Task<LeavePrintResponseViewModel> PrintOneAsync(long id, long workshopId);
|
||||
|
||||
}
|
||||
|
||||
public class LeavePrintResponseViewModel
|
||||
{
|
||||
public string FullName { get; set; }
|
||||
public string NationalCode { get; set; }
|
||||
public string WorkshopName { get; set; }
|
||||
public List<string> EmployerNames { get; set; }
|
||||
public string PaidLeaveType { get; set; }
|
||||
public string ContractNo { get; set; }
|
||||
public LeavePrintHourlyResponseViewModel HourlyLeave { get; set; }
|
||||
public LeavePrintDailyResponseViewModel DailyLeave { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class LeavePrintDailyResponseViewModel
|
||||
{
|
||||
public string StartLeave { get; set; }
|
||||
public string EndLeave { get; set; }
|
||||
public string TotalDay { get; set; }
|
||||
}
|
||||
|
||||
public class LeavePrintHourlyResponseViewModel
|
||||
{
|
||||
public string LeaveDate { get; set; }
|
||||
public string StartHour { get; set; }
|
||||
public string EndHour { get; set; }
|
||||
public string TotalHour { get; set; }
|
||||
}
|
||||
24
CompanyManagment.App.Contracts/Leave/LeaveListMultipleDto.cs
Normal file
24
CompanyManagment.App.Contracts/Leave/LeaveListMultipleDto.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
using _0_Framework.Application;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.Leave;
|
||||
|
||||
public class LeaveListMultipleDto
|
||||
{
|
||||
/// <summary>
|
||||
/// لیست گروهبندی شده بر اساس سال و ماه
|
||||
/// اگر در جستجو پرسنل انتخاب شود
|
||||
/// </summary>
|
||||
public List<GroupLeaveListDto>? GroupLeaveListDto { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// لیست نرمال PageResult
|
||||
/// </summary>
|
||||
public PagedResult<leaveListDto>? leaveListDto { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// مجموع مرخصی پرسنل
|
||||
/// اگر پرسنل انتخاب شده باشد
|
||||
/// </summary>
|
||||
public string? SumOfEmployeeleaves { get; set; }
|
||||
}
|
||||
45
CompanyManagment.App.Contracts/Leave/LeaveListSearchModel.cs
Normal file
45
CompanyManagment.App.Contracts/Leave/LeaveListSearchModel.cs
Normal file
@@ -0,0 +1,45 @@
|
||||
using _0_Framework.Application;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.Leave;
|
||||
|
||||
public class LeaveListSearchModel : PaginationRequest
|
||||
{
|
||||
/// <summary>
|
||||
/// آی دی کارگاه
|
||||
/// </summary>
|
||||
public long WorkshopId { get; set; }
|
||||
/// <summary>
|
||||
/// نوع مرخصی، استحقاقی/استعلاجی
|
||||
/// </summary>
|
||||
public LeaveType LeaveType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// سال مرخصی
|
||||
/// </summary>
|
||||
public string YearStr { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// ماه مرخصی
|
||||
/// </summary>
|
||||
public string MonthStr { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///آیا فاقد اعتبار است. فاقد اعتبار ها فقط برای فیش های غیررسمی مورد استفاده قرار میگیرند
|
||||
/// </summary>
|
||||
public bool IsInvalid { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// تاریخ شروع مرخصی
|
||||
/// </summary>
|
||||
public string StartLeave { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// تاریخ پایان مرخصی
|
||||
/// </summary>
|
||||
public string EndLeave { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// آی دی پرسنل
|
||||
/// </summary>
|
||||
public long EmployeeId { get; set; }
|
||||
}
|
||||
18
CompanyManagment.App.Contracts/Leave/LeaveType.cs
Normal file
18
CompanyManagment.App.Contracts/Leave/LeaveType.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
namespace CompanyManagment.App.Contracts.Leave;
|
||||
|
||||
public enum LeaveType
|
||||
{
|
||||
/// <summary>
|
||||
/// هر دو
|
||||
/// </summary>
|
||||
Both,
|
||||
/// <summary>
|
||||
/// مرخصی استعلاجی
|
||||
/// </summary>
|
||||
SickLeave,
|
||||
|
||||
/// <summary>
|
||||
/// مرخصی استحقاقی
|
||||
/// </summary>
|
||||
PaidLeave
|
||||
}
|
||||
84
CompanyManagment.App.Contracts/Leave/leaveListDto.cs
Normal file
84
CompanyManagment.App.Contracts/Leave/leaveListDto.cs
Normal file
@@ -0,0 +1,84 @@
|
||||
namespace CompanyManagment.App.Contracts.Leave;
|
||||
|
||||
public class leaveListDto
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// نام کامل پرسنل
|
||||
/// </summary>
|
||||
public string EmployeeFullName { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// سال مرخصی
|
||||
/// </summary>
|
||||
public string YearStr { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// ماه مرخصی
|
||||
/// </summary>
|
||||
public string MonthStr { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// نوع مرخصی، استحقاقی/استعلاجی
|
||||
/// </summary>
|
||||
public string LeaveType { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// تاریخ شروع مرخصی
|
||||
/// </summary>
|
||||
public string StartLeave { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// تاریخ پایان مرخصی
|
||||
/// </summary>
|
||||
public string EndLeave { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// زمان مرخصی
|
||||
/// بازه مرخصی ساعتی
|
||||
/// </summary>
|
||||
public string HourlyInterval { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// مدت مرخصی
|
||||
/// </summary>
|
||||
public string LeaveDuration { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// موافقت/عدم موافقت کارفرما
|
||||
/// </summary>
|
||||
public bool IsAccepted { get; set; }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// آی دی
|
||||
/// </summary>
|
||||
public long Id { get; set; }
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// آی دی گارگاه
|
||||
/// </summary>
|
||||
public long WorkshopId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// آی دی پرسنل
|
||||
/// </summary>
|
||||
public long EmployeeId { get; set; }
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
///آیا فاقد اعتبار است. فاقد اعتبار ها فقط برای فیش های غیررسمی مورد استفاده قرار میگیرند
|
||||
/// </summary>
|
||||
public bool IsInvalid { get; set; }
|
||||
}
|
||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
|
||||
using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg;
|
||||
@@ -590,11 +591,86 @@ public class LeaveApplication : ILeaveApplication
|
||||
return leaveTotalTimeSpan;
|
||||
}
|
||||
|
||||
private TimeSpan CalculateTotalLeaveTimeSpan(List<LeavePrintViewModel> leaves)
|
||||
|
||||
|
||||
private TimeSpan CalculateTotalLeaveTimeSpan(List<LeavePrintViewModel> leaves)
|
||||
{
|
||||
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;
|
||||
}
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
|
||||
#region ForApi
|
||||
|
||||
public async Task<PagedResult<leaveListDto>> GetList(LeaveListSearchModel searchModel)
|
||||
{
|
||||
return await _leaveRepository.GetList(searchModel);
|
||||
}
|
||||
|
||||
public async Task<List<GroupLeaveListDto>> 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<List<LeavePrintResponseViewModel>> PrintAllAsync(List<long> ids,long workshopId)
|
||||
{
|
||||
return await _leaveRepository.PrintAllAsync(ids,workshopId);
|
||||
}
|
||||
|
||||
public async Task<LeavePrintResponseViewModel> PrintOneAsync(long id, long workshopId)
|
||||
{
|
||||
return (await _leaveRepository.PrintAllAsync([id],workshopId)).FirstOrDefault();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -1,12 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.InfraStructure;
|
||||
using Azure.Core;
|
||||
using Company.Domain.LeaveAgg;
|
||||
using CompanyManagment.App.Contracts.Checkout;
|
||||
using CompanyManagment.App.Contracts.InstitutionPlan;
|
||||
using CompanyManagment.App.Contracts.Leave;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace CompanyManagment.EFCore.Repository;
|
||||
|
||||
@@ -17,6 +20,7 @@ public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
|
||||
public LeaveRepository(CompanyContext context) : base(context)
|
||||
{
|
||||
_context = context;
|
||||
|
||||
}
|
||||
|
||||
public EditLeave GetDetails(long id)
|
||||
@@ -290,6 +294,65 @@ public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
|
||||
return query;
|
||||
}
|
||||
|
||||
public async Task<List<LeavePrintResponseViewModel>> PrintAllAsync(List<long> ids, long workshopId)
|
||||
{
|
||||
var leaves =await _context
|
||||
.LeaveList.Where(x => ids.Contains(x.id) && x.WorkshopId == workshopId).ToListAsync();
|
||||
|
||||
var minLeave = leaves.Min(x => x.StartLeave);
|
||||
var maxLeave = leaves.Max(x => x.EndLeave);
|
||||
|
||||
var employeeIds = leaves.Select(x => x.EmployeeId).Distinct().ToList();
|
||||
|
||||
var contracts = await _context.Contracts
|
||||
.Where(x => x.WorkshopIds == workshopId && employeeIds.Contains(x.EmployeeId)
|
||||
&& x.ContarctStart<= maxLeave && x.ContractEnd>= minLeave)
|
||||
.ToListAsync();
|
||||
|
||||
var employees = await _context
|
||||
.Employees.Where(x=> employeeIds.Contains(x.id)).ToListAsync();
|
||||
|
||||
var employerNames = _context.WorkshopEmployers.Include(x=>x.Employer)
|
||||
.Where(x=>x.WorkshopId == workshopId).Select(x=>x.Employer.FName+" "+x.Employer.LName).ToList();
|
||||
|
||||
var workshopName = _context.Workshops.FirstOrDefault(x => x.id == workshopId)?.WorkshopName;
|
||||
|
||||
var res = leaves.Select(leave =>
|
||||
{
|
||||
var employee = employees.FirstOrDefault(x => x.id == leave.EmployeeId);
|
||||
return new LeavePrintResponseViewModel
|
||||
{
|
||||
FullName = employee?.FName + " " +
|
||||
employee?.LName,
|
||||
NationalCode = employee?.NationalCode,
|
||||
WorkshopName = workshopName,
|
||||
EmployerNames = employerNames,
|
||||
PaidLeaveType = leave.PaidLeaveType,
|
||||
ContractNo = contracts.FirstOrDefault(x =>
|
||||
x.EmployeeId == leave.EmployeeId &&
|
||||
x.ContarctStart <= leave.StartLeave &&
|
||||
x.ContractEnd >= leave.EndLeave)?.ContractNo,
|
||||
DailyLeave = leave.PaidLeaveType == "روزانه" ? new LeavePrintDailyResponseViewModel
|
||||
{
|
||||
StartLeave = leave.StartLeave.ToFarsi(),
|
||||
EndLeave = leave.EndLeave.ToFarsi(),
|
||||
TotalDay = leave.LeaveHourses
|
||||
} : null,
|
||||
|
||||
HourlyLeave = leave.PaidLeaveType == "ساعتی" ?
|
||||
new LeavePrintHourlyResponseViewModel
|
||||
{
|
||||
LeaveDate = leave.StartLeave.ToFarsi(),
|
||||
StartHour = leave.StartLeave.ToString("HH:mm"),
|
||||
EndHour = leave.EndLeave.ToString("HH:mm"),
|
||||
TotalHour = TimeSpan.Parse(leave.LeaveHourses)
|
||||
.TotalHours.ToString("F0")
|
||||
} : null
|
||||
};
|
||||
}).ToList();
|
||||
return res;
|
||||
}
|
||||
|
||||
#region Vafa
|
||||
|
||||
public List<LeaveViewModel> LastLeaveMain(LeaveSearchModel searchModel)
|
||||
@@ -371,6 +434,8 @@ public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public OperationResult RemoveLeave(long id)
|
||||
{
|
||||
var op = new OperationResult();
|
||||
@@ -536,4 +601,200 @@ public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
|
||||
(starContract >= x.StartLeaveGr && starContract <= x.EndLeaveGr) ||
|
||||
(endContract >= x.StartLeaveGr && endContract <= x.EndLeaveGr));
|
||||
}
|
||||
|
||||
|
||||
#region ForApi
|
||||
|
||||
public async Task<PagedResult<leaveListDto>> GetList(LeaveListSearchModel searchModel)
|
||||
{
|
||||
var query = _context.LeaveList.Where(x => x.WorkshopId == searchModel.WorkshopId);
|
||||
|
||||
if (searchModel.EmployeeId != 0)
|
||||
query = query.Where(x => x.EmployeeId == searchModel.EmployeeId);
|
||||
|
||||
if (searchModel.LeaveType == LeaveType.PaidLeave)
|
||||
query = query.Where(x => x.LeaveType == "استحقاقی");
|
||||
|
||||
if (searchModel.LeaveType == LeaveType.SickLeave)
|
||||
query = query.Where(x => x.LeaveType == "استعلاجی");
|
||||
|
||||
if (searchModel.IsInvalid)
|
||||
{
|
||||
query = query.IgnoreQueryFilters().Where(x => x.IsInvalid);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.StartLeave) && !string.IsNullOrWhiteSpace(searchModel.EndLeave))
|
||||
{
|
||||
var start = new DateTime();
|
||||
var end = new DateTime();
|
||||
try
|
||||
{
|
||||
start = searchModel.StartLeave.ToGeorgianDateTime();
|
||||
end = searchModel.EndLeave.ToGeorgianDateTime();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return new PagedResult<leaveListDto>();
|
||||
}
|
||||
|
||||
query = query.Where(x => x.StartLeave >= start && x.EndLeave <= end);
|
||||
}
|
||||
else if (!string.IsNullOrWhiteSpace(searchModel.YearStr) || !string.IsNullOrWhiteSpace(searchModel.MonthStr))
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.YearStr))
|
||||
{
|
||||
try
|
||||
{
|
||||
int year = Convert.ToInt32(searchModel.YearStr);
|
||||
query = query.Where(x => x.Year == year);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
return new PagedResult<leaveListDto>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.MonthStr))
|
||||
{
|
||||
try
|
||||
{
|
||||
int month = Convert.ToInt32(searchModel.MonthStr);
|
||||
query = query.Where(x => x.Month == month);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
return new PagedResult<leaveListDto>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
var count = await query.CountAsync();
|
||||
query = query.OrderByDescending(x => x.CreationDate);
|
||||
var queryPaginationFilter = await query.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync();
|
||||
|
||||
|
||||
var leaveResult = queryPaginationFilter.Select(item => new leaveListDto()
|
||||
{
|
||||
Id = item.id,
|
||||
EmployeeFullName = item.EmployeeFullName,
|
||||
YearStr = $"{item.Year}",
|
||||
MonthStr = item.Month.ToFarsiMonthByIntNumber(),
|
||||
IsInvalid = item.IsInvalid,
|
||||
LeaveType = item.LeaveType,
|
||||
StartLeave = item.StartLeave.ToFarsi(),
|
||||
EndLeave = item.EndLeave.ToFarsi(),
|
||||
HourlyInterval = item.PaidLeaveType == "ساعتی" ? $"{item.StartLeave.TimeOfDay:hh\\:mm} الی {item.EndLeave.TimeOfDay:hh\\:mm}" : "-",
|
||||
LeaveDuration = Tools.CalculateLeaveHoursAndDays(item.PaidLeaveType, item.LeaveHourses),
|
||||
IsAccepted = item.IsAccepted,
|
||||
WorkshopId = item.WorkshopId,
|
||||
EmployeeId = item.EmployeeId,
|
||||
|
||||
}).ToList();
|
||||
return new PagedResult<leaveListDto>()
|
||||
{
|
||||
TotalCount = count,
|
||||
List = leaveResult
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
public async Task<List<GroupLeaveListDto>> GetGroupList(LeaveListSearchModel searchModel)
|
||||
{
|
||||
var query = _context.LeaveList.Where(x => x.WorkshopId == searchModel.WorkshopId && x.EmployeeId == searchModel.EmployeeId);
|
||||
|
||||
|
||||
|
||||
if (searchModel.LeaveType == LeaveType.PaidLeave)
|
||||
query = query.Where(x => x.LeaveType == "استحقاقی");
|
||||
|
||||
if (searchModel.LeaveType == LeaveType.SickLeave)
|
||||
query = query.Where(x => x.LeaveType == "استعلاجی");
|
||||
|
||||
if (searchModel.IsInvalid)
|
||||
{
|
||||
query = query.IgnoreQueryFilters().Where(x => x.IsInvalid);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.StartLeave) && !string.IsNullOrWhiteSpace(searchModel.EndLeave))
|
||||
{
|
||||
var start = new DateTime();
|
||||
var end = new DateTime();
|
||||
try
|
||||
{
|
||||
start = searchModel.StartLeave.ToGeorgianDateTime();
|
||||
end = searchModel.EndLeave.ToGeorgianDateTime();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return new List<GroupLeaveListDto>();
|
||||
}
|
||||
|
||||
query = query.Where(x => x.StartLeave >= start && x.EndLeave <= end);
|
||||
}
|
||||
else if (!string.IsNullOrWhiteSpace(searchModel.YearStr) || !string.IsNullOrWhiteSpace(searchModel.MonthStr))
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.YearStr))
|
||||
{
|
||||
try
|
||||
{
|
||||
int year = Convert.ToInt32(searchModel.YearStr);
|
||||
query = query.Where(x => x.Year == year);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
return new List<GroupLeaveListDto>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.MonthStr))
|
||||
{
|
||||
try
|
||||
{
|
||||
int month = Convert.ToInt32(searchModel.MonthStr);
|
||||
query = query.Where(x => x.Month == month);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
return new List<GroupLeaveListDto>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
var leaveList = await query.GroupBy(x => new { x.Year, x.Month })
|
||||
.OrderByDescending(group => group.Key.Year)
|
||||
.ThenByDescending(group => group.Key.Month)
|
||||
.Select(group => new GroupLeaveListDto
|
||||
{
|
||||
YearStr = $"{group.Key.Year}",
|
||||
MonthStr = group.Key.Month.ToFarsiMonthByIntNumber(),
|
||||
LeaveListItemsDto = group.OrderByDescending(x=>x.StartLeave).Select(item => new LeaveListItemsDto
|
||||
{
|
||||
Id = item.id,
|
||||
IsInvalid = item.IsInvalid,
|
||||
LeaveType = item.LeaveType,
|
||||
StartLeave = item.StartLeave.ToFarsi(),
|
||||
EndLeave = item.EndLeave.ToFarsi(),
|
||||
HourlyInterval = item.PaidLeaveType == "ساعتی" ? $"{item.StartLeave.TimeOfDay:hh\\:mm} الی {item.EndLeave.TimeOfDay:hh\\:mm}" : "-",
|
||||
LeaveDuration = Tools.CalculateLeaveHoursAndDays(item.PaidLeaveType, item.LeaveHourses),
|
||||
IsAccepted = item.IsAccepted,
|
||||
WorkshopId = item.WorkshopId,
|
||||
EmployeeId = item.EmployeeId,
|
||||
}).ToList()
|
||||
}).ToListAsync();
|
||||
|
||||
return leaveList;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
65
ServiceHost/Areas/Client/Controllers/LeaveController.cs
Normal file
65
ServiceHost/Areas/Client/Controllers/LeaveController.cs
Normal file
@@ -0,0 +1,65 @@
|
||||
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;
|
||||
|
||||
public class LeaveController : ClientBaseController
|
||||
{
|
||||
private readonly ILeaveApplication _leaveApplication;
|
||||
private long _workshopId;
|
||||
public LeaveController(ILeaveApplication leaveApplication, IAuthHelper authHelper)
|
||||
{
|
||||
_leaveApplication = leaveApplication;
|
||||
_workshopId = authHelper.GetWorkshopId();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// دریافت لیست مرخصی ها
|
||||
/// </summary>
|
||||
/// <param name="searchModel"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("GetLeaveList")]
|
||||
public async Task<ActionResult<LeaveListMultipleDto>> GetLeaveList(LeaveListSearchModel searchModel)
|
||||
{
|
||||
var result = new LeaveListMultipleDto();
|
||||
searchModel.WorkshopId = _workshopId;
|
||||
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<ActionResult<LeavePrintResponseViewModel>> PrintOneAsync(long id)
|
||||
{
|
||||
var leavePrint = await _leaveApplication.PrintOneAsync(id, _workshopId);
|
||||
return leavePrint;
|
||||
}
|
||||
[HttpGet("print")]
|
||||
public async Task<ActionResult<List<LeavePrintResponseViewModel>>> PrintAllAsync([FromQuery] List<long> ids)
|
||||
{
|
||||
var leavePrints = await _leaveApplication.PrintAllAsync(ids, _workshopId);
|
||||
return Ok(leavePrints);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user