Наработки UniversityDatabaseImplement
This commit is contained in:
parent
c1a83537dc
commit
86e6525aa0
@ -13,7 +13,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversityClientApp", "Univ
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversityEmpoyeeApp", "UniversityEmpoyeeApp\UniversityEmpoyeeApp.csproj", "{8B5945B5-28E5-4417-965A-A3771F639436}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversityEmpoyeeApp", "UniversityEmpoyeeApp\UniversityEmpoyeeApp.csproj", "{8B5945B5-28E5-4417-965A-A3771F639436}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversityDatabaseImplement", "BankDatabaseImplement\UniversityDatabaseImplement.csproj", "{BE727695-0051-424E-B175-A488D5C5D2D7}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversityDatabaseImplement", "UniversityDatabaseImplement\UniversityDatabaseImplement.csproj", "{BCD0EA34-EC7D-4A7A-AF3E-EFC8D5FB34F3}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
@ -41,10 +41,10 @@ Global
|
|||||||
{8B5945B5-28E5-4417-965A-A3771F639436}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{8B5945B5-28E5-4417-965A-A3771F639436}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{8B5945B5-28E5-4417-965A-A3771F639436}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{8B5945B5-28E5-4417-965A-A3771F639436}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{8B5945B5-28E5-4417-965A-A3771F639436}.Release|Any CPU.Build.0 = Release|Any CPU
|
{8B5945B5-28E5-4417-965A-A3771F639436}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{BE727695-0051-424E-B175-A488D5C5D2D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{BCD0EA34-EC7D-4A7A-AF3E-EFC8D5FB34F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{BE727695-0051-424E-B175-A488D5C5D2D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{BCD0EA34-EC7D-4A7A-AF3E-EFC8D5FB34F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{BE727695-0051-424E-B175-A488D5C5D2D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{BCD0EA34-EC7D-4A7A-AF3E-EFC8D5FB34F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{BE727695-0051-424E-B175-A488D5C5D2D7}.Release|Any CPU.Build.0 = Release|Any CPU
|
{BCD0EA34-EC7D-4A7A-AF3E-EFC8D5FB34F3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
@ -0,0 +1,111 @@
|
|||||||
|
using UniversityContracts.BindingModels;
|
||||||
|
using UniversityContracts.SearchModels;
|
||||||
|
using UniversityContracts.StoragesContracts;
|
||||||
|
using UniversityContracts.ViewModels;
|
||||||
|
using UniversityDatabaseImplement.Models;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace UniversityDatabaseImplement.Implements
|
||||||
|
{
|
||||||
|
public class ClassStorage : IClassStorage
|
||||||
|
{
|
||||||
|
private void CheckSearchModel(ClassSearchModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
throw new ArgumentNullException("Передаваемая модель для поиска равна нулю", nameof(model));
|
||||||
|
if (!model.Id.HasValue && !model.EmployeeId.HasValue && model.PurchasesIds == null)
|
||||||
|
throw new ArgumentException("Все передаваемые поля поисковой модели оказались пусты или равны null");
|
||||||
|
}
|
||||||
|
|
||||||
|
public ClassViewModel? Delete(ClassBindingModel model)
|
||||||
|
{
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
var element = context.Operations.FirstOrDefault(x => x.Id == model.Id);
|
||||||
|
if (element != null)
|
||||||
|
{
|
||||||
|
context.Operations.Remove(element);
|
||||||
|
context.SaveChanges();
|
||||||
|
return element.GetViewModel;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ClassViewModel? GetElement(ClassSearchModel model)
|
||||||
|
{
|
||||||
|
CheckSearchModel(model);
|
||||||
|
if (!model.Id.HasValue)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
return context.Operations
|
||||||
|
.Include(x => x.Employee)
|
||||||
|
.FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id)?.GetViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ClassViewModel> GetFilteredList(ClassSearchModel model)
|
||||||
|
{
|
||||||
|
CheckSearchModel(model);
|
||||||
|
if (model.Id.HasValue)
|
||||||
|
{
|
||||||
|
var res = GetElement(model);
|
||||||
|
return res != null ? new() { res } : new();
|
||||||
|
}
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
|
||||||
|
var query = context.Operations.Include(x => x.Employee);
|
||||||
|
if (model.EmployeeId.HasValue)
|
||||||
|
{
|
||||||
|
|
||||||
|
return query
|
||||||
|
.Where(x => model.EmployeeId == x.EmployeeId)
|
||||||
|
.Select(x => x.GetViewModel)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (model.PurchasesIds != null)
|
||||||
|
return query
|
||||||
|
.Include(x => x.Purchases)!
|
||||||
|
.ThenInclude(x => x.Purchase)
|
||||||
|
.ThenInclude(x => x.Operations)
|
||||||
|
.Where(x => x.Purchases.Any(y => model.PurchasesIds.Contains(y.PurchaseId)))
|
||||||
|
.Select(x => x.GetViewModel)
|
||||||
|
.ToList();
|
||||||
|
return new();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ClassViewModel> GetFullList()
|
||||||
|
{
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
return context.Operations.Include(x => x.Employee)
|
||||||
|
.Select(x => x.GetViewModel)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ClassViewModel? Insert(ClassBindingModel model)
|
||||||
|
{
|
||||||
|
var newOperation = Class.Create(model);
|
||||||
|
if (newOperation == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
context.Operations.Add(newOperation);
|
||||||
|
context.SaveChanges();
|
||||||
|
return newOperation.GetViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ClassViewModel? Update(ClassBindingModel model)
|
||||||
|
{
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
var car = context.Operations.FirstOrDefault(x => x.Id == model.Id);
|
||||||
|
if (car == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
car.Update(model);
|
||||||
|
context.SaveChanges();
|
||||||
|
return car.GetViewModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
using UniversityContracts.BindingModels;
|
||||||
|
using UniversityContracts.SearchModels;
|
||||||
|
using UniversityContracts.StoragesContracts;
|
||||||
|
using UniversityContracts.ViewModels;
|
||||||
|
using UniversityDatabaseImplement;
|
||||||
|
using UniversityDatabaseImplement.Models;
|
||||||
|
|
||||||
|
namespace UiversityDatabaseImplement.Implements
|
||||||
|
{
|
||||||
|
public class ClientStorage : IClassStorage
|
||||||
|
{
|
||||||
|
private void CheckSearchModel(ClientSearchModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
throw new ArgumentNullException("Передаваемая модель для поиска равна нулю", nameof(model));
|
||||||
|
if (!model.Id.HasValue && string.IsNullOrEmpty(model.PhoneNumber) && string.IsNullOrEmpty(model.Password))
|
||||||
|
throw new ArgumentException("Все передаваемые поля поисковой модели оказались пусты или равны null");
|
||||||
|
if (!model.Id.HasValue && (string.IsNullOrEmpty(model.PhoneNumber) && !string.IsNullOrEmpty(model.Password)))
|
||||||
|
throw new ArgumentException("Для нахождения соответствующего пользователя вместе с паролем нужен логин");
|
||||||
|
}
|
||||||
|
public ClassViewModel? GetElement(ClientSearchModel model)
|
||||||
|
{
|
||||||
|
CheckSearchModel(model);
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
|
||||||
|
return context.Clients.FirstOrDefault(x => x.PhoneNumber.Equals(model.PhoneNumber) && (string.IsNullOrEmpty(model.Password) || x.Password.Equals(model.Password)))?.GetViewModel;
|
||||||
|
}
|
||||||
|
public ClassViewModel? Insert(ClientBindingModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
var newClient = Client.Create(model);
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
context.Clients.Add(newClient);
|
||||||
|
context.SaveChanges();
|
||||||
|
return newClient.GetViewModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,96 @@
|
|||||||
|
using UniversityContracts.BindingModels;
|
||||||
|
using UniversityContracts.SearchModels;
|
||||||
|
using UniversityContracts.StoragesContracts;
|
||||||
|
using UniversityContracts.ViewModels;
|
||||||
|
using UniversityDatabaseImplement.Models;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace UniversityDatabaseImplement.Implements
|
||||||
|
{
|
||||||
|
public class CostStorage : ICostStorage
|
||||||
|
{
|
||||||
|
private void CheckSearchModel(CostSearchModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
throw new ArgumentNullException("Передаваемая модель для поиска равна нулю", nameof(model));
|
||||||
|
if (!model.Id.HasValue && !model.EmployeeId.HasValue)
|
||||||
|
throw new ArgumentException("Все передаваемые поля поисковой модели оказались пусты или равны null");
|
||||||
|
}
|
||||||
|
public CostViewModel? Delete(CostBindingModel model)
|
||||||
|
{
|
||||||
|
using var context = new BankDB();
|
||||||
|
var element = context.Costs.FirstOrDefault(x => x.Id == model.Id);
|
||||||
|
if (element != null)
|
||||||
|
{
|
||||||
|
context.Costs.Remove(element);
|
||||||
|
context.SaveChanges();
|
||||||
|
return element.GetViewModel;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CostViewModel? GetElement(CostSearchModel model)
|
||||||
|
{
|
||||||
|
CheckSearchModel(model);
|
||||||
|
using var context = new BankDB();
|
||||||
|
if (!model.Id.HasValue)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return context.Costs
|
||||||
|
.Include(cost => cost.Employee)
|
||||||
|
.Include(cost => cost.Purchases).ThenInclude(costByPurchase => costByPurchase.Purchase)
|
||||||
|
.FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id)?.GetViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<CostViewModel> GetFilteredList(CostSearchModel model)
|
||||||
|
{
|
||||||
|
CheckSearchModel(model);
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
return context.Costs
|
||||||
|
.Include(cost => cost.Employee)
|
||||||
|
.Include(cost => cost.Purchases).ThenInclude(costByPurchase => costByPurchase.Purchase)
|
||||||
|
.Where(x => x.EmployeeId == model.EmployeeId || x.Id == model.Id)
|
||||||
|
.Select(x => x.GetViewModel)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<CostViewModel> GetFullList()
|
||||||
|
{
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
return context.Costs
|
||||||
|
.Include(cost => cost.Employee)
|
||||||
|
.Include(cost => cost.Purchases).ThenInclude(costByPurchase => costByPurchase.Purchase)
|
||||||
|
.Select(x => x.GetViewModel)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public CostViewModel? Insert(CostBindingModel model)
|
||||||
|
{
|
||||||
|
var newCost = Cost.Create(model);
|
||||||
|
if (newCost == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
|
||||||
|
context.Costs.Add(newCost);
|
||||||
|
context.SaveChanges();
|
||||||
|
return newCost.GetViewModel;
|
||||||
|
}
|
||||||
|
public CostViewModel? Update(CostBindingModel model)
|
||||||
|
{
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
var cost = context.Costs.FirstOrDefault(x => x.Id == model.Id);
|
||||||
|
if (cost == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
cost.Update(model);
|
||||||
|
context.SaveChanges();
|
||||||
|
cost.UpdatePurchases(context, model);
|
||||||
|
context.SaveChanges();
|
||||||
|
return cost.GetViewModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
using UniversityContracts.BindingModels;
|
||||||
|
using UniversityContracts.SearchModels;
|
||||||
|
using UniversityContracts.StoragesContracts;
|
||||||
|
using UniversityContracts.ViewModels;
|
||||||
|
using UniversityDatabaseImplement.Models;
|
||||||
|
|
||||||
|
namespace UniversityDatabaseImplement.Implements
|
||||||
|
{
|
||||||
|
public class EmployeeStorage : IEmployeeStorage
|
||||||
|
{
|
||||||
|
private void CheckSearchModel(EmployeeSearchModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
throw new ArgumentNullException("Передаваемая модель для поиска равна нулю", nameof(model));
|
||||||
|
if (!model.Id.HasValue && string.IsNullOrEmpty(model.PhoneNumber) && string.IsNullOrEmpty(model.Password))
|
||||||
|
throw new ArgumentException("Все передаваемые поля поисковой модели оказались пусты или равны null");
|
||||||
|
if (!model.Id.HasValue && (string.IsNullOrEmpty(model.PhoneNumber) && !string.IsNullOrEmpty(model.Password)))
|
||||||
|
throw new ArgumentException("Для нахождения соответствующего пользователя вместе с паролем нужен логин");
|
||||||
|
}
|
||||||
|
public EmployeeViewModel? GetElement(EmployeeSearchModel model)
|
||||||
|
{
|
||||||
|
CheckSearchModel(model);
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
|
||||||
|
return context.Employees
|
||||||
|
.FirstOrDefault(x => x.PhoneNumber.Equals(model.PhoneNumber) && (string.IsNullOrEmpty(model.Password) || x.Password.Equals(model.Password)))?.GetViewModel;
|
||||||
|
}
|
||||||
|
public EmployeeViewModel? Insert(EmployeeBindingModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
var newEmployee = Employee.Create(model);
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
context.Employees.Add(newEmployee);
|
||||||
|
context.SaveChanges();
|
||||||
|
return newEmployee.GetViewModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,76 @@
|
|||||||
|
using UniversityContracts.BindingModels;
|
||||||
|
using UniversityContracts.SearchModels;
|
||||||
|
using UniversityContracts.StoragesContracts;
|
||||||
|
using UniversityContracts.ViewModels;
|
||||||
|
using UniversityDatabaseImplement.Models;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Query;
|
||||||
|
|
||||||
|
namespace UniversityDatabaseImplement.Implements
|
||||||
|
{
|
||||||
|
public class PaymentStorage : IPaymentStorage
|
||||||
|
{
|
||||||
|
private static IIncludableQueryable<Payment, Class?> Payments(UniversityDB context)
|
||||||
|
=> context.Payments.Include(x => x.OperationByPurchase).ThenInclude(x => x.Operation);
|
||||||
|
|
||||||
|
public List<PaymentViewModel> GetFullList()
|
||||||
|
{
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
return Payments(context)
|
||||||
|
.Select(x => x.GetViewModel)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PaymentViewModel> GetFilteredList(PaymentSearchModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(model), "Получена пустая поисковая модель");
|
||||||
|
}
|
||||||
|
if (model.DateFrom.HasValue && !model.DateTo.HasValue || model.DateTo.HasValue && !model.DateFrom.HasValue)
|
||||||
|
{
|
||||||
|
throw new ArgumentException("Получена поисковая модель только с началом или концом периода");
|
||||||
|
}
|
||||||
|
if (!model.DateFrom.HasValue && !model.OperationId.HasValue)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(model.OperationId), "Получена поисковая модель без OperationId");
|
||||||
|
|
||||||
|
}
|
||||||
|
if (!model.DateFrom.HasValue && !model.PurchaseId.HasValue)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(model.PurchaseId), "Получена поисковая модель без PurchaseId");
|
||||||
|
}
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
if (model.DateFrom.HasValue)
|
||||||
|
return Payments(context)
|
||||||
|
.Where(x => model.DateFrom.Value <= x.Date && x.Date <= model.DateTo.Value)
|
||||||
|
.Select(x => x.GetViewModel)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
return Payments(context)
|
||||||
|
.Where(x => x.OperationByPurchase != null &&
|
||||||
|
x.OperationByPurchase.OperationId == model.OperationId &&
|
||||||
|
x.OperationByPurchase.PurchaseId == model.PurchaseId)
|
||||||
|
.Select(x => x.GetViewModel)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
public PaymentViewModel? GetElement(PaymentSearchModel model)
|
||||||
|
{
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
return Payments(context)
|
||||||
|
.FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id))?.GetViewModel;
|
||||||
|
}
|
||||||
|
public PaymentViewModel? Insert(PaymentBindingModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
var newPayment = Payment.Create(model);
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
context.Payments.Add(newPayment);
|
||||||
|
context.SaveChanges();
|
||||||
|
return newPayment.GetViewModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,151 @@
|
|||||||
|
using System.Security.Cryptography.X509Certificates;
|
||||||
|
using UniversityContracts.BindingModels;
|
||||||
|
using UniversityContracts.SearchModels;
|
||||||
|
using UniversityContracts.StoragesContracts;
|
||||||
|
using UniversityContracts.ViewModels;
|
||||||
|
using UniversityDatabaseImplement.Models;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace UniversityDatabaseImplement.Implements
|
||||||
|
{
|
||||||
|
public class PurchaseStorage : IPurchaseStorage
|
||||||
|
{
|
||||||
|
private void CheckSearchModel(PurchaseSearchModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
throw new ArgumentNullException("Передаваемая модель для поиска равна нулю", nameof(model));
|
||||||
|
if (!model.Id.HasValue && !model.ClientId.HasValue && !model.DateFrom.HasValue && !model.DateTo.HasValue && model.OperationsIds == null)
|
||||||
|
throw new ArgumentException("Все передаваемые поля поисковой модели оказались пусты или равны null");
|
||||||
|
if (model.DateFrom.HasValue != model.DateTo.HasValue)
|
||||||
|
throw new ArgumentException($"Не указано начало {model.DateFrom} или конец {model.DateTo} периода для поиска по дате.");
|
||||||
|
}
|
||||||
|
public PurchaseViewModel? Delete(PurchaseBindingModel model)
|
||||||
|
{
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
var element = context.Purchases.FirstOrDefault(x => x.Id == model.Id);
|
||||||
|
if (element != null)
|
||||||
|
{
|
||||||
|
context.Purchases.Remove(element);
|
||||||
|
context.SaveChanges();
|
||||||
|
return element.GetViewModel;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public List<PaymentViewModel> GetPaymentsFromPurchaseAndOperation(PurchaseSearchModel modelPurchase, ClassSearchModel modelOperation)
|
||||||
|
{
|
||||||
|
if (!modelPurchase.Id.HasValue)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(modelPurchase), "Получена поисковая модель без Id");
|
||||||
|
}
|
||||||
|
if (!modelOperation.Id.HasValue)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(modelOperation), "Получена поисковая модель без Id");
|
||||||
|
}
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
var carByPurchase = context.OperationByPurchases
|
||||||
|
.Include(x => x.Payments)
|
||||||
|
.FirstOrDefault(x => x.OperationId == modelOperation.Id && x.PurchaseId == modelPurchase.Id);
|
||||||
|
if (carByPurchase?.Payments == null)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException(
|
||||||
|
$"Не существует связи между данной операции(Id={modelOperation.Id}) и покупкой(Id={modelPurchase.Id})");
|
||||||
|
}
|
||||||
|
return carByPurchase.Payments.Select(payment => payment.GetViewModel).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public PurchaseViewModel? GetElement(PurchaseSearchModel model)
|
||||||
|
{
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
if (!model.Id.HasValue)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return context.Purchases
|
||||||
|
.Include(x => x.Client)
|
||||||
|
.Include(x => x.Operations)
|
||||||
|
.FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id)?.GetViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PurchaseViewModel> GetFilteredList(PurchaseSearchModel model)
|
||||||
|
{
|
||||||
|
CheckSearchModel(model);
|
||||||
|
if (model.Id.HasValue)
|
||||||
|
{
|
||||||
|
var res = GetElement(model);
|
||||||
|
return res != null ? new() { res } : new();
|
||||||
|
}
|
||||||
|
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
|
||||||
|
var query = context.Purchases.Include(x => x.Client);
|
||||||
|
IQueryable<Purchase>? resultQuery = null;
|
||||||
|
if (model.ClientId.HasValue)
|
||||||
|
{
|
||||||
|
|
||||||
|
return query
|
||||||
|
.Where(x => model.ClientId == x.ClientId)
|
||||||
|
.Select(x => x.GetViewModel)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (model.DateTo.HasValue)
|
||||||
|
resultQuery = query
|
||||||
|
.Include(x => x.Operations)
|
||||||
|
.ThenInclude(x => x.Operation)
|
||||||
|
.Include(x => x.Costs)!
|
||||||
|
.ThenInclude(x => x.Cost)
|
||||||
|
.Where(x => model.DateFrom <= x.DatePurchase && x.DatePurchase <= model.DateTo);
|
||||||
|
|
||||||
|
else if (model.OperationsIds != null)
|
||||||
|
resultQuery = query
|
||||||
|
.Where(x => x.Operations.Any(x => model.OperationsIds.Contains(x.OperationId)))
|
||||||
|
.Include(x => x.Operations)
|
||||||
|
.ThenInclude(x => x.Operation);
|
||||||
|
|
||||||
|
return resultQuery?
|
||||||
|
.Select(x => x.GetViewModel)
|
||||||
|
.ToList() ?? new();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PurchaseViewModel> GetFullList()
|
||||||
|
{
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
return context.Purchases
|
||||||
|
.Include(x => x.Client)
|
||||||
|
.Include(x => x.Operations)
|
||||||
|
.Select(x => x.GetViewModel)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public PurchaseViewModel? Insert(PurchaseBindingModel model)
|
||||||
|
{
|
||||||
|
var newPurchase = Purchase.Create(model);
|
||||||
|
if (newPurchase == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
context.Purchases.Add(newPurchase);
|
||||||
|
context.SaveChanges();
|
||||||
|
newPurchase.UpdateOperations(context, model);
|
||||||
|
context.SaveChanges();
|
||||||
|
return newPurchase.GetViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PurchaseViewModel? Update(PurchaseBindingModel model)
|
||||||
|
{
|
||||||
|
using var context = new UniversityDB();
|
||||||
|
var purchase = context.Purchases.FirstOrDefault(x => x.Id == model.Id);
|
||||||
|
if (purchase == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
purchase.Update(model);
|
||||||
|
purchase.UpdateOperations(context, model);
|
||||||
|
context.SaveChanges();
|
||||||
|
return purchase.GetViewModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using UniversityDataModels.ProxyModels;
|
||||||
|
|
||||||
|
namespace UniversityDatabaseImplement.Models
|
||||||
|
{
|
||||||
|
public class ClassByPurchase : ClassByPurchaseModel
|
||||||
|
{
|
||||||
|
[Required]
|
||||||
|
public Class? Class { get; private set; }
|
||||||
|
[Required]
|
||||||
|
public Purchase? Purchase { get; private set; }
|
||||||
|
[Required]
|
||||||
|
public List<Payment>? Payments { get; private set; }
|
||||||
|
}
|
||||||
|
}
|
62
University/UniversityDatabaseImplement/Models/Class.cs
Normal file
62
University/UniversityDatabaseImplement/Models/Class.cs
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
using UniversityContracts.BindingModels;
|
||||||
|
using UniversityContracts.SearchModels;
|
||||||
|
using UniversityContracts.ViewModels;
|
||||||
|
using UniversityDatabaseImplement.Implements;
|
||||||
|
using UniversityDataModels;
|
||||||
|
using UniversityDataModels.ProxyModels;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace UniversityDatabaseImplement.Models
|
||||||
|
{
|
||||||
|
public class Class : IClassModel
|
||||||
|
{
|
||||||
|
[Required]
|
||||||
|
public int EmployeeId { get; private set; }
|
||||||
|
[Required]
|
||||||
|
public string Model { get; private set; } = string.Empty;
|
||||||
|
[Required]
|
||||||
|
public double Price { get; private set; }
|
||||||
|
[Required]
|
||||||
|
public string Mark { get; private set; } = string.Empty;
|
||||||
|
|
||||||
|
public int Id { get; private set; }
|
||||||
|
[Required]
|
||||||
|
public Employee? Employee { get; private set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public List<ClassByPurchase> Purchases { get; private set; } = new();
|
||||||
|
|
||||||
|
public static Class Create(ClassBindingModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new Class()
|
||||||
|
{
|
||||||
|
EmployeeId = model.EmployeeId,
|
||||||
|
Model = model.Model,
|
||||||
|
Price = model.Price,
|
||||||
|
Mark = model.Mark,
|
||||||
|
Id = model.Id,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public ClassViewModel GetViewModel => new()
|
||||||
|
{
|
||||||
|
EmployeePhoneNumber = Employee?.PhoneNumber??string.Empty,
|
||||||
|
EmployeeId = EmployeeId,
|
||||||
|
Model = Model,
|
||||||
|
Price = Price,
|
||||||
|
Mark = Mark,
|
||||||
|
Id = Id,
|
||||||
|
Purchases = Purchases.Select(x=>x.Purchase?.GetViewModel2).ToList(),
|
||||||
|
};
|
||||||
|
|
||||||
|
public void Update(ClassBindingModel model)
|
||||||
|
{
|
||||||
|
Price = model.Price;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
57
University/UniversityDatabaseImplement/Models/Client.cs
Normal file
57
University/UniversityDatabaseImplement/Models/Client.cs
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
using UniversityContracts.BindingModels;
|
||||||
|
using UniversityContracts.ViewModels;
|
||||||
|
using UniversityDataModels;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace UniversityDatabaseImplement.Models
|
||||||
|
{
|
||||||
|
public class Client : IClientModel
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
[Required]
|
||||||
|
public string FirstName { get; private set; } = string.Empty;
|
||||||
|
[Required]
|
||||||
|
public string LastName { get; private set; } = string.Empty;
|
||||||
|
|
||||||
|
public string? MiddleName { get; private set; }
|
||||||
|
[Required]
|
||||||
|
public string Address { get; private set; } = string.Empty;
|
||||||
|
[Required]
|
||||||
|
public string PhoneNumber { get; private set; } = string.Empty;
|
||||||
|
[Required]
|
||||||
|
public string Email { get; set; } = string.Empty;
|
||||||
|
[Required]
|
||||||
|
public string Password { get; private set; } = string.Empty;
|
||||||
|
[Required]
|
||||||
|
public List<Purchase>? Purchases { get; private set; }
|
||||||
|
|
||||||
|
public static Client Create(ClientBindingModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new Client()
|
||||||
|
{
|
||||||
|
FirstName = model.FirstName,
|
||||||
|
LastName = model.LastName,
|
||||||
|
MiddleName = model.MiddleName,
|
||||||
|
PhoneNumber = model.PhoneNumber,
|
||||||
|
Password = model.Password,
|
||||||
|
Id = model.Id,
|
||||||
|
Email = model.Email,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public ClientViewModel GetViewModel => new()
|
||||||
|
{
|
||||||
|
FirstName = FirstName,
|
||||||
|
LastName = LastName,
|
||||||
|
MiddleName = MiddleName,
|
||||||
|
PhoneNumber =PhoneNumber,
|
||||||
|
Password = Password,
|
||||||
|
Id = Id,
|
||||||
|
Email = Email,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
81
University/UniversityDatabaseImplement/Models/Cost.cs
Normal file
81
University/UniversityDatabaseImplement/Models/Cost.cs
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
using UniversityContracts.BindingModels;
|
||||||
|
using UniversityContracts.ViewModels;
|
||||||
|
using UniversityDataModels;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using UniversityDataModels.ProxyModels;
|
||||||
|
|
||||||
|
namespace UniversityDatabaseImplement.Models
|
||||||
|
{
|
||||||
|
public class Cost : ICostModel
|
||||||
|
{
|
||||||
|
[Required]
|
||||||
|
public int EmployeeId { get; private set; }
|
||||||
|
[Required]
|
||||||
|
public string NameOfCost { get; private set; } = string.Empty;
|
||||||
|
public int Id { get; private set; }
|
||||||
|
[Required]
|
||||||
|
public double Price { get; private set; }
|
||||||
|
private Dictionary<int, CostByPurchaseModel>? _cachedPurchases;
|
||||||
|
public Dictionary<int, CostByPurchaseModel> PurchasesModels => _cachedPurchases ??= Purchases.Select(x => (CostByPurchaseModel)x).ToDictionary(x => x.PurchaseId, x => x);
|
||||||
|
[Required]
|
||||||
|
public Employee? Employee { get; private set; }
|
||||||
|
[Required]
|
||||||
|
public List<CostByPurchase> Purchases { get; private set; } = new();
|
||||||
|
|
||||||
|
public static Cost Create(CostBindingModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new Cost()
|
||||||
|
{
|
||||||
|
EmployeeId = model.EmployeeId,
|
||||||
|
NameOfCost = model.NameOfCost,
|
||||||
|
Price = model.Price,
|
||||||
|
//PurchasesModels = model.PurchasesModels,
|
||||||
|
Id = model.Id
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public CostViewModel GetViewModel => new()
|
||||||
|
{
|
||||||
|
PhoneNumber = Employee?.PhoneNumber??string.Empty,
|
||||||
|
PurchaseModels = PurchasesModels,
|
||||||
|
EmployeeId = EmployeeId,
|
||||||
|
NameOfCost = NameOfCost,
|
||||||
|
Price = Price,
|
||||||
|
Id = Id
|
||||||
|
};
|
||||||
|
|
||||||
|
public void Update(CostBindingModel model)
|
||||||
|
{
|
||||||
|
NameOfCost = model.NameOfCost;
|
||||||
|
Price = model.Price;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Привязка статей затрат к покупкам
|
||||||
|
/// </summary>
|
||||||
|
public void UpdatePurchases(UniversityDB context, CostBindingModel model)
|
||||||
|
{
|
||||||
|
var oldPurchases = context.CostByPurchases.Where(x => x.CostId == model.Id).ToDictionary(x => x.PurchaseId, x => x);
|
||||||
|
var newPurchases = model.PurchasesModels.ToDictionary(
|
||||||
|
x => x.Key,
|
||||||
|
x => new CostByPurchase()
|
||||||
|
{
|
||||||
|
CostId = model.Id,
|
||||||
|
PurchaseId = x.Key,
|
||||||
|
Count = x.Value.Count,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
context.RemoveRange(oldPurchases.Where(x => !newPurchases.ContainsKey(x.Key)).Select(x => x.Value));
|
||||||
|
context.AddRange (newPurchases.Where(x => !oldPurchases.ContainsKey(x.Key)).Select(x => x.Value));
|
||||||
|
oldPurchases.Where(x => newPurchases.ContainsKey(x.Key))
|
||||||
|
.Select(x => x.Value).ToList()
|
||||||
|
.ForEach(x => x.Count = newPurchases[x.PurchaseId].Count);
|
||||||
|
context.SaveChanges();
|
||||||
|
_cachedPurchases = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using UniversityDataModels.ProxyModels;
|
||||||
|
|
||||||
|
namespace UniversityDatabaseImplement.Models
|
||||||
|
{
|
||||||
|
public class CostByPurchase : CostByPurchaseModel
|
||||||
|
{
|
||||||
|
[Required]
|
||||||
|
public Cost? Cost { get; private set; }
|
||||||
|
[Required]
|
||||||
|
public Purchase? Purchase { get; private set; }
|
||||||
|
}
|
||||||
|
}
|
60
University/UniversityDatabaseImplement/Models/Employee.cs
Normal file
60
University/UniversityDatabaseImplement/Models/Employee.cs
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
using UniversityContracts.BindingModels;
|
||||||
|
using UniversityContracts.ViewModels;
|
||||||
|
using UniversityDataModels;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace UniversityDatabaseImplement.Models
|
||||||
|
{
|
||||||
|
public class Employee : IEmployeeModel
|
||||||
|
{
|
||||||
|
public int Id { get; private set; }
|
||||||
|
[Required]
|
||||||
|
public string FirstName { get; private set; } = string.Empty;
|
||||||
|
[Required]
|
||||||
|
public string LastName { get; private set; } = string.Empty;
|
||||||
|
public string? MiddleName { get; private set; }
|
||||||
|
[Required]
|
||||||
|
public string Post { get; private set; } = string.Empty;
|
||||||
|
[Required]
|
||||||
|
public string PhoneNumber { get; private set; } = string.Empty;
|
||||||
|
[Required]
|
||||||
|
public string Password { get; private set; } = string.Empty;
|
||||||
|
[Required]
|
||||||
|
public string Email { get; set; } = string.Empty;
|
||||||
|
[Required]
|
||||||
|
public List<Class>? Class { get; private set; }
|
||||||
|
[Required]
|
||||||
|
public List<Cost>? Costs { get; private set; }
|
||||||
|
|
||||||
|
public static Employee Create(EmployeeBindingModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new Employee()
|
||||||
|
{
|
||||||
|
FirstName = model.FirstName,
|
||||||
|
LastName = model.LastName,
|
||||||
|
MiddleName = model.MiddleName,
|
||||||
|
PhoneNumber = model.PhoneNumber,
|
||||||
|
Password = model.Password,
|
||||||
|
Id = model.Id,
|
||||||
|
Post = model.Post,
|
||||||
|
Email = model.Email,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public EmployeeViewModel GetViewModel => new()
|
||||||
|
{
|
||||||
|
FirstName = FirstName,
|
||||||
|
LastName = LastName,
|
||||||
|
MiddleName = MiddleName,
|
||||||
|
PhoneNumber = PhoneNumber,
|
||||||
|
Password = Password,
|
||||||
|
Id = Id,
|
||||||
|
Post = Post,
|
||||||
|
Email = Email,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
51
University/UniversityDatabaseImplement/Models/Payment.cs
Normal file
51
University/UniversityDatabaseImplement/Models/Payment.cs
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
using UniversityContracts.BindingModels;
|
||||||
|
using UniversityContracts.ViewModels;
|
||||||
|
using UniversityDataModels;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
|
namespace UniversityDatabaseImplement.Models
|
||||||
|
{
|
||||||
|
public class Payment : IPaymentModel
|
||||||
|
{
|
||||||
|
[Required]
|
||||||
|
public int OperationByPurchaseId { get; private set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public DateOnly Date { get; private set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public double PaidPrice { get; private set; }
|
||||||
|
|
||||||
|
public int Id { get; private set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public ClassByPurchase? ClassByPurchase { get; private set; }
|
||||||
|
|
||||||
|
public static Payment Create(PaymentBindingModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new Payment()
|
||||||
|
{
|
||||||
|
|
||||||
|
Date = model.Date,
|
||||||
|
PaidPrice = model.PaidPrice,
|
||||||
|
Id = model.Id,
|
||||||
|
OperationByPurchaseId = model.OperationByPurchaseId,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
public PaymentViewModel GetViewModel => new()
|
||||||
|
{
|
||||||
|
Operation = OperationByPurchase?.Operation?.GetViewModel,
|
||||||
|
OperationByPurchase = OperationByPurchase,
|
||||||
|
FullPrice = OperationByPurchase?.Operation?.Price ?? -1,
|
||||||
|
Date = Date,
|
||||||
|
PaidPrice = PaidPrice,
|
||||||
|
Id = Id,
|
||||||
|
OperationByPurchaseId = OperationByPurchaseId,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
95
University/UniversityDatabaseImplement/Models/Purchase.cs
Normal file
95
University/UniversityDatabaseImplement/Models/Purchase.cs
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
using UniversityContracts.BindingModels;
|
||||||
|
using UniversityContracts.ViewModels;
|
||||||
|
using UniversityDataModels;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
using System.Linq.Expressions;
|
||||||
|
using UniversityDataModels.ProxyModels;
|
||||||
|
|
||||||
|
namespace UniversityDatabaseImplement.Models
|
||||||
|
{
|
||||||
|
public class Purchase : IPurchaseModel
|
||||||
|
{
|
||||||
|
public int ClientId { get; private set; }
|
||||||
|
public DateOnly DatePurchase { get; private set; }
|
||||||
|
private Dictionary<int, ClassByPurchaseModel>? _cachedOperations;
|
||||||
|
[NotMapped]
|
||||||
|
public Dictionary<int, ClassByPurchaseModel> ClassModel => _cachedOperations ??= Class.Select(x => (ClassByPurchaseModel)x).ToDictionary(x => x.ClassId, x => x);
|
||||||
|
[NotMapped]
|
||||||
|
public List<CostByPurchaseModel>? CostsModel => null;
|
||||||
|
public int Id { get; private set; }
|
||||||
|
[Required]
|
||||||
|
public Client? Client { get; private set; }
|
||||||
|
[Required]
|
||||||
|
public List<ClassByPurchase> Operations { get; private set; } = new();
|
||||||
|
[Required]
|
||||||
|
public List<CostByPurchase> Costs { get; private set; } = new();
|
||||||
|
|
||||||
|
public static Purchase Create(PurchaseBindingModel model)
|
||||||
|
{
|
||||||
|
return new Purchase()
|
||||||
|
{
|
||||||
|
ClientId = model.ClientId,
|
||||||
|
Id = model.Id,
|
||||||
|
DatePurchase = model.DatePurchase,
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
public void Update(PurchaseBindingModel model)
|
||||||
|
{
|
||||||
|
DatePurchase = model.DatePurchase;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PurchaseViewModel GetViewModel => new()
|
||||||
|
{
|
||||||
|
OperationsModel = OperationsModel,
|
||||||
|
Id = Id,
|
||||||
|
DatePurchase = DatePurchase,
|
||||||
|
ClientId = ClientId,
|
||||||
|
ClientPhoneNumber = Client?.PhoneNumber ?? string.Empty,
|
||||||
|
|
||||||
|
CostViewModels = Costs?
|
||||||
|
.Select(x => x.Cost.GetViewModel)
|
||||||
|
.ToList() ?? new(),
|
||||||
|
OperationViewModels = Operations?
|
||||||
|
.Select(x => x.Operation?.GetViewModel)
|
||||||
|
.ToList() ?? new()
|
||||||
|
};
|
||||||
|
|
||||||
|
public PurchaseViewModel GetViewModel2 => new()
|
||||||
|
{
|
||||||
|
OperationsModel = OperationsModel,
|
||||||
|
Id = Id,
|
||||||
|
DatePurchase = DatePurchase,
|
||||||
|
ClientId = ClientId,
|
||||||
|
ClientPhoneNumber = Client?.PhoneNumber ?? string.Empty,
|
||||||
|
|
||||||
|
CostViewModels = Costs?
|
||||||
|
.Select(x => x.Cost.GetViewModel)
|
||||||
|
.ToList() ?? new()
|
||||||
|
};
|
||||||
|
|
||||||
|
public void UpdateOperations(UniversityDB context, PurchaseBindingModel model)
|
||||||
|
{
|
||||||
|
var oldOperations = context.OperationByPurchases.Where(x => x.PurchaseId == model.Id).ToDictionary(x => x.OperationId, x => x);
|
||||||
|
var newOperations = model.OperationsModel.ToDictionary(
|
||||||
|
x => x.Key,
|
||||||
|
x => new ClassnByPurchase()
|
||||||
|
{
|
||||||
|
OperationId = x.Key,
|
||||||
|
PurchaseId = Id,
|
||||||
|
CountOperations = x.Value.CountOperations
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
context.RemoveRange(oldOperations.Where(x => !newOperations.ContainsKey(x.Key)).Select(x => x.Value));
|
||||||
|
context.AddRange (newOperations.Where(x => !oldOperations.ContainsKey(x.Key)).Select(x => x.Value));
|
||||||
|
oldOperations
|
||||||
|
.Where(x => newOperations.ContainsKey(x.Key))
|
||||||
|
.Select(x => x.Value).ToList()
|
||||||
|
.ForEach(x => x.CountOperations = newOperations[x.OperationId].CountOperations);
|
||||||
|
context.SaveChanges();
|
||||||
|
_cachedOperations = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
33
University/UniversityDatabaseImplement/UniversityDB.cs
Normal file
33
University/UniversityDatabaseImplement/UniversityDB.cs
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
using UniversityDatabaseImplement.Models;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace UniversityDatabaseImplement
|
||||||
|
|
||||||
|
{
|
||||||
|
public class UniversityDB: DbContext
|
||||||
|
{
|
||||||
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
|
{
|
||||||
|
if (optionsBuilder.IsConfigured == false)
|
||||||
|
{
|
||||||
|
optionsBuilder.UseNpgsql(@"
|
||||||
|
Host=localhost;
|
||||||
|
Port=5432;
|
||||||
|
Database=BankFullNew;
|
||||||
|
Username=postgres;
|
||||||
|
Password=55256636a;");
|
||||||
|
}
|
||||||
|
base.OnConfiguring(optionsBuilder);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual DbSet<Client> Clients { set; get; }
|
||||||
|
public virtual DbSet<Cost> Costs { set; get; }
|
||||||
|
public virtual DbSet<CostByPurchase> CostByPurchases { set; get; }
|
||||||
|
public virtual DbSet<Employee> Employees { set; get; }
|
||||||
|
public virtual DbSet<Operation> Operations { set; get; }
|
||||||
|
public virtual DbSet<OperationByPurchase> OperationByPurchases { set; get; }
|
||||||
|
public virtual DbSet<Payment> Payments { set; get; }
|
||||||
|
public virtual DbSet<Purchase> Purchases { set; get; }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
</Project>
|
Loading…
Reference in New Issue
Block a user