the end (надеюсь)

This commit is contained in:
Дмитрий Блохин 2024-05-30 00:36:30 +04:00
parent 6ba3037b8f
commit 88de48c73e
12 changed files with 282 additions and 29 deletions

View File

@ -0,0 +1,88 @@
using Contracts.BusinessLogicsContracts;
using Contracts.StoragesContracts;
using Contracts.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BusinessLogic.BusinessLogic
{
public class GuarantorReportLogic : IGuarantorReportLogic
{
private readonly IWorkerStorage _workerStorage;
private readonly IMachineStorage _machineStorage;
private readonly IWorkshopStorage _workshopStorage;
private readonly IProductStorage _productStorage;
public GuarantorReportLogic(IWorkerStorage workerStorage, IMachineStorage machineStorage, IWorkshopStorage workshopStorage, IProductStorage productStorage)
{
_workerStorage = workerStorage;
_machineStorage = machineStorage;
_workshopStorage = workshopStorage;
_productStorage = productStorage;
}
public List<WorkerMachineCountChartViewModel>? GetWorkerMachineChart(int UserId)
{
var machines = _machineStorage.GetFilteredList(new() { UserId = UserId });
List<WorkerMachineCountChartViewModel> workerChart = new();
foreach (var mach in machines)
{
WorkerMachineCountChartViewModel worker = new WorkerMachineCountChartViewModel();
worker.MachineName = mach.Title;
var count = _workerStorage.GetFilteredList(new() { MachineId = mach.Id, UserId = UserId }).Count;
worker.WorkerCount = count;
workerChart.Add(worker);
}
return workerChart;
}
public List<WorkerWorkshopCountChartViewModel>? GetWorkerWorkshopChart(int UserId)
{
var workshops = _workshopStorage.GetFilteredList(new() { UserId = UserId });
List<WorkerWorkshopCountChartViewModel> workerChart = new();
foreach (var work in workshops)
{
WorkerWorkshopCountChartViewModel worker = new WorkerWorkshopCountChartViewModel();
worker.WorkshopName = work.Title;
var count = _workerStorage.GetFilteredList(new() { WorkshopId = work.Id, UserId = UserId }).Count;
worker.WorkerCount = count;
workerChart.Add(worker);
}
return workerChart;
}
public List<MachineWorkshopTimeReport>? GetMachineWorkshopTimeReport(DateTime startDate, DateTime endDate, int UserId)
{
var workshops = _workshopStorage.GetFilteredList(new() { DateFrom = startDate, DateTo = endDate, UserId = UserId });
if (workshops == null)
return new();
List<MachineWorkshopTimeReport> machineWorkshopTimeReports = new List<MachineWorkshopTimeReport>();
foreach (var workshop in workshops)
{
var report = new MachineWorkshopTimeReport();
report.WorkshopName = workshop.Title;
var machines = _machineStorage.GetFilteredList(new() { WorkshopId = workshop.Id, UserId = UserId });
if (machines != null)
report.Machines = machines.Select(p => p.Title).ToList();
machineWorkshopTimeReports.Add(report);
}
return machineWorkshopTimeReports;
}
public List<WorkerProductReportViewModel>? GetWorkerProductReport(List<int> ids)
{
List<WorkerProductReportViewModel> reports = new();
foreach (int i in ids)
{
WorkerProductReportViewModel report = new();
var worker = _workerStorage.GetElement(new() { Id = i });
report.WorkerName = worker!.Name;
var products = _productStorage.GetFilteredList(new() { WorkerId = i });
if (products != null)
report.Products = products.Select(x => x.Name).ToList();
reports.Add(report);
}
return reports;
}
}
}

View File

@ -0,0 +1,17 @@
using Contracts.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Contracts.BusinessLogicsContracts
{
public interface IGuarantorReportLogic
{
List<WorkerProductReportViewModel>? GetWorkerProductReport(List<int> ids);
List<MachineWorkshopTimeReport>? GetMachineWorkshopTimeReport(DateTime start, DateTime end, int UserId);
List<WorkerMachineCountChartViewModel>? GetWorkerMachineChart(int UserId);
List<WorkerWorkshopCountChartViewModel>? GetWorkerWorkshopChart(int UserId);
}
}

View File

@ -5,5 +5,7 @@
public int? Id { get; set; } public int? Id { get; set; }
public string? Name { get; set; } public string? Name { get; set; }
public int? UserId { get; set; } public int? UserId { get; set; }
public int MachineId { get; set; }
public int WorkshopId { get; set; }
} }
} }

View File

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Contracts.ViewModels
{
public class WorkerMachineCountChartViewModel
{
public string MachineName { get; set; } = string.Empty;
public int WorkerCount { get; set; }
}
}

View File

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Contracts.ViewModels
{
public class WorkerWorkshopCountChartViewModel
{
public string WorkshopName { get; set; } = string.Empty;
public int WorkerCount { get; set; }
}
}

View File

@ -537,12 +537,47 @@ namespace GuarantorAPP.Controllers
var workshop = _data.GetWorkshop(workshopId); var workshop = _data.GetWorkshop(workshopId);
if (workshop == null) if (workshop == null)
return RedirectToAction("Index"); return RedirectToAction("Index");
WorkshopBindingModel workshopBinding = new() { Id = workshopId, Title = workshop.Title, Address = workshop.Address, Director = workshop.Director, UserId = workshop.UserId, ProductionId = workshop.ProductionId, WorkshopWorker = workshop.WorkerWorkshops }; WorkshopBindingModel workshopBinding = new() { Id = workshopId, Title = workshop.Title, Address = workshop.Address, Director = workshop.Director, UserId = workshop.UserId, ProductionId = productionId, WorkshopWorker = workshop.WorkerWorkshops };
_data.UpdateWorkshop(workshopBinding); _data.UpdateWorkshop(workshopBinding);
} }
catch (Exception) { } catch (Exception) { }
return RedirectToAction("IndexWorkshop"); return RedirectToAction("IndexWorkshop");
} }
[HttpGet]
public IActionResult MachineHistogram()
{
if (!IsLoggedIn)
return RedirectToAction("IndexNonReg");
try
{
var chart = _data.GetMachineChart(UserId);
return View(chart);
} catch
{
return RedirectToAction("IndexNonReg");
}
}
public IActionResult Menu()
{
if (!IsLoggedIn)
return RedirectToAction("IndexNonReg");
return View();
}
[HttpGet]
public IActionResult WorkshopHistogram()
{
if (!IsLoggedIn)
return RedirectToAction("IndexNonReg");
try
{
var chart = _data.GetWorkshopChart(UserId);
return View(chart);
}
catch
{
return RedirectToAction("IndexNonReg");
}
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error(string ex) public IActionResult Error(string ex)
{ {

View File

@ -18,12 +18,13 @@ namespace GuarantorAPP
private readonly IWorkshopLogic _workshopLogic; private readonly IWorkshopLogic _workshopLogic;
private readonly IProductionLogic _productionLogic; private readonly IProductionLogic _productionLogic;
private readonly IProductLogic _productLogic; private readonly IProductLogic _productLogic;
private readonly IGuarantorReportLogic _reportLogic;
private readonly AbstractSaveToExcelGuarantor _excel; private readonly AbstractSaveToExcelGuarantor _excel;
private readonly AbstractSaveToWordGuarantor _word; private readonly AbstractSaveToWordGuarantor _word;
private readonly AbstractSaveToPdfGuarantor _pdf; private readonly AbstractSaveToPdfGuarantor _pdf;
private readonly AbstractMailWorker _mail; private readonly AbstractMailWorker _mail;
public GuarantorData(ILogger<GuarantorData> logger, IGuarantorLogic guarantorLogic, IWorkerLogic workerLogic, IMachineLogic machineLogic, IWorkshopLogic workshopLogic, IProductionLogic productionLogic, IProductLogic productLogic, AbstractSaveToExcelGuarantor excel, AbstractSaveToPdfGuarantor pdf, AbstractSaveToWordGuarantor word, AbstractMailWorker mail) public GuarantorData(ILogger<GuarantorData> logger, IGuarantorLogic guarantorLogic, IWorkerLogic workerLogic, IMachineLogic machineLogic, IWorkshopLogic workshopLogic, IProductionLogic productionLogic, IProductLogic productLogic, IGuarantorReportLogic reportLogic, AbstractSaveToExcelGuarantor excel, AbstractSaveToPdfGuarantor pdf, AbstractSaveToWordGuarantor word, AbstractMailWorker mail)
{ {
_logger = logger; _logger = logger;
_guarantorLogic = guarantorLogic; _guarantorLogic = guarantorLogic;
@ -32,6 +33,7 @@ namespace GuarantorAPP
_workshopLogic = workshopLogic; _workshopLogic = workshopLogic;
_productionLogic = productionLogic; _productionLogic = productionLogic;
_productLogic = productLogic; _productLogic = productLogic;
_reportLogic = reportLogic;
_excel = excel; _excel = excel;
_pdf = pdf; _pdf = pdf;
_mail = mail; _mail = mail;
@ -138,37 +140,13 @@ namespace GuarantorAPP
{ {
return _productionLogic.ReadList(null); return _productionLogic.ReadList(null);
} }
public List<MachineWorkshopTimeReport> GetTimeReport(DateTime? startDate, DateTime? endDate, int UserId) public List<MachineWorkshopTimeReport>? GetTimeReport(DateTime? startDate, DateTime? endDate, int UserId)
{ {
var workshops = _workshopLogic.ReadList(new() { DateFrom = startDate, DateTo = endDate, UserId = UserId }); return _reportLogic.GetMachineWorkshopTimeReport(startDate!.Value, endDate!.Value, UserId);
if (workshops == null)
return new();
List<MachineWorkshopTimeReport> machineWorkshopTimeReports = new List<MachineWorkshopTimeReport>();
foreach (var workshop in workshops)
{
var report = new MachineWorkshopTimeReport();
report.WorkshopName = workshop.Title;
var machines = _machineLogic.ReadList(new() { WorkshopId = workshop.Id, UserId = UserId });
if (machines != null)
report.Machines = machines.Select(p => p.Title).ToList();
machineWorkshopTimeReports.Add(report);
}
return machineWorkshopTimeReports;
} }
public List<WorkerProductReportViewModel>? GetProductReports(List<int> workers) public List<WorkerProductReportViewModel>? GetProductReports(List<int> workers)
{ {
List<WorkerProductReportViewModel> reports = new(); return _reportLogic.GetWorkerProductReport(workers);
foreach (int i in workers)
{
WorkerProductReportViewModel report = new();
var worker = _workerLogic.ReadElement(new() { Id = i });
report.WorkerName = worker!.Name;
var products = _productLogic.ReadList(new() { WorkerId = i });
if (products != null)
report.Products = products.Select(x => x.Name).ToList();
reports.Add(report);
}
return reports;
} }
public void SaveReportExcel(List<int> workers, MemoryStream stream) public void SaveReportExcel(List<int> workers, MemoryStream stream)
{ {
@ -225,5 +203,13 @@ namespace GuarantorAPP
MailAddress = UserGuarantor.user!.Email, Subject = "Отчет", FileName = "PdfReport.pdf", Pdf = report MailAddress = UserGuarantor.user!.Email, Subject = "Отчет", FileName = "PdfReport.pdf", Pdf = report
}); });
} }
public List<WorkerMachineCountChartViewModel>? GetMachineChart(int UserId)
{
return _reportLogic.GetWorkerMachineChart(UserId);
}
public List<WorkerWorkshopCountChartViewModel>? GetWorkshopChart(int UserId)
{
return _reportLogic.GetWorkerWorkshopChart(UserId);
}
} }
} }

View File

@ -26,6 +26,7 @@ builder.Services.AddTransient<IWorkshopLogic, WorkshopLogic>();
builder.Services.AddTransient<IMachineLogic, MachineLogic>(); builder.Services.AddTransient<IMachineLogic, MachineLogic>();
builder.Services.AddTransient<IProductionLogic, ProductionLogic>(); builder.Services.AddTransient<IProductionLogic, ProductionLogic>();
builder.Services.AddTransient<IProductLogic, ProductLogic>(); builder.Services.AddTransient<IProductLogic, ProductLogic>();
builder.Services.AddTransient<IGuarantorReportLogic, GuarantorReportLogic>();
builder.Services.AddTransient<AbstractSaveToExcelGuarantor, SaveToExcelGuarantor>(); builder.Services.AddTransient<AbstractSaveToExcelGuarantor, SaveToExcelGuarantor>();
builder.Services.AddTransient<AbstractSaveToWordGuarantor, SaveToWordGuarantor>(); builder.Services.AddTransient<AbstractSaveToWordGuarantor, SaveToWordGuarantor>();
builder.Services.AddTransient<AbstractSaveToPdfGuarantor, SaveToPdfGuarantor>(); builder.Services.AddTransient<AbstractSaveToPdfGuarantor, SaveToPdfGuarantor>();

View File

@ -10,6 +10,7 @@
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="IndexWorkshop">Цеха</a> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="IndexWorkshop">Цеха</a>
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="ReportsMenu">Меню отчетов</a> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="ReportsMenu">Меню отчетов</a>
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Личные данные</a> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Личные данные</a>
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Menu">Графики</a>
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Logout">Выйти</a> <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Logout">Выйти</a>
</div> </div>
</div> </div>

View File

@ -0,0 +1,42 @@
@using Contracts.ViewModels;
@model List<WorkerMachineCountChartViewModel>;
<!DOCTYPE html>
<html>
<head>
<title>Histogram Example</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
<div>
<canvas id="myChart" width="400" height="150"></canvas>
</div>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
var data = {
labels: @Html.Raw(Json.Serialize(Model.Select(m => m.MachineName))),
datasets: [{
label: 'Category Data',
data: @Html.Raw(Json.Serialize(Model.Select(m => m.WorkerCount))),
backgroundColor: 'rgba(75, 192, 192, 0.2)',
borderColor: 'rgba(75, 192, 192, 1)',
borderWidth: 1
}]
};
var myChart = new Chart(ctx, {
type: 'bar',
data: data,
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero: true
}
}]
}
}
});
</script>
</body>
</html>

View File

@ -0,0 +1,11 @@
@{
ViewData["Title"] = "Меню графиков";
}
<div class="text-center">
<h1 class="display-4">Главное меню</h1>
<div class="list-group">
<a class="nav-link text-dark" asp-area="" asp-action="MachineHistogram">Количество работников на каждом станке</a>
<a class="nav-link text-dark" asp-area="" asp-action="WorkshopHistogram">Количество работников в каждом цеху</a>
</div>
</div>

View File

@ -0,0 +1,42 @@
@using Contracts.ViewModels;
@model List<WorkerWorkshopCountChartViewModel>;
<!DOCTYPE html>
<html>
<head>
<title>Histogram Example</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
<div>
<canvas id="myChart" width="400" height="150"></canvas>
</div>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
var data = {
labels: @Html.Raw(Json.Serialize(Model.Select(m => m.WorkshopName))),
datasets: [{
label: 'Category Data',
data: @Html.Raw(Json.Serialize(Model.Select(m => m.WorkerCount))),
backgroundColor: 'rgba(75, 192, 192, 0.2)',
borderColor: 'rgba(75, 192, 192, 1)',
borderWidth: 1
}]
};
var myChart = new Chart(ctx, {
type: 'bar',
data: data,
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero: true
}
}]
}
}
});
</script>
</body>
</html>