using System;
using System.Collections.Generic;
using System.Text;
using Ubik.Engine.Client;
namespace StoresAndStockPricing.Model{
/// <summary>
/// Products etc. appearing in the stock catalogue.
/// </summary>
public class StockItem : Individual
{
NonEmptyTrackedString _name;
TrackedString _notes;
TrackedReference<Brand> _brand;
protected StockItem(Session session)
: base(session)
{
_name = new NonEmptyTrackedString(this, "Name");
_notes = new TrackedString(this, "Notes", StandardFieldLengths.NotesLength);
_brand = new TrackedReference<Brand>(this, "Brand");
}
public StockItem(Session session, string name, Brand brand)
: this(session)
{
if (brand == null)
throw new ArgumentNullException("brand");
_name.Reset(name);
_brand.Reset(brand);
}
public string Name
{
get
{
return _name.Value;
}
set
{
_name.Value = value;
}
}
public string Notes
{
get
{
return _notes.Value;
}
set
{
_notes.Value = value;
}
}
public Brand Brand
{
get
{
return _brand.Value;
}
set
{
if (value == null)
throw new ArgumentNullException("value");
_brand.Value = value;
}
}
// This could be optimised - there will be a query executed for each store - the set of
// stores with current pricing could be retrieved in a single query.
public void ChangeSellingPrice(decimal sellingPrice)
{
foreach (RetailStore store in Session.Select<RetailStore>(null))
{
ChangeSellingPrice(store, sellingPrice);
}
}
public void ChangeSellingPrice(RetailStore store, decimal sellingPrice)
{
StockItemSellingPrice currentPrice = GetPriceAt(store);
if (currentPrice != null)
{
currentPrice.SellingPrice = sellingPrice;
}
else
{
currentPrice = new StockItemSellingPrice(Session, this, store, sellingPrice);
currentPrice.Insert();
}
}
public StockItemSellingPrice GetPriceAt(RetailStore store)
{
IList<StockItemSellingPrice> currentPrice = Session.Select<StockItemSellingPrice>(
"StockItem = {" + ToString() + "} && RetailStore = {" + store.ToString() + "}");
if (currentPrice.Count == 0)
return null;
else if (currentPrice.Count == 1)
return currentPrice[0];
else
throw new ApplicationException(StockItemSellingPriceResources.MultiplePricesFound);
}
protected override void BeforeDelete()
{
foreach (StockItemSellingPrice sellingPrice in
Session.Select<StockItemSellingPrice>("StockItem = {" + ToString() + "}"))
{
sellingPrice.Delete();
}
foreach (StockItemSellingPriceMaintenanceEvent sellingPriceMaintenanceEvent in
Session.Select<StockItemSellingPriceMaintenanceEvent>("StockItem = {" + ToString() + "}"))
{
sellingPriceMaintenanceEvent.Delete();
}
foreach (StockItemHistoricalSellingPrice historicalSellingPrice in
Session.Select<StockItemHistoricalSellingPrice>("StockItem = {" + ToString() + "}"))
{
historicalSellingPrice.Delete();
}
base.BeforeDelete();
}
}
}
|