Files
2018-06-29 19:47:36 +00:00

483 lines
17 KiB
C#

///////////////////////////////////////////////////////////
// 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
{
/// <summary>
/// Lightweight read only list of <see cref="PartPickList.PartPickListInfo"/> objects used for user selection in UI as well as API purposes internally
/// </summary>
[Serializable]
public class PartPickList : ReadOnlyCollectionBase
{
#region Data structure
/// <summary>
///
/// </summary>
[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
/// <summary>
/// Return name in selected format
/// </summary>
/// <param name="Format"></param>
/// <returns></returns>
public string DisplayName(PartDisplayFormats Format)
{
return Part.PartDisplayFormatter(mName,mPartNumber,mUPC,mPartManufacturer,mPartCategory,mPartAssembly,Format);
}
/// <summary>
///
/// </summary>
/// <param name="obj"></param>
public bool Equals(PartPickListInfo obj)
{
return this.mID.Equals(obj.mID);
}
}//end PartPickListInfo
#endregion
#region Constructor
/// <summary>
///
/// </summary>
protected PartPickList()
{
// AllowSort=false;
// AllowFind=true;
// AllowEdit=false;
// AllowNew=false;
// AllowRemove=false;
}
#endregion
#region Business properties and methods
/// <summary>
/// Get item by index
/// </summary>
/// <param name="Item"></param>
public PartPickListInfo this[int Item]
{
get
{
return (PartPickListInfo) List[Item];
}
}
/// <summary>
/// Returns PartPickListInfo item that matches passed in itemid value
/// </summary>
/// <param name="ItemID"></param>
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());
}
}
/// <summary>
/// Get a list of all duplicate part numbers in this list
/// </summary>
public System.Collections.Generic.List<string> DuplicatePartNumbers
{
get
{
System.Collections.Generic.List<string> dupes = new System.Collections.Generic.List<string>();
System.Collections.Generic.List<string> all = new System.Collections.Generic.List<string>();
foreach (PartPickListInfo i in List)
{
if (all.Contains(i.PartNumber))
{
dupes.Add(i.PartNumber);
}
else
{
all.Add(i.PartNumber);
}
}
return dupes;
}
}
#endregion
#region contains
/// <summary>
/// Check if item in collection
/// </summary>
/// <param name="obj"></param>
public bool Contains(PartPickListInfo obj)
{
foreach (PartPickListInfo child in List)
{
if(child.Equals(obj)) return true;
}
return false;
}
/// <summary>
/// Check if item in collection by ID
/// </summary>
/// <param name="ID"></param>
/// <returns></returns>
public bool Contains(Guid ID)
{
foreach (PartPickListInfo child in List)
{
if(child.ID.Equals(ID)) return true;
}
return false;
}
#endregion
#region Static methods
/// <summary>
/// Get all Parts
/// </summary>
/// <returns></returns>
public static PartPickList GetAllParts()
{
return (PartPickList)DataPortal.Fetch(new Criteria(Guid.Empty, Guid.Empty, null, ""));
}
/// <summary>
/// Get one part
/// </summary>
/// <param name="PartID">Guid of part</param>
/// <returns>list of <see cref="PartPickList.PartPickListInfo"/> objects</returns>
public static PartPickList GetOnePart(Guid PartID)
{
return (PartPickList)DataPortal.Fetch(new Criteria(PartID, Guid.Empty, null, ""));
}
/// <summary>
/// Get all parts from a specific vendor
/// </summary>
/// <param name="VendorID">Guid of vendor</param>
/// <returns>list of <see cref="PartPickList.PartPickListInfo"/> objects</returns>
public static PartPickList GetAllPartsForVendor(Guid VendorID)
{
return (PartPickList)DataPortal.Fetch(new Criteria(Guid.Empty, VendorID, null, ""));
}
//added case 1975
/// <summary>
/// Get list by items indicated in IDList
/// </summary>
/// <param name="IDList">Generic list of Guid's</param>
/// <returns>list of <see cref="PartPickList.PartPickListInfo"/> objects</returns>
public static PartPickList GetListFromIDList(List<Guid> IDList)
{
//Handle empty list
if (IDList.Count == 0)
return new PartPickList();
return (PartPickList)DataPortal.Fetch(new Criteria(Guid.Empty, Guid.Empty, IDList, ""));
}
/// <summary>
/// Get all Parts
/// </summary>
/// <returns></returns>
public static PartPickList GetAllParts(string searchTerm)
{
return (PartPickList)DataPortal.Fetch(new Criteria(Guid.Empty, Guid.Empty, null, searchTerm));
}
/// <summary>
/// Check all items for duplicate part numbers
/// </summary>
/// <returns>List of duplicate part numbers</returns>
public static System.Collections.Generic.List<string> DuplicatePartNumberCheck()
{
return GetAllParts().DuplicatePartNumbers;
}
#endregion
#region DAL DATA ACCESS
///
/// <param name="Criteria"></param>
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
/// <summary>
/// Criteria for identifying existing object
/// </summary>
[Serializable]
private class Criteria
{
public Guid VendorID;
public Guid PartID;
public List<Guid> IDList;
public string SearchTerm;//case 1975
public Criteria(Guid _PartID, Guid _VendorID, List<Guid> _IDList, string _searchTerm)
{
VendorID=_VendorID;
PartID=_PartID;
IDList = _IDList;
SearchTerm = _searchTerm;
}
}
#endregion
}//end PartPickList
}//end namespace GZTW.AyaNova.BLL