1422 lines
59 KiB
C#
1422 lines
59 KiB
C#
using Foresight.Fleet.Services.Asset;
|
|
using Foresight.Fleet.Services.Attachment;
|
|
using Foresight.Fleet.Services.JobSite;
|
|
using Foresight.Fleet.Services.MapView;
|
|
using FU = Foresight.Fleet.Services.User;
|
|
using Foresight.ServiceModel;
|
|
using IronIntel.Contractor.ExportExcel;
|
|
using IronIntel.Contractor.FilterQ;
|
|
using IronIntel.Contractor.JobSites;
|
|
using IronIntel.Contractor.Machines;
|
|
using IronIntel.Contractor.MapView;
|
|
using IronIntel.Contractor.Users;
|
|
using Newtonsoft.Json;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Web;
|
|
using static IronIntel.Contractor.Site.JobSite.JobSitesBasePage;
|
|
using static IronIntel.Contractor.Site.MapView.MapViewHandler;
|
|
|
|
namespace IronIntel.Contractor.Site.JobSite
|
|
{
|
|
public class JobSiteRequirementsBasePage : ContractorBasePage
|
|
{
|
|
protected void ProcessRequest()
|
|
{
|
|
object result = null;
|
|
try
|
|
{
|
|
string methodName = Request.Params["MethodName"];
|
|
if (methodName != null)
|
|
{
|
|
switch (methodName)
|
|
{
|
|
case "GetRequirements":
|
|
result = GetRequirements();
|
|
break;
|
|
case "CreateNewRequirments":
|
|
result = CreateNewRequirments();
|
|
break;
|
|
case "CreateNewRequirment":
|
|
result = CreateNewRequirment();
|
|
break;
|
|
case "DeleteRequirment":
|
|
result = DeleteRequirment();
|
|
break;
|
|
case "GetJobsites":
|
|
result = GetJobsites();
|
|
break;
|
|
case "GetJobsitesAndRegions":
|
|
result = GetJobsitesAndRegions();
|
|
break;
|
|
case "GetAssetTypes":
|
|
result = GetAssetTypes();
|
|
break;
|
|
case "GetAssetGroups":
|
|
result = GetAssetGroups();
|
|
break;
|
|
case "GetAvailableAssets":
|
|
result = GetAvailableAssets();
|
|
break;
|
|
case "GetAvailableAssetsByRequirement":
|
|
result = GetAvailableAssetsByRequirement();
|
|
break;
|
|
case "GetAssetDispatchItems":
|
|
result = GetAssetDispatchItems();
|
|
break;
|
|
case "DeleteDispatch":
|
|
result = DeleteDispatch();
|
|
break;
|
|
case "SendEmails":
|
|
result = SendEmails();
|
|
break;
|
|
case "UpdateDispatchCompleted":
|
|
result = UpdateDispatchCompleted();
|
|
break;
|
|
case "GetDispatchContacts":
|
|
result = GetDispatchContacts();
|
|
break;
|
|
case "AddDispatch":
|
|
result = AddDispatch();
|
|
break;
|
|
case "UpdateDispatch":
|
|
result = UpdateDispatch();
|
|
break;
|
|
case "SetRequirmentsDefault":
|
|
result = SetRequirmentsDefault();
|
|
break;
|
|
case "GetRequirmentsDefault":
|
|
result = GetRequirmentsDefault();
|
|
break;
|
|
case "GetAssetSchedulers":
|
|
result = GetAssetSchedulers();
|
|
break;
|
|
case "GetAssetDispatchsByIds":
|
|
result = GetAssetDispatchsByIds();
|
|
break;
|
|
case "GetMachines":
|
|
result = GetMachines();
|
|
break;
|
|
case "GetRoadMachines":
|
|
result = GetRoadMachines();
|
|
break;
|
|
case "AssignDispatch":
|
|
result = AssignDispatch();
|
|
break;
|
|
case "GetRequirementHistory":
|
|
result = GetRequirementHistory();
|
|
break;
|
|
case "GetAssetDispatchHistory":
|
|
result = GetAssetDispatchHistory();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SystemParams.WriteLog("error", "JobSiteRequirementsBasePage", ex.Message, ex.ToString());
|
|
throw ex;
|
|
}
|
|
string json = JsonConvert.SerializeObject(result);
|
|
Response.Write(json);
|
|
Response.End();
|
|
}
|
|
protected bool CheckRequestonly(string custid)
|
|
{
|
|
var user = GetCurrentUser();
|
|
if (user == null)
|
|
return false;
|
|
|
|
if (user.UserType == Users.UserTypes.SupperAdmin || user.UserType == Users.UserTypes.Admin)
|
|
return false;
|
|
|
|
if (user.UserType == Users.UserTypes.Common)
|
|
{
|
|
var client = CreateClient<FU.PermissionProvider>();
|
|
Tuple<FU.Feature, FU.Permissions>[] pmss = client.GetUserPermissions(custid, user.IID);
|
|
if (pmss.Length > 0)
|
|
{
|
|
Tuple<FU.Feature, FU.Permissions> permission = pmss.FirstOrDefault(m => m.Item1.Id == FU.Feature.JOB_SITES_REQUIREMENTS);
|
|
if (permission != null && permission.Item2 == FU.Permissions.RequestOnly)
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private object GetRequirements()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
var clientdata = Request.Form["ClientData"];
|
|
clientdata = HttpUtility.HtmlDecode(clientdata);
|
|
JobSiteRequirementQueryItem p = JsonConvert.DeserializeObject<JobSiteRequirementQueryItem>(clientdata);
|
|
DateTime latestStartDate = Helper.DBMinDateTime;
|
|
if (!DateTime.TryParse(p.LatestStartDate, out latestStartDate))
|
|
latestStartDate = Helper.DBMinDateTime;
|
|
|
|
JobSiteRequirmentInfo[] reqs = CreateClient<JobSiteDispatchProvider>().GetRequirmentItems(SystemParams.CompanyID, latestStartDate, p.JobSites, p.Regions, p.UnScheduledOnly);
|
|
if (reqs == null || reqs.Length == 0)
|
|
return new JobSiteRequirmentItem[0];
|
|
|
|
List<JobSiteRequirmentItem> ls = new List<JobSiteRequirmentItem>();
|
|
foreach (JobSiteRequirmentInfo re in reqs)
|
|
{
|
|
JobSiteRequirmentItem item = new JobSiteRequirmentItem();
|
|
Helper.CloneProperty(item, re);
|
|
ls.Add(item);
|
|
}
|
|
|
|
return ls.OrderBy(r => r.BeginDate).ToArray();
|
|
|
|
}
|
|
else
|
|
return new JobSiteRequirmentItem[0];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
private object GetRequirementHistory()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
var clientdata = Request.Form["ClientData"];
|
|
clientdata = HttpUtility.HtmlDecode(clientdata);
|
|
string[] p = JsonConvert.DeserializeObject<string[]>(clientdata);
|
|
var sdatestr = HttpUtility.HtmlDecode(p[0]);
|
|
var edatestr = HttpUtility.HtmlDecode(p[1]);
|
|
long[] jobsites = JsonConvert.DeserializeObject<long[]>(p[2]);
|
|
|
|
DateTime beginDate = Helper.DBMinDateTime;
|
|
DateTime endDate = DateTime.MaxValue;
|
|
if (!DateTime.TryParse(sdatestr, out beginDate))
|
|
beginDate = Helper.DBMinDateTime;
|
|
if (!DateTime.TryParse(edatestr, out endDate))
|
|
endDate = DateTime.MaxValue;
|
|
|
|
|
|
JobSiteRequirmentInfo[] reqs = CreateClient<JobSiteDispatchProvider>().GetRequirmentHistory(SystemParams.CompanyID, beginDate, endDate, jobsites);
|
|
if (reqs == null || reqs.Length == 0)
|
|
return new JobSiteRequirmentItem[0];
|
|
|
|
List<JobSiteRequirmentItem> ls = new List<JobSiteRequirmentItem>();
|
|
foreach (JobSiteRequirmentInfo re in reqs)
|
|
{
|
|
JobSiteRequirmentItem item = new JobSiteRequirmentItem();
|
|
Helper.CloneProperty(item, re);
|
|
ls.Add(item);
|
|
}
|
|
|
|
return ls.OrderBy(r => r.BeginDate).ToArray();
|
|
|
|
}
|
|
else
|
|
return new JobSiteRequirmentItem[0];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
private object CreateNewRequirments()
|
|
{
|
|
try
|
|
{
|
|
var user = GetCurrentUser();
|
|
if (user != null)
|
|
{
|
|
//if (!CanEdit(SystemParams.CompanyID, FU.Feature.JOB_SITES_REQUIREMENTS, FU.Permissions.RequestOnly))
|
|
// return "";
|
|
var clientdata = Request.Form["ClientData"];
|
|
clientdata = HttpUtility.HtmlDecode(clientdata);
|
|
JobSiteRequirmentInfo[] requires = JsonConvert.DeserializeObject<JobSiteRequirmentInfo[]>(clientdata);
|
|
|
|
List<long> requireids = new List<long>();
|
|
if (requires != null || requires.Length > 0)
|
|
{
|
|
var client = CreateClient<JobSiteDispatchProvider>();
|
|
foreach (JobSiteRequirmentInfo require in requires)
|
|
{
|
|
var req = client.CreateNewRequirments(SystemParams.CompanyID, require);
|
|
requireids.Add(req.Id);
|
|
}
|
|
}
|
|
|
|
return requireids.ToArray();
|
|
}
|
|
else
|
|
{
|
|
return new string[0];
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
private object CreateNewRequirment()
|
|
{
|
|
try
|
|
{
|
|
var user = GetCurrentUser();
|
|
if (user != null)
|
|
{
|
|
//if (!CanEdit(SystemParams.CompanyID, FU.Feature.JOB_SITES_REQUIREMENTS, FU.Permissions.RequestOnly))
|
|
// return "";
|
|
var clientdata = Request.Form["ClientData"];
|
|
clientdata = HttpUtility.HtmlDecode(clientdata);
|
|
JobSiteRequirmentInfo require = JsonConvert.DeserializeObject<JobSiteRequirmentInfo>(clientdata);
|
|
|
|
var client = CreateClient<JobSiteDispatchProvider>();
|
|
var req = client.CreateNewRequirments(SystemParams.CompanyID, require);
|
|
|
|
if (req.Assets != null && req.Assets.Count > 0)
|
|
{
|
|
long dispatchid = req.Assets[0].DispatchId;
|
|
return new string[] { req.Assets[0].DispatchId.ToString(), "OK" };
|
|
}
|
|
|
|
return FailedResult;
|
|
}
|
|
else
|
|
{
|
|
return FailedResult;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private string DeleteRequirment()
|
|
{
|
|
try
|
|
{
|
|
var user = GetCurrentUser();
|
|
if (user != null)
|
|
{
|
|
//if (!CanEdit(SystemParams.CompanyID, FU.Feature.JOB_SITES_REQUIREMENTS))
|
|
// return "";
|
|
var clientdata = Request.Form["ClientData"];
|
|
clientdata = HttpUtility.HtmlDecode(clientdata);
|
|
StringKeyValue kv = JsonConvert.DeserializeObject<StringKeyValue>(clientdata);
|
|
long id = Convert.ToInt64(kv.Key);
|
|
|
|
CreateClient<JobSiteDispatchProvider>().DeleteRequirment(SystemParams.CompanyID, id, kv.Value);
|
|
return OkResult;
|
|
}
|
|
else
|
|
{
|
|
return FailedResult;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
private object GetJobsites()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
var client = CreateClient<MapViewQueryClient>();
|
|
MapViewJobSiteInfo[] jss = client.GetAvailableJobSites(SystemParams.CompanyID, session.User.UID, string.Empty, false);
|
|
List<StringKeyValue> list = new List<StringKeyValue>();
|
|
foreach (MapViewJobSiteInfo js in jss)
|
|
{
|
|
StringKeyValue kv = new StringKeyValue();
|
|
kv.Key = js.ID.ToString();
|
|
kv.Value = js.Name;
|
|
kv.Tag1 = js.StartDate == null ? "" : js.StartDate.Value.ToShortDateString();
|
|
kv.Tag2 = js.EndDate == null ? "" : js.EndDate.Value.ToShortDateString();
|
|
list.Add(kv);
|
|
}
|
|
return list.OrderBy((m) => m.Value).ToArray();
|
|
}
|
|
else
|
|
return new StringKeyValue[0];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
private object GetMachines()
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
MachineItem[] machines = null;
|
|
if (GetCurrentLoginSession() != null)
|
|
{
|
|
//machines = MachineManagement.GetMachines(session.SessionID, session.User.UID, "");
|
|
|
|
var items = CreateClient<AssetQueryClient>(SystemParams.CompanyID).GetAssetListItem2ByUser(SystemParams.CompanyID, "", session.User.UID, false, 0);
|
|
return items.Select(i => new
|
|
{
|
|
i.Id,
|
|
i.VIN,
|
|
i.MakeName,
|
|
i.ModelName,
|
|
i.TypeName,
|
|
i.DisplayName,
|
|
TypeID = i.TypeId
|
|
}).OrderBy(g => g.DisplayName).ToArray();
|
|
}
|
|
else
|
|
{
|
|
machines = new MachineItem[0];
|
|
}
|
|
return machines.Where(m => m.Hide == false).OrderBy(m => m.DisplayName).ToArray();
|
|
}
|
|
private object GetRoadMachines()
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
MachineItem[] machines = null;
|
|
if (GetCurrentLoginSession() != null)
|
|
{
|
|
var items = CreateClient<AssetQueryClient>(SystemParams.CompanyID).GetAssetListItemsByUser(SystemParams.CompanyID, session.User.UID, "", false, 0, true, null, null, null).Where(m => m.OnRoad).ToArray();
|
|
return items.Select(i => new
|
|
{
|
|
i.Id,
|
|
i.VIN,
|
|
i.MakeName,
|
|
i.ModelName,
|
|
i.TypeName,
|
|
i.OnRoad,
|
|
EngineHours = Math.Round(i.EngineHours ?? 0, 2),
|
|
Odometer = Math.Round(i.Odometer ?? 0, 2),
|
|
DisplayName = GetDisplayName(i)
|
|
}).OrderBy(g => g.DisplayName).ToArray();
|
|
}
|
|
else
|
|
{
|
|
machines = new MachineItem[0];
|
|
}
|
|
return machines.Where(m => m.Hide == false).OrderBy(m => m.DisplayName).ToArray();
|
|
}
|
|
private string GetDisplayName(AssetListItemInfo a)
|
|
{
|
|
//Name取值顺序为Name2,Name,VIN,ID用于前端显示
|
|
string name = a.Name2;
|
|
if (string.IsNullOrWhiteSpace(name))
|
|
name = a.Name;
|
|
if (string.IsNullOrWhiteSpace(name))
|
|
name = a.VIN;
|
|
if (string.IsNullOrWhiteSpace(name))
|
|
name = a.Id.ToString();
|
|
return name;
|
|
}
|
|
|
|
private object GetJobsitesAndRegions()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
var clientdata = Request.Form["ClientData"];
|
|
bool activeonly = clientdata == "1";
|
|
|
|
JobSitesAndRegionsItem item = new JobSitesAndRegionsItem();
|
|
|
|
//MapViewJobSiteInfo[] jss = CreateClient<MapViewQueryClient>().GetAvailableJobSites(SystemParams.CompanyID, session.User.UID, string.Empty, false);
|
|
JobSiteItem[] jss = CreateClient<JobSiteProvider>().GetJobSiteItems(SystemParams.CompanyID, "", null, activeonly);
|
|
List<StringKeyValue> list = new List<StringKeyValue>();
|
|
foreach (JobSiteItem js in jss)
|
|
{
|
|
StringKeyValue kv = new StringKeyValue();
|
|
kv.Key = js.ID.ToString();
|
|
kv.Value = js.Name;
|
|
kv.Tag1 = js.StartDate == null ? "" : js.StartDate.Value.ToShortDateString();
|
|
kv.Tag2 = js.EndDate == null ? "" : js.EndDate.Value.ToShortDateString();
|
|
kv.Tag3 = js.RegionId.ToString();
|
|
list.Add(kv);
|
|
}
|
|
|
|
|
|
var regions = CreateClient<Foresight.Fleet.Services.Customer.CustomerProvider>().GetRegions(SystemParams.CompanyID);
|
|
List<StringKeyValue> lsregion = new List<StringKeyValue>();
|
|
if (regions != null || regions.Length > 0)
|
|
{
|
|
foreach (var rs in regions)
|
|
{
|
|
if (rs.IsActive)
|
|
{
|
|
StringKeyValue kv = new StringKeyValue();
|
|
kv.Key = rs.Id.ToString();
|
|
kv.Value = rs.Name;
|
|
lsregion.Add(kv);
|
|
}
|
|
}
|
|
}
|
|
|
|
item.Jobsites = list.OrderBy((m) => m.Value).ToArray();
|
|
item.Regions = lsregion.OrderBy((m) => m.Value).ToArray();
|
|
|
|
return item;
|
|
}
|
|
else
|
|
return new JobSitesAndRegionsItem();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
private object GetAssetTypes()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
MachineTypeItem[] types = JobSitesManagement.GetMachineTypes();
|
|
var typesinuse = CreateClient<AssetDataAdjustClient>().GetAssetTypesInUse(SystemParams.CompanyID);
|
|
|
|
List<StringKeyValue> list = new List<StringKeyValue>();
|
|
foreach (MachineTypeItem type in types)
|
|
{
|
|
StringKeyValue kv = new StringKeyValue();
|
|
kv.Key = type.ID.ToString();
|
|
kv.Value = type.Name;
|
|
kv.Tag1 = typesinuse.Contains(type.ID) ? "1" : "0";
|
|
list.Add(kv);
|
|
}
|
|
|
|
return list.OrderBy((m) => m.Value).ToArray();
|
|
}
|
|
else
|
|
return new StringKeyValue[0];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
private object GetAssetGroups()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
var groups = MachineManagement.GetMachineGroupsByUser(session.User.UID, null);
|
|
List<StringKeyValue> list = new List<StringKeyValue>();
|
|
foreach (var gp in groups)
|
|
{
|
|
StringKeyValue kv = new StringKeyValue();
|
|
kv.Key = gp.GroupID;
|
|
kv.Value = gp.GroupName;
|
|
list.Add(kv);
|
|
}
|
|
|
|
return list.OrderBy((m) => m.Value).ToArray();
|
|
}
|
|
else
|
|
return new StringKeyValue[0];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
AddLog("ERROR", "AlertsBasePage.GetAssetGroups", ex.Message, ex.ToString());
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private object GetAvailableAssets()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
var clientdata = Request.Form["ClientData"];
|
|
clientdata = HttpUtility.HtmlDecode(clientdata);
|
|
AssetQueryItem q = JsonConvert.DeserializeObject<AssetQueryItem>(clientdata);
|
|
|
|
DateTime begindate = Helper.DBMinDateTime;
|
|
if (!DateTime.TryParse(q.BeginDate, out begindate))
|
|
begindate = Helper.DBMinDateTime;
|
|
|
|
DateTime enddate = Helper.DBMinDateTime;
|
|
if (!DateTime.TryParse(q.EndDate, out enddate))
|
|
enddate = Helper.DBMinDateTime;
|
|
|
|
DispatchAssetInfo[] infos = CreateClient<JobSiteDispatchProvider>().GetAvailableAssets(SystemParams.CompanyID, q.AssetType, q.JobSiteID, begindate, enddate);
|
|
|
|
if (infos.Count() == 0)
|
|
return null;
|
|
var items = DispatchAssetItem.Convert(infos, begindate, enddate)
|
|
.OrderBy((i) => i.ConflictDays)
|
|
.ThenBy(i => i.AssetName);
|
|
|
|
var minDate = items.Min(i => i.Schedules.Count == 0 ? DateTime.MaxValue : i.Schedules.Min(ii => ii.BeginDate));
|
|
var maxDate = items.Max(i => i.Schedules.Count == 0 ? DateTime.MinValue : i.Schedules.Max(ii => ii.EndDate));
|
|
return new
|
|
{
|
|
HasSchedule = minDate != DateTime.MaxValue,
|
|
BeginDate = minDate,
|
|
TotalDays = (maxDate - minDate).Days + 1,
|
|
DispatchAssets = items
|
|
};
|
|
}
|
|
else
|
|
{
|
|
return new DispatchAssetItem[0];
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private object GetAvailableAssetsByRequirement()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
var clientdata = HttpUtility.HtmlDecode(Request.Form["ClientData"]);
|
|
long requireid = Convert.ToInt64(clientdata);
|
|
|
|
DispatchAssetInfo[] infos = CreateClient<JobSiteDispatchProvider>().GetAvailableAssetsByRequirement(SystemParams.CompanyID, requireid);
|
|
|
|
if (infos.Count() == 0)
|
|
return null;
|
|
|
|
JobSiteRequirmentInfo reqinfo = CreateClient<JobSiteDispatchProvider>().GetRequirementInfo(SystemParams.CompanyID, requireid);
|
|
var items = DispatchAssetItem.Convert(infos, reqinfo.BeginDate, reqinfo.EndDate)
|
|
.OrderBy((i) => i.ConflictDays)
|
|
.ThenBy(i => i.AssetName);
|
|
if (reqinfo != null && reqinfo.Assets != null && reqinfo.Assets.Count > 0)
|
|
{
|
|
foreach (JobSiteAssetDispatchInfo dai in reqinfo.Assets)
|
|
{
|
|
DispatchAssetItem ai = items.FirstOrDefault(m => m.AssetId == dai.AssetId);
|
|
if (ai != null)
|
|
{
|
|
ai.Selected = true;
|
|
ai.Completed = dai.Completed;
|
|
ai.DispatchId = dai.DispatchId;
|
|
ai.BeginDate = dai.BeginDate;
|
|
ai.EndDate = dai.EndDate;
|
|
}
|
|
}
|
|
}
|
|
|
|
var minDate = items.Min(i => i.Schedules.Count == 0 ? DateTime.MaxValue : i.Schedules.Min(ii => ii.BeginDate));
|
|
var maxDate = items.Max(i => i.Schedules.Count == 0 ? DateTime.MinValue : i.Schedules.Max(ii => ii.EndDate));
|
|
var selitems = items.Where(i => i.Selected);
|
|
DateTime selMinDate = DateTime.MaxValue;
|
|
DateTime selMaxDate = DateTime.MinValue;
|
|
if (selitems.Count() > 0)
|
|
{
|
|
selMinDate = selitems.Min(i => i.Schedules.Count == 0 ? DateTime.MaxValue : i.Schedules.Min(ii => ii.BeginDate));
|
|
selMaxDate = selitems.Max(i => i.Schedules.Count == 0 ? DateTime.MinValue : i.Schedules.Max(ii => ii.EndDate));
|
|
}
|
|
return new
|
|
{
|
|
HasAllSchedule = minDate != DateTime.MaxValue,
|
|
AllBeginDate = minDate,
|
|
AllTotalDays = (maxDate - minDate).Days + 1,
|
|
HasSchedule = selMinDate != DateTime.MaxValue,
|
|
BeginDate = selMinDate,
|
|
TotalDays = selMinDate != DateTime.MaxValue ? (selMaxDate - selMinDate).Days + 1 : 0,
|
|
RelatedRequirementAssets = reqinfo.RelatedRequirementAssets,
|
|
DispatchAssets = items
|
|
};
|
|
}
|
|
else
|
|
{
|
|
return "";
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
private string SetRequirmentsDefault()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
var clientdata = Request.Form["ClientData"];
|
|
clientdata = HttpUtility.HtmlDecode(clientdata);
|
|
UserParams.SetStringParameter(session.User.UID, "RequirmentsDefault", clientdata);
|
|
return OkResult;
|
|
}
|
|
else
|
|
{
|
|
return FailedResult;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private object GetRequirmentsDefault()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
var clientdata = Request.Form["ClientData"];
|
|
clientdata = HttpUtility.HtmlDecode(clientdata);
|
|
string value = UserParams.GetStringParameter(session.User.UID, "RequirmentsDefault");
|
|
|
|
RequirementsDefaultItem item = null;
|
|
if (!string.IsNullOrEmpty(value))
|
|
item = JsonConvert.DeserializeObject<RequirementsDefaultItem>(value);
|
|
|
|
|
|
return item;
|
|
}
|
|
else
|
|
return null;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private object GetAssetDispatchItems()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
var clientdata = Request.Form["ClientData"];
|
|
clientdata = HttpUtility.HtmlDecode(clientdata);
|
|
JobSiteRequirementQueryItem p = JsonConvert.DeserializeObject<JobSiteRequirementQueryItem>(clientdata);
|
|
DateTime latestStartDate = Helper.DBMinDateTime;
|
|
if (!DateTime.TryParse(p.LatestStartDate, out latestStartDate))
|
|
latestStartDate = Helper.DBMinDateTime;
|
|
|
|
JobSiteAssetDispatchInfo[] reqs = CreateClient<JobSiteDispatchProvider>().GetAssetDispatchItems(SystemParams.CompanyID, latestStartDate, p.JobSites, p.Regions, p.UnScheduledOnly);
|
|
if (reqs == null || reqs.Length == 0)
|
|
return new JobSiteAssetDispatchItem[0];
|
|
|
|
List<JobSiteAssetDispatchItem> ls = new List<JobSiteAssetDispatchItem>();
|
|
foreach (JobSiteAssetDispatchInfo re in reqs)
|
|
{
|
|
JobSiteAssetDispatchItem item = new JobSiteAssetDispatchItem();
|
|
Helper.CloneProperty(item, re);
|
|
if (!item.Completed)
|
|
{
|
|
item.CompletedTime = null;
|
|
item.CompletedBy = "";
|
|
}
|
|
ls.Add(item);
|
|
}
|
|
|
|
return ls.ToArray();
|
|
|
|
}
|
|
else
|
|
return new JobSiteAssetDispatchItem[0];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private object GetAssetDispatchHistory()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
var clientdata = Request.Form["ClientData"];
|
|
clientdata = HttpUtility.HtmlDecode(clientdata);
|
|
string[] p = JsonConvert.DeserializeObject<string[]>(clientdata);
|
|
int sendtype = Convert.ToInt32(p[0]);
|
|
long id = Convert.ToInt64(p[1]);
|
|
|
|
JobSiteAssetDispatchInfo[] reqs = null;
|
|
if (sendtype == 0)
|
|
reqs = CreateClient<JobSiteDispatchProvider>().GetAssetDispatchHistoryByRequirementID(SystemParams.CompanyID, id);
|
|
else if (sendtype == 1)
|
|
reqs = CreateClient<JobSiteDispatchProvider>().GetAssetDispatchHistoryByID(SystemParams.CompanyID, id);
|
|
|
|
if (reqs == null || reqs.Length == 0)
|
|
return new JobSiteAssetDispatchItem[0];
|
|
|
|
List<JobSiteAssetDispatchItem> ls = new List<JobSiteAssetDispatchItem>();
|
|
foreach (JobSiteAssetDispatchInfo re in reqs)
|
|
{
|
|
JobSiteAssetDispatchItem item = new JobSiteAssetDispatchItem();
|
|
Helper.CloneProperty(item, re);
|
|
ls.Add(item);
|
|
}
|
|
|
|
return ls.ToArray();
|
|
|
|
}
|
|
else
|
|
return new JobSiteAssetDispatchItem[0];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
|
|
private object GetAssetDispatchsByIds()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
var clientdata = Request.Form["ClientData"];
|
|
long[] ids = JsonConvert.DeserializeObject<long[]>(clientdata);
|
|
|
|
JobSiteAssetDispatchInfo[] reqs = CreateClient<JobSiteDispatchProvider>().GetAssetDispatchsByIds(SystemParams.CompanyID, ids);
|
|
if (reqs == null || reqs.Length == 0)
|
|
return new JobSiteAssetDispatchItem[0];
|
|
|
|
List<JobSiteAssetDispatchItem> ls = new List<JobSiteAssetDispatchItem>();
|
|
foreach (JobSiteAssetDispatchInfo re in reqs)
|
|
{
|
|
JobSiteAssetDispatchItem item = new JobSiteAssetDispatchItem();
|
|
Helper.CloneProperty(item, re);
|
|
ls.Add(item);
|
|
}
|
|
|
|
return ls.ToArray();
|
|
|
|
}
|
|
else
|
|
return new JobSiteAssetDispatchItem[0];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private string AssignDispatch()
|
|
{
|
|
try
|
|
{
|
|
var user = GetCurrentUser();
|
|
if (user != null)
|
|
{
|
|
var clientdata = Request.Form["ClientData"];
|
|
clientdata = HttpUtility.HtmlDecode(clientdata);
|
|
DispatchAssignmentItem item = JsonConvert.DeserializeObject<DispatchAssignmentItem>(clientdata);
|
|
long[] disids;
|
|
var client = CreateClient<JobSiteDispatchProvider>();
|
|
if (item.Type == 0)
|
|
{
|
|
JobSiteAssetDispatchInfo[] dispatchs = client.GetAssetDispatchsByRequirementIds(SystemParams.CompanyID, item.ObjectIDs);
|
|
disids = dispatchs.Select(m => m.DispatchId).ToArray();
|
|
}
|
|
else
|
|
disids = item.ObjectIDs;
|
|
|
|
CreateClient<JobSiteDispatchProvider>().AssignDispatch(SystemParams.CompanyID, disids, item.AssetID);
|
|
return OkResult;
|
|
}
|
|
else
|
|
{
|
|
return FailedResult;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
private object AddDispatch()
|
|
{
|
|
try
|
|
{
|
|
var user = GetCurrentUser();
|
|
if (user != null)
|
|
{
|
|
//if (!CanEdit(SystemParams.CompanyID, Foresight.Fleet.Services.User.Feature.JOB_SITES_REQUIREMENTS))
|
|
// return "";
|
|
var clientdata = Request.Form["ClientData"].Split((char)170);
|
|
var id = HttpUtility.HtmlDecode(clientdata[0]);
|
|
var data = HttpUtility.HtmlDecode(clientdata[1]);
|
|
var disassetsstr = HttpUtility.HtmlDecode(clientdata[2]);
|
|
JobSiteAssetDispatchInfo[] assts = JsonConvert.DeserializeObject<JobSiteAssetDispatchInfo[]>(data);
|
|
DispatchAssetInfo[] disassets = JsonConvert.DeserializeObject<DispatchAssetInfo[]>(disassetsstr);
|
|
|
|
long[] dispatchids = CreateClient<JobSiteDispatchProvider>().AddDispatch(SystemParams.CompanyID, Convert.ToInt64(id), assts, disassets);
|
|
|
|
return dispatchids;
|
|
}
|
|
else
|
|
{
|
|
return new long[0];
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
private string UpdateDispatch()
|
|
{
|
|
try
|
|
{
|
|
var user = GetCurrentUser();
|
|
if (user != null)
|
|
{
|
|
//if (!CanEdit(SystemParams.CompanyID, Foresight.Fleet.Services.User.Feature.JOB_SITES_REQUIREMENTS))
|
|
// return "";
|
|
var clientdata = HttpUtility.HtmlDecode(Request.Form["ClientData"]);
|
|
JobSiteAssetDispatchInfo[] dispatchs = JsonConvert.DeserializeObject<JobSiteAssetDispatchInfo[]>(clientdata);
|
|
|
|
if (dispatchs == null || dispatchs.Length == 0)
|
|
return "";
|
|
|
|
var client = CreateClient<JobSiteDispatchProvider>();
|
|
try
|
|
{
|
|
foreach (JobSiteAssetDispatchInfo dispatch in dispatchs)
|
|
{
|
|
client.UpdateDispatch(SystemParams.CompanyID, dispatch);
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
|
|
return OkResult;
|
|
}
|
|
else
|
|
{
|
|
return FailedResult;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private string DeleteDispatch()
|
|
{
|
|
try
|
|
{
|
|
var user = GetCurrentUser();
|
|
if (user != null)
|
|
{
|
|
//if (!CanEdit(SystemParams.CompanyID, Foresight.Fleet.Services.User.Feature.JOB_SITES_REQUIREMENTS))
|
|
// return "";
|
|
var clientdata = Request.Form["ClientData"];
|
|
clientdata = HttpUtility.HtmlDecode(clientdata);
|
|
DispatchItem item = JsonConvert.DeserializeObject<DispatchItem>(clientdata);
|
|
|
|
CreateClient<JobSiteDispatchProvider>().DeleteDispatch(SystemParams.CompanyID, item.DispatchId, item.DeleteNotes);
|
|
return OkResult;
|
|
}
|
|
else
|
|
{
|
|
return FailedResult;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private string SendEmails()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
var clientdata = Request.Form["ClientData"];
|
|
clientdata = HttpUtility.HtmlDecode(clientdata);
|
|
SendEmailsInfo si = JsonConvert.DeserializeObject<SendEmailsInfo>(clientdata);
|
|
|
|
var client = CreateClient<JobSiteDispatchProvider>();
|
|
|
|
JobSiteAssetDispatchInfo[] items = null;
|
|
if (si.Type == 0)//create requirement
|
|
{
|
|
items = client.GetAssetDispatchsByRequirementIds(SystemParams.CompanyID, si.ObjectIDs);
|
|
}
|
|
else//dispatch
|
|
{
|
|
items = client.GetAssetDispatchsByIds(SystemParams.CompanyID, si.ObjectIDs);
|
|
}
|
|
|
|
SendDispatchRequest(items, si);
|
|
|
|
return OkResult;
|
|
}
|
|
else
|
|
{
|
|
return FailedResult;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
private void SendDispatchRequest(JobSiteAssetDispatchInfo[] dispatchs, SendEmailsInfo si)
|
|
{
|
|
StringKeyValue[] emailaddress = si.EmailAddress;
|
|
StringKeyValue[] textaddress = si.TextAddress;
|
|
var alllangs = GetUserLanguages(emailaddress, textaddress);
|
|
|
|
var useriid = GetCurrentUser().IID;
|
|
var client = CreateClient<AttachmentClient>();
|
|
if (emailaddress != null && emailaddress.Length > 0)
|
|
{
|
|
foreach (var item in emailaddress)
|
|
{
|
|
string lang = GetUserLanguage(alllangs, item.Key);
|
|
string Subject = SystemParams.GetTextByKey(lang, "P_JS_DISPATCHREQUESTS", "Dispatch Requests");
|
|
string Body = GenerateDispatchHtml(lang, dispatchs, si.Description, si.AssignTo);
|
|
client.SendDispathRequestsEmail(SystemParams.CompanyID, Subject, Body, new string[] { item.Value }, useriid);
|
|
}
|
|
}
|
|
//if (textaddress != null && textaddress.Length > 0)
|
|
//{
|
|
// string Body = GenerateDispatchHtml(lang, dispatchs, si.Description);
|
|
// FleetServiceClientHelper.CreateClient<AttachmentClient>().SendDispathRequestsMessage(SystemParams.CompanyID, Subject, Body, emailaddress.ToArray(), useriid);
|
|
//}
|
|
}
|
|
|
|
public static string GenerateDispatchHtml(string lang, JobSiteAssetDispatchInfo[] dispatchs, string description, string assignto)
|
|
{
|
|
string StrFormat = "";
|
|
if (!string.IsNullOrEmpty(assignto))
|
|
StrFormat += SystemParams.GetTextByKey(lang, "P_JS_FORASSET_COLON", "For Asset:") + " {2}<br/>";
|
|
StrFormat += "{1}<br/>";
|
|
StrFormat += "<table style=\"border:solid 1px #e1dbdb;border-collapse: collapse;\"><tr>";
|
|
StrFormat += "<tr style=\"height:30px; background-color:#f1f1f1;\">";
|
|
StrFormat += "<td style=\"border:1px solid #e1dbdb;\">" + SystemParams.GetTextByKey(lang, "P_JS_MOVEDATE", "Move Date") + "</td>";
|
|
StrFormat += "<td style=\"border:1px solid #e1dbdb;\">" + SystemParams.GetTextByKey(lang, "P_JS_ASSETNAME", "Asset Name") + "</td>";
|
|
StrFormat += "<td style=\"border:1px solid #e1dbdb;\">" + SystemParams.GetTextByKey(lang, "P_JS_ASSETTYPE", "Asset Type") + "</td>";
|
|
StrFormat += "<td style=\"border:1px solid #e1dbdb;\">" + SystemParams.GetTextByKey(lang, "P_JS_FROMJOBSITE", "From Jobsite") + "</td>";
|
|
StrFormat += "<td style=\"border:1px solid #e1dbdb;\">" + SystemParams.GetTextByKey(lang, "P_JS_TOJOBSITE", "To Jobsite") + "</td>";
|
|
StrFormat += "<td style=\"border:1px solid #e1dbdb;\">" + SystemParams.GetTextByKey(lang, "P_JS_NOTES", "Notes") + "</td>";
|
|
StrFormat += "<td style=\"border:1px solid #e1dbdb;\">" + SystemParams.GetTextByKey(lang, "P_JS_POINTOFCONTACT", "Point Of Contact") + "</td>";
|
|
StrFormat += "</tr>";
|
|
StrFormat += "{0}";
|
|
StrFormat += "</table>";
|
|
|
|
if (dispatchs != null)
|
|
{
|
|
string tr_data = string.Empty;
|
|
foreach (JobSiteAssetDispatchInfo item in dispatchs)
|
|
{
|
|
tr_data += "<tr>";
|
|
tr_data += "<td style=\"border:1px solid #e1dbdb;\">" + (item.BeginDate == null ? "" : item.BeginDate.Value.ToString("M/d/yyyy")) + "</td>";
|
|
tr_data += "<td style=\"border:1px solid #e1dbdb;\">" + item.AssetName + "</td>";
|
|
tr_data += "<td style=\"border:1px solid #e1dbdb;\">" + item.AssetTypeName + "</td>";
|
|
tr_data += "<td style=\"border:1px solid #e1dbdb;\">" + item.CurrentJobSiteName + "</td>";
|
|
tr_data += "<td style=\"border:1px solid #e1dbdb;\">" + item.RequiredJobSiteName + "</td>";
|
|
tr_data += "<td style=\"border:1px solid #e1dbdb;\">" + (item.Notes ?? "").Replace("\n", "<br>") + "</td>";
|
|
tr_data += "<td style=\"border:1px solid #e1dbdb;\">" + item.PointOfContact + "</td>";
|
|
tr_data += "</tr>";
|
|
}
|
|
|
|
return string.Format(StrFormat, tr_data, HttpUtility.HtmlEncode(description ?? "").Replace("\n", "<br>"), assignto);
|
|
}
|
|
return string.Empty;
|
|
}
|
|
|
|
|
|
private string UpdateDispatchCompleted()
|
|
{
|
|
try
|
|
{
|
|
var user = GetCurrentUser();
|
|
if (user != null)
|
|
{
|
|
//if (!CanEdit(SystemParams.CompanyID, Foresight.Fleet.Services.User.Feature.JOB_SITES_DISPATCHREQUESTS))
|
|
// return "";
|
|
var clientdata = Request.Form["ClientData"];
|
|
clientdata = HttpUtility.HtmlDecode(clientdata);
|
|
StringKeyValue kv = JsonConvert.DeserializeObject<StringKeyValue>(clientdata);
|
|
long dispatchid = Convert.ToInt64(kv.Key);
|
|
bool compeleted = Helper.IsTrue(kv.Value);
|
|
CreateClient<JobSiteDispatchProvider>().UpdateDispatchCompleted(SystemParams.CompanyID, dispatchid, compeleted, user.IID);
|
|
|
|
return OkResult;
|
|
}
|
|
else
|
|
{
|
|
return FailedResult;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private object GetDispatchContacts()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
string clientdata = HttpUtility.HtmlDecode(Request.Form["ClientData"]);
|
|
long[] ps = JsonConvert.DeserializeObject<long[]>(clientdata);
|
|
|
|
var items = UserManagement.GetUsersByAssets(session.SessionID, ps, SystemParams.CompanyID, GetLanguageCookie());
|
|
return items;
|
|
}
|
|
else
|
|
{
|
|
return new UserInfo[0];
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private object GetAssetSchedulers()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
var clientdata = Request.Form["ClientData"];
|
|
clientdata = HttpUtility.HtmlDecode(clientdata);
|
|
string[] ps = JsonConvert.DeserializeObject<string[]>(clientdata);
|
|
long[] jss = JsonConvert.DeserializeObject<long[]>(ps[0]);
|
|
string[] regions = JsonConvert.DeserializeObject<string[]>(ps[1]);
|
|
string[] assetGroups = JsonConvert.DeserializeObject<string[]>(ps[2]);
|
|
int[] assetTypes = JsonConvert.DeserializeObject<int[]>(ps[3]);
|
|
string searchtxt = ps[4];
|
|
|
|
DateTime beginDate = Helper.DBMinDateTime;
|
|
DateTime endDate = DateTime.MaxValue;
|
|
if (!DateTime.TryParse(ps[5], out beginDate))
|
|
beginDate = Helper.DBMinDateTime;
|
|
|
|
if (!DateTime.TryParse(ps[6], out endDate))
|
|
endDate = DateTime.MaxValue;
|
|
int scheduled = Convert.ToInt32(ps[7]);
|
|
|
|
DispatchAssetInfo[] infos = CreateClient<JobSiteDispatchProvider>().GetAssetSchedulers(SystemParams.CompanyID, jss, regions, assetGroups, assetTypes, beginDate, endDate, scheduled, searchtxt);
|
|
|
|
var items = DispatchAssetItem.Convert(infos, beginDate, endDate, true).OrderBy(m => m.AssetName).ToArray();
|
|
if (items.Count() == 0)
|
|
return null;
|
|
|
|
var minDate = items.Min(i => i.Schedules.Count == 0 ? DateTime.MaxValue : i.Schedules.Min(ii => ii.BeginDate));
|
|
var maxDate = items.Max(i => i.Schedules.Count == 0 ? DateTime.MinValue : i.Schedules.Max(ii => ii.EndDate));
|
|
List<StringKeyValue> labels = new List<StringKeyValue>();
|
|
if (minDate != DateTime.MaxValue && maxDate != DateTime.MinValue)
|
|
{
|
|
minDate = new DateTime(minDate.Year, minDate.Month, 1);//当前月第一天
|
|
maxDate = maxDate.AddMonths(2);
|
|
maxDate = new DateTime(maxDate.Year, maxDate.Month, 1);//第三个月第一天
|
|
var tempMinDate = minDate;
|
|
var tempMaxDate = maxDate;
|
|
DateTime? last = null;
|
|
while (tempMinDate <= tempMaxDate)
|
|
{
|
|
if (last != null)
|
|
{
|
|
labels.Add(new StringKeyValue()
|
|
{
|
|
Key = last.Value.ToString("MM/dd/yyyy"),
|
|
Value = (tempMinDate - last.Value).Days.ToString()
|
|
});
|
|
}
|
|
last = tempMinDate;
|
|
tempMinDate = tempMinDate.AddMonths(1);
|
|
}
|
|
}
|
|
return new
|
|
{
|
|
HasSchedule = minDate != DateTime.MaxValue,
|
|
BeginDate = minDate,
|
|
TotalDays = (maxDate - minDate).Days + 1,
|
|
Labels = labels,
|
|
DispatchAssets = items
|
|
};
|
|
}
|
|
else
|
|
{
|
|
return new DispatchAssetItem[0];
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private class JobSitesAndRegionsItem
|
|
{
|
|
public StringKeyValue[] Jobsites { get; set; }
|
|
public StringKeyValue[] Regions { get; set; }
|
|
|
|
}
|
|
|
|
private class JobSiteRequirementQueryItem
|
|
{
|
|
public string LatestStartDate { get; set; }
|
|
public long[] JobSites { get; set; }
|
|
public string[] Regions { get; set; }
|
|
public string SearchText { get; set; }
|
|
public bool UnScheduledOnly { get; set; }
|
|
}
|
|
private class AssetQueryItem
|
|
{
|
|
public int AssetType { get; set; }
|
|
public long JobSiteID { get; set; }
|
|
public string BeginDate { get; set; }
|
|
public string EndDate { get; set; }
|
|
public long RequireId { get; set; }
|
|
}
|
|
public class SendEmailsItem
|
|
{
|
|
public long[] DispatchId { get; set; }
|
|
public string Description { get; set; }
|
|
public string[] EmailAddress { get; set; }
|
|
public string[] TextAddress { get; set; }
|
|
}
|
|
|
|
private class JobSiteRequirmentItem : JobSiteRequirmentInfo
|
|
{
|
|
public int Schedule { get { return Assets.Count(); } }
|
|
public string BeginDateStr { get { return BeginDate == null ? "" : BeginDate.ToString("M/d/yyyy"); } }
|
|
public string EndDateStr { get { return EndDate == null ? "" : EndDate.ToString("M/d/yyyy"); } }
|
|
public string DeletedOnStr { get { return DeletedOn == null ? "" : DeletedOn.Value.ToString("M/d/yyyy"); } }
|
|
}
|
|
private class DispatchAssetItem : DispatchAssetInfo
|
|
{
|
|
public List<SchedulePart> ScheduleParts { get; private set; } = new List<SchedulePart>();
|
|
public bool Selected { get; set; }
|
|
public bool Completed { get; set; }
|
|
public long DispatchId { get; set; }
|
|
public int ConflictDays { get; set; }
|
|
public DateTime? BeginDate { get; set; }
|
|
public DateTime? EndDate { get; set; }
|
|
public DateTime? StartDate { get; set; }
|
|
public DateTime? FinishDate { get; set; }
|
|
public string NextJobSite { get; set; }
|
|
public int DurationDays { get; set; }
|
|
public string BeginDateStr { get { return BeginDate == null ? "" : BeginDate.Value.ToString("M/d/yyyy"); } }
|
|
public string EndDateStr { get { return EndDate == null ? "" : EndDate.Value.ToString("M/d/yyyy"); } }
|
|
public string StartDateStr { get { return StartDate == null ? "" : StartDate.Value.ToString("M/d/yyyy"); } }
|
|
public string FinishDateStr { get { return FinishDate == null ? "" : FinishDate.Value.ToString("M/d/yyyy"); } }
|
|
|
|
public string DistanceStr
|
|
{
|
|
get
|
|
{
|
|
if (DistanceToDestJobSite != null && DistanceToDestJobSite > 0)
|
|
{
|
|
return DistanceToDestJobSite + " " + DistanceUnit + "(s)";
|
|
}
|
|
else
|
|
{
|
|
return "";
|
|
}
|
|
}
|
|
}
|
|
|
|
public void ComputeSchedules()
|
|
{
|
|
List<DateTime> allDates = new List<DateTime>();
|
|
List<DateTime> beginDates = new List<DateTime>();
|
|
List<DateTime> endDates = new List<DateTime>();
|
|
foreach (var s in Schedules)
|
|
{
|
|
if (!beginDates.Contains(s.BeginDate))
|
|
beginDates.Add(s.BeginDate);
|
|
if (!endDates.Contains(s.EndDate))
|
|
endDates.Add(s.EndDate.AddDays(1));
|
|
}
|
|
allDates.AddRange(beginDates);
|
|
allDates.AddRange(endDates);
|
|
allDates = allDates.OrderBy(d => d).ToList();
|
|
|
|
for (int i = 0; i < allDates.Count - 1; i++)
|
|
{
|
|
SchedulePart sp = new SchedulePart();
|
|
sp.BeginDate = allDates[i];
|
|
sp.EndDate = allDates[i + 1];
|
|
foreach (var s in Schedules)
|
|
{
|
|
//if ((sp.BeginDate == sp.EndDate && s.BeginDate == sp.BeginDate)
|
|
// || (s.EndDate > sp.BeginDate && s.BeginDate < sp.EndDate))
|
|
if (s.EndDate >= sp.BeginDate && s.BeginDate < sp.EndDate)
|
|
sp.Schedules.Add(s);
|
|
}
|
|
if (sp.Schedules.Count > 0)
|
|
ScheduleParts.Add(sp);
|
|
}
|
|
}
|
|
|
|
public static DispatchAssetItem[] Convert(IEnumerable<DispatchAssetInfo> infos, DateTime begindate, DateTime enddate, bool schedulerlist = false)
|
|
{
|
|
List<DispatchAssetItem> items = new List<DispatchAssetItem>();
|
|
foreach (var i in infos)
|
|
{
|
|
DispatchAssetItem item = new DispatchAssetItem();
|
|
Helper.CloneProperty(item, i);
|
|
if (item.DistanceToDestJobSite != null)
|
|
item.DistanceToDestJobSite = Math.Round(item.DistanceToDestJobSite.Value, 2);
|
|
if (begindate > DateTime.Now.AddYears(-5) && enddate < DateTime.Now.AddYears(5))
|
|
item.ConflictDays = GetConflictDays(i, begindate, enddate);
|
|
item.AttachedAssets.AddRange(i.AttachedAssets);
|
|
foreach (var s in i.Schedules)
|
|
{
|
|
AssetScheduleItem si = new AssetScheduleItem();
|
|
Helper.CloneProperty(si, s);
|
|
item.Schedules.Add(si);
|
|
}
|
|
item.ComputeSchedules();
|
|
if (schedulerlist)
|
|
{ //schedulerlist
|
|
if (item.Schedules.Count > 0)
|
|
{
|
|
var sch = item.Schedules[0];
|
|
item.StartDate = sch.BeginDate;
|
|
item.FinishDate = sch.EndDate;
|
|
item.NextJobSite = sch.JobSiteName;
|
|
item.DurationDays = (sch.EndDate - sch.BeginDate).Days + 1;
|
|
}
|
|
}
|
|
items.Add(item);
|
|
}
|
|
|
|
return items.ToArray();
|
|
}
|
|
|
|
private static int GetConflictDays(DispatchAssetInfo info, DateTime begindate, DateTime enddate)
|
|
{
|
|
if (info == null)
|
|
return 0;
|
|
else if (info.Schedules == null || info.Schedules.Count == 0)
|
|
return 0;
|
|
else
|
|
{
|
|
int count = 0;
|
|
while (begindate <= enddate)
|
|
{
|
|
foreach (var s in info.Schedules)
|
|
{
|
|
if (s.BeginDate <= begindate && s.EndDate >= begindate)
|
|
{
|
|
count++;
|
|
break;
|
|
}
|
|
}
|
|
begindate = begindate.AddDays(1);
|
|
}
|
|
return count;
|
|
}
|
|
}
|
|
}
|
|
private class SchedulePart
|
|
{
|
|
public List<AssetScheduleInfo> Schedules { get; private set; } = new List<AssetScheduleInfo>();
|
|
public DateTime BeginDate { get; set; }
|
|
public DateTime EndDate { get; set; }
|
|
public string BeginDateStr { get { return BeginDate == DateTime.MinValue ? "" : BeginDate.ToString("M/d/yyyy"); } }
|
|
public string EndDateStr { get { return EndDate == DateTime.MinValue ? "" : EndDate.ToString("M/d/yyyy"); } }
|
|
}
|
|
|
|
private class AssetScheduleItem : AssetScheduleInfo
|
|
{
|
|
public IIColor ColorV
|
|
{
|
|
get
|
|
{
|
|
System.Drawing.Color color = Helper.ConvertHtmlColor(Color, System.Drawing.Color.Black);
|
|
return new IIColor() { Alpha = color.A, Red = color.R, Green = color.G, Blue = color.B };
|
|
}
|
|
}
|
|
public string BeginDateStr { get { return BeginDate == DateTime.MinValue ? "" : BeginDate.ToString("M/d/yyyy"); } }
|
|
public string EndDateStr { get { return EndDate == DateTime.MinValue ? "" : EndDate.ToString("M/d/yyyy"); } }
|
|
|
|
}
|
|
|
|
public class JobSiteAssetDispatchItem : JobSiteAssetDispatchInfo
|
|
{
|
|
public string MoveDateStr { get { return MoveDate == null ? "" : MoveDate.Value.ToString("M/d/yyyy"); } }
|
|
public string BeginDateStr { get { return BeginDate == null ? "" : BeginDate.Value.ToString("M/d/yyyy"); } }
|
|
public string EndDateStr { get { return EndDate == null ? "" : EndDate.Value.ToString("M/d/yyyy"); } }
|
|
public string AddedOnStr { get { return AddedOn == null ? "" : AddedOn.Value.ToString("M/d/yyyy"); } }
|
|
public string CompletedTimeStr
|
|
{
|
|
get
|
|
{
|
|
if (Completed)
|
|
return CompletedTime == null ? "" : CompletedTime.Value.ToString("M/d/yyyy");
|
|
else
|
|
return "";
|
|
}
|
|
}
|
|
public string DeletedOnStr
|
|
{
|
|
get
|
|
{
|
|
if (Deleted)
|
|
return DeletedOn == null ? "" : DeletedOn.Value.ToString("M/d/yyyy");
|
|
else
|
|
return "";
|
|
}
|
|
}
|
|
}
|
|
|
|
public class RequirementsDefaultItem
|
|
{
|
|
public string[] Jobsites { get; set; }
|
|
public string[] Regions { get; set; }
|
|
}
|
|
public class DispatchItem
|
|
{
|
|
public long[] DispatchId { get; set; }
|
|
public string DeleteNotes { get; set; }
|
|
}
|
|
class DispatchAssignmentItem
|
|
{
|
|
public int Type { get; set; }//0.requirement;1.dispatch
|
|
public long AssetID { get; set; }
|
|
public long[] ObjectIDs { get; set; }
|
|
}
|
|
}
|
|
}
|