/////////////////////////////////////////////////////////// // TemplatePickList.cs // Implementation of Class TemplatePickList // CSLA type: Read only collection // Created on: 08-Nov-2007 // Object design: John // Coded: 08-Nov-2007 /////////////////////////////////////////////////////////// using System; using System.Data; using GZTW.Data; using CSLA.Data; using CSLA; namespace GZTW.AyaNova.BLL { /// /// Lightweight read only list of objects representing Work order Templates for building pick lists /// users can select from in AyaNova UI /// /// [Serializable] public class TemplatePickList : ReadOnlyCollectionBase { #region Data structure /// /// /// [Serializable] public struct TemplatePickListInfo { internal Guid mID; internal string mDescription; //Public properties /// /// /// public Guid ID { get { return mID; } } /// /// /// public string Description { get { return mDescription; } } /// /// /// /// public bool Equals(TemplatePickListInfo obj) { return this.mID.Equals(obj.mID); } }//end TemplatePickListInfo #endregion #region Constructor /// /// /// protected TemplatePickList() { } #endregion #region Business properties and methods /// /// Get item by index /// /// public TemplatePickListInfo this[int Item] { get { return (TemplatePickListInfo)List[Item]; } } /// /// Returns TemplatePickListInfo item that matches passed in itemid value /// /// public TemplatePickListInfo this[Guid ItemID] { get { foreach (TemplatePickListInfo child in List) { if (child.mID == ItemID) return child; } throw new ArgumentException("TemplatePickList: ID not found:\r\n" + ItemID.ToString()); } } /// /// Returns TemplatePickListInfo item that matches passed in description value /// Used by typeconverter /// /// public TemplatePickListInfo this[string sDescription] { get { foreach (TemplatePickListInfo child in List) { if (child.mDescription == sDescription) return child; } throw new ArgumentException("TemplatePickList: description not found:\r\n" + sDescription); } } #endregion #region contains /// /// Check if item in collection /// /// /// public bool Contains(TemplatePickListInfo obj) { foreach (TemplatePickListInfo child in List) { if (child.Equals(obj)) return true; } return false; } #endregion #region Static methods /// /// Get all templates for type /// /// /// /// /// list of objects public static TemplatePickList GetList(WorkorderTypes wotype, bool Regional) { return (TemplatePickList)DataPortal.Fetch(new Criteria(string.Empty, wotype, Guid.Empty, Regional)); } /// /// Get all templates for type filtered by search term /// /// /// string to match /// /// /// list of objects public static TemplatePickList GetList(string searchTerm, WorkorderTypes wotype, bool Regional) { return (TemplatePickList)DataPortal.Fetch(new Criteria(searchTerm, wotype, Guid.Empty, Regional)); } /// /// Used to fetch a single item for /// on demand populated combo boxes /// /// /// list of objects public static TemplatePickList GetListOfOne(Guid ID) { return (TemplatePickList)DataPortal.Fetch(new Criteria(string.Empty, WorkorderTypes.Unknown, ID, false)); } #endregion #region DAL DATA ACCESS /// /// protected override void DataPortal_Fetch(object Criteria) { Criteria crit=(Criteria)Criteria; SafeDataReader dr = null; if (crit.WoType == WorkorderTypes.Service) crit.WoType = WorkorderTypes.TemplateService; if (crit.WoType == WorkorderTypes.Quote) crit.WoType = WorkorderTypes.TemplateQuote; if (crit.WoType == WorkorderTypes.PreventiveMaintenance) crit.WoType = WorkorderTypes.TemplatePreventiveMaintenance; TemplatePickListInfo info = new TemplatePickListInfo(); info.mDescription = "-"; info.mID = Guid.Empty; InnerList.Add(info); try { if (crit.ID != Guid.Empty) dr = DBUtil.GetReaderFromSQLString( //************************************************************ "SELECT AWORKORDER.AID, AWORKORDER.ATEMPLATEDESCRIPTION, " + "AWORKORDERQUOTE.AQUOTENUMBER, " + "AWORKORDERSERVICE.ASERVICENUMBER, " + "AWORKORDERPREVENTIVEMAINTENANCE.APREVENTIVEMAINTENANCENUMBER " + "FROM AWORKORDER " + "LEFT OUTER JOIN AWORKORDERQUOTE ON (AWORKORDERQUOTE.AWORKORDERID=AWORKORDER.AID) " + "LEFT OUTER JOIN AWORKORDERSERVICE ON (AWORKORDERSERVICE.AWORKORDERID=AWORKORDER.AID) " + "LEFT OUTER JOIN AWORKORDERPREVENTIVEMAINTENANCE ON (AWORKORDERPREVENTIVEMAINTENANCE.AWORKORDERID=AWORKORDER.AID) " + "WHERE AWORKORDER.AID = @ID ", crit.ID //************************************************************ ); else { if (!string.IsNullOrEmpty(crit.SearchTerm))//case 1975 { string likeTerm = " AND (LOWER(AWORKORDER.ATEMPLATEDESCRIPTION) LIKE '%" + crit.SearchTerm + "%')"; dr = DBUtil.GetReaderFromSQLString( //************************************************************ DBUtil.AddRegionFilter( "SELECT AWORKORDER.AID, AWORKORDER.ATEMPLATEDESCRIPTION, " + "AWORKORDERQUOTE.AQUOTENUMBER, " + "AWORKORDERSERVICE.ASERVICENUMBER, " + "AWORKORDERPREVENTIVEMAINTENANCE.APREVENTIVEMAINTENANCENUMBER " + "FROM AWORKORDER " + "LEFT OUTER JOIN AWORKORDERQUOTE ON (AWORKORDERQUOTE.AWORKORDERID=AWORKORDER.AID) " + "LEFT OUTER JOIN AWORKORDERSERVICE ON (AWORKORDERSERVICE.AWORKORDERID=AWORKORDER.AID) " + "LEFT OUTER JOIN AWORKORDERPREVENTIVEMAINTENANCE ON (AWORKORDERPREVENTIVEMAINTENANCE.AWORKORDERID=AWORKORDER.AID) " + "WHERE AWORKORDERTYPE = " + ((int)crit.WoType).ToString() + likeTerm + " ORDER BY AWORKORDER.ACREATED", "aWorkorder", "", crit.Regional) //************************************************************ ); } else { dr = DBUtil.GetReaderFromSQLString( //************************************************************ DBUtil.AddRegionFilter( "SELECT AWORKORDER.AID, AWORKORDER.ATEMPLATEDESCRIPTION, " + "AWORKORDERQUOTE.AQUOTENUMBER, " + "AWORKORDERSERVICE.ASERVICENUMBER, " + "AWORKORDERPREVENTIVEMAINTENANCE.APREVENTIVEMAINTENANCENUMBER " + "FROM AWORKORDER " + "LEFT OUTER JOIN AWORKORDERQUOTE ON (AWORKORDERQUOTE.AWORKORDERID=AWORKORDER.AID) " + "LEFT OUTER JOIN AWORKORDERSERVICE ON (AWORKORDERSERVICE.AWORKORDERID=AWORKORDER.AID) " + "LEFT OUTER JOIN AWORKORDERPREVENTIVEMAINTENANCE ON (AWORKORDERPREVENTIVEMAINTENANCE.AWORKORDERID=AWORKORDER.AID) " + "WHERE AWORKORDERTYPE = " + ((int)crit.WoType).ToString() + " ORDER BY AWORKORDER.ACREATED", "aWorkorder", "", crit.Regional) //************************************************************ ); } } while (dr.Read()) { //******************************************* info = new TemplatePickListInfo(); info.mID = dr.GetGuid("aID"); int nNumber = 0; switch (crit.WoType) { case WorkorderTypes.TemplateService: nNumber = dr.GetInt32("ASERVICENUMBER"); break; case WorkorderTypes.TemplateQuote: nNumber = dr.GetInt32("AQUOTENUMBER"); break; case WorkorderTypes.TemplatePreventiveMaintenance: nNumber = dr.GetInt32("APREVENTIVEMAINTENANCENUMBER"); break; } //case 1712 info.mDescription = dr.GetString("ATEMPLATEDESCRIPTION") + " - " + nNumber.ToString(); 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 WorkorderTypes WoType; public Guid ID; public bool Regional; public Criteria(string _searchTerm, WorkorderTypes _WoType, Guid _ID, bool _Regional) { WoType = _WoType; ID = _ID; Regional = _Regional; SearchTerm = _searchTerm; } } #endregion }//end TemplatePickList }//end Descriptionspace GZTW.AyaNova.BLL