Compare commits

...

10 Commits

Author SHA1 Message Date
bekodeg
5018b8f100 уже не помню что я делал 2024-05-06 21:22:23 +04:00
bekodeg
99848f8c3a Merge branch 'labWork1' into labWork1_Hard 2024-05-05 20:21:04 +04:00
bekodeg
d6125832ab изменение форм 2024-05-05 20:20:03 +04:00
bekodeg
9b1c9186f5 Merge branch 'labWork1' into labWork1_Hard 2024-05-05 19:16:00 +04:00
bekodeg
da472583a8 безумие.. 2024-05-05 19:15:36 +04:00
bekodeg
79fcf1755d Merge branch 'labWork1' into labWork1_Hard 2024-05-05 19:06:27 +04:00
bekodeg
95c13d3b6e aaaaa 2024-05-05 18:58:33 +04:00
bekodeg
49791fd7ff + 2024-05-05 18:56:39 +04:00
bekodeg
e09c8d19c2 Merge branch 'labWork1' into labWork1_Hard 2024-05-05 18:54:25 +04:00
bekodeg
9e34022abf изменения форм 2024-05-05 13:54:40 +04:00
43 changed files with 2082 additions and 1442 deletions

2
.gitignore vendored
View File

@ -397,5 +397,3 @@ FodyWeavers.xsd
# JetBrains Rider # JetBrains Rider
*.sln.iml *.sln.iml
*.csproj

View File

@ -28,61 +28,85 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormComponent));
label1 = new Label(); label1 = new Label();
textBoxName = new TextBox(); textBoxName = new TextBox();
textBoxCost = new TextBox(); textBoxCost = new TextBox();
label2 = new Label(); label2 = new Label();
buttonSave = new Button(); ButtonSave = new Button();
buttonCancel = new Button(); ButtonCancel = new Button();
SuspendLayout(); SuspendLayout();
// //
// label1 // label1
// //
resources.ApplyResources(label1, "label1"); label1.AutoSize = true;
label1.Location = new Point(12, 9);
label1.Name = "label1"; label1.Name = "label1";
label1.Size = new Size(77, 20);
label1.TabIndex = 0;
label1.Text = "Название";
// //
// textBoxName // textBoxName
// //
resources.ApplyResources(textBoxName, "textBoxName"); textBoxName.Location = new Point(95, 6);
textBoxName.Name = "textBoxName"; textBoxName.Name = "textBoxName";
textBoxName.Size = new Size(246, 27);
textBoxName.TabIndex = 1;
// //
// textBoxCost // textBoxCost
// //
resources.ApplyResources(textBoxCost, "textBoxCost"); textBoxCost.Location = new Point(95, 39);
textBoxCost.Name = "textBoxCost"; textBoxCost.Name = "textBoxCost";
textBoxCost.Size = new Size(246, 27);
textBoxCost.TabIndex = 3;
// //
// label2 // label2
// //
resources.ApplyResources(label2, "label2"); label2.AutoSize = true;
label2.ImeMode = ImeMode.NoControl;
label2.Location = new Point(12, 42);
label2.Name = "label2"; label2.Name = "label2";
label2.Size = new Size(45, 20);
label2.TabIndex = 2;
label2.Text = "Цена";
// //
// buttonSave // ButtonSave
// //
resources.ApplyResources(buttonSave, "buttonSave"); ButtonSave.Location = new Point(95, 85);
buttonSave.Name = "buttonSave"; ButtonSave.Name = "ButtonSave";
buttonSave.UseVisualStyleBackColor = true; ButtonSave.Size = new Size(121, 29);
buttonSave.Click += buttonSave_Click; ButtonSave.TabIndex = 4;
ButtonSave.Text = "Сохранить";
ButtonSave.UseVisualStyleBackColor = true;
ButtonSave.Click += ButtonSave_Click;
// //
// buttonCancel // ButtonCancel
// //
resources.ApplyResources(buttonCancel, "buttonCancel"); ButtonCancel.ImeMode = ImeMode.NoControl;
buttonCancel.Name = "buttonCancel"; ButtonCancel.Location = new Point(222, 85);
buttonCancel.UseVisualStyleBackColor = true; ButtonCancel.Name = "ButtonCancel";
buttonCancel.Click += buttonCancel_Click; ButtonCancel.Size = new Size(119, 29);
ButtonCancel.TabIndex = 5;
ButtonCancel.Text = "Отмена";
ButtonCancel.UseVisualStyleBackColor = true;
ButtonCancel.Click += ButtonCancel_Click;
// //
// FormComponent // FormComponent
// //
resources.ApplyResources(this, "$this"); AllowDrop = true;
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.None;
Controls.Add(buttonCancel); ClientSize = new Size(353, 126);
Controls.Add(buttonSave); Controls.Add(ButtonCancel);
Controls.Add(ButtonSave);
Controls.Add(textBoxCost); Controls.Add(textBoxCost);
Controls.Add(label2); Controls.Add(label2);
Controls.Add(textBoxName); Controls.Add(textBoxName);
Controls.Add(label1); Controls.Add(label1);
MaximizeBox = false;
Name = "FormComponent"; Name = "FormComponent";
Load += this.FormComponent_Load; ShowInTaskbar = false;
Text = "Компонент";
TopMost = true;
Load += FormComponent_Load;
ResumeLayout(false); ResumeLayout(false);
PerformLayout(); PerformLayout();
} }
@ -93,7 +117,7 @@
private TextBox textBoxName; private TextBox textBoxName;
private TextBox textBoxCost; private TextBox textBoxCost;
private Label label2; private Label label2;
private Button buttonSave; private Button ButtonSave;
private Button buttonCancel; private Button ButtonCancel;
} }
} }

View File

@ -1,17 +1,81 @@
using System; using SushiBarContracts.BindingModels;
using SushiBarContracts.BusinessLogicsContracts;
using SushiBarContracts.SearchModels;
using Microsoft.Extensions.Logging;
namespace SushiBar.Forms namespace SushiBar.Forms
{ {
public partial class FormComponent public partial class FormComponent : Form
{ {
private void buttonSave_Click(object sender, EventArgs e) private readonly ILogger _logger;
private readonly IComponentLogic _logic;
private int? _id;
public int Id { set { _id = value; } }
public FormComponent(ILogger<FormComponent> logger, IComponentLogic logic)
{ {
ButtonSave_Click(sender, e); InitializeComponent();
_logger = logger;
_logic = logic;
} }
private void FormComponent_Load(object sender, EventArgs e)
private void buttonCancel_Click(object sender, EventArgs e)
{ {
ButtonCancel_Click(sender, e); if (_id.HasValue)
{
try
{
_logger.LogInformation("Получение компонента");
var view = _logic.ReadElement(new ComponentSearchModel
{
Id = _id.Value
});
if (view != null)
{
textBoxName.Text = view.ComponentName;
textBoxCost.Text = view.Cost.ToString();
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка получения компонента");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void ButtonSave_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxName.Text))
{
MessageBox.Show("Заполните название", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
_logger.LogInformation("Сохранение компонента");
try
{
var model = new ComponentBindingModel
{
Id = _id ?? 0,
ComponentName = textBoxName.Text,
Cost = Convert.ToDouble(textBoxCost.Text)
};
var operationResult = _id.HasValue ? _logic.Update(model) : _logic.Create(model);
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
}
MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
DialogResult = DialogResult.OK;
Close();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка сохранения компонента");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
} }
} }
} }

View File

@ -117,189 +117,183 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <data name="&gt;&gt;label2.Type" xml:space="preserve">
<data name="textBox1.Location" type="System.Drawing.Point, System.Drawing"> <value>System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>68, 6</value>
</data>
<data name="&gt;&gt;textBoxName.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;buttonCancel.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;textBoxCost.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="textBox1.TabIndex" type="System.Int32, mscorlib"> <data name="Button1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;textBox1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;buttonSave.Name" xml:space="preserve">
<value>buttonSave</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 9</value>
</data>
<data name="&gt;&gt;textBoxName.ZOrder" xml:space="preserve">
<value>4</value> <value>4</value>
</data> </data>
<data name="&gt;&gt;button2.Type" xml:space="preserve"> <data name="&gt;&gt;ButtonSave.Name" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>ButtonSave</value>
</data> </data>
<data name="&gt;&gt;textBoxCost.Parent" xml:space="preserve"> <data name="&gt;&gt;Button2.Parent" xml:space="preserve">
<value>$this</value> <value>$this</value>
</data> </data>
<data name="$this.Text" xml:space="preserve">
<value>FormComponent</value>
</data>
<data name="textBoxName.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>800, 450</value>
</data>
<data name="&gt;&gt;textBoxCost.ZOrder" xml:space="preserve"> <data name="&gt;&gt;textBoxCost.ZOrder" xml:space="preserve">
<value>2</value> <value>2</value>
</data> </data>
<data name="&gt;&gt;button2.Name" xml:space="preserve"> <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<value>button2</value> <data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 9</value>
</data> </data>
<data name="&gt;&gt;label2.Parent" xml:space="preserve"> <data name="ButtonCancel.TabIndex" type="System.Int32, mscorlib">
<value>$this</value>
</data>
<data name="&gt;&gt;button1.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="button1.Location" type="System.Drawing.Point, System.Drawing">
<value>95, 85</value>
</data>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="textBoxCost.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="textBoxCost.Location" type="System.Drawing.Point, System.Drawing">
<value>95, 39</value>
</data>
<data name="textBoxName.Location" type="System.Drawing.Point, System.Drawing">
<value>95, 6</value>
</data>
<data name="&gt;&gt;button1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="buttonSave.Location" type="System.Drawing.Point, System.Drawing">
<value>95, 85</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>FormComponent</value>
</data>
<data name="&gt;&gt;textBox1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="button2.Location" type="System.Drawing.Point, System.Drawing">
<value>222, 85</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>5</value> <value>5</value>
</data> </data>
<data name="&gt;&gt;buttonSave.Type" xml:space="preserve"> <data name="&gt;&gt;textBox1.Parent" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;buttonSave.Parent" xml:space="preserve">
<value>$this</value> <value>$this</value>
</data> </data>
<data name="&gt;&gt;button2.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="buttonCancel.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;button1.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;buttonCancel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
</data>
<data name="&gt;&gt;buttonSave.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label2.Name" xml:space="preserve">
<value>label2</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>8, 20</value>
</data>
<data name="&gt;&gt;textBox1.Name" xml:space="preserve">
<value>textBox1</value>
</data>
<data name="label2.TabIndex" type="System.Int32, mscorlib"> <data name="label2.TabIndex" type="System.Int32, mscorlib">
<value>2</value> <value>2</value>
</data> </data>
<data name="button2.TabIndex" type="System.Int32, mscorlib"> <data name="&gt;&gt;textBoxCost.Parent" xml:space="preserve">
<value>5</value> <value>$this</value>
</data>
<data name="&gt;&gt;textBoxCost.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="textBox1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data> </data>
<data name="&gt;&gt;textBoxName.Parent" xml:space="preserve"> <data name="&gt;&gt;textBoxName.Parent" xml:space="preserve">
<value>$this</value> <value>$this</value>
</data> </data>
<data name="&gt;&gt;button1.Name" xml:space="preserve"> <data name="Button2.Location" type="System.Drawing.Point, System.Drawing">
<value>button1</value>
</data>
<data name="&gt;&gt;buttonCancel.Name" xml:space="preserve">
<value>buttonCancel</value>
</data>
<data name="&gt;&gt;textBoxName.Name" xml:space="preserve">
<value>textBoxName</value>
</data>
<data name="&gt;&gt;buttonCancel.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="buttonCancel.Location" type="System.Drawing.Point, System.Drawing">
<value>222, 85</value> <value>222, 85</value>
</data> </data>
<data name="&gt;&gt;textBoxCost.Name" xml:space="preserve"> <data name="&gt;&gt;textBoxCost.Name" xml:space="preserve">
<value>textBoxCost</value> <value>textBoxCost</value>
</data> </data>
<data name="&gt;&gt;label2.ZOrder" xml:space="preserve"> <data name="&gt;&gt;label1.Type" xml:space="preserve">
<value>3</value> <value>System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="buttonSave.TabIndex" type="System.Int32, mscorlib"> <data name="&gt;&gt;Button1.Parent" xml:space="preserve">
<value>4</value> <value>$this</value>
</data>
<data name="&gt;&gt;label2.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="Button2.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;ButtonSave.ZOrder" xml:space="preserve">
<value>1</value>
</data> </data>
<data name="&gt;&gt;textBox1.Type" xml:space="preserve"> <data name="&gt;&gt;textBox1.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data> </data>
<data name="&gt;&gt;button2.ZOrder" xml:space="preserve"> <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>800, 450</value>
</data>
<data name="ButtonCancel.Location" type="System.Drawing.Point, System.Drawing">
<value>222, 85</value>
</data>
<data name="ButtonSave.Location" type="System.Drawing.Point, System.Drawing">
<value>95, 85</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="textBoxName.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;ButtonCancel.ZOrder" xml:space="preserve">
<value>0</value> <value>0</value>
</data> </data>
<data name="button1.TabIndex" type="System.Int32, mscorlib"> <data name="$this.Text" xml:space="preserve">
<value>4</value> <value>FormComponent</value>
</data> </data>
<data name="&gt;&gt;label2.Type" xml:space="preserve"> <data name="&gt;&gt;Button2.ZOrder" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>0</value>
</data> </data>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing"> <data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 42</value> <value>12, 42</value>
</data> </data>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, System.Private.CoreLib, Culture=neutral, PublicKeyToken=7cec85d7bea7798e"> <data name="ButtonSave.TabIndex" type="System.Int32, mscorlib">
<value>ru</value> <value>4</value>
</metadata> </data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <data name="textBoxCost.Location" type="System.Drawing.Point, System.Drawing">
<value>True</value> <value>95, 39</value>
</metadata> </data>
<data name="&gt;&gt;Button1.Name" xml:space="preserve">
<value>Button1</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;ButtonSave.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;ButtonCancel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
</data>
<data name="&gt;&gt;textBoxName.Name" xml:space="preserve">
<value>textBoxName</value>
</data>
<data name="&gt;&gt;Button1.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;textBoxName.Type" xml:space="preserve">
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="textBoxCost.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>8, 20</value>
</data>
<data name="&gt;&gt;textBoxName.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="&gt;&gt;textBox1.Name" xml:space="preserve">
<value>textBox1</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;Button2.Name" xml:space="preserve">
<value>Button2</value>
</data>
<data name="&gt;&gt;label2.Name" xml:space="preserve">
<value>label2</value>
</data>
<data name="&gt;&gt;ButtonSave.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="textBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>68, 6</value>
</data>
<data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="&gt;&gt;Button1.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>FormComponent</value>
</data>
<data name="&gt;&gt;Button2.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="Button1.Location" type="System.Drawing.Point, System.Drawing">
<value>95, 85</value>
</data>
<data name="textBoxName.Location" type="System.Drawing.Point, System.Drawing">
<value>95, 6</value>
</data>
<data name="&gt;&gt;textBox1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;ButtonCancel.Name" xml:space="preserve">
<value>ButtonCancel</value>
</data>
<data name="&gt;&gt;ButtonCancel.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root> </root>

View File

@ -147,19 +147,19 @@
<data name="label2.Text" xml:space="preserve"> <data name="label2.Text" xml:space="preserve">
<value>Цена</value> <value>Цена</value>
</data> </data>
<data name="buttonSave.Size" type="System.Drawing.Size, System.Drawing"> <data name="ButtonSave.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 29</value> <value>121, 29</value>
</data> </data>
<data name="buttonSave.Text" xml:space="preserve"> <data name="ButtonSave.Text" xml:space="preserve">
<value>Сохранить</value> <value>Сохранить</value>
</data> </data>
<data name="buttonCancel.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"> <data name="ButtonCancel.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value> <value>NoControl</value>
</data> </data>
<data name="buttonCancel.Size" type="System.Drawing.Size, System.Drawing"> <data name="ButtonCancel.Size" type="System.Drawing.Size, System.Drawing">
<value>119, 29</value> <value>119, 29</value>
</data> </data>
<data name="buttonCancel.Text" xml:space="preserve"> <data name="ButtonCancel.Text" xml:space="preserve">
<value>Отмена</value> <value>Отмена</value>
</data> </data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing"> <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">

View File

@ -1,81 +0,0 @@
using SushiBarContracts.BindingModels;
using SushiBarContracts.BusinessLogicsContracts;
using SushiBarContracts.SearchModels;
using Microsoft.Extensions.Logging;
namespace SushiBar.Forms
{
public partial class FormComponent : Form
{
private readonly ILogger _logger;
private readonly IComponentLogic _logic;
private int? _id;
public int Id { set { _id = value; } }
public FormComponent(ILogger<FormComponent> logger, IComponentLogic logic)
{
InitializeComponent();
_logger = logger;
_logic = logic;
}
private void FormComponent_Load(object sender, EventArgs e)
{
if (_id.HasValue)
{
try
{
_logger.LogInformation("Получение компонента");
var view = _logic.ReadElement(new ComponentSearchModel
{
Id = _id.Value
});
if (view != null)
{
textBoxName.Text = view.ComponentName;
textBoxCost.Text = view.Cost.ToString();
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка получения компонента");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void ButtonSave_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxName.Text))
{
MessageBox.Show("Заполните название", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
_logger.LogInformation("Сохранение компонента");
try
{
var model = new ComponentBindingModel
{
Id = _id ?? 0,
ComponentName = textBoxName.Text,
Cost = Convert.ToDouble(textBoxCost.Text)
};
var operationResult = _id.HasValue ? _logic.Update(model) : _logic.Create(model);
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
}
MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
DialogResult = DialogResult.OK;
Close();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка сохранения компонента");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
}
}

View File

@ -29,77 +29,83 @@
private void InitializeComponent() private void InitializeComponent()
{ {
dataGridView = new DataGridView(); dataGridView = new DataGridView();
buttonAdd = new Button(); ButtonAdd = new Button();
buttonUpd = new Button(); ButtonUpd = new Button();
buttonDel = new Button(); ButtonDel = new Button();
buttonRef = new Button(); ButtonRef = new Button();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout(); SuspendLayout();
// //
// dataGridView // dataGridView
// //
dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Dock = DockStyle.Left;
dataGridView.Location = new Point(0, 0); dataGridView.Location = new Point(0, 0);
dataGridView.Name = "dataGridView"; dataGridView.Name = "dataGridView";
dataGridView.RowHeadersWidth = 51; dataGridView.RowHeadersWidth = 51;
dataGridView.RowTemplate.Height = 29; dataGridView.RowTemplate.Height = 29;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(668, 408); dataGridView.Size = new Size(694, 408);
dataGridView.TabIndex = 0; dataGridView.TabIndex = 0;
// //
// buttonAdd // ButtonAdd
// //
buttonAdd.Location = new Point(674, 12); ButtonAdd.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonAdd.Name = "buttonAdd"; ButtonAdd.Location = new Point(700, 12);
buttonAdd.Size = new Size(114, 29); ButtonAdd.Name = "ButtonAdd";
buttonAdd.TabIndex = 1; ButtonAdd.Size = new Size(180, 29);
buttonAdd.Text = "Добавить"; ButtonAdd.TabIndex = 1;
buttonAdd.UseVisualStyleBackColor = true; ButtonAdd.Text = "Добавить";
buttonAdd.Click += buttonAdd_Click; ButtonAdd.UseVisualStyleBackColor = true;
ButtonAdd.Click += ButtonAdd_Click;
// //
// buttonUpd // ButtonUpd
// //
buttonUpd.Location = new Point(674, 47); ButtonUpd.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonUpd.Name = "buttonUpd"; ButtonUpd.Location = new Point(700, 47);
buttonUpd.Size = new Size(114, 29); ButtonUpd.Name = "ButtonUpd";
buttonUpd.TabIndex = 2; ButtonUpd.Size = new Size(180, 29);
buttonUpd.Text = "Изменить"; ButtonUpd.TabIndex = 2;
buttonUpd.UseVisualStyleBackColor = true; ButtonUpd.Text = "Изменить";
buttonUpd.Click += buttonUpd_Click; ButtonUpd.UseVisualStyleBackColor = true;
ButtonUpd.Click += ButtonUpd_Click;
// //
// buttonDel // ButtonDel
// //
buttonDel.Location = new Point(674, 82); ButtonDel.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonDel.Name = "buttonDel"; ButtonDel.Location = new Point(700, 82);
buttonDel.Size = new Size(114, 29); ButtonDel.Name = "ButtonDel";
buttonDel.TabIndex = 3; ButtonDel.Size = new Size(180, 29);
buttonDel.Text = "Удалить"; ButtonDel.TabIndex = 3;
buttonDel.UseVisualStyleBackColor = true; ButtonDel.Text = "Удалить";
buttonDel.Click += buttonDel_Click; ButtonDel.UseVisualStyleBackColor = true;
ButtonDel.Click += ButtonDel_Click;
// //
// buttonRef // ButtonRef
// //
buttonRef.Location = new Point(674, 117); ButtonRef.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonRef.Name = "buttonRef"; ButtonRef.Location = new Point(700, 117);
buttonRef.Size = new Size(114, 29); ButtonRef.Name = "ButtonRef";
buttonRef.TabIndex = 4; ButtonRef.Size = new Size(180, 29);
buttonRef.Text = "Обновить"; ButtonRef.TabIndex = 4;
buttonRef.UseVisualStyleBackColor = true; ButtonRef.Text = "Обновить";
buttonRef.Click += buttonRef_Click; ButtonRef.UseVisualStyleBackColor = true;
ButtonRef.Click += ButtonRef_Click;
// //
// FormComponents // FormComponents
// //
AllowDrop = true;
AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 408); ClientSize = new Size(892, 408);
Controls.Add(buttonRef); Controls.Add(ButtonRef);
Controls.Add(buttonDel); Controls.Add(ButtonDel);
Controls.Add(buttonUpd); Controls.Add(ButtonUpd);
Controls.Add(buttonAdd); Controls.Add(ButtonAdd);
Controls.Add(dataGridView); Controls.Add(dataGridView);
Name = "FormComponents"; Name = "FormComponents";
Text = "Компоненты"; Text = "Компоненты";
WindowState = FormWindowState.Maximized;
Load += FormComponents_Load; Load += FormComponents_Load;
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false); ResumeLayout(false);
@ -108,9 +114,9 @@
#endregion #endregion
private DataGridView dataGridView; private DataGridView dataGridView;
private Button buttonAdd; private Button ButtonAdd;
private Button buttonUpd; private Button ButtonUpd;
private Button buttonDel; private Button ButtonDel;
private Button buttonRef; private Button ButtonRef;
} }
} }

View File

@ -1,35 +1,98 @@
using System; using SushiBarContracts.BindingModels;
using System.Collections.Generic; using SushiBarContracts.BusinessLogicsContracts;
using System.ComponentModel; using Microsoft.Extensions.Logging;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SushiBar.Forms namespace SushiBar.Forms
{ {
public partial class FormComponents public partial class FormComponents : Form
{ {
private void buttonAdd_Click(object sender, EventArgs e) private readonly ILogger _logger;
private readonly IComponentLogic _logic;
public FormComponents(ILogger<FormComponents> logger, IComponentLogic logic)
{ {
ButtonAdd_Click(sender, e); InitializeComponent();
_logger = logger;
_logic = logic;
} }
private void FormComponents_Load(object sender, EventArgs e)
private void buttonUpd_Click(object sender, EventArgs e)
{ {
ButtonUpd_Click(sender, e); LoadData();
} }
private void LoadData()
private void buttonDel_Click(object sender, EventArgs e)
{ {
ButtonDel_Click(sender, e); try
}
private void buttonRef_Click(object sender, EventArgs e)
{ {
ButtonRef_Click(sender, e); var list = _logic.ReadList(null);
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["Id"].Visible = false;
dataGridView.Columns["ComponentName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
_logger.LogInformation("Загрузка компонентов");
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка загрузки компонентов");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonAdd_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormComponent));
if (service is FormComponent form)
{
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
}
private void ButtonUpd_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
var service = Program.ServiceProvider?.GetService(typeof(FormComponent));
if (service is FormComponent form)
{
form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
}
}
private void ButtonDel_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
_logger.LogInformation("Удаление компонента");
try
{
if (!_logic.Delete(new ComponentBindingModel
{
Id = id
}))
{
throw new Exception("Ошибка при удалении. Дополнительная информация в логах.");
}
LoadData();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка удаления компонента");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
private void ButtonRef_Click(object sender, EventArgs e)
{
LoadData();
} }
} }
} }

View File

@ -1,98 +0,0 @@
using SushiBarContracts.BindingModels;
using SushiBarContracts.BusinessLogicsContracts;
using Microsoft.Extensions.Logging;
namespace SushiBar.Forms
{
public partial class FormComponents : Form
{
private readonly ILogger _logger;
private readonly IComponentLogic _logic;
public FormComponents(ILogger<FormComponents> logger, IComponentLogic logic)
{
InitializeComponent();
_logger = logger;
_logic = logic;
}
private void FormComponents_Load(object sender, EventArgs e)
{
LoadData();
}
private void LoadData()
{
try
{
var list = _logic.ReadList(null);
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["Id"].Visible = false;
dataGridView.Columns["ComponentName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
_logger.LogInformation("Загрузка компонентов");
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка загрузки компонентов");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonAdd_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormComponent));
if (service is FormComponent form)
{
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
}
private void ButtonUpd_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
var service = Program.ServiceProvider?.GetService(typeof(FormComponent));
if (service is FormComponent form)
{
form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
}
}
private void ButtonDel_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
_logger.LogInformation("Удаление компонента");
try
{
if (!_logic.Delete(new ComponentBindingModel
{
Id = id
}))
{
throw new Exception("Ошибка при удалении. Дополнительная информация в логах.");
}
LoadData();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка удаления компонента");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
private void ButtonRef_Click(object sender, EventArgs e)
{
LoadData();
}
}
}

View File

@ -28,35 +28,35 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
buttonSave = new Button(); ButtonSave = new Button();
buttonCancel = new Button(); ButtonCancel = new Button();
label1 = new Label(); label1 = new Label();
label2 = new Label(); label2 = new Label();
label3 = new Label(); label3 = new Label();
textBoxCount = new TextBox(); TextBoxCount = new TextBox();
textBoxSum = new TextBox(); TextBoxSum = new TextBox();
comboBoxSushi = new ComboBox(); ComboBoxSushi = new ComboBox();
SuspendLayout(); SuspendLayout();
// //
// buttonSave // ButtonSave
// //
buttonSave.Location = new Point(185, 112); ButtonSave.Location = new Point(185, 112);
buttonSave.Name = "buttonSave"; ButtonSave.Name = "ButtonSave";
buttonSave.Size = new Size(100, 30); ButtonSave.Size = new Size(100, 30);
buttonSave.TabIndex = 0; ButtonSave.TabIndex = 0;
buttonSave.Text = "Сохранить"; ButtonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true; ButtonSave.UseVisualStyleBackColor = true;
buttonSave.Click += buttonSave_Click; ButtonSave.Click += ButtonSave_Click;
// //
// buttonCancel // ButtonCancel
// //
buttonCancel.Location = new Point(291, 112); ButtonCancel.Location = new Point(291, 112);
buttonCancel.Name = "buttonCancel"; ButtonCancel.Name = "ButtonCancel";
buttonCancel.Size = new Size(100, 30); ButtonCancel.Size = new Size(100, 30);
buttonCancel.TabIndex = 1; ButtonCancel.TabIndex = 1;
buttonCancel.Text = "Отмена"; ButtonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true; ButtonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += buttonCancel_Click; ButtonCancel.Click += ButtonCancel_Click;
// //
// label1 // label1
// //
@ -85,46 +85,50 @@
label3.TabIndex = 4; label3.TabIndex = 4;
label3.Text = "Сумма:"; label3.Text = "Сумма:";
// //
// textBoxCount // TextBoxCount
// //
textBoxCount.Location = new Point(119, 46); TextBoxCount.Location = new Point(119, 46);
textBoxCount.Name = "textBoxCount"; TextBoxCount.Name = "TextBoxCount";
textBoxCount.Size = new Size(272, 27); TextBoxCount.Size = new Size(272, 27);
textBoxCount.TabIndex = 5; TextBoxCount.TabIndex = 5;
textBoxCount.TextChanged += textBoxCount_TextChanged; TextBoxCount.TextChanged += TextBoxCount_TextChanged;
// //
// textBoxSum // TextBoxSum
// //
textBoxSum.Location = new Point(119, 79); TextBoxSum.Location = new Point(119, 79);
textBoxSum.Name = "textBoxSum"; TextBoxSum.Name = "TextBoxSum";
textBoxSum.ReadOnly = true; TextBoxSum.ReadOnly = true;
textBoxSum.Size = new Size(272, 27); TextBoxSum.Size = new Size(272, 27);
textBoxSum.TabIndex = 6; TextBoxSum.TabIndex = 6;
// //
// comboBoxSushi // ComboBoxSushi
// //
comboBoxSushi.FormattingEnabled = true; ComboBoxSushi.FormattingEnabled = true;
comboBoxSushi.Location = new Point(119, 12); ComboBoxSushi.Location = new Point(119, 12);
comboBoxSushi.Name = "comboBoxSushi"; ComboBoxSushi.Name = "ComboBoxSushi";
comboBoxSushi.Size = new Size(272, 28); ComboBoxSushi.Size = new Size(272, 28);
comboBoxSushi.TabIndex = 7; ComboBoxSushi.TabIndex = 7;
comboBoxSushi.SelectedIndexChanged += comboBoxSushi_SelectedIndexChanged; ComboBoxSushi.SelectedIndexChanged += ComboBoxSushi_SelectedIndexChanged;
// //
// FormCreateOrder // FormCreateOrder
// //
AutoScaleDimensions = new SizeF(8F, 20F); AllowDrop = true;
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.None;
ClientSize = new Size(403, 152); ClientSize = new Size(403, 152);
Controls.Add(comboBoxSushi); Controls.Add(ComboBoxSushi);
Controls.Add(textBoxSum); Controls.Add(TextBoxSum);
Controls.Add(textBoxCount); Controls.Add(TextBoxCount);
Controls.Add(label3); Controls.Add(label3);
Controls.Add(label2); Controls.Add(label2);
Controls.Add(label1); Controls.Add(label1);
Controls.Add(buttonCancel); Controls.Add(ButtonCancel);
Controls.Add(buttonSave); Controls.Add(ButtonSave);
MaximizeBox = false;
MinimizeBox = false;
Name = "FormCreateOrder"; Name = "FormCreateOrder";
ShowInTaskbar = false;
Text = "Заказ"; Text = "Заказ";
TopMost = true;
Load += FormCreateOrder_Load; Load += FormCreateOrder_Load;
ResumeLayout(false); ResumeLayout(false);
PerformLayout(); PerformLayout();
@ -132,13 +136,13 @@
#endregion #endregion
private Button buttonSave; private Button ButtonSave;
private Button buttonCancel; private Button ButtonCancel;
private Label label1; private Label label1;
private Label label2; private Label label2;
private Label label3; private Label label3;
private TextBox textBoxCount; private TextBox TextBoxCount;
private TextBox textBoxSum; private TextBox TextBoxSum;
private ComboBox comboBoxSushi; private ComboBox ComboBoxSushi;
} }
} }

View File

@ -1,35 +1,113 @@
using System; using Microsoft.Extensions.Logging;
using System.Collections.Generic; using SushiBarContracts.BindingModels;
using System.ComponentModel; using SushiBarContracts.BusinessLogicsContracts;
using System.Data; using SushiBarContracts.SearchModels;
using System.Drawing; using SushiBarContracts.ViewModels;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SushiBar.Forms namespace SushiBar.Forms
{ {
public partial class FormCreateOrder public partial class FormCreateOrder : Form
{ {
private void buttonSave_Click(object sender, EventArgs e) private readonly ILogger _logger;
private readonly ISushiLogic _logicS;
private readonly IOrderLogic _logicO;
public FormCreateOrder(ILogger<FormCreateOrder> logger, ISushiLogic logicS, IOrderLogic logicO)
{ {
ButtonSave_Click(sender, e); InitializeComponent();
_logger = logger;
_logicS = logicS;
_logicO = logicO;
} }
private void FormCreateOrder_Load(object sender, EventArgs e)
private void buttonCancel_Click(object sender, EventArgs e)
{ {
ButtonCancel_Click(sender, e); try
}
private void textBoxCount_TextChanged(object sender, EventArgs e)
{ {
TextBoxCount_TextChanged(sender, e); _logger.LogInformation("Загрузка суши для заказа");
} List<SushiViewModel>? _list = _logicS.ReadList(null);
if (_list != null)
private void comboBoxSushi_SelectedIndexChanged(object sender, EventArgs e)
{ {
ComboBoxSushi_SelectedIndexChanged(sender, e); ComboBoxSushi.DisplayMember = "SushiName";
ComboBoxSushi.ValueMember = "Id";
ComboBoxSushi.DataSource = _list;
ComboBoxSushi.SelectedItem = null;
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка загрузки суши");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void CalcSum()
{
if (ComboBoxSushi.SelectedValue != null && !string.IsNullOrEmpty(TextBoxCount.Text))
{
try
{
int id = Convert.ToInt32(ComboBoxSushi.SelectedValue);
var sushi = _logicS.ReadElement(new SushiSearchModel
{
Id = id
});
int count = Convert.ToInt32(TextBoxCount.Text);
TextBoxSum.Text = Math.Round(count * (sushi?.Price ?? 0), 2).ToString();
_logger.LogInformation("Расчет суммы заказа");
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка расчета суммы заказа");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
}
private void TextBoxCount_TextChanged(object sender, EventArgs e)
{
CalcSum();
}
private void ComboBoxSushi_SelectedIndexChanged(object sender, EventArgs e)
{
CalcSum();
}
private void ButtonSave_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(TextBoxCount.Text))
{
MessageBox.Show("Заполните поле Количество", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (ComboBoxSushi.SelectedValue == null)
{
MessageBox.Show("Выберите изделие", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
_logger.LogInformation("Создание заказа");
try
{
var operationResult = _logicO.CreateOrder(new OrderBindingModel
{
SushiId = Convert.ToInt32(ComboBoxSushi.SelectedValue),
Count = Convert.ToInt32(TextBoxCount.Text),
Sum = Convert.ToDouble(TextBoxSum.Text)
});
if (!operationResult)
{
throw new Exception("Ошибка при создании заказа. Дополнительная информация в логах.");
}
MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
DialogResult = DialogResult.OK;
Close();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка создания заказа");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
} }
} }
} }

View File

@ -1,115 +0,0 @@
using Microsoft.Extensions.Logging;
using Microsoft.VisualBasic.Logging;
using SushiBarContracts.BindingModels;
using SushiBarContracts.BusinessLogicsContracts;
using SushiBarContracts.SearchModels;
using SushiBarContracts.ViewModels;
using System.Windows.Forms;
namespace SushiBar.Forms
{
public partial class FormCreateOrder : Form
{
private readonly ILogger _logger;
private readonly ISushiLogic _logicS;
private readonly IOrderLogic _logicO;
public FormCreateOrder(ILogger<FormCreateOrder> logger, ISushiLogic logicS, IOrderLogic logicO)
{
InitializeComponent();
_logger = logger;
_logicS = logicS;
_logicO = logicO;
}
private void FormCreateOrder_Load(object sender, EventArgs e)
{
try
{
_logger.LogInformation("Загрузка суши для заказа");
List<SushiViewModel>? _list = _logicS.ReadList(null);
if (_list != null)
{
comboBoxSushi.DisplayMember = "SushiName";
comboBoxSushi.ValueMember = "Id";
comboBoxSushi.DataSource = _list;
comboBoxSushi.SelectedItem = null;
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка загрузки суши");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void CalcSum()
{
if (comboBoxSushi.SelectedValue != null && !string.IsNullOrEmpty(textBoxCount.Text))
{
try
{
int id = Convert.ToInt32(comboBoxSushi.SelectedValue);
var sushi = _logicS.ReadElement(new SushiSearchModel
{
Id = id
});
int count = Convert.ToInt32(textBoxCount.Text);
textBoxSum.Text = Math.Round(count * (sushi?.Price ?? 0), 2).ToString();
_logger.LogInformation("Расчет суммы заказа");
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка расчета суммы заказа");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
}
private void TextBoxCount_TextChanged(object sender, EventArgs e)
{
CalcSum();
}
private void ComboBoxSushi_SelectedIndexChanged(object sender, EventArgs e)
{
CalcSum();
}
private void ButtonSave_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxCount.Text))
{
MessageBox.Show("Заполните поле Количество", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (comboBoxSushi.SelectedValue == null)
{
MessageBox.Show("Выберите изделие", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
_logger.LogInformation("Создание заказа");
try
{
var operationResult = _logicO.CreateOrder(new OrderBindingModel
{
SushiId = Convert.ToInt32(comboBoxSushi.SelectedValue),
Count = Convert.ToInt32(textBoxCount.Text),
Sum = Convert.ToDouble(textBoxSum.Text)
});
if (!operationResult)
{
throw new Exception("Ошибка при создании заказа. Дополнительная информация в логах.");
}
MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
DialogResult = DialogResult.OK;
Close();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка создания заказа");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
}
}

View File

@ -31,26 +31,27 @@
dataGridView = new DataGridView(); dataGridView = new DataGridView();
menuStrip1 = new MenuStrip(); menuStrip1 = new MenuStrip();
ToolStripMenuItem = new ToolStripMenuItem(); ToolStripMenuItem = new ToolStripMenuItem();
sushiToolStripMenuItem = new ToolStripMenuItem(); SushiToolStripMenuItem = new ToolStripMenuItem();
componentsToolStripMenuItem = new ToolStripMenuItem(); ComponentsToolStripMenuItem = new ToolStripMenuItem();
buttonCreateOrder = new Button(); ButtonCreateOrder = new Button();
buttonTakeOrderInWork = new Button(); ButtonTakeOrderInWork = new Button();
buttonOrderReady = new Button(); ButtonOrderReady = new Button();
buttonIssuedOrder = new Button(); ButtonIssuedOrder = new Button();
buttonRef = new Button(); ButtonRef = new Button();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
menuStrip1.SuspendLayout(); menuStrip1.SuspendLayout();
SuspendLayout(); SuspendLayout();
// //
// dataGridView // dataGridView
// //
dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Location = new Point(12, 31); dataGridView.Location = new Point(0, 28);
dataGridView.Name = "dataGridView"; dataGridView.Name = "dataGridView";
dataGridView.RowHeadersWidth = 51; dataGridView.RowHeadersWidth = 51;
dataGridView.RowTemplate.Height = 29; dataGridView.RowTemplate.Height = 29;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(980, 407); dataGridView.Size = new Size(992, 422);
dataGridView.TabIndex = 0; dataGridView.TabIndex = 0;
// //
// menuStrip1 // menuStrip1
@ -65,90 +66,97 @@
// //
// ToolStripMenuItem // ToolStripMenuItem
// //
ToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { sushiToolStripMenuItem, componentsToolStripMenuItem }); ToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { SushiToolStripMenuItem, ComponentsToolStripMenuItem });
ToolStripMenuItem.Name = "ToolStripMenuItem"; ToolStripMenuItem.Name = "ToolStripMenuItem";
ToolStripMenuItem.Size = new Size(117, 24); ToolStripMenuItem.Size = new Size(117, 24);
ToolStripMenuItem.Text = "Справочники"; ToolStripMenuItem.Text = "Справочники";
// //
// sushiToolStripMenuItem // SushiToolStripMenuItem
// //
sushiToolStripMenuItem.Name = "sushiToolStripMenuItem"; SushiToolStripMenuItem.Name = "SushiToolStripMenuItem";
sushiToolStripMenuItem.Size = new Size(182, 26); SushiToolStripMenuItem.Size = new Size(182, 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(182, 26); ComponentsToolStripMenuItem.Size = new Size(182, 26);
componentsToolStripMenuItem.Text = "Компоненты"; ComponentsToolStripMenuItem.Text = "Компоненты";
componentsToolStripMenuItem.Click += componentsToolStripMenuItem_Click; ComponentsToolStripMenuItem.Click += ComponentsToolStripMenuItem_Click;
// //
// buttonCreateOrder // ButtonCreateOrder
// //
buttonCreateOrder.Location = new Point(998, 50); ButtonCreateOrder.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonCreateOrder.Name = "buttonCreateOrder"; ButtonCreateOrder.Location = new Point(998, 31);
buttonCreateOrder.Size = new Size(180, 30); ButtonCreateOrder.Name = "ButtonCreateOrder";
buttonCreateOrder.TabIndex = 2; ButtonCreateOrder.Size = new Size(180, 30);
buttonCreateOrder.Text = "Создать заказ"; ButtonCreateOrder.TabIndex = 2;
buttonCreateOrder.UseVisualStyleBackColor = true; ButtonCreateOrder.Text = "Создать заказ";
buttonCreateOrder.Click += buttonCreateOrder_Click; ButtonCreateOrder.UseVisualStyleBackColor = true;
ButtonCreateOrder.Click += ButtonCreateOrder_Click;
// //
// buttonTakeOrderInWork // ButtonTakeOrderInWork
// //
buttonTakeOrderInWork.Location = new Point(998, 86); ButtonTakeOrderInWork.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonTakeOrderInWork.Name = "buttonTakeOrderInWork"; ButtonTakeOrderInWork.Location = new Point(998, 67);
buttonTakeOrderInWork.Size = new Size(180, 30); ButtonTakeOrderInWork.Name = "ButtonTakeOrderInWork";
buttonTakeOrderInWork.TabIndex = 3; ButtonTakeOrderInWork.Size = new Size(180, 30);
buttonTakeOrderInWork.Text = "Отдать на выполнение"; ButtonTakeOrderInWork.TabIndex = 3;
buttonTakeOrderInWork.UseVisualStyleBackColor = true; ButtonTakeOrderInWork.Text = "Отдать на выполнение";
buttonTakeOrderInWork.Click += buttonTakeOrderInWork_Click; ButtonTakeOrderInWork.UseVisualStyleBackColor = true;
ButtonTakeOrderInWork.Click += ButtonTakeOrderInWork_Click;
// //
// buttonOrderReady // ButtonOrderReady
// //
buttonOrderReady.Location = new Point(998, 122); ButtonOrderReady.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonOrderReady.Name = "buttonOrderReady"; ButtonOrderReady.Location = new Point(998, 103);
buttonOrderReady.Size = new Size(180, 30); ButtonOrderReady.Name = "ButtonOrderReady";
buttonOrderReady.TabIndex = 4; ButtonOrderReady.Size = new Size(180, 30);
buttonOrderReady.Text = "Заказ готов"; ButtonOrderReady.TabIndex = 4;
buttonOrderReady.UseVisualStyleBackColor = true; ButtonOrderReady.Text = "Заказ готов";
buttonOrderReady.Click += buttonOrderReady_Click; ButtonOrderReady.UseVisualStyleBackColor = true;
ButtonOrderReady.Click += ButtonOrderReady_Click;
// //
// buttonIssuedOrder // ButtonIssuedOrder
// //
buttonIssuedOrder.Location = new Point(998, 158); ButtonIssuedOrder.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonIssuedOrder.Name = "buttonIssuedOrder"; ButtonIssuedOrder.Location = new Point(998, 139);
buttonIssuedOrder.Size = new Size(180, 30); ButtonIssuedOrder.Name = "ButtonIssuedOrder";
buttonIssuedOrder.TabIndex = 5; ButtonIssuedOrder.Size = new Size(180, 30);
buttonIssuedOrder.Text = "Заказ Выдан"; ButtonIssuedOrder.TabIndex = 5;
buttonIssuedOrder.UseVisualStyleBackColor = true; ButtonIssuedOrder.Text = "Заказ Выдан";
buttonIssuedOrder.Click += buttonIssuedOrder_Click; ButtonIssuedOrder.UseVisualStyleBackColor = true;
ButtonIssuedOrder.Click += ButtonIssuedOrder_Click;
// //
// buttonRef // ButtonRef
// //
buttonRef.Location = new Point(998, 194); ButtonRef.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonRef.Name = "buttonRef"; ButtonRef.Location = new Point(998, 175);
buttonRef.Size = new Size(180, 30); ButtonRef.Name = "ButtonRef";
buttonRef.TabIndex = 6; ButtonRef.Size = new Size(180, 30);
buttonRef.Text = "Обновить список"; ButtonRef.TabIndex = 6;
buttonRef.UseVisualStyleBackColor = true; ButtonRef.Text = "Обновить список";
buttonRef.Click += buttonRef_Click; ButtonRef.UseVisualStyleBackColor = true;
ButtonRef.Click += ButtonRef_Click;
// //
// FormMain // FormMain
// //
AllowDrop = true;
AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1190, 450); ClientSize = new Size(1190, 450);
Controls.Add(buttonRef); Controls.Add(ButtonRef);
Controls.Add(buttonIssuedOrder); Controls.Add(ButtonIssuedOrder);
Controls.Add(buttonOrderReady); Controls.Add(ButtonOrderReady);
Controls.Add(buttonTakeOrderInWork); Controls.Add(ButtonTakeOrderInWork);
Controls.Add(buttonCreateOrder); Controls.Add(ButtonCreateOrder);
Controls.Add(dataGridView); Controls.Add(dataGridView);
Controls.Add(menuStrip1); Controls.Add(menuStrip1);
MainMenuStrip = menuStrip1; MainMenuStrip = menuStrip1;
Name = "FormMain"; Name = "FormMain";
Text = "Сушибар"; Text = "Сушибар";
WindowState = FormWindowState.Maximized;
Load += FormMain_Load; Load += FormMain_Load;
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
menuStrip1.ResumeLayout(false); menuStrip1.ResumeLayout(false);
@ -161,13 +169,13 @@
private DataGridView dataGridView; private DataGridView dataGridView;
private MenuStrip menuStrip1; private MenuStrip menuStrip1;
private Button buttonCreateOrder; private Button ButtonCreateOrder;
private Button buttonTakeOrderInWork; private Button ButtonTakeOrderInWork;
private Button buttonOrderReady; private Button ButtonOrderReady;
private Button buttonIssuedOrder; private Button ButtonIssuedOrder;
private Button buttonRef; private Button ButtonRef;
private ToolStripMenuItem ToolStripMenuItem; private ToolStripMenuItem ToolStripMenuItem;
private ToolStripMenuItem sushiToolStripMenuItem; private ToolStripMenuItem SushiToolStripMenuItem;
private ToolStripMenuItem componentsToolStripMenuItem; private ToolStripMenuItem ComponentsToolStripMenuItem;
} }
} }

View File

@ -1,40 +1,137 @@
namespace SushiBar.Forms using Microsoft.Extensions.Logging;
{ using SushiBarContracts.BindingModels;
public partial class FormMain using SushiBarContracts.BusinessLogicsContracts;
{
private void buttonCreateOrder_Click(object sender, EventArgs e)
{
ButtonCreateOrder_Click(sender, e);
}
private void buttonTakeOrderInWork_Click(object sender, EventArgs e) namespace SushiBar.Forms
{ {
ButtonTakeOrderInWork_Click(sender, e); public partial class FormMain : Form
}
private void buttonOrderReady_Click(object sender, EventArgs e)
{ {
ButtonOrderReady_Click(sender, e); private readonly ILogger _logger;
} private readonly IOrderLogic _orderLogic;
public FormMain(ILogger<FormMain> logger, IOrderLogic orderLogic)
private void buttonIssuedOrder_Click(object sender, EventArgs e)
{ {
ButtonIssuedOrder_Click(sender, e); InitializeComponent();
_logger = logger;
_orderLogic = orderLogic;
} }
private void FormMain_Load(object sender, EventArgs e)
private void buttonRef_Click(object sender, EventArgs e)
{ {
ButtonRef_Click(sender, e); LoadData();
} }
private void LoadData()
private void sushiToolStripMenuItem_Click(object sender, EventArgs e)
{ {
SushiToolStripMenuItem_Click(sender, e); try
}
private void componentsToolStripMenuItem_Click(object sender, EventArgs e)
{ {
ComponentsToolStripMenuItem_Click(sender, e); var list = _orderLogic.ReadList(null);
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["SushiId"].Visible = false;
dataGridView.Columns["SushiName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
_logger.LogInformation("Загрузка заказов");
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка загрузки суши");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ComponentsToolStripMenuItem_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormComponents));
if (service is FormComponents form)
{
form.ShowDialog();
}
}
private void SushiToolStripMenuItem_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormSushis));
if (service is FormSushis form)
{
form.ShowDialog();
}
}
private void ButtonCreateOrder_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormCreateOrder));
if (service is FormCreateOrder form)
{
form.ShowDialog();
LoadData();
}
}
private void ButtonTakeOrderInWork_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
_logger.LogInformation("Заказ №{id}. Меняется статус на 'В работе'", id);
try
{
var operationResult = _orderLogic.TakeOrderInWork(new OrderBindingModel { Id = id });
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
}
LoadData();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка передачи заказа в работу");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void ButtonOrderReady_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
_logger.LogInformation("Заказ №{id}. Меняется статус на 'Готов'", id);
try
{
var operationResult = _orderLogic.FinishOrder(new OrderBindingModel { Id = id });
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
}
LoadData();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка отметки о готовности заказа");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void ButtonIssuedOrder_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
_logger.LogInformation("Заказ №{id}. Меняется статус на 'Выдан'", id);
try
{
var operationResult = _orderLogic.DeliveryOrder(new OrderBindingModel { Id = id });
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
}
_logger.LogInformation("Заказ №{id} выдан", id);
LoadData();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка отметки о выдачи заказа");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void ButtonRef_Click(object sender, EventArgs e)
{
LoadData();
} }
} }
} }

View File

@ -1,140 +0,0 @@
using Microsoft.Extensions.Logging;
using SushiBarBusinessLogic.BusinessLogics;
using SushiBarContracts.BindingModels;
using SushiBarContracts.BusinessLogicsContracts;
using SushiBarDataModels.Enums;
using System.Windows.Forms;
namespace SushiBar.Forms
{
public partial class FormMain : Form
{
private readonly ILogger _logger;
private readonly IOrderLogic _orderLogic;
public FormMain(ILogger<FormMain> logger, IOrderLogic orderLogic)
{
InitializeComponent();
_logger = logger;
_orderLogic = orderLogic;
}
private void FormMain_Load(object sender, EventArgs e)
{
LoadData();
}
private void LoadData()
{
try
{
var list = _orderLogic.ReadList(null);
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["SushiId"].Visible = false;
dataGridView.Columns["SushiName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
_logger.LogInformation("Загрузка заказов");
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка загрузки суши");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ComponentsToolStripMenuItem_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormComponents));
if (service is FormComponents form)
{
form.ShowDialog();
}
}
private void SushiToolStripMenuItem_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormSushis));
if (service is FormSushis form)
{
form.ShowDialog();
}
}
private void ButtonCreateOrder_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormCreateOrder));
if (service is FormCreateOrder form)
{
form.ShowDialog();
LoadData();
}
}
private void ButtonTakeOrderInWork_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
_logger.LogInformation("Заказ №{id}. Меняется статус на 'В работе'", id);
try
{
var operationResult = _orderLogic.TakeOrderInWork(new OrderBindingModel { Id = id});
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
}
LoadData();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка передачи заказа в работу");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void ButtonOrderReady_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
_logger.LogInformation("Заказ №{id}. Меняется статус на 'Готов'", id);
try
{
var operationResult = _orderLogic.FinishOrder(new OrderBindingModel { Id = id });
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
}
LoadData();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка отметки о готовности заказа");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void ButtonIssuedOrder_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
_logger.LogInformation("Заказ №{id}. Меняется статус на 'Выдан'", id);
try
{
var operationResult = _orderLogic.DeliveryOrder(new OrderBindingModel { Id = id });
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
}
_logger.LogInformation("Заказ №{id} выдан", id);
LoadData();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка отметки о выдачи заказа");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void ButtonRef_Click(object sender, EventArgs e)
{
LoadData();
}
}
}

View File

@ -0,0 +1,178 @@
namespace SushiBar.Forms
{
partial class FormShop
{
/// <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()
{
ButtonSave = new Button();
ButtonCancel = new Button();
label1 = new Label();
label2 = new Label();
textBoxName = new TextBox();
textBoxAddress = new TextBox();
dataGridView = new DataGridView();
Id = new DataGridViewTextBoxColumn();
SushiName = new DataGridViewTextBoxColumn();
Sum = new DataGridViewTextBoxColumn();
Count = new DataGridViewTextBoxColumn();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout();
//
// ButtonSave
//
ButtonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
ButtonSave.Location = new Point(536, 418);
ButtonSave.Name = "ButtonSave";
ButtonSave.Size = new Size(123, 29);
ButtonSave.TabIndex = 0;
ButtonSave.Text = "Сохранить";
ButtonSave.UseVisualStyleBackColor = true;
ButtonSave.Click += ButtonSave_Click;
//
// ButtonCancel
//
ButtonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
ButtonCancel.Location = new Point(665, 418);
ButtonCancel.Name = "ButtonCancel";
ButtonCancel.Size = new Size(123, 29);
ButtonCancel.TabIndex = 1;
ButtonCancel.Text = "Отмена";
ButtonCancel.UseVisualStyleBackColor = true;
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(22, 28);
label1.Name = "label1";
label1.Size = new Size(77, 20);
label1.TabIndex = 2;
label1.Text = "Название\r\n";
//
// label2
//
label2.AutoSize = true;
label2.Location = new Point(22, 71);
label2.Name = "label2";
label2.Size = new Size(51, 20);
label2.TabIndex = 3;
label2.Text = "Адрес";
//
// textBoxName
//
textBoxName.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
textBoxName.Location = new Point(150, 25);
textBoxName.Name = "textBoxName";
textBoxName.Size = new Size(631, 27);
textBoxName.TabIndex = 5;
//
// textBoxAddress
//
textBoxAddress.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
textBoxAddress.Location = new Point(150, 68);
textBoxAddress.Name = "textBoxAddress";
textBoxAddress.Size = new Size(631, 27);
textBoxAddress.TabIndex = 6;
//
// dataGridView
//
dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Columns.AddRange(new DataGridViewColumn[] { Id, SushiName, Sum, Count });
dataGridView.Location = new Point(23, 111);
dataGridView.Name = "dataGridView";
dataGridView.RowHeadersWidth = 51;
dataGridView.RowTemplate.Height = 29;
dataGridView.Size = new Size(759, 302);
dataGridView.TabIndex = 7;
//
// Id
//
Id.HeaderText = "Id";
Id.MinimumWidth = 6;
Id.Name = "Id";
Id.Visible = false;
Id.Width = 125;
//
// SushiName
//
SushiName.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
SushiName.HeaderText = "Суши";
SushiName.MinimumWidth = 6;
SushiName.Name = "SushiName";
SushiName.ReadOnly = true;
//
// Sum
//
Sum.HeaderText = "Стоимость";
Sum.MinimumWidth = 6;
Sum.Name = "Sum";
Sum.ReadOnly = true;
Sum.Width = 125;
//
// Count
//
Count.HeaderText = "Количество";
Count.MinimumWidth = 6;
Count.Name = "Count";
Count.ReadOnly = true;
Count.Width = 125;
//
// FormShop
//
AllowDrop = true;
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(793, 453);
Controls.Add(dataGridView);
Controls.Add(textBoxAddress);
Controls.Add(textBoxName);
Controls.Add(label2);
Controls.Add(label1);
Controls.Add(ButtonCancel);
Controls.Add(ButtonSave);
Name = "FormShop";
Text = "Форма магазина";
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private Button ButtonSave;
private Button ButtonCancel;
private Label label1;
private Label label2;
private TextBox textBoxName;
private TextBox textBoxAddress;
private DataGridView dataGridView;
private DataGridViewTextBoxColumn Id;
private DataGridViewTextBoxColumn SushiName;
private DataGridViewTextBoxColumn Sum;
private DataGridViewTextBoxColumn Count;
}
}

View File

@ -0,0 +1,60 @@
using Microsoft.Extensions.Logging;
using SushiBarContracts.BindingModels;
using SushiBarContracts.BusinessLogicsContracts;
using SushiBarDataModels.Models;
namespace SushiBar.Forms
{
public partial class FormShop : Form
{
private readonly ILogger _logger;
private readonly IShopLogic _logic;
public int? _id;
private Dictionary<int, (ISushiModel, int)> _sushis;
public FormShop(ILogger logger, IShopLogic logic)
{
_logger = logger;
_logic = logic;
InitializeComponent();
}
private void ButtonSave_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxName.Text))
{
MessageBox.Show("Заполните название", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (string.IsNullOrEmpty(textBoxAddress.Text))
{
MessageBox.Show("Заполните адрес", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
_logger.LogInformation("Сохранение магазина");
try
{
var model = new ShopBindingModel
{
Id = _id ?? 0,
ShopName = textBoxName.Text,
Address = textBoxAddress.Text,
DateCreate = DateTime.Now,
ShopSushi = _sushis
};
var operationResult = _id.HasValue ? _logic.Update(model) : _logic.Create(model);
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
}
MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
DialogResult = DialogResult.OK;
Close();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка сохранения магазина");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}

View File

@ -0,0 +1,144 @@
<?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>
<metadata name="Id.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="SushiName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Sum.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Count.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Id.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="SushiName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Sum.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Count.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@ -0,0 +1,116 @@
namespace SushiBar.Forms
{
partial class FormShops
{
/// <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();
buttonCreate = new Button();
buttonUpdate = new Button();
buttonRemove = new Button();
buttonRef = new Button();
((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(606, 426);
dataGridView.TabIndex = 0;
//
// buttonCreate
//
buttonCreate.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonCreate.Location = new Point(635, 12);
buttonCreate.Name = "buttonCreate";
buttonCreate.Size = new Size(153, 29);
buttonCreate.TabIndex = 1;
buttonCreate.Text = "Добавить";
buttonCreate.UseVisualStyleBackColor = true;
//
// buttonUpdate
//
buttonUpdate.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonUpdate.Location = new Point(635, 56);
buttonUpdate.Name = "buttonUpdate";
buttonUpdate.Size = new Size(153, 29);
buttonUpdate.TabIndex = 2;
buttonUpdate.Text = "Изменить";
buttonUpdate.UseVisualStyleBackColor = true;
//
// buttonRemove
//
buttonRemove.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonRemove.Location = new Point(635, 102);
buttonRemove.Name = "buttonRemove";
buttonRemove.Size = new Size(153, 29);
buttonRemove.TabIndex = 3;
buttonRemove.Text = "Удалить";
buttonRemove.UseVisualStyleBackColor = true;
//
// buttonRef
//
buttonRef.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonRef.Location = new Point(635, 146);
buttonRef.Name = "buttonRef";
buttonRef.Size = new Size(153, 29);
buttonRef.TabIndex = 4;
buttonRef.Text = "Обновить";
buttonRef.UseVisualStyleBackColor = true;
//
// FormShops
//
AllowDrop = true;
AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450);
Controls.Add(buttonRef);
Controls.Add(buttonRemove);
Controls.Add(buttonUpdate);
Controls.Add(buttonCreate);
Controls.Add(dataGridView);
Name = "FormShops";
Text = "FormShops";
Load += FormShops_Load;
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false);
}
#endregion
private DataGridView dataGridView;
private Button buttonCreate;
private Button buttonUpdate;
private Button buttonRemove;
private Button buttonRef;
}
}

View File

@ -0,0 +1,54 @@
using Microsoft.Extensions.Logging;
using SushiBarContracts.BusinessLogicsContracts;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SushiBar.Forms
{
public partial class FormShops : Form
{
private readonly ILogger _logger;
private readonly IShopLogic _logic;
public FormShops(ILogger logger, IShopLogic logic)
{
InitializeComponent();
_logger = logger;
_logic = logic;
}
private void LoadData()
{
try
{
var list = _logic.ReadList(null);
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["Id"].Visible = false;
dataGridView.Columns["ShopName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Columns["Address"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Columns["DateOpen"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Columns["ShopIceCreams"].Visible = false;
}
_logger.LogInformation("Загрузка магазинов");
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка загрузки магазинов");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void FormShops_Load(object sender, EventArgs e)
{
}
}
}

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

@ -28,17 +28,17 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
buttonAdd = new Button(); ButtonAdd = new Button();
dataGridView = new DataGridView(); dataGridView = new DataGridView();
ID = new DataGridViewTextBoxColumn(); ID = new DataGridViewTextBoxColumn();
ComponentName = new DataGridViewTextBoxColumn(); ComponentName = new DataGridViewTextBoxColumn();
ComponentCount = new DataGridViewTextBoxColumn(); ComponentCount = new DataGridViewTextBoxColumn();
groupBox1 = new GroupBox(); groupBox1 = new GroupBox();
buttonRef = new Button(); ButtonRef = new Button();
buttonDel = new Button(); ButtonDel = new Button();
buttonUpd = new Button(); ButtonUpd = new Button();
buttonSave = new Button(); ButtonSave = new Button();
buttonCancel = new Button(); ButtonCancel = new Button();
label1 = new Label(); label1 = new Label();
label2 = new Label(); label2 = new Label();
textBoxPrice = new TextBox(); textBoxPrice = new TextBox();
@ -47,24 +47,25 @@
groupBox1.SuspendLayout(); groupBox1.SuspendLayout();
SuspendLayout(); SuspendLayout();
// //
// buttonAdd // ButtonAdd
// //
buttonAdd.Location = new Point(640, 29); ButtonAdd.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonAdd.Margin = new Padding(3, 4, 3, 4); ButtonAdd.Location = new Point(614, 28);
buttonAdd.Name = "buttonAdd"; ButtonAdd.Margin = new Padding(3, 4, 3, 4);
buttonAdd.Size = new Size(126, 39); ButtonAdd.Name = "ButtonAdd";
buttonAdd.TabIndex = 0; ButtonAdd.Size = new Size(151, 39);
buttonAdd.Text = "Добавить"; ButtonAdd.TabIndex = 0;
buttonAdd.UseVisualStyleBackColor = true; ButtonAdd.Text = "Добавить";
buttonAdd.Click += buttonAdd_Click; ButtonAdd.UseVisualStyleBackColor = true;
ButtonAdd.Click += ButtonAdd_Click;
// //
// dataGridView // dataGridView
// //
dataGridView.AllowUserToAddRows = false; dataGridView.AllowUserToAddRows = false;
dataGridView.AllowUserToDeleteRows = false; dataGridView.AllowUserToDeleteRows = false;
dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Columns.AddRange(new DataGridViewColumn[] { ID, ComponentName, ComponentCount }); dataGridView.Columns.AddRange(new DataGridViewColumn[] { ID, ComponentName, ComponentCount });
dataGridView.Dock = DockStyle.Left;
dataGridView.Location = new Point(3, 24); dataGridView.Location = new Point(3, 24);
dataGridView.Margin = new Padding(3, 4, 3, 4); dataGridView.Margin = new Padding(3, 4, 3, 4);
dataGridView.Name = "dataGridView"; dataGridView.Name = "dataGridView";
@ -72,7 +73,7 @@
dataGridView.RowHeadersWidth = 51; dataGridView.RowHeadersWidth = 51;
dataGridView.RowTemplate.Height = 25; dataGridView.RowTemplate.Height = 25;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(630, 267); dataGridView.Size = new Size(605, 243);
dataGridView.TabIndex = 1; dataGridView.TabIndex = 1;
// //
// ID // ID
@ -102,76 +103,80 @@
// //
// groupBox1 // groupBox1
// //
groupBox1.Controls.Add(buttonRef); groupBox1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
groupBox1.Controls.Add(buttonDel); groupBox1.Controls.Add(ButtonRef);
groupBox1.Controls.Add(buttonUpd); groupBox1.Controls.Add(ButtonDel);
groupBox1.Controls.Add(ButtonUpd);
groupBox1.Controls.Add(dataGridView); groupBox1.Controls.Add(dataGridView);
groupBox1.Controls.Add(buttonAdd); groupBox1.Controls.Add(ButtonAdd);
groupBox1.Location = new Point(14, 101); groupBox1.Location = new Point(14, 101);
groupBox1.Margin = new Padding(3, 4, 3, 4); groupBox1.Margin = new Padding(3, 4, 3, 4);
groupBox1.Name = "groupBox1"; groupBox1.Name = "groupBox1";
groupBox1.Padding = new Padding(3, 4, 3, 4); groupBox1.Padding = new Padding(3, 4, 3, 4);
groupBox1.Size = new Size(773, 295); groupBox1.Size = new Size(774, 295);
groupBox1.TabIndex = 2; groupBox1.TabIndex = 2;
groupBox1.TabStop = false; groupBox1.TabStop = false;
groupBox1.Text = "Компоненты"; groupBox1.Text = "Компоненты";
// //
// buttonRef // ButtonRef
// //
buttonRef.Location = new Point(640, 169); ButtonRef.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonRef.Margin = new Padding(3, 4, 3, 4); ButtonRef.Location = new Point(614, 168);
buttonRef.Name = "buttonRef"; ButtonRef.Margin = new Padding(3, 4, 3, 4);
buttonRef.Size = new Size(126, 39); ButtonRef.Name = "ButtonRef";
buttonRef.TabIndex = 4; ButtonRef.Size = new Size(151, 39);
buttonRef.Text = "Обновить"; ButtonRef.TabIndex = 4;
buttonRef.UseVisualStyleBackColor = true; ButtonRef.Text = "Обновить";
buttonRef.Click += buttonRef_Click; ButtonRef.UseVisualStyleBackColor = true;
ButtonRef.Click += ButtonRef_Click;
// //
// buttonDel // ButtonDel
// //
buttonDel.Location = new Point(640, 123); ButtonDel.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonDel.Margin = new Padding(3, 4, 3, 4); ButtonDel.Location = new Point(614, 122);
buttonDel.Name = "buttonDel"; ButtonDel.Margin = new Padding(3, 4, 3, 4);
buttonDel.Size = new Size(126, 39); ButtonDel.Name = "ButtonDel";
buttonDel.TabIndex = 3; ButtonDel.Size = new Size(151, 39);
buttonDel.Text = "Удалить"; ButtonDel.TabIndex = 3;
buttonDel.UseVisualStyleBackColor = true; ButtonDel.Text = "Удалить";
buttonDel.Click += buttonDel_Click; ButtonDel.UseVisualStyleBackColor = true;
ButtonDel.Click += ButtonDel_Click;
// //
// buttonUpd // ButtonUpd
// //
buttonUpd.Location = new Point(640, 76); ButtonUpd.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonUpd.Margin = new Padding(3, 4, 3, 4); ButtonUpd.Location = new Point(614, 75);
buttonUpd.Name = "buttonUpd"; ButtonUpd.Margin = new Padding(3, 4, 3, 4);
buttonUpd.Size = new Size(126, 39); ButtonUpd.Name = "ButtonUpd";
buttonUpd.TabIndex = 2; ButtonUpd.Size = new Size(151, 39);
buttonUpd.Text = "Изменить"; ButtonUpd.TabIndex = 2;
buttonUpd.UseVisualStyleBackColor = true; ButtonUpd.Text = "Изменить";
buttonUpd.Click += buttonUpd_Click; ButtonUpd.UseVisualStyleBackColor = true;
ButtonUpd.Click += ButtonUpd_Click;
// //
// buttonSave // ButtonSave
// //
buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; ButtonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonSave.Location = new Point(573, 404); ButtonSave.Location = new Point(573, 404);
buttonSave.Margin = new Padding(3, 4, 3, 4); ButtonSave.Margin = new Padding(3, 4, 3, 4);
buttonSave.Name = "buttonSave"; ButtonSave.Name = "ButtonSave";
buttonSave.Size = new Size(100, 31); ButtonSave.Size = new Size(100, 31);
buttonSave.TabIndex = 3; ButtonSave.TabIndex = 3;
buttonSave.Text = "Сохранить"; ButtonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true; ButtonSave.UseVisualStyleBackColor = true;
buttonSave.Click += buttonSave_Click; ButtonSave.Click += ButtonSave_Click;
// //
// buttonCancel // ButtonCancel
// //
buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; ButtonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonCancel.Location = new Point(679, 404); ButtonCancel.Location = new Point(679, 404);
buttonCancel.Margin = new Padding(3, 4, 3, 4); ButtonCancel.Margin = new Padding(3, 4, 3, 4);
buttonCancel.Name = "buttonCancel"; ButtonCancel.Name = "ButtonCancel";
buttonCancel.Size = new Size(100, 31); ButtonCancel.Size = new Size(100, 31);
buttonCancel.TabIndex = 4; ButtonCancel.TabIndex = 4;
buttonCancel.Text = "Отмена"; ButtonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true; ButtonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += buttonCancel_Click; ButtonCancel.Click += ButtonCancel_Click;
// //
// label1 // label1
// //
@ -209,6 +214,7 @@
// //
// FormSushi // FormSushi
// //
AllowDrop = true;
AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 451); ClientSize = new Size(800, 451);
@ -216,8 +222,8 @@
Controls.Add(textBoxPrice); Controls.Add(textBoxPrice);
Controls.Add(label2); Controls.Add(label2);
Controls.Add(label1); Controls.Add(label1);
Controls.Add(buttonCancel); Controls.Add(ButtonCancel);
Controls.Add(buttonSave); Controls.Add(ButtonSave);
Controls.Add(groupBox1); Controls.Add(groupBox1);
Name = "FormSushi"; Name = "FormSushi";
Text = "Суши"; Text = "Суши";
@ -230,14 +236,14 @@
#endregion #endregion
private Button buttonAdd; private Button ButtonAdd;
private DataGridView dataGridView; private DataGridView dataGridView;
private GroupBox groupBox1; private GroupBox groupBox1;
private Button buttonRef; private Button ButtonRef;
private Button buttonDel; private Button ButtonDel;
private Button buttonUpd; private Button ButtonUpd;
private Button buttonSave; private Button ButtonSave;
private Button buttonCancel; private Button ButtonCancel;
private Label label1; private Label label1;
private Label label2; private Label label2;
private TextBox textBoxPrice; private TextBox textBoxPrice;

View File

@ -1,35 +1,199 @@
namespace SushiBar.Forms using Microsoft.Extensions.Logging;
using SushiBarContracts.BindingModels;
using SushiBarContracts.BusinessLogicsContracts;
using SushiBarContracts.SearchModels;
using SushiBarDataModels.Models;
namespace SushiBar.Forms
{ {
public partial class FormSushi public partial class FormSushi : Form
{ {
private void buttonAdd_Click(object sender, EventArgs e) private readonly ILogger _logger;
private readonly ISushiLogic _logic;
private int? _id;
private Dictionary<int, (IComponentModel, int)> _sushiComponents;
public int Id { set { _id = value; } }
public FormSushi(ILogger<FormSushi> logger, ISushiLogic logic)
{ {
ButtonAdd_Click(sender, e); InitializeComponent();
_logger = logger;
_logic = logic;
_sushiComponents = new Dictionary<int, (IComponentModel, int)>();
}
private void FormSushi_Load(object sender, EventArgs e)
{
if (_id.HasValue)
{
_logger.LogInformation("Загрузка изделия");
try
{
var view = _logic.ReadElement(new SushiSearchModel
{
Id = _id.Value
});
if (view != null)
{
textBoxName.Text = view.SushiName;
textBoxPrice.Text = view.Price.ToString();
_sushiComponents = view.SushiComponents ?? new Dictionary<int, (IComponentModel, int)>();
LoadData();
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка загрузки изделия");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void LoadData()
{
_logger.LogInformation("Загрузка компонент изделия");
try
{
if (_sushiComponents != null)
{
dataGridView.Rows.Clear();
foreach (var sc in _sushiComponents)
{
dataGridView.Rows.Add(new object[] { sc.Key, sc.Value.Item1.ComponentName, sc.Value.Item2 });
}
textBoxPrice.Text = CalcPrice().ToString();
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка загрузки компонент изделия");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonAdd_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormSushiComponent));
if (service is FormSushiComponent form)
{
if (form.ShowDialog() == DialogResult.OK)
{
if (form.ComponentModel == null)
{
return;
}
_logger.LogInformation("Добавление нового компонента: { ComponentName} - { Count}", form.ComponentModel.ComponentName, form.Count);
if (_sushiComponents.ContainsKey(form.Id))
{
_sushiComponents[form.Id] = (form.ComponentModel, form.Count);
}
else
{
_sushiComponents.Add(form.Id, (form.ComponentModel, form.Count));
}
LoadData();
}
}
}
private void ButtonUpd_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
var service = Program.ServiceProvider?.GetService(typeof(FormSushiComponent));
if (service is FormSushiComponent form)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value);
form.Id = id;
form.Count = _sushiComponents[id].Item2;
if (form.ShowDialog() == DialogResult.OK)
{
if (form.ComponentModel == null)
{
return;
}
_logger.LogInformation("Изменение компонента: { ComponentName} - { Count}", form.ComponentModel.ComponentName, form.Count);
_sushiComponents[form.Id] = (form.ComponentModel, form.Count);
LoadData();
}
}
}
}
private void ButtonDel_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
try
{
_logger.LogInformation("Удаление компонента: { ComponentName} - { Count}", dataGridView.SelectedRows[0].Cells[1].Value);
_sushiComponents?.Remove(Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
LoadData();
}
}
}
private void ButtonRef_Click(object sender, EventArgs e)
{
LoadData();
}
private void ButtonSave_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxName.Text))
{
MessageBox.Show("Заполните название", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (string.IsNullOrEmpty(textBoxPrice.Text))
{
MessageBox.Show("Заполните цену", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (_sushiComponents == null || _sushiComponents.Count == 0)
{
MessageBox.Show("Заполните компоненты", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
_logger.LogInformation("Сохранение изделия");
try
{
var model = new SushiBindingModel
{
Id = _id ?? 0,
SushiName = textBoxName.Text,
Price = Convert.ToDouble(textBoxPrice.Text),
SushiComponents = _sushiComponents
};
var operationResult = _id.HasValue ? _logic.Update(model) : _logic.Create(model);
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
}
MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
DialogResult = DialogResult.OK;
Close();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка сохранения изделия");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
} }
private void buttonUpd_Click(object sender, EventArgs e) private void ButtonCancel_Click(object sender, EventArgs e)
{ {
ButtonUpd_Click(sender, e); DialogResult = DialogResult.Cancel;
Close();
} }
private double CalcPrice()
private void buttonDel_Click(object sender, EventArgs e)
{ {
ButtonDel_Click(sender, e); double price = 0;
} foreach (var elem in _sushiComponents)
private void buttonRef_Click(object sender, EventArgs e)
{ {
ButtonRef_Click(sender, e); price += ((elem.Value.Item1?.Cost ?? 0) * elem.Value.Item2);
} }
return Math.Round(price * 1.1, 2);
private void buttonSave_Click(object sender, EventArgs e)
{
ButtonSave_Click(sender, e);
}
private void buttonCancel_Click(object sender, EventArgs e)
{
ButtonCancel_Click(sender, e);
} }
} }
} }

View File

@ -32,8 +32,8 @@
label2 = new Label(); label2 = new Label();
comboBoxComponent = new ComboBox(); comboBoxComponent = new ComboBox();
textBoxCount = new TextBox(); textBoxCount = new TextBox();
buttonSave = new Button(); ButtonSave = new Button();
buttonCancel = new Button(); ButtonCancel = new Button();
SuspendLayout(); SuspendLayout();
// //
// label1 // label1
@ -69,39 +69,44 @@
textBoxCount.Size = new Size(227, 27); textBoxCount.Size = new Size(227, 27);
textBoxCount.TabIndex = 3; textBoxCount.TabIndex = 3;
// //
// buttonSave // ButtonSave
// //
buttonSave.Location = new Point(158, 95); ButtonSave.Location = new Point(158, 95);
buttonSave.Name = "buttonSave"; ButtonSave.Name = "ButtonSave";
buttonSave.Size = new Size(94, 29); ButtonSave.Size = new Size(94, 29);
buttonSave.TabIndex = 4; ButtonSave.TabIndex = 4;
buttonSave.Text = "Сохранить"; ButtonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true; ButtonSave.UseVisualStyleBackColor = true;
buttonSave.Click += buttonSave_Click; ButtonSave.Click += ButtonSave_Click;
// //
// buttonCancel // ButtonCancel
// //
buttonCancel.Location = new Point(258, 95); ButtonCancel.Location = new Point(258, 95);
buttonCancel.Name = "buttonCancel"; ButtonCancel.Name = "ButtonCancel";
buttonCancel.Size = new Size(94, 29); ButtonCancel.Size = new Size(94, 29);
buttonCancel.TabIndex = 5; ButtonCancel.TabIndex = 5;
buttonCancel.Text = "Отмена"; ButtonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true; ButtonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += buttonCancel_Click; ButtonCancel.Click += ButtonCancel_Click;
// //
// FormSushiComponent // FormSushiComponent
// //
AllowDrop = true;
AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(364, 132); ClientSize = new Size(364, 132);
Controls.Add(buttonCancel); Controls.Add(ButtonCancel);
Controls.Add(buttonSave); Controls.Add(ButtonSave);
Controls.Add(textBoxCount); Controls.Add(textBoxCount);
Controls.Add(comboBoxComponent); Controls.Add(comboBoxComponent);
Controls.Add(label2); Controls.Add(label2);
Controls.Add(label1); Controls.Add(label1);
MaximizeBox = false;
MinimizeBox = false;
Name = "FormSushiComponent"; Name = "FormSushiComponent";
ShowInTaskbar = false;
Text = "Компонент Изделия"; Text = "Компонент Изделия";
TopMost = true;
ResumeLayout(false); ResumeLayout(false);
PerformLayout(); PerformLayout();
} }
@ -112,7 +117,7 @@
private Label label2; private Label label2;
private ComboBox comboBoxComponent; private ComboBox comboBoxComponent;
private TextBox textBoxCount; private TextBox textBoxCount;
private Button buttonSave; private Button ButtonSave;
private Button buttonCancel; private Button ButtonCancel;
} }
} }

View File

@ -1,25 +1,78 @@
using System; using SushiBarContracts.BusinessLogicsContracts;
using System.Collections.Generic; using SushiBarContracts.ViewModels;
using System.ComponentModel; using SushiBarDataModels.Models;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SushiBar.Forms namespace SushiBar.Forms
{ {
public partial class FormSushiComponent partial class FormSushiComponent : Form
{ {
private void buttonSave_Click(object sender, EventArgs e) private readonly List<ComponentViewModel>? _list;
public int Id
{ {
ButtonSave_Click(sender, e); get
}
private void buttonCancel_Click(object sender, EventArgs e)
{ {
ButtonCancel_Click(sender, e); return Convert.ToInt32(comboBoxComponent.SelectedValue);
}
set
{
comboBoxComponent.SelectedValue = value;
}
}
public IComponentModel? ComponentModel
{
get
{
if (_list == null)
{
return null;
}
foreach (var elem in _list)
{
if (elem.Id == Id)
{
return elem;
}
}
return null;
}
}
public int Count
{
get { return Convert.ToInt32(textBoxCount.Text); }
set
{ textBoxCount.Text = value.ToString(); }
}
public FormSushiComponent(IComponentLogic logic)
{
InitializeComponent();
_list = logic.ReadList(null);
if (_list != null)
{
comboBoxComponent.DisplayMember = "ComponentName";
comboBoxComponent.ValueMember = "Id";
comboBoxComponent.DataSource = _list;
comboBoxComponent.SelectedItem = null;
}
}
private void ButtonSave_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxCount.Text))
{
MessageBox.Show("Заполните поле Количество", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (comboBoxComponent.SelectedValue == null)
{
MessageBox.Show("Выберите компонент", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
DialogResult = DialogResult.OK;
Close();
}
private void ButtonCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
} }
} }
} }

View File

@ -1,78 +0,0 @@
using SushiBarContracts.BusinessLogicsContracts;
using SushiBarContracts.ViewModels;
using SushiBarDataModels.Models;
namespace SushiBar.Forms
{
partial class FormSushiComponent : Form
{
private readonly List<ComponentViewModel>? _list;
public int Id
{
get
{
return Convert.ToInt32(comboBoxComponent.SelectedValue);
}
set
{
comboBoxComponent.SelectedValue = value;
}
}
public IComponentModel? ComponentModel
{
get
{
if (_list == null)
{
return null;
}
foreach (var elem in _list)
{
if (elem.Id == Id)
{
return elem;
}
}
return null;
}
}
public int Count
{
get { return Convert.ToInt32(textBoxCount.Text); }
set
{ textBoxCount.Text = value.ToString(); }
}
public FormSushiComponent(IComponentLogic logic)
{
InitializeComponent();
_list = logic.ReadList(null);
if (_list != null)
{
comboBoxComponent.DisplayMember = "ComponentName";
comboBoxComponent.ValueMember = "Id";
comboBoxComponent.DataSource = _list;
comboBoxComponent.SelectedItem = null;
}
}
private void ButtonSave_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxCount.Text))
{
MessageBox.Show("Заполните поле Количество", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (comboBoxComponent.SelectedValue == null)
{
MessageBox.Show("Выберите компонент", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
DialogResult = DialogResult.OK;
Close();
}
private void ButtonCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
}
}

View File

@ -1,199 +0,0 @@
using Microsoft.Extensions.Logging;
using SushiBarContracts.BindingModels;
using SushiBarContracts.BusinessLogicsContracts;
using SushiBarContracts.SearchModels;
using SushiBarDataModels.Models;
namespace SushiBar.Forms
{
public partial class FormSushi : Form
{
private readonly ILogger _logger;
private readonly ISushiLogic _logic;
private int? _id;
private Dictionary<int, (IComponentModel, int)> _sushiComponents;
public int Id { set { _id = value; } }
public FormSushi(ILogger<FormSushi> logger, ISushiLogic logic)
{
InitializeComponent();
_logger = logger;
_logic = logic;
_sushiComponents = new Dictionary<int, (IComponentModel, int)>();
}
private void FormSushi_Load(object sender, EventArgs e)
{
if (_id.HasValue)
{
_logger.LogInformation("Загрузка изделия");
try
{
var view = _logic.ReadElement(new SushiSearchModel
{
Id = _id.Value
});
if (view != null)
{
textBoxName.Text = view.SushiName;
textBoxPrice.Text = view.Price.ToString();
_sushiComponents = view.SushiComponents ?? new Dictionary<int, (IComponentModel, int)>();
LoadData();
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка загрузки изделия");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void LoadData()
{
_logger.LogInformation("Загрузка компонент изделия");
try
{
if (_sushiComponents != null)
{
dataGridView.Rows.Clear();
foreach (var sc in _sushiComponents)
{
dataGridView.Rows.Add(new object[] { sc.Key, sc.Value.Item1.ComponentName, sc.Value.Item2 });
}
textBoxPrice.Text = CalcPrice().ToString();
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка загрузки компонент изделия");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonAdd_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormSushiComponent));
if (service is FormSushiComponent form)
{
if (form.ShowDialog() == DialogResult.OK)
{
if (form.ComponentModel == null)
{
return;
}
_logger.LogInformation("Добавление нового компонента: { ComponentName} - { Count}", form.ComponentModel.ComponentName, form.Count);
if (_sushiComponents.ContainsKey(form.Id))
{
_sushiComponents[form.Id] = (form.ComponentModel, form.Count);
}
else
{
_sushiComponents.Add(form.Id, (form.ComponentModel, form.Count));
}
LoadData();
}
}
}
private void ButtonUpd_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
var service = Program.ServiceProvider?.GetService(typeof(FormSushiComponent));
if (service is FormSushiComponent form)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value);
form.Id = id;
form.Count = _sushiComponents[id].Item2;
if (form.ShowDialog() == DialogResult.OK)
{
if (form.ComponentModel == null)
{
return;
}
_logger.LogInformation("Изменение компонента: { ComponentName} - { Count}", form.ComponentModel.ComponentName, form.Count);
_sushiComponents[form.Id] = (form.ComponentModel, form.Count);
LoadData();
}
}
}
}
private void ButtonDel_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
try
{
_logger.LogInformation("Удаление компонента: { ComponentName} - { Count}", dataGridView.SelectedRows[0].Cells[1].Value);
_sushiComponents?.Remove(Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
LoadData();
}
}
}
private void ButtonRef_Click(object sender, EventArgs e)
{
LoadData();
}
private void ButtonSave_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxName.Text))
{
MessageBox.Show("Заполните название", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (string.IsNullOrEmpty(textBoxPrice.Text))
{
MessageBox.Show("Заполните цену", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (_sushiComponents == null || _sushiComponents.Count == 0)
{
MessageBox.Show("Заполните компоненты", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
_logger.LogInformation("Сохранение изделия");
try
{
var model = new SushiBindingModel
{
Id = _id ?? 0,
SushiName = textBoxName.Text,
Price = Convert.ToDouble(textBoxPrice.Text),
SushiComponents = _sushiComponents
};
var operationResult = _id.HasValue ? _logic.Update(model) : _logic.Create(model);
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
}
MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
DialogResult = DialogResult.OK;
Close();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка сохранения изделия");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
private double CalcPrice()
{
double price = 0;
foreach (var elem in _sushiComponents)
{
price += ((elem.Value.Item1?.Cost ?? 0) * elem.Value.Item2);
}
return Math.Round(price * 1.1, 2);
}
}
}

View File

@ -29,10 +29,10 @@
private void InitializeComponent() private void InitializeComponent()
{ {
dataGridView = new DataGridView(); dataGridView = new DataGridView();
buttonRef = new Button(); ButtonRef = new Button();
buttonDel = new Button(); ButtonDel = new Button();
buttonUpd = new Button(); ButtonUpd = new Button();
buttonAdd = new Button(); ButtonAdd = new Button();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout(); SuspendLayout();
// //
@ -46,61 +46,67 @@
dataGridView.RowHeadersWidth = 70; dataGridView.RowHeadersWidth = 70;
dataGridView.RowTemplate.Height = 29; dataGridView.RowTemplate.Height = 29;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(762, 450); dataGridView.Size = new Size(777, 450);
dataGridView.TabIndex = 1; dataGridView.TabIndex = 1;
// //
// buttonRef // ButtonRef
// //
buttonRef.Location = new Point(768, 117); ButtonRef.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonRef.Name = "buttonRef"; ButtonRef.Location = new Point(783, 117);
buttonRef.Size = new Size(114, 29); ButtonRef.Name = "ButtonRef";
buttonRef.TabIndex = 8; ButtonRef.Size = new Size(150, 29);
buttonRef.Text = "Обновить"; ButtonRef.TabIndex = 8;
buttonRef.UseVisualStyleBackColor = true; ButtonRef.Text = "Обновить";
buttonRef.Click += buttonRef_Click; ButtonRef.UseVisualStyleBackColor = true;
ButtonRef.Click += ButtonRef_Click;
// //
// buttonDel // ButtonDel
// //
buttonDel.Location = new Point(768, 82); ButtonDel.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonDel.Name = "buttonDel"; ButtonDel.Location = new Point(783, 82);
buttonDel.Size = new Size(114, 29); ButtonDel.Name = "ButtonDel";
buttonDel.TabIndex = 7; ButtonDel.Size = new Size(150, 29);
buttonDel.Text = "Удалить"; ButtonDel.TabIndex = 7;
buttonDel.UseVisualStyleBackColor = true; ButtonDel.Text = "Удалить";
buttonDel.Click += buttonDel_Click; ButtonDel.UseVisualStyleBackColor = true;
ButtonDel.Click += ButtonDel_Click;
// //
// buttonUpd // ButtonUpd
// //
buttonUpd.Location = new Point(768, 47); ButtonUpd.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonUpd.Name = "buttonUpd"; ButtonUpd.Location = new Point(783, 47);
buttonUpd.Size = new Size(114, 29); ButtonUpd.Name = "ButtonUpd";
buttonUpd.TabIndex = 6; ButtonUpd.Size = new Size(150, 29);
buttonUpd.Text = "Изменить"; ButtonUpd.TabIndex = 6;
buttonUpd.UseVisualStyleBackColor = true; ButtonUpd.Text = "Изменить";
buttonUpd.Click += buttonUpd_Click; ButtonUpd.UseVisualStyleBackColor = true;
ButtonUpd.Click += ButtonUpd_Click;
// //
// buttonAdd // ButtonAdd
// //
buttonAdd.Location = new Point(768, 12); ButtonAdd.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonAdd.Name = "buttonAdd"; ButtonAdd.Location = new Point(783, 12);
buttonAdd.Size = new Size(114, 29); ButtonAdd.Name = "ButtonAdd";
buttonAdd.TabIndex = 5; ButtonAdd.Size = new Size(150, 29);
buttonAdd.Text = "Добавить"; ButtonAdd.TabIndex = 5;
buttonAdd.UseVisualStyleBackColor = true; ButtonAdd.Text = "Добавить";
buttonAdd.Click += buttonAdd_Click; ButtonAdd.UseVisualStyleBackColor = true;
ButtonAdd.Click += ButtonAdd_Click;
// //
// FormSushis // FormSushis
// //
AllowDrop = true;
AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleDimensions = new SizeF(8F, 20F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(893, 450); ClientSize = new Size(945, 450);
Controls.Add(buttonRef); Controls.Add(ButtonRef);
Controls.Add(buttonDel); Controls.Add(ButtonDel);
Controls.Add(buttonUpd); Controls.Add(ButtonUpd);
Controls.Add(buttonAdd); Controls.Add(ButtonAdd);
Controls.Add(dataGridView); Controls.Add(dataGridView);
Name = "FormSushis"; Name = "FormSushis";
Text = "Суши"; Text = "Суши";
WindowState = FormWindowState.Maximized;
Load += FormSushis_Load; Load += FormSushis_Load;
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false); ResumeLayout(false);
@ -109,9 +115,9 @@
#endregion #endregion
private DataGridView dataGridView; private DataGridView dataGridView;
private Button buttonRef; private Button ButtonRef;
private Button buttonDel; private Button ButtonDel;
private Button buttonUpd; private Button ButtonUpd;
private Button buttonAdd; private Button ButtonAdd;
} }
} }

View File

@ -1,35 +1,99 @@
using System; using Microsoft.Extensions.Logging;
using System.Collections.Generic; using SushiBarContracts.BindingModels;
using System.ComponentModel; using SushiBarContracts.BusinessLogicsContracts;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SushiBar.Forms namespace SushiBar.Forms
{ {
public partial class FormSushis public partial class FormSushis : Form
{ {
private void buttonAdd_Click(object sender, EventArgs e) private readonly ILogger _logger;
private readonly ISushiLogic _logic;
public FormSushis(ILogger<FormSushis> logger, ISushiLogic logic)
{ {
ButtonAdd_Click(sender, e); InitializeComponent();
_logger = logger;
_logic = logic;
} }
private void FormSushis_Load(object sender, EventArgs e)
private void buttonUpd_Click(object sender, EventArgs e)
{ {
ButtonUpd_Click(sender, e); LoadData();
} }
private void LoadData()
private void buttonDel_Click(object sender, EventArgs e)
{ {
ButtonDel_Click(sender, e); try
}
private void buttonRef_Click(object sender, EventArgs e)
{ {
ButtonRef_Click(sender, e); var list = _logic.ReadList(null);
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["Id"].Visible = false;
dataGridView.Columns["SushiComponents"].Visible = false;
dataGridView.Columns["SushiName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
_logger.LogInformation("Загрузка суши");
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка загрузки суши");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonAdd_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormSushi));
if (service is FormSushi form)
{
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
}
private void ButtonUpd_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
var service = Program.ServiceProvider?.GetService(typeof(FormSushi));
if (service is FormSushi form)
{
form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
}
}
private void ButtonDel_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
_logger.LogInformation("Удаление компонента");
try
{
if (!_logic.Delete(new SushiBindingModel
{
Id = id
}))
{
throw new Exception("Ошибка при удалении. Дополнительная информация в логах.");
}
LoadData();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка удаления компонента");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
private void ButtonRef_Click(object sender, EventArgs e)
{
LoadData();
} }
} }
} }

View File

@ -1,99 +0,0 @@
using Microsoft.Extensions.Logging;
using SushiBarContracts.BindingModels;
using SushiBarContracts.BusinessLogicsContracts;
namespace SushiBar.Forms
{
public partial class FormSushis : Form
{
private readonly ILogger _logger;
private readonly ISushiLogic _logic;
public FormSushis(ILogger<FormSushis> logger, ISushiLogic logic)
{
InitializeComponent();
_logger = logger;
_logic = logic;
}
private void FormSushis_Load(object sender, EventArgs e)
{
LoadData();
}
private void LoadData()
{
try
{
var list = _logic.ReadList(null);
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["Id"].Visible = false;
dataGridView.Columns["SushiComponents"].Visible = false;
dataGridView.Columns["SushiName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
_logger.LogInformation("Загрузка суши");
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка загрузки суши");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonAdd_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormSushi));
if (service is FormSushi form)
{
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
}
private void ButtonUpd_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
var service = Program.ServiceProvider?.GetService(typeof(FormSushi));
if (service is FormSushi form)
{
form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
}
}
private void ButtonDel_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
_logger.LogInformation("Удаление компонента");
try
{
if (!_logic.Delete(new SushiBindingModel
{
Id = id
}))
{
throw new Exception("Ошибка при удалении. Дополнительная информация в логах.");
}
LoadData();
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка удаления компонента");
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
private void ButtonRef_Click(object sender, EventArgs e)
{
LoadData();
}
}
}

View File

@ -0,0 +1,40 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.16">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
<PackageReference Include="NLog" Version="5.2.8" />
<PackageReference Include="NLog.Config" Version="4.7.15" />
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.8" />
<PackageReference Include="ReportViewerCore.WinForms" Version="15.1.19" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\SushiBarBusinessLogic\SushiBarBusinessLogic.csproj" />
<ProjectReference Include="..\SushiBarDatabaseImplement\SushiBarDatabaseImplement.csproj" />
<ProjectReference Include="..\SushiBarFileImplement\SushiBarFileImplement.csproj" />
<ProjectReference Include="..\SushiBarListImplement\SushiBarListImplement.csproj" />
</ItemGroup>
<ItemGroup>
<None Update="nlog.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Report\ReportOrders.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

View File

@ -90,6 +90,11 @@ namespace SushiBarBusinessLogic.BusinessLogics
{ {
throw new ArgumentException("Нет названия магазина", nameof(model.ShopName)); throw new ArgumentException("Нет названия магазина", nameof(model.ShopName));
} }
if (string.IsNullOrEmpty(model.Address))
{
throw new ArgumentNullException("Нет адресса магазина", nameof(model.ShopName));
}
_logger.LogTrace("Shop. ShopName:{ShopName}.Address:{Address}. DateCreate:{DateCreate}. Id: { Id}", model.ShopName, model.Address, model.DateCreate, model.Id);
var element = _shopStorage.GetElement(new ShopSearchModel var element = _shopStorage.GetElement(new ShopSearchModel
{ {
ShopName = model.ShopName ShopName = model.ShopName
@ -99,5 +104,37 @@ namespace SushiBarBusinessLogic.BusinessLogics
throw new InvalidOperationException("Магазин с таким названием уже есть"); throw new InvalidOperationException("Магазин с таким названием уже есть");
} }
} }
public bool MakeSupply(ShopSearchModel model, SushiBindingModel sushi, int count)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
if (sushi == null){
throw new ArgumentNullException(nameof(sushi));
}
ShopViewModel? shop = _shopStorage.GetElement(new ShopSearchModel { Id = model.Id });
if (shop == null)
{
throw new ArgumentNullException(nameof(shop));
}
if (shop.ShopSushi.TryGetValue(sushi.Id, out var pair))
{
shop.ShopSushi[sushi.Id] = (pair.Item1, pair.Item2 + count);
}
else
{
shop.ShopSushi.Add(sushi.Id, (sushi, count));
}
Update(new()
{
Id = shop.Id,
ShopName = shop.ShopName,
DateCreate = shop.DateCreate,
Address = shop.Address,
ShopSushi = shop.ShopSushi
});
return true;
}
} }
} }

View File

@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="DocumentFormat.OpenXml" Version="3.0.2" />
<PackageReference Include="DocumentFormat.OpenXml.Framework" Version="3.0.2" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
<PackageReference Include="PdfSharp.MigraDoc.Standard" Version="1.51.15" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\SushiBarContracts\SushiBarContracts.csproj" />
</ItemGroup>
</Project>

View File

@ -8,5 +8,10 @@ namespace SushiBarContracts.BindingModels
public string ShopName { get; set; } = string.Empty; public string ShopName { get; set; } = string.Empty;
public string Address { get; set; } = string.Empty; public string Address { get; set; } = string.Empty;
public DateTime DateCreate { get; set; } = DateTime.Now; public DateTime DateCreate { get; set; } = DateTime.Now;
public Dictionary<int, (ISushiModel, int)> ShopSushi
{
get;
set;
} = new();
} }
} }

View File

@ -11,5 +11,6 @@ namespace SushiBarContracts.BusinessLogicsContracts
bool Create(ShopBindingModel model); bool Create(ShopBindingModel model);
bool Update(ShopBindingModel model); bool Update(ShopBindingModel model);
bool Delete(ShopBindingModel model); bool Delete(ShopBindingModel model);
bool MakeSupply(ShopSearchModel model, SushiBindingModel sushi, int count);
} }
} }

View File

@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\SushiBarDataModels\SushiBarDataModels.csproj" />
</ItemGroup>
</Project>

View File

@ -1,4 +1,5 @@
using System.ComponentModel; using SushiBarDataModels.Models;
using System.ComponentModel;
namespace SushiBarContracts.ViewModels namespace SushiBarContracts.ViewModels
{ {
@ -12,5 +13,6 @@ namespace SushiBarContracts.ViewModels
public string Address { get; set; } = string.Empty; public string Address { get; set; } = string.Empty;
[DisplayName("Дата открытия")] [DisplayName("Дата открытия")]
public DateTime DateCreate { get; set; } = DateTime.Now; public DateTime DateCreate { get; set; } = DateTime.Now;
public Dictionary<int, (ISushiModel, int)> ShopSushi { get; set; } = new();
} }
} }

View File

@ -5,5 +5,6 @@
string ShopName { get; } string ShopName { get; }
string Address { get; } string Address { get; }
DateTime DateCreate { get; } DateTime DateCreate { get; }
Dictionary<int, (ISushiModel, int)> ShopSushi {get;}
} }
} }

View File

@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

View File

@ -4,7 +4,7 @@ namespace SushiBarListImplement
{ {
public class DataListSingleton public class DataListSingleton
{ {
private static DataListSingleton _instance; private static DataListSingleton? _instance;
public List<Component> Components { get; set; } public List<Component> Components { get; set; }
public List<Order> Orders { get; set; } public List<Order> Orders { get; set; }
public List<Sushi> Sushis { get; set; } public List<Sushi> Sushis { get; set; }

View File

@ -98,6 +98,5 @@ namespace SushiBarListImplement.Implements
} }
return null; return null;
} }
з
} }
} }

View File

@ -10,7 +10,7 @@ namespace SushiBarListImplement.Models
public string ShopName { get; private set; } = string.Empty; public string ShopName { get; private set; } = string.Empty;
public string Address { get; private set; } = string.Empty; public string Address { get; private set; } = string.Empty;
public DateTime DateCreate { get; private set; } public DateTime DateCreate { get; private set; }
public Dictionary<int, (ISushiModel, int)> ShopShoshi public Dictionary<int, (ISushiModel, int)> ShopSushi
{ {
get; get;
private set; private set;
@ -26,7 +26,8 @@ namespace SushiBarListImplement.Models
Id = model.Id, Id = model.Id,
ShopName = model.ShopName, ShopName = model.ShopName,
Address = model.Address, Address = model.Address,
DateCreate = model.DateCreate DateCreate = model.DateCreate,
ShopSushi = model.ShopSushi
}; };
} }
public void Update(ShopBindingModel? model) public void Update(ShopBindingModel? model)
@ -38,13 +39,15 @@ namespace SushiBarListImplement.Models
ShopName = model.ShopName; ShopName = model.ShopName;
Address = model.Address; Address = model.Address;
DateCreate = model.DateCreate; DateCreate = model.DateCreate;
ShopSushi = model.ShopSushi;
} }
public ShopViewModel GetViewModel => new() public ShopViewModel GetViewModel => new()
{ {
Id = Id, Id = Id,
ShopName = ShopName, ShopName = ShopName,
Address = Address, Address = Address,
DateCreate = DateCreate DateCreate = DateCreate,
ShopSushi = ShopSushi
}; };
} }
} }

View File

@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\SushiBarContracts\SushiBarContracts.csproj" />
<ProjectReference Include="..\SushiBarDataModels\SushiBarDataModels.csproj" />
</ItemGroup>
</Project>