880 lines
34 KiB
C#
880 lines
34 KiB
C#
using Foresight.Data;
|
|
using Foresight.Fleet.Services.Asset;
|
|
using Foresight.Fleet.Services.AssetHealth;
|
|
using Foresight.Fleet.Services.Attachment;
|
|
using Foresight.Fleet.Services.JobSite;
|
|
using Foresight.ServiceModel;
|
|
using IronIntel.Contractor.Attachment;
|
|
using IronIntel.Contractor.JobSites;
|
|
using IronIntel.Contractor.Machines;
|
|
using IronIntel.Contractor.Maintenance;
|
|
using IronIntel.Contractor.MapView;
|
|
using IronIntel.Contractor.Users;
|
|
using Newtonsoft.Json;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Web;
|
|
|
|
namespace IronIntel.Contractor.Site.Maintenance
|
|
{
|
|
public class WorkOrderBasePage : ContractorBasePage
|
|
{
|
|
protected void ProcessRequest(string methodName)
|
|
{
|
|
object result = null;
|
|
|
|
if (methodName != null)
|
|
{
|
|
switch (methodName.ToUpper())
|
|
{
|
|
case "GETWORKORDERS":
|
|
result = GetWorkOrders();
|
|
break;
|
|
case "SAVEWORKORDER":
|
|
result = SaveWorkOrder();
|
|
break;
|
|
case "DELETEWORKORDER":
|
|
result = DeleteWorkOrder();
|
|
break;
|
|
case "GETCONTACTS":
|
|
result = GetContacts();
|
|
break;
|
|
case "GETMACHINES":
|
|
result = GetMachines();
|
|
break;
|
|
case "GETWORKORDERINFO":
|
|
result = GetWorkOrderInfo();
|
|
break;
|
|
case "GETOPENWORKORDERID":
|
|
result = GetOpenWorkOrderID();
|
|
break;
|
|
case "GETSEGMENTS":
|
|
result = GetSegments();
|
|
break;
|
|
case "SAVESEGMENT":
|
|
result = SaveSegment();
|
|
break;
|
|
case "DELETESEGMENT":
|
|
result = DeleteSegment();
|
|
break;
|
|
case "GETSEGMENTCLIENT":
|
|
result = GetSegmentClient();
|
|
break;
|
|
case "GETNONEASSIGNEDALERTS":
|
|
result = GetNoneAssignedAlerts();
|
|
break;
|
|
case "ADDORREMOVEALERTSFROMWORKORDER":
|
|
result = AddOrRemoveAlertsFromWorkOrder();
|
|
break;
|
|
case "GETATTACHMENTS":
|
|
result = GetAttachments();
|
|
break;
|
|
case "ADDATTACHMENT":
|
|
result = AddAttachment();
|
|
break;
|
|
case "DELETEATTACHMENT":
|
|
result = DeleteAttachment();
|
|
break;
|
|
case "GETASSETATTACHMENTS":
|
|
result = GetAssetAttachments();
|
|
break;
|
|
case "GETMACHINECONTACTS":
|
|
result = GetMachineContacts();
|
|
break;
|
|
case "SENDWORKORDER":
|
|
result = SendWorkOrder();
|
|
break;
|
|
case "GETINVOICENUMBER":
|
|
result = GetInvoiceNumber();
|
|
break;
|
|
case "GETALERTSFORWORKORDER":
|
|
result = GetAlertsForWorkOrder();
|
|
break;
|
|
}
|
|
}
|
|
|
|
string json = JsonConvert.SerializeObject(result);
|
|
Response.Write(json);
|
|
Response.End();
|
|
}
|
|
|
|
private object GetWorkOrders()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
var clientdata = Request.Form["ClientData"];
|
|
clientdata = HttpUtility.HtmlDecode(clientdata);
|
|
WorkOrderQueryParams p = JsonConvert.DeserializeObject<WorkOrderQueryParams>(clientdata);
|
|
|
|
WorkOrderItem[] workorders = null;
|
|
if (p.AssetID > 0)
|
|
workorders = CreateClient<WorkOrderClient>().GetWorkOrderItemsByAsset(SystemParams.CompanyID, p.AssetID);
|
|
else
|
|
workorders = CreateClient<WorkOrderClient>().GetWorkOrderItems(SystemParams.CompanyID, p.Contacts, p.Status, p.AssetGroups, p.SearchText, session.User.UID);
|
|
|
|
WorkOrderInfo[] maintenanceworkorders = null;//
|
|
if (p.ShowMaintenance)
|
|
maintenanceworkorders = MaintenanceManagement.GetMaintenanceWorkOrders(session.SessionID, SystemParams.CompanyID, p.Contacts, p.AssetGroups, p.SearchText, session.User.UID);
|
|
|
|
//普通用户机器权限过滤
|
|
var user = GetCurrentUser();
|
|
long[] availableAssetsids = null;
|
|
if (user.UserType < UserTypes.Admin)
|
|
availableAssetsids = CreateClient<AssetQueryClient>().GetAvailableAssetsForUsers(SystemParams.CompanyID, session.User.UID);
|
|
|
|
List<WorkOrderInfo> list = new List<WorkOrderInfo>();
|
|
|
|
if (maintenanceworkorders != null)
|
|
{
|
|
foreach (WorkOrderInfo wi in maintenanceworkorders)
|
|
{
|
|
if (availableAssetsids != null && !availableAssetsids.Contains(wi.AssetID))
|
|
continue;
|
|
|
|
list.Add(wi);
|
|
}
|
|
}
|
|
|
|
foreach (WorkOrderItem wo in workorders)
|
|
{
|
|
WorkOrderInfo wi = new WorkOrderInfo();
|
|
Helper.CloneProperty(wi, wo);
|
|
if (availableAssetsids != null && !availableAssetsids.Contains(wi.AssetID))
|
|
continue;
|
|
|
|
list.Add(wi);
|
|
}
|
|
|
|
return list.OrderBy(m => m.ID).ToArray();
|
|
}
|
|
else
|
|
return new WorkOrderInfo[0];
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
AddLog("ERROR", "WorkOrderBasePage.GetWorkOrders", ex.Message, ex.ToString());
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
|
|
private object GetWorkOrderInfo()
|
|
{
|
|
try
|
|
{
|
|
if (GetCurrentLoginSession() != null)
|
|
{
|
|
var woid = Request.Form["ClientData"];
|
|
|
|
WorkOrderDetail wod = CreateClient<WorkOrderClient>().GetWorkOrderDetail(SystemParams.CompanyID, Convert.ToInt64(woid));
|
|
|
|
WorkOrderDetailInfo wo = new WorkOrderDetailInfo();
|
|
Helper.CloneProperty(wo, wod);
|
|
return wo;
|
|
}
|
|
else
|
|
return new WorkOrderDetailInfo();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
AddLog("ERROR", "WorkOrderBasePage.GetWorkOrderInfo", ex.Message, ex.ToString());
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private object GetAlertsForWorkOrder()
|
|
{
|
|
try
|
|
{
|
|
if (GetCurrentLoginSession() != null)
|
|
{
|
|
var clientdata = Request.Form["ClientData"];
|
|
clientdata = HttpUtility.HtmlDecode(clientdata);
|
|
string[] ps = JsonConvert.DeserializeObject<string[]>(clientdata);
|
|
|
|
var woid = ps[0];
|
|
var aid = ps[1];
|
|
long workorderid = Convert.ToInt64(woid);
|
|
long assetid = Convert.ToInt64(aid);
|
|
AlertManager am = new AlertManager(SystemParams.DataDbConnectionString);
|
|
AlertInfo[] alerts = am.GetAlertsByWorkOrder(workorderid);
|
|
|
|
AssetAlertItem[] aAlerts = CreateClient<WorkOrderClient>().GetNoneAssignedAlerts(SystemParams.CompanyID, assetid);
|
|
List<AlertInfo> assetAlerts = new List<AlertInfo>();
|
|
if (aAlerts != null)
|
|
{
|
|
foreach (var aa in aAlerts)
|
|
{
|
|
AlertInfo ai = new AlertInfo();
|
|
ai.AlertID = aa.ID;
|
|
ai.MachineID = aa.AssetID;
|
|
ai.AlertType = aa.AlertType;
|
|
ai.Description = aa.Description;
|
|
ai.AlertTime_UTC = aa.AlertTime;
|
|
assetAlerts.Add(ai);
|
|
}
|
|
}
|
|
|
|
WorkorderAlerts wa = new WorkorderAlerts();
|
|
wa.Alerts = alerts;
|
|
wa.AssetAlerts = assetAlerts.ToArray(); ;
|
|
|
|
return wa;
|
|
}
|
|
else
|
|
return null;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
AddLog("ERROR", "AlertsBasePage.GetAlertsByWorkOrder", ex.Message, ex.ToString());
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private object GetOpenWorkOrderID()
|
|
{
|
|
try
|
|
{
|
|
if (GetCurrentLoginSession() != null)
|
|
{
|
|
var mid = Request.Form["ClientData"];
|
|
long aid = 0;
|
|
long.TryParse(mid, out aid);
|
|
|
|
var wos = CreateClient<WorkOrderClient>().GetWorkOrderItemsByAsset(SystemParams.CompanyID, aid);
|
|
List<long> workorderids = new List<long>();
|
|
foreach (var wo in wos)
|
|
{
|
|
if (!wo.Completed)
|
|
workorderids.Add(wo.ID);
|
|
}
|
|
//WorkOrderManager workordermanager = new WorkOrderManager(SystemParams.DataDbConnectionString);
|
|
//long[] workorderids = workordermanager.GetOpenWorkOrderID(mid);
|
|
string ids = string.Join(", ", workorderids);
|
|
ids = mid + "|" + ids;
|
|
return ids;
|
|
}
|
|
else
|
|
return new WorkOrderInfo();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
AddLog("ERROR", "WorkOrderBasePage.GetOpenWorkOrderID", ex.Message, ex.ToString());
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private object SaveWorkOrder()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
var clientdata = Request.Form["ClientData"].Split((char)170);
|
|
var workorderitem = HttpUtility.HtmlDecode(clientdata[0]);
|
|
var ids = HttpUtility.HtmlDecode(clientdata[1]);
|
|
long[] alertids = JsonConvert.DeserializeObject<long[]>(ids);
|
|
|
|
WorkOrderDetailInfo wdi = JsonConvert.DeserializeObject<WorkOrderDetailInfo>(workorderitem);
|
|
if (wdi.CompleteDate != null)
|
|
wdi.Status = "Completed";
|
|
|
|
WorkOrderDetail wo = new WorkOrderDetail();
|
|
Helper.CloneProperty(wo, wdi);
|
|
|
|
long workorderid = wo.ID;
|
|
if (wo.ID == -1)
|
|
{
|
|
wo = CreateClient<WorkOrderClient>().AddNewWorkOrder(SystemParams.CompanyID, wo, alertids, session.User.UID);
|
|
workorderid = wo.ID;
|
|
}
|
|
else
|
|
{
|
|
WorkOrderDetail oldwo = CreateClient<WorkOrderClient>().GetWorkOrderDetail(SystemParams.CompanyID, workorderid);
|
|
var user = UserManagement.GetUserByIID(session.User.UID);
|
|
if (oldwo.Status == "Completed" && user.UserType < UserTypes.Admin)
|
|
{
|
|
return "";
|
|
}
|
|
CreateClient<WorkOrderClient>().UpdateWorkOrder(SystemParams.CompanyID, wo, session.User.UID);
|
|
}
|
|
|
|
return workorderid;
|
|
}
|
|
else
|
|
return "Failed";
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private object DeleteWorkOrder()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
string clientdata = Request.Form["ClientData"];
|
|
int id = Convert.ToInt32(HttpUtility.HtmlDecode(clientdata));
|
|
|
|
CreateClient<WorkOrderClient>().DeleteWorkOrder(SystemParams.CompanyID, id, session.User.UID);
|
|
|
|
return "OK";
|
|
}
|
|
return "Failed";
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message; ;
|
|
}
|
|
}
|
|
|
|
private UserInfo[] GetContacts()
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
UserInfo[] users = null;
|
|
if (GetCurrentLoginSession() != null)
|
|
{
|
|
//contact = ContactManagement.GetContacts();
|
|
users = UserManagement.GetActiveUsers(session.SessionID);
|
|
users = users.OrderBy(u => u.DisplayName).ToArray();
|
|
}
|
|
else
|
|
{
|
|
users = new UserInfo[0];
|
|
}
|
|
return users;
|
|
}
|
|
|
|
private MachineItem[] GetMachines()
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
MachineItem[] machines = null;
|
|
if (GetCurrentLoginSession() != null)
|
|
{
|
|
machines = MachineManagement.GetMachines(session.SessionID, session.User.UID, "");
|
|
}
|
|
else
|
|
{
|
|
machines = new MachineItem[0];
|
|
}
|
|
return machines.Where(m => m.Hide == false).OrderBy(m => m.ShowName).ToArray();
|
|
}
|
|
|
|
|
|
private object GetNoneAssignedAlerts()
|
|
{
|
|
try
|
|
{
|
|
if (GetCurrentLoginSession() != null)
|
|
{
|
|
var id = Request.Form["ClientData"];
|
|
long assetid = Convert.ToInt64(id);
|
|
|
|
AssetAlertItem[] alerts = CreateClient<WorkOrderClient>().GetNoneAssignedAlerts(SystemParams.CompanyID, assetid);
|
|
if (alerts == null || alerts.Length == 0)
|
|
return new AssetAlertInfo[0];
|
|
|
|
List<AssetAlertInfo> list = new List<AssetAlertInfo>();
|
|
foreach (AssetAlertItem alert in alerts)
|
|
{
|
|
AssetAlertInfo ai = new AssetAlertInfo();
|
|
Helper.CloneProperty(ai, alert);
|
|
ai.AlertTime = ai.AlertTime.ToLocalTime();
|
|
ai.CompletedDate = ai.AlertTime.ToLocalTime();
|
|
list.Add(ai);
|
|
}
|
|
return list.ToArray();
|
|
}
|
|
else
|
|
return new AssetAlertInfo[0];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
AddLog("ERROR", "AlertsBasePage.GetNoneAssignedAlerts", ex.Message, ex.ToString());
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private object AddOrRemoveAlertsFromWorkOrder()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
var clientdata = Request.Form["ClientData"].Split((char)170);
|
|
var woid = HttpUtility.HtmlDecode(clientdata[0]);
|
|
var ids = HttpUtility.HtmlDecode(clientdata[1]);
|
|
var isaddstr = HttpUtility.HtmlDecode(clientdata[2]);
|
|
bool isadd = Helper.IsTrue(isaddstr);
|
|
long[] alertids = JsonConvert.DeserializeObject<long[]>(ids);
|
|
|
|
|
|
CreateClient<WorkOrderClient>().AddOrRemoveAlertsFromWorkOrder(SystemParams.CompanyID, Convert.ToInt64(woid), alertids, isadd, session.User.UID);
|
|
|
|
return "OK";
|
|
}
|
|
else
|
|
return "Failed";
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
|
|
#region Segment
|
|
|
|
private object GetSegmentClient()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
SegmentClient client = new SegmentClient();
|
|
|
|
client.Users = UserManagement.GetUsers();
|
|
if (client.Users == null)
|
|
client.Users = new UserInfo[0];
|
|
|
|
var jss = CreateClient<JobSiteProvider>().GetJobSiteItems(SystemParams.CompanyID, "", false);
|
|
List<JobSiteViewItem> list = new List<JobSiteViewItem>();
|
|
foreach (var js in jss)
|
|
{
|
|
JobSiteViewItem item = new JobSiteViewItem();
|
|
item.ID = js.ID;
|
|
item.Name = js.Name;
|
|
|
|
list.Add(item);
|
|
}
|
|
|
|
client.JobSites = list.ToArray();
|
|
if (client.JobSites == null)
|
|
client.JobSites = new JobSiteViewItem[0];
|
|
|
|
return client;
|
|
}
|
|
else
|
|
return new SegmentClient();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
AddLog("ERROR", "WorkOrderBasePage.GetSegmentClient", ex.Message, ex.ToString());
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private object GetSegments()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
string clientdata = Request.Form["ClientData"];
|
|
long woid = Convert.ToInt64(HttpUtility.HtmlDecode(clientdata));
|
|
|
|
WorkOrderSegmentItem[] segments = CreateClient<WorkOrderClient>().GetSegments(SystemParams.CompanyID, woid);
|
|
if (segments == null || segments.Length == 0)
|
|
return new SegmentInfo[0];
|
|
|
|
List<SegmentInfo> list = new List<SegmentInfo>();
|
|
foreach (WorkOrderSegmentItem se in segments)
|
|
{
|
|
SegmentInfo si = new SegmentInfo();
|
|
Helper.CloneProperty(si, se);
|
|
list.Add(si);
|
|
}
|
|
return list.ToArray();
|
|
}
|
|
else
|
|
return new SegmentInfo[0];
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
AddLog("ERROR", "WorkOrderBasePage.GetSegments", ex.Message, ex.ToString());
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private object SaveSegment()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
string clientdata = Request.Form["ClientData"];
|
|
SegmentInfo si = JsonConvert.DeserializeObject<SegmentInfo>(clientdata);
|
|
if (si.CompletedDate != null)
|
|
si.Completed = true;
|
|
|
|
WorkOrderSegmentItem segment = new WorkOrderSegmentItem();
|
|
Helper.CloneProperty(segment, si);
|
|
|
|
long segmentid = segment.SegmentID;
|
|
if (segmentid == -1)
|
|
{
|
|
segment = CreateClient<WorkOrderClient>().AddSegment(SystemParams.CompanyID, segment, session.User.UID);
|
|
segmentid = segment.SegmentID;
|
|
}
|
|
else
|
|
{
|
|
CreateClient<WorkOrderClient>().UpdateSegment(SystemParams.CompanyID, segment, session.User.UID);
|
|
}
|
|
|
|
return segmentid;
|
|
}
|
|
else
|
|
return "Failed";
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private object DeleteSegment()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
string clientdata = Request.Form["ClientData"];
|
|
int id = Convert.ToInt32(HttpUtility.HtmlDecode(clientdata));
|
|
|
|
CreateClient<WorkOrderClient>().DeleteSegment(SystemParams.CompanyID, id, session.User.UID);
|
|
|
|
return "OK";
|
|
}
|
|
return "Failed";
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message; ;
|
|
}
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
#region Attachment
|
|
|
|
private object GetAttachments()
|
|
{
|
|
try
|
|
{
|
|
if (GetCurrentLoginSession() != null)
|
|
{
|
|
var clientdata = Request.Form["ClientData"].Split((char)170);
|
|
var woid = HttpUtility.HtmlDecode(clientdata[0]);
|
|
|
|
AttachmentInfo[] atts = CreateClient<AttachmentClient>().GetAttachments(SystemParams.CompanyID, "WorkOrder", woid);
|
|
if (atts == null || atts.Length <= 0)
|
|
return new AttachmentItem[0];
|
|
|
|
List<AttachmentItem> list = new List<AttachmentItem>();
|
|
foreach (AttachmentInfo att in atts)
|
|
{
|
|
AttachmentItem item = new AttachmentItem();
|
|
Helper.CloneProperty(item, att);
|
|
item.AddedOn = item.AddedOn.AddHours(SystemParams.GetHoursOffset());
|
|
list.Add(item);
|
|
}
|
|
return list.OrderBy(m => m.AddedOn).ToArray();
|
|
}
|
|
else
|
|
return new AttachmentItem[0];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private object AddAttachment()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
string woid = HttpUtility.HtmlDecode(Request.Form["ClientData"]);
|
|
|
|
HttpPostedFile uploadFile = null;
|
|
byte[] iconfilebyte = null;
|
|
if (Request.Files.Count > 0)
|
|
{
|
|
uploadFile = Request.Files[0];
|
|
iconfilebyte = ConvertFile2bytes(uploadFile);
|
|
}
|
|
|
|
AttachmentInfo attachment = new AttachmentInfo();
|
|
attachment.StringID = Guid.NewGuid().ToString().ToUpper();
|
|
attachment.FileName = uploadFile == null ? "" : uploadFile.FileName;
|
|
attachment.Source = "WorkOrder";
|
|
attachment.SourceID = woid;
|
|
attachment.FileData = iconfilebyte;
|
|
attachment.AddedByUserIID = session.User.UID;
|
|
|
|
string attid = CreateClient<AttachmentClient>().AddAttachmentLegacy(SystemParams.CompanyID, attachment);
|
|
|
|
return "OK";
|
|
}
|
|
return "Failed";
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private object DeleteAttachment()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
string attachid = HttpUtility.HtmlDecode(Request.Form["ClientData"]);
|
|
|
|
CreateClient<AttachmentClient>().DeleteAttachmentLegacy(SystemParams.CompanyID, attachid, session.User.UID);
|
|
return "OK";
|
|
}
|
|
return "Failed";
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
|
|
}
|
|
|
|
private object GetAssetAttachments()
|
|
{
|
|
try
|
|
{
|
|
if (GetCurrentLoginSession() != null)
|
|
{
|
|
var assetid = Request.Form["ClientData"];
|
|
AssetAttachmentInfo[] atts = CreateClient<AssetAttachmentProvider>().GetAttachments(SystemParams.CompanyID, Convert.ToInt64(assetid)).Where(m => m.VisibleOnWorkOrder == true).ToArray();
|
|
if (atts == null || atts.Length <= 0)
|
|
return new AssetAttachmentItem[0];
|
|
|
|
List<AssetAttachmentItem> list = new List<AssetAttachmentItem>();
|
|
foreach (AssetAttachmentInfo att in atts)
|
|
{
|
|
AssetAttachmentItem item = new AssetAttachmentItem();
|
|
Helper.CloneProperty(item, att);
|
|
item.AddedOn = item.AddedOn.AddHours(SystemParams.GetHoursOffset());
|
|
list.Add(item);
|
|
}
|
|
return list.OrderBy(m => m.AddedOn).ToArray();
|
|
}
|
|
else
|
|
return new AssetAttachmentInfo[0];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
#region Sned Email
|
|
private object GetMachineContacts()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
var assetid = Request.Form["ClientData"];
|
|
return UserManagement.GetUsersByAssetID(session.SessionID, Convert.ToInt64(assetid), SystemParams.CompanyID);
|
|
}
|
|
else
|
|
return new UserInfo[0];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private object SendWorkOrder()
|
|
{
|
|
try
|
|
{
|
|
var session = GetCurrentLoginSession();
|
|
if (session != null)
|
|
{
|
|
var clientdata = Request.Form["ClientData"].Split((char)170);
|
|
var woid = HttpUtility.HtmlDecode(clientdata[0]);
|
|
var address = HttpUtility.HtmlDecode(clientdata[1]);
|
|
var desc = HttpUtility.HtmlDecode(clientdata[2]);
|
|
string[] emailaddress = JsonConvert.DeserializeObject<string[]>(address);
|
|
|
|
WorkOrderDetail wod = CreateClient<WorkOrderClient>().GetWorkOrderDetail(SystemParams.CompanyID, Convert.ToInt64(woid));
|
|
WorkOrderDetailInfo wo = new WorkOrderDetailInfo();
|
|
Helper.CloneProperty(wo, wod);
|
|
SendMail(wo, emailaddress, desc, session.User);
|
|
return "OK";
|
|
}
|
|
else
|
|
return "Failed";
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
|
|
private void SendMail(WorkOrderDetailInfo wo, string[] emailaddress, string desc, Services.Users.UserInfoEx user)
|
|
{
|
|
if (emailaddress == null || emailaddress.Length == 0)
|
|
return;
|
|
|
|
string Subject = "Work Order " + wo.ID;
|
|
string Body = OrdinaryEmailFormat(wo, desc, user.ID);
|
|
|
|
CreateClient<AttachmentClient>().SendWorkOrderEmail(SystemParams.CompanyID, wo.ID, Subject, Body, emailaddress.ToArray(), user.UID);
|
|
}
|
|
|
|
private string OrdinaryEmailFormat(WorkOrderDetailInfo wo, string desc, string userid)
|
|
{
|
|
string EmailFormat = "<table>";
|
|
EmailFormat += "<tr><td><span>Details for work order <lable style=\"color:red;\"> <{3}> </lable> are listed below.To view or edit this work order,please click the below link:<br/></span><a href=\"{4}\">Link</a></td></tr>";
|
|
EmailFormat += "<tr><td><span style=\"font-weight:bold;\">Message from: </span>{0}</td></tr>";
|
|
EmailFormat += "<tr><td style=\"font-weight:700;\">Description: </td></tr>";
|
|
EmailFormat += "<tr><td style=\"padding-left:30px;padding-right:20px;\">{1}</td></tr>";
|
|
|
|
EmailFormat += "<tr><td style=\"font-weight:700;\">Work Order Information: </td></tr>";
|
|
EmailFormat += "<tr><td style=\"padding-left:30px;\">{2}</td></tr>";
|
|
|
|
EmailFormat += "</table>";
|
|
|
|
string absuri = Context.Request.Url.AbsoluteUri;
|
|
string wourl = absuri.Substring(0, absuri.LastIndexOf("/Maintenance", StringComparison.OrdinalIgnoreCase));
|
|
wourl = wourl + "/jump.aspx?p=" + Convert.ToBase64String(Encoding.UTF8.GetBytes("jt=woe;woid=" + wo.ID));
|
|
|
|
return string.Format(EmailFormat, userid, desc.Replace("\n", "<br>"), WorkOrderFormat(wo), wo.ID, wourl);
|
|
}
|
|
|
|
public static string WorkOrderFormat(WorkOrderDetailInfo wo)
|
|
{
|
|
string EmailFormat = "<table>";
|
|
EmailFormat += "<tr><td><span style=\"font-weight:700;\">Work Order Type: </span>{0}</td></tr>";
|
|
EmailFormat += "<tr><td><span style=\"font-weight:700;\">Assigned To: </span>{1}</td></tr>";
|
|
EmailFormat += "<tr><td><span style=\"font-weight:700;\">Status: </span>{2}</td></tr>";
|
|
EmailFormat += "<tr><td><span style=\"font-weight:700;\">Due Date: </span>{3}</td></tr>";
|
|
EmailFormat += "<tr><td><span style=\"font-weight:700;\">Description: </span>{4}</td></tr>";
|
|
EmailFormat += "<tr><td><span style=\"font-weight:700;\">Meter Type: </span>{5}</td></tr>";
|
|
if (string.Compare(wo.MeterType, "HourMeter", true) == 0 || string.Compare(wo.MeterType, "Both", true) == 0)
|
|
EmailFormat += "<tr><td><span style=\"font-weight:700;\">Hour Meter: </span>{6}</td></tr>";
|
|
if (string.Compare(wo.MeterType, "Odometer", true) == 0 || string.Compare(wo.MeterType, "Both", true) == 0)
|
|
EmailFormat += "<tr><td><span style=\"font-weight:700;\">Odometer: </span>{7} {8}</td></tr>";
|
|
EmailFormat += "<tr><td><span style=\"font-weight:700;\">Work Order Total Costs ($): </span>{9}</td></tr>";
|
|
|
|
EmailFormat += "<tr><td><span style=\"font-weight:700;\">Other Cost ($): </span>{19}</td></tr>";
|
|
EmailFormat += "<tr><td><span style=\"font-weight:700;\">Parts Cost ($): </span>{14}</td></tr>";
|
|
EmailFormat += "<tr><td><span style=\"font-weight:700;\">Travel Time Cost ($): </span>{15}</td></tr>";
|
|
EmailFormat += "<tr><td><span style=\"font-weight:700;\">Labor Cost ($): </span>{16}</td></tr>";
|
|
EmailFormat += "<tr><td><span style=\"font-weight:700;\">Hourly Rate: </span>{17}</td></tr>";
|
|
|
|
EmailFormat += "<tr><td><span style=\"font-weight:700;\">Time To Complete(Hrs): </span>{10}</td></tr>";
|
|
EmailFormat += "<tr><td><span style=\"font-weight:700;\">Completed Date: </span>{11}</td></tr>";
|
|
EmailFormat += "<tr><td><span style=\"font-weight:700;\">Internal ID: </span>{12}</td></tr>";
|
|
|
|
EmailFormat += "<tr><td><span style=\"font-weight:700;\">Invoice Number: </span>{18}</td></tr>";
|
|
|
|
EmailFormat += "<tr><td><span style=\"font-weight:700;\">Notes: </span>{13}</td></tr>";
|
|
EmailFormat += "</table>";
|
|
|
|
string SendStr = string.Format(EmailFormat,
|
|
HttpUtility.HtmlEncode(wo.WorkOrderType),
|
|
HttpUtility.HtmlEncode(wo.AssignedToName),
|
|
HttpUtility.HtmlEncode(wo.Status),
|
|
HttpUtility.HtmlEncode(wo.DueDateStr),
|
|
HttpUtility.HtmlEncode(wo.Description).Replace("\n", "<br>"),
|
|
HttpUtility.HtmlEncode(wo.MeterType),
|
|
HttpUtility.HtmlEncode(wo.HourMeter),
|
|
HttpUtility.HtmlEncode(wo.Odometer),
|
|
HttpUtility.HtmlEncode(wo.OdometerUnits),
|
|
HttpUtility.HtmlEncode(wo.WorkOrderTotalCost),
|
|
HttpUtility.HtmlEncode(wo.HoursToComplete),
|
|
HttpUtility.HtmlEncode(wo.CompleteDateStr),
|
|
HttpUtility.HtmlEncode(wo.InternalID),
|
|
HttpUtility.HtmlEncode(wo.Notes).Replace("\n", "<br>"),
|
|
HttpUtility.HtmlEncode(wo.PartsCost),
|
|
HttpUtility.HtmlEncode(wo.TravelTimeCost),
|
|
HttpUtility.HtmlEncode(wo.LaborCost),
|
|
HttpUtility.HtmlEncode(wo.HourlyRate),
|
|
HttpUtility.HtmlEncode(wo.InvoiceNumber),
|
|
HttpUtility.HtmlEncode(wo.OtherCost));
|
|
return SendStr;
|
|
}
|
|
|
|
#endregion
|
|
|
|
private object GetInvoiceNumber()
|
|
{
|
|
try
|
|
{
|
|
if (GetCurrentLoginSession() != null)
|
|
{
|
|
var woid = Request.Form["ClientData"];
|
|
return new WorkOrderManager(SystemParams.DataDbConnectionString).GetInvoiceNumber(woid);
|
|
}
|
|
else
|
|
return new string[0];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return ex.Message;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public class SegmentClient
|
|
{
|
|
public UserInfo[] Users { get; set; }
|
|
public JobSiteViewItem[] JobSites { get; set; }
|
|
}
|
|
|
|
public class WorkOrderQueryParams
|
|
{
|
|
public long AssetID { get; set; }
|
|
public string SearchText { get; set; }
|
|
public string[] Contacts { get; set; }
|
|
public string[] Status { get; set; }
|
|
public string[] AssetGroups { get; set; }
|
|
public bool ShowMaintenance { get; set; }
|
|
}
|
|
|
|
class WorkorderAlerts
|
|
{
|
|
public AlertInfo[] Alerts { get; set; }
|
|
public AlertInfo[] AssetAlerts { get; set; }
|
|
}
|
|
}
|