Atelier file implementation + following storage creation and check quantity of dresses in ateliers logic.
This commit is contained in:
parent
651c29a9ea
commit
6e08782795
@ -9,6 +9,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Transactions;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace DressAtelierBusinessLogic.BusinessLogic
|
||||
@ -153,5 +154,38 @@ namespace DressAtelierBusinessLogic.BusinessLogic
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool CheckGoods(DressBindingModel model, int quantity)
|
||||
{
|
||||
var ateliers = _atelierStorage.GetFilteredList(new AtelierSearchModel { DressID = model.ID});
|
||||
int requiredQuantity = quantity;
|
||||
using (TransactionScope scope = new TransactionScope())
|
||||
{
|
||||
try
|
||||
{
|
||||
foreach(var atelier in ateliers)
|
||||
{
|
||||
if (atelier.DressesList[model.ID].Item2 == requiredQuantity)
|
||||
{
|
||||
atelier.DressesList.Remove(model.ID);
|
||||
scope.Complete();
|
||||
return true;
|
||||
}
|
||||
requiredQuantity -= atelier.DressesList[model.ID].Item2;
|
||||
atelier.DressesList.Remove(model.ID);
|
||||
}
|
||||
|
||||
if(requiredQuantity > 0)
|
||||
{
|
||||
throw new Exception("Not enough dresses in ateliers");
|
||||
}
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,5 +18,7 @@ namespace DressAtelierContracts.BindingModels
|
||||
public Dictionary<int, (IDressModel, int)> DressesList { get; set; } = new();
|
||||
|
||||
public int ID { get; set; }
|
||||
|
||||
public int MaxTotalOfDresses { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -17,5 +17,6 @@ namespace DressAtelierContracts.BusinessLogicContracts
|
||||
bool Create(AtelierBindingModel model);
|
||||
bool Update(AtelierBindingModel model);
|
||||
bool Delete(AtelierBindingModel model);
|
||||
bool CheckGoods(DressBindingModel model, int quantity);
|
||||
}
|
||||
}
|
||||
|
@ -10,5 +10,6 @@ namespace DressAtelierContracts.SearchModels
|
||||
{
|
||||
public int? ID { get; set; }
|
||||
public string? Name { get; set; }
|
||||
public int? DressID { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -20,6 +20,6 @@ namespace DressAtelierContracts.ViewModels
|
||||
|
||||
public Dictionary<int, (IDressModel, int)> DressesList { get; set; } = new();
|
||||
|
||||
|
||||
public int MaxTotalOfDresses { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -12,5 +12,6 @@ namespace DressAtelierDataModels.Models
|
||||
string Address { get; }
|
||||
DateTime OpeningDate { get; }
|
||||
Dictionary<int,(IDressModel,int)> DressesList { get; }
|
||||
int MaxTotalOfDresses { get; }
|
||||
}
|
||||
}
|
||||
|
@ -15,9 +15,11 @@ namespace DressAtelierFileImplement
|
||||
private readonly string MaterialFileName = "Material.xml";
|
||||
private readonly string OrderFileName = "Order.xml";
|
||||
private readonly string DressFileName = "Dress.xml";
|
||||
private readonly string AtelierFileName = "Atelier.xml";
|
||||
public List<Material> Components { get; private set; }
|
||||
public List<Order> Orders { get; private set; }
|
||||
public List<Dress> Dresses { get; private set; }
|
||||
public List<Atelier> Ateliers { get; private set; }
|
||||
public static DataFileSingleton GetInstance()
|
||||
{
|
||||
if (instance == null)
|
||||
@ -29,11 +31,13 @@ namespace DressAtelierFileImplement
|
||||
public void SaveComponents() => SaveData(Components, MaterialFileName,"Components", x => x.GetXElement);
|
||||
public void SaveDresses() => SaveData(Dresses, DressFileName,"Dresses", x => x.GetXElement);
|
||||
public void SaveOrders() => SaveData(Orders, OrderFileName,"Orders", x => x.GetXElement);
|
||||
public void SaveAteliers() => SaveData(Ateliers, AtelierFileName, "Atelier", x => x.GetXElement);
|
||||
private DataFileSingleton()
|
||||
{
|
||||
Components = LoadData(MaterialFileName, "Component", x => Material.Create(x)!)!;
|
||||
Dresses = LoadData(DressFileName, "Dress", x => Dress.Create(x)!)!;
|
||||
Orders = LoadData(OrderFileName, "Order", x => Order.Create(x)!)!;
|
||||
Ateliers = LoadData(AtelierFileName, "Atelier", x => Atelier.Create(x)!)!;
|
||||
}
|
||||
private static List<T>? LoadData<T>(string filename, string xmlNodeName,
|
||||
Func<XElement, T> selectFunction)
|
||||
|
101
DressAtelierFileImplement/Implements/AtelierStorage.cs
Normal file
101
DressAtelierFileImplement/Implements/AtelierStorage.cs
Normal file
@ -0,0 +1,101 @@
|
||||
using DressAtelierContracts.BindingModels;
|
||||
using DressAtelierContracts.SearchModels;
|
||||
using DressAtelierContracts.StorageContracts;
|
||||
using DressAtelierContracts.ViewModels;
|
||||
using DressAtelierFileImplement.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DressAtelierFileImplement.Implements
|
||||
{
|
||||
public class AtelierStorage : IAtelierStorage
|
||||
{
|
||||
private readonly DataFileSingleton _source;
|
||||
|
||||
public AtelierStorage()
|
||||
{
|
||||
_source = DataFileSingleton.GetInstance();
|
||||
}
|
||||
|
||||
public AtelierViewModel? Insert(AtelierBindingModel model)
|
||||
{
|
||||
model.ID = _source.Ateliers.Count() > 0 ? _source.Ateliers.Max(x => x.ID) + 1 : 1;
|
||||
|
||||
var newAtelier = Atelier.Create(model);
|
||||
if(newAtelier == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
_source.Ateliers.Add(newAtelier);
|
||||
_source.SaveAteliers();
|
||||
return newAtelier.GetViewModel;
|
||||
}
|
||||
|
||||
public AtelierViewModel? Update(AtelierBindingModel model)
|
||||
{
|
||||
var atelier = _source.Ateliers.FirstOrDefault(x => x.ID == model.ID);
|
||||
if(atelier == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
atelier.Update(model);
|
||||
_source.SaveAteliers();
|
||||
return atelier.GetViewModel;
|
||||
}
|
||||
public AtelierViewModel? Delete(AtelierBindingModel model)
|
||||
{
|
||||
var atelier = _source.Ateliers.FirstOrDefault(x => x.ID == model.ID);
|
||||
if (atelier == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
_source.Ateliers.Remove(atelier);
|
||||
_source.SaveAteliers();
|
||||
return atelier.GetViewModel;
|
||||
}
|
||||
|
||||
public AtelierViewModel? GetElement(AtelierSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Name) && !model.ID.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if(!string.IsNullOrEmpty(model.Name))
|
||||
{
|
||||
return _source.Ateliers.FirstOrDefault(x => x.Name.Equals(model.Name))?.GetViewModel;
|
||||
}
|
||||
|
||||
if (model.ID.HasValue)
|
||||
{
|
||||
return _source.Ateliers.FirstOrDefault(x => x.ID == model.ID)?.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<AtelierViewModel> GetFilteredList(AtelierSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Name) && !model.DressID.HasValue)
|
||||
{
|
||||
return new();
|
||||
}
|
||||
|
||||
if(!string.IsNullOrEmpty(model.Name))
|
||||
{
|
||||
return _source.Ateliers.Where(x => x.Name.Equals(model.Name)).Select(x => x.GetViewModel).ToList();
|
||||
}
|
||||
|
||||
return _source.Ateliers.Where(x => x.DressesList.ContainsKey((int)model.DressID)).Select(x => x.GetViewModel).ToList();
|
||||
}
|
||||
|
||||
public List<AtelierViewModel> GetFullList()
|
||||
{
|
||||
return _source.Ateliers.Select(x => x.GetViewModel).ToList();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
114
DressAtelierFileImplement/Models/Atelier.cs
Normal file
114
DressAtelierFileImplement/Models/Atelier.cs
Normal file
@ -0,0 +1,114 @@
|
||||
using DressAtelierContracts.BindingModels;
|
||||
using DressAtelierContracts.ViewModels;
|
||||
using DressAtelierDataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace DressAtelierFileImplement.Models
|
||||
{
|
||||
public class Atelier : IAtelierModel
|
||||
{
|
||||
public int ID { get; private set; }
|
||||
public string Name { get; private set; } = string.Empty;
|
||||
|
||||
public string Address { get; private set; } = string.Empty;
|
||||
|
||||
public DateTime OpeningDate { get; private set; } = DateTime.Now;
|
||||
|
||||
public Dictionary<int, (IDressModel, int)> Dresses {
|
||||
get
|
||||
{
|
||||
if(DressesList.Count == 0)
|
||||
{
|
||||
var source = DataFileSingleton.GetInstance();
|
||||
DressesList = CurrentDresses.ToDictionary(x => x.Key, y => ((source.Dresses.FirstOrDefault(z => z.ID == y.Key) as IDressModel)!, y.Value));
|
||||
}
|
||||
return DressesList;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public Dictionary<int, (IDressModel, int)> DressesList { get; private set; } = new();
|
||||
|
||||
public int MaxTotalOfDresses { get; private set; }
|
||||
|
||||
public Dictionary<int, int> CurrentDresses { get; private set; } = new();
|
||||
public int CurrentQuantity { get; private set; }
|
||||
|
||||
public static Atelier? Create(AtelierBindingModel? atelier)
|
||||
{
|
||||
if (atelier == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return new Atelier()
|
||||
{
|
||||
ID = atelier.ID,
|
||||
Name = atelier.Name,
|
||||
Address = atelier.Address,
|
||||
OpeningDate = atelier.OpeningDate,
|
||||
CurrentDresses = atelier.DressesList.ToDictionary(x => x.Key,x => x.Value.Item2),
|
||||
DressesList = atelier.DressesList,
|
||||
CurrentQuantity = atelier.DressesList.Count(),
|
||||
MaxTotalOfDresses = atelier.MaxTotalOfDresses
|
||||
};
|
||||
}
|
||||
|
||||
public static Atelier? Create(XElement element)
|
||||
{
|
||||
if (element == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return new Atelier()
|
||||
{
|
||||
ID = Convert.ToInt32(element.Attribute("ID")!.Value),
|
||||
Name = element.Element("Name")!.Value,
|
||||
Address = element.Element("Address")!.Value,
|
||||
OpeningDate = Convert.ToDateTime(element.Element("OpeningDate")!.Value),
|
||||
CurrentDresses = element.Element("Dresses")!.Elements("Dress").ToDictionary(x => Convert.ToInt32(x.Element("Key")?.Value), x => Convert.ToInt32(x.Element("Value")?.Value)),
|
||||
MaxTotalOfDresses = Convert.ToInt32(element.Element("MaxTotalOfDresses")!.Value),
|
||||
CurrentQuantity = Convert.ToInt32(element.Element("CurrentDressesQuantity")!.Value)
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
public void Update(AtelierBindingModel? atelier)
|
||||
{
|
||||
if (atelier == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
Name = atelier.Name;
|
||||
Address = atelier.Address;
|
||||
CurrentDresses = atelier.DressesList.ToDictionary(x => x.Key, x => x.Value.Item2);
|
||||
DressesList = null;
|
||||
OpeningDate = atelier.OpeningDate;
|
||||
MaxTotalOfDresses = atelier.MaxTotalOfDresses;
|
||||
}
|
||||
|
||||
|
||||
public AtelierViewModel GetViewModel => new()
|
||||
{
|
||||
ID = ID,
|
||||
Name = Name,
|
||||
Address = Address,
|
||||
OpeningDate = OpeningDate,
|
||||
DressesList = DressesList,
|
||||
MaxTotalOfDresses = MaxTotalOfDresses
|
||||
};
|
||||
|
||||
public XElement GetXElement => new("Atelier", new XAttribute("ID", ID),
|
||||
new XElement("Name", Name),
|
||||
new XElement("Address", Address),
|
||||
new XElement("OpeningDate", OpeningDate.ToString()),
|
||||
new XElement("Dresses", DressesList),
|
||||
new XElement("MaxTotalOfDresses", MaxTotalOfDresses),
|
||||
new XElement("CurrentDressesQuantity", CurrentQuantity));
|
||||
}
|
||||
}
|
@ -14,6 +14,8 @@ namespace DressAtelierListImplement.Models
|
||||
public int ID { get; private set; }
|
||||
public string Name { get; private set; } = string.Empty;
|
||||
public string Address { get; private set; } = string.Empty;
|
||||
public int MaxTotalOfDresses { get; private set; }
|
||||
public int CurrentDressesQuantity { get; private set; }
|
||||
public DateTime OpeningDate { get; private set; } = DateTime.Today;
|
||||
public Dictionary<int, (IDressModel, int)> DressesList { get; private set; } = new Dictionary<int, (IDressModel, int)>();
|
||||
|
||||
@ -29,7 +31,9 @@ namespace DressAtelierListImplement.Models
|
||||
Name = atelier.Name,
|
||||
Address = atelier.Address,
|
||||
OpeningDate = atelier.OpeningDate,
|
||||
DressesList = atelier.DressesList
|
||||
DressesList = atelier.DressesList,
|
||||
MaxTotalOfDresses = atelier.MaxTotalOfDresses,
|
||||
CurrentDressesQuantity = 0
|
||||
};
|
||||
}
|
||||
|
||||
@ -43,6 +47,8 @@ namespace DressAtelierListImplement.Models
|
||||
Address = atelier.Address;
|
||||
DressesList = atelier.DressesList;
|
||||
OpeningDate = atelier.OpeningDate;
|
||||
MaxTotalOfDresses = atelier.MaxTotalOfDresses;
|
||||
CurrentDressesQuantity = DressesList.Count();
|
||||
}
|
||||
|
||||
|
||||
@ -52,7 +58,8 @@ namespace DressAtelierListImplement.Models
|
||||
Name = Name,
|
||||
Address = Address,
|
||||
OpeningDate = OpeningDate,
|
||||
DressesList = DressesList
|
||||
};
|
||||
DressesList = DressesList,
|
||||
MaxTotalOfDresses = MaxTotalOfDresses
|
||||
};
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user