PIbd-21_MasenkinMS_LabWork02_Hard #5

Closed
Factorino73 wants to merge 9 commits from LabWork02_Hard into LabWork02_Basic
6 changed files with 225 additions and 8 deletions
Showing only changes of commit dc7cdf6cc2 - Show all commits

View File

@ -187,6 +187,34 @@ namespace AircraftPlantBusinessLogic.BusinessLogics
return true;
}
/// <summary>
/// Продажа изделий
/// </summary>
/// <param name="plane"></param>
/// <param name="count"></param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
/// <exception cref="ArgumentException"></exception>
public bool SellPlanes(IPlaneModel plane, int count)
{
if (plane == null)
{
throw new ArgumentNullException(nameof(plane));
}
if (count <= 0)
{
throw new ArgumentException("Количество изделий должно быть больше 0", nameof(count));
}
if (_shopStorage.SellPlanes(plane, count))
{
_logger.LogInformation("Selling sucsess");
return true;
}
_logger.LogInformation("Selling failed");
return false;
}
/// <summary>
/// Проверка модели магазина
/// </summary>

View File

@ -59,14 +59,6 @@ namespace AircraftPlantContracts.BusinessLogicsContracts
/// <returns></returns>
bool AddPlaneInShop(ShopSearchModel model, IPlaneModel plane, int count);
/// <summary>
/// Добавление изделий в магазины
/// </summary>
/// <param name="plane"></param>
/// <param name="count"></param>
/// <returns></returns>
bool AddPlanes(IPlaneModel plane, int count);
/// <summary>
/// Продажа изделий
/// </summary>

View File

@ -63,5 +63,13 @@ namespace AircraftPlantContracts.StoragesContracts
/// <param name="count"></param>
/// <returns></returns>
bool SellPlanes(IPlaneModel plane, int count);
/// <summary>
/// Проверка наличия изделий в магазинах в нужном количестве
/// </summary>
/// <param name="plane"></param>
/// <param name="count"></param>
/// <returns></returns>
bool Restock(IPlaneModel plane, int count);
}
}

View File

@ -0,0 +1,159 @@
using AircraftPlantContracts.BindingModels;
using AircraftPlantContracts.ViewModels;
using AircraftPlantDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace AircraftPlantFileImplement.Models
{
/// <summary>
/// Сущность "Магазин"
/// </summary>
public class Shop : IShopModel
{
/// <summary>
/// Идентификатор
/// </summary>
public int Id { get; private set; }
/// <summary>
/// Название магазина
/// </summary>
public string ShopName { get; private set; } = string.Empty;
/// <summary>
/// Адрес магазина
/// </summary>
public string Address { get; private set; } = string.Empty;
/// <summary>
/// Дата открытия магазина
/// </summary>
public DateTime DateOpening { get; private set; }
/// <summary>
/// Коллекция изделий магазина в виде
/// «идентификатор изделия количество изделий»
/// </summary>
public Dictionary<int, int> Planes { get; private set; } = new();
/// <summary>
/// Коллекция изделий в магазине
/// </summary>
private Dictionary<int, (IPlaneModel, int)>? _shopPlanes = null;
public Dictionary<int, (IPlaneModel, int)> ShopPlanes
{
get
{
if (_shopPlanes == null)
{
var source = DataFileSingleton.GetInstance();
_shopPlanes = Planes.ToDictionary(x => x.Key, y => ((source.Planes.FirstOrDefault(z => z.Id == y.Key) as IPlaneModel)!, y.Value));
}
return _shopPlanes;
}
}
/// <summary>
/// Максимальное количество изделий
/// </summary>
public int MaxPlanes { get; private set; }
/// <summary>
/// Создание модели магазина из данных файла
/// </summary>
/// <param name="element"></param>
/// <returns></returns>
public static Shop? Create(XElement element)
{
if (element == null)
{
return null;
}
return new()
{
Id = Convert.ToInt32(element.Attribute("Id")!.Value),
ShopName = element.Element("ShopName")!.Value,
Address = element.Element("Address")!.Value,
DateOpening = Convert.ToDateTime(element.Element("DateOpening")!.Value),
Planes = element.Element("ShopPlanes")!.Elements("ShopPlanes")!
.ToDictionary(x => Convert.ToInt32(x.Element("Key")?.Value), x => Convert.ToInt32(x.Element("Value")?.Value)),
MaxPlanes = Convert.ToInt32(element.Element("MaxPlanes")!.Value)
};
}
/// <summary>
/// Создание модели магазина
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public static Shop? Create(ShopBindingModel? model)
{
if (model == null)
{
return null;
}
return new Shop()
{
Id = model.Id,
ShopName = model.ShopName,
Address = model.Address,
DateOpening = model.DateOpening,
Planes = model.ShopPlanes.ToDictionary(x => x.Key, x => x.Value.Item2),
MaxPlanes = model.MaxPlanes
};
}
/// <summary>
/// Изменение модели магазина
/// </summary>
/// <param name="model"></param>
public void Update(ShopBindingModel? model)
{
if (model == null)
{
return;
}
ShopName = model.ShopName;
Address = model.Address;
DateOpening = model.DateOpening;
Planes = model.ShopPlanes.ToDictionary(x => x.Key, x => x.Value.Item2);
MaxPlanes = model.MaxPlanes;
_shopPlanes = null;
}
/// <summary>
/// Получение модели магазина
/// </summary>
public ShopViewModel GetViewModel => new()
{
Id = Id,
ShopName = ShopName,
Address = Address,
DateOpening = DateOpening,
ShopPlanes = ShopPlanes,
MaxPlanes = MaxPlanes
};
/// <summary>
/// Запись данных о модели магазина в файл
/// </summary>
public XElement GetXElement => new("Shop",
new XAttribute("Id", Id),
new XElement("ShopName", ShopName),
new XElement("Address", Address),
new XElement("DateOpening", DateOpening.ToString()),
new XElement("ShopPlanes", Planes.Select(x =>
new XElement("ShopPlanes",
new XElement("Key", x.Key),
new XElement("Value", x.Value)))),
new XElement("MaxPlanes", MaxPlanes.ToString()
.ToArray()));
}
}

View File

@ -2,6 +2,7 @@
using AircraftPlantContracts.SearchModels;
using AircraftPlantContracts.StoragesContracts;
using AircraftPlantContracts.ViewModels;
using AircraftPlantDataModels.Models;
using AircraftPlantListImplement.Models;
using System;
using System.Collections.Generic;
@ -150,5 +151,29 @@ namespace AircraftPlantListImplement.Implements
}
return null;
}
/// <summary>
/// Продажа изделий
/// </summary>
/// <param name="plane"></param>
/// <param name="count"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public bool SellPlanes(IPlaneModel plane, int count)
{
throw new NotImplementedException();
}
/// <summary>
/// Проверка наличия изделий в магазинах в нужном количестве
/// </summary>
/// <param name="plane"></param>
/// <param name="count"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public bool Restock(IPlaneModel plane, int count)
{
throw new NotImplementedException();
}
}
}

View File

@ -43,6 +43,11 @@ namespace AircraftPlantListImplement.Models
private set;
} = new Dictionary<int, (IPlaneModel, int)>();
/// <summary>
/// Максимальное количество изделий
/// </summary>
public int MaxPlanes { get; private set; }
/// <summary>
/// Создание модели магазина
/// </summary>