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

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