using _0_Framework.Application; using AccountMangement.Infrastructure.EFCore; using Company.Domain.ReportClientAgg; using CompanyManagment.App.Contracts.ReportClient; using System; using System.Collections.Generic; using System.Linq; namespace CompanyManagment.EFCore.Repository; public class ReportClientRepository : IReportClientRepository { private readonly CompanyContext _context; private readonly AccountContext _accountContext; private readonly IAuthHelper _authHelper; public ReportClientRepository(CompanyContext context, AccountContext accountContext, IAuthHelper authHelper) { _context = context; _accountContext = accountContext; _authHelper = authHelper; } public List GetAllCheckoutReport(long workshopId, CheckoutReportSearchModel searchModel) { #region CheckValidtWorkshop var accountId = _authHelper.CurrentAccountId(); var contracingPartyAcc = _context.ContractingPartyAccounts.FirstOrDefault(x => x.AccountId == accountId); if (contracingPartyAcc == null) { return new List(); } var employers = _context.Employers.Where(x => x.ContractingPartyId == contracingPartyAcc.PersonalContractingPartyId).Select(x => x.id).ToList(); if (!employers.Any()) { return new List(); } var workshopIds = _context.WorkshopEmployers.Where(x => employers.Contains(x.EmployerId)).Select(x => x.WorkshopId).ToList(); if (!workshopIds.Contains(workshopId)) { return new List(); } #endregion var query = _context.CheckoutSet.Select(x => new CheckoutReportViewModel() { Id = x.id, EmployeeId = x.EmployeeId, WorkshopId = x.WorkshopId, Year = x.Year, Month = x.Month, EmployeeFullName = x.EmployeeFullName, NationalCode = x.NationalCode, SumOfWorkingDays = x.SumOfWorkingDays, ContractStartGr = x.ContractStart, ContractEndGr = x.ContractEnd, MonthlySalary = x.MonthlySalary.ToMoney(), BaseYearsPay = x.BaseYearsPay.ToMoney(), ConsumableItems = x.ConsumableItems.ToMoney(), HousingAllowance = x.HousingAllowance.ToMoney(), OvertimePay = x.OvertimePay.ToMoney(), NightworkPay = x.NightworkPay.ToMoney(), FridayPay = x.FridayPay.ToMoney(), MissionPay = x.MissionPay.ToMoney(), ShiftPay = x.ShiftPay.ToMoney(), FamilyAllowance = x.FamilyAllowance.ToMoney(), BonusesPay = x.BonusesPay.ToMoney(), YearsPay = x.YearsPay.ToMoney(), LeavePay = x.LeavePay.ToMoney(), InsuranceDeduction = x.InsuranceDeduction.ToMoney(), TaxDeducation = x.TaxDeducation.ToMoney(), InstallmentDeduction = x.InstallmentDeduction.ToMoney(), SalaryAidDeduction = x.SalaryAidDeduction.ToMoney(), AbsenceDeduction = x.AbsenceDeduction.ToMoney(), TotalClaims = x.TotalClaims, TotalDeductions = x.TotalDeductions, TotalPayment = x.TotalPayment.ToMoney(), RewardPay = x.RewardPay.ToMoneyNullable(), MarriedAllowance = x.MarriedAllowance.ToMoney(), }).Where(x => x.WorkshopId == workshopId); if (searchModel.EmployeeId > 0) query = query.Where(x => x.EmployeeId == searchModel.EmployeeId); if (!string.IsNullOrWhiteSpace(searchModel.Year) && !string.IsNullOrWhiteSpace(searchModel.Month)) { var y = searchModel.Year + "/" + searchModel.Month + "/01"; string y2 = string.Empty; int month = Convert.ToInt32(searchModel.Month); int year = Convert.ToInt32(searchModel.Year); if (month <= 6) { y2 = $"{searchModel.Year}/{searchModel.Month}/31"; } else if (month > 6 && month < 12) { y2 = $"{searchModel.Year}/{searchModel.Month}/30"; } else if (month == 12) { switch (year) { case 1346: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1350: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1354: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1358: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1362: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1366: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1370: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1375: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1379: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1383: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1387: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1391: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1395: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1399: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1403: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1408: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1412: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1416: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1420: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1424: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1428: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1432: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1436: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1441: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1445: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; default: y2 = $"{searchModel.Year}/{searchModel.Month}/29"; break; } } var start = y.ToGeorgianDateTime(); var end = y2.ToGeorgianDateTime(); query = query.Where(x => x.ContractStartGr >= start && x.ContractStartGr < end && x.ContractEndGr > start && x.ContractEndGr <= end || x.ContractStartGr <= start && x.ContractEndGr >= end || start <= x.ContractStartGr && end > x.ContractStartGr || end >= x.ContractEndGr && start < x.ContractEndGr); } return query.OrderByDescending(x => x.ContractStartGr).Skip(searchModel.PageIndex).Take(30).ToList(); } public CheckoutReportTotalsViewModel GetAllSumCheckoutReport(long workshopId, CheckoutReportSearchModel searchModel) { string result = "0"; #region CheckValidtWorkshop var accountId = _authHelper.CurrentAccountId(); var contracingPartyAcc = _context.ContractingPartyAccounts.FirstOrDefault(x => x.AccountId == accountId); if (contracingPartyAcc == null) { return new CheckoutReportTotalsViewModel(); } var employers = _context.Employers.Where(x => x.ContractingPartyId == contracingPartyAcc.PersonalContractingPartyId).Select(x => x.id).ToList(); if (!employers.Any()) { return new CheckoutReportTotalsViewModel(); } var workshopIds = _context.WorkshopEmployers.Where(x => employers.Contains(x.EmployerId)).Select(x => x.WorkshopId).ToList(); if (!workshopIds.Contains(workshopId)) { return new CheckoutReportTotalsViewModel(); } #endregion var query = _context.CheckoutSet.Select(x => new CheckoutReportViewModel() { Id = x.id, EmployeeId = x.EmployeeId, WorkshopId = x.WorkshopId, Year = x.Year, Month = x.Month, EmployeeFullName = x.EmployeeFullName, NationalCode = x.NationalCode, SumOfWorkingDays = x.SumOfWorkingDays, ContractStartGr = x.ContractStart, ContractEndGr = x.ContractEnd, MonthlySalaryDouble = x.MonthlySalary, BaseYearsPayDouble = x.BaseYearsPay, ConsumableItemsDouble = x.ConsumableItems, HousingAllowanceDouble = x.HousingAllowance, OvertimePayDouble = x.OvertimePay, NightworkPayDouble = x.NightworkPay, FridayPayDouble = x.FridayPay, MissionPayDouble = x.MissionPay, ShiftPayDouble = x.ShiftPay, FamilyAllowanceDouble = x.FamilyAllowance, BonusesPayDouble = x.BonusesPay, YearsPayDouble = x.YearsPay, LeavePayDouble = x.LeavePay, InsuranceDeductionDouble = x.InsuranceDeduction, TaxDeducationDouble = x.TaxDeducation, InstallmentDeductionDouble = x.InstallmentDeduction, SalaryAidDeductionDouble = x.SalaryAidDeduction, AbsenceDeductionDouble = x.AbsenceDeduction, TotalClaims = x.TotalClaims, TotalDeductions = x.TotalDeductions, TotalPaymentDouble = x.TotalPayment, RewardPayDouble = x.RewardPay, MarriedAllowanceDouble = x.MarriedAllowance, }).Where(x => x.WorkshopId == workshopId); if (searchModel.EmployeeId > 0) query = query.Where(x => x.EmployeeId == searchModel.EmployeeId); if (!string.IsNullOrWhiteSpace(searchModel.Year) && !string.IsNullOrWhiteSpace(searchModel.Month)) { var y = searchModel.Year + "/" + searchModel.Month + "/01"; string y2 = string.Empty; int month = Convert.ToInt32(searchModel.Month); int year = Convert.ToInt32(searchModel.Year); if (month <= 6) { y2 = $"{searchModel.Year}/{searchModel.Month}/31"; } else if (month > 6 && month < 12) { y2 = $"{searchModel.Year}/{searchModel.Month}/30"; } else if (month == 12) { switch (year) { case 1346: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1350: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1354: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1358: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1362: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1366: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1370: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1375: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1379: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1383: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1387: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1391: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1395: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1399: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1403: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1408: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1412: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1416: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1420: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1424: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1428: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1432: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1436: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1441: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1445: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; default: y2 = $"{searchModel.Year}/{searchModel.Month}/29"; break; } } var start = y.ToGeorgianDateTime(); var end = y2.ToGeorgianDateTime(); query = query.Where(x => x.ContractStartGr >= start && x.ContractStartGr < end && x.ContractEndGr > start && x.ContractEndGr <= end || x.ContractStartGr <= start && x.ContractEndGr >= end || start <= x.ContractStartGr && end > x.ContractStartGr || end >= x.ContractEndGr && start < x.ContractEndGr); } var list = query.ToList(); return new CheckoutReportTotalsViewModel() { MonthlySalarySum = (list.Sum(x => x.MonthlySalaryDouble)).ToMoney(), BaseYearsPaySum = (list.Sum(x => x.BaseYearsPayDouble)).ToMoney(), ConsumableItemsSum = (list.Sum(x => x.ConsumableItemsDouble)).ToMoney(), HousingAllowanceSum = (list.Sum(x => x.HousingAllowanceDouble)).ToMoney(), OvertimePaySum = (list.Sum(x => x.OvertimePayDouble)).ToMoney(), NightworkPaySum = (list.Sum(x => x.NightworkPayDouble)).ToMoney(), FridayPaySum = (list.Sum(x => x.FridayPayDouble)).ToMoney(), MissionPaySum = (list.Sum(x => x.MissionPayDouble)).ToMoney(), ShiftPaySum = (list.Sum(x => x.ShiftPayDouble)).ToMoney(), FamilyAllowanceSum = (list.Sum(x => x.FamilyAllowanceDouble)).ToMoney(), BonusesPaySum = (list.Sum(x => x.BonusesPayDouble)).ToMoney(), YearsPaySum = (list.Sum(x => x.YearsPayDouble)).ToMoney(), LeavePaySum = (list.Sum(x => x.LeavePayDouble)).ToMoney(), InsuranceDeductionSum = (list.Sum(x => x.InsuranceDeductionDouble)).ToMoney(), TaxDeducationSum = (list.Sum(x => x.TaxDeducationDouble)).ToMoney(), InstallmentDeductionSum = (list.Sum(x => x.InstallmentDeductionDouble)).ToMoney(), SalaryAidDeductionSum = (list.Sum(x => x.SalaryAidDeductionDouble)).ToMoney(), AbsenceDeductionSum = (list.Sum(x => x.AbsenceDeductionDouble)).ToMoney(), //TotalClaims = (list.Sum(x => x.AbsenceDeductionDouble)).ToMoney(), //TotalDeductions = (list.Sum(x => x.AbsenceDeductionDouble)).ToMoney(), TotalPaymentSum = (list.Sum(x => x.TotalPaymentDouble)).ToMoney(), RewardPaySum = (list.Sum(x => x.RewardPayDouble)).ToMoneyNullable(), MarriedAllowanceSum = (list.Sum(x => x.MarriedAllowanceDouble)).ToMoney(), }; } public List GetAllCheckoutReportPrintAll(long workshopId, CheckoutReportSearchModel searchModel) { #region CheckValidtWorkshop var accountId = _authHelper.CurrentAccountId(); var contracingPartyAcc = _context.ContractingPartyAccounts.FirstOrDefault(x => x.AccountId == accountId); if (contracingPartyAcc == null) { return new List(); } var employers = _context.Employers.Where(x => x.ContractingPartyId == contracingPartyAcc.PersonalContractingPartyId).Select(x => x.id).ToList(); if (!employers.Any()) { return new List(); } var workshopIds = _context.WorkshopEmployers.Where(x => employers.Contains(x.EmployerId)).Select(x => x.WorkshopId).ToList(); if (!workshopIds.Contains(workshopId)) { return new List(); } #endregion var query = _context.CheckoutSet.Select(x => new CheckoutReportViewModel() { Id = x.id, EmployeeId = x.EmployeeId, WorkshopId = x.WorkshopId, Year = x.Year, Month = x.Month, EmployeeFullName = x.EmployeeFullName, NationalCode = x.NationalCode, SumOfWorkingDays = x.SumOfWorkingDays, ContractStartGr = x.ContractStart, ContractEndGr = x.ContractEnd, MonthlySalary = x.MonthlySalary.ToMoney(), BaseYearsPay = x.BaseYearsPay.ToMoney(), ConsumableItems = x.ConsumableItems.ToMoney(), HousingAllowance = x.HousingAllowance.ToMoney(), OvertimePay = x.OvertimePay.ToMoney(), NightworkPay = x.NightworkPay.ToMoney(), FridayPay = x.FridayPay.ToMoney(), MissionPay = x.MissionPay.ToMoney(), ShiftPay = x.ShiftPay.ToMoney(), FamilyAllowance = x.FamilyAllowance.ToMoney(), BonusesPay = x.BonusesPay.ToMoney(), YearsPay = x.YearsPay.ToMoney(), LeavePay = x.LeavePay.ToMoney(), InsuranceDeduction = x.InsuranceDeduction.ToMoney(), TaxDeducation = x.TaxDeducation.ToMoney(), InstallmentDeduction = x.InstallmentDeduction.ToMoney(), SalaryAidDeduction = x.SalaryAidDeduction.ToMoney(), AbsenceDeduction = x.AbsenceDeduction.ToMoney(), TotalClaims = x.TotalClaims, TotalDeductions = x.TotalDeductions, TotalPayment = x.TotalPayment.ToMoney(), RewardPay = x.RewardPay.ToMoneyNullable(), MarriedAllowance = x.MarriedAllowance.ToMoney(), }).Where(x => x.WorkshopId == workshopId); if (searchModel.EmployeeId > 0) query = query.Where(x => x.EmployeeId == searchModel.EmployeeId); if (!string.IsNullOrWhiteSpace(searchModel.Year) && !string.IsNullOrWhiteSpace(searchModel.Month)) { var y = searchModel.Year + "/" + searchModel.Month + "/01"; string y2 = string.Empty; int month = Convert.ToInt32(searchModel.Month); int year = Convert.ToInt32(searchModel.Year); if (month <= 6) { y2 = $"{searchModel.Year}/{searchModel.Month}/31"; } else if (month > 6 && month < 12) { y2 = $"{searchModel.Year}/{searchModel.Month}/30"; } else if (month == 12) { switch (year) { case 1346: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1350: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1354: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1358: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1362: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1366: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1370: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1375: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1379: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1383: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1387: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1391: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1395: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1399: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1403: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1408: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1412: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1416: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1420: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1424: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1428: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1432: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1436: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1441: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; case 1445: y2 = $"{searchModel.Year}/{searchModel.Month}/30"; break; default: y2 = $"{searchModel.Year}/{searchModel.Month}/29"; break; } } var start = y.ToGeorgianDateTime(); var end = y2.ToGeorgianDateTime(); query = query.Where(x => x.ContractStartGr >= start && x.ContractStartGr < end && x.ContractEndGr > start && x.ContractEndGr <= end || x.ContractStartGr <= start && x.ContractEndGr >= end || start <= x.ContractStartGr && end > x.ContractStartGr || end >= x.ContractEndGr && start < x.ContractEndGr); } return query.OrderByDescending(x => x.ContractStartGr).ToList(); } }