Files
Backend-Api/CompanyManagment.EFCore/Repository/LeftWorkRepository.cs
2025-05-25 17:38:57 +03:30

727 lines
32 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.InfraStructure;
using Company.Domain.LeftWorkAgg;
using Company.Domain.PersonnelCodeAgg;
using CompanyManagment.App.Contracts.LeftWork;
using CompanyManagment.App.Contracts.PersonnleCode;
using Microsoft.EntityFrameworkCore;
namespace CompanyManagment.EFCore.Repository;
public class LeftWorkRepository : RepositoryBase<long, LeftWork>, ILeftWorkRepository
{
private readonly CompanyContext _context;
public LeftWorkRepository(CompanyContext context) : base(context)
{
_context = context;
}
public EditLeftWork GetDetails(long id)
{
return _context.LeftWorkList.Select(x => new EditLeftWork()
{
Id = x.id,
LeftWorkDate = x.LeftWorkDate.ToFarsi(),
StartWorkDate = x.StartWorkDate.ToFarsi(),
EmployeeFullName = x.EmployeeFullName,
WorkshopName = x.WorkshopName,
WorkshopId = x.WorkshopId,
EmployeeId = x.EmployeeId
})
.FirstOrDefault(x => x.Id == id);
}
public string StartWork(long employeeId, long workshopId, string leftWork)
{
var checkExist = _context.LeftWorkList.Any(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId);
if (checkExist)
{
var LeftWorks = _context.LeftWorkList
.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId)
.OrderByDescending(x => x.LeftWorkDate).ToList();
var lastLeft = LeftWorks.Select(x => x.LeftWorkDate).FirstOrDefault();
var leftWorkNew = leftWork.ToGeorgianDateTime();
var startWorkList = _context.Contracts
.Where(x => x.EmployeeId == employeeId && x.WorkshopIds == workshopId)
.Where(x => x.ContarctStart < leftWorkNew && x.ContarctStart > lastLeft)
.OrderBy(x => x.ContarctStart).ToList();
var startWorkDate = startWorkList.Select(x => x.ContarctStart).FirstOrDefault();
var result = startWorkDate.ToFarsi();
return result;
}
else
{
var leftWorkNew = leftWork.ToGeorgianDateTime();
var startWorkList = _context.Contracts
.Where(x => x.EmployeeId == employeeId && x.WorkshopIds == workshopId)
.Where(x => x.ContarctStart < leftWorkNew)
.OrderBy(x => x.ContarctStart).ToList();
var startWorkDate = startWorkList.Select(x => x.ContarctStart).FirstOrDefault();
var result = startWorkDate.ToFarsi();
return result;
}
}
public List<LeftWorkViewModel> searchByWorkshopId(long workshopId)
{
var query = _context.LeftWorkList.Select(x => new LeftWorkViewModel()
{
Id = x.id,
LeftWorkDate = x.LeftWorkDate.ToFarsi(),
StartWorkDate = x.StartWorkDate.ToFarsi(),
LeftWorkDateGr = x.LeftWorkDate,
StartWorkDateGr = x.StartWorkDate,
EmployeeFullName = x.EmployeeFullName,
WorkshopName = x.WorkshopName,
WorkshopId = x.WorkshopId,
EmployeeId = x.EmployeeId,
AddBonusesPay = x.AddBonusesPay,
AddYearsPay = x.AddYearsPay,
AddLeavePay = x.AddLeavePay,
JobId = x.JobId,
}).Where(x=>x.WorkshopId == workshopId);
return query.ToList();
}
public List<LeftWorkViewModel> search(LeftWorkSearchModel searchModel)
{
var query = _context.LeftWorkList.Select(x => new LeftWorkViewModel()
{
Id = x.id,
LeftWorkDate = x.LeftWorkDate.ToFarsi(),
StartWorkDate = x.StartWorkDate.ToFarsi(),
LeftWorkDateGr = x.LeftWorkDate,
StartWorkDateGr = x.StartWorkDate,
EmployeeFullName = x.EmployeeFullName,
WorkshopName = x.WorkshopName,
WorkshopId = x.WorkshopId,
EmployeeId = x.EmployeeId,
AddBonusesPay = x.AddBonusesPay,
AddYearsPay = x.AddYearsPay,
AddLeavePay = x.AddLeavePay,
JobId = x.JobId,
JobName = _context.Jobs.FirstOrDefault(j => j.id == x.JobId).JobName
});
if (searchModel.WorkshopId != 0 && searchModel.EmployeeId != 0)
query = query.Where(x => x.WorkshopId == searchModel.WorkshopId && x.EmployeeId == searchModel.EmployeeId);
if (searchModel.EmployeeId != 0 && searchModel.WorkshopId == 0)
query = query.Where(x => x.EmployeeId == searchModel.EmployeeId);
if (searchModel.WorkshopId != 0 && searchModel.EmployeeId == 0)
query = query.Where(x => x.WorkshopId == searchModel.WorkshopId);
return query.OrderByDescending(x => x.StartWorkDateGr).ToList();
}
public LeftWorkViewModel CheckoutleftWorkCheck(DateTime contractStart, long workshopId, long employeeId)
{
return _context.LeftWorkList.Select(x => new LeftWorkViewModel()
{
Id = x.id,
LeftWorkDate = x.LeftWorkDate.ToFarsi(),
StartWorkDate = x.StartWorkDate.ToFarsi(),
StartWorkDateGr = x.StartWorkDate,
LeftWorkDateGr = x.LeftWorkDate,
EmployeeFullName = x.EmployeeFullName,
WorkshopName = x.WorkshopName,
WorkshopId = x.WorkshopId,
EmployeeId = x.EmployeeId,
AddLeavePay = x.AddLeavePay,
AddBonusesPay = x.AddBonusesPay,
AddYearsPay = x.AddYearsPay,
})
.FirstOrDefault(x => x.WorkshopId == workshopId && x.EmployeeId == employeeId
&& contractStart >= x.StartWorkDateGr && contractStart <= x.LeftWorkDateGr);
}
public OperationResult RemoveLeftWork(long id)
{
var op = new OperationResult();
var item = _context.LeftWorkList.FirstOrDefault(x => x.id == id);
if (item != null)
{
_context.LeftWorkList.Remove(item);
_context.SaveChanges();
if (!_context.LeftWorkList.Any(x => x.WorkshopId == item.WorkshopId && x.EmployeeId == item.EmployeeId && item.id != x.id) && HasActiveRollCallStatus(item.WorkshopId, item.EmployeeId))
{
RemoveEmployeeRollCallStatus(item.WorkshopId, item.EmployeeId);
}
}
_context.SaveChanges();
return op.Succcedded();
}
public LeftWorkViewModel GetByDateAndWorkshopIdAndEmployeeId(long workshopId, long employeeId, DateTime dateTime)
{
var entity = _context.LeftWorkList.FirstOrDefault(x =>
x.WorkshopId == workshopId && x.EmployeeId == employeeId &&
(x.StartWorkDate <= dateTime && x.LeftWorkDate >= dateTime));
if (entity == null)
{
return null;
}
return new()
{
EmployeeId = entity.EmployeeId,
WorkshopId = entity.WorkshopId,
LeftWorkDate = entity.LeftWorkDate.ToFarsi(),
HasLeft = entity.HasLeft,
LeftWorkDateGr = entity.LeftWorkDate,
StartWorkDateGr = entity.StartWorkDate,
Id = entity.id
};
}
public List<long> GetAllEmployeeIdsInWorkshop(long workshopId)
{
var leftWorks = _context.LeftWorkList
.Where(x => x.WorkshopId == workshopId)
.GroupBy(x => x.EmployeeId).Select(x => x.Key).ToList();
var insuranceLeftWork = _context.LeftWorkInsuranceList
.Where(x => x.WorkshopId == workshopId)
.GroupBy(x => x.EmployeeId).Select(x => x.Key).ToList();
return leftWorks.Concat(insuranceLeftWork).Distinct().ToList();
}
public List<LeftWorkViewModel> GetLeftPersonelByWorkshopId(List<long> workshopIds)
{
return _context.LeftWorkList.Select(x => new LeftWorkViewModel()
{
Id = x.id,
WorkshopId = x.WorkshopId,
EmployeeId = x.EmployeeId,
}).Where(x => workshopIds.Contains(x.WorkshopId)).ToList();
}
public OperationResult RemoveAllLeftWork(long workshopId, long employeeId)
{
var op = new OperationResult();
using (var transaction = _context.Database.BeginTransaction())
{
try
{
//bool hasContracts = _context.Contracts.Any(x => x.EmployeeId == employeeId && x.WorkshopIds == workshopId && x.IsActiveString == "true");
//if (hasContracts)
//{
// return op.Failed("حذف ترک کار این پرسنل به دلیل داشتن قرارداد امکان پذیر نمی باشد.");
//}
bool hasCheckout = _context.CheckoutSet.Any(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId);
if (hasCheckout)
{
return op.Failed("حذف ترک کار این پرسنل به دلیل داشتن فیش حقوقی امکان پذیر نمی باشد.");
}
var list = _context.LeftWorkList.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId).ToList();
if (list != null && list.Count > 0)
_context.LeftWorkList.RemoveRange(list);
bool hasLeftWorkInsurance = _context.LeftWorkInsuranceList.Any(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId);
if (!hasLeftWorkInsurance)
{
var personelCodeList = _context.PersonnelCodeSet.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId).ToList();
_context.PersonnelCodeSet.RemoveRange(personelCodeList);
}
_context.SaveChanges();
transaction.Commit();
if (HasActiveRollCallStatus(workshopId, employeeId))
RemoveEmployeeRollCallStatus(workshopId, employeeId);
if (hasLeftWorkInsurance)
return
op.Succcedded(1, "حذف با موفقیت انجام شد."); //+ "<br/>" + "<span class='text-danger'>" + "کد پرسنلی این شخص به دلیل استفاده در ترک کار بیمه قابل حذف نمی باشد. " + "</span>");
else
return op.Succcedded();
}
catch (Exception ex)
{
transaction.Rollback();
return op.Failed("حذف اطلاعات با خطا مواجه شد");
}
}
}
public List<LeftWorkViewModel> SearchLeftWork(LeftWorkSearchModel searchModel)
{
//var query = _context.LeftWorkList.Select(x => new LeftWorkViewModel()
//{
// Id = x.id,
// LeftWorkDate = x.LeftWorkDate.ToFarsi(),
// StartWorkDate = x.StartWorkDate.ToFarsi(),
// LeftWorkDateGr = x.LeftWorkDate,
// StartWorkDateGr = x.StartWorkDate,
// EmployeeFullName = x.EmployeeFullName,
// WorkshopName = x.WorkshopName,
// WorkshopId = x.WorkshopId,
// EmployeeId = x.EmployeeId,
//});
var query = new List<LeftWork>();
if (searchModel.WorkshopId != 0 && searchModel.EmployeeId != 0)
query = _context.LeftWorkList.Where(x => x.WorkshopId == searchModel.WorkshopId && x.EmployeeId == searchModel.EmployeeId).ToList();
if (searchModel.EmployeeId != 0)
query = _context.LeftWorkList.Where(x => x.EmployeeId == searchModel.EmployeeId).ToList();
var list = new List<LeftWorkViewModel>();
foreach (var item in query)
{
var jobObj = _context.Jobs.Where(x => x.id == item.JobId).FirstOrDefault();
list.Add(new LeftWorkViewModel()
{
Id = item.id,
LeftWorkDate = item.LeftWorkDate.ToFarsi(),
StartWorkDate = item.StartWorkDate.ToFarsi(),
LeftWorkDateGr = item.LeftWorkDate,
StartWorkDateGr = item.StartWorkDate,
EmployeeFullName = item.EmployeeFullName,
WorkshopName = item.WorkshopName,
WorkshopId = item.WorkshopId,
EmployeeId = item.EmployeeId,
JobId = item.JobId,
IncludeStatus = item.IncludeStatus,
JobName = jobObj != null ? jobObj.JobName : string.Empty,
JobCode = jobObj != null ? jobObj.JobCode : string.Empty,
AddLeavePay = item.AddLeavePay,
AddBonusesPay = item.AddBonusesPay,
AddYearsPay = item.AddYearsPay
});
}
return list.OrderByDescending(x => x.StartWorkDateGr).ToList();
}
public OperationResult CreateLeftWork(InformationLeftwork command)
{
var op = new OperationResult();
using (var transaction = _context.Database.BeginTransaction())
{
try
{
#region PersonelCode
if (command.PersonnelCodeList != null && command.PersonnelCodeList.Count > 0)
{
var personelcode = command.PersonnelCodeList.Where(x => x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId).FirstOrDefault();
if (personelcode != null)
{
if (_context.PersonnelCodeSet.Any(x => x.WorkshopId == command.WorkshopId && x.PersonnelCode == personelcode.PersonnelCode))
{
op.Failed(" کد پرسنلی در کارگاه " + command.WorkshopName + " تکراری می باشد. ");
}
if (personelcode.PersonnelCode <= 0)
{
return op.Failed(" کد پرسنلی در کارگاه " + command.WorkshopName + "نامعتبر است.");
}
_context.PersonnelCodeSet.Add(new PersonnelCodeDomain(command.WorkshopId, command.EmployeeId, personelcode.PersonnelCode));
}
}
#endregion
if (command.ItemLeftworkList != null && command.ItemLeftworkList.Count > 0)
{
bool checkRegister = false;
var workshop = _context.Workshops
.FirstOrDefault(x => x.id == command.WorkshopId);
var workshopComputeOptions = workshop.ComputeOptions;
var workshopBonusesOptions = workshop.BonusesOptions;
foreach (var item2 in command.ItemLeftworkList)
{
var LeftWork = _context.LeftWorkList.Where(x => x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId).ToList();
_context.LeftWorkList.RemoveRange(LeftWork);
DateTime left = item2.LeftWorkDate.ToGeorgianDateTime();
var start = item2.StartWorkDate.ToGeorgianDateTime();
var leftwork = new LeftWork(left, start, item2.WorkshopId, item2.EmployeeId, command.EmployeeFullName, item2.WorkshopName, item2.JobId, item2.IncludeStatus,item2.AddBonusesPay,item2.AddYearsPay,item2.AddLeavePay, workshopComputeOptions, workshopBonusesOptions);
Create(leftwork);
}
}
_context.SaveChanges();
transaction.Commit();
op.Succcedded(-1, " ثبت اطلاعات کارگاه " + command.WorkshopName + " با موفقیت انجام شد. ");
}
catch (Exception ex)
{
transaction.Rollback();
op.Failed(" ثبت اطلاعات کارگاه " + command.WorkshopName + " با خطا مواجه شد. ");
}
}
return op;
}
public OperationResult CreateLeftWorkByLeftWorkGroups(string employeeFullName, long commandEmployeeId, List<PersonnelCodeViewModel> commandPersonnelCode, List<LeftWorkGroup> leftWorkGroups)
{
var op = new OperationResult();
using (var transaction = _context.Database.BeginTransaction())
{
try
{
foreach (var item in leftWorkGroups)
{
#region PersonelCode
if (commandPersonnelCode != null && commandPersonnelCode.Count > 0)
{
var personelcode = commandPersonnelCode.Where(x => x.EmployeeId == commandEmployeeId && x.WorkshopId == item.WorkshopId).FirstOrDefault();
if (personelcode != null && personelcode.HasPersonelCode==false)
{
if (_context.PersonnelCodeSet.Any(x => x.WorkshopId == item.WorkshopId && x.PersonnelCode == personelcode.PersonnelCode))
{
return op.Failed(" کد پرسنلی در کارگاه " + item.WorkshopName + " تکراری می باشد. ");
}
if (personelcode.PersonnelCode <= 0)
{
return op.Failed(" کد پرسنلی در کارگاه " + item.WorkshopName + "نامعتبر است.");
}
_context.PersonnelCodeSet.Add(new PersonnelCodeDomain(item.WorkshopId, commandEmployeeId, personelcode.PersonnelCode));
}
}
#endregion
if (item.LeftWorkViewModels != null && item.LeftWorkViewModels.Count > 0)
{
bool checkRegister = false;
var LeftWorkList = _context.LeftWorkList.Where(x => x.EmployeeId == commandEmployeeId && x.WorkshopId == item.WorkshopId).ToList();
var removeList = new List<LeftWork>();
foreach (var removeItem in LeftWorkList)
{
if (!item.LeftWorkViewModels.Any(x => x.Id == removeItem.id))
removeList.Add(removeItem);
}
foreach (var item2 in item.LeftWorkViewModels)
{
DateTime left = new DateTime();
if (!string.IsNullOrWhiteSpace(item2.LeftWorkDate))
left = item2.LeftWorkDate.ToGeorgianDateTime();
var start = item2.StartWorkDate.ToGeorgianDateTime();
if (item2.Id == 0)
{
var workshop = _context.Workshops
.FirstOrDefault(x => x.id == item2.WorkshopId);
var workshopComputeOptions = workshop.ComputeOptions;
var workshopBonusesOptions = workshop.BonusesOptions;
var LeftWorkObj = new LeftWork(left, start, item2.WorkshopId, item2.EmployeeId,
employeeFullName, item2.WorkshopName, item2.JobId, item2.IncludeStatus,
item2.AddBonusesPay, item2.AddYearsPay, item2.AddLeavePay, workshopComputeOptions, workshopBonusesOptions);
Create(LeftWorkObj);
}
else
{
var LeftWork = _context.LeftWorkList.Where(x => x.id == item2.Id)?.FirstOrDefault();
LeftWork.Edit(left, start, item2.WorkshopId, item2.EmployeeId, item2.JobId, item2.IncludeStatus,
item2.AddBonusesPay, item2.AddYearsPay, item2.AddLeavePay);
}
}
if (removeList != null && removeList.Count > 0)
{
_context.LeftWorkList.RemoveRange(removeList);
}
//foreach (var item2 in item.LeftWorkViewModels)
//{
// var LeftWork = _context.LeftWorkList.Where(x => x.EmployeeId == commandEmployeeId && x.WorkshopId == item.WorkshopId).ToList();
// _context.LeftWorkList.RemoveRange(LeftWork);
// DateTime left = item2.LeftWorkDate.ToGeorgianDateTime();
// var start = item2.StartWorkDate.ToGeorgianDateTime();
// var leftwork = new LeftWork(left, start, item2.WorkshopId, item2.EmployeeId,
// employeeFullName, item2.WorkshopName, item2.JobId, item2.IncludeStatus,
// item2.AddBonusesPay, item2.AddYearsPay, item2.AddLeavePay);
// Create(leftwork);
//}
}
}
_context.SaveChanges();
transaction.Commit();
op.Succcedded(-1, " ثبت با موفقیت انجام شد. ");
}
catch (Exception ex)
{
transaction.Rollback();
op.Failed(" ثبت اطلاعات با خطا مواجه شد. ");
}
}
return op;
}
public OperationResult CheckDeleteLeftWork(long workshopId, long employeeId, DateTime date, int type)
{
var op = new OperationResult();
bool hasContracts = false;
var endDateSend = date.Date.AddDays(-1);
if (type==1)
hasContracts= _context.CheckoutSet.Any(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && (x.ContractStart.Date >= endDateSend) && x.IsActiveString == "true");
else
{
endDateSend = date.Date;
hasContracts = _context.CheckoutSet.Any(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && (x.ContractStart.Date <= endDateSend && x.ContractEnd.Date >= endDateSend) && x.IsActiveString == "true");
}
if (type == 1 && hasContracts)
{
return op.Failed("برای حذف تاریخ شروع به کار، ابتدا تصفیه حساب های مربوطه را حذف کنید");
}
else if (type == 2 && hasContracts)
{
return op.Failed("در این تاریخ تصفیه حساب ثبت شده است.برای حذف تاریخ ترک کار، ابتدا تصفیه حساب های مربوطه را حذف کنید");
}
return op.Succcedded();
}
public OperationResult CheckEditLeftWork(long workshopId, long employeeId, DateTime date, int type)
{
var op = new OperationResult();
bool hasContracts = false;
if (type == 1)
{
hasContracts= _context.CheckoutSet.Any(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && (x.ContractStart.Date>= date) && x.IsActiveString == "true");
if(hasContracts)
return op.Failed("لطفا ابتدا تصفیه حساب های آتی را حذف نمایید");
}
else
{
var LeftDay = date.Date;
var lastDay = date.Date.AddDays(-1);
var LastDayChekout = _context.CheckoutSet.FirstOrDefault(x =>
x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.ContractStart.Date <= lastDay.Date && x.ContractEnd.Date >= lastDay.Date);
var LeftDayCheckout = _context.CheckoutSet.FirstOrDefault(x =>
x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.ContractStart.Date <= LeftDay.Date && x.ContractEnd.Date >= LeftDay.Date);
if (LeftDayCheckout != null)
{
string resultDay = LeftDayCheckout.Month + " " + LeftDayCheckout.Year;
return op.Failed("در صورت تمایل به ثبت تاریخ، تصفیه حساب " + resultDay + " را حذف نمایید.");
}
if (LastDayChekout != null)
{
string resultDay = LastDayChekout.Month + " " + LastDayChekout.Year;
return op.Failed("در صورت تمایل به ثبت تاریخ، تصفیه حساب " + resultDay + " را حذف نمایید.");
}
var LastDayContract = _context.CheckoutSet.Any(x =>
x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.IsActiveString == "true" &&
x.ContractEnd.Date > lastDay.Date);
if(LastDayContract)
return op.Failed("AfterContracts");
// var contract = _context.Contracts.Where(x => x.EmployeeId == employeeId && x.WorkshopIds == workshopId && x.IsActiveString == "true").OrderByDescending(x=>x.ContarctStart).FirstOrDefault();
//if (contract != null)
//{
// if ((contract.ContarctStart.Date <= endDateSend.Date && contract.ContractEnd.Date >= endDateSend.Date))
// {
// var checkout = _context.CheckoutSet.Where(x =>
// x.EmployeeId == employeeId && x.WorkshopId == workshopId &&
// (x.ContractStart.Date <= date.Date && x.ContractEnd.Date >= date.Date)).FirstOrDefault();
// hasContracts = false;
// if (checkout != null)
// {
// string resultDay = checkout.Month + " " + checkout.Year;
// return op.Failed("در صورت تمایل به ثبت تاریخ، تصفیه حساب "+resultDay+" را حذف نمایید.");
// }
// else
// {
// return op.Succcedded();
// }
// }
// else if ((contract.ContractEnd.Date == endDateSend))
// {
// return op.Succcedded();
// }
// else if ((contract.ContractEnd.Date > endDateSend.AddMonths(1)))
// {
// return op.Failed("AfterContracts");
// }
// //else if ((contract.ContractEnd.Date < endDateSend.AddMonths(1)))
// //{
// // return op.Failed("NoContracts");
// //}
//}
return op.Succcedded();
}
return op.Succcedded();
}
#region Pooya
/// <summary>
/// آیا کارمند در این بازه های زمانی مشغول به کار در کارگاه بوده است؟
/// </summary>
/// <param name="dates">لیستی از بازه ها به این صورت که آیتم اول یا چپ شروع بازه و آیتم دوم یا راست انتهای بازه می باشد </param>
public bool IsEmployeeWorkingInDates(long employeeId, long workshopId, List<(DateTime, DateTime)> dates)
{
var list = _context.LeftWorkList.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId).Select(x => new
{
x.StartWorkDate,
x.LeftWorkDate
});
return dates.All(x => list.Any(y => y.StartWorkDate <= x.Item1 && y.LeftWorkDate >= x.Item2));
}
public List<LeftWorkViewModel> GetByWorkshopIdInDates(long workshopId, DateTime startDateGr, DateTime endDateGr)
{
return _context.LeftWorkList.Where(x => x.WorkshopId == workshopId && x.LeftWorkDate.AddDays(-1) >= startDateGr &&
x.StartWorkDate <= endDateGr).Select(x => new LeftWorkViewModel()
{
StartWorkDateGr = x.StartWorkDate.Date,
LeftWorkDateGr = x.LeftWorkDate.Date,
EmployeeId = x.EmployeeId
}).ToList();
}
public LeftWorkViewModel GetByWorkshopIdEmployeeIdInDates(long workshopId, long employeeId, DateTime start, DateTime end)
{
var entity = _context.LeftWorkList.FirstOrDefault(x => x.WorkshopId == workshopId && x.EmployeeId == employeeId && x.LeftWorkDate.AddDays(-1) >= start.Date &&
x.StartWorkDate <= end.Date);
return new LeftWorkViewModel()
{
StartWorkDateGr = entity.StartWorkDate.Date,
LeftWorkDateGr = entity.LeftWorkDate.Date,
EmployeeId = entity.EmployeeId,
HasLeft = entity.HasLeft
};
}
public LeftWork GetLastLeftWorkByEmployeeIdAndWorkshopId(long workshopId, long employeeId)
{
return _context.LeftWorkList.Where(x => x.WorkshopId == workshopId && x.EmployeeId == employeeId)
.OrderByDescending(x => x.StartWorkDate).FirstOrDefault();
}
public async Task<LeftWork> GetLastLeftWork(long employeeId, long workshopId)
{
var leftWork =await _context.LeftWorkList.Where(x => x.WorkshopId == workshopId && x.EmployeeId == employeeId)
.OrderByDescending(x => x.StartWorkDate).FirstOrDefaultAsync();
return leftWork;
}
public List<LeftWorkViewModel> SearchCreateContract(LeftWorkSearchModel searchModel)
{
var vipGroup = _context.CustomizeWorkshopEmployeeSettings.Where(x => x.CustomizeWorkshopGroupSettingId == 117)
.Select(x => x.EmployeeId).ToList();
var query = _context.LeftWorkList.Select(x => new LeftWorkViewModel()
{
Id = x.id,
LeftWorkDate = x.LeftWorkDate.ToFarsi(),
StartWorkDate = x.StartWorkDate.ToFarsi(),
LeftWorkDateGr = x.LeftWorkDate,
StartWorkDateGr = x.StartWorkDate,
EmployeeFullName = x.EmployeeFullName,
WorkshopName = x.WorkshopName,
WorkshopId = x.WorkshopId,
EmployeeId = x.EmployeeId,
AddBonusesPay = x.AddBonusesPay,
AddYearsPay = x.AddYearsPay,
AddLeavePay = x.AddLeavePay,
JobId = x.JobId,
JobName = _context.Jobs.FirstOrDefault(j => j.id == x.JobId).JobName
}).Where(x=> !vipGroup.Contains(x.EmployeeId));
if (searchModel.WorkshopId != 0 && searchModel.EmployeeId != 0)
query = query.Where(x => x.WorkshopId == searchModel.WorkshopId && x.EmployeeId == searchModel.EmployeeId);
if (searchModel.EmployeeId != 0 && searchModel.WorkshopId == 0)
query = query.Where(x => x.EmployeeId == searchModel.EmployeeId);
if (searchModel.WorkshopId != 0 && searchModel.EmployeeId == 0)
query = query.Where(x => x.WorkshopId == searchModel.WorkshopId);
return query.OrderByDescending(x => x.StartWorkDateGr).ToList();
}
private bool HasActiveRollCallStatus(long workshopId, long employeeId)
{
var now = DateTime.Today;
var isDateUndefined = new DateTime(2121, 03, 21);
return
_context.RollCallEmployees.Include(x => x.EmployeesStatus).Any(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId &&
x.EmployeesStatus.Any(y => (y.EndDate.Date > now && y.StartDate <= now) || (y.EndDate.Date == isDateUndefined)));
}
private void RemoveEmployeeRollCallStatus(long workshopId, long employeeId)
{
var entity = _context.RollCallEmployees.Include(x=>x.EmployeesStatus).FirstOrDefault(x => x.WorkshopId == workshopId && x.EmployeeId == employeeId);
if (entity == null)
return;
var hasLeftWork = _context.LeftWorkList.Any(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId);
//اگر هیچ شرع بکار ترک کاری نداشت
if (!hasLeftWork)
{
var now = DateTime.Today;
entity.DeActive();
var rollCallEmployeeStatus =
entity.EmployeesStatus.FirstOrDefault(x => x.EndDate.Date.IsDateUndefined() || x.EndDate.Date > now && x.StartDate <= now);
if (rollCallEmployeeStatus != null)
{
var end = rollCallEmployeeStatus.StartDate.Date > DateTime.Now.Date
? rollCallEmployeeStatus.StartDate.Date
: DateTime.Now.Date;
rollCallEmployeeStatus.Deactivate(end);
}
_context.SaveChanges();
}
//_context.RollCallEmployees.Remove(entity);
}
#endregion
}