160 lines
4.9 KiB
C#
160 lines
4.9 KiB
C#
using BusinessLogic.BusinessLogic;
|
|
using Contracts.BindingModels;
|
|
using Contracts.BusinessLogicContracts;
|
|
using Contracts.Exceptions;
|
|
using Contracts.SearchModels;
|
|
using Contracts.ViewModels;
|
|
using DatabaseImplement.Models;
|
|
using DataModels.Models;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using MigraDoc.DocumentObjectModel;
|
|
using MigraDoc.Rendering;
|
|
|
|
namespace RestAPI.Controllers
|
|
{
|
|
[Route("[controller]/[action]")]
|
|
[ApiController]
|
|
public class PurchaseController : Controller
|
|
{
|
|
private readonly ILogger _logger;
|
|
private readonly IPurchaseLogic _purchaseLogic;
|
|
private readonly IBillLogic _billLogic;
|
|
|
|
public PurchaseController(ILogger<PurchaseController> logger, IPurchaseLogic purchaseLogic, IBillLogic billLogic)
|
|
{
|
|
_logger = logger;
|
|
_purchaseLogic = purchaseLogic;
|
|
_billLogic = billLogic;
|
|
}
|
|
[HttpGet]
|
|
public List<PurchaseViewModel>? GetList(Guid id, Guid userId, double? costfrom, double? costto, DateTime? datefrom, DateTime? dateto)
|
|
{
|
|
try
|
|
{
|
|
if (id == Guid.Empty && userId == Guid.Empty && costfrom == null && costto == null && datefrom == null && dateto == null)
|
|
return _purchaseLogic.ReadElements(null);
|
|
|
|
else
|
|
return _purchaseLogic.ReadElements(new PurchaseSearchModel()
|
|
{
|
|
Id = id,
|
|
UserId = userId,
|
|
CostFrom = costfrom,
|
|
CostTo = costto,
|
|
DateFrom = datefrom,
|
|
DateTo = dateto
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "Ошибка получения списка покупок");
|
|
throw;
|
|
}
|
|
}
|
|
|
|
[HttpGet]
|
|
public PurchaseViewModel Get(Guid id)
|
|
{
|
|
try
|
|
{
|
|
return _purchaseLogic.ReadElement(new PurchaseSearchModel() { Id = id });
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "Ошибка получения покупки");
|
|
throw;
|
|
}
|
|
}
|
|
|
|
[HttpGet]
|
|
public List<ProductViewModel> GetProducts(Guid purchaseid)
|
|
{
|
|
try
|
|
{
|
|
return _purchaseLogic.GetProducts(new PurchaseSearchModel() { Id = purchaseid });
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "Ошибка получения продукта");
|
|
throw;
|
|
}
|
|
}
|
|
[HttpPost]
|
|
public IResult Create([FromBody] PurchaseBindingModel model)
|
|
{
|
|
try
|
|
{
|
|
var purchase = _purchaseLogic.Create(model);
|
|
|
|
return Results.Ok(purchase);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "Error create purchase");
|
|
return Results.Problem(ex.Message);
|
|
}
|
|
}
|
|
|
|
[HttpPost]
|
|
public IResult CreateBill([FromBody] BillViewModel model)
|
|
{
|
|
try
|
|
{
|
|
_billLogic.CreateBill(model);
|
|
|
|
return Results.Ok();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "Error create bill");
|
|
throw;
|
|
}
|
|
}
|
|
|
|
[HttpPatch]
|
|
public PurchaseViewModel Update([FromBody] PurchaseBindingModel model)
|
|
{
|
|
try
|
|
{
|
|
var res = _purchaseLogic.Update(model);
|
|
return new PurchaseViewModel()
|
|
{
|
|
Id = res.Id,
|
|
Cost = res.Cost,
|
|
DateClosed = res.DateClosed,
|
|
UserId = res.UserId,
|
|
};
|
|
}
|
|
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "Error update purchase");
|
|
return null;
|
|
}
|
|
}
|
|
[HttpGet]
|
|
public byte[] CreateChart(Guid userId)
|
|
{
|
|
Document document = new Document();
|
|
Section section = document.AddSection();
|
|
|
|
section.AddParagraph("Столбчатая диаграмма");
|
|
|
|
using (MemoryStream stream = new MemoryStream())
|
|
{
|
|
PdfDocumentRenderer renderer = new PdfDocumentRenderer(true, PdfSharp.Pdf.PdfFontEmbedding.Always);
|
|
renderer.Document = document;
|
|
renderer.RenderDocument();
|
|
|
|
// Сохранение документа в MemoryStream
|
|
renderer.PdfDocument.Save(stream, false);
|
|
|
|
// Получение массива байтов из MemoryStream
|
|
return stream.ToArray();
|
|
}
|
|
}
|
|
}
|
|
}
|