diff --git a/CompanyManagment.Application/LeftWorkTempApplication.cs b/CompanyManagment.Application/LeftWorkTempApplication.cs index 37681395..9ad89599 100644 --- a/CompanyManagment.Application/LeftWorkTempApplication.cs +++ b/CompanyManagment.Application/LeftWorkTempApplication.cs @@ -9,6 +9,7 @@ using Company.Domain.EmployeeAgg; using Company.Domain.JobAgg; using Company.Domain.LeftWorkAgg; using Company.Domain.LeftWorkTempAgg; +using Company.Domain.RollCallAgg; using Company.Domain.RollCallEmployeeAgg; using Company.Domain.RollCallEmployeeStatusAgg; using Company.Domain.WorkshopAgg; @@ -34,9 +35,11 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication private readonly IContractRepository _contractRepository; private readonly IRollCallEmployeeRepository _rollCallEmployeeRepository; private readonly IRollCallEmployeeStatusRepository _rollCallEmployeeStatusRepository; + private readonly IRollCallRepository _rollCallRepository; - public LeftWorkTempApplication(ILeftWorkTempRepository leftWorkTempRepository, ILeftWorkRepository leftWorkRepository, IWorkshopRepository workshopRepository, IEmployeeRepository employeeRepository, IJobRepository jobRepository, ICheckoutRepository checkoutRepository, IContractRepository contractRepository, IRollCallEmployeeStatusRepository rollCallEmployeeStatusRepository, IRollCallEmployeeRepository rollCallEmployeeRepository) + + public LeftWorkTempApplication(ILeftWorkTempRepository leftWorkTempRepository, ILeftWorkRepository leftWorkRepository, IWorkshopRepository workshopRepository, IEmployeeRepository employeeRepository, IJobRepository jobRepository, ICheckoutRepository checkoutRepository, IContractRepository contractRepository, IRollCallEmployeeStatusRepository rollCallEmployeeStatusRepository, IRollCallEmployeeRepository rollCallEmployeeRepository, IRollCallRepository rollCallRepository) { _leftWorkTempRepository = leftWorkTempRepository; _leftWorkRepository = leftWorkRepository; @@ -47,87 +50,103 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication _contractRepository = contractRepository; _rollCallEmployeeStatusRepository = rollCallEmployeeStatusRepository; _rollCallEmployeeRepository = rollCallEmployeeRepository; - } + _rollCallRepository = rollCallRepository; + } - public async Task Create(CreateLeftWorkTemp command) - { - var op = new OperationResult(); + public async Task Create(CreateLeftWorkTemp command) + { + var op = new OperationResult(); - foreach (var employeeId in command.EmployeeIds) - { - #region Validation + foreach (var employeeId in command.EmployeeIds) + { + #region Validation - if (command.LeftWorkTime.TryToGeorgianDateTime(out var leftWorkDateGr) == false) - { - return op.Failed("تاریخ شروع به کار وارد شده نامعتبر است"); - } - if (command.LastDayStanding.TryToGeorgianDateTime(out var lastDayStandingDateGr) == false) - { - return op.Failed("تاریخ شروع به کار وارد شده نامعتبر است"); - } + if (command.LeftWorkTime.TryToGeorgianDateTime(out var leftWorkDateGr) == false) + { + return op.Failed("تاریخ شروع به کار وارد شده نامعتبر است"); + } + if (command.LastDayStanding.TryToGeorgianDateTime(out var lastDayStandingDateGr) == false) + { + return op.Failed("تاریخ شروع به کار وارد شده نامعتبر است"); + } - var leftWork = await _leftWorkRepository.GetLastLeftWork(employeeId, command.WorkshopId); + var leftWork = await _leftWorkRepository.GetLastLeftWork(employeeId, command.WorkshopId); - if (lastDayStandingDateGr.AddDays(1).Date != leftWorkDateGr) - { - return op.Failed("تاریخ آخرین روز کاری با تاریخ ترک کار یک روز اختلاف ندارند"); - } + if (lastDayStandingDateGr.AddDays(1).Date != leftWorkDateGr) + { + return op.Failed("تاریخ آخرین روز کاری با تاریخ ترک کار یک روز اختلاف ندارند"); + } - if (leftWork == null) - { - return op.Failed("شروع به کار پرسنل یافت نشد"); - } + if (leftWork == null) + { + return op.Failed("شروع به کار پرسنل یافت نشد"); + } - if (leftWork.HasLeft) - { - return op.Failed("پرسنل وارد شده قبلا ترک کار ثبت شده است"); - } + if (leftWork.HasLeft) + { + return op.Failed("پرسنل وارد شده قبلا ترک کار ثبت شده است"); + } - if (leftWork.StartWorkDate > lastDayStandingDateGr) - { - return op.Failed("تاریخ ثبت شده قبل از شروع به کار است"); - } + if (leftWork.StartWorkDate > lastDayStandingDateGr) + { + return op.Failed("تاریخ ثبت شده قبل از شروع به کار است"); + } - if (leftWork.WorkshopId != command.WorkshopId || leftWork.EmployeeId != employeeId) - { - return op.Failed("اطلاعات وارد شده نامعتبر است"); - } + if (leftWork.WorkshopId != command.WorkshopId || leftWork.EmployeeId != employeeId) + { + return op.Failed("اطلاعات وارد شده نامعتبر است"); + } + + if (_rollCallRepository.Exists(x => x.ShiftDate >= leftWorkDateGr && x.EmployeeId == leftWork.EmployeeId && x.WorkshopId == leftWork.WorkshopId)) + { + return op.Failed("در تاریخ ترک کار وارد شده یا جلوتر ، پرسنل دارای حضورغیاب میباشد. لطفا اول حضور غیاب های پرسنل را حذف نمایید"); + } + //if (leftWork.StartWorkDate >= leftWorkDateGr) + //{ + // return op.Failed("ترک کار نمیتواند کوچک تر یا مساوی شروع به کار باشد"); + //} - //if (leftWork.StartWorkDate >= leftWorkDateGr) - //{ - // return op.Failed("ترک کار نمیتواند کوچک تر یا مساوی شروع به کار باشد"); - //} + //if (_checkoutRepository.Exists(x => x.EmployeeId == leftWorkTemp.EmployeeId && + // x.WorkshopId == leftWorkTemp.WorkshopId && + // x.ContractStart <= lastDayStandingGr && x.ContractEnd >= lastDayStandingGr)) + //{ + // return op.Failed("این پرسنل در تاریخ ترک کار وارد شده دارای فیش حقوقی میباشد. ابتدا فیش حقوقی پرسنل را حذف کنید "); + //} - //if (_checkoutRepository.Exists(x => x.EmployeeId == leftWorkTemp.EmployeeId && - // x.WorkshopId == leftWorkTemp.WorkshopId && - // x.ContractStart <= lastDayStandingGr && x.ContractEnd >= lastDayStandingGr)) - //{ - // return op.Failed("این پرسنل در تاریخ ترک کار وارد شده دارای فیش حقوقی میباشد. ابتدا فیش حقوقی پرسنل را حذف کنید "); - //} - - //if (_contractRepository.Exists(x => x.EmployeeId == leftWorkTemp.EmployeeId && - // x.WorkshopIds == leftWorkTemp.WorkshopId && - // x.ContarctStart <= lastDayStandingGr && x.ContractEnd >= lastDayStandingGr)) - //{ - // return op.Failed("این پرسنل در تاریخ ترک کار وارد شده دارای قرارداد میباشد"); - //} + //if (_contractRepository.Exists(x => x.EmployeeId == leftWorkTemp.EmployeeId && + // x.WorkshopIds == leftWorkTemp.WorkshopId && + // x.ContarctStart <= lastDayStandingGr && x.ContractEnd >= lastDayStandingGr)) + //{ + // return op.Failed("این پرسنل در تاریخ ترک کار وارد شده دارای قرارداد میباشد"); + //} - #endregion + #endregion - var leftWorkTemp = LeftWorkTemp.CreateLeftWork(leftWork.id, leftWork.StartWorkDate, leftWorkDateGr, lastDayStandingDateGr, - command.WorkshopId, employeeId, leftWork.JobId); + var leftWorkTemp = LeftWorkTemp.CreateLeftWork(leftWork.id, leftWork.StartWorkDate, leftWorkDateGr, lastDayStandingDateGr, + command.WorkshopId, employeeId, leftWork.JobId); + var rollCallEmployee = + _rollCallEmployeeRepository.GetByEmployeeIdAndWorkshopId(employeeId, leftWork.WorkshopId); + if (rollCallEmployee != null) + { + var employeeStatus = + _rollCallEmployeeStatusRepository.GetByRollCallEmployeeIdAndDate( + rollCallEmployee.Id, leftWorkDateGr); - await _leftWorkTempRepository.CreateAsync(leftWorkTemp); - } + employeeStatus?.Deactivate(leftWorkDateGr); + } - await _leftWorkTempRepository.SaveChangesAsync(); - return op.Succcedded(); - } + await _leftWorkTempRepository.CreateAsync(leftWorkTemp); - public Task GetStartAndLeftWorkDetails(long employeeId, long workshopId) + } + + await _leftWorkTempRepository.SaveChangesAsync(); + return op.Succcedded(); + } + + public Task GetStartAndLeftWorkDetails(long employeeId, long workshopId) { return _leftWorkTempRepository.GetStartAndLeftWorkDetails(employeeId, workshopId); } @@ -215,7 +234,12 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication return op.Failed("ترک کار نمیتواند کوچک تر یا مساوی شروع به کار باشد"); } - if (_checkoutRepository.Exists(x => x.EmployeeId == leftWorkTemp.EmployeeId && + if (_rollCallRepository.Exists(x => x.ShiftDate >= leftWorkDateGr && x.EmployeeId == leftWork.EmployeeId && x.WorkshopId == leftWork.WorkshopId)) + { + return op.Failed("در تاریخ ترک کار وارد شده یا جلوتر ، پرسنل دارای حضورغیاب میباشد. لطفا اول حضور غیاب های پرسنل را حذف نمایید"); + } + + if (_checkoutRepository.Exists(x => x.EmployeeId == leftWorkTemp.EmployeeId && x.WorkshopId == leftWorkTemp.WorkshopId && x.ContractStart <= lastDayStandingGr && x.ContractEnd >= lastDayStandingGr)) {