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 CompanyManagment.App.Contracts.DateSalary; namespace CompanyManagment.EFCore.Repository; public class DateSalaryRepository : RepositoryBase, IDateSalaryRepository { private readonly CompanyContext _context; private readonly IDateSalaryItemRepository _dateSalaryItemRepository; public DateSalaryRepository(CompanyContext context, IDateSalaryItemRepository dateSalaryItemRepository) : base(context) { _context = context; _dateSalaryItemRepository = dateSalaryItemRepository; } public EditDateSalary GetDetails(long id) { //return _context.DateSalaries.Select(x => new EditDateSalary() //{ // StartDateFa = x.StartDateFa, // EndDateFa = x.EndDateFa, //}).FirstOrDefault(x => x.Id == id); var dateSalary = Get(id); EditDateSalary dateSalaryViewModel = new EditDateSalary(); dateSalaryViewModel.Id = id; dateSalaryViewModel.EndDateFa = dateSalary.EndDateFa; dateSalaryViewModel.StartDateFa = dateSalary.StartDateFa; return dateSalaryViewModel; } public List Search(DateSalarySearchModel searchModel) { var query = _context.DateSalaries.Select(x => new DateSalaryViewModel() { Id = x.id, Year = x.Year, StartDateFa = x.StartDateFa, EndDateFa = x.EndDateFa, StartDateGr = x.StartDateGr, EndDateGr = x.EndDateGr }); var list = query.OrderByDescending(x => x.Id).ToList(); if(!string.IsNullOrWhiteSpace(searchModel.Year)) list = list.Where(x=>x.Year==searchModel.Year).OrderByDescending(x => x.Month).ToList(); if (!string.IsNullOrWhiteSpace(searchModel.Month)) list = list.Where(x => x.Year == searchModel.Month).OrderByDescending(x => x.Year).ToList(); return list.OrderByDescending(x=>x.StartDateGr).ToList(); } public DateSalaryViewModel GetDateSalaryViewModel(DateSalarySearchModel searchModel) { var query = _context.DateSalaries.FirstOrDefault(x => x.StartDateGr < searchModel.EndDateGr && x.EndDateGr > searchModel.StartDateGr); var dateSalary = new DateSalaryViewModel(); if (query != null) { dateSalary.Id = query.id; dateSalary.Year = query.Year; dateSalary.StartDateFa = query.StartDateFa; dateSalary.EndDateFa = query.EndDateFa; //dateSalary.StartDateGr = x.StartDateGr; //dateSalary.EndDateGr = x.EndDateGr; } return dateSalary; } public bool CreateDateSalaryItemForInsuranceJob(CreateDateSalaryForInsuranceJob command) { using (var transaction = _context.Database.BeginTransaction()) { try { var dateSalary = new DateSalary(command.StartDateFa, command.EndDateFa); Create(dateSalary); SaveChanges(); command.DateSalaryItems = command.DateSalaryItems.Where(x => x.Salary > 0).ToList(); foreach (var item in command.DateSalaryItems) { var dateSalaryItem = new DateSalaryItem(item.Percent, item.PercentageId, Convert.ToInt64(item.Salary), dateSalary.id); _dateSalaryItemRepository.Create(dateSalaryItem); } _dateSalaryItemRepository.SaveChanges(); transaction.Commit(); return true; } catch (Exception ex) { transaction.Rollback(); return false; } } } public bool EditDateSalaryItemForInsuranceJob(CreateDateSalaryForInsuranceJob command) { using (var transaction = _context.Database.BeginTransaction()) { try { var dateSalary = Get(command.Id); dateSalary.Edit(command.StartDateFa, command.EndDateFa); SaveChanges(); //command.DateSalaryItems = command.DateSalaryItems.Where(x => x.Salary > 0).ToList(); foreach (var item in command.DateSalaryItems) { if (item.Id == 0) { var dateSalaryItem = new DateSalaryItem(item.Percent, item.PercentageId, Convert.ToInt64(item.Salary), dateSalary.id); _dateSalaryItemRepository.Create(dateSalaryItem); } else { var dateSalaryItem = _dateSalaryItemRepository.Get(item.Id); dateSalaryItem.Edit(item.Percent, item.PercentageId, Convert.ToInt64(item.Salary)); } } _dateSalaryItemRepository.SaveChanges(); transaction.Commit(); return true; } catch (Exception ex) { transaction.Rollback(); return false; } } } public bool Remove(long id) { using (var transaction = _context.Database.BeginTransaction()) { try { var dateSalaryItems = _context.DateSalaryItems.Where(x => x.DateSalaryId == id).ToList(); _context.DateSalaryItems.RemoveRange(dateSalaryItems); _dateSalaryItemRepository.SaveChanges(); var dateSalary = Get(id); _context.DateSalaries.Remove(dateSalary); SaveChanges(); transaction.Commit(); return true; } catch (Exception ex) { transaction.Rollback(); return false; } } } }