/////////////////////////////////////////////////////////// // DashBoardInfo.cs // Implementation of Class DashBoardInfo // CSLA type: Read-only object // Created on: 09-Jan-2012 // Object design: John / Joyce // Coded: John 09-Jan-2012 /////////////////////////////////////////////////////////// using System; using System.Data; using CSLA.Data; using GZTW.Data; using CSLA; using System.Threading; using CSLA.Security; using System.Collections.Generic; namespace GZTW.AyaNova.BLL { #pragma warning disable 1591 /// /// Fetches all information for Dashboard form / page /// [Serializable] public class DashBoardInfo : ReadOnlyBase { private const int DASHBOARDMAXLISTITEMS = 3;//List items plus one more for the More... item /// /// Private constructor to prevent direct instantiation /// private DashBoardInfo() { ListCriteria = new Dictionary(10); myOverdueList = new List(DASHBOARDMAXLISTITEMS + 1); myNewMemosList = new List(DASHBOARDMAXLISTITEMS + 1); myRemindersList = new List(DASHBOARDMAXLISTITEMS + 1); myServiceRateSummaryList = new List(DASHBOARDMAXLISTITEMS + 1); myScheduledList = new List(DASHBOARDMAXLISTITEMS + 1); compOverdueList = new List(DASHBOARDMAXLISTITEMS + 1); compNotAssignedList = new List(DASHBOARDMAXLISTITEMS + 1); compServiceRequestsList = new List(DASHBOARDMAXLISTITEMS + 1); compServiceRateSummaryList = new List(DASHBOARDMAXLISTITEMS + 1); compScheduledList = new List(DASHBOARDMAXLISTITEMS + 1); } #region props public string CurrentUserNameFormatted { get; private set; } public string CurrentCompanyOrRegionName { get; private set; } public Dictionary ListCriteria { get; private set; } #region "My" properties public bool HasMyOverdueList { get { return myOverdueList.Count > 0; } } public bool HasMyNewMemoList { get { return myNewMemosList.Count > 0; } } public bool HasMyReminderList { get { return myRemindersList.Count > 0; } } public bool HasMyServiceRateSummaryList { get { return myServiceRateSummaryList.Count > 0; } } public bool HasMyScheduledList { get { return myScheduledList.Count > 0; } } /// /// Should the "my" panel be shown /// public bool MyPanelVisible { get { return (HasMyOverdueList || HasMyNewMemoList || HasMyReminderList || HasMyScheduledList || HasMyServiceRateSummaryList); } } public List myOverdueList { get; private set; } public List myNewMemosList { get; private set; } public List myRemindersList { get; private set; } public List myServiceRateSummaryList { get; private set; } public List myScheduledList { get; private set; } #endregion "my" props #region "Comp" properties public bool HasCompOverdueList { get { return compOverdueList.Count > 0; } } public bool HasCompNotAssignedList { get { return compNotAssignedList.Count > 0; } } public bool HasCompServiceRequestList { get { return compServiceRequestsList.Count > 0; } } public bool HasCompServiceRateSummaryList { get { return compServiceRateSummaryList.Count > 0; } } public bool HasCompScheduledList { get { return compScheduledList.Count > 0; } } /// /// Should the "Company / Region" panel be shown /// public bool CompPanelVisible { get { return (HasCompOverdueList || HasCompNotAssignedList || HasCompServiceRequestList || HasCompScheduledList || HasCompServiceRateSummaryList); } } public List compOverdueList { get; private set; } public List compNotAssignedList { get; private set; } public List compServiceRequestsList { get; private set; } public List compServiceRateSummaryList { get; private set; } public List compScheduledList { get; private set; } #endregion "comp" props #endregion props public static DashBoardInfo Get(string More) { bool FetchScheduleableUserInfo = true; if (User.IsAdmin) FetchScheduleableUserInfo = false; if (User.CurrentUserType != UserTypes.Schedulable) FetchScheduleableUserInfo = false; DashBoardInfo di = new DashBoardInfo(); DashBoardInfoItem MoreItem = new DashBoardInfoItem(RootObjectTypes.Nothing, Guid.Empty, More); di.CurrentUserNameFormatted = UserPickList.GetListOfOneSpecificUser(User.CurrentThreadUserID)[0].Name; di.CurrentCompanyOrRegionName = AyaBizUtils.REGTO; if (!User.CurrentUserIsInDefaultRegion) di.CurrentCompanyOrRegionName = NameFetcher.GetItem(new TypeAndID(RootObjectTypes.Region, User.CurrentUserRegionID)).RecordName; #region "My" lists if (FetchScheduleableUserInfo) { if (AyaBizUtils.Right("Object.WorkorderService") > (int)SecurityLevelTypes.NoAccess) { #region My overdue { string crit = " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " "; string critSub = " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n"; di.ListCriteria.Add("MyOverdue", critSub);//used to filter grid list in UI when user clicks More... list item WorkorderServiceScheduledUserList l = WorkorderServiceScheduledUserList.Get(crit, DASHBOARDMAXLISTITEMS, null); if (l.Count > 0) { int max = Max(l.Count); for (int x = 0; x < max; x++) { di.myOverdueList.Add(new DashBoardInfoItem(l[x])); } if (l.Count == DASHBOARDMAXLISTITEMS) di.myOverdueList.Add(MoreItem); } } #endregion my overdue #region My Scheduled items list { string crit = " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " "; string critSub = " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n"; di.ListCriteria.Add("MyScheduled", critSub);//used to filter grid list in UI when user clicks More... list item WorkorderServiceScheduledUserList l = WorkorderServiceScheduledUserList.Get(crit, DASHBOARDMAXLISTITEMS, null); if (l.Count > 0) { int max = Max(l.Count); for (int x = 0; x < max; x++) { di.myScheduledList.Add(new DashBoardInfoItem(l[x])); } if (l.Count == DASHBOARDMAXLISTITEMS) di.myScheduledList.Add(MoreItem); } } #endregion my scheduled } #region My Service rate summary { DashboardServiceRateBalanceFetcher l = DashboardServiceRateBalanceFetcher.GetItem(User.CurrentThreadUserID, true); di.myServiceRateSummaryList.Add(new DashBoardInfoItem(LocalizedTextTable.GetLocalizedTextDirect("UI.Label.DateRange.Today") + " = " + l.Today.ToString())); di.myServiceRateSummaryList.Add(new DashBoardInfoItem(LocalizedTextTable.GetLocalizedTextDirect("UI.Label.DateRange.Yesterday") + " = " + l.Yesterday.ToString())); di.myServiceRateSummaryList.Add(new DashBoardInfoItem(LocalizedTextTable.GetLocalizedTextDirect("UI.Label.DateRange.ThisWeek") + " = " + l.ThisWeek.ToString())); di.myServiceRateSummaryList.Add(new DashBoardInfoItem(LocalizedTextTable.GetLocalizedTextDirect("UI.Label.DateRange.ThisMonth") + " = " + l.ThisMonth.ToString())); di.myServiceRateSummaryList.Add(new DashBoardInfoItem(LocalizedTextTable.GetLocalizedTextDirect("UI.Label.DateRange.ThisYear") + " = " + l.ThisYear.ToString())); } #endregion my service rate summary if (AyaBizUtils.Right("Object.Memo") > (int)SecurityLevelTypes.NoAccess) { #region My newest memos { string crit = " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " "; string critSub = " \r\n" + " \r\n" + " \r\n"; di.ListCriteria.Add("MyNewMemos", critSub);//used to filter grid list in UI when user clicks More... list item MemoList l = MemoList.Get(crit, DASHBOARDMAXLISTITEMS, null); if (l.Count > 0) { int max = Max(l.Count); for (int x = 0; x < max; x++) { di.myNewMemosList.Add(new DashBoardInfoItem(l[x])); } if (l.Count == DASHBOARDMAXLISTITEMS) di.myNewMemosList.Add(MoreItem); } } #endregion } if (AyaBizUtils.Right("Object.ScheduleMarker") > (int)SecurityLevelTypes.NoAccess) { #region My reminders { DashboardReminderList l = DashboardReminderList.GetList(DASHBOARDMAXLISTITEMS); if (l.Count > 0) { int max = Max(l.Count); for (int x = 0; x < max; x++) { di.myRemindersList.Add(new DashBoardInfoItem(l[x])); } //Nowhere really to send them as it's not based on a grid so //unless we send them to the schedule screen then this shouldn't be here //if(l.Count==DASHBOARDMAXLISTITEMS) // di.myRemindersList.Add(MoreItem); } } #endregion my reminders } }//end of if FetchScheduleableUserInfo #endregion my lists #region "Company" lists { if (!AyaBizUtils.Lite) { if (AyaBizUtils.Right("Object.WorkorderService") > (int)SecurityLevelTypes.NoAccess) { #region Company - Not Assigned { string crit = " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " "; string critSub = " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n"; di.ListCriteria.Add("CompanyNotAssigned", critSub);//used to filter grid list in UI when user clicks More... list item WorkorderServiceScheduledUserList l = WorkorderServiceScheduledUserList.Get(crit, DASHBOARDMAXLISTITEMS, null); if (l.Count > 0) { int max = Max(l.Count); for (int x = 0; x < max; x++) { di.compNotAssignedList.Add(new DashBoardInfoItem(l[x])); } if (l.Count == DASHBOARDMAXLISTITEMS) di.compNotAssignedList.Add(MoreItem); } } #endregion Company not assigned #region Company overdue { string crit = " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " "; string critSub = " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n"; di.ListCriteria.Add("CompanyOverdue", critSub);//used to filter grid list in UI when user clicks More... list item WorkorderServiceScheduledUserList l = WorkorderServiceScheduledUserList.Get(crit, DASHBOARDMAXLISTITEMS, null); if (l.Count > 0) { int max = Max(l.Count); for (int x = 0; x < max; x++) { di.compOverdueList.Add(new DashBoardInfoItem(l[x])); } if (l.Count == DASHBOARDMAXLISTITEMS) di.compOverdueList.Add(MoreItem); } } #endregion my overdue #region Company Scheduled / next items list { string crit = " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " "; string critSub = " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n"; di.ListCriteria.Add("CompanyNext", critSub);//used to filter grid list in UI when user clicks More... list item WorkorderServiceScheduledUserList l = WorkorderServiceScheduledUserList.Get(crit, DASHBOARDMAXLISTITEMS, null); if (l.Count > 0) { int max = Max(l.Count); for (int x = 0; x < max; x++) { di.compScheduledList.Add(new DashBoardInfoItem(l[x])); } if (l.Count == DASHBOARDMAXLISTITEMS) di.compScheduledList.Add(MoreItem); } } #endregion my scheduled } #region Company / region Service rate summary { DashboardServiceRateBalanceFetcher l = DashboardServiceRateBalanceFetcher.GetItem(User.CurrentThreadUserID, false); di.compServiceRateSummaryList.Add(new DashBoardInfoItem(LocalizedTextTable.GetLocalizedTextDirect("UI.Label.DateRange.Today") + " = " + l.Today.ToString())); di.compServiceRateSummaryList.Add(new DashBoardInfoItem(LocalizedTextTable.GetLocalizedTextDirect("UI.Label.DateRange.Yesterday") + " = " + l.Yesterday.ToString())); di.compServiceRateSummaryList.Add(new DashBoardInfoItem(LocalizedTextTable.GetLocalizedTextDirect("UI.Label.DateRange.ThisWeek") + " = " + l.ThisWeek.ToString())); di.compServiceRateSummaryList.Add(new DashBoardInfoItem(LocalizedTextTable.GetLocalizedTextDirect("UI.Label.DateRange.ThisMonth") + " = " + l.ThisMonth.ToString())); di.compServiceRateSummaryList.Add(new DashBoardInfoItem(LocalizedTextTable.GetLocalizedTextDirect("UI.Label.DateRange.ThisYear") + " = " + l.ThisYear.ToString())); } #endregion my service rate summary if (AyaBizUtils.Right("Object.ClientServiceRequest") > (int)SecurityLevelTypes.NoAccess) { #region Company open client service requests { string crit = " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " "; string critSub = " \r\n" + " \r\n" + " \r\n"; di.ListCriteria.Add("CompanyNewServiceRequests", critSub);//used to filter grid list in UI when user clicks More... list item ClientClientServiceRequestList l = ClientClientServiceRequestList.Get(crit, DASHBOARDMAXLISTITEMS, null); if (l.Count > 0) { int max = Max(l.Count); for (int x = 0; x < max; x++) { di.compServiceRequestsList.Add(new DashBoardInfoItem(l[x])); } if (l.Count == DASHBOARDMAXLISTITEMS) di.compServiceRequestsList.Add(MoreItem); } } #endregion my overdue } //?? contracts about to expire ?? //?? Maybe this: active banked service at zero or negative ?? //?? Average response time ?? } } #endregion company lists return di; } private static int Max(int listCount) { if (listCount < DASHBOARDMAXLISTITEMS) return listCount; else return DASHBOARDMAXLISTITEMS; } }//eoc /// /// Used internally to populate dashboard lists /// public class DashBoardInfoItem { public TypeAndID id { get; set; } public string item { get; set; } public DashBoardInfoItem(string itemDescription) { id = new TypeAndID(RootObjectTypes.Nothing, Guid.Empty); item = itemDescription; } public DashBoardInfoItem(RootObjectTypes objectType, Guid objectId, string itemDescription) { id = new TypeAndID(objectType, objectId); item = itemDescription; } public DashBoardInfoItem(object listInfoObject) { if (listInfoObject is WorkorderServiceScheduledUserList.WorkorderServiceScheduledUserListInfo) { WorkorderServiceScheduledUserList.WorkorderServiceScheduledUserListInfo i = (WorkorderServiceScheduledUserList.WorkorderServiceScheduledUserListInfo)listInfoObject; id = new TypeAndID(RootObjectTypes.WorkorderItemScheduledUser, i.LT_WorkorderItemScheduledUser_Label_ID); item = i.LT_WorkorderItemScheduledUser_Label_StartDate.ToString() + " " + i.LT_O_Workorder.Display + " " + i.LT_O_Client.Display + " " + i.LT_WorkorderItem_Label_Summary.Replace('\r', ' ').Replace("\n", ""); } else if (listInfoObject is MemoList.MemoListInfo) { MemoList.MemoListInfo i = (MemoList.MemoListInfo)listInfoObject; id = new TypeAndID(RootObjectTypes.Memo, i.ID); item = i.LT_Memo_Label_Sent.ToString() + " " + i.LT_Memo_Label_FromID.Display + " " + i.LT_Memo_Label_Subject; } else if (listInfoObject is DashboardReminderList.DashboardReminderListInfo) { DashboardReminderList.DashboardReminderListInfo i = (DashboardReminderList.DashboardReminderListInfo)listInfoObject; id = new TypeAndID(RootObjectTypes.ScheduleMarker, i.SourceObjectID); item = i.StartDateTime.ToString() + " " + i.Subject; } else if (listInfoObject is ClientClientServiceRequestList.ClientClientServiceRequestListInfo) { ClientClientServiceRequestList.ClientClientServiceRequestListInfo i = (ClientClientServiceRequestList.ClientClientServiceRequestListInfo)listInfoObject; id = new TypeAndID(RootObjectTypes.ClientServiceRequest, i.ID); item = i.LT_Common_Label_Created.ToString() + " " + i.LT_O_Client + " " + i.LT_O_ClientServiceRequest + " " + i.LT_ClientServiceRequest_Label_RequestedBy; } } } #pragma warning restore 1591 }//ens