Files
Backend-Api/CompanyManagment.EFCore/Repository/InsuranceJobRepository.cs
2025-05-20 22:15:06 +03:30

451 lines
19 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.Linq;
using _0_Framework.Application;
using _0_Framework.InfraStructure;
using Company.Domain.DateSalaryAgg;
using Company.Domain.DateSalaryItemAgg;
using Company.Domain.InsuranceJobAndJobsAgg;
using Company.Domain.InsuranceJobItemAgg;
using Company.Domain.InsurancJobAgg;
using Company.Domain.PercentageAgg;
using CompanyManagment.App.Contracts.InsuranceJob;
using CompanyManagment.App.Contracts.InsuranceJobItem;
using Microsoft.EntityFrameworkCore;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
namespace CompanyManagment.EFCore.Repository;
public class InsuranceJobRepository : RepositoryBase<long, InsuranceJob>, IInsuranceJobRepositpry
{
private readonly CompanyContext _context;
private readonly TestDbContext _testDbContext;
private readonly IInsuranceJobItemRepositpry _insuranceJobItemRepositpry;
private readonly IPercentageRepository _percentageRepository;
public InsuranceJobRepository(CompanyContext context, IInsuranceJobItemRepositpry insuranceJobItemRepositpry, IPercentageRepository percentageRepository, TestDbContext testDbContext) : base(context)
{
_context = context;
_insuranceJobItemRepositpry = insuranceJobItemRepositpry;
_percentageRepository = percentageRepository;
_testDbContext = testDbContext;
}
public EditInsuranceJob GetDetails(long id, string year, string month)
{
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, year, month);
var item = insuranceJob.InsuranceJobItems.FirstOrDefault();
insuranceJob.StartDateFa = item != null ? $"{item.StartDate.ToFarsi()}" : "-";
insuranceJob.EndDateFa = item != null ? $"{item.EndDate.ToFarsi()}" : "-";
return insuranceJob;
}
public List<InsuranceJobViewModel> GetInsurancJob()
{
var list = _context.InsuranceJobs.Select(x => new InsuranceJobViewModel
{
Id = x.id,
InsuranceJobTitle = x.InsuranceJobTitle,
EconomicCode = x.EconomicCode
}).ToList();
return list;
}
public List<InsuranceJobViewModel> Search(InsuranceJobSearchModel searchModel)
{
string now = Tools.ToFarsi(DateTime.Now);
string year = now.Substring(0, 4);
string month = now.Substring(5, 2);
if (!string.IsNullOrWhiteSpace(searchModel.Year))
year = searchModel.Year;
if (!string.IsNullOrWhiteSpace(searchModel.Month))
month = searchModel.Month;
var searcheDate = ($"{year}/{month}/01").ToGeorgianDateTime();
var query = _context.InsuranceJobs
.Include(x => x.InsuranceJobItemList).Where(x => x.InsuranceJobItemList.Any(i => i.StartDate <= searcheDate && i.EndDate >= searcheDate))
.Select(x => new InsuranceJobViewModel
{
Id = x.id,
InsuranceJobTitle = x.InsuranceJobTitle,
EconomicCode = x.EconomicCode,
Year = year,
Month = month,
});
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;
item.StartDate = command.StartDateFa.ToGeorgianDateTime();
item.EndDate = command.EndDateFa.ToGeorgianDateTime();
_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 List<(long id, string date)> GetOldYersInsuranceItemIds()
{
var res = _context.InsuranceJobItems.Where(x=>x.StartDate != null && x.EndDate != null)
.GroupBy(x => x.StartDate)
.Select(g => g.First())
.ToList().Select(x => new InsuranceJobItemViewModel()
{
Id = x.id,
StartDate = x.StartDate,
EndDate = x.EndDate,
});
return res.Select(x => (x.Id, $"{(x.StartDate.HasValue ? x.StartDate.Value.ToFarsi() : "نامشخص")} - {(x.EndDate.HasValue ? x.EndDate.Value.ToFarsi() : "نامشخص")}")).ToList();
}
public OperationResult CopyFromLastYear(CopyFromLastYearViewModel command)
{
var op = new OperationResult();
if (command.InsuranceJobItemId == 0)
return op.Failed("بازه را انتخاب کنید");
DateTime startDateGr = new DateTime();
DateTime endDateGr = new DateTime();
try
{
startDateGr = command.StartDate.ToGeorgianDateTime();
endDateGr = command.EndDate.ToGeorgianDateTime();
}
catch (Exception e)
{
return op.Failed("تاریخ به درستی وارد نشده است");
}
var chekExist = _insuranceJobItemRepositpry.Exists(x => x.StartDate < endDateGr && x.EndDate > startDateGr);
if (chekExist)
return op.Failed("بازه تاریخ وارد شده با بازه های قبلی تداخل دارد");
var insuranceJobItemObj = _insuranceJobItemRepositpry.Get(command.InsuranceJobItemId);
if (insuranceJobItemObj == null)
return op.Failed("آیتم شغلی انتخاب شده وجود ندارد");
var insuranceJobItemList = _context.InsuranceJobItems
.Include(jobs => jobs.InsuranceJobAndJobs)
.Where(x => x.StartDate == insuranceJobItemObj.StartDate).Select(x => new InsuranceJobItemViewModel()
{
PercentageLessThan = x.PercentageLessThan,
PercentageMoreThan = x.PercentageMoreThan,
InsuranceJobId = x.InsuranceJobId,
StartDate = startDateGr,
EndDate = endDateGr,
JobIds = x.InsuranceJobAndJobs.Select(j => j.JobId).ToList()
}).ToList();
if (!insuranceJobItemList.Any())
return op.Failed("خطا");
List<double> percentaegJoin = new List<double>();
var percentageLessThan = insuranceJobItemList.Select(x => x.PercentageLessThan).ToList();
var percentageMoreThan = insuranceJobItemList.Select(x => x.PercentageMoreThan).ToList();
if (percentageMoreThan != null)
{
percentaegJoin = percentageLessThan
.Concat(percentageMoreThan)
.Distinct()
.ToList();
}
using (var transaction = _context.Database.BeginTransaction())
{
try
{
foreach (var item in insuranceJobItemList)
{
_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();
}
var dateSalary = new DateSalary(command.StartDate, command.EndDate);
_context.DateSalaries.Add(dateSalary);
_context.SaveChanges();
var percentages = _context.Percentages.Select(x=> new{x.id, x.Percent}).ToList();
var dateSalaryItemList = new List<DateSalaryItem>();
foreach (var percent in percentaegJoin)
{
var percentageId = percentages.FirstOrDefault(x => x.Percent == percent);
if (percentageId != null)
{
var dateSalaryItem = new DateSalaryItem(percent, percentageId.id, 0, dateSalary.id);
dateSalaryItemList.Add(dateSalaryItem);
}
}
if (dateSalaryItemList.Count > 0)
{
_context.DateSalaryItems.AddRange(dateSalaryItemList);
_context.SaveChanges();
}
// SaveChanges();
transaction.Commit();
op.IsSuccedded = true;
op.Message = "ثبت اطلاعات با موفقیت انجام شد";
return op;
}
catch (Exception ex)
{
transaction.Rollback();
return op.Failed("ثبت اطلاعات با خطا مواجه شد");
}
}
}
public OperationResult RecoveryOldData1403()
{
OperationResult result = new OperationResult();
using (var transaction = _context.Database.BeginTransaction())
{
try
{
var res = _testDbContext.InsuranceJobItems.Include(x => x.InsuranceJobAndJobs).ToList();
foreach (var item in res)
{
var createItem = new InsuranceJobItem(item.PercentageLessThan, 0, item.PercentageMoreThan, 0,
item.InsuranceJobId, item.StartDate, item.EndDate);
_context.InsuranceJobItems.Add(createItem);
_context.SaveChanges();
List<InsuranceJobAndJobs> insuranceJobAndJobsList = new List<InsuranceJobAndJobs>();
foreach (var jobItem in item.InsuranceJobAndJobs)
{
var insuranceJobAndJobsObj = new InsuranceJobAndJobs();
insuranceJobAndJobsObj.JobId = jobItem.JobId;
insuranceJobAndJobsObj.InsuranceJobItemId = createItem.id;
insuranceJobAndJobsList.Add(insuranceJobAndJobsObj);
}
_context.InsuranceJobAndJobsSet.AddRange(insuranceJobAndJobsList);
_context.SaveChanges();
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();
}
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 searcheDate = ($"{command.Year}/{command.Month}/01").ToGeorgianDateTime();
var insuranceJobItems = _context.InsuranceJobItems.Where(i => i.InsuranceJobId == command.Id && i.StartDate <= searcheDate && i.EndDate >= searcheDate);
//List<long> deleteIds = new List<long>();
DateTime? startDate = insuranceJobItems.Select(x => x.StartDate).FirstOrDefault();
DateTime? endDate = insuranceJobItems.Select(x => x.EndDate).FirstOrDefault();
var insuranceJobItemsIds = insuranceJobItems.Select(x => x.id).ToList();
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;
item.StartDate = startDate;
item.EndDate = endDate;
_insuranceJobItemRepositpry.CreateInsuranceJobItem(item);
}
else
{
var insuranceJobItem = _insuranceJobItemRepositpry.Get(item.Id);
insuranceJobItem.Edit(item.PercentageLessThan, item.SalaeyLessThan, item.PercentageMoreThan, item.SalaryMoreThan, command.Id, startDate, endDate);
#region JobAndJob
var jobAndJobList = _context.InsuranceJobAndJobsSet.Where(x => x.InsuranceJobItemId == item.Id).ToList();
_context.InsuranceJobAndJobsSet.RemoveRange(jobAndJobList);
List<InsuranceJobAndJobs> insuranceJobAndJobsList = new List<InsuranceJobAndJobs>();
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;
}
}