510 lines
19 KiB
C#
510 lines
19 KiB
C#
///////////////////////////////////////////////////////////
|
|
// 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
|
|
{
|
|
/// <summary>
|
|
/// Lightweight read only list of <see cref="UnitPickList.UnitPickListInfo"/> objects representing <see cref="Unit"/> objects.
|
|
/// Used for selection in UI and by other business objects internally.
|
|
/// </summary>
|
|
[Serializable]
|
|
public class UnitPickList : ReadOnlyCollectionBase
|
|
{
|
|
#region Data structure
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
[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
|
|
|
|
/// <summary>
|
|
/// Return unitname in selected <see cref="UnitNameDisplayFormats"/> format
|
|
/// </summary>
|
|
/// <param name="Format"></param>
|
|
/// <returns></returns>
|
|
public string UnitName(UnitNameDisplayFormats Format)
|
|
{
|
|
return Unit.UnitNameFormatter(mModelNumber,mModelName, mVendorName, mSerial, mDescription, Format);
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// Return unitname in current global selected format
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public string UnitName()
|
|
{
|
|
return Unit.UnitNameFormatter(mModelNumber, mModelName,mVendorName,mSerial, mDescription);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="obj"></param>
|
|
public bool Equals(UnitPickListInfo obj)
|
|
{
|
|
return this.mID.Equals(obj.mID);
|
|
}
|
|
|
|
}//end UnitPickListInfo
|
|
#endregion
|
|
|
|
#region Constructor
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
protected UnitPickList()
|
|
{
|
|
// 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 UnitPickListInfo this[int Item]
|
|
{
|
|
|
|
get
|
|
{
|
|
return (UnitPickListInfo) List[Item];
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Returns UnitPickListInfo item that matches passed in itemid value
|
|
/// </summary>
|
|
/// <param name="ItemID"></param>
|
|
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());
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Get a list of all duplicate serial numbers in this list
|
|
/// </summary>
|
|
public System.Collections.Generic.List<string> DuplicateSerials
|
|
{
|
|
|
|
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 (UnitPickListInfo i in List)
|
|
{
|
|
if (all.Contains(i.Serial))
|
|
{
|
|
dupes.Add(i.Serial);
|
|
}
|
|
else
|
|
{
|
|
all.Add(i.Serial);
|
|
}
|
|
}
|
|
return dupes;
|
|
}
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region contains
|
|
/// <summary>
|
|
/// Check if item in collection
|
|
/// </summary>
|
|
/// <param name="obj"></param>
|
|
public bool Contains(UnitPickListInfo obj)
|
|
{
|
|
foreach (UnitPickListInfo child in List)
|
|
{
|
|
if(child.Equals(obj)) return true;
|
|
}
|
|
return false;
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// Check if item in collection by UnitID
|
|
/// </summary>
|
|
/// <param name="UnitID"></param>
|
|
/// <returns></returns>
|
|
public bool Contains(Guid UnitID)
|
|
{
|
|
foreach (UnitPickListInfo child in List)
|
|
{
|
|
if(child.ID.Equals(UnitID)) return true;
|
|
}
|
|
return false;
|
|
|
|
}
|
|
#endregion
|
|
|
|
#region Static methods
|
|
/// <summary>
|
|
/// Get a list of units owned by a specific client
|
|
/// or self owned.
|
|
/// </summary>
|
|
/// <param name="ClientID">Client Guid for units owned by a specific client only
|
|
/// or Guid.Empty for all units that are self-owned</param>
|
|
/// <returns>A list of <see cref="UnitPickList.UnitPickListInfo"/> objects</returns>
|
|
public static UnitPickList GetListByClient(Guid ClientID)
|
|
{
|
|
return (UnitPickList)DataPortal.Fetch(new Criteria(string.Empty, ClientID, false, Guid.Empty, Guid.Empty));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get a list of all units
|
|
/// </summary>
|
|
/// <returns>A list of <see cref="UnitPickList.UnitPickListInfo"/> objects</returns>
|
|
public static UnitPickList GetListOfAll()
|
|
{
|
|
return (UnitPickList)DataPortal.Fetch(new Criteria(string.Empty, Guid.Empty, true, Guid.Empty, Guid.Empty));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get a list of all units
|
|
/// </summary>
|
|
/// <param name="exceptThisUnitId">Do not include this unit in return list (guid.empty acts like normal)</param>
|
|
/// <returns>A list of <see cref="UnitPickList.UnitPickListInfo"/> objects</returns>
|
|
public static UnitPickList GetListOfAll(Guid exceptThisUnitId)
|
|
{
|
|
return (UnitPickList)DataPortal.Fetch(new Criteria(string.Empty, Guid.Empty, true, exceptThisUnitId, Guid.Empty));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get one specific unit only but with all the pick list info
|
|
/// </summary>
|
|
/// <returns>A list of <see cref="UnitPickList.UnitPickListInfo"/> objects</returns>
|
|
/// <example> This sample shows how to use the GetListOfOneSpecificUnit method to fetch a single units name by global unit name display format.
|
|
/// <code>
|
|
/// //Fetching a list of one unit means we can access the first item in the list
|
|
/// //using array notation:
|
|
/// UnitPickList.GetListOfOneSpecificUnit(MyUnitID)[0].UnitName()
|
|
/// </code>
|
|
/// </example>
|
|
public static UnitPickList GetListOfOneSpecificUnit(Guid UnitID)
|
|
{
|
|
return (UnitPickList)DataPortal.Fetch(new Criteria(string.Empty, Guid.Empty, false, UnitID, Guid.Empty));
|
|
}
|
|
|
|
|
|
//case 1175
|
|
/// <summary>
|
|
/// Get a list of units appearing on a workorder
|
|
/// </summary>
|
|
/// <param name="WorkorderID">Service work order ID Guid</param>
|
|
/// <returns>A list of <see cref="UnitPickList.UnitPickListInfo"/> objects</returns>
|
|
public static UnitPickList GetListByWorkorder(Guid WorkorderID)
|
|
{
|
|
return (UnitPickList)DataPortal.Fetch(new Criteria(string.Empty, Guid.Empty, false, Guid.Empty, WorkorderID));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get a list of units owned by a specific client
|
|
/// or self owned filtered by search term
|
|
/// </summary>
|
|
/// <param name="searchTerm">string to match</param>
|
|
/// <param name="ClientID">Client Guid for units owned by a specific client only
|
|
/// or Guid.Empty for all units that are self-owned</param>
|
|
/// <returns>A list of <see cref="UnitPickList.UnitPickListInfo"/> objects</returns>
|
|
public static UnitPickList GetListByClient(string searchTerm, Guid ClientID)//case 1975
|
|
{
|
|
return (UnitPickList)DataPortal.Fetch(new Criteria(searchTerm, ClientID, false, Guid.Empty, Guid.Empty));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get a list of all units filtered by search term
|
|
/// </summary>
|
|
/// <param name="searchTerm">string to match</param>
|
|
/// <returns>A list of <see cref="UnitPickList.UnitPickListInfo"/> objects</returns>
|
|
public static UnitPickList GetListOfAll(string searchTerm)//case 1975
|
|
{
|
|
return (UnitPickList)DataPortal.Fetch(new Criteria(searchTerm, Guid.Empty, true, Guid.Empty, Guid.Empty));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get a list of all units (but one) filtered by search term
|
|
/// </summary>
|
|
/// <param name="searchTerm">string to match</param>
|
|
/// <param name="exceptThisUnitId">Do not include this unit in return list (guid.empty acts like normal)</param>
|
|
/// <returns>A list of <see cref="UnitPickList.UnitPickListInfo"/> objects</returns>
|
|
public static UnitPickList GetListOfAll(string searchTerm, Guid exceptThisUnitId)
|
|
{
|
|
return (UnitPickList)DataPortal.Fetch(new Criteria(searchTerm, Guid.Empty, true, exceptThisUnitId, Guid.Empty));
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Check all items for duplicate names
|
|
/// </summary>
|
|
/// <returns>List of duplicate names</returns>
|
|
public static System.Collections.Generic.List<string> DuplicateSerialCheck()
|
|
{
|
|
return GetListOfAll().DuplicateSerials;
|
|
}
|
|
|
|
|
|
|
|
#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.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
|
|
/// <summary>
|
|
/// Criteria for identifying existing object
|
|
/// </summary>
|
|
[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 |