diff --git a/0_Framework/Domain/IRepository.cs b/0_Framework/Domain/IRepository.cs index 209a5f29..0e7bd2ce 100644 --- a/0_Framework/Domain/IRepository.cs +++ b/0_Framework/Domain/IRepository.cs @@ -11,7 +11,8 @@ namespace _0_Framework.Domain; public interface IRepository where T:class { T Get(TKey id); - List Get(); + List Get(); + Task> GetListByIdList(List ids); void Create(T entity); Task CreateAsync(T entity); bool ExistsIgnoreQueryFilter(Expression> expression); diff --git a/0_Framework/InfraStructure/RepositoryBase.cs b/0_Framework/InfraStructure/RepositoryBase.cs index 8f8a9fac..9f3de438 100644 --- a/0_Framework/InfraStructure/RepositoryBase.cs +++ b/0_Framework/InfraStructure/RepositoryBase.cs @@ -53,6 +53,11 @@ namespace _0_Framework.InfraStructure { return _context.Set().ToList(); } + + public async Task> GetListByIdList(List ids) + { + return await _context.Set().Where(e => ids.Contains(EF.Property(e, "id"))).ToListAsync(); + } public void Remove(T entity) { _context.Set().Remove(entity); diff --git a/Company.Domain/ClassificationSchemeAgg/ClassificationEmployee.cs b/Company.Domain/ClassificationSchemeAgg/ClassificationEmployee.cs index dd18ad0b..b4f5add6 100644 --- a/Company.Domain/ClassificationSchemeAgg/ClassificationEmployee.cs +++ b/Company.Domain/ClassificationSchemeAgg/ClassificationEmployee.cs @@ -15,7 +15,7 @@ public class ClassificationEmployee : EntityBase /// /// /// - public ClassificationEmployee(long workshopId, long employeeId, long classificationSchemeId, long classificationGroupId, long classificationGroupJobId, DateTime? startGroupDate, DateTime? endGroupDate) + public ClassificationEmployee(long workshopId, long employeeId, long classificationSchemeId, long classificationGroupId, long classificationGroupJobId, DateTime? startGroupDate) { WorkshopId = workshopId; EmployeeId = employeeId; @@ -23,7 +23,7 @@ public class ClassificationEmployee : EntityBase ClassificationGroupId = classificationGroupId; ClassificationGroupJobId = classificationGroupJobId; StartGroupDate = startGroupDate; - EndGroupDate = endGroupDate; + } /// @@ -82,13 +82,12 @@ public class ClassificationEmployee : EntityBase /// /// /// - public void EditMultipleGroupMember(long classificationGroupId, long classificationGroupJobId, DateTime startGroupDate, DateTime? endGroupDate) + public void EditMultipleGroupMember(long classificationGroupId, long classificationGroupJobId, DateTime startGroupDate) { ClassificationGroupId = classificationGroupId; ClassificationGroupJobId = classificationGroupJobId; StartGroupDate = startGroupDate; - if (endGroupDate.HasValue) - EndGroupDate = endGroupDate; + } } \ No newline at end of file diff --git a/Company.Domain/ClassificationSchemeAgg/IClassificationEmployeeRepository.cs b/Company.Domain/ClassificationSchemeAgg/IClassificationEmployeeRepository.cs index f8a53b0d..4db0dc93 100644 --- a/Company.Domain/ClassificationSchemeAgg/IClassificationEmployeeRepository.cs +++ b/Company.Domain/ClassificationSchemeAgg/IClassificationEmployeeRepository.cs @@ -30,4 +30,13 @@ public interface IClassificationEmployeeRepository : IRepository /// Task CreateTransferRange(List command); + + + /// + /// حذف پرسنل از گروه از سمت ویرایش + /// + /// + /// + Task RemoveRangeByEdit(List command); + } \ No newline at end of file diff --git a/CompanyManagment.Application/ClassificationSchemeApplication.cs b/CompanyManagment.Application/ClassificationSchemeApplication.cs index 7cfbc9c5..2c34b5bd 100644 --- a/CompanyManagment.Application/ClassificationSchemeApplication.cs +++ b/CompanyManagment.Application/ClassificationSchemeApplication.cs @@ -353,7 +353,7 @@ public class ClassificationSchemeApplication : IClassificationSchemeApplication var create = new ClassificationEmployee(scheme.WorkshopId, command.EmployeeId, command.SchemeId, - command.GroupId, command.JobId, scheme.ExecutionDateGr, null); + command.GroupId, command.JobId, scheme.ExecutionDateGr); await _classificationEmployeeRepository.CreateAsync(create); await _classificationEmployeeRepository.SaveChangesAsync(); @@ -388,6 +388,7 @@ public class ClassificationSchemeApplication : IClassificationSchemeApplication if (command.Count < 1) return op.Failed("هیچ انتقالی ایجاد نشده است"); var oldGroupsMemberize = await _classificationEmployeeRepository.GetEmployeeMemberizeData(command[0].EmployeeId); + var scheme = await _classificationSchemeRepository.GetClassificationScheme(oldGroupsMemberize[0].SchemeId); var newStartDateList = new List(); foreach (var item in command) { @@ -405,13 +406,17 @@ public class ClassificationSchemeApplication : IClassificationSchemeApplication return op.Failed(startDateFaild); } + if (item.StartGroupDateFa.Substring(8, 2) != "01") + return op.Failed("تاریخ شروع فقط می تواند یکم هر ماه باشد"); + if (newStartDateList.Any(x => x == startDate)) - return op.Failed(" تاریخ انتقال وارد شده با تاریخ های قبل تداخل دارد"); + return op.Failed($"تاریخ انتقال {item.StartGroupDateFa} با تاریخ های قبل تداخل دارد"); newStartDateList.Add(startDate); - if (oldGroupsMemberize.Any(x => x.StartGroupDate >= startDate)) - return op.Failed(" تاریخ انتقال وارد شده با تاریخ های قبل تداخل دارد"); - + if (oldGroupsMemberize.Any(x => x.StartGroupDate == startDate)) + return op.Failed($"تاریخ انتقال {item.StartGroupDateFa} با تاریخ های قبل تداخل دارد"); + if (startDate < scheme.ExecutionDateGr) + return op.Failed($"تاریخ انتقال {item.StartGroupDateFa} کوچکتر از تاریخ شروع طرح : {scheme.ExecutionDateFa} است"); #endregion } @@ -423,10 +428,10 @@ public class ClassificationSchemeApplication : IClassificationSchemeApplication var edit = _classificationEmployeeRepository.Get(lastRecord.Id); var firstNewRcord = newStartDateList.MinBy(x => x); - edit.EditMultipleGroupMember(lastRecord.ClassificationGroupId, lastRecord.ClassificationGroupJobId, lastRecord.StartGroupDate.Value, firstNewRcord.AddDays(-1)); + edit.EditMultipleGroupMember(lastRecord.ClassificationGroupId, lastRecord.ClassificationGroupJobId, lastRecord.StartGroupDate.Value); } - var scheme = _classificationSchemeRepository.GetClassificationScheme(command[0].SchemeId).GetAwaiter().GetResult(); + newStartDateList = newStartDateList.OrderByDescending(x => x).ToList(); @@ -435,7 +440,7 @@ public class ClassificationSchemeApplication : IClassificationSchemeApplication var c = command.FirstOrDefault(x => x.StartGroupDateFa == lastNewRecord.ToFarsi()); var create = new ClassificationEmployee(scheme.WorkshopId, c.EmployeeId, c.SchemeId, - c.ClassificationGroupId, c.ClassificationGroupJobId, lastNewRecord.Date, null); + c.ClassificationGroupId, c.ClassificationGroupJobId, lastNewRecord.Date); await _classificationEmployeeRepository.CreateAsync(create); newStartDateList.Remove(lastNewRecord); var createList = new List(); @@ -443,7 +448,7 @@ public class ClassificationSchemeApplication : IClassificationSchemeApplication { var commandEdit = command.FirstOrDefault(x => x.StartGroupDateFa == item.ToFarsi()); var createCommand = new ClassificationEmployee(scheme.WorkshopId, commandEdit.EmployeeId, commandEdit.SchemeId, - commandEdit.ClassificationGroupId, commandEdit.ClassificationGroupJobId, item, lastNewRecord.AddDays(-1)); + commandEdit.ClassificationGroupId, commandEdit.ClassificationGroupJobId, item); createList.Add(createCommand); lastNewRecord = item; } @@ -466,6 +471,11 @@ public class ClassificationSchemeApplication : IClassificationSchemeApplication public async Task EditMultipleGroupMember(List command) { var op = new OperationResult(); + var zeroItem = command.First(x => x.Id == 0); + var oldGroupsMemberize = await _classificationEmployeeRepository.GetEmployeeMemberizeData(zeroItem.EmployeeId); + var scheme = await _classificationSchemeRepository.GetClassificationScheme(zeroItem.SchemeId); + command = command.Where(x=>x.Id != 0).ToList(); + var newStartDateList = new List(); foreach (var item in command) { #region Validation @@ -481,16 +491,15 @@ public class ClassificationSchemeApplication : IClassificationSchemeApplication string startDateFaild = "تاریخ شروع" + " " + item.StartGroupDateFa + " " + "صحیح نمیباشد"; return op.Failed(startDateFaild); } + if (item.StartGroupDateFa.Substring(8, 2) != "01") + return op.Failed("تاریخ شروع فقط می تواند یکم هر ماه باشد"); - if (!string.IsNullOrWhiteSpace(item.EndGroupDateFa)) - { - if (!item.EndGroupDateFa.TryToGeorgianDateTime(out var endDate)) - { - string endDateFaild = "تاریخ پایان" + item.EndGroupDateFa + "صحیح نمیباشد"; - return op.Failed(endDateFaild); - } - } + if (oldGroupsMemberize.Any(x=>x.StartGroupDate == startDate && x.Id != item.Id)) + return op.Failed($"تاریخ {item.StartGroupDateFa} با تاریخ های قبل یا بعد از خود تداخل دارد"); + if (startDate < scheme.ExecutionDateGr) + return op.Failed($"تاریخ انتقال {item.StartGroupDateFa} کوچکتر از تاریخ شروع طرح : {scheme.ExecutionDateFa} است"); + newStartDateList.Add(startDate); #endregion } @@ -499,13 +508,23 @@ public class ClassificationSchemeApplication : IClassificationSchemeApplication var edit = _classificationEmployeeRepository.Get(item.Id); - edit.EditMultipleGroupMember(item.ClassificationGroupId, item.ClassificationGroupJobId, item.StartGroupDateFa.ToGeorgianDateTime(), null); + edit.EditMultipleGroupMember(item.ClassificationGroupId, item.ClassificationGroupJobId, item.StartGroupDateFa.ToGeorgianDateTime()); - await _classificationEmployeeRepository.SaveChangesAsync(); + } + var removeItemIdList = command.Select(x => x.Id).ToList(); + var toBeRemove = removeItemIdList.Any() ? oldGroupsMemberize.Where(x=> !removeItemIdList.Contains(x.Id)).Select(x=>x.Id).ToList() : oldGroupsMemberize.Select(x=>x.Id).ToList(); + if (toBeRemove.Any()) + { + var getRemoveList =await _classificationEmployeeRepository.GetListByIdList(toBeRemove); + + await _classificationEmployeeRepository.RemoveRangeByEdit(getRemoveList); + } + + await _classificationEmployeeRepository.SaveChangesAsync(); return op.Succcedded(); } diff --git a/CompanyManagment.EFCore/Repository/ClassificationEmployeeRepository.cs b/CompanyManagment.EFCore/Repository/ClassificationEmployeeRepository.cs index b9341002..70605d41 100644 --- a/CompanyManagment.EFCore/Repository/ClassificationEmployeeRepository.cs +++ b/CompanyManagment.EFCore/Repository/ClassificationEmployeeRepository.cs @@ -189,6 +189,7 @@ public class ClassificationEmployeeRepository : RepositoryBasex.StartGroupDate).ToListAsync(); } @@ -207,4 +208,15 @@ public class ClassificationEmployeeRepository : RepositoryBase + /// حذف پرسنل از گروه از سمت ویرایش + /// + /// + /// + public async Task RemoveRangeByEdit(List command) + { + _context.RemoveRange(command); + + } } \ No newline at end of file diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/ClassificationScheme.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Workshops/ClassificationScheme.cshtml index cd40d5ab..4b958fde 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/ClassificationScheme.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/ClassificationScheme.cshtml @@ -22,15 +22,20 @@ .date-input { text-align: center; } + + button.rounded-pill { + border-radius: 5px !important; + } + }
-
+
-

تنظیمات طرح طبقه بندی مشاغل > @Model.WorkshopName

+

تنظیمات طرح طبقه بندی مشاغل > @Model.WorkshopName

بازگشت diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/ClassificationScheme.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Workshops/ClassificationScheme.cshtml.cs index 14aa1485..bd249276 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/ClassificationScheme.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/ClassificationScheme.cshtml.cs @@ -418,25 +418,25 @@ public class ClassificationSchemeModel : PageModel var groups = _classificationSchemeApplication.GetGroups(schemeId).GetAwaiter().GetResult(); var employeeMemberizeData = _classificationSchemeApplication.GetEmployeeMemberizeData(employeeId).GetAwaiter().GetResult(); - //اگر یک گروه داشت - if (!employeeMemberizeData.HasMultipleGroup) - { - var model = new AddEmployeeToGroup(); + ////اگر یک گروه داشت + //if (!employeeMemberizeData.HasMultipleGroup) + //{ + // var model = new AddEmployeeToGroup(); - model.SchemeId = schemeId; - model.EmployeeId = employeeId; - model.EmployeeFullName = employeeFullName; + // model.SchemeId = schemeId; + // model.EmployeeId = employeeId; + // model.EmployeeFullName = employeeFullName; - if (!employeeMemberizeData.EditEmployeeGroupLists.Any()) - return Partial("_ClassificationPartials/EditGroupMember", model); + // if (!employeeMemberizeData.EditEmployeeGroupLists.Any()) + // return Partial("_ClassificationPartials/EditGroupMember", model); - model.ClassificationGroupList = groups; - model.GroupId = employeeMemberizeData.EditEmployeeGroupLists.FirstOrDefault()!.ClassificationGroupId; - model.JobId = employeeMemberizeData.EditEmployeeGroupLists.FirstOrDefault()!.ClassificationGroupJobId; - model.Id = employeeMemberizeData.EditEmployeeGroupLists.FirstOrDefault()!.Id; ; - return Partial("_ClassificationPartials/EditGroupMember", model); - } + // model.ClassificationGroupList = groups; + // model.GroupId = employeeMemberizeData.EditEmployeeGroupLists.FirstOrDefault()!.ClassificationGroupId; + // model.JobId = employeeMemberizeData.EditEmployeeGroupLists.FirstOrDefault()!.ClassificationGroupJobId; + // model.Id = employeeMemberizeData.EditEmployeeGroupLists.FirstOrDefault()!.Id; ; + // return Partial("_ClassificationPartials/EditGroupMember", model); + //} //اگر چند گروه داشت var multipleModel = new EditEmployeeGroup(); multipleModel.EmployeeId = employeeId; @@ -456,24 +456,24 @@ public class ClassificationSchemeModel : PageModel /// /// /// - public IActionResult OnPostEditGroupMember(AddEmployeeToGroup command) - { + //public IActionResult OnPostEditGroupMember(AddEmployeeToGroup command) + //{ - var result = _classificationSchemeApplication.EditGroupMember(command).GetAwaiter().GetResult(); - if (!result.IsSuccedded) - { - return new JsonResult(new - { - isSuccess = false, - message = result.Message, - }); - } - return new JsonResult(new - { - isSuccess = true, - message = result.Message, - }); - } + // var result = _classificationSchemeApplication.EditGroupMember(command).GetAwaiter().GetResult(); + // if (!result.IsSuccedded) + // { + // return new JsonResult(new + // { + // isSuccess = false, + // message = result.Message, + // }); + // } + // return new JsonResult(new + // { + // isSuccess = true, + // message = result.Message, + // }); + //} /// /// ذخیره ویرایش گروه های چندگانه پرسنل diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/_ClassificationPartials/ClassificationEmployeesTab.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Workshops/_ClassificationPartials/ClassificationEmployeesTab.cshtml index 1afd8e9c..fea83f66 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/_ClassificationPartials/ClassificationEmployeesTab.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/_ClassificationPartials/ClassificationEmployeesTab.cshtml @@ -619,8 +619,8 @@ if (item.hasGroup) { DataTableHtml += ` - - + + ویرایش @@ -630,8 +630,8 @@ `; DataTableHtml += ` - - + + انتقال @@ -644,8 +644,8 @@ else { DataTableHtml += ` - - + + افزودن به گروه diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/_ClassificationPartials/ClassificationSchemeTab.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Workshops/_ClassificationPartials/ClassificationSchemeTab.cshtml index 0bd9f1ff..a50fa577 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/_ClassificationPartials/ClassificationSchemeTab.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/_ClassificationPartials/ClassificationSchemeTab.cshtml @@ -93,8 +93,8 @@ }
- + diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/_ClassificationPartials/EditGroupMember.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Workshops/_ClassificationPartials/EditGroupMember.cshtml deleted file mode 100644 index 8c8ceb79..00000000 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/_ClassificationPartials/EditGroupMember.cshtml +++ /dev/null @@ -1,233 +0,0 @@ -@model CompanyManagment.App.Contracts.ClassificationScheme.AddEmployeeToGroup -@Html.AntiForgeryToken() -@{ - - -} - - - - - - - - - - - - - - diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/_ClassificationPartials/EditMultipleGroupMember.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Workshops/_ClassificationPartials/EditMultipleGroupMember.cshtml index 35113bc9..3386a5db 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/_ClassificationPartials/EditMultipleGroupMember.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/_ClassificationPartials/EditMultipleGroupMember.cshtml @@ -22,6 +22,15 @@ width: 276px; left: 47%; } + + .icon-sapan-delete { + display: inline-block; + text-align: center; + vertical-align: middle; + line-height: 2px; + border-radius: 5px; + padding: 7px; + } } @@ -50,7 +59,7 @@ @foreach (var groupItem in @Model.EditEmployeeGroupLists) { -
+
@@ -70,13 +79,30 @@
-
@@ -139,7 +165,10 @@ }); - + function removeTr(selectElement){ + $(selectElement).closest('.tr-transfer').remove(); + + } @@ -228,6 +257,12 @@ }); if(!groupOrJobEmpty){ + const editEmployeeGroupList = { + id: 0, + employeeId: '@Model.EmployeeId', + schemeId: '@Model.SchemeId', + }; + command.push(editEmployeeGroupList); var urlAjaxToSave = '@Url.Page("/Company/Workshops/ClassificationScheme", "EditMultipleGroupMember")'; $.ajax({ diff --git a/ServiceHost/Areas/Admin/Pages/Company/Workshops/_ClassificationPartials/TransferEmployeeGroup.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Workshops/_ClassificationPartials/TransferEmployeeGroup.cshtml index 6544aed9..15917d1a 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Workshops/_ClassificationPartials/TransferEmployeeGroup.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Workshops/_ClassificationPartials/TransferEmployeeGroup.cshtml @@ -174,7 +174,7 @@ let appendData = ''; - appendData += `
`; + appendData += `
`; appendData += `
`; appendData += `
+
- -
- - -
`; + `; $('#transfer').append(appendData); } + function removeTr(selectElement){ + $(selectElement).closest('.tr-transfer').remove(); + + } function selectGroup(selectElement) { let schemeId = '@Model.SchemeId'; @@ -260,7 +261,7 @@ const command = []; let rowValid = true; - $('.tr-tranfer').each(function () { + $('.tr-transfer').each(function () { const $row = $(this); const groupId = $row.find('select[name="classificationGroupId"]').val();