298 lines
10 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Routing;
using ServiceStationBusinessLogic.MailKitWorker;
using ServiceStationContracts.BindingModels;
using ServiceStationContracts.BusinessLogic;
using ServiceStationContracts.SearchModels;
using ServiceStationContracts.StorageContracts;
using ServiceStationContracts.ViewModels;
using Newtonsoft.Json;
namespace ServiceStationRestAPI.Controllers {
[Route("api/[controller]/[action]")]
[ApiController]
public class MainController : Controller {
private readonly ILogger _logger;
private readonly IClientLogic _clientLogic;
private readonly IExecutorLogic _executorLogic;
private readonly IReportLogic _reportLogic;
private readonly ITaskLogic _taskLogic;
private readonly IWorkLogic _workLogic;
private readonly IWorkClientLogic _workClientLogic;
private readonly AbstractMailWorker _mailWorker;
public MainController(ILogger<MainController> logger, IClientLogic clientLogic, IExecutorLogic executorLogic,
IReportLogic reportLogic, ITaskLogic taskLogic, IWorkLogic workLogic, IWorkClientLogic workClientLogic,
AbstractMailWorker mailWorker) {
_logger = logger;
_clientLogic = clientLogic;
_executorLogic = executorLogic;
_reportLogic = reportLogic;
_taskLogic = taskLogic;
_workLogic = workLogic;
_workClientLogic = workClientLogic;
_mailWorker = mailWorker;
}
[HttpPost]
public void Register(ExecutorBindingModel model) {
try {
_executorLogic.Create(model);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка регистрации");
throw;
}
}
[HttpGet]
public ExecutorViewModel? Login(string email, string password) {
try {
return _executorLogic.ReadElement(new ExecutorSearchModel {
Email = email,
Password = password
});
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка входа в систему");
throw;
}
}
[HttpPost]
public void UpdateData(ExecutorBindingModel model) {
try {
_executorLogic.Update(model);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка обновления данных");
throw;
}
}
[ApiExplorerSettings(IgnoreApi = true)]
public WorkBindingModel Make_New_Record_Work(WorkFromWebBindingModel model) {
var record = new WorkBindingModel {
Id = model.Id,
Date = model.Date,
Price = model.Price,
ExecutorId = model.ExecutorId,
TaskByWorkId = model.TaskId,
ClientList = new()
};
foreach (int id in model.client_ids) {
var client = _clientLogic.ReadElement(new ClientSearchModel { Id = id }) ?? throw new Exception("Ошибка получения данных");
record.ClientList.Add(client.Id, (client));
}
return record;
}
[HttpPost]
public void CreateWork(WorkFromWebBindingModel model) {
var record = Make_New_Record_Work(model);
try {
_workLogic.Create(record);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка создания работы");
throw;
}
}
[HttpPost]
public void UpdateWork(WorkFromWebBindingModel model) {
var record = Make_New_Record_Work(model);
try {
_workLogic.Update(record);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка обновления работы");
}
}
[HttpPost]
public void DeleteWork(WorkBindingModel model) {
try {
_workLogic.Delete(model);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка удаления работы");
throw;
}
}
[HttpGet]
public List<WorkViewModel>? GetWorks(int _executorId) {
try {
return _workLogic.ReadList(new WorkSearchModel {
ExecutorId = _executorId
});
}
catch (Exception ex) {
_logger.LogError(ex, $"Ошибка получения работ исполнителя || id = {_executorId}");
throw;
}
}
[HttpGet]
public List<List<string>> GetWork(int _workId) {
try {
var list = new List<List<string>>();
var work_info = _workLogic.ReadElement(new WorkSearchModel { Id = _workId }) ?? throw new Exception("Ошибка получения данных");
list.Add(new List<string> { work_info.TaskByWorkId.ToString() });
List<string> client_list = new();
foreach (var client in work_info.ClientList) {
var record = new ClientViewModel {
Id = client.Key,
FIO = client.Value.FIO,
TotalPoints = client.Value.TotalPoints,
};
string jsRec = JsonConvert.SerializeObject(record);
client_list.Add(jsRec);
}
list.Add(client_list);
return list;
}
catch (Exception ex) {
_logger.LogError(ex, $"Ошибка получения работы || work_id = {_workId}");
throw;
}
}
[HttpPost]
public void CreateTask(TaskBindingModel model) {
try {
_taskLogic.Create(model);
}
catch (Exception ex) {
_logger.LogError(ex, $"Ошибка создания задачи");
throw;
}
}
[HttpGet]
public List<TaskViewModel>? GetTasks() {
try {
return _taskLogic.ReadList();
}
catch (Exception ex) {
_logger.LogError(ex, $"Ошибка получения задач");
throw;
}
}
[HttpGet]
public TaskViewModel? GetTask (int _taskId) {
try {
return _taskLogic.ReadElement(new TaskSearchModel { Id = _taskId });
}
catch(Exception ex) {
_logger.LogError(ex, "Ошибка получения задачи");
throw;
}
}
[HttpPost]
public void CreateClient(ClientBindingModel model) {
try {
_clientLogic.Create(model);
}
catch (Exception ex) {
_logger.LogError(ex, $"Ошибка добавление клиента");
throw;
}
}
[HttpGet]
public List<ClientViewModel>? GetClients() {
try {
return _clientLogic.ReadList();
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка получения клиентов");
throw;
}
}
[HttpPost]
public void AddClientPoints(WorkClientBindingModel model) {
try {
_workClientLogic.Add_Points(model);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка добавления баллов");
throw;
}
}
[ApiExplorerSettings(IgnoreApi = true)]
public List<int> Make_Report_Ids(string _ids) {
var ids = new List<int>();
foreach (char id in _ids) {
if (int.TryParse(id.ToString(), out int _id)) {
ids.Add(_id);
}
}
return ids;
}
[HttpGet]
public byte[]? CreateWordReport(string _ids) {
var ids_list = Make_Report_Ids(_ids);
try {
var document = _reportLogic.SaveToWordFile(new ReportBindeingModel {
ids = ids_list
});
return document;
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка создания документа");
throw;
}
}
[HttpGet]
public byte[]? CreateXlsxReport(string _ids) {
var ids_list = Make_Report_Ids(_ids);
try {
var document = _reportLogic.SaveToExcelFile(new ReportBindeingModel {
ids = ids_list
});
return document;
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка создания документа");
throw;
}
}
[HttpPost]
public void SendReportPdfMail(ReportBindeingModel model) {
try {
var _document = _reportLogic.SaveToPdfFile(model);
MemoryStream stream = new();
_document.Save(stream, true);
byte[] data = stream.ToArray();
_mailWorker.MailSendAsync(new() {
MailAddress = model.EmailAddress,
Subject = "Отчет",
Text = $"Отчет по работам с указания назначенных заданий за период с {model.DateFrom.ToLongDateString()} по " +
$"{model.DateTo.ToShortDateString()}",
document = data
});
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка создания/отправки отчета на почту");
throw;
}
}
}
}