забытый коммит 1 усложнёнки

This commit is contained in:
Галина Федоренко 2024-03-02 15:52:23 +04:00
parent 7914c6d4b0
commit f7e4f386ba
19 changed files with 135 additions and 85 deletions

View File

@ -154,8 +154,8 @@ namespace CarpentryWorkshopView
private void магазиныToolStripMenuItem_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(ShopsForm));
if (service is ShopsForm form)
var service = Program.ServiceProvider?.GetService(typeof(FormShops));
if (service is FormShops form)
{
form.ShowDialog();
}
@ -163,8 +163,8 @@ namespace CarpentryWorkshopView
private void поставкиToolStripMenuItem_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(SupplyForm));
if (service is SupplyForm form)
var service = Program.ServiceProvider?.GetService(typeof(FormSupply));
if (service is FormSupply form)
{
form.ShowDialog();
}

View File

@ -1,6 +1,6 @@
namespace CarpentryWorkshopView
{
partial class ShopForm
partial class FormShop
{
/// <summary>
/// Required designer variable.

View File

@ -6,13 +6,13 @@ using Microsoft.Extensions.Logging;
namespace CarpentryWorkshopView
{
public partial class ShopForm : Form
public partial class FormShop : Form
{
private readonly ILogger _logger;
private readonly IShopLogic _logic;
public int? _id;
private Dictionary<int, (IWoodModel, int)> _woods;
public ShopForm(ILogger<ShopForm> logger, IShopLogic logic)
public FormShop(ILogger<FormShop> logger, IShopLogic logic)
{
InitializeComponent();
_logger = logger;

View File

@ -1,6 +1,6 @@
namespace CarpentryWorkshopView
{
partial class ShopsForm
partial class FormShops
{
/// <summary>
/// Required designer variable.

View File

@ -5,11 +5,11 @@ using Microsoft.Extensions.Logging;
namespace CarpentryWorkshopView
{
public partial class ShopsForm : Form
public partial class FormShops : Form
{
private readonly ILogger _logger;
private readonly IShopLogic _logic;
public ShopsForm(ILogger<ShopsForm> logger, IShopLogic logic)
public FormShops(ILogger<FormShops> logger, IShopLogic logic)
{
InitializeComponent();
_logger = logger;
@ -45,8 +45,8 @@ namespace CarpentryWorkshopView
private void AddButton_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(ShopForm));
if (service is ShopForm form)
var service = Program.ServiceProvider?.GetService(typeof(FormShop));
if (service is FormShop form)
{
if (form.ShowDialog() == DialogResult.OK)
{
@ -59,8 +59,8 @@ namespace CarpentryWorkshopView
{
if (DataGridView.SelectedRows.Count == 1)
{
var service = Program.ServiceProvider?.GetService(typeof(ShopForm));
if (service is ShopForm form)
var service = Program.ServiceProvider?.GetService(typeof(FormShop));
if (service is FormShop form)
{
var tmp = Convert.ToInt32(DataGridView.SelectedRows[0].Cells["Id"].Value);
form._id = Convert.ToInt32(DataGridView.SelectedRows[0].Cells["Id"].Value);

View File

@ -1,6 +1,6 @@
namespace CarpentryWorkshopView
{
partial class SupplyForm
partial class FormSupply
{
/// <summary>
/// Required designer variable.
@ -42,6 +42,8 @@
ShopComboBox.Name = "ShopComboBox";
ShopComboBox.Size = new Size(331, 23);
ShopComboBox.TabIndex = 0;
ShopComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
ShopComboBox.FormattingEnabled = true;
//
// WoodComboBox
//
@ -50,6 +52,8 @@
WoodComboBox.Name = "WoodComboBox";
WoodComboBox.Size = new Size(331, 23);
WoodComboBox.TabIndex = 1;
WoodComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
WoodComboBox.FormattingEnabled = true;
//
// CountTextBox
//
@ -78,7 +82,7 @@
CancelButton.UseVisualStyleBackColor = true;
CancelButton.Click += CancelButton_Click;
//
// SupplyForm
// FormSupply
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
@ -88,7 +92,7 @@
Controls.Add(CountTextBox);
Controls.Add(WoodComboBox);
Controls.Add(ShopComboBox);
Name = "SupplyForm";
Name = "FormSupply";
Text = "SupplyForm";
ResumeLayout(false);
PerformLayout();

View File

@ -1,4 +1,5 @@
using CarpentryWorkshopContracts.BusinessLogicsContracts;
using CarpentryWorkshopContracts.BindingModels;
using CarpentryWorkshopContracts.BusinessLogicsContracts;
using CarpentryWorkshopContracts.SearchModels;
using CarpentryWorkshopContracts.ViewModels;
using CarpentryWorkshopDataModels.Models;
@ -14,7 +15,7 @@ using System.Windows.Forms;
namespace CarpentryWorkshopView
{
public partial class SupplyForm : Form
public partial class FormSupply : Form
{
private readonly List<WoodViewModel>? _woodList;
private readonly List<ShopViewModel>? _shopsList;
@ -71,7 +72,7 @@ namespace CarpentryWorkshopView
set
{ CountTextBox.Text = value.ToString(); }
}
public SupplyForm(IWoodLogic woodLogic, IShopLogic shopLogic)
public FormSupply(IWoodLogic woodLogic, IShopLogic shopLogic)
{
InitializeComponent();
_shopLogic = shopLogic;
@ -119,11 +120,12 @@ namespace CarpentryWorkshopView
{
int count = Convert.ToInt32(CountTextBox.Text);
bool res = _shopLogic.MakeSupply(
new ShopSearchModel() { Id = Convert.ToInt32(ShopComboBox.SelectedValue) },
_woodLogic.ReadElement(new() { Id = Convert.ToInt32(WoodComboBox.SelectedValue) }),
count
);
bool res = _shopLogic.MakeSupply(new SupplyBindingModel
{
ShopId = Convert.ToInt32(ShopComboBox.SelectedValue),
WoodId = Convert.ToInt32(WoodComboBox.SelectedValue),
Count = Convert.ToInt32(CountTextBox.Text)
});
if (!res)
{

View File

@ -1,17 +1,17 @@
<?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
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>
@ -26,36 +26,36 @@
<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
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
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
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
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
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
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
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->

View File

@ -53,9 +53,9 @@ namespace CarpentryWorkshop
services.AddTransient<FormWood>();
services.AddTransient<FormWoodComponent>();
services.AddTransient<FormWoods>();
services.AddTransient<ShopForm>();
services.AddTransient<ShopsForm>();
services.AddTransient<SupplyForm>();
services.AddTransient<FormShop>();
services.AddTransient<FormShops>();
services.AddTransient<FormSupply>();
}
}
}

View File

@ -12,18 +12,19 @@ namespace CarpentryWorkshopBusinessLogic.BusinessLogics
{
private readonly ILogger _logger;
private readonly IShopStorage _shopStorage;
private readonly IWoodStorage _woodStorage;
public ShopLogic(ILogger<ShopLogic> logger, IShopStorage shopStorage)
public ShopLogic(ILogger<ShopLogic> logger, IShopStorage shopStorage, IWoodStorage woodStorage)
{
_logger = logger;
_shopStorage = shopStorage;
_woodStorage = woodStorage;
}
public List<ShopViewModel> ReadList(ShopSearchModel model)
{
_logger.LogInformation("ReadList. ShopName:{Name}. Id:{ Id}", model?.Name, model?.Id);
var list = model == null ? _shopStorage.GetFullList() :
_shopStorage.GetFilteredList(model);
_logger.LogInformation("ReadList. ShopName:{ShopName}.Id:{ Id}", model?.ShopName, model?.Id);
var list = model == null ? _shopStorage.GetFullList() : _shopStorage.GetFilteredList(model);
if (list == null)
{
_logger.LogWarning("ReadList return null list");
@ -31,14 +32,45 @@ namespace CarpentryWorkshopBusinessLogic.BusinessLogics
}
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
return list;
}
public bool MakeSupply(ShopSearchModel model, IWoodModel wood, int count)
public bool MakeSupply(SupplyBindingModel model)
{
if (model == null)
return false;
return _shopStorage.SupplyWood(model, wood, count);
{
throw new ArgumentNullException(nameof(model));
}
if (model.Count <= 0)
{
throw new ArgumentException("Количество изделий должно быть больше 0");
}
var shop = _shopStorage.GetElement(new ShopSearchModel
{
Id = model.ShopId
});
if (shop == null)
{
throw new ArgumentException("Магазина не существует");
}
if (shop.ShopWoods.ContainsKey(model.WoodId))
{
var oldValue = shop.ShopWoods[model.WoodId];
oldValue.Item2 += model.Count;
shop.ShopWoods[model.WoodId] = oldValue;
}
else
{
var wood = _woodStorage.GetElement(new WoodSearchModel
{
Id = model.WoodId
});
if (wood == null)
{
throw new ArgumentException($"Поставка: Товар с id:{model.WoodId} не найденн");
}
shop.ShopWoods.Add(model.WoodId, (wood, model.Count));
}
return true;
}
public ShopViewModel ReadElement(ShopSearchModel model)
@ -47,7 +79,7 @@ namespace CarpentryWorkshopBusinessLogic.BusinessLogics
{
throw new ArgumentNullException(nameof(model));
}
_logger.LogInformation("ReadElement. ShopName:{ShopName}.Id:{ Id}", model.Name, model.Id);
_logger.LogInformation("ReadElement. ShopName:{ShopName}.Id:{ Id}", model.ShopName, model.Id);
var element = _shopStorage.GetElement(model);
if (element == null)
{
@ -101,23 +133,18 @@ namespace CarpentryWorkshopBusinessLogic.BusinessLogics
{
return;
}
if (string.IsNullOrEmpty(model.ShopName))
{
throw new ArgumentNullException("Нет названия магазина", nameof(model.ShopName));
}
if (string.IsNullOrEmpty(model.Address))
{
throw new ArgumentNullException("Нет адресса магазина", nameof(model.ShopName));
throw new ArgumentException("Адрес магазина длжен быть заполнен", nameof(model.Address));
}
if (model.DateOpen == null)
if (string.IsNullOrEmpty(model.ShopName))
{
throw new ArgumentNullException("Нет даты открытия магазина",
nameof(model.ShopName));
throw new ArgumentException("Название магазина должно быть заполнено", nameof(model.ShopName));
}
_logger.LogInformation("Shop. ShopName:{ShopName}.Address:{Address}. DateOpen:{DateOpen}. Id: { Id}", model.ShopName, model.Address, model.DateOpen, model.Id);
_logger.LogInformation("Shop. ShopName:{ShopName}.Adres:{Adres}.OpeningDate:{OpeningDate}.Id:{ Id}", model.ShopName, model.Address, model.DateOpen, model.Id);
var element = _shopStorage.GetElement(new ShopSearchModel
{
Name = model.ShopName
ShopName = model.ShopName
});
if (element != null && element.Id != model.Id)
{

View File

@ -0,0 +1,11 @@
using CarpentryWorkshopDataModels.Models;
namespace CarpentryWorkshopContracts.BindingModels
{
public class SupplyBindingModel : ISupplyModel
{
public int ShopId { get; set; }
public int WoodId { get; set; }
public int Count { get; set; }
}
}

View File

@ -12,6 +12,6 @@ namespace CarpentryWorkshopContracts.BusinessLogicsContracts
bool Create(ShopBindingModel model);
bool Update(ShopBindingModel model);
bool Delete(ShopBindingModel model);
bool MakeSupply(ShopSearchModel model, IWoodModel wood, int count);
bool MakeSupply(SupplyBindingModel model);
}
}

View File

@ -3,6 +3,6 @@
public class ShopSearchModel
{
public int? Id { get; set; }
public string? Name { get; set; }
public string? ShopName { get; set; }
}
}

View File

@ -18,6 +18,5 @@ namespace CarpentryWorkshopContracts.StoragesContracts
ShopViewModel? Insert(ShopBindingModel model);
ShopViewModel? Update(ShopBindingModel model);
ShopViewModel? Delete(ShopBindingModel model);
bool SupplyWood(ShopSearchModel model, IWoodModel wood, int Count);
}
}

View File

@ -0,0 +1,9 @@
namespace CarpentryWorkshopDataModels.Models
{
public interface ISupplyModel
{
int ShopId { get; }
int WoodId { get; }
int Count { get; }
}
}

View File

@ -27,13 +27,13 @@ namespace CarpentryWorkshopListImplement.Implements
model)
{
var result = new List<ShopViewModel>();
if (string.IsNullOrEmpty(model.Name))
if (string.IsNullOrEmpty(model.ShopName))
{
return result;
}
foreach (var shop in _source.Shops)
{
if (shop.ShopName.Contains(model.Name))
if (shop.ShopName.Contains(model.ShopName))
{
result.Add(shop.GetViewModel);
}
@ -42,14 +42,14 @@ namespace CarpentryWorkshopListImplement.Implements
}
public ShopViewModel? GetElement(ShopSearchModel model)
{
if (string.IsNullOrEmpty(model.Name) && !model.Id.HasValue)
if (string.IsNullOrEmpty(model.ShopName) && !model.Id.HasValue)
{
return null;
}
foreach (var shop in _source.Shops)
{
if ((!string.IsNullOrEmpty(model.Name) &&
shop.ShopName == model.Name) ||
if ((!string.IsNullOrEmpty(model.ShopName) &&
shop.ShopName == model.ShopName) ||
(model.Id.HasValue && shop.Id == model.Id))
{
return shop.GetViewModel;
@ -101,7 +101,7 @@ namespace CarpentryWorkshopListImplement.Implements
return null;
}
public bool SupplyWood(ShopSearchModel model, IWoodModel wood, int count)
/* public bool SupplyWood(ShopSearchModel model, IWoodModel wood, int count)
{
if (model == null)
throw new ArgumentNullException(nameof(model));
@ -130,6 +130,6 @@ namespace CarpentryWorkshopListImplement.Implements
ShopWoods = curModel.ShopWoods,
});
return true;
}
} */
}
}

View File

@ -26,8 +26,7 @@ namespace CarpentryWorkshopListImplement.Models
Id = model.Id,
ShopName = model.ShopName,
Address = model.Address,
DateOpen = model.DateOpen,
ShopWoods = new()
DateOpen = model.DateOpen
};
}
@ -40,7 +39,6 @@ namespace CarpentryWorkshopListImplement.Models
ShopName = model.ShopName;
Address = model.Address;
DateOpen = model.DateOpen;
ShopWoods = model.ShopWoods;
}
public ShopViewModel GetViewModel => new()