using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using _0_Framework.InfraStructure; using Company.Domain.ClassificationSchemeAgg; using CompanyManagment.App.Contracts.ClassificationScheme; using Microsoft.EntityFrameworkCore; namespace CompanyManagment.EFCore.Repository; public class ClassificationGroupRepository : RepositoryBase, IClassificationGroupRepository { private readonly CompanyContext _context; public ClassificationGroupRepository(CompanyContext context) : base(context) { _context = context; } /// /// دریافت گروه های طرح /// /// /// public async Task> GetGroups(long schemeId) { return await _context.ClassificationGroups .Where(x => x.ClassificationSchemeId == schemeId) .Select(x=> new ClassificationGroupList { GroupId = x.id, GroupNo = x.GroupNo, GroupNoInt = Convert.ToInt32(x.GroupNo) }).OrderBy(x=>x.GroupNoInt).ToListAsync(); } /// /// دریافت گروه ها و مشاغلشان برای تب تعیین مشاغل /// /// /// public async Task> GetGroupAndJobs(long schemeId) { return await _context.ClassificationGroups.Where(x => x.ClassificationSchemeId == schemeId) .Include(x => x.ClassificationGroupJobs).Select(x => new ClassificationGroupAndJobModel { GroupId = x.id, GroupNo = x.GroupNo, GroupNoInt = Convert.ToInt32(x.GroupNo), WorkshopId = x.WorkshopId, ClassificationSchemeId = x.ClassificationSchemeId, EditClassificationGroupJob = x.ClassificationGroupJobs.Select(jobs => new EditClassificationGroupJob() { Id = jobs.id, JobId = jobs.JobId, JobName = jobs.JobName, JobCode = jobs.JobCode, ClassificationGroupId = jobs.ClassificationGroupId, GroupNo = jobs.GroupNo, }).ToList(), }).OrderBy(x=>x.GroupNoInt).ToListAsync(); } /// /// دریافت مشاغل گروه توسط آی دی گروه /// /// /// public async Task> GetGroupJobs(long groupId) { return await _context.ClassificationGroupJobs .Where(x => x.ClassificationGroupId == groupId).Select(jobs => new EditClassificationGroupJob() { Id = jobs.id, JobId = jobs.JobId, JobName = jobs.JobName, JobCode = jobs.JobCode, ClassificationGroupId = jobs.ClassificationGroupId, GroupNo = jobs.GroupNo, }).ToListAsync(); } /// /// چک میکند که آی پرسنلی وجود دارد که این شغل به او نسبت داده شده /// /// /// /// public async Task CheckEmployeeHasThisJob(long id, long groupId) { return await _context.ClassificationEmployees.AnyAsync(x => x.ClassificationGroupJobId == id && x.ClassificationGroupId == groupId); } /// /// ایجاد مشاغل /// /// /// /// public async Task CreateJobs(List createClassificationGroupJob, List deleteJobList) { if (createClassificationGroupJob.Count > 0) { await _context.ClassificationGroupJobs.AddRangeAsync(createClassificationGroupJob); await _context.SaveChangesAsync(); } if (deleteJobList.Count > 0) { var deleteItems = _context.ClassificationGroupJobs.Where(x => deleteJobList.Contains(x.id)); _context.ClassificationGroupJobs.RemoveRange(deleteItems); await _context.SaveChangesAsync(); } return true; } /// /// در یافت اطلاعات گروه برای لود مودال ایجاد دستمزد های /// /// public async Task GetGroupToCreateSalariesModal(long schemeId) { var result = new SalaryAndRialCoefficientModel(); var scheme =await _context.ClassificationSchemes.FirstOrDefaultAsync(x => x.id == schemeId); var groups =await _context.ClassificationGroups.Where(x => x.ClassificationSchemeId == schemeId).ToListAsync(); if (scheme != null) { result.TypeOfCoefficient = scheme.TypeOfCoefficient; result.SchemeId = schemeId; result.SalariesAndCoefficientList = groups.Select(x => new EditClassificationGroupSalaryAndRialCoefficient { ClassificationGroupId = x.id, GroupNo = x.GroupNo, }).ToList(); } return result; } /// /// ایجاد گروه های بیست گانه /// /// /// public async Task CreateGroups(List groupList) { await _context.AddRangeAsync(groupList); await _context.SaveChangesAsync(); } #region ForApi public async Task> GetGroupList(long schemeId) { return await _context.ClassificationGroups.Where(x => x.ClassificationSchemeId == schemeId) .Include(x => x.ClassificationGroupJobs).Select(x => new GetGroupAndJobSchemeListDto { GroupId = x.id, GroupNoInt = Convert.ToInt32(x.GroupNo), HasAnyJob = x.ClassificationGroupJobs.Any() }).OrderBy(x => x.GroupNoInt).ToListAsync(); } public async Task GetCreateOrEditJobsData(long groupId) { var result = await _context.ClassificationGroups.Where(x => x.id == groupId) .Include(x => x.ClassificationGroupJobs).FirstOrDefaultAsync(); if (result == null) return new AddOrEditJobInGroupDto(); return new AddOrEditJobInGroupDto() { GroupId = result.id, GroupNoInt = Convert.ToInt32(result.GroupNo), AddJobListDto = result.ClassificationGroupJobs.Select(job => new AddJobListDto { JobId = job.JobId, JobName = $"{job.JobName} - {job.JobCode}" }).ToList(), }; } /// /// چک میکند که آی پرسنلی وجود دارد که این شغل به او نسبت داده شده /// /// /// /// public async Task CheckIfEmployeeHasThisJob(long jobId, long groupId) { var result = await _context.ClassificationGroups.Where(x => x.id == groupId) .Include(x => x.ClassificationGroupJobs).FirstOrDefaultAsync(); var job = result.ClassificationGroupJobs.FirstOrDefault(x => x.JobId == jobId); if (job == null) return false; var id = job.id; return await _context.ClassificationEmployees.AnyAsync(x => 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 }