diff --git a/JurassicZoo/ZooBusinessLogic/BusinessLogics/EmployeeImitateLogic.cs b/JurassicZoo/ZooBusinessLogic/BusinessLogics/EmployeeImitateLogic.cs
new file mode 100644
index 0000000..f9288a2
--- /dev/null
+++ b/JurassicZoo/ZooBusinessLogic/BusinessLogics/EmployeeImitateLogic.cs
@@ -0,0 +1,131 @@
+using ZooContracts.BusinessLogicsContracts;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ZooContracts.BusinessLogicsContracts;
+
+namespace ZooBusinessLogic.BusinessLogics
+{
+ ///
+ /// Замена сотрудника
+ ///
+ public class EmployeeRoleImitationaLogic
+ {
+ private readonly IEmployeeLogic _employeeLogic;
+ private readonly IReserveLogic _ReserveLogic;
+ private readonly ICostLogic _CostLogic;
+ private readonly IRouteLogic _RouteLogic;
+ private readonly IRouteCostLogic _RouteCostLogic;
+
+ public EmployeeRoleImitationaLogic(IEmployeeLogic employeeLogic,
+ IReserveLogic ReserveLogic, ICostLogic CostLogic,
+ IRouteLogic RouteLogic, IRouteCostLogic RouteCostLogic)
+ {
+ _employeeLogic = employeeLogic;
+ _ReserveLogic = ReserveLogic;
+ _CostLogic = CostLogic;
+ _RouteLogic = RouteLogic;
+ _RouteCostLogic = RouteCostLogic;
+ }
+ private bool GenerateEmployeeData()
+ {
+ if (_employeeLogic.ReadList(null)?.Count != 0)
+ {
+ return false;
+ }
+ using (StreamReader sr = new("employees.txt"))
+ {
+ string? currentString;
+ while ((currentString = sr.ReadLine()) != null)
+ {
+ var employeeRecData = currentString.Split(',');
+ _employeeLogic.Create(new()
+ {
+ EmployeeEmail = employeeRecData[0],
+ EmployeePassword = employeeRecData[1],
+ EmployeeName = employeeRecData[2],
+ EmployeePhone = employeeRecData[3]
+ });
+ }
+ }
+ return true;
+ }
+ private bool GenerateReserveData()
+ {
+ if (_ReserveLogic.ReadList(null)?.Count != 0)
+ {
+ return false;
+ }
+ using (StreamReader sr = new("Reserves.txt"))
+ {
+ string? currentString;
+ while ((currentString = sr.ReadLine()) != null)
+ {
+ var ReserveRecData = currentString.Split(',');
+ _ReserveLogic.Create(new()
+ {
+ ReserveName = Convert.ToString(ReserveRecData[0]),
+ ReservePrice = Convert.ToDouble(ReserveRecData[1])
+ });
+ }
+ }
+ return true;
+ }
+ public bool GenerateCost()
+ {
+ if (_CostLogic.ReadList(null)?.Count != 0)
+ {
+ return false;
+ }
+ using (StreamReader sr = new("Costs.txt"))
+ {
+ string? currentString;
+ while ((currentString = sr.ReadLine()) != null)
+ {
+ var CostRecData = currentString.Split(',');
+ _CostLogic.Create(new()
+ {
+ CostName = Convert.ToString(CostRecData[0]),
+ Sum = Convert.ToDouble(CostRecData[1]),
+ Count = Convert.ToInt32(CostRecData[2]),
+ EmployeeId = Convert.ToInt32(CostRecData[3])
+ });
+ }
+ }
+ return true;
+ }
+ public bool GenerateRouteCost()
+ {
+ var CostList = _CostLogic.ReadList(null);
+ if (CostList == null)
+ {
+ return false;
+ }
+ if (CostList.Count == 0)
+ {
+ return false;
+ }
+ var RouteList = _RouteLogic.ReadList(null);
+ if (RouteList == null)
+ {
+ return false;
+ }
+ if (RouteList.Count == 0)
+ {
+ return false;
+ }
+ Random rnd = new Random();
+ for (int i = 0; i < 2; i++)
+ {
+ _RouteCostLogic.Create(new()
+ {
+ CostId = rnd.Next(0, CostList.Count),
+ RouteId = rnd.Next(0, RouteList.Count)
+ });
+ }
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/JurassicZoo/ZooBusinessLogic/BusinessLogics/ReportLogic.cs b/JurassicZoo/ZooBusinessLogic/BusinessLogics/ReportLogic.cs
index 5e32dc9..db009dd 100644
--- a/JurassicZoo/ZooBusinessLogic/BusinessLogics/ReportLogic.cs
+++ b/JurassicZoo/ZooBusinessLogic/BusinessLogics/ReportLogic.cs
@@ -1,33 +1,42 @@
using Microsoft.Extensions.Logging;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
+using Microsoft.Identity.Client;
+using ZooContracts.BusinessLogicsContracts;
+using ZooContracts.StoragesContracts;
+using ZooContracts.ViewModels;
+using ZooDatabaseImplement.Models;
+using ZooDataModels.Models;
using ZooContracts.BindingModels;
using ZooContracts.BusinessLogicsContracts;
-namespace ZooBusinessLogic.BusinessLogics
+namespace ZooContracts.BusinessLogics
{
public class ReportLogic : IReportLogic
{
private readonly IRouteStorage _RouteStorage;
private readonly ILogger _logger;
+ private readonly IRouteCostStorage _RouteCostStorage;
- public ReportLogic(ILogger _logger, IRouteStorage RouteStorage)
+ public ReportLogic(ILogger logger, IRouteStorage RouteStorage,
+ IRouteCostStorage RouteCostStorage)
{
- //_logger = logger;
+ _logger = logger;
_RouteStorage = RouteStorage;
+ _RouteCostStorage = RouteCostStorage;
}
///
- /// Получение списка кружков с указанием списка затрат по ним за определенное время
+ /// получение заповедников в маршруте
///
- ///
public List GetReserveRoutes(ReportBindingModel model)
{
return _RouteStorage.GetReserveRoutes(new() { SelectedRoutesIds = model.SelectedRoutes });
}
-
+ ///
+ /// получение затрат по маршруту
+ ///
+ public List GetCosts(ReportBindingModel model)
+ {
+ return _RouteCostStorage.GetCostsInRoutes(new() { DateFrom = model.DateFrom, DateTo = model.DateTo });
+ }
public void SaveComponentsToWordFile(ReportBindingModel model)
{
throw new NotImplementedException();
@@ -43,4 +52,4 @@ namespace ZooBusinessLogic.BusinessLogics
throw new NotImplementedException();
}
}
-}
+}
\ No newline at end of file
diff --git a/JurassicZoo/ZooBusinessLogic/BusinessLogics/ReportReserveLogic.cs b/JurassicZoo/ZooBusinessLogic/BusinessLogics/ReportReserveLogic.cs
deleted file mode 100644
index c751dee..0000000
--- a/JurassicZoo/ZooBusinessLogic/BusinessLogics/ReportReserveLogic.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ZooBusinessLogic.BusinessLogics
-{
- internal class ReportReserveLogic
- {
- }
-}
diff --git a/JurassicZoo/ZooContracts/BindingModels/CostBindingModel.cs b/JurassicZoo/ZooContracts/BindingModels/CostBindingModel.cs
index 93095b8..b9099c0 100644
--- a/JurassicZoo/ZooContracts/BindingModels/CostBindingModel.cs
+++ b/JurassicZoo/ZooContracts/BindingModels/CostBindingModel.cs
@@ -12,5 +12,7 @@ namespace ZooContracts.BindingModels
public int Id { get; set; }
public double Sum { get; set; }
public string CostName { get; set; }
+ public int Count { get; set; }
+ public int EmployeeId { get; set; }
}
}
diff --git a/JurassicZoo/ZooContracts/BindingModels/RouteBindingModel.cs b/JurassicZoo/ZooContracts/BindingModels/RouteBindingModel.cs
index 4c9311d..260471e 100644
--- a/JurassicZoo/ZooContracts/BindingModels/RouteBindingModel.cs
+++ b/JurassicZoo/ZooContracts/BindingModels/RouteBindingModel.cs
@@ -13,6 +13,5 @@ namespace ZooContracts.BindingModels
public DateTime DateStart { get; set; } = DateTime.Now;
public int ClientId { get; set; }
public int ReserveId { get; set; }
- public double Remains { get; set; }
}
}
diff --git a/JurassicZoo/ZooContracts/BusinessLogicsContracts/IReportLogic.cs b/JurassicZoo/ZooContracts/BusinessLogicsContracts/IReportLogic.cs
index 5b969f2..018922e 100644
--- a/JurassicZoo/ZooContracts/BusinessLogicsContracts/IReportLogic.cs
+++ b/JurassicZoo/ZooContracts/BusinessLogicsContracts/IReportLogic.cs
@@ -10,10 +10,16 @@ namespace ZooContracts.BusinessLogicsContracts
public interface IReportLogic
{
///
- /// Получение списка Маршрутов по заповедникам
+ /// Получение списка маршрутов по заповедникам
///
///
- List GetReserveRoutes(ReportBindingModel model);
+ List GetRouteRoutes(ReportBindingModel model);
+ ///
+ /// Получение списка затрат за определенный период
+ ///
+ ///
+ ///
+ List GetCosts(ReportBindingModel model);
///
/// Сохранение компонент в файл-Word
///
@@ -23,7 +29,7 @@ namespace ZooContracts.BusinessLogicsContracts
/// Сохранение компонент с указаеним продуктов в файл-Excel
///
///
- void SaveComponentToExcelFile(ReportBindingModel model);
+ void SaveManufactureComponentToExcelFile(ReportBindingModel model);
///
/// Сохранение заказов в файл-Pdf
///
diff --git a/JurassicZoo/ZooContracts/SearchModel/RouteCostSearchModel.cs b/JurassicZoo/ZooContracts/SearchModel/RouteCostSearchModel.cs
index abeaf5a..417b27b 100644
--- a/JurassicZoo/ZooContracts/SearchModel/RouteCostSearchModel.cs
+++ b/JurassicZoo/ZooContracts/SearchModel/RouteCostSearchModel.cs
@@ -9,5 +9,7 @@ namespace ZooContracts.SearchModel
public class RouteCostSearchModel
{
public int? Id { get; set; }
+ public DateTime? DateTo { get; set; }
+ public DateTime? DateFrom { get; set; }
}
}
diff --git a/JurassicZoo/ZooContracts/StoragesContracts/IRouteCostStorage.cs b/JurassicZoo/ZooContracts/StoragesContracts/IRouteCostStorage.cs
index 14ef653..dbceaae 100644
--- a/JurassicZoo/ZooContracts/StoragesContracts/IRouteCostStorage.cs
+++ b/JurassicZoo/ZooContracts/StoragesContracts/IRouteCostStorage.cs
@@ -17,5 +17,6 @@ namespace ZooContracts.StoragesContracts
RouteCostViewModel? Insert(RouteCostBindingModel model);
RouteCostViewModel? Update(RouteCostBindingModel model);
RouteCostViewModel? Delete(RouteCostBindingModel model);
+ List GetExpensesInCircles(RouteCostSearchModel model);
}
}
diff --git a/JurassicZoo/ZooContracts/ViewModels/CostViewModel.cs b/JurassicZoo/ZooContracts/ViewModels/CostViewModel.cs
index 519903c..8c45192 100644
--- a/JurassicZoo/ZooContracts/ViewModels/CostViewModel.cs
+++ b/JurassicZoo/ZooContracts/ViewModels/CostViewModel.cs
@@ -12,5 +12,7 @@ namespace ZooContracts.ViewModels
public int Id { get; set; }
public string CostName { get; set; }
public double Sum { get; set; }
+ public int Count { get; set; }
+ public int EmployeeId { get; set; }
}
}
diff --git a/JurassicZoo/ZooContracts/ViewModels/ReportCostViewModel.cs b/JurassicZoo/ZooContracts/ViewModels/ReportCostsInRoutesViewModel.cs
similarity index 54%
rename from JurassicZoo/ZooContracts/ViewModels/ReportCostViewModel.cs
rename to JurassicZoo/ZooContracts/ViewModels/ReportCostsInRoutesViewModel.cs
index d4bd3b6..f255c31 100644
--- a/JurassicZoo/ZooContracts/ViewModels/ReportCostViewModel.cs
+++ b/JurassicZoo/ZooContracts/ViewModels/ReportCostsInRoutesViewModel.cs
@@ -7,11 +7,17 @@ using System.Threading.Tasks;
namespace ZooContracts.ViewModels
{
- public class ReportCostViewModel
+ public class ReportCostsInRoutesViewModel
{
[DisplayName("Название затраты")]
public string CostName { get; set; } = string.Empty;
[DisplayName("Сумма")]
public double Sum { get; set; }
+ [DisplayName("Номер маршрута")]
+ public int CircleId { get; set; }
+ [DisplayName("Имя сотрудника")]
+ public string EmployeeName { get; set; }
+ [DisplayName("Кол-во затрат")]
+ public int Count { get; set; }
}
}
diff --git a/JurassicZoo/ZooContracts/ViewModels/ReportReserveRoutesViewModel.cs b/JurassicZoo/ZooContracts/ViewModels/ReportReserveRoutesViewModel.cs
index 3d4d757..d730ccf 100644
--- a/JurassicZoo/ZooContracts/ViewModels/ReportReserveRoutesViewModel.cs
+++ b/JurassicZoo/ZooContracts/ViewModels/ReportReserveRoutesViewModel.cs
@@ -8,7 +8,17 @@ namespace ZooContracts.ViewModels
{
public class ReportReserveRoutesViewModel
{
- public int ReserveId { get; set; }
- public int RoutesCount { get; set; }
+ ///
+ /// Номер заповедника
+ ///
+ public int ReserveId { get; set; }
+ ///
+ /// Имя работника
+ ///
+ public string EmployeeName { get; set; } = string.Empty;
+ ///
+ /// Стоимость
+ ///
+ public double Sum { get; set; }
}
}
diff --git a/JurassicZoo/ZooContracts/ViewModels/ReportRouteReservesViewModel.cs b/JurassicZoo/ZooContracts/ViewModels/ReportRouteReservesViewModel.cs
index 6a43cde..a74c1e3 100644
--- a/JurassicZoo/ZooContracts/ViewModels/ReportRouteReservesViewModel.cs
+++ b/JurassicZoo/ZooContracts/ViewModels/ReportRouteReservesViewModel.cs
@@ -15,6 +15,6 @@ namespace ZooContracts.ViewModels
///
/// Заповедник в Маршруте
///
- public List RouteLessons { get; set; } = new();
+ public List Lessons { get; set; } = new();
}
}
diff --git a/JurassicZoo/ZooContracts/ViewModels/ReportViewModel.cs b/JurassicZoo/ZooContracts/ViewModels/ReportViewModel.cs
deleted file mode 100644
index 9e9a5b5..0000000
--- a/JurassicZoo/ZooContracts/ViewModels/ReportViewModel.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ZooContracts.ViewModels
-{
- public class ReportViewModel
- {
- [DisplayName("Название маршрута")]
- public int RouteNumber { get; set; }
- [DisplayName("Дата записи")]
- public DateTime Date { get; set; }
- [DisplayName("Сумма затрат")]
- public double Sum { get; set; }
- [DisplayName("Кол-во заповедников")]
- public int RouteCount { get; set; }
- [DisplayName("Название затраты")]
- public List Cost { get; set; }
- }
-}
diff --git a/JurassicZoo/ZooDataModels/Models/ICostModel.cs b/JurassicZoo/ZooDataModels/Models/ICostModel.cs
index 8a35e4b..428ab9a 100644
--- a/JurassicZoo/ZooDataModels/Models/ICostModel.cs
+++ b/JurassicZoo/ZooDataModels/Models/ICostModel.cs
@@ -16,5 +16,13 @@ namespace ZooDataModels.Models
/// Название
///
public string CostName { get; }
+ ///
+ /// количество
+ ///
+ public int Count { get; set; }
+ ///
+ /// Id сотрудника
+ ///
+ public int EmployeeId { get; set; }
}
}
diff --git a/JurassicZoo/ZooDatabaseImplements/Implements/RouteCostStorage.cs b/JurassicZoo/ZooDatabaseImplements/Implements/RouteCostStorage.cs
index 2397f32..ba8056d 100644
--- a/JurassicZoo/ZooDatabaseImplements/Implements/RouteCostStorage.cs
+++ b/JurassicZoo/ZooDatabaseImplements/Implements/RouteCostStorage.cs
@@ -43,6 +43,26 @@ namespace ZooDatabaseImplements.Implements
return null;
}
+ public List GetCostsInRoutes(RouteCostSearchModel model)
+ {
+ if (model.DateFrom == null || model.DateTo == null)
+ {
+ return new();
+ }
+ using var context = new ZooDatabase();
+ return context.RouteCosts.Include(x => x.Route)
+ .Include(x => x.Cost)
+ .ThenInclude(x => x.Employee)
+ .Select(x => new ReportCostsInRoutesViewModel()
+ {
+ EmployeeName = x.Cost.Employee.EmployeeName,
+ RouteId = x.Route.Id,
+ CostName = x.Cost.CostName,
+ Count = x.Cost.Count,
+ Sum = x.Cost.Sum
+ })
+ .ToList();
+ }
public List GetFilteredList(RouteCostSearchModel model)
{
using var context = new ZooDatabase();
diff --git a/JurassicZoo/ZooDatabaseImplements/Implements/RouteStorage.cs b/JurassicZoo/ZooDatabaseImplements/Implements/RouteStorage.cs
index 150200e..6e0464c 100644
--- a/JurassicZoo/ZooDatabaseImplements/Implements/RouteStorage.cs
+++ b/JurassicZoo/ZooDatabaseImplements/Implements/RouteStorage.cs
@@ -25,22 +25,11 @@ namespace ZooDatabaseImplements.Implements
public List GetFilteredList(RouteSearchModel model)
{
using var context = new ZooDatabase();
- if (model.DateFrom.HasValue && model.DateTo.HasValue) // если не ищем по id, значит ищем по диапазону дат
- {
- return context.Routes
- .Where(x => model.DateFrom <= x.DateStart.Date && x.DateStart <= model.DateTo)
- .Include(x => x.Client)
- .Select(x => x.GetViewModel)
- .ToList();
- }
- if (model.ClientId.HasValue)
- {
- return context.Routes
- .Where(x => x.Client.Id == model.ClientId)
- .Select(x => x.GetViewModel)
- .ToList();
- }
- return new();
+ return context.Routes
+ .Where(x => x.Id == model.Id)
+ .Include(x => x.Client)
+ .Select(x => x.GetViewModel)
+ .ToList();
}
public RouteViewModel? GetElement(RouteSearchModel model)
{
@@ -92,7 +81,11 @@ namespace ZooDatabaseImplements.Implements
}
return null;
}
-
+ ///
+ /// Получение списка заповедников по выбранному маршруту
+ ///
+ ///
+ ///
public List GetReserveRoutes(RouteSearchModel model)
{
if (model.SelectedRoutesIds == null)
@@ -101,26 +94,23 @@ namespace ZooDatabaseImplements.Implements
}
using var context = new ZooDatabase();
return context.Routes
- .Where(c => model.SelectedRoutesIds.Contains(c.Id))
- .Select(c => new ReportRouteReservesViewModel()
+ .Where(x => model.SelectedRoutesIds.Contains(x.Id))
+ .Select(x => new ReportRouteReservesViewModel()
{
- RouteReserves = GetRouteReserves(context, new() { Id = c.Id })
- })
- .ToList();
- }
- ///
- /// Получение списка заповедников по выбранному маршруту
- ///
- ///
- ///
- private static List GetRouteReserves(ZooDatabase context, RouteSearchModel model)
- {
- return context.Routes
- .Include(wir => wir.RouteReserves)
- .Where(wir => wir.Id == model.Id)
- .Select(wir => new ReportReserveRoutesViewModel()
- {
- ReserveId = wir.RouteReserves.Id
+ RouteId = x.Id,
+ Reserves = context.RouteReserves
+ .Include(x => x.Reserve)
+ .ThenInclude(x => x.Employee)
+ .Where(x => x.RouteId == x.Id)
+ .Select(x => new ReportReserveRoutesViewModel()
+ {
+
+ ReserveId = x.Route.Id,
+ EmployeeName = x.Reserve.Employee.EmployeeName,
+ Sum = x.Reserve.ReservePrice
+
+ })
+ .ToList()
})
.ToList();
}
diff --git a/JurassicZoo/ZooDatabaseImplements/Models/Cost.cs b/JurassicZoo/ZooDatabaseImplements/Models/Cost.cs
index e291a64..02ca188 100644
--- a/JurassicZoo/ZooDatabaseImplements/Models/Cost.cs
+++ b/JurassicZoo/ZooDatabaseImplements/Models/Cost.cs
@@ -17,9 +17,15 @@ namespace ZooDatabaseImplements.Models
public string CostName { get; private set; } = string.Empty;
[Required]
public double Sum { get; private set; }
+ [Required]
+ public int Count { get; private set; }
+ public int EmployeeId { get; private set; }
+ public int RouteId { get; private set; }
[ForeignKey("CostId")]
public virtual List RouteCosts { get; set; } = new();
- public static Cost? Create(CostBindingModel model)
+ [ForeignKey("CostId")]
+ public virtual Employee Employee { get; set; } = new();
+ public static Cost? Create(ZooDatabase context, CostBindingModel model)
{
if (model == null)
{
@@ -29,7 +35,9 @@ namespace ZooDatabaseImplements.Models
{
Id = model.Id,
CostName = model.CostName,
- Sum = model.Sum
+ Sum = model.Sum,
+ Count = model.Count,
+ Employee = context.Employees.First(x => x.Id == model.EmployeeId)
};
}
public void Update(CostBindingModel model)
diff --git a/JurassicZoo/ZooDatabaseImplements/Models/Employee.cs b/JurassicZoo/ZooDatabaseImplements/Models/Employee.cs
index a063ed6..8c935d1 100644
--- a/JurassicZoo/ZooDatabaseImplements/Models/Employee.cs
+++ b/JurassicZoo/ZooDatabaseImplements/Models/Employee.cs
@@ -23,6 +23,8 @@ namespace ZooDatabaseImplements.Models
[Required]
public string EmployeeName { get; set; } = string.Empty;
[ForeignKey("EmployeeId")]
+ public virtual List Costs { get; set; } = new();
+ [ForeignKey("CostId")]
public virtual List Reserves { get; set; } = new();
public static Employee? Create(EmployeeBindingModel model)
{
@@ -51,9 +53,13 @@ namespace ZooDatabaseImplements.Models
EmployeePhone = model.EmployeePhone;
}
- public CostViewModel GetViewModel => new()
+ public EmployeeViewModel GetViewModel => new()
{
- Id = Id
+ Id = Id,
+ EmployeeName = EmployeeName,
+ EmployeeEmail = EmployeeEmail,
+ EmployeePassword = EmployeePassword,
+ EmployeePhone = EmployeePhone
};
}
}