Работает отправка отчета от исполнителя на почту

This commit is contained in:
Никита Потапов 2024-05-30 04:06:00 +04:00
parent 9ac54dfaec
commit e7206d8c38
9 changed files with 79 additions and 10 deletions

View File

@ -100,6 +100,7 @@ namespace PolyclinicBusinessLogic.BusinessLogics
DateFrom = reportModel.DateStart,
DateTo = reportModel.DateEnd,
FileName = reportInfo.FileName,
PeriodString = reportInfo.GetPeriodString(),
Report = reportModel
});
}

View File

@ -17,14 +17,14 @@ namespace PolyclinicBusinessLogic.OfficePackage.AbstractImplementerReports
});
CreateParagraph(new PdfParagraph
{
Text = $"с {(info.DateFrom == null ? "-" : info.DateFrom?.ToShortDateString())} по {(info.DateTo == null ? "-" : info.DateTo?.ToShortDateString())}",
Text = info.PeriodString,
Style = "Normal",
ParagraphAlignment = PdfParagraphAlignmentType.Center
});
CreateTable(new List<string> { "1cm", "4cm", "3cm", "3cm", "4cm", "4cm" });
CreateTable(new List<string> { "3cm", "3cm", "3cm", "4cm", "5cm" });
CreateRow(new PdfRowParameters
{
Texts = new List<string> { "#", "Название", "Начало", "Конец", "Симптомы", "Курсы" },
Texts = new List<string> { "Название", "Начало", "Конец", "Симптомы", "Курсы" },
Style = "NormalTitle",
ParagraphAlignment = PdfParagraphAlignmentType.Center
});
@ -35,7 +35,6 @@ namespace PolyclinicBusinessLogic.OfficePackage.AbstractImplementerReports
{
Texts = new List<string>
{
diagnose.Id.ToString(),
diagnose.Name,
diagnose.DateStartDiagnose.ToShortDateString(),
diagnose.DateStopDiagnose?.ToShortDateString() ?? string.Empty,
@ -57,7 +56,6 @@ namespace PolyclinicBusinessLogic.OfficePackage.AbstractImplementerReports
"",
"",
"",
"",
symptom?.Name ?? string.Empty,
(course == null ? string.Empty : $"#{course.Id} {course.Comment}")
},

View File

@ -6,6 +6,7 @@ namespace PolyclinicBusinessLogic.OfficePackage.HelperModels.PDF
{
public string Title { get; set; } = string.Empty;
public string FileName { get; set; } = string.Empty;
public string PeriodString { get; set; } = string.Empty;
public DateTime? DateFrom { get; set; }
public DateTime? DateTo { get; set; }
public ReportDiagnosesByPeriodViewModel Report { get; set; } = new();

View File

@ -1,9 +1,33 @@
namespace PolyclinicContracts.BindingModels
using static System.Net.Mime.MediaTypeNames;
using System.Reflection;
namespace PolyclinicContracts.BindingModels
{
public class ReportBindingModel
{
public string? FileName { get; set; }
public DateTime? DateFrom { get; set; }
public DateTime? DateTo { get; set; }
public string GetPeriodString()
{
string txt = "";
if (DateFrom == null && DateTo == null)
{
txt = "за все время";
}
else if (DateFrom == null)
{
txt = $"по {DateTo?.ToShortDateString()}";
}
else if (DateTo == null)
{
txt = $"с {DateFrom?.ToShortDateString()}";
}
else
{
txt = $"с {DateFrom?.ToShortDateString()} по {DateTo?.ToShortDateString()}";
}
return txt;
}
}
}

View File

@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Mvc;
using PolyclinicBusinessLogic.BusinessLogics;
using PolyclinicBusinessLogic.OfficePackage.HelperEnums;
using PolyclinicContracts.BindingModels;
using PolyclinicContracts.BusinessLogicsContracts;
@ -12,11 +13,13 @@ namespace PolyclinicWebAppImplementer.Controllers
{
private readonly IImplementerReportLogic _reportLogic;
private readonly IDiagnoseLogic _diagnoseLogic;
private readonly SendMailLogic _sendMailLogic;
public ReportsController(IImplementerReportLogic reportLogic, IDiagnoseLogic diagnoseLogic)
public ReportsController(IImplementerReportLogic reportLogic, IDiagnoseLogic diagnoseLogic, SendMailLogic sendMailLogic)
{
_reportLogic = reportLogic;
_diagnoseLogic = diagnoseLogic;
_sendMailLogic = sendMailLogic;
}
[HttpGet]
@ -54,7 +57,26 @@ namespace PolyclinicWebAppImplementer.Controllers
var filePath = Path.Combine(Directory.GetCurrentDirectory(), fileName);
byte[] fileBytes = System.IO.File.ReadAllBytes(filePath);
return File(fileBytes, "application/pdf", fileName);
if (System.IO.File.Exists(filePath))
{
try
{
string txt = reportInfo.GetPeriodString();
var userEmail = currentUser.Email;
_sendMailLogic.SendEmail(userEmail, $"Здравствуйте, {currentUser.FIO}! В приложении отчет по болезням {txt} от {DateTime.Now.ToString()}", filePath);
model.Message = $"Отчет в формате .pdf был отправлен на почту {currentUser.Email}";
return View(model);
}
catch (Exception)
{
model.Error = $"Произошла ошибка при отправке отчета";
}
}
else
{
model.Error = "Произошла ошибка при генерации отчета";
}
}
return View(model);
}

View File

@ -12,5 +12,7 @@ namespace PolyclinicWebAppImplementer.Models
public DateTime? DateEnd { get; set; }
public ReportType ReportType { get; set; }
public ReportDiagnosesByPeriodViewModel? Report { get; set; }
public string? Error { get; set; }
public string? Message { get; set; }
}
}

View File

@ -32,6 +32,8 @@ builder.Services.AddTransient<IProcedureStorage, ProcedureStorage>();
builder.Services.AddTransient<IMedicamentStorage, MedicamentStorage>();
builder.Services.AddTransient<IRecipeStorage, RecipeStorage>();
builder.Services.AddTransient<SendMailLogic>();
builder.Services.AddTransient<AbstractReportMedicamentsByDiagnosesSaveToExcel, ReportMedicamentsByDiagnosesSaveToExcel>();
builder.Services.AddTransient<AbstractReportMedicamentsByDiagnosesSaveToWord, ReportMedicamentsByDiagnosesSaveToWord>();
builder.Services.AddTransient<AbstractReportDiagnosesByPeriodSaveToPdf, ReportDiagnosesByPeriodSaveToPdf>();

View File

@ -4,6 +4,18 @@
ViewBag.SelectedSiteMenuItem = SiteMenuItems.DiagnosesReport;
}
<div class="d-flex flex-column">
@if (Model.Error != null)
{
<div class="alert alert-danger" role="alert">
@Model.Error
</div>
}
@if (Model.Message != null)
{
<div class="alert alert-success" role="alert">
@Model.Message
</div>
}
<form id="diagnosesReportForm" method="post" class="d-flex mb-4">
<div class="me-5">
<label asp-for="DateStart"></label>

View File

@ -5,5 +5,12 @@
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
"AllowedHosts": "*",
"Smtp": {
"Host": "smtp.beget.com",
"Port": "2525",
"Username": "polyclinic@ekallin.ru",
"Password": "tlmu50*zAwN1",
"EnableSsl": "false"
}
}