/////////////////////////////////////////////////////////// // PartPickList.cs // Implementation of Class PartPickList // 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; using System.Collections.Generic; namespace GZTW.AyaNova.BLL { /// /// Lightweight read only list of objects used for user selection in UI as well as API purposes internally /// [Serializable] public class PartPickList : ReadOnlyCollectionBase { #region Data structure /// /// /// [Serializable] public struct PartPickListInfo { internal Guid mID; internal string mName; internal string mPartNumber; internal Guid mPartAssemblyID; internal bool mActive; internal Guid mPartCategoryID; internal string mUPC; internal string mAlert; internal bool mTrackSerialNumber; internal decimal mRetail; internal string mPartAssembly; internal string mPartCategory; internal string mPartManufacturer; internal decimal mCost; internal string mPartManufacturerNumber; internal string mPartWholesalerNumber; internal string mPartAlternativeWholesalerNumber; //case 29 internal Guid mWholeSalerID; internal Guid mAlternativeWholeSalerID; #pragma warning disable 1591 //Public properties public Guid ID {get{return mID;}} public string Name {get{return mName;}} public string PartNumber {get{return mPartNumber;}} public string UPC {get{return mUPC;}} public string Alert {get{return mAlert;}} public Guid PartAssemblyID {get{return mPartAssemblyID;}} public Guid PartCategoryID {get{return mPartCategoryID;}} public bool Active {get{return mActive;}} public bool TrackSerialNumber {get{return mTrackSerialNumber;}} public decimal Retail {get{return mRetail;}} public string PartAssembly {get{return mPartAssembly;}} public string PartCategory {get{return mPartCategory;}} public string PartManufacturer {get{return mPartManufacturer;}} public decimal Cost {get{return mCost;}} public string PartManufacturerNumber {get{return mPartManufacturerNumber;}} public string PartWholesalerNumber {get{return mPartWholesalerNumber;}} public string PartAlternativeWholesalerNumber {get{return mPartAlternativeWholesalerNumber;}} public Guid WholeSalerID { get { return mWholeSalerID; } } public Guid AlternativeWholeSalerID { get { return mAlternativeWholeSalerID; } } #pragma warning restore 1591 /// /// Return name in selected format /// /// /// public string DisplayName(PartDisplayFormats Format) { return Part.PartDisplayFormatter(mName,mPartNumber,mUPC,mPartManufacturer,mPartCategory,mPartAssembly,Format); } /// /// /// /// public bool Equals(PartPickListInfo obj) { return this.mID.Equals(obj.mID); } }//end PartPickListInfo #endregion #region Constructor /// /// /// protected PartPickList() { // AllowSort=false; // AllowFind=true; // AllowEdit=false; // AllowNew=false; // AllowRemove=false; } #endregion #region Business properties and methods /// /// Get item by index /// /// public PartPickListInfo this[int Item] { get { return (PartPickListInfo) List[Item]; } } /// /// Returns PartPickListInfo item that matches passed in itemid value /// /// public PartPickListInfo this[Guid ItemID] { get { foreach (PartPickListInfo child in List) { if(child.mID==ItemID) return child; } throw new ArgumentException("PartPickList: ID not found:\r\n"+ItemID.ToString()); } } /// /// Get a list of all duplicate part numbers in this list /// public System.Collections.Generic.List DuplicatePartNumbers { get { System.Collections.Generic.List dupes = new System.Collections.Generic.List(); System.Collections.Generic.List all = new System.Collections.Generic.List(); foreach (PartPickListInfo i in List) { if (all.Contains(i.PartNumber)) { dupes.Add(i.PartNumber); } else { all.Add(i.PartNumber); } } return dupes; } } #endregion #region contains /// /// Check if item in collection /// /// public bool Contains(PartPickListInfo obj) { foreach (PartPickListInfo child in List) { if(child.Equals(obj)) return true; } return false; } /// /// Check if item in collection by ID /// /// /// public bool Contains(Guid ID) { foreach (PartPickListInfo child in List) { if(child.ID.Equals(ID)) return true; } return false; } #endregion #region Static methods /// /// Get all Parts /// /// public static PartPickList GetAllParts() { return (PartPickList)DataPortal.Fetch(new Criteria(Guid.Empty, Guid.Empty, null, "")); } /// /// Get one part /// /// Guid of part /// list of objects public static PartPickList GetOnePart(Guid PartID) { return (PartPickList)DataPortal.Fetch(new Criteria(PartID, Guid.Empty, null, "")); } /// /// Get all parts from a specific vendor /// /// Guid of vendor /// list of objects public static PartPickList GetAllPartsForVendor(Guid VendorID) { return (PartPickList)DataPortal.Fetch(new Criteria(Guid.Empty, VendorID, null, "")); } //added case 1975 /// /// Get list by items indicated in IDList /// /// Generic list of Guid's /// list of objects public static PartPickList GetListFromIDList(List IDList) { //Handle empty list if (IDList.Count == 0) return new PartPickList(); return (PartPickList)DataPortal.Fetch(new Criteria(Guid.Empty, Guid.Empty, IDList, "")); } /// /// Get all Parts /// /// public static PartPickList GetAllParts(string searchTerm) { return (PartPickList)DataPortal.Fetch(new Criteria(Guid.Empty, Guid.Empty, null, searchTerm)); } /// /// Check all items for duplicate part numbers /// /// List of duplicate part numbers public static System.Collections.Generic.List DuplicatePartNumberCheck() { return GetAllParts().DuplicatePartNumbers; } #endregion #region DAL DATA ACCESS /// /// protected override void DataPortal_Fetch(object Criteria) { Criteria crit = (Criteria)Criteria; SafeDataReader dr = null; try { if (crit.IDList != null) { //Case 556 System.Text.StringBuilder sbIN = new System.Text.StringBuilder(); sbIN.Append(" WHERE (APART.aID in ("); foreach (Guid gItem in crit.IDList) { sbIN.Append("'"); sbIN.Append("{"); sbIN.Append(gItem.ToString().ToUpperInvariant()); sbIN.Append("}"); sbIN.Append("',"); } sbIN.Length = sbIN.Length - 1; sbIN.Append(")) "); dr = DBUtil.GetReaderFromSQLString( //************************************************************ "SELECT aPart.aID, aPart.aName, aPart.aPartNumber, " + " aPart.aPartAssemblyID, aPart.aPartCategoryID, " + " aPart.aUPC, aPart.AALERT, aPart.aTrackSerialNumber, " + " aPart.AACTIVE, aPart.aRetail, " + " aPart.aCost, aPart.aManufacturerNumber, " + " aPart.aWholesalerNumber, aPart.AALTERNATIVEWHOLESALERNUMBER, " + "aPart.aWholesalerID, aPart.AALTERNATIVEWHOLESALERID, " + //case 29 " aVendor.aName AS aMANUFACTURERNAME, " + " aPartCategory.aName AS aPARTCATEGORYNAME, " + " aPartAssembly.aName AS aPARTASSEMBLYNAME FROM " + "aPart LEFT OUTER JOIN aPartAssembly ON " + "aPart.aPartAssemblyID = aPartAssembly.aID " + "LEFT OUTER JOIN aPartCategory ON aPart.aPartCategoryID " + "= aPartCategory.aID LEFT OUTER JOIN " + "aVendor ON aPart.aManufacturerID = aVendor.aID " + sbIN //************************************************************ ); } else if(crit.VendorID!=Guid.Empty) { //All parts for vendor dr=DBUtil.GetReaderFromSQLString( //************************************************************ "SELECT aPart.aID, aPart.aName, aPart.aPartNumber, " + " aPart.aPartAssemblyID, aPart.aPartCategoryID, " + " aPart.aUPC, aPart.AALERT, aPart.aTrackSerialNumber, " + " aPart.AACTIVE, aPart.aRetail, " + " aPart.aCost, aPart.aManufacturerNumber, " + " aPart.aWholesalerNumber, aPart.AALTERNATIVEWHOLESALERNUMBER, " + "aPart.aWholesalerID, aPart.AALTERNATIVEWHOLESALERID, " + //case 29 " aVendor.aName AS aMANUFACTURERNAME, " + " aPartCategory.aName AS aPARTCATEGORYNAME, " + " aPartAssembly.aName AS aPARTASSEMBLYNAME FROM " + "aPart LEFT OUTER JOIN aPartAssembly ON " + "aPart.aPartAssemblyID = aPartAssembly.aID " + "LEFT OUTER JOIN aPartCategory ON aPart.aPartCategoryID " + "= aPartCategory.aID LEFT OUTER JOIN " + "aVendor ON aPart.aManufacturerID = aVendor.aID " + "WHERE aPart.aWholesalerID=@ID OR aPart.AALTERNATIVEWHOLESALERID = @ID",crit.VendorID //************************************************************ ); } else if(crit.PartID!=Guid.Empty) { //one part dr=DBUtil.GetReaderFromSQLString( //************************************************************ "SELECT aPart.aID, aPart.aName, aPart.aPartNumber, " + " aPart.aPartAssemblyID, aPart.aPartCategoryID, " + " aPart.aUPC, aPart.AALERT, aPart.aTrackSerialNumber, " + " aPart.AACTIVE, aPart.aRetail, " + " aPart.aCost, aPart.aManufacturerNumber, " + " aPart.aWholesalerNumber, aPart.AALTERNATIVEWHOLESALERNUMBER, " + "aPart.aWholesalerID, aPart.AALTERNATIVEWHOLESALERID, " + //case 29 " aVendor.aName AS aMANUFACTURERNAME, " + " aPartCategory.aName AS aPARTCATEGORYNAME, " + " aPartAssembly.aName AS aPARTASSEMBLYNAME FROM " + "aPart LEFT OUTER JOIN aPartAssembly ON " + "aPart.aPartAssemblyID = aPartAssembly.aID " + "LEFT OUTER JOIN aPartCategory ON aPart.aPartCategoryID " + "= aPartCategory.aID LEFT OUTER JOIN " + "aVendor ON aPart.aManufacturerID = aVendor.aID " + "WHERE aPart.aID=@ID",crit.PartID //************************************************************ ); } else//all parts { //case 1975 string likeTerm = string.Empty; if (!string.IsNullOrEmpty(crit.SearchTerm))//case 1975 { likeTerm = " WHERE (LOWER(aPart.aName) LIKE '%" + crit.SearchTerm + "%')" + " OR (LOWER(aPart.aPartNumber) LIKE '%" + crit.SearchTerm + "%')" + " OR (LOWER(aVendor.aName) LIKE '%" + crit.SearchTerm + "%')" + " OR (LOWER(aPartCategory.aName) LIKE '%" + crit.SearchTerm + "%')" + " OR (LOWER(aPart.aUPC) LIKE '%" + crit.SearchTerm + "%')"; } dr=DBUtil.GetReaderFromSQLString( //************************************************************ "SELECT aPart.aID, aPart.aName, aPart.aPartNumber, " + " aPart.aPartAssemblyID, aPart.aPartCategoryID, " + " aPart.aUPC, aPart.AALERT, aPart.aTrackSerialNumber, " + " aPart.AACTIVE, aPart.aRetail, " + " aPart.aCost, aPart.aManufacturerNumber, " + " aPart.aWholesalerNumber, aPart.AALTERNATIVEWHOLESALERNUMBER, " + "aPart.aWholesalerID, aPart.AALTERNATIVEWHOLESALERID, " + //case 29 " aVendor.aName AS aMANUFACTURERNAME, " + " aPartCategory.aName AS aPARTCATEGORYNAME, " + " aPartAssembly.aName AS aPARTASSEMBLYNAME FROM " + "aPart LEFT OUTER JOIN aPartAssembly ON " + "aPart.aPartAssemblyID = aPartAssembly.aID " + "LEFT OUTER JOIN aPartCategory ON aPart.aPartCategoryID " + "= aPartCategory.aID LEFT OUTER JOIN " + "aVendor ON aPart.aManufacturerID = aVendor.aID" + likeTerm//case 1975 //************************************************************ ); } while(dr.Read()) { //******************************************* PartPickListInfo info=new PartPickListInfo(); info.mID=dr.GetGuid("aID"); info.mName=dr.GetString("aName"); info.mPartNumber=dr.GetString("aPartNumber"); info.mActive=dr.GetBoolean("AACTIVE"); info.mAlert=dr.GetString("AALERT"); info.mPartAssemblyID=dr.GetGuid("aPartAssemblyID"); info.mPartCategoryID=dr.GetGuid("aPartCategoryID"); info.mRetail=dr.GetDecimal("aRetail"); info.mTrackSerialNumber=dr.GetBoolean("aTrackSerialNumber"); info.mUPC=dr.GetString("aUPC"); info.mPartAssembly=dr.GetString("aPARTASSEMBLYNAME"); info.mPartCategory=dr.GetString("aPARTCATEGORYNAME"); info.mPartManufacturer=dr.GetString("aMANUFACTURERNAME"); info.mCost=dr.GetDecimal("aCost"); info.mPartManufacturerNumber=dr.GetString("aManufacturerNumber"); info.mPartWholesalerNumber=dr.GetString("aWholesalerNumber"); info.mPartAlternativeWholesalerNumber=dr.GetString("AALTERNATIVEWHOLESALERNUMBER"); //case 29 info.mWholeSalerID = dr.GetGuid("aWholesalerID"); info.mAlternativeWholeSalerID = dr.GetGuid("AALTERNATIVEWHOLESALERID"); InnerList.Add(info); //******************************************* } } finally { if(dr!=null) dr.Close(); } } #endregion #region criteria /// /// Criteria for identifying existing object /// [Serializable] private class Criteria { public Guid VendorID; public Guid PartID; public List IDList; public string SearchTerm;//case 1975 public Criteria(Guid _PartID, Guid _VendorID, List _IDList, string _searchTerm) { VendorID=_VendorID; PartID=_PartID; IDList = _IDList; SearchTerm = _searchTerm; } } #endregion }//end PartPickList }//end namespace GZTW.AyaNova.BLL