198 lines
8.9 KiB
C#
198 lines
8.9 KiB
C#
using System;
|
|
using _0_Framework.InfraStructure;
|
|
using Company.Domain.LoanAgg;
|
|
using Company.Domain.LoanAgg.Entities;
|
|
using CompanyManagment.App.Contracts.Loan;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using _0_Framework.Application;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using System.Globalization;
|
|
|
|
namespace CompanyManagment.EFCore.Repository;
|
|
|
|
public class LoanRepository : RepositoryBase<long, Loan>, ILoanRepository
|
|
{
|
|
private readonly CompanyContext _companyContext;
|
|
|
|
public LoanRepository(CompanyContext companyContext) : base(companyContext)
|
|
{
|
|
_companyContext = companyContext;
|
|
}
|
|
|
|
public LoanViewModel GetDetails(long id)
|
|
{
|
|
return _companyContext.Loans.Select(x => new LoanViewModel()
|
|
{
|
|
Id = x.id,
|
|
WorkshopId = x.WorkshopId,
|
|
EmployeeId = x.EmployeeId,
|
|
EmployeeFullName = _companyContext.Employees.FirstOrDefault(e => e.id == x.EmployeeId).FullName,
|
|
StartDateTime = x.StartDateMonth,
|
|
Count = x.Count,
|
|
Amount = x.Amount.ToMoney(),
|
|
}).FirstOrDefault(x => x.Id == id);
|
|
}
|
|
|
|
public List<Loan> GetBy(IEnumerable<long> ids)
|
|
{
|
|
return _companyContext.Loans.Where(x => ids.Contains(x.id)).ToList();
|
|
}
|
|
|
|
public LoanGroupedViewModel GetSearchListAsGrouped(LoanSearchViewModel searchModel)
|
|
{
|
|
var result = new LoanGroupedViewModel();
|
|
|
|
var query = _companyContext.Loans.Where(x => x.WorkshopId == searchModel.WorkshopId);
|
|
|
|
var personnelCodes = _companyContext.PersonnelCodeSet
|
|
.Where(x => x.WorkshopId == searchModel.WorkshopId).ToList();
|
|
|
|
var employees = _companyContext.LeftWorkList.Where(x => x.WorkshopId == searchModel.WorkshopId)
|
|
.Include(x => x.Employee).Select(x => x.Employee).ToList();
|
|
|
|
var pc = new PersianCalendar();
|
|
|
|
if (searchModel.ShowAsGrouped)
|
|
{
|
|
if (searchModel.EmployeeId > 0)
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(searchModel.StartDate) &&
|
|
!string.IsNullOrWhiteSpace(searchModel.EndDate))
|
|
{
|
|
var startDate = searchModel.StartDate.ToGeorgianDateTime();
|
|
var endDate = searchModel.EndDate.ToGeorgianDateTime();
|
|
query = query.Where(x => x.StartInstallmentPayment >= startDate && x.StartInstallmentPayment <= endDate);
|
|
}
|
|
query = query.Where(x => x.EmployeeId == searchModel.EmployeeId);
|
|
var list = query.ToList().Select(x => new LoanViewModel()
|
|
{
|
|
Amount = x.Amount.ToMoney(),
|
|
AmountDouble = x.Amount,
|
|
EmployeeFullName = employees.FirstOrDefault(e => e.id == x.EmployeeId).FullName,
|
|
EmployeeId = x.EmployeeId,
|
|
CreationDate = x.CreationDate,
|
|
Id = x.id,
|
|
MonthFa = pc.GetMonth(x.StartInstallmentPayment).ToFarsiMonthByIntNumber(),
|
|
YearFa = pc.GetYear(x.StartInstallmentPayment).ToString(),
|
|
PersonnelCode = personnelCodes.FirstOrDefault(p => p.EmployeeId == x.EmployeeId).PersonnelCode.ToString(),
|
|
StartDateTime = x.StartInstallmentPayment.ToFarsi(),
|
|
Count = x.Count,
|
|
AmountPerMonth = x.AmountPerMonth.ToMoney(),
|
|
WorkshopId = x.WorkshopId,
|
|
}).ToList();
|
|
result.GroupedByDate = list.GroupBy(x => new { x.YearFa, x.MonthFa }).Select(x =>
|
|
new LoanGroupedByDateViewModel()
|
|
{
|
|
MonthFa = x.Key.MonthFa,
|
|
YearFa = x.Key.YearFa,
|
|
TotalAmount = x.Sum(l => l.AmountDouble).ToMoney(),
|
|
LoanItems = x.Select(l => new LoanGroupedByDateViewModelItems()
|
|
{
|
|
AmountPerMonth = l.AmountPerMonth,
|
|
EmployeeName = l.EmployeeFullName,
|
|
Id = l.Id,
|
|
InstallmentCount = l.Count,
|
|
LoanStartDate = l.StartDateTime,
|
|
PersonnelCode = l.PersonnelCode,
|
|
TotalAmountFa = l.Amount
|
|
}).ToList()
|
|
}).ToList();
|
|
return result;
|
|
|
|
|
|
}
|
|
else if (!string.IsNullOrWhiteSpace(searchModel.StartDate) &&
|
|
!string.IsNullOrWhiteSpace(searchModel.EndDate))
|
|
{
|
|
var startDate = searchModel.StartDate.ToGeorgianDateTime();
|
|
|
|
var endDate = searchModel.EndDate.ToGeorgianDateTime();
|
|
|
|
query = query.Where(x => x.StartInstallmentPayment >= startDate && x.StartInstallmentPayment <= endDate);
|
|
result.GroupedByEmployee = query.GroupBy(x => x.EmployeeId).ToList()
|
|
.Select(x => new LoanGroupedByEmployeeViewModel()
|
|
{
|
|
EmployeeName = employees.FirstOrDefault(e => e.id == x.Key).FullName,
|
|
LoanItems = x.Select(l => new LoanGroupedByEmployeeViewModelItems()
|
|
{
|
|
TotalAmountFa = l.Amount.ToMoney(),
|
|
AmountPerMonth = l.AmountPerMonth.ToMoney(),
|
|
Id = l.id,
|
|
InstallmentCount = l.Count,
|
|
LoanDateTimeFa = l.StartInstallmentPayment.ToFarsi(),
|
|
PersonnelCode = personnelCodes.FirstOrDefault(p => p.EmployeeId == l.EmployeeId).PersonnelCode.ToString(),
|
|
|
|
}).ToList(),
|
|
TotalAmount = x.Sum(l => l.Amount).ToMoney()
|
|
}).ToList();
|
|
return result;
|
|
}
|
|
}
|
|
|
|
if (searchModel.EmployeeId > 0)
|
|
query = query.Where(x => x.EmployeeId == searchModel.EmployeeId);
|
|
if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && !string.IsNullOrWhiteSpace(searchModel.EndDate))
|
|
{
|
|
var startDate = searchModel.StartDate.ToGeorgianDateTime();
|
|
var endDate = searchModel.EndDate.ToGeorgianDateTime();
|
|
query = query.Where(x => x.StartInstallmentPayment >= startDate && x.StartInstallmentPayment <= endDate);
|
|
}
|
|
|
|
result.LoanListViewModel = query.OrderByDescending(x => x.StartInstallmentPayment).Skip(searchModel.PageIndex)
|
|
.Take(30).ToList()
|
|
.Select(x => new LoanViewModel()
|
|
{
|
|
EmployeeFullName = employees.FirstOrDefault(e => e.id == x.EmployeeId).FullName,
|
|
PersonnelCode = personnelCodes.FirstOrDefault(p => p.EmployeeId == x.EmployeeId).PersonnelCode.ToString(),
|
|
Amount = x.Amount.ToMoney(),
|
|
AmountPerMonth = x.AmountPerMonth.ToMoney(),
|
|
StartDateTime = x.StartInstallmentPayment.ToFarsi(),
|
|
Count = x.Count,
|
|
Id = x.id,
|
|
WorkshopId = x.WorkshopId,
|
|
EmployeeId = x.EmployeeId,
|
|
YearFa = pc.GetYear(x.StartInstallmentPayment).ToString(),
|
|
|
|
}).ToList();
|
|
return result;
|
|
}
|
|
|
|
public List<LoanViewModel> GetSearchList(LoanSearchViewModel searchViewModel)
|
|
{
|
|
var query = _companyContext.Loans.Where(x => x.WorkshopId == searchViewModel.WorkshopId);
|
|
|
|
if (searchViewModel.EmployeeId != 0)
|
|
query = query.Where(x => x.EmployeeId == searchViewModel.EmployeeId);
|
|
|
|
if (!string.IsNullOrWhiteSpace(searchViewModel.StartDate) && !string.IsNullOrWhiteSpace(searchViewModel.EndDate))
|
|
{
|
|
var startDate = searchViewModel.StartDate.ToGeorgianDateTime();
|
|
var endDate = searchViewModel.EndDate.ToGeorgianDateTime();
|
|
|
|
query = query.Where(x => x.LoanGrantDate <= endDate && x.LoanGrantDate >= startDate);
|
|
}
|
|
|
|
|
|
var employeeIds = query.Select(x => x.EmployeeId);
|
|
|
|
var personnelCodes = _companyContext.PersonnelCodeSet.Where(x => x.WorkshopId == searchViewModel.WorkshopId && employeeIds.Contains(x.EmployeeId));
|
|
|
|
|
|
var employees = _companyContext.Employees.Where(x => employeeIds.Contains(x.id)).AsSplitQuery();
|
|
|
|
return query.Select(x => new LoanViewModel()
|
|
{
|
|
Id = x.id,
|
|
WorkshopId = x.WorkshopId,
|
|
EmployeeId = x.EmployeeId,
|
|
EmployeeFullName = employees.FirstOrDefault(e => e.id == x.EmployeeId).FullName,
|
|
PersonnelCode = personnelCodes.FirstOrDefault(e => e.EmployeeId == x.EmployeeId && e.WorkshopId == searchViewModel.WorkshopId).PersonnelCode.ToString(),
|
|
StartDateTime = x.StartInstallmentPayment.ToFarsi(),
|
|
Count = x.Count,
|
|
Amount = x.Amount.ToMoney(),
|
|
AmountPerMonth = x.AmountPerMonth.ToMoney(),
|
|
CreationDate = x.CreationDate
|
|
}).OrderByDescending(x => x.CreationDate).Skip(searchViewModel.PageIndex).AsSplitQuery().Take(30).ToList();
|
|
}
|
|
} |