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 CompanyManagment.App.Contracts.DateSalaryItem; using CompanyManagment.App.Contracts.InsuranceJobItem; using CompanyManagment.App.Contracts.Job; using Microsoft.EntityFrameworkCore; namespace CompanyManagment.EFCore.Repository; public class InsuranceJobItemRepository : RepositoryBase, IInsuranceJobItemRepositpry { private readonly CompanyContext _context; public InsuranceJobItemRepository(CompanyContext context) : base(context) { _context = context; } public void CreateInsuranceJobItem(InsuranceJobItemViewModel model) { InsuranceJobItem incuranceJobItemObj = new InsuranceJobItem(0, 0, 0, 0, model.InsuranceJobId, model.StartDate,model.EndDate); _context.InsuranceJobItems.Add(incuranceJobItemObj); _context.SaveChanges(); List insuranceJobAndJobsList = new List(); foreach (var item in model.JobIds) { var insuranceJobAndJobsObj = new InsuranceJobAndJobs(); insuranceJobAndJobsObj.JobId = item; insuranceJobAndJobsObj.InsuranceJobItemId = incuranceJobItemObj.id; insuranceJobAndJobsList.Add(insuranceJobAndJobsObj); } _context.InsuranceJobAndJobsSet.AddRange(insuranceJobAndJobsList); _context.SaveChanges(); } public DetailsInsuranceJobItem GetDetails(long id) { throw new NotImplementedException(); } public List GetInsuranceJobItemByInsuranceJobId(long Id, string year, string month) { //var list = _context.InsuranceJobItems.Where(x => x.InsuranceJobId == Id).ToList().Select(x=>new InsuranceJobItemViewModel() //{ // Id =x.id, // PercentageLessThan=x.PercentageLessThan, // PercentageMoreThan=x.PercentageMoreThan, // SalaeyLessThan=x.SalaeyLessThan, // SalaryMoreThan = x.SalaryMoreThan, // SalaeyLessThanString = x.SalaryMoreThan.ToMoney(), // SalaryMoreThanString = x.SalaryMoreThan.ToMoney(), // InsuranceJobId = x.InsuranceJobId, // JobIds = _context.InsuranceJobAndJobsSet.Where(p => p.InsuranceJobItemId == x.id).Select(p=>p.JobId).ToList() //}); //var insuranceJobItemIds = _context.InsuranceJobAndJobsSet.Where(x => x.JobId == Id).Select(x=>x.InsuranceJobItemId).ToList(); //var insuranceJobItems = _context.InsuranceJobItems.Where(x => insuranceJobItemIds.Contains(x.InsuranceJobId)).ToList(); //var list = new List(); //foreach (var item in insuranceJobItems) //{ // var obj = new InsuranceJobItemViewModel(); // obj.Id = item.id; // obj.PercentageLessThan = item.PercentageLessThan; // obj.PercentageMoreThan = item.PercentageMoreThan; // obj.SalaeyLessThan = item.SalaeyLessThan; // obj.SalaryMoreThan = item.SalaryMoreThan; // obj.SalaeyLessThanString = item.SalaryMoreThan.ToMoney(); // obj.SalaryMoreThanString = item.SalaryMoreThan.ToMoney(); // obj.InsuranceJobId = item.InsuranceJobId; // obj.JobIds = _context.InsuranceJobAndJobsSet.Where(p => p.InsuranceJobItemId == item.id) // .Select(p => p.JobId).ToList(); // obj.JobList = _context.Jobs.Where(x => obj.JobIds.Contains(x.id)).ToList().Select(x => // new JobViewModel() // { // Id = x.id, // JobName = x.JobName, // JobCode = x.JobCode, // }).ToList(); // list.Add(obj); //} var searcheDate = ($"{year}/{month}/01").ToGeorgianDateTime(); var insuranceJobItems = _context.InsuranceJobItems.Where(i => i.InsuranceJobId == Id && i.StartDate <= searcheDate && i.EndDate >= searcheDate).ToList(); var list = new List(); var usedParcentsInDateSalaryItems = _context.DateSalaries .Where(x => x.StartDateGr <= searcheDate && x.EndDateGr >= searcheDate) .Include(x => x.DateSalaryItemList) .SelectMany(x => x.DateSalaryItemList) .ToList(); foreach (var item in insuranceJobItems) { double lessThan = usedParcentsInDateSalaryItems.Any(x => x.Percent == item.PercentageLessThan && x.Salary > 0) ? usedParcentsInDateSalaryItems.FirstOrDefault(x => x.Percent == item.PercentageLessThan).Salary : 0; double moreThan = usedParcentsInDateSalaryItems.Any(x => x.Percent == item.PercentageMoreThan && x.Salary > 0) ? usedParcentsInDateSalaryItems.FirstOrDefault(x => x.Percent == item.PercentageMoreThan).Salary : 0; var obj = new InsuranceJobItemViewModel(); obj.Id = item.id; obj.PercentageLessThan = item.PercentageLessThan; obj.IsPercentageLessThanUse = lessThan > 0 ; obj.PercentageMoreThan = item.PercentageMoreThan; obj.IsPercentageMoreThanUse = moreThan > 0; obj.SalaeyLessThan = item.SalaeyLessThan; obj.SalaryMoreThan = item.SalaryMoreThan; obj.SalaeyLessThanString = lessThan > 0 ? lessThan.ToMoney() : "0"; obj.SalaryMoreThanString = moreThan > 0 ? moreThan.ToMoney() : "0"; obj.InsuranceJobId = item.InsuranceJobId; obj.StartDate = item.StartDate; obj.EndDate = item.EndDate; obj.JobIds = _context.InsuranceJobAndJobsSet.Where(p => p.InsuranceJobItemId == item.id) .Select(p => p.JobId).ToList(); obj.JobList = _context.Jobs.Where(x => obj.JobIds.Contains(x.id)).ToList().Select(x => new JobViewModel() { Id = x.id, JobName = x.JobName, JobCode = x.JobCode, }).ToList(); list.Add(obj); } return list.ToList(); } public InsuranceJobItemViewModel GetInsuranceJobItemByInsuranceJobIdForFixedSalary(long insuranceJobId, long jobId, string year, string month) { var searcheDate = ($"{year}/{month}/01").ToGeorgianDateTime(); var insuranceJobItemViewModel = new InsuranceJobItemViewModel(); var insuranceJobItems = _context.InsuranceJobItems.Where(i => i.InsuranceJobId == insuranceJobId && i.StartDate <= searcheDate && i.EndDate >= searcheDate).ToList(); var insuranceJobItemIds = insuranceJobItems.Select(x => x.id).ToList(); var jobAndJob = _context.InsuranceJobAndJobsSet .Where(x => insuranceJobItemIds.Contains(x.InsuranceJobItemId) && x.JobId == jobId).FirstOrDefault(); if (jobAndJob != null) { var item = insuranceJobItems.Where(x => x.id == jobAndJob.InsuranceJobItemId).FirstOrDefault(); insuranceJobItemViewModel.Id = item.id; insuranceJobItemViewModel.PercentageLessThan = item.PercentageLessThan; insuranceJobItemViewModel.PercentageMoreThan = item.PercentageMoreThan; insuranceJobItemViewModel.SalaeyLessThan = item.SalaeyLessThan; insuranceJobItemViewModel.SalaryMoreThan = item.SalaryMoreThan; insuranceJobItemViewModel.SalaeyLessThanString = item.SalaryMoreThan.ToMoney(); insuranceJobItemViewModel.SalaryMoreThanString = item.SalaryMoreThan.ToMoney(); insuranceJobItemViewModel.InsuranceJobId = item.InsuranceJobId; } return insuranceJobItemViewModel; } public (List workshopList, bool hasAnyWorkshop) GetWorkshopUsedThisInsuranceJob(long insuranceJobId) { var workshops = _context.Workshops.Where(x => x.InsuranceJobId == insuranceJobId); if (!workshops.Any()) { return (new List(), false); } return (workshops.Select(x => x.WorkshopFullName).ToList(), true); } public List Search(InsuranceJobItemSearchModel searchModel) { throw new NotImplementedException(); } }