Compare commits
3 Commits
3f010876a1
...
2dc771cdb5
Author | SHA1 | Date | |
---|---|---|---|
|
2dc771cdb5 | ||
|
6a38f7046c | ||
|
49a6924def |
@ -36,7 +36,10 @@ namespace FactoryBusinessLogic.BusinessLogics
|
||||
}
|
||||
return products;
|
||||
}
|
||||
|
||||
public List<WorkpieceTimeReportViewModel> GetWorkpieces(ClientSearchModel client, ReportBindingModel model)
|
||||
{
|
||||
return _workpieceStorage.GetTimeReport(client, model);
|
||||
}
|
||||
public void SaveWorkpiecesToPdfFile(ClientSearchModel client, ReportBindingModel model)
|
||||
{
|
||||
_saveToPdf.CreateWorkerDoc(new WorkerPdfInfo
|
||||
@ -45,15 +48,16 @@ namespace FactoryBusinessLogic.BusinessLogics
|
||||
Title = "Список заготовок",
|
||||
DateFrom = model.DateFrom!.Value,
|
||||
DateTo = model.DateTo!.Value,
|
||||
Workpieces = GetWorkpieces(client, model)
|
||||
});
|
||||
}
|
||||
public void SaveProductsToExcelFile(ReportBindingModel model, List<int> plans)
|
||||
public void SaveProductsToExcelFile(ReportBindingModel model, List<int> ids)
|
||||
{
|
||||
_saveToExcel.CreateWorkerReport(new WorkerExcelInfo
|
||||
{
|
||||
FileName = model.FileName,
|
||||
Title = "Список планов",
|
||||
//PlanProductionProducts = GetProductsByPlanProduction(plans)
|
||||
PlanProductionProducts = GetProductsByPlanProduction(ids)
|
||||
});
|
||||
}
|
||||
public void SaveProudctsToWordFile(ReportBindingModel model, List<int> ids)
|
||||
@ -63,7 +67,7 @@ namespace FactoryBusinessLogic.BusinessLogics
|
||||
{
|
||||
FileName = model.FileName,
|
||||
Title = "Список планов",
|
||||
//PlanProductionProducts = GetProductsByPlanProduction(plans)
|
||||
PlanProductionProducts = GetProductsByPlanProduction(ids)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -114,8 +114,28 @@ namespace FactoryBusinessLogic.OfficePackage
|
||||
Style = "Normal",
|
||||
ParagraphAlignment = PdfParagraphAlignmentType.Left
|
||||
});
|
||||
var phaseNames = workpiece.ExecutionPhases.Select(x => x.ExecutionPhaseName).ToList();
|
||||
var machineNames = workpiece.Machines.Select(x => x.MachineName).ToList();
|
||||
|
||||
|
||||
if (phaseNames.Count != machineNames.Count)
|
||||
{
|
||||
if (phaseNames.Count > machineNames.Count)
|
||||
{
|
||||
var diff = phaseNames.Count - machineNames.Count;
|
||||
for (int i = 0; i < diff; i++)
|
||||
{
|
||||
machineNames.Add(string.Empty);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var diff = machineNames.Count - phaseNames.Count;
|
||||
for (int i = 0; i < diff; i++)
|
||||
{
|
||||
phaseNames.Add(string.Empty);
|
||||
}
|
||||
}
|
||||
}
|
||||
var tupleList = machineNames.Zip(phaseNames, Tuple.Create);
|
||||
foreach (var tuple in tupleList)
|
||||
{
|
||||
|
@ -72,19 +72,10 @@ namespace FactoryBusinessLogic.OfficePackage
|
||||
});
|
||||
foreach (var ppp in info.PlanProductionProducts)
|
||||
{
|
||||
var t = ppp.Products;
|
||||
List<(string, WordTextProperties)> texts = new List<(string, WordTextProperties)>
|
||||
{
|
||||
(ppp.ProductionName, new WordTextProperties { Bold = true, Size = "24", })
|
||||
};
|
||||
foreach (var product in ppp.Products)
|
||||
{
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
stringBuilder.Append(product.ProductName);
|
||||
stringBuilder.Append(" — ");
|
||||
stringBuilder.Append(product.Price.ToString());
|
||||
texts.Add((stringBuilder.ToString(), new WordTextProperties { Size = "24" }));
|
||||
}
|
||||
CreateParagraph(new WordParagraph
|
||||
{
|
||||
Texts = texts,
|
||||
@ -94,6 +85,24 @@ namespace FactoryBusinessLogic.OfficePackage
|
||||
JustificationType = WordJustificationType.Both
|
||||
}
|
||||
});
|
||||
foreach (var product in ppp.Products)
|
||||
{
|
||||
texts = new List<(string, WordTextProperties)>();
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
stringBuilder.Append(product.ProductName);
|
||||
stringBuilder.Append(" — ");
|
||||
stringBuilder.Append(product.Price.ToString());
|
||||
texts.Add((stringBuilder.ToString(), new WordTextProperties { Size = "24" }));
|
||||
CreateParagraph(new WordParagraph
|
||||
{
|
||||
Texts = texts,
|
||||
TextProperties = new WordTextProperties
|
||||
{
|
||||
Size = "24",
|
||||
JustificationType = WordJustificationType.Both
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
SaveWorkerWord(info);
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ namespace FactoryContracts.BusinessLogicsContracts
|
||||
public interface IWorkerReportLogic
|
||||
{
|
||||
List<PlanProductionProductReportViewModel> GetProductsByPlanProduction(List<int> plans);
|
||||
List<WorkpieceTimeReportViewModel> GetWorkpieces(ClientSearchModel client, ReportBindingModel model);
|
||||
void SaveProudctsToWordFile(ReportBindingModel model, List<int> plans);
|
||||
void SaveProductsToExcelFile(ReportBindingModel model, List<int> plans);
|
||||
void SaveWorkpiecesToPdfFile(ClientSearchModel client, ReportBindingModel model);
|
||||
|
@ -9,6 +9,7 @@ namespace FactoryContracts.StoragesContracts
|
||||
List<WorkpieceViewModel> GetFullList();
|
||||
|
||||
List<WorkpieceViewModel> GetFilteredList(WorkpieceSearchModel model);
|
||||
List<WorkpieceTimeReportViewModel> GetTimeReport(ClientSearchModel client, ReportBindingModel model);
|
||||
|
||||
|
||||
WorkpieceViewModel? GetElement(WorkpieceSearchModel model);
|
||||
|
@ -4,6 +4,7 @@ using FactoryContracts.StoragesContracts;
|
||||
using FactoryContracts.ViewModels;
|
||||
using FactoryDatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
namespace FactoryDatabaseImplement.Implements
|
||||
{
|
||||
|
@ -127,6 +127,7 @@ namespace FactoryDatabaseImplement.Implements
|
||||
{
|
||||
using var context = new FactoryDatabase();
|
||||
return context.PlanProductions
|
||||
.Distinct()
|
||||
.Where(plan => ids.Contains(plan.Id))
|
||||
.Select(plan => new PlanProductionProductReportViewModel()
|
||||
{
|
||||
|
@ -111,6 +111,7 @@ namespace FactoryDatabaseImplement.Implements
|
||||
.Include(x => x.Client)
|
||||
.Include(x => x.PlanProductions)
|
||||
.ThenInclude(x => x.PlanProduction)
|
||||
.Where(x => x.DateCreate <= model.DateTo && x.DateCreate >= model.DateFrom)
|
||||
.Select(x => new WorkpieceTimeReportViewModel
|
||||
{
|
||||
WorkpieceName = x.WorkpieceName,
|
||||
@ -119,7 +120,7 @@ namespace FactoryDatabaseImplement.Implements
|
||||
.Where(ppw => ppw.WorkpieceId == x.Id)
|
||||
.Select(ppw => ppw.PlanProduction.Machines
|
||||
.Where(m => m.PlanProductionId == ppw.PlanProductionId)
|
||||
.Select(m => m.Machine.GetViewModel).ToList()).FirstOrDefault()!,
|
||||
.Select(m => m.Machine.GetViewModel).ToList()).FirstOrDefault(),
|
||||
ExecutionPhases = context.ExecutionPhases
|
||||
.Where(ep => ep.PlanProductionId.HasValue)
|
||||
.Include(ep => ep.PlanProduction)
|
||||
|
@ -1,4 +1,5 @@
|
||||
using DocumentFormat.OpenXml.Office2010.Excel;
|
||||
using FactoryBuisinessLogic.MailWorker;
|
||||
using FactoryBusinessLogic.BusinessLogics;
|
||||
using FactoryContracts.BindingModels;
|
||||
using FactoryContracts.BusinessLogicsContracts;
|
||||
@ -18,14 +19,16 @@ namespace FactoryWorkerApp.Controllers
|
||||
private readonly ILogger<HomeController> _logger;
|
||||
private readonly WorkerLogic _logic;
|
||||
private readonly IWorkerReportLogic _workerReportLogic;
|
||||
private readonly AbstractMailWorker _abstractMailWorker;
|
||||
private bool IsLoggedIn { get { return Client.user != null; } }
|
||||
private int UserId { get { return Client.user!.Id; } }
|
||||
|
||||
public HomeController(ILogger<HomeController> logger, WorkerLogic logic, IWorkerReportLogic workerReportLogic)
|
||||
public HomeController(ILogger<HomeController> logger, WorkerLogic logic, IWorkerReportLogic workerReportLogic, AbstractMailWorker abstractMailWorker)
|
||||
{
|
||||
_logger = logger;
|
||||
_logic = logic;
|
||||
_workerReportLogic = workerReportLogic;
|
||||
_abstractMailWorker = abstractMailWorker;
|
||||
}
|
||||
|
||||
public IActionResult Index()
|
||||
@ -238,7 +241,7 @@ namespace FactoryWorkerApp.Controllers
|
||||
{
|
||||
return Redirect("Index");
|
||||
}
|
||||
ViewBag.plans = _logic.GetPlanProductions(Client.user!.Id);
|
||||
ViewBag.ids = _logic.GetPlanProductions(Client.user!.Id);
|
||||
return View();
|
||||
}
|
||||
|
||||
@ -249,6 +252,7 @@ namespace FactoryWorkerApp.Controllers
|
||||
{
|
||||
return Redirect("Index");
|
||||
}
|
||||
ViewBag.ids = plans;
|
||||
var report = _workerReportLogic.GetProductsByPlanProduction(plans);
|
||||
return View(report);
|
||||
}
|
||||
@ -277,7 +281,7 @@ namespace FactoryWorkerApp.Controllers
|
||||
HttpContext.Session.SetString("StartDate", startDate.ToString());
|
||||
HttpContext.Session.SetString("EndDate", endDate.ToString());
|
||||
|
||||
return RedirectToAction("WorkpieceTimeReport");
|
||||
return RedirectToAction("WorkpieceDateReport");
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
@ -288,12 +292,18 @@ namespace FactoryWorkerApp.Controllers
|
||||
var startDate = DateTime.Parse(startDateStr);
|
||||
var endDate = DateTime.Parse(endDateStr).AddDays(1);
|
||||
|
||||
var values = _logic.GetWorkpieceTime(startDate, endDate, Client.user.Id);
|
||||
var reports = _workerReportLogic.GetWorkpieces(
|
||||
new ClientSearchModel
|
||||
{
|
||||
Id = Client.user.Id
|
||||
},
|
||||
new ReportBindingModel
|
||||
{
|
||||
DateFrom = startDate,
|
||||
DateTo = endDate,
|
||||
});
|
||||
return View(reports);
|
||||
|
||||
ViewBag.StartDate = startDate;
|
||||
ViewBag.EndDate = endDate;
|
||||
|
||||
return View(values);
|
||||
|
||||
|
||||
}
|
||||
@ -345,6 +355,55 @@ namespace FactoryWorkerApp.Controllers
|
||||
_logic.CreateExecutionPhase(model);
|
||||
return RedirectToAction("ExecutionPhases");
|
||||
}
|
||||
[HttpPost]
|
||||
public IActionResult CreateWord(List<int> ids)
|
||||
{
|
||||
_workerReportLogic.SaveProudctsToWordFile(
|
||||
new ReportBindingModel
|
||||
{
|
||||
FileName = "D:\\temp\\report.docx"
|
||||
},
|
||||
ids);
|
||||
return PhysicalFile("D:\\temp\\report.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "Отчет по изделиям.docx");
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public IActionResult CreateExcel(List<int> ids)
|
||||
{
|
||||
_workerReportLogic.SaveProductsToExcelFile(
|
||||
new ReportBindingModel
|
||||
{
|
||||
FileName = "D:\\temp\\report.xlsx"
|
||||
},
|
||||
ids);
|
||||
return PhysicalFile("D:\\temp\\report.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Отчет по изделиям.xlsx");
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public IActionResult SendMail()
|
||||
{
|
||||
var startDateStr = HttpContext.Session.GetString("StartDate");
|
||||
var endDateStr = HttpContext.Session.GetString("EndDate");
|
||||
var startDate = DateTime.Parse(startDateStr);
|
||||
var endDate = DateTime.Parse(endDateStr).AddDays(1);
|
||||
_workerReportLogic.SaveWorkpiecesToPdfFile(
|
||||
new ClientSearchModel
|
||||
{
|
||||
Id = Client.user.Id
|
||||
},
|
||||
new ReportBindingModel
|
||||
{
|
||||
DateFrom = startDate,
|
||||
DateTo = endDate,
|
||||
FileName = "D:\\temp\\report.pdf"
|
||||
});
|
||||
_abstractMailWorker.MailSendAsync(new MailSendInfoBindingModel
|
||||
{
|
||||
MailAddress = Client.user.Email,
|
||||
Subject = $"Отчет по заготовкам пользователя {Client.user.Login}",
|
||||
Text = $"Отчет по заготовкам с {startDate.ToShortDateString()} по {endDate.ToShortDateString()}"
|
||||
});
|
||||
return Redirect("Index");
|
||||
}
|
||||
}
|
||||
}
|
@ -5,6 +5,8 @@ using FactoryDatabaseImplement.Implements;
|
||||
using FactoryWorkerApp;
|
||||
using FactoryBusinessLogic.OfficePackage;
|
||||
using FactoryBusinessLogic.OfficePackage.Implements;
|
||||
using FactoryBuisinessLogic.MailWorker;
|
||||
using FactoryContracts.BindingModels;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
@ -32,6 +34,8 @@ builder.Services.AddTransient<WorkerLogic>();
|
||||
builder.Services.AddTransient<AbstractSaveToExcel, SaveToExcel>();
|
||||
builder.Services.AddTransient<AbstractSaveToPdf, SaveToPdf>();
|
||||
builder.Services.AddTransient<AbstractSaveToWord, SaveToWord>();
|
||||
builder.Services.AddSingleton<AbstractMailWorker, MailKitWorker>();
|
||||
|
||||
|
||||
builder.Services.AddSession(options =>
|
||||
{
|
||||
@ -43,6 +47,17 @@ builder.Services.AddSession(options =>
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
var mailSender = app.Services.GetService<AbstractMailWorker>();
|
||||
|
||||
mailSender?.MailConfig(new MailConfigBindingModel
|
||||
{
|
||||
MailLogin = builder.Configuration?.GetSection("MailLogin")?.Value?.ToString() ?? string.Empty,
|
||||
MailPassword = builder.Configuration?.GetSection("MailPassword")?.Value?.ToString() ?? string.Empty,
|
||||
SmtpClientHost = builder.Configuration?.GetSection("SmtpClientHost")?.Value?.ToString() ?? string.Empty,
|
||||
SmtpClientPort = Convert.ToInt32(builder.Configuration?.GetSection("SmtpClientPort")?.Value?.ToString()),
|
||||
PopHost = builder.Configuration?.GetSection("PopHost")?.Value?.ToString() ?? string.Empty,
|
||||
PopPort = Convert.ToInt32(builder.Configuration?.GetSection("PopPort")?.Value?.ToString())
|
||||
});
|
||||
// Configure the HTTP request pipeline.
|
||||
if (!app.Environment.IsDevelopment())
|
||||
{
|
||||
@ -55,6 +70,7 @@ app.UseHttpsRedirection();
|
||||
app.UseStaticFiles();
|
||||
|
||||
app.UseRouting();
|
||||
app.UseSession();
|
||||
|
||||
app.UseAuthorization();
|
||||
|
||||
|
@ -14,7 +14,7 @@
|
||||
<div class="row">Выберите планы</div>
|
||||
<div class="row">
|
||||
<div class="col-4">Планы:</div>
|
||||
<select name="plans" class="form-control border border-dark rounded" multiple size="5" asp-items="@(new SelectList(ViewBag.plans, "Id", "ProductionName"))">
|
||||
<select name="plans" class="form-control border border-dark rounded" multiple size="5" asp-items="@(new SelectList(ViewBag.ids, "Id", "ProductionName"))">
|
||||
</select>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Создать отчёт</button>
|
||||
|
@ -10,20 +10,12 @@
|
||||
|
||||
<div class="text-center">
|
||||
@{
|
||||
//if (Model == null)
|
||||
//{
|
||||
// <h3 class="display-4">Авторизируйтесь</h3>
|
||||
// return;
|
||||
//}
|
||||
|
||||
<p>
|
||||
<a asp-action="Workpieces">Заготовки</a>
|
||||
</p>
|
||||
<p>
|
||||
<a asp-action="PlanProductions">Планы производства</a>
|
||||
</p>
|
||||
<p>
|
||||
<a asp-action="ConnectionPlanProductionWorkpiece">Привязка планов производства к заготовкам</a>
|
||||
</p>
|
||||
<p>
|
||||
<a asp-action="ExecutionPhases">Этапы выполнения</a>
|
||||
|
@ -11,15 +11,10 @@
|
||||
|
||||
<div class="text-center">
|
||||
@{
|
||||
if (Model == null)
|
||||
{
|
||||
<h3 class="display-4">Авторизируйтесь</h3>
|
||||
return;
|
||||
}
|
||||
|
||||
<p>
|
||||
<a asp-action="PlanProduction">Создать план</a>
|
||||
|
||||
<a asp-action="ConnectionPlanProductionWorkpiece">Привязка планов производства к заготовкам</a>
|
||||
</p>
|
||||
|
||||
<table class="table">
|
||||
|
@ -9,10 +9,26 @@
|
||||
<h1 class="display-4">Список изделий по планам производств</h1>
|
||||
</div>
|
||||
<div class="d-flex">
|
||||
<form asp-controller="ReportToWord" method="post">
|
||||
<form asp-controller="Home" asp-action="CreateWord" method="post">
|
||||
<div style="display: none;">
|
||||
<select name="ids" multiple>
|
||||
@foreach (var it in ViewBag.ids)
|
||||
{
|
||||
<option value="@(it)" selected="selected"></option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary me-3">Сгенерировать отчет в Word</button>
|
||||
</form>
|
||||
<form asp-controller="ReportToExcel" method="post">
|
||||
<form asp-controller="Home" asp-action="CreateExcel" method="post">
|
||||
<div style="display: none;">
|
||||
<select name="ids" multiple>
|
||||
@foreach (var it in ViewBag.ids)
|
||||
{
|
||||
<option value="@(it)" selected="selected"></option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Сгенерировать отчет в Excel</button>
|
||||
</form>
|
||||
</div>
|
||||
|
@ -6,6 +6,6 @@
|
||||
<h1 class="display-4">Выберите тип отчета</h1>
|
||||
<div class="list-group">
|
||||
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="GetByPlans">Отчет изделий по производствам</a>
|
||||
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="WorkpieceDateReport">Отчет по заготовкам по датам</a>
|
||||
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="WorkpieceTimeChoose">Отчет по заготовкам по датам</a>
|
||||
</div>
|
||||
</div>
|
@ -10,7 +10,9 @@
|
||||
<h1 class="display-4">Список заготовок за период</h1>
|
||||
</div>
|
||||
|
||||
<form asp-controller="Report" method="post">
|
||||
<form asp-controller="Home" asp-action="SendMail" method="post">
|
||||
<input type="hidden" name="startDate" readonly value="@(ViewBag.startDate)" />
|
||||
<input type="hidden" name="endDate" readonly value="@(ViewBag.endDate)" />
|
||||
<button type="submit" class="btn btn-primary">Отправить отчет на почту</button>
|
||||
</form>
|
||||
|
||||
@ -24,23 +26,23 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var workpice in Model)
|
||||
@foreach (var workpiece in Model)
|
||||
{
|
||||
<tr>
|
||||
<td>@workpice.WorkpieceName</td>
|
||||
<td>@workpiece.WorkpieceName</td>
|
||||
<td>
|
||||
<ul>
|
||||
@foreach (var machine in workpice.Machines)
|
||||
@foreach (var machine in workpiece.Machines)
|
||||
{
|
||||
<li>@machine</li>
|
||||
<li>@machine.MachineName</li>
|
||||
}
|
||||
</ul>
|
||||
</td>
|
||||
<td>
|
||||
<ul>
|
||||
@foreach (var phase in workpice.ExecutionPhases)
|
||||
@foreach (var phase in workpiece.ExecutionPhases)
|
||||
{
|
||||
<li>@phase</li>
|
||||
<li>@phase.PlanProductionName</li>
|
||||
}
|
||||
</ul>
|
||||
</td>
|
||||
|
@ -64,7 +64,7 @@
|
||||
var formData = $('#TimeReportWeb').serialize();
|
||||
|
||||
$.post('/Home/TimeReportWeb', formData, function (response) {
|
||||
window.location.href = '/Home/WorkpieceTimeReport';
|
||||
window.location.href = '/Home/WorkpieceDateReport';
|
||||
}).fail(function () {
|
||||
alert('Произошла ошибка при создании отчета.');
|
||||
});
|
@ -33,6 +33,9 @@
|
||||
<th>
|
||||
Цена
|
||||
</th>
|
||||
<th>
|
||||
Дата
|
||||
</th>
|
||||
<th>
|
||||
Изменить заготовку
|
||||
</th>
|
||||
@ -54,6 +57,9 @@
|
||||
<td>
|
||||
@Html.DisplayFor(modelItem => item.Cost)
|
||||
</td>
|
||||
<td>
|
||||
@Html.DisplayFor(modelItem => item.DateCreate)
|
||||
</td>
|
||||
<td>
|
||||
<a asp-action="Workpiece" asp-route-id="@item.Id" class="btn btn-primary">Изменить</a>
|
||||
</td>
|
||||
|
@ -114,28 +114,15 @@ namespace FactoryWorkerApp
|
||||
{
|
||||
return _productLogic.ReadList(null);
|
||||
}
|
||||
|
||||
public List<WorkpieceTimeReportViewModel>? GetWorkpieceTime(DateTime? startDate, DateTime? endDate, int ClientId)
|
||||
{
|
||||
var workpieces = _workpieceLogic.ReadList(new() { DateFrom = startDate, DateTo = endDate, ClientId = ClientId });
|
||||
if (workpieces == null)
|
||||
return new();
|
||||
List<WorkpieceTimeReportViewModel> detailTimeReports = new List<WorkpieceTimeReportViewModel>();
|
||||
foreach (var i in workpieces)
|
||||
{
|
||||
WorkpieceTimeReportViewModel report = new();
|
||||
var workpiece = _workpieceLogic.ReadElement(new() { Id = i.Id });
|
||||
report.WorkpieceName = workpiece!.WorkpieceName;
|
||||
var phases = _executionPhaseLogic.ReadList(new() { WorkpieceId = i.Id });
|
||||
if (phases != null)
|
||||
report.ExecutionPhases = phases.Select(w => w.ExecutionPhaseName).ToList();
|
||||
var machines = _machineLogic.ReadList(new() { WorkpieceId = i.Id });
|
||||
if (machines != null)
|
||||
report.Machines = machines.Select(w => w.MachineName).ToList();
|
||||
detailTimeReports.Add(report);
|
||||
}
|
||||
|
||||
return detailTimeReports;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -7,5 +7,12 @@
|
||||
},
|
||||
"AllowedHosts": "*",
|
||||
|
||||
"IPAddress": "http://localhost:5283/"
|
||||
"IPAddress": "http://localhost:5283/",
|
||||
|
||||
"SmtpClientHost": "smtp.gmail.com",
|
||||
"SmtpClientPort": "587",
|
||||
"PopHost": "pop.gmail.com",
|
||||
"PopPort": "995",
|
||||
"MailLogin": "labworker83@gmail.com",
|
||||
"MailPassword": "wpxc drvx lhqb uqpe"
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user