diff --git a/0_Framework/Application/Tools.cs b/0_Framework/Application/Tools.cs index 81a9d35a..1c5962eb 100644 --- a/0_Framework/Application/Tools.cs +++ b/0_Framework/Application/Tools.cs @@ -1386,6 +1386,11 @@ public static class Tools /// public static bool TryToGeorgianDateTime(this string persianDate, out DateTime georgianDateTime) { + if (string.IsNullOrWhiteSpace(persianDate)) + { + georgianDateTime = new DateTime(3000, 12, 20, new PersianCalendar()); + return false; + } persianDate = persianDate.ToEnglishNumber(); try { diff --git a/Company.Domain/CustomizeWorkshopEmployeeSettingsAgg/ICustomizeWorkshopEmployeeSettingsRepository.cs b/Company.Domain/CustomizeWorkshopEmployeeSettingsAgg/ICustomizeWorkshopEmployeeSettingsRepository.cs index 230c4b1f..6c981a4d 100644 --- a/Company.Domain/CustomizeWorkshopEmployeeSettingsAgg/ICustomizeWorkshopEmployeeSettingsRepository.cs +++ b/Company.Domain/CustomizeWorkshopEmployeeSettingsAgg/ICustomizeWorkshopEmployeeSettingsRepository.cs @@ -13,5 +13,6 @@ public interface ICustomizeWorkshopEmployeeSettingsRepository : IRepository GetBy(long groupId); List GetEmployeeSettingsByWorkshopId(long workshopId); List GetEmployeeSettingNotInMainGroup(long entityWorkshopId); + void RemoveByWorkshopIdAndEmployeeId(long workshopId, long employeeId); } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/EmployeeDocuments/IEmployeeDocumentsApplication.cs b/CompanyManagment.App.Contracts/EmployeeDocuments/IEmployeeDocumentsApplication.cs index 42bcdbde..a6ad4af9 100644 --- a/CompanyManagment.App.Contracts/EmployeeDocuments/IEmployeeDocumentsApplication.cs +++ b/CompanyManagment.App.Contracts/EmployeeDocuments/IEmployeeDocumentsApplication.cs @@ -12,7 +12,7 @@ namespace CompanyManagment.App.Contracts.EmployeeDocuments OperationResult AddEmployeeDocumentItemForAdmin(AddEmployeeDocumentItem command); - OperationResult AddRangeEmployeeDocumentItems(long workshopId, long employeeId, + OperationResult AddRangeEmployeeDocumentItemsByClient(long workshopId, long employeeId, List command); /// diff --git a/CompanyManagment.Application/EmployeeAplication.cs b/CompanyManagment.Application/EmployeeAplication.cs index a27dad5a..74c7e8e0 100644 --- a/CompanyManagment.Application/EmployeeAplication.cs +++ b/CompanyManagment.Application/EmployeeAplication.cs @@ -1047,16 +1047,14 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli Directory.CreateDirectory(directoryPath); var filePath1 = Path.Combine(directoryPath) + $@"\1.jpg"; - if (System.IO.File.Exists(filePath1)) - { + CreateImageFromBase64(command.RollCallUploadEmployeePicture.Picture1, filePath1); - } + var filePath2 = Path.Combine(directoryPath) + $@"\2.jpg"; - if (System.IO.File.Exists(filePath2)) - { + CreateImageFromBase64(command.RollCallUploadEmployeePicture.Picture2, filePath2); - } + var rollCallEmployee = @@ -1085,36 +1083,16 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli } - var rollCallEmployeeStatusResult = _rollCallEmployeeStatusApplication.Create( - new CreateRollCallEmployeeStatus() { RollCallEmployeeId = rollCallEmployee.id }); - if (rollCallEmployeeStatusResult.IsSuccedded == false) - { - return rollCallEmployeeStatusResult; - } if (command.CreateCustomizeEmployeeSettings.GroupId > 0) { if (_customizeWorkshopEmployeeSettingsRepository - .Exists(x => x.WorkshopId == workshop.Id && x.EmployeeId == employee.id) == false) + .Exists(x => x.WorkshopId == workshop.Id && x.EmployeeId == employee.id)) { - command.CreateCustomizeEmployeeSettings.EmployeeIds = [employee.id]; - command.CreateCustomizeEmployeeSettings.WorkshopId = command.WorkshopId; - var resultCreateEmployeeSettings = - _customizeWorkshopSettingsApplication.CreateEmployeesSettingsAndSetChanges( - command.CreateCustomizeEmployeeSettings); - if (resultCreateEmployeeSettings.IsSuccedded == false) - { - return resultCreateEmployeeSettings; - } + _customizeWorkshopEmployeeSettingsRepository.RemoveByWorkshopIdAndEmployeeId(workshop.Id, employee.id); } - } - } - else if (command.CreateCustomizeEmployeeSettings.GroupId > 0) - { - if (_customizeWorkshopEmployeeSettingsRepository - .Exists(x => x.WorkshopId == workshop.Id && x.EmployeeId == employee.id) == false) - { + command.CreateCustomizeEmployeeSettings.EmployeeIds = [employee.id]; command.CreateCustomizeEmployeeSettings.WorkshopId = command.WorkshopId; var resultCreateEmployeeSettings = @@ -1124,7 +1102,34 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli { return resultCreateEmployeeSettings; } + + var rollCallEmployeeStatusResult = _rollCallEmployeeStatusApplication.Create( + new CreateRollCallEmployeeStatus() { RollCallEmployeeId = rollCallEmployee.id }); + + if (rollCallEmployeeStatusResult.IsSuccedded == false) + { + return rollCallEmployeeStatusResult; + } } + } + else if (command.CreateCustomizeEmployeeSettings.GroupId > 0) + { + if (_customizeWorkshopEmployeeSettingsRepository + .Exists(x => x.WorkshopId == workshop.Id && x.EmployeeId == employee.id)) + { + _customizeWorkshopEmployeeSettingsRepository.RemoveByWorkshopIdAndEmployeeId(workshop.Id, employee.id); + } + + command.CreateCustomizeEmployeeSettings.EmployeeIds = [employee.id]; + command.CreateCustomizeEmployeeSettings.WorkshopId = command.WorkshopId; + var resultCreateEmployeeSettings = + _customizeWorkshopSettingsApplication.CreateEmployeesSettingsAndSetChanges( + command.CreateCustomizeEmployeeSettings); + if (resultCreateEmployeeSettings.IsSuccedded == false) + { + return resultCreateEmployeeSettings; + } + var rollCallEmployee = _rollCallEmployeeRepository.GetBy(employee.id, command.WorkshopId); @@ -1152,7 +1157,7 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli command.EmployeeDocumentItems = command.EmployeeDocumentItems ?? []; - var employeeDocumentResult = _employeeDocumentsApplication.AddRangeEmployeeDocumentItems(command.WorkshopId, + var employeeDocumentResult = _employeeDocumentsApplication.AddRangeEmployeeDocumentItemsByClient(command.WorkshopId, employee.id, command.EmployeeDocumentItems); if (employeeDocumentResult.IsSuccedded == false) @@ -1307,6 +1312,10 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli return op.Failed("کد ملی با تاریخ تولد وارد شده مطابقت ندارد"); } } + else if (employee.DateOfBirth.ToFarsi() != birthDate || employee.NationalCode != nationalCode) + { + return op.Failed("کد ملی با تاریخ تولد وارد شده مطابقت ندارد"); + } var leftWorkViewModel = _leftWorkRepository.GetLastLeftWorkByEmployeeIdAndWorkshopId(workshopId, employee.id); if (leftWorkViewModel == null) diff --git a/CompanyManagment.Application/EmployeeDocumentsApplication.cs b/CompanyManagment.Application/EmployeeDocumentsApplication.cs index b74ca52c..5e7e133e 100644 --- a/CompanyManagment.Application/EmployeeDocumentsApplication.cs +++ b/CompanyManagment.Application/EmployeeDocumentsApplication.cs @@ -382,7 +382,7 @@ namespace CompanyManagment.Application /// /// برای افزودن یکباره مدارک در افزودن پرسنل توسط کلاینت /// - public OperationResult AddRangeEmployeeDocumentItems(long workshopId, long employeeId, List command) + public OperationResult AddRangeEmployeeDocumentItemsByClient(long workshopId, long employeeId, List command) { OperationResult op = new(); @@ -430,7 +430,7 @@ namespace CompanyManagment.Application if (_employeeDocumentItemRepository.Exists(x => x.MediaId == mediaOpResult.SendId)) return op.Failed("امکان ثبت رکورد تکراری وجود ندارد"); - var newEntity = new EmployeeDocumentItem(workshopId, employeeId, mediaOpResult.SendId, entity.id, item.Label, uploaderId, uploaderType); + var newEntity = new EmployeeDocumentItem(workshopId, employeeId, mediaOpResult.SendId, entity.id, item.Label, uploaderId, uploaderType, DocumentStatus.SubmittedByClient); newEntities.Add(newEntity); } @@ -438,9 +438,9 @@ namespace CompanyManagment.Application .Select(x => x.MaxBy(y => y.CreationDate)); //This can bite! - _employeeDocumentItemRepository.RemoveRange(currentItems); - _employeeDocumentItemRepository.SaveChanges(); - + _employeeDocumentItemRepository.RemoveRange(currentItems); + _employeeDocumentItemRepository.SaveChanges(); + entity.UpdateIsConfirmed(); _employeeDocumentItemRepository.AddRange(newEntities); _employeeDocumentItemRepository.SaveChanges(); diff --git a/CompanyManagment.Application/LeftWorkTempApplication.cs b/CompanyManagment.Application/LeftWorkTempApplication.cs index bec162c7..5444bf5c 100644 --- a/CompanyManagment.Application/LeftWorkTempApplication.cs +++ b/CompanyManagment.Application/LeftWorkTempApplication.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Threading.Tasks; using _0_Framework.Application; using _0_Framework_b.Application; @@ -8,12 +9,15 @@ using Company.Domain.EmployeeAgg; using Company.Domain.JobAgg; using Company.Domain.LeftWorkAgg; using Company.Domain.LeftWorkTempAgg; +using Company.Domain.RollCallEmployeeAgg; +using Company.Domain.RollCallEmployeeStatusAgg; using Company.Domain.WorkshopAgg; using CompanyManagment.App.Contracts.Checkout; using CompanyManagment.App.Contracts.Contract; using CompanyManagment.App.Contracts.LeftWork; using CompanyManagment.App.Contracts.LeftWorkTemp; using CompanyManagment.App.Contracts.ReportClient; +using CompanyManagment.App.Contracts.RollCallEmployee; using OperationResult = _0_Framework.Application.OperationResult; using Tools = _0_Framework.Application.Tools; @@ -28,9 +32,11 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication private readonly IJobRepository _jobRepository; private readonly ICheckoutRepository _checkoutRepository; private readonly IContractRepository _contractRepository; + private readonly IRollCallEmployeeRepository _rollCallEmployeeRepository; + private readonly IRollCallEmployeeStatusRepository _rollCallEmployeeStatusRepository; - public LeftWorkTempApplication(ILeftWorkTempRepository leftWorkTempRepository, ILeftWorkRepository leftWorkRepository, IWorkshopRepository workshopRepository, IEmployeeRepository employeeRepository, IJobRepository jobRepository, ICheckoutRepository checkoutRepository, IContractRepository contractRepository) + public LeftWorkTempApplication(ILeftWorkTempRepository leftWorkTempRepository, ILeftWorkRepository leftWorkRepository, IWorkshopRepository workshopRepository, IEmployeeRepository employeeRepository, IJobRepository jobRepository, ICheckoutRepository checkoutRepository, IContractRepository contractRepository, IRollCallEmployeeStatusRepository rollCallEmployeeStatusRepository, IRollCallEmployeeRepository rollCallEmployeeRepository) { _leftWorkTempRepository = leftWorkTempRepository; _leftWorkRepository = leftWorkRepository; @@ -39,7 +45,9 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication _jobRepository = jobRepository; _checkoutRepository = checkoutRepository; _contractRepository = contractRepository; - } + _rollCallEmployeeStatusRepository = rollCallEmployeeStatusRepository; + _rollCallEmployeeRepository = rollCallEmployeeRepository; + } public async Task Create(CreateLeftWorkTemp command) { @@ -47,7 +55,6 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication foreach (var employee in command.EmployeeIds) { - var leftWork = _leftWorkRepository.GetByDateAndWorkshopIdAndEmployeeId(command.WorkshopId, employee, Tools.ToGeorgianDateTime(command.LastDayStanding)); #region Validation if (command.LeftWorkTime.TryToGeorgianDateTime(out var leftWorkDateGr) == false) @@ -58,8 +65,9 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication { return op.Failed("تاریخ شروع به کار وارد شده نامعتبر است"); } + var leftWork = _leftWorkRepository.GetByDateAndWorkshopIdAndEmployeeId(command.WorkshopId, employee, lastDayStandingDateGr); - if (lastDayStandingDateGr.AddDays(1).Date != leftWorkDateGr) + if (lastDayStandingDateGr.AddDays(1).Date != leftWorkDateGr) { return op.Failed("تاریخ آخرین روز کاری با تاریخ ترک کار یک روز اختلاف ندارند"); } @@ -154,47 +162,47 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication return op.Succcedded(); } - public async Task AcceptLeftWork(AcceptLeftWorkTemp command) - { - var op = new OperationResult(); - if (command.LeftWorkTime.TryToGeorgianDateTime(out var leftWorkDateGr) == false) - { - return op.Failed("تاریخ ترک کار وارد شده نامعتبر است"); - } + public async Task AcceptLeftWork(AcceptLeftWorkTemp command) + { + var op = new OperationResult(); + if (command.LeftWorkTime.TryToGeorgianDateTime(out var leftWorkDateGr) == false) + { + return op.Failed("تاریخ ترک کار وارد شده نامعتبر است"); + } - if (command.LastDayStanding.TryToGeorgianDateTime(out var lastDayStandingGr) == false) - { - return op.Failed("تاریخ آخرین روز کاری وارد شده نامعتبر است"); - } + if (command.LastDayStanding.TryToGeorgianDateTime(out var lastDayStandingGr) == false) + { + return op.Failed("تاریخ آخرین روز کاری وارد شده نامعتبر است"); + } - if (lastDayStandingGr.AddDays(1).Date != leftWorkDateGr) - { - return op.Failed("تاریخ آخرین روز کاری با تاریخ ترک کار یک روز اختلاف ندارند"); - } + if (lastDayStandingGr.AddDays(1).Date != leftWorkDateGr) + { + return op.Failed("تاریخ آخرین روز کاری با تاریخ ترک کار یک روز اختلاف ندارند"); + } - var leftWorkTemp = _leftWorkTempRepository.Get(command.LeftWorkTempId); + var leftWorkTemp = _leftWorkTempRepository.Get(command.LeftWorkTempId); - if (leftWorkTemp == null) - { - return op.Failed("ترک کار وارد شده یافت نشد"); - } + if (leftWorkTemp == null) + { + return op.Failed("ترک کار وارد شده یافت نشد"); + } - if (leftWorkTemp.LeftWorkType != LeftWorkTempType.LeftWork) - { - return op.Failed("اطلاعات وارد شده نامعتبر است"); - } + if (leftWorkTemp.LeftWorkType != LeftWorkTempType.LeftWork) + { + return op.Failed("اطلاعات وارد شده نامعتبر است"); + } - var leftWork = _leftWorkRepository.Get(leftWorkTemp.LeftWorkId); + var leftWork = _leftWorkRepository.Get(leftWorkTemp.LeftWorkId); - if (leftWork == null) - return op.Failed("شروع به کار پرسنل یافت نشد"); + if (leftWork == null) + 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 && @@ -203,13 +211,52 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication return op.Failed("این پرسنل در تاریخ ترک کار وارد شده دارای فیش حقوقی میباشد. ابتدا فیش حقوقی پرسنل را حذف کنید "); } - leftWork.Edit(leftWorkDateGr, leftWork.StartWorkDate, leftWork.WorkshopId, leftWork.EmployeeId, leftWork.JobId, - leftWork.IncludeStatus, leftWork.AddBonusesPay, leftWork.AddYearsPay, leftWork.AddLeavePay); + leftWork.Edit(leftWorkDateGr, leftWork.StartWorkDate, leftWork.WorkshopId, leftWork.EmployeeId, leftWork.JobId, + leftWork.IncludeStatus, leftWork.AddBonusesPay, leftWork.AddYearsPay, leftWork.AddLeavePay); - _leftWorkTempRepository.Remove(leftWorkTemp); - await _leftWorkRepository.SaveChangesAsync(); - await _leftWorkTempRepository.SaveChangesAsync(); + _leftWorkTempRepository.Remove(leftWorkTemp); + await _leftWorkRepository.SaveChangesAsync(); + await _leftWorkTempRepository.SaveChangesAsync(); - return op.Succcedded(); - } + IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(leftWork.EmployeeId); + + return op.Succcedded(); + } + //این متد ترک کار های کارمند را با فعالیت حضور غیاب یکپارچه می کند + private void IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(long employeeId) + { + //get last leftworks for employee in all workshops + var leftWorks = _leftWorkRepository.search(new LeftWorkSearchModel() { EmployeeId = employeeId }).GroupBy(x => x.WorkshopId).Select(x => + { + var leftWork = x.MaxBy(y => y.StartWorkDateGr); + return new LeftWorkViewModel() + { + EmployeeId = employeeId, + WorkshopId = x.Key, + LeftWorkDateGr = leftWork.LeftWorkDateGr.Date.AddDays(-1), + StartWorkDateGr = leftWork.StartWorkDateGr + }; + }).ToList(); + + //get rollCallEmployee associated with those leftworks which have a higher end date than leftworkDate + var rollCallsEmployee = _rollCallEmployeeRepository.GetByEmployeeIdWithStatuses(employeeId) + .Where(x => leftWorks.Any(y => y.WorkshopId == x.WorkshopId)).ToList(); + + var joinedList = rollCallsEmployee.Join(leftWorks, x => x.WorkshopId, y => y.WorkshopId, (x, y) => new + { + x.WorkshopId, + x.EmployeeId, + y.LeftWorkDateGr, + Status = x.Statuses.OrderByDescending(z => z.StartDate).FirstOrDefault(z => z.StartDateGr.Date < y.LeftWorkDateGr && z.EndDateGr.Date > y.LeftWorkDateGr) + }); + + //shaping up the list to send as parameter to repository + var newRollCallRecords = joinedList.Where(x => x.Status != null).Select(x => new AdjustRollCallEmployeesWithEmployeeLeftWork() + { + LeaveDate = x.LeftWorkDateGr, + RollCallStatusId = x.Status.Id + }).ToList(); + if (newRollCallRecords.Count > 0) + _rollCallEmployeeStatusRepository.AdjustRollCallStatusEndDates(newRollCallRecords); + } } \ No newline at end of file diff --git a/CompanyManagment.EFCore/Repository/CustomizeWorkshopEmployeeSettingsRepository.cs b/CompanyManagment.EFCore/Repository/CustomizeWorkshopEmployeeSettingsRepository.cs index 40ec0411..303da08f 100644 --- a/CompanyManagment.EFCore/Repository/CustomizeWorkshopEmployeeSettingsRepository.cs +++ b/CompanyManagment.EFCore/Repository/CustomizeWorkshopEmployeeSettingsRepository.cs @@ -168,4 +168,10 @@ public class CustomizeWorkshopEmployeeSettingsRepository(CompanyContext companyC }).ToList(); } + public void RemoveByWorkshopIdAndEmployeeId(long workshopId, long employeeId) + { + var entity = _companyContext.CustomizeWorkshopEmployeeSettings.FirstOrDefault(x => x.WorkshopId == workshopId && x.EmployeeId == employeeId); + if (entity != null) + Remove(entity); + } } \ No newline at end of file diff --git a/ServiceHost/Areas/Client/Pages/Company/Employees/CreateEmployeeModal.cshtml b/ServiceHost/Areas/Client/Pages/Company/Employees/CreateEmployeeModal.cshtml index cffddc5e..ba2364f1 100644 --- a/ServiceHost/Areas/Client/Pages/Company/Employees/CreateEmployeeModal.cshtml +++ b/ServiceHost/Areas/Client/Pages/Company/Employees/CreateEmployeeModal.cshtml @@ -2,8 +2,7 @@ @{ string clientVersion = _0_Framework.Application.Version.StyleVersion; - - // + var rollCallPath = Context.Request.Path.Value; @@ -154,7 +153,14 @@
- + @if (rollCallPath == "/Client/Company/RollCall/EmployeeUploadPicture") + { + + } + else + { + + }
@@ -263,9 +269,6 @@
-@* *@ - - diff --git a/ServiceHost/Areas/Client/Pages/Company/Employees/EmployeeList.cshtml b/ServiceHost/Areas/Client/Pages/Company/Employees/EmployeeList.cshtml index 16975077..412b0ed7 100644 --- a/ServiceHost/Areas/Client/Pages/Company/Employees/EmployeeList.cshtml +++ b/ServiceHost/Areas/Client/Pages/Company/Employees/EmployeeList.cshtml @@ -202,7 +202,7 @@
@@ -247,7 +247,7 @@ - افزودن ترک کار گروهی + افزودن ترک کار
@@ -377,9 +377,10 @@
- @section Script { + +