/////////////////////////////////////////////////////////// // WorkorderPMList.cs // Implementation of Class WorkorderPMList // CSLA type: Read only collection // Created on: 17-Nov-2005 // Object design: John // Coded: 17-Nov-2005 /////////////////////////////////////////////////////////// using System; using System.Data; using GZTW.Data; using CSLA.Data; using CSLA; using System.Collections.Generic; namespace GZTW.AyaNova.BLL { #pragma warning disable 1591 /// /// Read only list of objects used in grids and summary reports /// [Serializable] public class WorkorderPMList : ReadOnlyCollectionBase { #region Data structure (Unique to this object, can't copy to other pm lists (argghh)) /// /// /// [Serializable] public struct WorkorderPMListInfo { internal GridNameValueCellItem mPMWorkorder; internal GridNameValueCellItem mClient; internal GridNameValueCellItem mProject; internal GridNameValueCellItem mRegion; internal GridNameValueCellItem mCategory; internal string mInternalReferenceNumber; internal string mCustomerReferenceNumber; internal string mCustomerContactName; internal string mSummary; internal bool mOnsite; internal SmartDate mStopGeneratingDate; internal SmartDate mNextServiceDate; internal SmartDate mCreatedDate; internal AyaDayOfWeek mDayOfTheWeek; internal bool mActive; internal int mGenerateSpan; internal int mThresholdSpan; internal AyaUnitsOfTime mGenerateSpanUnit; internal AyaUnitsOfTime mThresholdSpanUnit; //----------------------case 636--------------------------------- internal GridNameValueCellItem mClientGroup; internal GridNameValueCellItem mDispatchZone; internal GridNameValueCellItem mHeadOffice; [SqlColumnNameAttribute("aClientGroup.aName", "aClientGroup.aID"), Display(DisplayType.Button, RootObjectType = RootObjectTypes.ClientGroup)] public GridNameValueCellItem LT_O_ClientGroup { get { return mClientGroup; } } [SqlColumnNameAttribute("aDispatchZone.aName", "aDispatchZone.aID"), Display(DisplayType.Button, RootObjectType = RootObjectTypes.DispatchZone)] public GridNameValueCellItem LT_O_DispatchZone { get { return mDispatchZone; } } [SqlColumnNameAttribute("aHeadOffice.aName", "aClient.aHeadOfficeID"), Display(DisplayType.Button, RootObjectType = RootObjectTypes.HeadOffice)] public GridNameValueCellItem LT_O_HeadOffice { get { return mHeadOffice; } } //---------------case 636--------------------------------- //==================================================================================== [SqlColumnNameAttribute("aWorkorderPreventiveMaintenance.aPreventiveMaintenanceNumber", "aWorkorder.aID"), Display(DisplayType.Button, RootObjectType = RootObjectTypes.WorkorderPreventiveMaintenance, CompareAs=CompareType.StringToInt32)] public GridNameValueCellItem LT_O_WorkorderPreventiveMaintenance { get { return mPMWorkorder; } } [SqlColumnNameAttribute("aClient.aName", "aClient.aID"), Display(DisplayType.Button, RootObjectType = RootObjectTypes.Client)] public GridNameValueCellItem LT_O_Client { get { return mClient; } } [SqlColumnNameAttribute("aProject.aName", "aProject.aID"), Display(DisplayType.Button, RootObjectType = RootObjectTypes.Project)] public GridNameValueCellItem LT_O_Project { get { return mProject; } } [SqlColumnNameAttribute("aRegion.aName", "aRegion.aID"), Display(DisplayType.Button, RootObjectType = RootObjectTypes.Region)] public GridNameValueCellItem LT_O_Region { get { return mRegion; } } [SqlColumnNameAttribute("aWorkorderCategory.aName", "aWorkorderCategory.aID"), Display(DisplayType.Button, RootObjectType = RootObjectTypes.WorkorderCategory)] public GridNameValueCellItem LT_O_WorkorderCategory { get { return mCategory; } } [Display(DisplayType.Text)] public string LT_Workorder_Label_InternalReferenceNumber { get { return mInternalReferenceNumber; } } [Display(DisplayType.Text)] public string LT_Workorder_Label_CustomerReferenceNumber { get { return mCustomerReferenceNumber; } } [Display(DisplayType.Text)] public string LT_Workorder_Label_CustomerContactName { get { return mCustomerContactName; } } [Display(DisplayType.Text)] public string LT_Workorder_Label_Summary { get { return mSummary; } } [Display(DisplayType.TrueFalse)] public bool LT_Workorder_Label_Onsite { get { return mOnsite; } } [Display(DisplayType.DateTime)] public object LT_WorkorderPreventiveMaintenance_Label_StopGeneratingDate { get { return mStopGeneratingDate.DBValue; } } [Display(DisplayType.DateTime)] public object LT_WorkorderPreventiveMaintenance_Label_NextServiceDate { get { return mNextServiceDate.DBValue; } } [SqlColumnNameAttribute("aWorkorderPreventiveMaintenance.aCreated"), Display(DisplayType.DateTime)] public object LT_Common_Label_Created { get { return mCreatedDate.DBValue; } } [Display(DisplayType.ListAyaDayOfWeek)] public AyaDayOfWeek LT_WorkorderPreventiveMaintenance_Label_DayOfTheWeek { get { return mDayOfTheWeek; } } [SqlColumnNameAttribute("aWorkorderPreventiveMaintenance.AACTIVE"), Display(DisplayType.TrueFalse)] public bool LT_Common_Label_Active { get { return mActive; } } [Display(DisplayType.WholeNumber)] public int LT_WorkorderPreventiveMaintenance_Label_GenerateSpan { get { return mGenerateSpan; } } [Display(DisplayType.WholeNumber)] public int LT_WorkorderPreventiveMaintenance_Label_ThresholdSpan { get { return mThresholdSpan; } } [Display(DisplayType.ListAyaUnitsOfTime)] public AyaUnitsOfTime LT_WorkorderPreventiveMaintenance_Label_GenerateSpanUnit { get { return mGenerateSpanUnit; } } [Display(DisplayType.ListAyaUnitsOfTime)] public AyaUnitsOfTime LT_WorkorderPreventiveMaintenance_Label_ThresholdSpanUnit { get { return mThresholdSpanUnit; } } /// /// /// /// public bool Equals(WorkorderPMListInfo obj) { return this.mPMWorkorder.Value.Equals(obj.mPMWorkorder.Value); } }//end WorkorderPMListInfo #endregion #region Constructor protected WorkorderPMList() { // AllowSort=false; // AllowFind=true; // AllowEdit=false; // AllowNew=false; // AllowRemove=false; } #endregion #region Business properties and methods /// /// Get item by index /// /// public WorkorderPMListInfo this[int Item] { get { return (WorkorderPMListInfo) List[Item]; } } /// /// Returns display text that matches passed in itemid value /// /// public string this[Guid ItemID] { get { foreach (WorkorderPMListInfo child in List) { if(child.mPMWorkorder.Value==ItemID) return child.ToString(); } return "Missing: "+ItemID.ToString(); } } #endregion #region contains /// /// Check if item in collection /// /// public bool Contains(WorkorderPMListInfo obj) { foreach (WorkorderPMListInfo child in List) { if(child.Equals(obj)) return true; } return false; } #endregion #region Reporting and shared UI editor helpers /// /// Returns the report key which is a property of /// reports used to link all reports that can be used /// with a particular data source. /// public static string ReportKey { get { return "WorkorderPMList"; } } /// /// Returns the Detailed report key /// which is used to determine which reports and objects /// will be used for detailed reports /// /// If empty string then indicates there is no detailed report object or reports /// public static string DetailedReportKey { get { return WorkorderPMDetailedReportData.ReportKey; } } /// /// Base object that this list is reporting on /// used by shared UI editor to instantiate new objects /// when user selects new in UI elements that display this list /// /// (I.E. when user clicks on new in a read only list grid, this is the object type created) /// public static RootObjectTypes BaseObjectType { get { return RootObjectTypes.WorkorderPreventiveMaintenance; } } /// /// The Type of the struct used to store list records /// Used to fetch the custom display attributes of the fields /// contained within the record to modify the grid display accordingly /// /// public static Type ListRecordType { get { return typeof(WorkorderPMListInfo); } } /// /// Locale key so that generic list editor /// UI code knows what title to give the list in a /// grid /// public string LocaleKey { get { return "WorkorderPreventiveMaintenance.Label.List"; } } /// /// Field that contains the ID of the objects /// that are the basis of this list. /// /// Used for compiling an ID list for reporting from user /// selections in a grid. /// public static string IDField { get { return "LT_O_WorkorderPreventiveMaintenance"; } } /// /// Same as IDField but for detailed reports /// public static string IDFieldDetailed { get { return IDField; } } #endregion #region Static methods /// /// Internal method used by list factory /// internal static WorkorderPMList Get(string Filter, int MaxRecords, List IDList) { return (WorkorderPMList)DataPortal.Fetch(new Criteria(Filter, IDList, MaxRecords)); } /// /// Get all WorkorderPreventiveMaintenance (filtered by crit) /// /// Use AyaNova UI to easily build xmlCriteria and Ctrl-Alt-g keyboard command to display it for use in your code /// list of objects public static WorkorderPMList GetList(string xmlCriteria) { return (WorkorderPMList) DataPortal.Fetch(new Criteria(xmlCriteria,null,-1)); } //added for case 1975 RI /// /// Get MaxRecord PM's filtered by criteria /// /// /// /// public static WorkorderPMList GetList(string xmlCriteria, int MaxRecords) { return (WorkorderPMList)DataPortal.Fetch(new Criteria(xmlCriteria, null, MaxRecords)); } /// /// Takes a single ID and returns a "list" of one object /// /// ID of Workorder object /// list of objects public static WorkorderPMList GetListForSingleItem(Guid WorkorderID) { //Case 556 List l = new List(); l.Add(WorkorderID); return GetListFromIDList(l); } /// /// Get's all workorders in the provided List of workorder id's /// (used for pick and choose printing etc) /// /// Generic list of Guid's of workorders /// list of objects public static WorkorderPMList GetListFromIDList(List WorkorderIDList) {//case 554 //Handle empty list if (WorkorderIDList.Count == 0) return new WorkorderPMList(); return (WorkorderPMList)DataPortal.Fetch(new Criteria("", WorkorderIDList, -1)); } /// /// Return an empty list /// used for initializing grid /// /// public static WorkorderPMList GetEmptyList() { return new WorkorderPMList(); } #endregion #region DAL DATA ACCESS /// /// protected override void DataPortal_Fetch(object Criteria) { Criteria crit = (Criteria)Criteria; SafeDataReader dr = null; try { DBCommandWrapper cm = null; //Base query string q= //************************************************************ "SELECT ~MAXRECS~ aWorkorder.aID AS aWorkorderID, aClient.aName " + "AS aClientName, aClient.aID AS ACLIENTID, " + " aWorkorder.aInternalReferenceNumber, aWorkorder.aCustomerReferenceNumber, " + " aProject.aName " + "AS aProjectName, aProject.aID AS aProjectID, " + " aRegion.aName AS aRegionName, aRegion.aID " + "AS aRegionID, aWorkorder.aCustomerContactName, " + " aWorkorder.aSummary, aWorkorderCategory.aName " + "AS aWorkorderCategoryName, aWorkorderCategory.aID " + "AS aWorkorderCategoryID, aWorkorder.aOnsite, " + " aWorkorderPreventiveMaintenance.aStopGeneratingDate, " + " aWorkorderPreventiveMaintenance.aDayOfTheWeek, " + " aWorkorderPreventiveMaintenance.AACTIVE, " + " aWorkorderPreventiveMaintenance.aPreventiveMaintenanceNumber, " + " aWorkorderPreventiveMaintenance.aNextServiceDate, " + " aWorkorderPreventiveMaintenance.aGenerateSpan, " + " aWorkorderPreventiveMaintenance.aGenerateSpanUnit, " + " aWorkorderPreventiveMaintenance.aThresholdSpan, " + " aWorkorderPreventiveMaintenance.aThresholdSpanUnit, " + " aWorkorderPreventiveMaintenance.aCreated, " + " aClient.aHeadOfficeID, aHeadOffice.aName as aHeadOfficeName, " + //case 636 " aClient.aDispatchZoneID, aDispatchZone.aName AS aDispatchZoneName, " +//case 636 " aClient.aClientGroupID, aClientGroup.aName AS aClientGroupName " +//case 636 "FROM " + " AWORKORDER " + //" LEFT OUTER JOIN AREGION ON (ACLIENT.AREGIONID=AREGION.AID) " + " LEFT OUTER JOIN AWORKORDERCATEGORY ON (AWORKORDER.AWORKORDERCATEGORYID=AWORKORDERCATEGORY.AID) " + " LEFT OUTER JOIN APROJECT ON (AWORKORDER.APROJECTID=APROJECT.AID) " + " INNER JOIN aWorkorderPreventiveMaintenance ON (aWorkorderPreventiveMaintenance.AWORKORDERID=AWORKORDER.AID) " + " LEFT OUTER JOIN ACLIENT ON (AWORKORDER.ACLIENTID=ACLIENT.AID) " + " LEFT OUTER JOIN ADISPATCHZONE ON (ACLIENT.ADISPATCHZONEID=ADISPATCHZONE.AID) " +//case 636 " LEFT OUTER JOIN ACLIENTGROUP ON (ACLIENT.ACLIENTGROUPID=ACLIENTGROUP.AID) " +//case 636 " LEFT OUTER JOIN AHEADOFFICE ON (ACLIENT.AHEADOFFICEID=AHEADOFFICE.AID) " +//case 636 " LEFT OUTER JOIN AREGION ON (ACLIENT.AREGIONID=AREGION.AID) " +//Changed:16-June-2006 Moved here "WHERE (aWorkorder.aWorkorderType = 2) "; //************************************************************ if (crit.MaxRecords > 0) q = q.Replace("~MAXRECS~", "TOP " + crit.MaxRecords.ToString()); else q = q.Replace("~MAXRECS~", ""); //list or grid criteria? if (crit.IDList != null) { //Case 556 System.Text.StringBuilder sbIN = new System.Text.StringBuilder(); sbIN.Append(" AND (aWorkorder.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(")) "); cm = DBUtil.DB.GetSqlStringCommandWrapper(q + sbIN.ToString() + " " + AyaBizUtils.GetGridSortOrderColumns(crit.CriteriaXML)); } else { //Grid criteria cm = DBUtil.DB.GetSqlStringCommandWrapper(DBUtil.AddRegionFilter(//case 58 q + AyaBizUtils.GetGridColumnCriteria(crit.CriteriaXML,false) + " " + AyaBizUtils.GetGridSortOrderColumns(crit.CriteriaXML) ) ); } dr=new SafeDataReader(DBUtil.DB.ExecuteReader(cm)); while(dr.Read()) { //******************************************* WorkorderPMListInfo info=new WorkorderPMListInfo(); info.mPMWorkorder=new GridNameValueCellItem( dr.GetGuid("aWorkorderID"), dr.GetInt32("aPreventiveMaintenanceNumber").ToString(), RootObjectTypes.Workorder); info.mClient=new GridNameValueCellItem( dr.GetGuid("aClientID"), dr.GetString("aClientName"), RootObjectTypes.Client); info.mProject=new GridNameValueCellItem( dr.GetGuid("aProjectID"), dr.GetString("aProjectName"), RootObjectTypes.Project); info.mRegion=new GridNameValueCellItem( dr.GetGuid("aRegionID"), dr.GetString("aRegionName"), RootObjectTypes.Region); info.mCategory=new GridNameValueCellItem( dr.GetGuid("aWorkorderCategoryID"), dr.GetString("aWorkorderCategoryName"), RootObjectTypes.WorkorderCategory); info.mInternalReferenceNumber=dr.GetString("aInternalReferenceNumber"); info.mCustomerReferenceNumber=dr.GetString("aCustomerReferenceNumber"); info.mCustomerContactName=dr.GetString("aCustomerContactName"); info.mSummary=dr.GetString("aSummary"); info.mOnsite=dr.GetBoolean("aOnsite"); info.mStopGeneratingDate=DBUtil.ToLocal(dr.GetSmartDate("aStopGeneratingDate")); info.mNextServiceDate=DBUtil.ToLocal(dr.GetSmartDate("aNextServiceDate")); info.mCreatedDate=DBUtil.ToLocal(dr.GetSmartDate("aCreated")); info.mDayOfTheWeek=(AyaDayOfWeek)dr.GetInt16("aDayOfTheWeek"); info.mActive=dr.GetBoolean("AACTIVE"); info.mGenerateSpan=dr.GetInt32("aGenerateSpan"); info.mThresholdSpan=dr.GetInt32("aThresholdSpan"); info.mGenerateSpanUnit=(AyaUnitsOfTime)dr.GetInt16("aGenerateSpanUnit"); info.mThresholdSpanUnit=(AyaUnitsOfTime)dr.GetInt16("aThresholdSpanUnit"); //-------case 636----------------------------- info.mHeadOffice = new GridNameValueCellItem( dr.GetGuid("aHeadOfficeID"), dr.GetString("aHeadOfficeName"), RootObjectTypes.HeadOffice); info.mDispatchZone = new GridNameValueCellItem( dr.GetGuid("aDispatchZoneID"), dr.GetString("aDispatchZoneName"), RootObjectTypes.DispatchZone); info.mClientGroup = new GridNameValueCellItem( dr.GetGuid("aClientGroupID"), dr.GetString("aClientGroupName"), RootObjectTypes.ClientGroup); //-------case 636----------------------------- InnerList.Add(info); //******************************************* } } finally { if(dr!=null) dr.Close(); } } #endregion #region criteria /// /// Criteria for identifying existing object /// [Serializable] private class Criteria { public List IDList; public string CriteriaXML; public int MaxRecords; public Criteria(string _CriteriaXML, List _IDList, int _MaxRecords) { CriteriaXML = _CriteriaXML; IDList = _IDList; MaxRecords = _MaxRecords; } } #endregion }//end WorkorderPMList #pragma warning restore 1591 }//end namespace GZTW.AyaNova.BLL