/////////////////////////////////////////////////////////// // PartSerialPickList.cs // Implementation of Class PartSerialPickList // CSLA type: Read only collection // Created on: 28-Dec-2004 // Object design: John // Coded: 28-Dec-2004 /////////////////////////////////////////////////////////// using System; using System.Data; using GZTW.Data; using CSLA.Data; using CSLA; namespace GZTW.AyaNova.BLL { /// /// Lightweight read only list of objects /// [Serializable] public class PartSerialPickList : ReadOnlyCollectionBase { #region Data structure /// /// /// [Serializable] public struct PartSerialPickListInfo { internal Guid mID; internal string mSerialNumber; //Public properties /// /// /// public Guid ID {get{return mID;}} /// /// /// public string SerialNumber {get{return mSerialNumber;}} /// /// /// /// public bool Equals(PartSerialPickListInfo obj) { return this.mID.Equals(obj.mID); } }//end PartSerialPickListInfo #endregion #region Constructor /// /// /// protected PartSerialPickList() { // AllowSort=false; // AllowFind=true; // AllowEdit=false; // AllowNew=false; // AllowRemove=false; } #endregion #region Business properties and methods /// /// Get item by index /// /// public PartSerialPickListInfo this[int Item] { get { return (PartSerialPickListInfo) List[Item]; } } /// /// Returns PartSerialPickListInfo item that matches passed in itemid value /// /// public PartSerialPickListInfo this[Guid ItemID] { get { foreach (PartSerialPickListInfo child in List) { if(child.mID==ItemID) return child; } throw new ArgumentException("PartSerialPickList: ID not found:\r\n"+ItemID.ToString()); } } #endregion #region contains /// /// Check if item in collection /// /// public bool Contains(PartSerialPickListInfo obj) { foreach (PartSerialPickListInfo child in List) { if(child.Equals(obj)) return true; } return false; } #endregion #region Static methods /// /// Get all serial numbers for part and optionally for parts in warehouse selected /// /// Part ID /// Warehouse ID or Guid empty for any warehouse /// list of objects public static PartSerialPickList GetList(Guid PartID, Guid PartWarehouseID) { return (PartSerialPickList) DataPortal.Fetch(new Criteria(PartID, PartWarehouseID,Guid.Empty)); } /// /// Get all serial numbers selected on workorder /// /// /// list of objects public static PartSerialPickList GetListForWorkOrder(Guid WorkorderID) { return (PartSerialPickList)DataPortal.Fetch(new Criteria(Guid.Empty,Guid.Empty,WorkorderID)); } #endregion #region DAL DATA ACCESS /// /// protected override void DataPortal_Fetch(object Criteria) { Criteria crit = (Criteria)Criteria; SafeDataReader dr = null; try { if (crit.WorkOrderID != Guid.Empty) { DBCommandWrapper dbCommandWrapper = DBUtil.DB.GetSqlStringCommandWrapper( //************************************************************ "SELECT " + " APARTSERIAL.ASERIALNUMBER, " + " APARTSERIAL.AID " + "FROM " + " AWORKORDERITEMPART " + " INNER JOIN AWORKORDERITEM ON (AWORKORDERITEMPART.AWORKORDERITEMID = AWORKORDERITEM.AID) " + " INNER JOIN APARTSERIAL ON (AWORKORDERITEMPART.APARTSERIALID = APARTSERIAL.AID) " + " WHERE AWORKORDERITEM.AWORKORDERID = @WorkOrderID " //************************************************************ ); dbCommandWrapper.AddInParameter("@WorkOrderID", DbType.Guid, crit.WorkOrderID); dr = new SafeDataReader(DBUtil.DB.ExecuteReader(dbCommandWrapper)); } else { if (crit.PartWarehouseID != Guid.Empty) { DBCommandWrapper dbCommandWrapper = DBUtil.DB.GetSqlStringCommandWrapper( //************************************************************ "SELECT aID, aSerialNumber FROM aPartSerial " + "WHERE (aPartID = @PartID) AND " + "(aPartWarehouseID = @PartWarehouseID) " + "AND (AAVAILABLE=@aTrue) " + "ORDER BY ASERIALNUMBER " //case 1975 //************************************************************ ); dbCommandWrapper.AddInParameter("@aTrue", DbType.Boolean, true); dbCommandWrapper.AddInParameter("@PartID", DbType.Guid, crit.PartID); dbCommandWrapper.AddInParameter("@PartWarehouseID", DbType.Guid, crit.PartWarehouseID); dr = new SafeDataReader(DBUtil.DB.ExecuteReader(dbCommandWrapper)); } else { DBCommandWrapper dbCommandWrapper = DBUtil.DB.GetSqlStringCommandWrapper( //************************************************************ "SELECT aID, aSerialNumber FROM aPartSerial " + "WHERE (aPartID = @PartID) " + "AND (AAVAILABLE=@aTrue)" //************************************************************ ); dbCommandWrapper.AddInParameter("@aTrue", DbType.Boolean, true); dbCommandWrapper.AddInParameter("@PartID", DbType.Guid, crit.PartID); dr = new SafeDataReader(DBUtil.DB.ExecuteReader(dbCommandWrapper)); } } while(dr.Read()) { //******************************************* PartSerialPickListInfo info=new PartSerialPickListInfo(); info.mID=dr.GetGuid("aID"); info.mSerialNumber=dr.GetString("aSerialNumber"); InnerList.Add(info); //******************************************* } } finally { if(dr!=null) dr.Close(); } } #endregion #region criteria /// /// Criteria for identifying existing object /// [Serializable] private class Criteria { public Guid PartID; public Guid PartWarehouseID; public Guid WorkOrderID; public Criteria(Guid _PartID, Guid _PartWarehouseID, Guid _WorkOrderID) { PartID=_PartID; PartWarehouseID=_PartWarehouseID; WorkOrderID = _WorkOrderID; } } #endregion }//end PartSerialPickList }//end namespace GZTW.AyaNova.BLL