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 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 DressesList { get; private set; } = new(); public int MaxTotalOfDresses { get; private set; } public Dictionary 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)); } }