2024-03-26 15:56:31 +08:00

896 lines
35 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.Xml;
using System.Web;
using IronIntel.Contractor.Users;
using Foresight.ServiceModel;
using Foresight.Fleet.Services.Styles;
using Foresight.Fleet.Services;
using Foresight.Fleet.Services.User;
using Foresight;
using IronIntel.Contractor.Machines;
using Foresight.Fleet.Services.JobSite;
using Foresight.Fleet.Services.Asset;
using System.Web.UI.WebControls;
using FI.FIC.Contracts.DataObjects.BaseObject;
using System.Security.Cryptography;
using Foresight.Fleet.Services.Customer;
namespace IronIntel.Contractor.Site.SystemSettings
{
public class SystemSettingsBasePage : ContractorBasePage
{
protected bool IsDev
{
get
{
var session = GetCurrentLoginSession();
if (session != null)
{
if (Helper.DevAccounts.Contains(session.User.ID, StringComparer.OrdinalIgnoreCase))
return true;
}
return false;
}
}
protected void ProcessRequest(string methodName)
{
object result = null;
try
{
if (methodName != null)
{
switch (methodName.ToUpper())
{
case "GETCOMPANYUISTYLES":
result = GetCompanyUIStyles();
break;
case "SETCOMPANYUISTYLE":
result = SetCompanyUIStyle();
break;
case "DELETECOMPANYUISTYLE":
result = DeleteCompanyUIStyle();
break;
case "GETUSEROPTIONS":
result = GetUserOptions();
break;
case "SAVEUSEROPTIONS":
result = SaveUserOptions();
break;
case "GETTIMEZONES":
result = GetTimeZones();
break;
case "GETSYSTEMOPTIONS":
result = GetSystemOptions();
break;
case "SAVESYSTEMOPTIONS":
result = SaveSystemOptions();
break;
case "GETLANGUAGES":
result = GetLanguages();
break;
case "GETSYSTEMUNITOFODOMETER":
result = GetSystemUnitOfOdometer();
break;
case "GETASSETGROUPLIST":
result = GetAssetGroupList();
break;
case "GETJOBSITELIST":
result = GetJobsiteList();
break;
case "GETASSETTYPES":
result = GetAssetTypes();
break;
case "GETFILTERTEMPLATES":
result = GetFilterTemplates();
break;
case "GETFILTERTEMPLATEITEM":
result = GetFilterTemplateItem();
break;
case "GETUSERASSIGNEDASSETGROUPS":
result = GetUserAssignedAssetGroups();
break;
case "GETUSERASSIGNEDJOBSITES":
result = GetUserAssignedJobsites();
break;
case "GETUSERASSIGNEDASSETTYPES":
result = GetUserAssignedAssetTypes();
break;
case "SAVEASSETALERTFILTER":
result = SaveAssetAlertFilter();
break;
}
}
}
catch (Exception ex)
{
result = ex.Message;
SystemParams.WriteLog("Error", "Settingcolor.ProcessRequest", ex.Message, ex.ToString());
}
string json = JsonConvert.SerializeObject(result);
Response.Write(json);
Response.End();
}
private object GetCompanyUIStyles()
{
try
{
var session = GetCurrentLoginSession();
if (session != null)
{
CustUIStyleList uis = CreateClient<StyleProvider>().GetCompanyUIStyles(SystemParams.CompanyID);
List<CustUIStyleItem> list = new List<CustUIStyleItem>();
foreach (CustUIStyle ui in uis)
{
CustUIStyleItem item = new CustUIStyleItem();
Helper.CloneProperty(item, ui);
list.Add(item);
}
if (list.Count() > 0)
return list.ToArray();
else
return new CustUIStyleItem[0];
}
else
{
throw new Exception("not login.");
}
}
catch (Exception ex)
{
return ex.Message;
}
}
private string SetCompanyUIStyle()
{
try
{
var session = GetCurrentLoginSession();
if (session != null)
{
string uidata = Request.Params["ClientData"];
CustUIStyleItem item = JsonConvert.DeserializeObject<CustUIStyleItem>(uidata);
item.UIStyleName = HttpUtility.HtmlDecode(item.UIStyleName);
CustUIStyle ui = new CustUIStyle();
Helper.CloneProperty(ui, item);
CreateClient<StyleProvider>().SetCompanyUIStyle(SystemParams.CompanyID, ui);
return "OK";
}
else
{
return "User being not logged in.";
}
}
catch (Exception ex)
{
return ex.Message;
}
}
private string DeleteCompanyUIStyle()
{
try
{
var session = GetCurrentLoginSession();
if (session != null)
{
string uistyleid = HttpUtility.HtmlDecode(Request.Params["ClientData"]);
int styleid = -1;
int.TryParse(uistyleid, out styleid);
CreateClient<StyleProvider>().DeleteCompanyUIStyle(SystemParams.CompanyID, styleid);
return "OK";
}
else
{
throw new Exception("not login.");
}
}
catch (Exception ex)
{
return ex.Message;
}
}
private object GetUserOptions()
{
try
{
var session = GetCurrentLoginSession();
if (session != null)
{
var up = UserParams.GetUserParams(session.SessionID, session.User.UID);
return up;
}
else
{
throw new Exception("not login.");
}
}
catch (Exception ex)
{
return ex.Message;
}
}
private object SaveUserOptions()
{
try
{
var session = GetCurrentLoginSession();
if (session != null)
{
string content = HttpUtility.HtmlDecode(Request.Params["ClientData"]);
var user = JsonConvert.DeserializeObject<UserOptionObject>(content);
var uid = session.User.UID;
UserParamInfo upi = user.UserParam;
UserParams.SetUserParams(uid, upi);
var uc = CreateClient<UserQueryClient>();
uc.UpdateUserPreferredLanguage(uid, upi.PreferredLanguage);
uc.UpdateUserTimeZone(uid, upi.TimeZone);
// save subscribe message
if (user.Subscribe != null)
{
user.Subscribe.UserIID = uid;
List<UserAlertFilter> filters = null;
if (!string.IsNullOrEmpty(user.UserAlertFilter))
{
filters = JsonConvert.DeserializeObject<List<UserAlertFilter>>(user.UserAlertFilter);
}
FI.FIC.Models.WorkspaceManager.SaveSubscribeMessageByEmail(user.Subscribe, filters, uid);
}
//FIC Alert Filter Templates
var userfilterclient = CreateClient<Foresight.Fleet.Services.User.UserFilterProvider>();
if (user.FilterTemplates != null && user.FilterTemplates.Length > 0)
{
foreach (UserFilterTemplateItem filter in user.FilterTemplates)
{
if (filter.Id < 0)
filter.Id = userfilterclient.AddFilterTemplate(SystemParams.CompanyID, uid, filter.Name);
else
userfilterclient.ChangeFilterName(SystemParams.CompanyID, filter.Id, filter.Name);
long[] assetids = null;
if (filter.Assets != null && filter.Assets.Length > 0)
assetids = filter.Assets.Select(m => m.Id).ToArray();
userfilterclient.SetAssetFilter(SystemParams.CompanyID, filter.Id, assetids);
string[] assetgroups = null;
if (filter.AssetGroups != null && filter.AssetGroups.Length > 0)
assetgroups = filter.AssetGroups.Select(m => m.GroupID).ToArray();
userfilterclient.SetAssetGroupFilter(SystemParams.CompanyID, filter.Id, assetgroups);
int[] assettypes = null;
if (filter.AssetTypes != null && filter.AssetTypes.Length > 0)
assettypes = filter.AssetTypes.Select(m => m.ID).ToArray();
userfilterclient.SetAssetTypeFilter(SystemParams.CompanyID, filter.Id, assettypes);
long[] jobsites = null;
if (filter.Jobsites != null && filter.Jobsites.Length > 0)
jobsites = filter.Jobsites.Select(m => m.ID).ToArray();
userfilterclient.SetJobSiteFilter(SystemParams.CompanyID, filter.Id, jobsites);
}
}
if (user.DeleteFilterTemplates != null && user.DeleteFilterTemplates.Length > 0)
{
foreach (int id in user.DeleteFilterTemplates)
{
userfilterclient.DeleteFilterTemplate(SystemParams.CompanyID, id);
}
}
return "OK";
}
else
{
throw new Exception("not login.");
}
}
catch (Exception ex)
{
return ex.Message;
}
}
private object SaveAssetAlertFilter()
{
try
{
var session = GetCurrentLoginSession();
if (session != null)
{
string content = HttpUtility.HtmlDecode(Request.Params["ClientData"]);
var user = JsonConvert.DeserializeObject<UserOptionObject>(content);
var uid = session.User.UID;
var userfilterclient = CreateClient<Foresight.Fleet.Services.User.UserFilterProvider>();
if (user.FilterTemplates != null && user.FilterTemplates.Length > 0)
{
foreach (UserFilterTemplateItem filter in user.FilterTemplates)
{
if (filter.Id < 0)
filter.Id = userfilterclient.AddFilterTemplate(SystemParams.CompanyID, uid, filter.Name);
else
userfilterclient.ChangeFilterName(SystemParams.CompanyID, filter.Id, filter.Name);
long[] assetids = null;
if (filter.Assets != null && filter.Assets.Length > 0)
assetids = filter.Assets.Select(m => m.Id).ToArray();
userfilterclient.SetAssetFilter(SystemParams.CompanyID, filter.Id, assetids);
string[] assetgroups = null;
if (filter.AssetGroups != null && filter.AssetGroups.Length > 0)
assetgroups = filter.AssetGroups.Select(m => m.GroupID).ToArray();
userfilterclient.SetAssetGroupFilter(SystemParams.CompanyID, filter.Id, assetgroups);
int[] assettypes = null;
if (filter.AssetTypes != null && filter.AssetTypes.Length > 0)
assettypes = filter.AssetTypes.Select(m => m.ID).ToArray();
userfilterclient.SetAssetTypeFilter(SystemParams.CompanyID, filter.Id, assettypes);
long[] jobsites = null;
if (filter.Jobsites != null && filter.Jobsites.Length > 0)
jobsites = filter.Jobsites.Select(m => m.ID).ToArray();
userfilterclient.SetJobSiteFilter(SystemParams.CompanyID, filter.Id, jobsites);
}
}
if (user.DeleteFilterTemplates != null && user.DeleteFilterTemplates.Length > 0)
{
foreach (int id in user.DeleteFilterTemplates)
{
userfilterclient.DeleteFilterTemplate(SystemParams.CompanyID, id);
}
}
return "OK";
}
else
{
throw new Exception("not login.");
}
}
catch (Exception ex)
{
return ex.Message;
}
}
private object GetTimeZones()
{
try
{
var session = GetCurrentLoginSession();
if (session != null)
{
var timezones = SystemParams.GetTimeZones();
return timezones;
}
else
{
throw new Exception("not login.");
}
}
catch (Exception ex)
{
return ex.Message;
}
}
private object GetSystemUnitOfOdometer()
{
try
{
var session = GetCurrentLoginSession();
if (session != null)
{
return SystemParams.GetStringParam("UnitOfOdometer");
}
else
{
throw new Exception("not login.");
}
}
catch (Exception ex)
{
return ex.Message;
}
}
private object GetLanguages()
{
try
{
var session = GetCurrentLoginSession();
if (session != null)
{
return CountryAndRegionCode.SupportedLanguages;
}
else
{
throw new Exception("not login.");
}
}
catch (Exception ex)
{
return ex.Message;
}
}
private object GetSystemOptions()
{
try
{
var session = GetCurrentLoginSession();
if (session != null)
{
string af = SystemParams.GetStringParam("AccuracyFilter");
double accuracyfilter = 0;
double.TryParse(af, out accuracyfilter);
string au = SystemParams.GetStringParam("AreaUnits");
int areaunits = 0;
int.TryParse(au, out areaunits);
string vu = SystemParams.GetStringParam("VolumnUnits");
int volumeunits = 0;
int.TryParse(vu, out volumeunits);
string wu = SystemParams.GetStringParam("WeightUnits");
int weightunits = 0;
int.TryParse(wu, out weightunits);
string rmd = SystemParams.GetStringParam("MFARememberMeDays");
int remembermedays = 0;
if (!int.TryParse(rmd, out remembermedays))
remembermedays = 30;
string locsourcestr = SystemParams.GetStringParam("BreadcrumbLocationSource");
int locsource = 0;
int.TryParse(locsourcestr, out locsource);
SystemOptionInfo soi = new SystemOptionInfo();
soi.TimeZone = CreateClient<CustomerProvider>().GetCustomerTimeZone(SystemParams.CompanyID);
soi.AccuracyFilter = accuracyfilter;
soi.UnitOfOdometer = SystemParams.GetStringParam("UnitOfOdometer");
soi.AcknowledgingAlerts = SystemParams.GetStringParam("AcknowledgingAlerts");
soi.LoginVerifyType = SystemParams.GetStringParam("LoginVerifyType");
soi.AreaUnits = areaunits;
soi.VolumeUnits = volumeunits;
soi.WeightUnits = weightunits;
soi.MFARememberMeDays = remembermedays;
soi.BreadcrumbLocationSource = locsource;
string connectorxml = SystemParams.GetStringParam("Connector");
soi.Connectors = ConnectorHelper.FromXML(connectorxml);
return soi;
}
else
{
throw new Exception("not login.");
}
}
catch (Exception ex)
{
return ex.Message;
}
}
private object SaveSystemOptions()
{
try
{
var session = GetCurrentLoginSession();
if (session != null)
{
string options = HttpUtility.HtmlDecode(Request.Params["ClientData"]);
SystemOptionInfo upi = JsonConvert.DeserializeObject<SystemOptionInfo>(options);
CreateClient<CustomerProvider>().SaveCustomerTimeZone(SystemParams.CompanyID, upi.TimeZone);
SystemParams.SetStringParam("CustomerTimeZoneOffset", upi.Offset.ToString());
SystemParams.SetStringParam("AccuracyFilter", upi.AccuracyFilter.ToString());
SystemParams.SetStringParam("UnitOfOdometer", upi.UnitOfOdometer);
SystemParams.SetStringParam("AcknowledgingAlerts", upi.AcknowledgingAlerts);
SystemParams.SetStringParam("AreaUnits", upi.AreaUnits.ToString());
SystemParams.SetStringParam("VolumnUnits", upi.VolumeUnits.ToString());
SystemParams.SetStringParam("WeightUnits", upi.WeightUnits.ToString());
SystemParams.SetStringParam("LoginVerifyType", upi.LoginVerifyType);
SystemParams.SetStringParam("MFARememberMeDays", upi.MFARememberMeDays.ToString());
SystemParams.SetStringParam("BreadcrumbLocationSource", upi.BreadcrumbLocationSource.ToString());
XmlDocument doc = ConnectorHelper.ToXml(upi.Connectors);
SystemParams.SetStringParam("Connector", doc.InnerXml);
return "OK";
}
else
{
throw new Exception("not login.");
}
}
catch (Exception ex)
{
return ex.Message;
}
}
#region user filter
private object GetFilterTemplates()
{
try
{
var session = GetCurrentLoginSession();
if (session != null)
{
var client = CreateClient<Foresight.Fleet.Services.User.UserFilterProvider>();
KeyValuePair<int, string>[] filters = client.GetFilterTemplates(SystemParams.CompanyID, session.User.UID);
if (filters == null && filters.Length == 0)
return new KeyValuePair<int, string>[0];
return filters;
}
else
{
return new KeyValuePair<int, string>[0];
}
}
catch (Exception ex)
{
return ex.Message;
}
}
private object GetFilterTemplateItem()
{
try
{
var clientdata = Request.Form["ClientData"];
string filteridstr = HttpUtility.HtmlDecode(clientdata);
int filterid = Convert.ToInt32(filteridstr);
var session = GetCurrentLoginSession();
if (session != null)
{
var client = CreateClient<Foresight.Fleet.Services.User.UserFilterProvider>();
string useriid = session.User.UID;
bool accessallassets = session.User.UserType >= Foresight.Fleet.Services.User.UserTypes.Admin;
if (!accessallassets)
{
Foresight.Fleet.Services.User.UserAdditionalAttribute attrs = CreateClient<Foresight.Fleet.Services.User.UserQueryClient>(SystemParams.CompanyID).GetUserAdditionalAttribute(useriid);
if (attrs != null)
accessallassets = attrs.AccessAllAssets;
}
UserFilterTemplateItem filter = new UserFilterTemplateItem();
List<AssetListItemInfo> lsasset = new List<AssetListItemInfo>();
var fassets = client.GetAssetFilter(SystemParams.CompanyID, filterid);
if (fassets != null && fassets.Length > 0)
{
var selitems = CreateClient<AssetDataAdjustClient>(SystemParams.CompanyID).GetAssetsAssignedToUser(SystemParams.CompanyID, useriid);
foreach (var ai in fassets)
{
AssetListItemInfo item = new AssetListItemInfo();
item.Id = ai.Id;
item.Name = ai.Name;
item.VIN = ai.VIN;
item.MakeName = ai.MakeName;
item.ModelName = ai.ModelName;
item.TypeName = ai.TypeName;
if (accessallassets)
lsasset.Add(item);
else
{
if (selitems != null && selitems.Length > 0 && selitems.Select(m => m.Id).Contains(ai.Id))
lsasset.Add(item);
}
}
}
filter.Assets = lsasset.ToArray();
List<MachineGroup> lsag = new List<MachineGroup>();
var fassetgroups = client.GetAssetGroupFilter(SystemParams.CompanyID, filterid);
if (fassetgroups != null && fassetgroups.Length > 0)
{
var selitems = MachineManagement.GetMachineGroupByUser(useriid).OrderBy((m) => m.GroupName).ToArray();
foreach (var kv in fassetgroups)
{
MachineGroup item = new MachineGroup();
item.GroupID = kv.Key;
item.GroupName = kv.Value;
if (accessallassets)
lsag.Add(item);
else
{
if (selitems != null && selitems.Length > 0 && selitems.Select(m => m.GroupID).Contains(kv.Key))
lsag.Add(item);
}
}
}
filter.AssetGroups = lsag.ToArray();
List<AssetType> lstp = new List<AssetType>();
var fassettypes = client.GetAssetTypeFilter(SystemParams.CompanyID, filterid);
if (fassettypes != null && fassettypes.Length > 0)
{
var selitems = MachineManagement.GetMachineTypesByUser(useriid);
foreach (var kv in fassettypes)
{
AssetType item = new AssetType();
item.ID = kv.Key;
item.Name = kv.Value;
if (accessallassets)
lstp.Add(item);
else
{
if (selitems != null && selitems.Length > 0 && selitems.Select(m => m.ID).Contains(kv.Key))
lstp.Add(item);
}
}
}
filter.AssetTypes = lstp.ToArray();
List<JobSiteItem> lsjs = new List<JobSiteItem>();
var fjobsites = client.GetJobsiteFilter(SystemParams.CompanyID, filterid);
if (fjobsites != null && fjobsites.Length > 0)
{
var selitems = CreateClient<JobSiteProvider>().GetUserJobsites(SystemParams.CompanyID, useriid);
foreach (var kv in fjobsites)
{
JobSiteItem item = new JobSiteItem();
item.ID = kv.Key;
item.Name = kv.Value;
if (accessallassets)
lsjs.Add(item);
else
{
if (selitems != null && selitems.Length > 0 && selitems.Select(m => m.ID).Contains(kv.Key))
lsjs.Add(item);
}
}
}
filter.Jobsites = lsjs.ToArray();
return filter;
}
else
{
return null;
}
}
catch (Exception ex)
{
return ex.Message;
}
}
private object GetAssetGroupList()
{
try
{
MachineGroup[] items = null;
if (GetCurrentLoginSession() != null)
{
items = MachineManagement.GetMachineGroups("").OrderBy((m) => m.GroupName).ToArray();
}
else
{
items = new MachineGroup[0];
}
return items;
}
catch (Exception ex)
{
return ex.Message;
}
}
private object GetJobsiteList()
{
try
{
JobSiteItem[] items = null;
if (GetCurrentLoginSession() != null)
{
var s = Request.Form["ClientData"];
s = HttpUtility.HtmlDecode(s);
items = CreateClient<JobSiteProvider>().GetJobSiteItems(SystemParams.CompanyID, "", false);
}
else
{
items = new JobSiteItem[0];
}
return items;
}
catch (Exception ex)
{
return ex.Message;
}
}
private object GetAssetTypes()
{
try
{
var session = GetCurrentLoginSession();
if (session != null)
{
AssetType[] types = CreateClient<AssetClassProvider>().GetAssetTypes(SystemParams.CompanyID);
return types.OrderBy((t) => t.Name).ToArray();
}
else
return new AssetType[0];
}
catch (Exception ex)
{
return ex.Message;
}
}
private object GetUserAssignedAssetGroups()
{
try
{
var clientdata = Request.Form["ClientData"];
var uid = HttpUtility.HtmlDecode(clientdata);
MachineGroup[] items = null;
if (GetCurrentLoginSession() != null)
{
var ui = UserManagement.GetUserByIID(uid);
if (ui.UserType < IronIntel.Contractor.Users.UserTypes.Admin)
{
bool accessallassets = GetAccessAllAssets(uid);
if (accessallassets)
return GetAssetGroupList();
else
items = MachineManagement.GetMachineGroupByUser(uid).OrderBy((m) => m.GroupName).ToArray();
}
else
return GetAssetGroupList();
}
else
{
items = new MachineGroup[0];
}
return items;
}
catch (Exception ex)
{
return ex.Message;
}
}
private object GetUserAssignedAssetTypes()
{
try
{
var clientdata = Request.Form["ClientData"];
var uid = HttpUtility.HtmlDecode(clientdata);
AssetType[] items = null;
if (GetCurrentLoginSession() != null)
{
var ui = UserManagement.GetUserByIID(uid);
if (ui.UserType < IronIntel.Contractor.Users.UserTypes.Admin)
{
bool accessallassets = GetAccessAllAssets(uid);
if (accessallassets)
return GetAssetTypes();
else
items = MachineManagement.GetMachineTypesByUser(uid);
}
else
return GetAssetTypes();
}
else
{
items = new AssetType[0];
}
return items;
}
catch (Exception ex)
{
return ex.Message;
}
}
private object GetUserAssignedJobsites()
{
try
{
JobSiteItem[] items = null;
if (GetCurrentLoginSession() != null)
{
var uid = Request.Form["ClientData"];
uid = HttpUtility.HtmlDecode(uid);
var ui = UserManagement.GetUserByIID(uid);
if (ui.UserType < IronIntel.Contractor.Users.UserTypes.Admin)
{
bool accessallassets = GetAccessAllAssets(uid);
if (accessallassets)
return GetJobsiteList();
else
items = CreateClient<JobSiteProvider>().GetUserJobsites(SystemParams.CompanyID, uid);
}
else
return GetJobsiteList();
}
else
{
items = new JobSiteItem[0];
}
return items;
}
catch (Exception ex)
{
return ex.Message;
}
}
private bool GetAccessAllAssets(string uid)
{
bool accessallassets = false;
var attrs = CreateClient<Foresight.Fleet.Services.User.UserQueryClient>(SystemParams.CompanyID).GetUserAdditionalAttribute(uid);
if (attrs != null)
accessallassets = attrs.AccessAllAssets;
return accessallassets;
}
#endregion
private class CustUIStyleItem
{
public int UIStyleID { get; set; }
public string UIStyleName { get; set; }
public bool IsDefault { get; set; }
public string TitleBarColor { get; set; }
public string MenuBackgroundColor { get; set; }
public string ChartTitleBackgroundColor { get; set; }
public string ChartBorderColor { get; set; }
}
private class SystemOptionInfo
{
public string TimeZone { get; set; }
public int Offset { get; set; }
public double AccuracyFilter { get; set; }
public string UnitOfOdometer { get; set; }
public string AcknowledgingAlerts { get; set; }
public int AreaUnits { get; set; }
public int VolumeUnits { get; set; }
public int WeightUnits { get; set; }
public string LoginVerifyType { get; set; }
public StringKeyValue[] Connectors { get; set; }
public int MFARememberMeDays { get; set; }
public int BreadcrumbLocationSource { get; set; }
}
private class UserOptionObject
{
public UserParamInfo UserParam { get; set; }
public SubscribeMessageByEmail Subscribe { get; set; }
public string UserAlertFilter { get; set; }
public UserFilterTemplateItem[] FilterTemplates { get; set; }
public int[] DeleteFilterTemplates { get; set; }
}
}
}