report complete
This commit is contained in:
parent
76816dd5d3
commit
ac028b54ee
@ -211,37 +211,41 @@ namespace CanteenBusinessLogic.BusinessLogics
|
|||||||
Cooks = GetCooksPCView(model)
|
Cooks = GetCooksPCView(model)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
public void saveCooksToExcel(ReportBindingModel model)
|
public byte[] saveCooksToExcel(ReportBindingModel model)
|
||||||
{
|
{
|
||||||
saveToExcel.CreateCooksReport(new ExcelInfo()
|
byte[] report = saveToExcel.CreateCooksReport(new ExcelInfo()
|
||||||
{
|
{
|
||||||
Title = "Список поваров:",
|
Title = "Список поваров:",
|
||||||
Cooks = GetCooksByLunches(model)
|
Cooks = GetCooksByLunches(model)
|
||||||
});
|
});
|
||||||
|
return report;
|
||||||
}
|
}
|
||||||
public void saveOrdersToExcel(ReportBindingModel model)
|
public byte[] saveOrdersToExcel(ReportBindingModel model)
|
||||||
{
|
{
|
||||||
saveToExcel.CreateOrdersReport(new ExcelInfo()
|
byte[] report = saveToExcel.CreateOrdersReport(new ExcelInfo()
|
||||||
{
|
{
|
||||||
Title = "Список заказов:",
|
Title = "Список заказов:",
|
||||||
Orders = GetOrdersByProducts(model)
|
Orders = GetOrdersByProducts(model)
|
||||||
});
|
});
|
||||||
|
return report;
|
||||||
}
|
}
|
||||||
public void saveCooksToWord(ReportBindingModel model)
|
public byte[] saveCooksToWord(ReportBindingModel model)
|
||||||
{
|
{
|
||||||
saveToWord.CreateCooksDoc(new WordInfo()
|
byte[] report = saveToWord.CreateCooksDoc(new WordInfo()
|
||||||
{
|
{
|
||||||
Title = "Список поваров",
|
Title = "Список поваров",
|
||||||
Cooks = GetCooksByLunches(model)
|
Cooks = GetCooksByLunches(model)
|
||||||
});
|
});
|
||||||
|
return report;
|
||||||
}
|
}
|
||||||
public void saveOrdersToWord(ReportBindingModel model)
|
public byte[] saveOrdersToWord(ReportBindingModel model)
|
||||||
{
|
{
|
||||||
saveToWord.CreateOrdersDoc(new WordInfo()
|
byte[] report = saveToWord.CreateOrdersDoc(new WordInfo()
|
||||||
{
|
{
|
||||||
Title = "Список заказов",
|
Title = "Список заказов",
|
||||||
Orders = GetOrdersByProducts(model)
|
Orders = GetOrdersByProducts(model)
|
||||||
});
|
});
|
||||||
|
return report;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ namespace CanteenBusinessLogic.OfficePackage
|
|||||||
{
|
{
|
||||||
public abstract class AbstractSaveToExcel
|
public abstract class AbstractSaveToExcel
|
||||||
{
|
{
|
||||||
public void CreateCooksReport(ExcelInfo info)
|
public byte[] CreateCooksReport(ExcelInfo info)
|
||||||
{
|
{
|
||||||
CreateExcel(info);
|
CreateExcel(info);
|
||||||
InsertCellInWorksheet(new ExcelCellParameters
|
InsertCellInWorksheet(new ExcelCellParameters
|
||||||
@ -75,10 +75,10 @@ namespace CanteenBusinessLogic.OfficePackage
|
|||||||
rowIndex++;
|
rowIndex++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SaveExcel(info);
|
return GetFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CreateOrdersReport(ExcelInfo info)
|
public byte[] CreateOrdersReport(ExcelInfo info)
|
||||||
{
|
{
|
||||||
CreateExcel(info);
|
CreateExcel(info);
|
||||||
InsertCellInWorksheet(new ExcelCellParameters
|
InsertCellInWorksheet(new ExcelCellParameters
|
||||||
@ -141,11 +141,12 @@ namespace CanteenBusinessLogic.OfficePackage
|
|||||||
rowIndex++;
|
rowIndex++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SaveExcel(info);
|
return GetFile();
|
||||||
}
|
}
|
||||||
protected abstract void CreateExcel(ExcelInfo info);
|
protected abstract void CreateExcel(ExcelInfo info);
|
||||||
protected abstract void InsertCellInWorksheet(ExcelCellParameters excelParams);
|
protected abstract void InsertCellInWorksheet(ExcelCellParameters excelParams);
|
||||||
protected abstract void MergeCells(ExcelMergeParameters excelParams);
|
protected abstract void MergeCells(ExcelMergeParameters excelParams);
|
||||||
protected abstract void SaveExcel(ExcelInfo info);
|
protected abstract void SaveExcel();
|
||||||
|
protected abstract byte[] GetFile();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ namespace CanteenBusinessLogic.OfficePackage
|
|||||||
{
|
{
|
||||||
public abstract class AbstractSaveToWord
|
public abstract class AbstractSaveToWord
|
||||||
{
|
{
|
||||||
public void CreateCooksDoc(WordInfo info)
|
public byte[] CreateCooksDoc(WordInfo info)
|
||||||
{
|
{
|
||||||
CreateWord(info);
|
CreateWord(info);
|
||||||
CreateParagraph(new WordParagraph
|
CreateParagraph(new WordParagraph
|
||||||
@ -72,9 +72,9 @@ namespace CanteenBusinessLogic.OfficePackage
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SaveWord(info);
|
return GetFile();
|
||||||
}
|
}
|
||||||
public void CreateOrdersDoc(WordInfo info)
|
public byte[] CreateOrdersDoc(WordInfo info)
|
||||||
{
|
{
|
||||||
CreateWord(info);
|
CreateWord(info);
|
||||||
CreateParagraph(new WordParagraph
|
CreateParagraph(new WordParagraph
|
||||||
@ -136,10 +136,11 @@ namespace CanteenBusinessLogic.OfficePackage
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SaveWord(info);
|
return GetFile();
|
||||||
}
|
}
|
||||||
protected abstract void CreateWord(WordInfo info);
|
protected abstract void CreateWord(WordInfo info);
|
||||||
protected abstract void CreateParagraph(WordParagraph paragraph);
|
protected abstract void CreateParagraph(WordParagraph paragraph);
|
||||||
protected abstract void SaveWord(WordInfo info);
|
protected abstract void SaveWord();
|
||||||
|
protected abstract byte[] GetFile();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ namespace CanteenBusinessLogic.OfficePackage.Implements
|
|||||||
{
|
{
|
||||||
public class SaveToExcel : AbstractSaveToExcel
|
public class SaveToExcel : AbstractSaveToExcel
|
||||||
{
|
{
|
||||||
|
private readonly string tempFileName = "temp.docx";
|
||||||
private SpreadsheetDocument spreadsheetDocument;
|
private SpreadsheetDocument spreadsheetDocument;
|
||||||
private SharedStringTablePart shareStringPart;
|
private SharedStringTablePart shareStringPart;
|
||||||
private Worksheet worksheet;
|
private Worksheet worksheet;
|
||||||
@ -192,7 +193,7 @@ namespace CanteenBusinessLogic.OfficePackage.Implements
|
|||||||
}
|
}
|
||||||
protected override void CreateExcel(ExcelInfo info)
|
protected override void CreateExcel(ExcelInfo info)
|
||||||
{
|
{
|
||||||
spreadsheetDocument = SpreadsheetDocument.Create(info.FileName, SpreadsheetDocumentType.Workbook);
|
spreadsheetDocument = SpreadsheetDocument.Create(tempFileName, SpreadsheetDocumentType.Workbook);
|
||||||
// Создаем книгу (в ней хранятся листы)
|
// Создаем книгу (в ней хранятся листы)
|
||||||
var workbookpart = spreadsheetDocument.AddWorkbookPart();
|
var workbookpart = spreadsheetDocument.AddWorkbookPart();
|
||||||
workbookpart.Workbook = new Workbook();
|
workbookpart.Workbook = new Workbook();
|
||||||
@ -289,10 +290,17 @@ namespace CanteenBusinessLogic.OfficePackage.Implements
|
|||||||
};
|
};
|
||||||
mergeCells.Append(mergeCell);
|
mergeCells.Append(mergeCell);
|
||||||
}
|
}
|
||||||
protected override void SaveExcel(ExcelInfo info)
|
protected override void SaveExcel()
|
||||||
{
|
{
|
||||||
spreadsheetDocument.WorkbookPart.Workbook.Save();
|
spreadsheetDocument.WorkbookPart.Workbook.Save();
|
||||||
spreadsheetDocument.Close();
|
spreadsheetDocument.Close();
|
||||||
}
|
}
|
||||||
|
protected override byte[] GetFile()
|
||||||
|
{
|
||||||
|
SaveExcel();
|
||||||
|
byte[] file = File.ReadAllBytes(tempFileName);
|
||||||
|
File.Delete(tempFileName);
|
||||||
|
return file;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ namespace CanteenBusinessLogic.OfficePackage.Implements
|
|||||||
{
|
{
|
||||||
public class SaveToWord : AbstractSaveToWord
|
public class SaveToWord : AbstractSaveToWord
|
||||||
{
|
{
|
||||||
|
private readonly string tempFileName = "temp.docx";
|
||||||
private WordprocessingDocument wordDocument;
|
private WordprocessingDocument wordDocument;
|
||||||
private Body docBody;
|
private Body docBody;
|
||||||
private static JustificationValues GetJustificationValues(WordJustificationType type)
|
private static JustificationValues GetJustificationValues(WordJustificationType type)
|
||||||
@ -54,7 +55,7 @@ namespace CanteenBusinessLogic.OfficePackage.Implements
|
|||||||
}
|
}
|
||||||
protected override void CreateWord(WordInfo info)
|
protected override void CreateWord(WordInfo info)
|
||||||
{
|
{
|
||||||
wordDocument = WordprocessingDocument.Create(info.FileName, WordprocessingDocumentType.Document);
|
wordDocument = WordprocessingDocument.Create(tempFileName, WordprocessingDocumentType.Document);
|
||||||
MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();
|
MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();
|
||||||
mainPart.Document = new Document();
|
mainPart.Document = new Document();
|
||||||
docBody = mainPart.Document.AppendChild(new Body());
|
docBody = mainPart.Document.AppendChild(new Body());
|
||||||
@ -85,11 +86,18 @@ namespace CanteenBusinessLogic.OfficePackage.Implements
|
|||||||
docBody.AppendChild(docParagraph);
|
docBody.AppendChild(docParagraph);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
protected override void SaveWord(WordInfo info)
|
protected override void SaveWord()
|
||||||
{
|
{
|
||||||
docBody.AppendChild(CreateSectionProperties());
|
docBody.AppendChild(CreateSectionProperties());
|
||||||
wordDocument.MainDocumentPart.Document.Save();
|
wordDocument.MainDocumentPart.Document.Save();
|
||||||
wordDocument.Close();
|
wordDocument.Close();
|
||||||
}
|
}
|
||||||
|
protected override byte[] GetFile()
|
||||||
|
{
|
||||||
|
SaveWord();
|
||||||
|
byte[] file = File.ReadAllBytes(tempFileName);
|
||||||
|
File.Delete(tempFileName);
|
||||||
|
return file;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,10 +10,11 @@ namespace CanteenContracts.BindingModels
|
|||||||
public class ReportBindingModel
|
public class ReportBindingModel
|
||||||
{
|
{
|
||||||
public string? FileName { get; set; }
|
public string? FileName { get; set; }
|
||||||
|
public string? FileType { get; set; }
|
||||||
public DateTime? DateAfter { get; set; }
|
public DateTime? DateAfter { get; set; }
|
||||||
public DateTime? DateBefore { get; set; }
|
public DateTime? DateBefore { get; set; }
|
||||||
public int UserId { get; set; }
|
public int UserId { get; set; }
|
||||||
public List<int>? LunchId { get; set; }
|
public int[]? LunchId { get; set; }
|
||||||
public List<int>? ProductId { get; set; }
|
public int[]? ProductId { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,12 +12,13 @@ namespace CanteenContracts.BusinessLogicsContracts
|
|||||||
public interface IReportLogic
|
public interface IReportLogic
|
||||||
{
|
{
|
||||||
public List<ReportCookView> GetCooksByLunches(ReportBindingModel model);
|
public List<ReportCookView> GetCooksByLunches(ReportBindingModel model);
|
||||||
List<ReportLunchesPCView> GetLunchesPCView(ReportBindingModel model);
|
public List<ReportLunchesPCView> GetLunchesPCView(ReportBindingModel model);
|
||||||
|
public List<ReportCooksPCView> GetCooksPCView(ReportBindingModel model);
|
||||||
void saveLunchesToPdfFile(ReportBindingModel model);
|
void saveLunchesToPdfFile(ReportBindingModel model);
|
||||||
void saveCooksToPdfFile(ReportBindingModel model);
|
void saveCooksToPdfFile(ReportBindingModel model);
|
||||||
void saveCooksToWord(ReportBindingModel model);
|
byte[] saveCooksToWord(ReportBindingModel model);
|
||||||
void saveCooksToExcel(ReportBindingModel model);
|
byte[] saveCooksToExcel(ReportBindingModel model);
|
||||||
public void saveOrdersToExcel(ReportBindingModel model);
|
public byte[] saveOrdersToExcel(ReportBindingModel model);
|
||||||
public void saveOrdersToWord(ReportBindingModel model);
|
public byte[] saveOrdersToWord(ReportBindingModel model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,5 +43,24 @@ namespace CanteenManagerApp
|
|||||||
throw new Exception(result);
|
throw new Exception(result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public static O? PostRequestWithResult<I, O>(string requestUrl, I model)
|
||||||
|
{
|
||||||
|
var json = JsonConvert.SerializeObject(model);
|
||||||
|
var data = new StringContent(json, Encoding.UTF8, "application/json");
|
||||||
|
|
||||||
|
var response = _client.PostAsync(requestUrl, data);
|
||||||
|
|
||||||
|
var result = response.Result.Content.ReadAsStringAsync().Result;
|
||||||
|
|
||||||
|
if (response.Result.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
var temp = JsonConvert.DeserializeObject<O>(result);
|
||||||
|
return temp;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return default;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -487,36 +487,23 @@ namespace CanteenManagerApp.Controllers
|
|||||||
return View(new ReportBindingModel());
|
return View(new ReportBindingModel());
|
||||||
}
|
}
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public void ReportPdf(ReportBindingModel model)
|
public List<ReportCooksPCView> ReportPdf([FromBody] ReportBindingModel model)
|
||||||
{
|
{
|
||||||
model.UserId = APIClient.Manager.Id;
|
model.UserId = APIClient.Manager.Id;
|
||||||
APIClient.PostRequest("api/main/SaveCooksToPDF", model);
|
List<ReportCooksPCView> lunches = APIClient.PostRequestWithResult<ReportBindingModel, List<ReportCooksPCView>>("api/main/getCooksForPdf", model);
|
||||||
Response.Redirect("Index");
|
return lunches;
|
||||||
|
}
|
||||||
|
[HttpPost]
|
||||||
|
public int[]? SaveReport([FromBody] ReportBindingModel model)
|
||||||
|
{
|
||||||
|
model.UserId = APIClient.Manager.Id;
|
||||||
|
byte[] file = APIClient.PostRequestWithResult<ReportBindingModel, byte[]>("api/main/SaveOrdersToFile", model);
|
||||||
|
return file!.Select(b => (int)b).ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public void ReportXsl(ReportBindingModel model)
|
public void ReportEmail([FromBody] ReportBindingModel model)
|
||||||
{
|
{
|
||||||
model.UserId = APIClient.Manager.Id;
|
|
||||||
APIClient.PostRequest("api/main/SaveOrdersToXSL", model);
|
|
||||||
Response.Redirect("Index");
|
|
||||||
}
|
|
||||||
|
|
||||||
[HttpPost]
|
|
||||||
public void ReportWord(ReportBindingModel model)
|
|
||||||
{
|
|
||||||
model.UserId = APIClient.Manager.Id;
|
|
||||||
APIClient.PostRequest("api/main/SaveOrdersToWORD", model);
|
|
||||||
Response.Redirect("Index");
|
|
||||||
}
|
|
||||||
|
|
||||||
[HttpPost]
|
|
||||||
public void ReportEmail(ReportBindingModel model)
|
|
||||||
{
|
|
||||||
if (APIClient.Manager == null)
|
|
||||||
{
|
|
||||||
throw new Exception("Доступ возможен только авторизованным пользователям");
|
|
||||||
}
|
|
||||||
model.UserId = APIClient.Manager.Id;
|
model.UserId = APIClient.Manager.Id;
|
||||||
APIClient.PostRequest($"api/manager/SendEmail", new MailSendInfoBindingModel
|
APIClient.PostRequest($"api/manager/SendEmail", new MailSendInfoBindingModel
|
||||||
{
|
{
|
||||||
@ -524,7 +511,6 @@ namespace CanteenManagerApp.Controllers
|
|||||||
Subject = "Отчет",
|
Subject = "Отчет",
|
||||||
report = model
|
report = model
|
||||||
});
|
});
|
||||||
|
|
||||||
Response.Redirect("Report");
|
Response.Redirect("Report");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,42 +1,123 @@
|
|||||||
@using CanteenContracts.BindingModels;
|
@{
|
||||||
@model ReportBindingModel
|
|
||||||
|
|
||||||
@{
|
|
||||||
ViewBag.Title = "Report";
|
ViewBag.Title = "Report";
|
||||||
}
|
}
|
||||||
|
|
||||||
<h2>Отчеты</h2>
|
<body>
|
||||||
|
<h2>Отчеты</h2>
|
||||||
@using (Html.BeginForm("Report", "Home", FormMethod.Post))
|
|
||||||
{
|
|
||||||
<div class="row">
|
|
||||||
<h4>Pdf</h4>
|
|
||||||
<div class="col-md-6">
|
|
||||||
<div class="form-group">
|
|
||||||
@Html.LabelFor(m => m.DateAfter, "От")
|
|
||||||
@Html.TextBoxFor(m => m.DateAfter, new { type = "date", @class = "form-control" })
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-md-6">
|
|
||||||
<div class="form-group">
|
|
||||||
@Html.LabelFor(m => m.DateBefore, "До")
|
|
||||||
@Html.TextBoxFor(m => m.DateBefore, new { type = "date", @class = "form-control" })
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group mt-2">
|
|
||||||
<button type="submit" class="btn btn-primary" formaction="@Url.Action("ReportPdf", "Home")">Сохранить в pdf</button>
|
|
||||||
<button type="submit" class="btn btn-primary" formaction="@Url.Action("ReportEmail", "Home")">Отправить pdf по почте</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="mt-3">
|
<div class="mt-3">
|
||||||
<h4>Word, Excel</h4>
|
<h4>Word, Excel</h4>
|
||||||
<div class="form-group mb-2">
|
<div class="form-group mb-2">
|
||||||
@Html.LabelFor(m => m.ProductId, "Выбранные продукты")
|
<label for="ProductId">Выбранные продукты</label>
|
||||||
@Html.DropDownListFor(m => m.ProductId, new SelectList(ViewBag.ProductList, "Id", "ProductName"), new { @class = "form-control", multiple = "multiple" })
|
<select id="ProductId" name="LunchId" class="form-control" multiple>
|
||||||
|
@foreach (var item in ViewBag.ProductList)
|
||||||
|
{
|
||||||
|
<option value="@item.Id">@item.ProductName</option>
|
||||||
|
}
|
||||||
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<button type="submit" class="btn btn-primary" formaction="@Url.Action("ReportXsl", "Home")">Сохранить в excel</button>
|
<button type="button" class="btn btn-primary" id="excel-button">Сохранить в excel</button>
|
||||||
<button type="submit" class="btn btn-primary" formaction="@Url.Action("ReportWord", "Home")">Сохранить в word</button>
|
<button type="button" class="btn btn-primary" id="word-button">Сохранить в word</button>
|
||||||
</div>
|
</div>
|
||||||
}
|
|
||||||
|
<div class="row">
|
||||||
|
<h4>Pdf</h4>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="DateAfter">От</label>
|
||||||
|
<input type="date" id="DateAfter" name="DateAfter" class="form-control" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="DateBefore">До</label>
|
||||||
|
<input type="date" id="DateBefore" name="DateBefore" class="form-control" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group mt-2">
|
||||||
|
<button type="button" id="show-button">Показать</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="email-button">Отправить pdf по почте</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<table id="cooks-table" class="table table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Id повара</th>
|
||||||
|
<th>ФИО повара</th>
|
||||||
|
<th>Id обеда</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody></tbody>
|
||||||
|
</table>
|
||||||
|
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||||||
|
<script src="~/js/site.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('#show-button').click(function() {
|
||||||
|
var model = {
|
||||||
|
"DateBefore": document.getElementById("DateBefore").value,
|
||||||
|
"DateAfter": document.getElementById("DateAfter").value
|
||||||
|
};
|
||||||
|
var jsonData = JSON.stringify(model);
|
||||||
|
$.ajax({
|
||||||
|
url: `/home/ReportPdf`,
|
||||||
|
type: 'POST',
|
||||||
|
dataType: 'json',
|
||||||
|
contentType: 'application/json',
|
||||||
|
data: JSON.stringify(model),
|
||||||
|
success: function(data) {
|
||||||
|
var tableBody = $('#cooks-table tbody');
|
||||||
|
tableBody.empty();
|
||||||
|
|
||||||
|
$.each(data, function(index, cook) {
|
||||||
|
var rowCook = $('<tr></tr>');
|
||||||
|
|
||||||
|
var dateCell = $('<td></td>').text(cook.cookId);
|
||||||
|
rowCook.append(dateCell);
|
||||||
|
|
||||||
|
var lunchIdCell = $('<td></td>').text(cook.fio);
|
||||||
|
rowCook.append(lunchIdCell);
|
||||||
|
|
||||||
|
tableBody.append(rowCook);
|
||||||
|
|
||||||
|
$.each(cook.lunches, function(index, lunch) {
|
||||||
|
var rowLunch = $('<tr></tr>');
|
||||||
|
var orderCell = $('<td></td>').text(lunch.id);
|
||||||
|
|
||||||
|
rowLunch.append($('<td></td>').text(""));
|
||||||
|
rowLunch.append($('<td></td>').text(""));
|
||||||
|
|
||||||
|
rowLunch.append(orderCell);
|
||||||
|
tableBody.append(rowLunch);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
error: function() {
|
||||||
|
console.log('Произошла ошибка при получении данных');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
$('#email-button').click(function() {
|
||||||
|
var model = {
|
||||||
|
"DateBefore": document.getElementById("DateBefore").value,
|
||||||
|
"DateAfter": document.getElementById("DateAfter").value
|
||||||
|
};
|
||||||
|
var jsonData = JSON.stringify(model);
|
||||||
|
console.log(model);
|
||||||
|
$.ajax({
|
||||||
|
url: `/home/ReportEmail`,
|
||||||
|
type: 'POST',
|
||||||
|
dataType: 'json',
|
||||||
|
contentType: 'application/json',
|
||||||
|
data: JSON.stringify(model)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,4 +1,71 @@
|
|||||||
// Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
|
const wordButton = document.getElementById("word-button");
|
||||||
// for details on configuring this project to bundle and minify static web assets.
|
const excelButton = document.getElementById("excel-button");
|
||||||
|
const productIdSelect = document.getElementById("ProductId");
|
||||||
|
const wordMIME = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
||||||
|
const excelMIME = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
||||||
|
|
||||||
// Write your JavaScript code.
|
if (wordButton) {
|
||||||
|
wordButton.addEventListener("click", () => {
|
||||||
|
saveList("docx");
|
||||||
|
console.log("сохранить в docx")
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (excelButton) {
|
||||||
|
excelButton.addEventListener("click", () => {
|
||||||
|
saveList("xlsx");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const saveList = async function (fileType) {
|
||||||
|
let productIdSelect = document.getElementById("ProductId");
|
||||||
|
if (!productIdSelect) {
|
||||||
|
console.log("Element with id 'ProductId' not found.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let listModel = {
|
||||||
|
"ProductId": Array.from(productIdSelect.selectedOptions).map(option => option.value),
|
||||||
|
"FileType": fileType
|
||||||
|
};
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: `/home/SaveReport`,
|
||||||
|
type: 'POST',
|
||||||
|
contentType: 'application/json',
|
||||||
|
headers: { "Content-Type": "application/json" },
|
||||||
|
data: JSON.stringify(listModel)
|
||||||
|
}).done((file) => {
|
||||||
|
let byteArray = new Uint8Array(file);
|
||||||
|
saveFile(byteArray, fileType);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const saveFile = async function (bytes, fileType) {
|
||||||
|
if (window.showSaveFilePicker) {
|
||||||
|
let type;
|
||||||
|
if (fileType == "docx") {
|
||||||
|
type = {
|
||||||
|
description: "Microsoft Word (OpenXML)",
|
||||||
|
accept: { [wordMIME]: [".docx"] }
|
||||||
|
};
|
||||||
|
} else if (fileType == "xlsx") {
|
||||||
|
type = {
|
||||||
|
description: "Microsoft Excel (OpenXML)",
|
||||||
|
accept: { [excelMIME]: [".xlsx"] }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
const opts = {
|
||||||
|
suggestedName: `equipment-purchase-list.${fileType}`,
|
||||||
|
types: [type],
|
||||||
|
};
|
||||||
|
try {
|
||||||
|
const handle = await showSaveFilePicker(opts);
|
||||||
|
const writable = await handle.createWritable();
|
||||||
|
await writable.write(bytes);
|
||||||
|
await writable.close();
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error saving file:", error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
@ -37,11 +37,11 @@ namespace CanteenRestApi.Controllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public void SaveLunchesToPDF(ReportBindingModel model)
|
public List<ReportLunchesPCView> getLunchesForPdf(ReportBindingModel model)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_reportLogic.saveLunchesToPdfFile(new ReportBindingModel()
|
return _reportLogic.GetLunchesPCView(new ReportBindingModel()
|
||||||
{
|
{
|
||||||
DateAfter = model.DateAfter,
|
DateAfter = model.DateAfter,
|
||||||
DateBefore = model.DateBefore,
|
DateBefore = model.DateBefore,
|
||||||
@ -55,11 +55,11 @@ namespace CanteenRestApi.Controllers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public void SaveCooksToPDF(ReportBindingModel model)
|
public List<ReportCooksPCView> getCooksForPdf(ReportBindingModel model)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_reportLogic.saveCooksToPdfFile(new ReportBindingModel()
|
return _reportLogic.GetCooksPCView(new ReportBindingModel()
|
||||||
{
|
{
|
||||||
DateAfter = model.DateAfter,
|
DateAfter = model.DateAfter,
|
||||||
DateBefore = model.DateBefore,
|
DateBefore = model.DateBefore,
|
||||||
@ -74,11 +74,14 @@ namespace CanteenRestApi.Controllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public void SaveCooksToXSL(ReportBindingModel model)
|
public byte[] SaveCooksToFile(ReportBindingModel model)
|
||||||
{
|
{
|
||||||
|
byte[] report = Array.Empty<byte>();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_reportLogic.saveCooksToExcel(new ReportBindingModel()
|
if (model.FileType.Equals("xlsx"))
|
||||||
|
{
|
||||||
|
report = _reportLogic.saveCooksToExcel(new ReportBindingModel()
|
||||||
{
|
{
|
||||||
DateAfter = model.DateAfter,
|
DateAfter = model.DateAfter,
|
||||||
DateBefore = model.DateBefore,
|
DateBefore = model.DateBefore,
|
||||||
@ -86,19 +89,9 @@ namespace CanteenRestApi.Controllers
|
|||||||
LunchId = model.LunchId
|
LunchId = model.LunchId
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
else if (model.FileType.Equals("docx"))
|
||||||
{
|
{
|
||||||
_logger.LogError(ex, "Error during loading list of bouquets");
|
report = _reportLogic.saveCooksToWord(new ReportBindingModel()
|
||||||
throw;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[HttpPost]
|
|
||||||
public void SaveCooksToWORD(ReportBindingModel model)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_reportLogic.saveCooksToWord(new ReportBindingModel()
|
|
||||||
{
|
{
|
||||||
DateAfter = model.DateAfter,
|
DateAfter = model.DateAfter,
|
||||||
DateBefore = model.DateBefore,
|
DateBefore = model.DateBefore,
|
||||||
@ -106,50 +99,91 @@ namespace CanteenRestApi.Controllers
|
|||||||
LunchId = model.LunchId
|
LunchId = model.LunchId
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
return report;
|
||||||
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
return report;
|
||||||
_logger.LogError(ex, "Error during loading list of bouquets");
|
_logger.LogError(ex, "Error during loading list of bouquets");
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
//[HttpPost]
|
||||||
public void SaveOrdersToXSL(ReportBindingModel model)
|
//public void SaveCooksToWORD(ReportBindingModel model)
|
||||||
{
|
//{
|
||||||
try
|
// byte[] report = Array.Empty<byte>();
|
||||||
{
|
// try
|
||||||
_reportLogic.saveOrdersToExcel(new ReportBindingModel()
|
// {
|
||||||
{
|
// _reportLogic.saveCooksToWord(new ReportBindingModel()
|
||||||
UserId = model.UserId,
|
// {
|
||||||
ProductId = model.ProductId
|
// DateAfter = model.DateAfter,
|
||||||
});
|
// DateBefore = model.DateBefore,
|
||||||
|
// UserId = model.UserId,
|
||||||
}
|
// LunchId = model.LunchId
|
||||||
catch (Exception ex)
|
// });
|
||||||
{
|
// }
|
||||||
_logger.LogError(ex, "Error during loading list of bouquets");
|
// catch (Exception ex)
|
||||||
throw;
|
// {
|
||||||
}
|
// _logger.LogError(ex, "Error during loading list of bouquets");
|
||||||
}
|
// throw;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public void SaveOrdersToWORD(ReportBindingModel model)
|
public byte[] SaveOrdersToFile(ReportBindingModel model)
|
||||||
{
|
{
|
||||||
|
byte[] report = Array.Empty<byte>();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_reportLogic.saveOrdersToWord(new ReportBindingModel()
|
if (model.FileType.Equals("xlsx"))
|
||||||
{
|
{
|
||||||
|
report = _reportLogic.saveOrdersToExcel(new ReportBindingModel()
|
||||||
|
{
|
||||||
|
DateAfter = model.DateAfter,
|
||||||
|
DateBefore = model.DateBefore,
|
||||||
UserId = model.UserId,
|
UserId = model.UserId,
|
||||||
ProductId = model.ProductId
|
ProductId = model.ProductId
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
else if (model.FileType.Equals("docx"))
|
||||||
|
{
|
||||||
|
report = _reportLogic.saveOrdersToWord(new ReportBindingModel()
|
||||||
|
{
|
||||||
|
DateAfter = model.DateAfter,
|
||||||
|
DateBefore = model.DateBefore,
|
||||||
|
UserId = model.UserId,
|
||||||
|
ProductId = model.ProductId
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return report;
|
||||||
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
return report;
|
||||||
_logger.LogError(ex, "Error during loading list of bouquets");
|
_logger.LogError(ex, "Error during loading list of bouquets");
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//[HttpPost]
|
||||||
|
//public void SaveOrdersToWORD(ReportBindingModel model)
|
||||||
|
//{
|
||||||
|
// try
|
||||||
|
// {
|
||||||
|
// _reportLogic.saveOrdersToWord(new ReportBindingModel()
|
||||||
|
// {
|
||||||
|
// UserId = model.UserId,
|
||||||
|
// ProductId = model.ProductId
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// catch (Exception ex)
|
||||||
|
// {
|
||||||
|
// _logger.LogError(ex, "Error during loading list of bouquets");
|
||||||
|
// throw;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public List<TablewareViewModel>? GetTablewareList(int visitorId)
|
public List<TablewareViewModel>? GetTablewareList(int visitorId)
|
||||||
{
|
{
|
||||||
|
@ -40,5 +40,24 @@ namespace CanteenVisitorApp
|
|||||||
throw new Exception(result);
|
throw new Exception(result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public static O? PostRequestWithResult<I, O>(string requestUrl, I model)
|
||||||
|
{
|
||||||
|
var json = JsonConvert.SerializeObject(model);
|
||||||
|
var data = new StringContent(json, Encoding.UTF8, "application/json");
|
||||||
|
|
||||||
|
var response = _client.PostAsync(requestUrl, data);
|
||||||
|
|
||||||
|
var result = response.Result.Content.ReadAsStringAsync().Result;
|
||||||
|
|
||||||
|
if (response.Result.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
var temp = JsonConvert.DeserializeObject<O>(result);
|
||||||
|
return temp;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return default;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using CanteenContracts.BindingModels;
|
using CanteenContracts.BindingModels;
|
||||||
using CanteenContracts.View;
|
using CanteenContracts.View;
|
||||||
|
using CanteenContracts.ViewModels;
|
||||||
using CanteenVisitorApp.Models;
|
using CanteenVisitorApp.Models;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
@ -541,31 +542,23 @@ namespace CanteenVisitorApp.Controllers
|
|||||||
return View(new ReportBindingModel());
|
return View(new ReportBindingModel());
|
||||||
}
|
}
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public void ReportPdf(ReportBindingModel model)
|
public List<ReportLunchesPCView> ReportPdf([FromBody] ReportBindingModel model)
|
||||||
{
|
{
|
||||||
model.UserId = APIClient.Visitor.Id;
|
model.UserId = APIClient.Visitor.Id;
|
||||||
APIClient.PostRequest("api/main/SaveLunchesToPDF", model);
|
List<ReportLunchesPCView> lunches = APIClient.PostRequestWithResult<ReportBindingModel, List<ReportLunchesPCView>>("api/main/getLunchesForPdf", model);
|
||||||
Response.Redirect("Index");
|
return lunches;
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public void ReportXsl(ReportBindingModel model)
|
public int[]? SaveReport([FromBody] ReportBindingModel model)
|
||||||
{
|
{
|
||||||
model.UserId = APIClient.Visitor.Id;
|
model.UserId = APIClient.Visitor.Id;
|
||||||
APIClient.PostRequest("api/main/SaveCooksToXSL", model);
|
byte[] file = APIClient.PostRequestWithResult<ReportBindingModel, byte[]>("api/main/SaveCooksToFile", model);
|
||||||
Response.Redirect("Index");
|
return file!.Select(b => (int)b).ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public void ReportWord(ReportBindingModel model)
|
public void ReportEmail([FromBody] ReportBindingModel model)
|
||||||
{
|
|
||||||
model.UserId = APIClient.Visitor.Id;
|
|
||||||
APIClient.PostRequest("api/main/SaveCooksToWORD", model);
|
|
||||||
Response.Redirect("Index");
|
|
||||||
}
|
|
||||||
|
|
||||||
[HttpPost]
|
|
||||||
public void ReportEmail(ReportBindingModel model)
|
|
||||||
{
|
{
|
||||||
model.UserId = APIClient.Visitor.Id;
|
model.UserId = APIClient.Visitor.Id;
|
||||||
APIClient.PostRequest($"api/visitor/SendEmail", new MailSendInfoBindingModel
|
APIClient.PostRequest($"api/visitor/SendEmail", new MailSendInfoBindingModel
|
||||||
|
@ -1,42 +1,138 @@
|
|||||||
@using CanteenContracts.BindingModels;
|
@{
|
||||||
@model ReportBindingModel
|
|
||||||
|
|
||||||
@{
|
|
||||||
ViewBag.Title = "Report";
|
ViewBag.Title = "Report";
|
||||||
}
|
}
|
||||||
|
|
||||||
<h2>Отчеты</h2>
|
<body>
|
||||||
|
<h2>Отчеты</h2>
|
||||||
@using (Html.BeginForm("Report", "Home", FormMethod.Post))
|
|
||||||
{
|
|
||||||
<div class="row">
|
|
||||||
<h4>Pdf</h4>
|
|
||||||
<div class="col-md-6">
|
|
||||||
<div class="form-group">
|
|
||||||
@Html.LabelFor(m => m.DateAfter, "От")
|
|
||||||
@Html.TextBoxFor(m => m.DateAfter, new { type = "date", @class = "form-control" })
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-md-6">
|
|
||||||
<div class="form-group">
|
|
||||||
@Html.LabelFor(m => m.DateBefore, "До")
|
|
||||||
@Html.TextBoxFor(m => m.DateBefore, new { type = "date", @class = "form-control" })
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group mt-2">
|
|
||||||
<button type="submit" class="btn btn-primary" formaction="@Url.Action("ReportPdf", "Home")">Сохранить в pdf</button>
|
|
||||||
<button type="submit" class="btn btn-primary" formaction="@Url.Action("ReportEmail", "Home")">Отправить pdf по почте</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="mt-3">
|
<div class="mt-3">
|
||||||
<h4>Word, Excel</h4>
|
<h4>Word, Excel</h4>
|
||||||
<div class="form-group mb-2">
|
<div class="form-group mb-2">
|
||||||
@Html.LabelFor(m => m.LunchId, "Выбранные обеды")
|
<label for="LunchId">Выбранные обеды</label>
|
||||||
@Html.DropDownListFor(m => m.LunchId, new SelectList(ViewBag.LunchList, "Id", "LunchName"), new { @class = "form-control", multiple = "multiple" })
|
<select id="LunchId" name="LunchId" class="form-control" multiple>
|
||||||
|
@foreach (var item in ViewBag.LunchList)
|
||||||
|
{
|
||||||
|
<option value="@item.Id">@item.LunchName</option>
|
||||||
|
}
|
||||||
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<button type="submit" class="btn btn-primary" formaction="@Url.Action("ReportXsl", "Home")">Сохранить в excel</button>
|
<button type="button" class="btn btn-primary" id="excel-button">Сохранить в excel</button>
|
||||||
<button type="submit" class="btn btn-primary" formaction="@Url.Action("ReportWord", "Home")">Сохранить в word</button>
|
<button type="button" class="btn btn-primary" id="word-button">Сохранить в word</button>
|
||||||
</div>
|
</div>
|
||||||
}
|
|
||||||
|
<div class="row">
|
||||||
|
<h4>Pdf</h4>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="DateAfter">От</label>
|
||||||
|
<input type="date" id="DateAfter" name="DateAfter" class="form-control" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="DateBefore">До</label>
|
||||||
|
<input type="date" id="DateBefore" name="DateBefore" class="form-control" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group mt-2">
|
||||||
|
<button type="button" id="show-button">Показать</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="email-button">Отправить pdf по почте</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<table id="cooks-table" class="table table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Дата обеда</th>
|
||||||
|
<th>Сумма обеда</th>
|
||||||
|
<th>Id заказа</th>
|
||||||
|
<th>ФИО повара</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody></tbody>
|
||||||
|
</table>
|
||||||
|
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||||||
|
<script src="~/js/site.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('#show-button').click(function() {
|
||||||
|
var model = {
|
||||||
|
"DateBefore": document.getElementById("DateBefore").value,
|
||||||
|
"DateAfter": document.getElementById("DateAfter").value
|
||||||
|
};
|
||||||
|
//console.log(model);
|
||||||
|
var jsonData = JSON.stringify(model);
|
||||||
|
// Отправка AJAX-запроса на сервер
|
||||||
|
$.ajax({
|
||||||
|
url: `/home/ReportPdf`,
|
||||||
|
type: 'POST',
|
||||||
|
dataType: 'json',
|
||||||
|
contentType: 'application/json',
|
||||||
|
data: JSON.stringify(model),
|
||||||
|
success: function(data) {
|
||||||
|
var tableBody = $('#cooks-table tbody');
|
||||||
|
tableBody.empty();
|
||||||
|
|
||||||
|
$.each(data, function(index, lunch) {
|
||||||
|
var rowLunch = $('<tr></tr>');
|
||||||
|
|
||||||
|
var dateCell = $('<td></td>').text(lunch.dateCreate);
|
||||||
|
rowLunch.append(dateCell);
|
||||||
|
|
||||||
|
var lunchIdCell = $('<td></td>').text(lunch.sum);
|
||||||
|
rowLunch.append(lunchIdCell);
|
||||||
|
|
||||||
|
tableBody.append(rowLunch);
|
||||||
|
|
||||||
|
$.each(lunch.orders, function(index, order) {
|
||||||
|
var rowOrder = $('<tr></tr>');
|
||||||
|
var orderCell = $('<td></td>').text(order.id);
|
||||||
|
|
||||||
|
rowOrder.append($('<td></td>').text(""));
|
||||||
|
rowOrder.append($('<td></td>').text(""));
|
||||||
|
|
||||||
|
rowOrder.append(orderCell);
|
||||||
|
tableBody.append(rowOrder);
|
||||||
|
|
||||||
|
$.each(order.orderCooks, function(index, cook) {
|
||||||
|
var rowCook = $('<tr></tr>');
|
||||||
|
var cookCell = $('<td></td>').text(cook.fio);
|
||||||
|
|
||||||
|
rowCook.append($('<td></td>').text(""));
|
||||||
|
rowCook.append($('<td></td>').text(""));
|
||||||
|
rowCook.append($('<td></td>').text(""));
|
||||||
|
|
||||||
|
rowCook.append(cookCell);
|
||||||
|
tableBody.append(rowCook);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
error: function() {
|
||||||
|
console.log('Произошла ошибка при получении данных');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
$('#email-button').click(function() {
|
||||||
|
var model = {
|
||||||
|
"DateBefore": document.getElementById("DateBefore").value,
|
||||||
|
"DateAfter": document.getElementById("DateAfter").value
|
||||||
|
};
|
||||||
|
var jsonData = JSON.stringify(model);
|
||||||
|
console.log(model);
|
||||||
|
$.ajax({
|
||||||
|
url: `/home/ReportEmail`,
|
||||||
|
type: 'POST',
|
||||||
|
dataType: 'json',
|
||||||
|
contentType: 'application/json',
|
||||||
|
data: JSON.stringify(model)
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,4 +1,71 @@
|
|||||||
// Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
|
const wordButton = document.getElementById("word-button");
|
||||||
// for details on configuring this project to bundle and minify static web assets.
|
const excelButton = document.getElementById("excel-button");
|
||||||
|
const lunchIdSelect = document.getElementById("LunchId");
|
||||||
|
const wordMIME = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
||||||
|
const excelMIME = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
||||||
|
|
||||||
// Write your JavaScript code.
|
if (wordButton) {
|
||||||
|
wordButton.addEventListener("click", () => {
|
||||||
|
saveList("docx");
|
||||||
|
console.log("сохранить в docx")
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (excelButton) {
|
||||||
|
excelButton.addEventListener("click", () => {
|
||||||
|
saveList("xlsx");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const saveList = async function (fileType) {
|
||||||
|
let lunchIdSelect = document.getElementById("LunchId");
|
||||||
|
if (!lunchIdSelect) {
|
||||||
|
console.log("Element with id 'LunchId' not found.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let listModel = {
|
||||||
|
"LunchId": Array.from(lunchIdSelect.selectedOptions).map(option => option.value),
|
||||||
|
"FileType": fileType
|
||||||
|
};
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: `/home/SaveReport`,
|
||||||
|
type: 'POST',
|
||||||
|
contentType: 'application/json',
|
||||||
|
headers: { "Content-Type": "application/json" },
|
||||||
|
data: JSON.stringify(listModel)
|
||||||
|
}).done((file) => {
|
||||||
|
let byteArray = new Uint8Array(file);
|
||||||
|
saveFile(byteArray, fileType);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const saveFile = async function (bytes, fileType) {
|
||||||
|
if (window.showSaveFilePicker) {
|
||||||
|
let type;
|
||||||
|
if (fileType == "docx") {
|
||||||
|
type = {
|
||||||
|
description: "Microsoft Word (OpenXML)",
|
||||||
|
accept: { [wordMIME]: [".docx"] }
|
||||||
|
};
|
||||||
|
} else if (fileType == "xlsx") {
|
||||||
|
type = {
|
||||||
|
description: "Microsoft Excel (OpenXML)",
|
||||||
|
accept: { [excelMIME]: [".xlsx"] }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
const opts = {
|
||||||
|
suggestedName: `equipment-purchase-list.${fileType}`,
|
||||||
|
types: [type],
|
||||||
|
};
|
||||||
|
try {
|
||||||
|
const handle = await showSaveFilePicker(opts);
|
||||||
|
const writable = await handle.createWritable();
|
||||||
|
await writable.write(bytes);
|
||||||
|
await writable.close();
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error saving file:", error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user