///////////////////////////////////////////////////////////
// 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