/////////////////////////////////////////////////////////// // UnitPickList.cs // Implementation of Class UnitPickList // CSLA type: Read only collection // Created on: 23-Dec-2004 // Object design: John // Coded: 23-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 representing objects. /// Used for selection in UI and by other business objects internally. /// [Serializable] public class UnitPickList : ReadOnlyCollectionBase { #region Data structure /// /// /// [Serializable] public struct UnitPickListInfo { internal Guid mID; internal string mSerial; internal string mVendorName; internal string mModelName; internal string mModelNumber; internal bool mActive; internal bool mUsesBanking; internal bool mMetered; internal Guid mClientID; //case 3150 internal string mDescription; #pragma warning disable 1591 //Public properties public Guid ID {get{return mID;}} public string Serial {get{return mSerial;}} public string VendorName {get{return mVendorName;}} public string ModelName {get{return mModelName;}} public string ModelNumber {get{return mModelNumber;}} public bool Active {get{return mActive;}} public bool UsesBanking {get{return mUsesBanking;}} public bool Metered {get{return mMetered;}} //case 3150 public string Description { get { return mDescription; } } //Added:30-Sept-2006 for WBI usage public Guid ClientID { get { return mClientID; } } #pragma warning restore 1591 /// /// Return unitname in selected format /// /// /// public string UnitName(UnitNameDisplayFormats Format) { return Unit.UnitNameFormatter(mModelNumber,mModelName, mVendorName, mSerial, mDescription, Format); } /// /// Return unitname in current global selected format /// /// public string UnitName() { return Unit.UnitNameFormatter(mModelNumber, mModelName,mVendorName,mSerial, mDescription); } /// /// /// /// public bool Equals(UnitPickListInfo obj) { return this.mID.Equals(obj.mID); } }//end UnitPickListInfo #endregion #region Constructor /// /// /// protected UnitPickList() { // AllowSort=false; // AllowFind=true; // AllowEdit=false; // AllowNew=false; // AllowRemove=false; } #endregion #region Business properties and methods /// /// Get item by index /// /// public UnitPickListInfo this[int Item] { get { return (UnitPickListInfo) List[Item]; } } /// /// Returns UnitPickListInfo item that matches passed in itemid value /// /// public UnitPickListInfo this[Guid ItemID] { get { foreach (UnitPickListInfo child in List) { if(child.mID==ItemID) return child; } throw new ArgumentException("UnitPickList: ID not found:\r\n"+ItemID.ToString()); } } /// /// Get a list of all duplicate serial numbers in this list /// public System.Collections.Generic.List DuplicateSerials { get { System.Collections.Generic.List dupes = new System.Collections.Generic.List(); System.Collections.Generic.List all = new System.Collections.Generic.List(); foreach (UnitPickListInfo i in List) { if (all.Contains(i.Serial)) { dupes.Add(i.Serial); } else { all.Add(i.Serial); } } return dupes; } } #endregion #region contains /// /// Check if item in collection /// /// public bool Contains(UnitPickListInfo obj) { foreach (UnitPickListInfo child in List) { if(child.Equals(obj)) return true; } return false; } /// /// Check if item in collection by UnitID /// /// /// public bool Contains(Guid UnitID) { foreach (UnitPickListInfo child in List) { if(child.ID.Equals(UnitID)) return true; } return false; } #endregion #region Static methods /// /// Get a list of units owned by a specific client /// or self owned. /// /// Client Guid for units owned by a specific client only /// or Guid.Empty for all units that are self-owned /// A list of objects public static UnitPickList GetListByClient(Guid ClientID) { return (UnitPickList)DataPortal.Fetch(new Criteria(string.Empty, ClientID, false, Guid.Empty, Guid.Empty)); } /// /// Get a list of all units /// /// A list of objects public static UnitPickList GetListOfAll() { return (UnitPickList)DataPortal.Fetch(new Criteria(string.Empty, Guid.Empty, true, Guid.Empty, Guid.Empty)); } /// /// Get a list of all units /// /// Do not include this unit in return list (guid.empty acts like normal) /// A list of objects public static UnitPickList GetListOfAll(Guid exceptThisUnitId) { return (UnitPickList)DataPortal.Fetch(new Criteria(string.Empty, Guid.Empty, true, exceptThisUnitId, Guid.Empty)); } /// /// Get one specific unit only but with all the pick list info /// /// A list of objects /// This sample shows how to use the GetListOfOneSpecificUnit method to fetch a single units name by global unit name display format. /// /// //Fetching a list of one unit means we can access the first item in the list /// //using array notation: /// UnitPickList.GetListOfOneSpecificUnit(MyUnitID)[0].UnitName() /// /// public static UnitPickList GetListOfOneSpecificUnit(Guid UnitID) { return (UnitPickList)DataPortal.Fetch(new Criteria(string.Empty, Guid.Empty, false, UnitID, Guid.Empty)); } //case 1175 /// /// Get a list of units appearing on a workorder /// /// Service work order ID Guid /// A list of objects public static UnitPickList GetListByWorkorder(Guid WorkorderID) { return (UnitPickList)DataPortal.Fetch(new Criteria(string.Empty, Guid.Empty, false, Guid.Empty, WorkorderID)); } /// /// Get a list of units owned by a specific client /// or self owned filtered by search term /// /// string to match /// Client Guid for units owned by a specific client only /// or Guid.Empty for all units that are self-owned /// A list of objects public static UnitPickList GetListByClient(string searchTerm, Guid ClientID)//case 1975 { return (UnitPickList)DataPortal.Fetch(new Criteria(searchTerm, ClientID, false, Guid.Empty, Guid.Empty)); } /// /// Get a list of all units filtered by search term /// /// string to match /// A list of objects public static UnitPickList GetListOfAll(string searchTerm)//case 1975 { return (UnitPickList)DataPortal.Fetch(new Criteria(searchTerm, Guid.Empty, true, Guid.Empty, Guid.Empty)); } /// /// Get a list of all units (but one) filtered by search term /// /// string to match /// Do not include this unit in return list (guid.empty acts like normal) /// A list of objects public static UnitPickList GetListOfAll(string searchTerm, Guid exceptThisUnitId) { return (UnitPickList)DataPortal.Fetch(new Criteria(searchTerm, Guid.Empty, true, exceptThisUnitId, Guid.Empty)); } /// /// Check all items for duplicate names /// /// List of duplicate names public static System.Collections.Generic.List DuplicateSerialCheck() { return GetListOfAll().DuplicateSerials; } #endregion #region DAL DATA ACCESS /// /// protected override void DataPortal_Fetch(object Criteria) { Criteria crit = (Criteria)Criteria; SafeDataReader dr = null; try { if(crit.AllUnits) {//searchable if (!string.IsNullOrEmpty(crit.SearchTerm))//case 1975 { string likeTerm = " WHERE (LOWER(aUnit.aSerial) LIKE '%" + crit.SearchTerm + "%')"; dr = DBUtil.GetReaderFromSQLString( //************************************************************ "SELECT aUnit.aSerial, aUnit.aClientID, aUnitModel.aName " + "AS aModelName,aModelNumber, aVendor.aName AS aVendorName, " + "aUnit.AACTIVE, aUnit.aUsesBanking, aUnit.aMetered, aUnit.aID, AUNIT.ADESCRIPTION " + "FROM " + " AUNIT " + " LEFT OUTER JOIN AUNITMODEL ON (AUNIT.AUNITMODELID=AUNITMODEL.AID) " + " LEFT OUTER JOIN AVENDOR ON (AUNITMODEL.AVENDORID=AVENDOR.AID) " + likeTerm + "ORDER BY aUnit.aSerial" //************************************************************ ); } else { dr = DBUtil.GetReaderFromSQLString( //************************************************************ "SELECT aUnit.aSerial, aUnit.aClientID, aUnitModel.aName " + "AS aModelName,aModelNumber, aVendor.aName AS aVendorName, " + "aUnit.AACTIVE, aUnit.aUsesBanking, aUnit.aMetered, aUnit.aID, AUNIT.ADESCRIPTION " + "FROM " + " AUNIT " + " LEFT OUTER JOIN AUNITMODEL ON (AUNIT.AUNITMODELID=AUNITMODEL.AID) " + " LEFT OUTER JOIN AVENDOR ON (AUNITMODEL.AVENDORID=AVENDOR.AID) " //************************************************************ ); } } else { if(crit.UnitID!=Guid.Empty) { // //List for one unit only dr=DBUtil.GetReaderFromSQLString( //************************************************************ "SELECT aUnit.aSerial, aUnit.aClientID, aUnitModel.aName " + "AS aModelName,aModelNumber, aVendor.aName AS aVendorName, " + "aUnit.AACTIVE, aUnit.aUsesBanking, aUnit.aMetered, aUnit.aID, AUNIT.ADESCRIPTION " + "FROM " + " AUNIT " + " LEFT OUTER JOIN AUNITMODEL ON (AUNIT.AUNITMODELID=AUNITMODEL.AID) " + " LEFT OUTER JOIN AVENDOR ON (AUNITMODEL.AVENDORID=AVENDOR.AID) " + "WHERE (aUnit.aID " + "= @ID)",crit.UnitID //************************************************************ ); } else if (crit.WorkorderID != Guid.Empty)//case 1175 { dr=DBUtil.GetReaderFromSQLString( //************************************************************ "SELECT aUnit.aSerial, aUnit.aClientID, aUnitModel.aName " + " AS aModelName, aModelNumber, aVendor.aName AS aVendorName, " + " aUnit.AACTIVE, aUnit.aUsesBanking, aUnit.aMetered, aUnit.aID, AUNIT.ADESCRIPTION " + " FROM " + " AWORKORDERITEM " + " LEFT OUTER JOIN AUNIT ON (AWORKORDERITEM.AUNITID = AUNIT.AID) " + " LEFT OUTER JOIN AUNITMODEL ON (AUNIT.AUNITMODELID=AUNITMODEL.AID) " + " LEFT OUTER JOIN AVENDOR ON (AUNITMODEL.AVENDORID=AVENDOR.AID) " + " WHERE (AWORKORDERITEM.AWORKORDERID = @ID)", crit.WorkorderID //************************************************************ ); } else {//searchable //List for one client only if (!string.IsNullOrEmpty(crit.SearchTerm))//case 1975 { string likeTerm = " AND ((LOWER(aUnit.aSerial) LIKE '%" + crit.SearchTerm + "%')" + " OR (LOWER(aUnitModel.aName) LIKE '%" + crit.SearchTerm + "%')" + " OR (LOWER(aUnitModel.aModelNumber) LIKE '%" + crit.SearchTerm + "%')" + " OR (LOWER(aVendor.aName) LIKE '%" + crit.SearchTerm + "%')" + ")"; dr = DBUtil.GetReaderFromSQLString( //************************************************************ "SELECT aUnit.aSerial, aUnit.aClientID, aUnitModel.aName " + "AS aModelName,aModelNumber, aVendor.aName AS aVendorName, " + "aUnit.AACTIVE, aUnit.aUsesBanking, aUnit.aMetered, aUnit.aID, AUNIT.ADESCRIPTION " + "FROM " + " AUNIT " + " LEFT OUTER JOIN AUNITMODEL ON (AUNIT.AUNITMODELID=AUNITMODEL.AID) " + " LEFT OUTER JOIN AVENDOR ON (AUNITMODEL.AVENDORID=AVENDOR.AID) " + "WHERE (aUnit.aClientID = @ID)" + likeTerm + "ORDER BY aUnit.aSerial" , crit.ClientID //************************************************************ ); } else { dr = DBUtil.GetReaderFromSQLString( //************************************************************ "SELECT aUnit.aSerial, aUnit.aClientID, aUnitModel.aName " + "AS aModelName,aModelNumber, aVendor.aName AS aVendorName, " + "aUnit.AACTIVE, aUnit.aUsesBanking, aUnit.aMetered, aUnit.aID, AUNIT.ADESCRIPTION " + "FROM " + " AUNIT " + " LEFT OUTER JOIN AUNITMODEL ON (AUNIT.AUNITMODELID=AUNITMODEL.AID) " + " LEFT OUTER JOIN AVENDOR ON (AUNITMODEL.AVENDORID=AVENDOR.AID) " + "WHERE (aUnit.aClientID " + "= @ID)", crit.ClientID //************************************************************ ); } } } while(dr.Read()) { //******************************************* UnitPickListInfo info=new UnitPickListInfo(); info.mID=dr.GetGuid("aID"); //case 1975 (should have just done this a long time ago to save code) //this filters out the "ExceptThisUnitId" used to populate lists where a single //unit is not a valid selection (Unit screen parent for ex.) if (crit.AllUnits && crit.UnitID == info.mID) continue; info.mActive=dr.GetBoolean("AACTIVE"); info.mUsesBanking=dr.GetBoolean("aUsesBanking"); info.mMetered=dr.GetBoolean("aMetered"); info.mSerial=dr.GetString("aSerial"); info.mDescription = dr.GetString("ADESCRIPTION");//case 3150 info.mVendorName=dr.GetString("aVendorName"); info.mModelName=dr.GetString("aModelName"); info.mModelNumber=dr.GetString("aModelNumber"); info.mClientID = dr.GetGuid("aClientID"); InnerList.Add(info); //******************************************* } } finally { if(dr!=null) dr.Close(); } } #endregion #region criteria /// /// Criteria for identifying existing object /// [Serializable] private class Criteria { public string SearchTerm;//case 1975 public Guid ClientID; public bool AllUnits; public Guid UnitID; //case 1175 public Guid WorkorderID; public Criteria(string _searchTerm, Guid _ClientID, bool _AllUnits, Guid _UnitID, Guid _WorkorderID) { SearchTerm = _searchTerm; ClientID=_ClientID; AllUnits=_AllUnits; UnitID=_UnitID; WorkorderID = _WorkorderID;//case 1175 } } #endregion }//end UnitPickList }//end namespace GZTW.AyaNova.BLL