формы

This commit is contained in:
bekodeg 2024-05-22 10:46:39 +04:00
parent 9d823692aa
commit e5823db6b3
13 changed files with 293 additions and 40 deletions

View File

@ -0,0 +1,64 @@
namespace SushiBar.Forms
{
partial class FormMailView
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
dataGridView = new DataGridView();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout();
//
// dataGridView
//
dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Location = new Point(12, 12);
dataGridView.Name = "dataGridView";
dataGridView.RowHeadersWidth = 51;
dataGridView.RowTemplate.Height = 29;
dataGridView.Size = new Size(776, 426);
dataGridView.TabIndex = 0;
//
// FormMail
//
AllowDrop = true;
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450);
Controls.Add(dataGridView);
Name = "FormMail";
Text = "FormMail";
WindowState = FormWindowState.Maximized;
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false);
}
#endregion
private DataGridView dataGridView;
}
}

View File

@ -0,0 +1,39 @@
using Microsoft.Extensions.Logging;
using SushiBarContracts.BusinessLogicsContracts;
namespace SushiBar.Forms
{
public partial class FormMailView : Form
{
private readonly ILogger _logger;
private readonly IMessageInfoLogic _logic;
public FormMailView(ILogger<FormMailView> logger, IMessageInfoLogic logic)
{
InitializeComponent();
_logger = logger;
_logic = logic;
}
private void ViewMailForm_Load(object sender, EventArgs e)
{
try
{
var list = _logic.ReadList(null);
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["ClientId"].Visible = false;
dataGridView.Columns["MessageId"].Visible = false;
dataGridView.Columns["Body"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
_logger.LogInformation("Загрузка списка писем");
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка загрузки писем");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -39,6 +39,7 @@
sushisReportToolStripMenuItem = new ToolStripMenuItem(); sushisReportToolStripMenuItem = new ToolStripMenuItem();
componentsReportПоСушиToolStripMenuItem = new ToolStripMenuItem(); componentsReportПоСушиToolStripMenuItem = new ToolStripMenuItem();
orderReportToolStripMenuItem = new ToolStripMenuItem(); orderReportToolStripMenuItem = new ToolStripMenuItem();
startWorksToolStripMenuItem = new ToolStripMenuItem();
отчётыToolStripMenuItem = new ToolStripMenuItem(); отчётыToolStripMenuItem = new ToolStripMenuItem();
sushisToolStripMenuItem = new ToolStripMenuItem(); sushisToolStripMenuItem = new ToolStripMenuItem();
componentSushisToolStripMenuItem = new ToolStripMenuItem(); componentSushisToolStripMenuItem = new ToolStripMenuItem();
@ -48,7 +49,7 @@
buttonOrderReady = new Button(); buttonOrderReady = new Button();
buttonIssuedOrder = new Button(); buttonIssuedOrder = new Button();
buttonRef = new Button(); buttonRef = new Button();
startWorksToolStripMenuItem = new ToolStripMenuItem(); MailToolStripMenuItem = new ToolStripMenuItem();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
menuStrip1.SuspendLayout(); menuStrip1.SuspendLayout();
SuspendLayout(); SuspendLayout();
@ -68,7 +69,7 @@
// menuStrip1 // menuStrip1
// //
menuStrip1.ImageScalingSize = new Size(20, 20); menuStrip1.ImageScalingSize = new Size(20, 20);
menuStrip1.Items.AddRange(new ToolStripItem[] { toolStripMenuItem, отчётыToolStripMenuItem1, startWorksToolStripMenuItem }); menuStrip1.Items.AddRange(new ToolStripItem[] { toolStripMenuItem, отчётыToolStripMenuItem1, startWorksToolStripMenuItem, MailToolStripMenuItem });
menuStrip1.Location = new Point(0, 0); menuStrip1.Location = new Point(0, 0);
menuStrip1.Name = "menuStrip1"; menuStrip1.Name = "menuStrip1";
menuStrip1.Size = new Size(1184, 28); menuStrip1.Size = new Size(1184, 28);
@ -85,28 +86,28 @@
// sushiToolStripMenuItem // sushiToolStripMenuItem
// //
sushiToolStripMenuItem.Name = "sushiToolStripMenuItem"; sushiToolStripMenuItem.Name = "sushiToolStripMenuItem";
sushiToolStripMenuItem.Size = new Size(224, 26); sushiToolStripMenuItem.Size = new Size(185, 26);
sushiToolStripMenuItem.Text = "Суши"; sushiToolStripMenuItem.Text = "Суши";
sushiToolStripMenuItem.Click += SushiToolStripMenuItem_Click; sushiToolStripMenuItem.Click += SushiToolStripMenuItem_Click;
// //
// componentsToolStripMenuItem // componentsToolStripMenuItem
// //
componentsToolStripMenuItem.Name = "componentsToolStripMenuItem"; componentsToolStripMenuItem.Name = "componentsToolStripMenuItem";
componentsToolStripMenuItem.Size = new Size(224, 26); componentsToolStripMenuItem.Size = new Size(185, 26);
componentsToolStripMenuItem.Text = "Компоненты"; componentsToolStripMenuItem.Text = "Компоненты";
componentsToolStripMenuItem.Click += ComponentsToolStripMenuItem_Click; componentsToolStripMenuItem.Click += ComponentsToolStripMenuItem_Click;
// //
// clientsToolStripMenuItem // clientsToolStripMenuItem
// //
clientsToolStripMenuItem.Name = "clientsToolStripMenuItem"; clientsToolStripMenuItem.Name = "clientsToolStripMenuItem";
clientsToolStripMenuItem.Size = new Size(224, 26); clientsToolStripMenuItem.Size = new Size(185, 26);
clientsToolStripMenuItem.Text = "Клиенты"; clientsToolStripMenuItem.Text = "Клиенты";
clientsToolStripMenuItem.Click += clientsToolStripMenuItem_Click; clientsToolStripMenuItem.Click += clientsToolStripMenuItem_Click;
// //
// implementersToolStripMenuItem // implementersToolStripMenuItem
// //
implementersToolStripMenuItem.Name = "implementersToolStripMenuItem"; implementersToolStripMenuItem.Name = "implementersToolStripMenuItem";
implementersToolStripMenuItem.Size = new Size(224, 26); implementersToolStripMenuItem.Size = new Size(185, 26);
implementersToolStripMenuItem.Text = "Исполнители"; implementersToolStripMenuItem.Text = "Исполнители";
implementersToolStripMenuItem.Click += implementersToolStripMenuItem_Click; implementersToolStripMenuItem.Click += implementersToolStripMenuItem_Click;
// //
@ -138,6 +139,13 @@
orderReportToolStripMenuItem.Text = "Список заказов"; orderReportToolStripMenuItem.Text = "Список заказов";
orderReportToolStripMenuItem.Click += orderReportToolStripMenuItem_Click; orderReportToolStripMenuItem.Click += orderReportToolStripMenuItem_Click;
// //
// startWorksToolStripMenuItem
//
startWorksToolStripMenuItem.Name = "startWorksToolStripMenuItem";
startWorksToolStripMenuItem.Size = new Size(114, 24);
startWorksToolStripMenuItem.Text = "Запуск работ";
startWorksToolStripMenuItem.Click += startWorksToolStripMenuItem_Click;
//
// отчётыToolStripMenuItem // отчётыToolStripMenuItem
// //
отчётыToolStripMenuItem.Name = "отчётыToolStripMenuItem"; отчётыToolStripMenuItem.Name = "отчётыToolStripMenuItem";
@ -213,12 +221,12 @@
buttonRef.UseVisualStyleBackColor = true; buttonRef.UseVisualStyleBackColor = true;
buttonRef.Click += ButtonRef_Click; buttonRef.Click += ButtonRef_Click;
// //
// startWorksToolStripMenuItem // MailToolStripMenuItem
// //
startWorksToolStripMenuItem.Name = "startWorksToolStripMenuItem"; MailToolStripMenuItem.Name = "MailToolStripMenuItem";
startWorksToolStripMenuItem.Size = new Size(114, 24); MailToolStripMenuItem.Size = new Size(65, 24);
startWorksToolStripMenuItem.Text = "Запуск работ"; MailToolStripMenuItem.Text = "Почта";
startWorksToolStripMenuItem.Click += startWorksToolStripMenuItem_Click; MailToolStripMenuItem.Click += MailToolStripMenuItem_Click;
// //
// FormMain // FormMain
// //
@ -268,5 +276,6 @@
private ToolStripMenuItem clientsToolStripMenuItem; private ToolStripMenuItem clientsToolStripMenuItem;
private ToolStripMenuItem implementersToolStripMenuItem; private ToolStripMenuItem implementersToolStripMenuItem;
private ToolStripMenuItem startWorksToolStripMenuItem; private ToolStripMenuItem startWorksToolStripMenuItem;
private ToolStripMenuItem MailToolStripMenuItem;
} }
} }

View File

@ -195,5 +195,14 @@ namespace SushiBar.Forms
_workProcess.DoWork((Program.ServiceProvider?.GetService(typeof(IImplementerLogic)) as IImplementerLogic)!, _orderLogic); _workProcess.DoWork((Program.ServiceProvider?.GetService(typeof(IImplementerLogic)) as IImplementerLogic)!, _orderLogic);
MessageBox.Show("Процесс обработки запущен", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); MessageBox.Show("Процесс обработки запущен", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
} }
private void MailToolStripMenuItem_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormMailView));
if (service is FormMailView form)
{
form.ShowDialog();
}
}
} }
} }

View File

@ -66,6 +66,7 @@ namespace SushiBar
services.AddTransient<ISushiStorage, SushiStorage>(); services.AddTransient<ISushiStorage, SushiStorage>();
services.AddTransient<IClientStorage, ClientStorage>(); services.AddTransient<IClientStorage, ClientStorage>();
services.AddTransient<IImplementerStorage, ImplementerStorage>(); services.AddTransient<IImplementerStorage, ImplementerStorage>();
services.AddTransient<IMessageInfoStorage, MessageInfoStorage>();
services.AddTransient<IComponentLogic, ComponentLogic>(); services.AddTransient<IComponentLogic, ComponentLogic>();
services.AddTransient<IOrderLogic, OrderLogic>(); services.AddTransient<IOrderLogic, OrderLogic>();
@ -73,7 +74,8 @@ namespace SushiBar
services.AddTransient<IReportLogic, ReportLogic>(); services.AddTransient<IReportLogic, ReportLogic>();
services.AddTransient<IClientLogic, ClientLogic>(); services.AddTransient<IClientLogic, ClientLogic>();
services.AddTransient<IImplementerLogic, ImplementerLogic>(); services.AddTransient<IImplementerLogic, ImplementerLogic>();
services.AddTransient<IWorkProcess, WorkModeling>(); services.AddSingleton<IWorkProcess, WorkModeling>();
services.AddTransient<IMessageInfoLogic, MessageInfoLogic>();
services.AddTransient<FormMain>(); services.AddTransient<FormMain>();
services.AddTransient<FormComponent>(); services.AddTransient<FormComponent>();
@ -87,10 +89,12 @@ namespace SushiBar
services.AddTransient<FormReportOrders>(); services.AddTransient<FormReportOrders>();
services.AddTransient<FormImplementers>(); services.AddTransient<FormImplementers>();
services.AddTransient<FormImplementer>(); services.AddTransient<FormImplementer>();
services.AddTransient<FormMailView>();
services.AddTransient<AbstractSaveToExcel, SaveToExcel>(); services.AddTransient<AbstractSaveToExcel, SaveToExcel>();
services.AddTransient<AbstractSaveToWord, SaveToWord>(); services.AddTransient<AbstractSaveToWord, SaveToWord>();
services.AddTransient<AbstractSaveToPdf, SaveToPdf>(); services.AddTransient<AbstractSaveToPdf, SaveToPdf>();
services.AddSingleton<AbstractMailWorker, MailKitWorker>();
} }
private static void MailCheck(object obj) => ServiceProvider?.GetService<AbstractMailWorker>()?.MailCheck(); private static void MailCheck(object obj) => ServiceProvider?.GetService<AbstractMailWorker>()?.MailCheck();

View File

@ -69,7 +69,6 @@ namespace SushiBarBusinessLogic.MailWorker
} }
} }
protected abstract Task SendMailAsync(MailSendInfoBindingModel info); protected abstract Task SendMailAsync(MailSendInfoBindingModel info);
protected abstract Task<List<MessageInfoBindingModel>> protected abstract Task<List<MessageInfoBindingModel>> ReceiveMailAsync();
ReceiveMailAsync();
} }
} }

View File

@ -36,7 +36,7 @@ namespace SushiBarBusinessLogic.MailWorker
} }
} }
protected override async Task<List<MessageInfoBindingModel>> protected override async Task<List<MessageInfoBindingModel>>
ReceiveMailAsync() ReceiveMailAsync()
{ {
var list = new List<MessageInfoBindingModel>(); var list = new List<MessageInfoBindingModel>();
using var client = new Pop3Client(); using var client = new Pop3Client();

View File

@ -7,16 +7,5 @@
}, },
"AllowedHosts": "*", "AllowedHosts": "*",
"IPAddress": "http://localhost:5050", "IPAddress": "http://localhost:5050"
"MailConfigBindingModel": {
"SmtpClientHost": "smtp.yandex.ru",
"SmtpClientPort": 465,
"PopHost": "pop.yandex.com",
"PopPort": 995,
"MailLogin": "tester.b.moio@ya.ru",
"MailPassword": "pyzzqswchjevecec"
}
} }

View File

@ -1,5 +1,4 @@
using Microsoft.EntityFrameworkCore; using SushiBarContracts.BindingModels;
using SushiBarContracts.BindingModels;
using SushiBarContracts.SearchModels; using SushiBarContracts.SearchModels;
using SushiBarContracts.StoragesContracts; using SushiBarContracts.StoragesContracts;
using SushiBarContracts.ViewModels; using SushiBarContracts.ViewModels;
@ -42,7 +41,7 @@ namespace SushiBarDatabaseImplement.Implements
{ {
using var context = new SushiBarDatabase(); using var context = new SushiBarDatabase();
var newMessage = MessageInfo.Create(context, model); var newMessage = MessageInfo.Create(context, model);
if (newMessage == null || context.Messages.Any(x => x.MessageId.Equals(model.MessageId))) if (newMessage == null || newMessage.Body == null || context.Messages.Any(x => x.MessageId.Equals(model.MessageId)))
{ {
return null; return null;
} }

View File

@ -28,11 +28,11 @@ namespace SushiBarDatabaseImplement.Models
} }
return new() return new()
{ {
Body = model.Body, Body = model.Body ?? string.Empty,
Subject = model.Subject, Subject = model.Subject ?? string.Empty,
ClientId = context.Clients.FirstOrDefault(x => x.Email == model.SenderName)?.Id, ClientId = context.Clients.FirstOrDefault(x => x.Email == model.SenderName)?.Id,
MessageId = model.MessageId, MessageId = model.MessageId,
SenderName = model.SenderName, SenderName = model.SenderName ?? string.Empty,
DateDelivery = model.DateDelivery, DateDelivery = model.DateDelivery,
}; };
} }

View File

@ -11,12 +11,22 @@ builder.Logging.SetMinimumLevel(LogLevel.Information);
builder.Logging.AddLog4Net("log4net.config"); builder.Logging.AddLog4Net("log4net.config");
// Add services to the container. // Add services to the container.
builder.Services.AddSingleton<IClientStorage, ClientStorage>(); builder.Services
builder.Services.AddSingleton<IOrderStorage, OrderStorage>(); .AddSingleton<IClientStorage, ClientStorage>()
builder.Services.AddSingleton<ISushiStorage, SushiStorage>(); .AddSingleton<IOrderStorage, OrderStorage>()
builder.Services.AddSingleton<IOrderLogic, OrderLogic>(); .AddSingleton<ISushiStorage, SushiStorage>()
builder.Services.AddSingleton<IClientLogic, ClientLogic>(); .AddSingleton<IMessageInfoStorage, MessageInfoStorage>();
builder.Services.AddSingleton<ISushiLogic, SushiLogic>();
builder.Services
.AddSingleton<IOrderLogic, OrderLogic>()
.AddSingleton<IClientLogic, ClientLogic>()
.AddSingleton<ISushiLogic, SushiLogic>()
.AddSingleton<IMessageInfoLogic, MessageInfoLogic>();
builder.Services
.AddSingleton<AbstractMailWorker, MailKitWorker>();
builder.Services.AddControllers(); builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle

View File

@ -5,5 +5,16 @@
"Microsoft.AspNetCore": "Warning" "Microsoft.AspNetCore": "Warning"
} }
}, },
"AllowedHosts": "*" "AllowedHosts": "*",
"MailConfigBindingModel": {
"SmtpClientHost": "smtp.yandex.ru",
"SmtpClientPort": 465,
"PopHost": "pop.yandex.com",
"PopPort": 995,
"MailLogin": "tester.b.moio@ya.ru",
"MailPassword": "pyzzqswchjevecec"
}
} }