using System; using System.Collections.Generic; using System.Linq; using _0_Framework.Application; using _0_Framework.InfraStructure; using Company.Domain.InsuranceJobAndJobsAgg; using Company.Domain.InsuranceJobItemAgg; using Company.Domain.InsurancJobAgg; using Company.Domain.PercentageAgg; using CompanyManagment.App.Contracts.InsuranceJob; namespace CompanyManagment.EFCore.Repository; public class InsuranceJobRepository : RepositoryBase, IInsuranceJobRepositpry { private readonly CompanyContext _context; private readonly IInsuranceJobItemRepositpry _insuranceJobItemRepositpry; private readonly IPercentageRepository _percentageRepository; public InsuranceJobRepository(CompanyContext context, IInsuranceJobItemRepositpry insuranceJobItemRepositpry , IPercentageRepository percentageRepository) : base(context) { _context = context; _insuranceJobItemRepositpry = insuranceJobItemRepositpry; _percentageRepository = percentageRepository; } public EditInsuranceJob GetDetails(long id) { var insuranceJob = new EditInsuranceJob(); var details = Get(id); insuranceJob.Id = id; insuranceJob.Year = details.Year; insuranceJob.EconomicCode = details.EconomicCode; insuranceJob.InsuranceJobTitle = details.InsuranceJobTitle; insuranceJob.InsuranceJobItems = _insuranceJobItemRepositpry.GetInsuranceJobItemByInsuranceJobId(id); return insuranceJob; } public List GetInsurancJob() { var list = _context.InsuranceJobs.Select(x => new InsuranceJobViewModel { Id = x.id, InsuranceJobTitle = x.InsuranceJobTitle, EconomicCode = x.EconomicCode }).ToList(); return list; } public List Search(InsuranceJobSearchModel searchModel) { var query = _context.InsuranceJobs.Select(x => new InsuranceJobViewModel { Id = x.id, InsuranceJobTitle = x.InsuranceJobTitle, EconomicCode = x.EconomicCode }); if (!string.IsNullOrWhiteSpace(searchModel.EconomicCode)) query = query.Where(x => x.EconomicCode.Contains(searchModel.EconomicCode)); if (!string.IsNullOrWhiteSpace(searchModel.InsuranceJobTitle)) query = query.Where(x => x.InsuranceJobTitle.Contains(searchModel.InsuranceJobTitle)); return query.OrderByDescending(x => x.Id).ToList(); } public OperationResult CreateInsuranceJob(CreateInsuranceJob command) { OperationResult result = new OperationResult(); using (var transaction = _context.Database.BeginTransaction()) { try { var insuranceJobObj = new InsuranceJob(command.InsuranceJobTitle, command.YearlySalaryId, command.EconomicCode, command.Year); Create(insuranceJobObj); SaveChanges(); foreach (var item in command.InsuranceJobItems) { item.PercentageLessThan = item.PercentageLessThan; item.PercentageMoreThan = item.PercentageMoreThan; item.InsuranceJobId = insuranceJobObj.id; _insuranceJobItemRepositpry.CreateInsuranceJobItem(item); if (!_percentageRepository.Exists(x => x.Percent == item.PercentageLessThan)) { var percentage = new Percentage(item.PercentageLessThan); _percentageRepository.Create(percentage); } if (!_percentageRepository.Exists(x => x.Percent == item.PercentageMoreThan)) { var percentage2 = new Percentage(item.PercentageMoreThan); _percentageRepository.Create(percentage2); } _percentageRepository.SaveChanges(); } // SaveChanges(); transaction.Commit(); result.IsSuccedded = true; result.Message = "ثبت اطلاعات با موفقیت انجام شد"; } catch (Exception ex) { transaction.Rollback(); result.Failed("ثبت اطلاعات با خطا مواجه شد"); } } return result; } public OperationResult Remove(long id) { OperationResult result = new OperationResult(); using (var transaction = _context.Database.BeginTransaction()) { try { var insuranceJobItems = _context.InsuranceJobItems.Where(x=>x.InsuranceJobId==id).ToList(); _context.InsuranceJobItems.RemoveRange(insuranceJobItems); var insuranceJobObj = Get(id); _context.InsuranceJobs.Remove(insuranceJobObj); _context.SaveChanges(); transaction.Commit(); result.IsSuccedded = true; result.Message = "حذف اطلاعات با موفقیت انجام شد"; } catch (Exception ex) { transaction.Rollback(); result.Failed("ثبت اطلاعات با خطا مواجه شد"); } } return result; } public OperationResult EditInsuranceJob(EditInsuranceJob command) { OperationResult result = new OperationResult(); using (var transaction = _context.Database.BeginTransaction()) { try { var insuranceJob = Get(command.Id); insuranceJob.Edit(command.InsuranceJobTitle, command.YearlySalaryId, command.EconomicCode, command.Year); var insuranceJobItemsIds = _context.InsuranceJobItems.Where(x => x.InsuranceJobId == command.Id).Select(x=>x.id).ToList(); //List deleteIds = new List(); foreach (var item in command.InsuranceJobItems) { long deleteId = insuranceJobItemsIds.Where(x => x==item.Id).FirstOrDefault(); if (deleteId !=0) { insuranceJobItemsIds.Remove(deleteId);} if (item.Id == 0) { item.PercentageLessThan = item.PercentageLessThan; item.PercentageMoreThan = item.PercentageMoreThan; item.InsuranceJobId = command.Id; _insuranceJobItemRepositpry.CreateInsuranceJobItem(item); } else { var insuranceJobItem = _insuranceJobItemRepositpry.Get(item.Id); insuranceJobItem.Edit(item.PercentageLessThan, item.SalaeyLessThan, item.PercentageMoreThan, item.SalaryMoreThan, command.Id); #region JobAndJob var jobAndJobList = _context.InsuranceJobAndJobsSet .Where(x => x.InsuranceJobItemId == item.Id).ToList(); _context.InsuranceJobAndJobsSet.RemoveRange(jobAndJobList); List insuranceJobAndJobsList = new List(); foreach (var item2 in item.JobIds) { var insuranceJobAndJobsObj = new InsuranceJobAndJobs(); insuranceJobAndJobsObj.JobId = item2; insuranceJobAndJobsObj.InsuranceJobItemId = item.Id; insuranceJobAndJobsList.Add(insuranceJobAndJobsObj); } _context.InsuranceJobAndJobsSet.AddRange(insuranceJobAndJobsList); #endregion } #region Percentage if (!_percentageRepository.Exists(x => x.Percent == item.PercentageLessThan)) { var percentage = new Percentage(item.PercentageLessThan); _percentageRepository.Create(percentage); } if (!_percentageRepository.Exists(x => x.Percent == item.PercentageMoreThan)) { var percentage2 = new Percentage(item.PercentageMoreThan); _percentageRepository.Create(percentage2); } _percentageRepository.SaveChanges(); #endregion } #region removeJobItems var deleteList = _context.InsuranceJobItems.Where(x => insuranceJobItemsIds.Contains(x.id)).ToList(); _context.InsuranceJobItems.RemoveRange(deleteList); #endregion _context.SaveChanges(); transaction.Commit(); result.IsSuccedded = true; result.Message = "ثبت اطلاعات با موفقیت انجام شد"; } catch (Exception ex) { transaction.Rollback(); result.Failed("ثبت اطلاعات با خطا مواجه شد"); } } return result; } }