diff --git a/Company.Domain/ClassificationSchemeAgg/IClassificationGroupRepository.cs b/Company.Domain/ClassificationSchemeAgg/IClassificationGroupRepository.cs index 8da1913a..5b76bab5 100644 --- a/Company.Domain/ClassificationSchemeAgg/IClassificationGroupRepository.cs +++ b/Company.Domain/ClassificationSchemeAgg/IClassificationGroupRepository.cs @@ -44,11 +44,18 @@ public interface IClassificationGroupRepository : IRepository CheckIfEmployeeHasThisJob(long jobId, long groupId); /// - /// دریافت مشاغل گروه توسط آی دی گروه + /// ذخیر ایجاد یا ویرایش مشاغل در گروه /// - /// + /// /// - Task> GetGroupJobs(long groupId); + Task SaveJobsToGroup(AddOrEditJobInGroupDto command); + + /// + /// دریافت مشاغل گروه توسط آی دی گروه + /// + /// + /// + Task> GetGroupJobs(long groupId); /// /// چک میکند که آی پرسنلی وجود دارد که این شغل به او نسبت داده شده diff --git a/CompanyManagment.App.Contracts/ClassificationScheme/IClassificationSchemeApplication.cs b/CompanyManagment.App.Contracts/ClassificationScheme/IClassificationSchemeApplication.cs index f4da7501..4fc1d1a0 100644 --- a/CompanyManagment.App.Contracts/ClassificationScheme/IClassificationSchemeApplication.cs +++ b/CompanyManagment.App.Contracts/ClassificationScheme/IClassificationSchemeApplication.cs @@ -225,6 +225,13 @@ public interface IClassificationSchemeApplication /// Task CheckIfEmployeeHasThisJob(long jobId, long groupId); + + /// + /// ذخیر ایجاد یا ویرایش مشاغل در گروه + /// + /// + /// + Task SaveJobsToGroup(AddOrEditJobInGroupDto command); #endregion } \ No newline at end of file diff --git a/CompanyManagment.Application/ClassificationSchemeApplication.cs b/CompanyManagment.Application/ClassificationSchemeApplication.cs index 52184360..137594a8 100644 --- a/CompanyManagment.Application/ClassificationSchemeApplication.cs +++ b/CompanyManagment.Application/ClassificationSchemeApplication.cs @@ -633,4 +633,14 @@ public class ClassificationSchemeApplication : IClassificationSchemeApplication return op.Succcedded(-1, "حذف با موفقیت انجام شد"); } + + public async Task SaveJobsToGroup(AddOrEditJobInGroupDto command) + { + var op = new OperationResult(); + var res= await _classificationGroupRepository.SaveJobsToGroup(command); + if (!res) + return op.Failed("خطا در انجام عملیات"); + + return op.Succcedded(); + } } \ No newline at end of file diff --git a/CompanyManagment.EFCore/Repository/ClassificationGroupRepository.cs b/CompanyManagment.EFCore/Repository/ClassificationGroupRepository.cs index 74c37171..4965d132 100644 --- a/CompanyManagment.EFCore/Repository/ClassificationGroupRepository.cs +++ b/CompanyManagment.EFCore/Repository/ClassificationGroupRepository.cs @@ -224,5 +224,73 @@ public class ClassificationGroupRepository : RepositoryBase x.ClassificationGroupJobId == id && x.ClassificationGroupId == groupId); } + + + public async Task SaveJobsToGroup(AddOrEditJobInGroupDto command) + { + var newJoblist = new List(); + var alreadyExitjobs = new List(); + var alreadyAdded = await _context.ClassificationGroups.Where(x => x.id == command.GroupId) + .Include(x => x.ClassificationGroupJobs).FirstOrDefaultAsync(); + if (command.AddJobListDto.Count > 0) + { + var addedJobsIds = command.AddJobListDto.Where(x => x.JobId > 0).Select(x => x.JobId).ToList(); + var getJobs = _context.Jobs.Where(x => addedJobsIds.Contains(x.id)); + + foreach (var item in getJobs) + { + + var newJob = new ClassificationGroupJob(item.id, item.JobName, item.JobCode, command.GroupId, + $"{command.GroupNoInt}"); + + if (alreadyAdded.ClassificationGroupJobs.Any(x => x.JobId == item.id)) + { + alreadyExitjobs.Add(newJob); + } + else + { + newJoblist.Add(newJob); + } + + } + } + + + if (alreadyAdded.ClassificationGroupJobs.Count == 0) + { + + if (command.AddJobListDto.Count > 0) + { + + await _context.ClassificationGroupJobs.AddRangeAsync(newJoblist); + await _context.SaveChangesAsync(); + } + } + else + { + + + + var alreadyExitJobsIds = alreadyExitjobs.Select(x => x.JobId).ToList(); + + var toBeRemove = alreadyAdded.ClassificationGroupJobs.Where(x => !alreadyExitJobsIds.Contains(x.JobId)) + .ToList(); + if (toBeRemove.Count > 0) + { + _context.ClassificationGroupJobs.RemoveRange(toBeRemove); + await _context.SaveChangesAsync(); + } + + + if (newJoblist.Count > 0) + { + await _context.ClassificationGroupJobs.AddRangeAsync(newJoblist); + await _context.SaveChangesAsync(); + } + + } + + return true; + } #endregion } \ No newline at end of file diff --git a/ServiceHost/Areas/Admin/Controllers/ClassificationSchemeController.cs b/ServiceHost/Areas/Admin/Controllers/ClassificationSchemeController.cs index 3fd584eb..9d31c410 100644 --- a/ServiceHost/Areas/Admin/Controllers/ClassificationSchemeController.cs +++ b/ServiceHost/Areas/Admin/Controllers/ClassificationSchemeController.cs @@ -149,6 +149,16 @@ public class ClassificationSchemeController : AdminBaseController return result; } - + /// + /// ذخیره افزودن یا ویرایش مشاغل گروه + /// + /// + /// + [HttpPost("SaveJobsToGroup")] + public async Task> SaveJobsToGroup(AddOrEditJobInGroupDto command) + { + var result = await _classificationSchemeApplication.SaveJobsToGroup(command); + return result; + } #endregion } \ No newline at end of file