///////////////////////////////////////////////////////////
// PartSerials.cs
// Implementation of Class PartSerials
// CSLA type: Editable Grandchild collection
// Created on: 29-Nov-2004
// Object design: John
// Coded: John 29-Nov-2004
///////////////////////////////////////////////////////////
using System;
using GZTW.Data;
using System.Data;
using CSLA.Data;
using CSLA;
namespace GZTW.AyaNova.BLL
{
///
/// Part serial number collection of objects used by and
///
[Serializable]
public class PartSerials : BusinessCollectionBase
{
#region Constructor
//Private constructor prevents direction instantiation
private PartSerials()
{
//Child
MarkAsChild();
AllowSort=false;
AllowFind=true;
AllowEdit=true;
AllowNew=true;
AllowRemove=true;
}
#endregion
#region Business properties and methods
///
/// Retrieve PartSerial by index
///
/// Index
public PartSerial this[int Item]
{
get
{
return (PartSerial) List[Item];
}
}
///
/// Retrieve PartSerial by string containing Guid value
///
public PartSerial this[string PartSerialID]
{
get
{
System.Guid sid = new System.Guid(PartSerialID);
foreach (PartSerial child in List)
{
if(child.ID==sid)
return child;
}
return null;
}
}
///
/// Retrieve PartSerial by Guid value
///
public PartSerial this[Guid PartSerialGUID]
{
get
{
foreach (PartSerial child in List)
{
if(child.ID==PartSerialGUID)
return child;
}
return null;
}
}
///
/// Remove PartSerial by passing it in
///
///
public void Remove(PartSerial obj)
{
List.Remove(obj);
}
///
/// Remove PartSerial by string of id value
///
///
public void Remove(string PartSerialID)
{
System.Guid sid = new System.Guid(PartSerialID);
foreach (PartSerial child in List)
{
if(child.ID==sid)
List.Remove(child);
}
}
///
/// Remove by Guid value of ID
///
///
public void Remove(Guid PartSerialID)
{
foreach (PartSerial child in List)
{
if(child.ID==PartSerialID)
List.Remove(child);
}
}
///
/// Add a new PartSerial to the collection
///
public PartSerial Add(RootObjectTypes ObjectType)
{
PartSerial child=PartSerial.NewItem(ObjectType);
List.Add(child);
return child;
}
///
/// Sets broken rule for serial number item
/// if it's a duplicate in collection
///
public void CheckForDuplicateSerialNumbers()
{
//clear all duplicate broken rules first
//to start fresh
foreach(PartSerial ps in List)
{
ps.DuplicateSerialNumber=false;
}
//Loop through all serials
foreach(PartSerial pMain in List)
{
if(pMain.SerialNumber!="")
{
//compare to all other serials
foreach(PartSerial pOther in List)
{
if(pMain!=pOther)
{
if(pMain.SerialNumber==pOther.SerialNumber && pMain.PartID==pOther.PartID )
{
pMain.DuplicateSerialNumber=true;
pOther.DuplicateSerialNumber=true;
}
}
}
}
}
}
#endregion
#region Contains
///
/// Check if item in collection
///
///
public bool Contains(PartSerial obj)
{
foreach (PartSerial child in List)
{
if(child.Equals(obj)) return true;
}
return false;
}
///
/// Check if item in collection by string of ID value
///
///
public bool Contains(string PartSerialID)
{
System.Guid sid = new System.Guid(PartSerialID);
foreach (PartSerial child in List)
{
if(child.ID==sid) return true;
}
return false;
}
///
/// Check if item in deleted collection
///
///
public bool ContainsDeleted(PartSerial obj)
{
foreach (PartSerial child in deletedList)
{
if(child.Equals(obj)) return true;
}
return false;
}
///
/// Check if item in deleted collection by string of ID value
///
///
public bool ContainsDeleted(string PartSerialID)
{
System.Guid sid = new System.Guid(PartSerialID);
foreach (PartSerial child in deletedList)
{
if(child.ID==sid) return true;
}
return false;
}
#endregion
#region Static methods
///
/// NewItems
///
///
internal static PartSerials NewItems()
{
return new PartSerials();
}
///
/// Get items - Grandchild style
/// (root object can be WorkorderItem, PurchaseOrderItem, Warehouse etc)
///
///
///
///
internal static PartSerials GetItems(RootObjectTypes RootObject, Guid RootObjectID)
{
PartSerials col = new PartSerials();
col.Fetch(RootObject, RootObjectID);
return col;
}
#endregion
#region DAL DATA ACCESS
///
/// Fetch children - grandchild style
///
///
///
private void Fetch(RootObjectTypes RootObject, Guid RootObjectID)
{
//Load data Grandchild style
SafeDataReader dr = null;
try
{
switch(RootObject)
{
case RootObjectTypes.PurchaseOrder:
dr=DBUtil.GetReaderFromSQLString("SELECT * FROM aPartSerial WHERE aPurchaseOrderReceiptItemID=@ID",RootObjectID);
break;
case RootObjectTypes.PartInventoryAdjustment:
dr=DBUtil.GetReaderFromSQLString("SELECT * FROM aPartSerial WHERE AADJUSTMENTID=@ID",RootObjectID);
break;
default:
throw new ApplicationException("Invalid RootObjectType in:PartSerials.GetItems() only valid types are:PurchaseOrderReceiptItem or PartInventoryAdjustmentItem");
//dr=DBUtil.GetReaderFromSQLString("SELECT * FROM aPartSerial");
}
while(dr.Read())
{
List.Add(PartSerial.GetItem(dr,RootObject));
}
}
finally
{
if(dr!=null) dr.Close();
}
}
///
/// Update children
///
///
internal void Update(IDbTransaction tr)
{
//update (thus deleting) any deleted child objects
foreach (PartSerial child in deletedList)
{
child.Update(tr);
}
//Now that they are deleted remove them from memory
deletedList.Clear();
foreach (PartSerial child in List)
{
child.Update(tr);
}
}
#endregion
}//end PartSerials
}//end namespace GZTW.AyaNova.BLL