115 lines
4.3 KiB
C#

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));
}
}