add site
This commit is contained in:
119
Site/JobSite/js/dispatchassign.js
Normal file
119
Site/JobSite/js/dispatchassign.js
Normal file
@ -0,0 +1,119 @@
|
||||
|
||||
function GetRoadMachines() {
|
||||
jobsitequery("GetRoadMachines", "", function (data) {
|
||||
if (data && data.length > 0) {
|
||||
allroadassets = data;
|
||||
editableSelectAssignAsset.setEnable(true);
|
||||
|
||||
editableSelectAssignAsset.datasource = data;
|
||||
editableSelectAssignAsset.valuepath = "Id"
|
||||
editableSelectAssignAsset.displaypath = "DisplayName";
|
||||
}
|
||||
|
||||
}, function (err) {
|
||||
});
|
||||
}
|
||||
|
||||
function openAssignDispatch(seltype,) {
|
||||
assignAsset = null;
|
||||
_seltype = seltype;
|
||||
if (_sendType == 1) {
|
||||
_selectdispatchids = [];
|
||||
for (var i = 0; i < grid_dt.source.length; i++) {
|
||||
var ct = grid_dt.source[i].Values;
|
||||
if (ct.Selected) {
|
||||
_selectdispatchids.push(ct.DispatchId);
|
||||
}
|
||||
}
|
||||
if (_selectdispatchids.length == 0) {
|
||||
var title = "";
|
||||
if (seltype == 1)
|
||||
title = GetTextByKey('P_JS_EMAIL', 'Email');
|
||||
else
|
||||
title = GetTextByKey('P_MR_PRINT', 'Print');
|
||||
showAlert(GetTextByKey('P_JS_PLEASESELECTDISPATCH', 'Please select Dispatch.'), title);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!allroadassets)
|
||||
GetRoadMachines();
|
||||
editableSelectAssignAsset.val('');
|
||||
showmaskbg(true);
|
||||
$('#dialog_assignment .dialog-title span.title').text(GetTextByKey('P_JS_DISPATCHASSIGNMENT', 'Dispatch Assignment'));
|
||||
//$('#mask_bg').show();
|
||||
$('#dialog_assignment')
|
||||
.attr('act', 'edit')
|
||||
.css({
|
||||
'width': 400,
|
||||
'top': (document.documentElement.clientHeight - $('#dialog_assignment').height()) / 4,
|
||||
'left': (document.documentElement.clientWidth - $('#dialog_assignment').width()) / 2
|
||||
})
|
||||
.showDialogfixed();
|
||||
}
|
||||
|
||||
var assignAsset = null;
|
||||
function onAssignContinue() {
|
||||
assignAsset = editableSelectAssignAsset.selecteditem();
|
||||
if (assignAsset == null) {
|
||||
onAssignSkip();
|
||||
}
|
||||
else {
|
||||
onAssignSkip(assignAsset.DisplayName);
|
||||
}
|
||||
}
|
||||
|
||||
function assignDispatch(asset) {
|
||||
var item = {
|
||||
'Type': _sendType,
|
||||
'AssetID': asset.Id,
|
||||
'ObjectIDs': _sendType == 0 ? _createrequireids : _selectdispatchids
|
||||
};
|
||||
var param = JSON.stringify(item);
|
||||
param = htmlencode(param);
|
||||
jobsitequery("AssignDispatch", param, function (data) {
|
||||
if (typeof OnRefresh == "function")
|
||||
OnRefresh();
|
||||
}, function (err) {
|
||||
});
|
||||
}
|
||||
|
||||
function onAssignSkip(assignto) {
|
||||
$("#dialog_assignment").hide();
|
||||
|
||||
if (_seltype == 0) {
|
||||
showmaskbg(false);
|
||||
if (_sendType == 0) {
|
||||
onPrint(_createrequireids, assignto);
|
||||
OnExit();
|
||||
}
|
||||
else if (_sendType == 1) {
|
||||
OnPrint(assignto);
|
||||
}
|
||||
else if (_sendType == 2) {
|
||||
OnPrint(assignto);
|
||||
}
|
||||
if (assignAsset != null)
|
||||
assignDispatch(assignAsset);
|
||||
}
|
||||
else if (_seltype == 1) {
|
||||
if (_sendType == 0) {
|
||||
openSendEmails(assignto, _assetids, function () {
|
||||
if (assignAsset != null)
|
||||
assignDispatch(assignAsset);
|
||||
});
|
||||
}
|
||||
else if (_sendType == 1) {
|
||||
openSendEmails(assignto, null, function () {
|
||||
if (assignAsset != null)
|
||||
assignDispatch(assignAsset);
|
||||
});
|
||||
}
|
||||
else if (_sendType == 2) {
|
||||
openSendEmails(assignto, null, function () {
|
||||
if (assignAsset != null)
|
||||
assignDispatch(assignAsset);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
224
Site/JobSite/js/email.js
Normal file
224
Site/JobSite/js/email.js
Normal file
@ -0,0 +1,224 @@
|
||||
|
||||
function CheckEmail(mail) {
|
||||
var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
|
||||
if (mail.length == 0)
|
||||
return true;
|
||||
return filter.test(mail);
|
||||
}
|
||||
|
||||
function showContactList(data) {
|
||||
var rows = [];
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
var r = data[i];
|
||||
for (var j in r) {
|
||||
var a = r[j];
|
||||
}
|
||||
r.Text = false;
|
||||
r.Email = false;
|
||||
var fr = { Values: r };
|
||||
rows.push(fr);
|
||||
}
|
||||
|
||||
grid_maildt.setData(rows);
|
||||
}
|
||||
|
||||
var grid_maildt;
|
||||
function InitEmailGridData() {
|
||||
grid_maildt = new GridView('#contactlist');
|
||||
grid_maildt.lang = {
|
||||
all: GetTextByKey("P_GRID_ALL", "(All)"),
|
||||
ok: GetTextByKey("P_GRID_OK", "OK"),
|
||||
reset: GetTextByKey("P_GRID_RESET", "Reset")
|
||||
};
|
||||
var list_columns = [
|
||||
{ name: 'DisplayName', caption: GetTextByKey("P_MV_CONTACTNAME", "Contact Name"), valueIndex: 'DisplayName', css: { 'width': 148, 'text-align': 'left' } },
|
||||
{ name: 'ContactTypeName', caption: GetTextByKey("P_MV_CONTACTTYPE", "Contact Type"), valueIndex: 'ContactTypeName', css: { 'width': 148, 'text-align': 'left' } },
|
||||
//{ name: 'Text', caption: GetTextByKey("P_MV_TEXT", "Text"), valueIndex: 'Text', type: 3, css: { 'width': 45, 'text-align': 'center' } },
|
||||
{ name: 'Email', caption: GetTextByKey("P_MV_EMAIL", "Email"), valueIndex: 'Email', type: 3, css: { 'width': 45, 'text-align': 'center' } }
|
||||
];
|
||||
var columns = [];
|
||||
// head
|
||||
for (var hd in list_columns) {
|
||||
var col = {};
|
||||
col.name = list_columns[hd].name;
|
||||
col.caption = list_columns[hd].caption;
|
||||
col.visible = true;
|
||||
col.sortable = true;
|
||||
col.width = list_columns[hd].css.width;
|
||||
col.align = list_columns[hd].css["text-align"]
|
||||
col.key = list_columns[hd].valueIndex;
|
||||
if (list_columns[hd].type) {
|
||||
col.type = list_columns[hd].type;
|
||||
}
|
||||
columns.push(col);
|
||||
if (col.name === "Text") {
|
||||
col.enabled = function (item) {
|
||||
return item.TextAddress !== '';
|
||||
};
|
||||
}
|
||||
if (col.name === "Email") {
|
||||
col.enabled = function (item) {
|
||||
return item.ID !== '';
|
||||
};
|
||||
}
|
||||
}
|
||||
grid_maildt.canMultiSelect = false;
|
||||
grid_maildt.columns = columns;
|
||||
grid_maildt.init();
|
||||
|
||||
grid_maildt.selectedrowchanged = function (rowindex) {
|
||||
var rowdata = grid_maildt.source[rowindex];
|
||||
if (rowdata) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function getDispatchContacts(assetids) {
|
||||
var ctr = $("#selContractor").val();
|
||||
if (!ctr) ctr = "";
|
||||
var p = ctr + ";";
|
||||
|
||||
var ids = [];
|
||||
if (_sendType == 0 || _sendType == 2) {
|
||||
ids = assetids;
|
||||
}
|
||||
else {
|
||||
for (var i = 0; i < grid_dt.source.length; i++) {
|
||||
var ct = grid_dt.source[i].Values;
|
||||
if (ct.Selected && ids.indexOf(ct.AssetId) < 0)
|
||||
ids.push(ct.AssetId);
|
||||
}
|
||||
}
|
||||
|
||||
jobsitequery("GetDispatchContacts", JSON.stringify(ids), function (data) {
|
||||
if (typeof (data) !== "string")
|
||||
showContactList(data);
|
||||
}, function () {
|
||||
});
|
||||
}
|
||||
|
||||
var _selectdispatchids = [];
|
||||
var _assignto;
|
||||
var aftersend = null;
|
||||
function openSendEmails(assignto, assetids, next) {
|
||||
_assignto = "";
|
||||
if (assignto)
|
||||
_assignto = assignto;
|
||||
aftersend = next;
|
||||
|
||||
var title = GetTextByKey("P_JS_SENDDISPATCHREQUEST", 'Send Dispatch Request');
|
||||
var aids = [];
|
||||
if (_sendType == 0)
|
||||
aids = assetids;
|
||||
else if (_sendType == 1) {
|
||||
aids = _selectdispatchids;
|
||||
if (aids.length == 0) {
|
||||
showAlert(GetTextByKey('P_JS_PLEASESELECTDISPATCH', 'Please select Dispatch.'), title);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (_sendType == 2)
|
||||
aids = _selectdispatchids;
|
||||
|
||||
getDispatchContacts(aids);
|
||||
|
||||
$('#sendmail_otheremailaddress').val('');
|
||||
$('#sendmail_othertextaddress').val('');
|
||||
$('#sendmail_desc').val('Please make the pick-ups/deliveries as indicated.');
|
||||
$('#dialog_sendmail .dialog-title span.title').text(title);
|
||||
$('#dialog_sendmail')
|
||||
.attr('act', 'edit')
|
||||
.css({
|
||||
'width': 500,
|
||||
'top': (document.documentElement.clientHeight - $('#dialog_sendmail').height()) / 4,
|
||||
'left': (document.documentElement.clientWidth - $('#dialog_sendmail').width()) / 2
|
||||
})
|
||||
.showDialogfixed();
|
||||
}
|
||||
|
||||
|
||||
function onSendEmails() {
|
||||
var alerttitle = GetTextByKey("P_WO_SENDEMAIL", 'Send Email');
|
||||
var ids = [];
|
||||
if (_sendType == 0) {
|
||||
ids = _createrequireids;
|
||||
}
|
||||
else {
|
||||
ids = _selectdispatchids;
|
||||
}
|
||||
|
||||
if (ids.length == 0)
|
||||
return;
|
||||
|
||||
var emailaddress = [];
|
||||
var textaddress = [];
|
||||
var otheremailaddressstr = $('#sendmail_otheremailaddress').val();
|
||||
if (otheremailaddressstr !== "") {
|
||||
var address = otheremailaddressstr.split(';');
|
||||
for (var i = 0; i < address.length; i++) {
|
||||
if (!CheckEmail($.trim(address[i]))) {
|
||||
showAlert(GetTextByKey("P_MV_OTHEREMAILADDRESSISINVALID", 'The other email address {0} is invalid.').replace('{0}', emailaddress[i]), alerttitle);
|
||||
return;
|
||||
}
|
||||
emailaddress.push({ 'Key': '', 'Value': address[i] });
|
||||
}
|
||||
}
|
||||
|
||||
var othertextaddressstr = $('#sendmail_othertextaddress').val();
|
||||
if (othertextaddressstr !== "") {
|
||||
var address = othertextaddressstr.split(';');
|
||||
for (var i = 0; i < address.length; i++) {
|
||||
if (!CheckEmail($.trim(address[i]))) {
|
||||
showAlert(GetTextByKey("P_MV_OTHERTEXTADDRESSISINVALID", 'The other text address {0} is invalid.').replace('{0}', emailaddress[i]), alerttitle);
|
||||
return;
|
||||
}
|
||||
textaddress.push({ 'Key': '', 'Value': address[i] });
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < grid_maildt.source.length; i++) {
|
||||
var ct = grid_maildt.source[i].Values;
|
||||
if (ct.Email) {
|
||||
emailaddress.push({ 'Key': ct.IID, 'Value': ct.ID });
|
||||
}
|
||||
if (ct.Text) {
|
||||
textaddress.push({ 'Key': ct.IID, 'Value': ct.TextAddress });
|
||||
}
|
||||
}
|
||||
|
||||
if (emailaddress.length == 0 && textaddress.length == 0) {
|
||||
$('#dialog_sendmail').hideDialog();
|
||||
$('#mask_bg').hide();
|
||||
return;
|
||||
}
|
||||
var item = {
|
||||
'Type': _sendType,
|
||||
'ObjectIDs': ids,
|
||||
'Description': $('#sendmail_desc').val(),
|
||||
'EmailAddress': emailaddress,
|
||||
'TextAddress': textaddress,
|
||||
'AssignTo': _assignto
|
||||
};
|
||||
|
||||
jobsitequery('SendEmails', htmlencode(JSON.stringify(item)), function (data) {
|
||||
if (_sendType == 0) {
|
||||
$('#dialog_sendmail').hideDialog();
|
||||
$('#mask_bg').hide();
|
||||
OnExit(data);
|
||||
}
|
||||
else {
|
||||
if (data !== 'OK')
|
||||
showAlert(data, alerttitle);
|
||||
else
|
||||
showAlert(GetTextByKey("P_WO_MESSAGESENT", 'Message sent'), alerttitle);
|
||||
|
||||
$('#dialog_sendmail').hideDialog();
|
||||
$('#mask_bg').hide();
|
||||
}
|
||||
|
||||
if (aftersend)
|
||||
aftersend();
|
||||
});
|
||||
|
||||
}
|
1018
Site/JobSite/js/jobsiterequirement.js
Normal file
1018
Site/JobSite/js/jobsiterequirement.js
Normal file
File diff suppressed because it is too large
Load Diff
632
Site/JobSite/js/scheduler.js
Normal file
632
Site/JobSite/js/scheduler.js
Normal file
@ -0,0 +1,632 @@
|
||||
|
||||
function showSchedulerData(data) {
|
||||
if (data) {
|
||||
assetsObj = data;
|
||||
if (assetsObj.HasSchedule)
|
||||
grid_dt.columns[grid_dt.columns.length - 1].width = assetsObj.TotalDays * 5;
|
||||
else
|
||||
grid_dt.columns[grid_dt.columns.length - 1].width = 320;
|
||||
grid_dt.init();
|
||||
showSchedulerList(data.DispatchAssets);
|
||||
}
|
||||
else {
|
||||
assetsObj = null;
|
||||
grid_dt.columns[grid_dt.columns.length - 1].width = 320;
|
||||
grid_dt.init();
|
||||
showSchedulerList([]);
|
||||
}
|
||||
}
|
||||
|
||||
function showSchedulerList(data) {
|
||||
var rows = [];
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
var r = data[i];
|
||||
var fr = { Values: r };
|
||||
rows.push(fr);
|
||||
}
|
||||
|
||||
grid_dt.setData(rows);
|
||||
grid_dt.refresh();
|
||||
}
|
||||
|
||||
var grid_dt;
|
||||
function InitGridData() {
|
||||
grid_dt = new GridView('#schedulerlist');
|
||||
grid_dt.lang = {
|
||||
all: GetTextByKey("P_GRID_ALL", "(All)"),
|
||||
ok: GetTextByKey("P_GRID_OK", "OK"),
|
||||
reset: GetTextByKey("P_GRID_RESET", "Reset")
|
||||
};
|
||||
var list_columns = [
|
||||
{ name: 'TypeName', caption: GetTextByKey("P_JS_ASSETTYPE", "Asset Type"), valueIndex: 'TypeName', allowFilter: true, css: { 'width': 150, 'text-align': 'left' } },
|
||||
{ name: 'MakeName', caption: GetTextByKey("P_PM_MAKE", "Make"), valueIndex: 'MakeName', allowFilter: true, css: { 'width': 100, 'text-align': 'left' } },
|
||||
{ name: 'ModelName', caption: GetTextByKey("P_PM_MODEL", "Model"), valueIndex: 'ModelName', allowFilter: true, css: { 'width': 100, 'text-align': 'left' } },
|
||||
{ name: 'AssetName', caption: GetTextByKey("P_JS_ASSETNAME", "Asset Name"), valueIndex: 'AssetName', allowFilter: true, css: { 'width': 150, 'text-align': 'left' } },
|
||||
{ name: 'CurrentJobSite', caption: GetTextByKey("P_JS_CURRJOBSITE", "Current Jobsite"), allowFilter: true, valueIndex: 'CurrentJobSite', allowFilter: true, css: { 'width': 150, 'text-align': 'left' } },
|
||||
{ name: 'AssetGroups', caption: GetTextByKey("P_JS_ASSETGROUP", "Asset Group"), valueIndex: 'AssetGroups', allowFilter: true, css: { 'width': 150, 'text-align': 'left' } },
|
||||
{ name: 'EngineHours', caption: GetTextByKey("P_JS_ENGINEHOURS", "Engine Hours"), valueIndex: 'EngineHours', css: { 'width': 100, 'text-align': 'right' } },
|
||||
{ name: 'AquisitionType', caption: GetTextByKey("P_JS_ACQUISITIONTYPE", "Acquisition Type"), valueIndex: 'AquisitionType', allowFilter: true, css: { 'width': 150, 'text-align': 'left' } },
|
||||
{ name: 'Schedules', caption: "gantt", valueIndex: 'ScheduleParts', css: { 'width': 320, 'text-align': 'left' } }
|
||||
];
|
||||
var columns = [];
|
||||
// head
|
||||
for (var hd in list_columns) {
|
||||
var col = {};
|
||||
col.name = list_columns[hd].name;
|
||||
col.caption = list_columns[hd].caption;
|
||||
col.visible = list_columns[hd].visible === false ? false : true;
|
||||
col.sortable = true;
|
||||
col.width = list_columns[hd].css.width;
|
||||
col.align = list_columns[hd].css["text-align"]
|
||||
col.key = list_columns[hd].valueIndex;
|
||||
col.allowFilter = list_columns[hd].allowFilter;
|
||||
col.type = list_columns[hd].type;
|
||||
|
||||
col.alwaysshow = list_columns[hd].alwaysshow;
|
||||
if (col.name === "Schedules") {
|
||||
var labelCount = 4;
|
||||
|
||||
col.sortable = false;
|
||||
col.allowHtml = true;
|
||||
col.caption = function () {
|
||||
if (!assetsObj || !assetsObj.HasSchedule) return;
|
||||
|
||||
var container = $('<span></span>').css({ position: 'relative', height: '100%', display: 'block' });
|
||||
var left = 0;
|
||||
for (var i = 0; i < assetsObj.Labels.length; i++) {
|
||||
var label = assetsObj.Labels[i];
|
||||
var sp = $('<span class="span-caption"></span>').text(label.Key).css({ left: left });
|
||||
left += parseInt(label.Value) * 5;
|
||||
container.append(sp);
|
||||
}
|
||||
grid_dt.resize();
|
||||
|
||||
//var totalDays = (led.getTime() - fbd.getTime()) / (1000 * 60 * 60 * 24);
|
||||
//var interval = parseInt(totalDays / labelCount);
|
||||
//if (totalDays % labelCount != 0)
|
||||
// interval += 1;
|
||||
|
||||
//var d = new Date(assetsObj.BeginDate);
|
||||
//var w = col.width / labelCount;
|
||||
//for (var i = 0; i < labelCount; i++) {
|
||||
// var label = new DateFormatter().formatDate(d, 'm/d/Y');
|
||||
// var sp = $('<span class="span-caption"></span>').text(label).css({ left: w * i });
|
||||
// container.append(sp);
|
||||
// d = new Date(d.getTime() + interval * 1000 * 60 * 60 * 24);
|
||||
//}
|
||||
return container;
|
||||
}
|
||||
col.filter = function (item) {
|
||||
if (item.ScheduleParts && assetsObj && assetsObj.HasSchedule) {
|
||||
var totalDays = assetsObj.TotalDays;
|
||||
var interval = parseInt(totalDays / labelCount);
|
||||
if (totalDays % labelCount != 0)
|
||||
interval += 1;
|
||||
totalDays = interval * labelCount;
|
||||
|
||||
var container = $('<div></div>').css({
|
||||
position: 'relative',
|
||||
height: '20px',
|
||||
});
|
||||
|
||||
var d = new Date(assetsObj.BeginDate);
|
||||
for (var i = 0; i < item.ScheduleParts.length; i++) {
|
||||
var sp = item.ScheduleParts[i];
|
||||
var bdate = new Date(sp.BeginDate);
|
||||
var edate = new Date(sp.EndDate);
|
||||
var l = (bdate.getTime() - d.getTime()) / (1000 * 60 * 60 * 24) / totalDays * col.width;
|
||||
var w = (edate.getTime() - bdate.getTime()) / (1000 * 60 * 60 * 24) / totalDays * col.width;
|
||||
var color = "";
|
||||
if (sp.Schedules.length == 1)
|
||||
color = sp.Schedules[0].Color;
|
||||
else {
|
||||
for (var j = 0; j < sp.Schedules.length; j++) {
|
||||
if (color !== "")
|
||||
color += ","
|
||||
color += sp.Schedules[j].Color;
|
||||
}
|
||||
}
|
||||
|
||||
var df = new DateFormatter();
|
||||
var title = df.formatDate(bdate, 'm/d/Y') + " - " + df.formatDate(new Date((edate.getTime() - 1000 * 60 * 60 * 24)), 'm/d/Y') + "\n";
|
||||
for (var j = 0; j < sp.Schedules.length; j++) {
|
||||
var bd = new Date(sp.Schedules[j].BeginDate);
|
||||
var ed = new Date(sp.Schedules[j].EndDate);
|
||||
title += sp.Schedules[j].JobSiteName + ": " + df.formatDate(bd, 'm/d/Y') + " - " + df.formatDate(ed, 'm/d/Y');
|
||||
if (sp.Schedules[j].PointOfContact)
|
||||
title += "\n " + GetTextByKey("P_JS_CONTACT_COLON", "Contact: ") + " " + sp.Schedules[j].PointOfContact;
|
||||
if (sp.Schedules[j].Creator)
|
||||
title += "\n " + GetTextByKey("P_JS_CREATOR_COLON", "Creator: ") + " " + sp.Schedules[j].Creator;
|
||||
if (j != sp.Schedules.length - 1)
|
||||
title += "\n";
|
||||
}
|
||||
|
||||
var bar = $('<span class="span-bar"></span>');
|
||||
bar.css({
|
||||
left: l,
|
||||
width: w - 1,
|
||||
'border-left': '1px solid transparen'
|
||||
});
|
||||
if (sp.Schedules.length == 1)
|
||||
bar.css("backgroundColor", color);
|
||||
else {
|
||||
//bar.css("background", "url(img/gridline.jpg) repeat 20px 20px");
|
||||
//bar.css("background", "linear-gradient(45deg," + color + ")");
|
||||
//bar.css("background-image", "repeating-linear-gradient(45deg,white, white 5px,#ff9900 5px,#ff9900 7px)");
|
||||
//bar.css("background-image", "repeating-linear-gradient(135deg,blue 1px, transparent 0), repeating-linear-gradient(45deg, red 1px, transparent 0)");
|
||||
//bar.css("background-size", "5px 5px");
|
||||
|
||||
//bar.css("background-image", "url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><g fill='orange' fill-opacity='1'><path fill-rule='evenodd' d='M0 0h4v4H0V0zm4 4h4v4H4V4z'/></g></svg>\")");
|
||||
|
||||
bar.css("background-image", "url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><g fill-opacity='0.5'><path d='M0 0L8 8z M0 8L8 0z' style='fill:white;stroke:gray;stroke-width:1'/></g></svg>\")");
|
||||
}
|
||||
bar.attr("title", title);
|
||||
if (!IsReadOnly) {
|
||||
bar.dblclick(sp, function (e) {
|
||||
onEditScheduler(item, e.data.Schedules);
|
||||
});
|
||||
}
|
||||
container.append(bar);
|
||||
}
|
||||
return container;
|
||||
}
|
||||
};
|
||||
col.styleFilter = function () {
|
||||
return {
|
||||
'margin-top': '3px',
|
||||
'margin-bottom': '0px',
|
||||
};
|
||||
}
|
||||
}
|
||||
columns.push(col);
|
||||
}
|
||||
grid_dt.canMultiSelect = false;
|
||||
grid_dt.columns = columns;
|
||||
grid_dt.init();
|
||||
grid_dt.celldblclick = function (rowindex, columnIndex) {
|
||||
if (!IsReadOnly) {
|
||||
if (columnIndex != grid_dt.columns.length - 1) {
|
||||
var rowdata = grid_dt.source[rowindex];
|
||||
if (rowdata) {
|
||||
onEditScheduler(rowdata.Values);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
grid_dt.selectedrowchanged = function (rowindex) {
|
||||
var rowdata = grid_dt.source[rowindex];
|
||||
if (rowdata) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof jobsiteschedulerCtrl !== 'function') {
|
||||
$jobsiteschedulerCtrl = function jobsiteschedulerCtrl() {
|
||||
this.tmpobj = {
|
||||
};
|
||||
this.wizardCtrl = null;
|
||||
this.vue = null;
|
||||
};
|
||||
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
var dataGrid = window.DataGrid || window['g5-datagrid'];
|
||||
|
||||
$jobsiteschedulerCtrl.prototype.getData = function (/*dataObj, tmpdata*/) {
|
||||
return this.vue.source;
|
||||
};
|
||||
|
||||
$jobsiteschedulerCtrl.prototype.setData = function (data) {
|
||||
if (data) {
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
data[i].Selected = false;
|
||||
}
|
||||
}
|
||||
this.vue.source = data ? data : [];
|
||||
this.vue.$refs.grid.resize();
|
||||
};
|
||||
|
||||
$jobsiteschedulerCtrl.prototype.reload = function () {
|
||||
this.vue.$refs.grid.reload()
|
||||
};
|
||||
|
||||
$jobsiteschedulerCtrl.prototype.Init = function (parent, newselected) {
|
||||
var ethis = this;
|
||||
//加载子页面模版
|
||||
parent.load('../template/JobsiteSchedulerCtrl.html?v=8', function () {
|
||||
ethis.vue = new Vue({
|
||||
el: parent.find('.JobsiteSchedulerCtrl')[0],
|
||||
components: {
|
||||
'data-grid': dataGrid
|
||||
},
|
||||
data: {
|
||||
wnd: window.parent,
|
||||
//editable: true,
|
||||
columns: [],
|
||||
source: []
|
||||
},
|
||||
computed: {
|
||||
},
|
||||
watch: {
|
||||
source: function (val) {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
cellvaluechanged: function (item, key) {
|
||||
},
|
||||
rowdblclick: function (e) {
|
||||
}
|
||||
}
|
||||
});
|
||||
ethis.vue.columns = createGridColumn(newselected);
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
function createGridColumn(newselected) {
|
||||
var editable = true;
|
||||
var columns = [
|
||||
{
|
||||
key: 'Selected',
|
||||
caption: '',
|
||||
type: dataGrid.COLUMN_TYPE.checkbox,
|
||||
width: 30,
|
||||
align: 'center',
|
||||
sortable: false,
|
||||
orderable: false,
|
||||
resizable: false,
|
||||
allcheck: false,
|
||||
enabled: function (item) {
|
||||
return !item.Completed;
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'JobSiteName',
|
||||
caption: GetTextByKey("P_JS_JOBSITE", "Jobsite"),
|
||||
type: dataGrid.COLUMN_TYPE.label,
|
||||
width: 200,
|
||||
orderable: false,
|
||||
resizable: false,
|
||||
enabled: false
|
||||
},
|
||||
{
|
||||
key: 'BeginDateStr',
|
||||
caption: GetTextByKey("P_JS_BEGINDATE", 'Begin Date'),
|
||||
type: dataGrid.COLUMN_TYPE.datepicker,
|
||||
width: 120,
|
||||
orderable: false,
|
||||
resizable: false,
|
||||
enabled: editable,
|
||||
onchanged: function (item) {
|
||||
item.Changed = true;
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'EndDateStr',
|
||||
caption: GetTextByKey("P_JS_ENDDATE", 'End Date'),
|
||||
type: dataGrid.COLUMN_TYPE.datepicker,
|
||||
width: 120,
|
||||
orderable: false,
|
||||
resizable: false,
|
||||
enabled: editable,
|
||||
onchanged: function (item) {
|
||||
item.Changed = true;
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'Delete',
|
||||
type: dataGrid.COLUMN_TYPE.link,
|
||||
align: 'center',
|
||||
width: 30,
|
||||
orderable: false,
|
||||
resizable: false,
|
||||
enabled: editable,
|
||||
filter: function (item) {
|
||||
return item.Completed ? '' : '\uf00d';
|
||||
},
|
||||
onclick: function (e, item) {
|
||||
onDeleteScheduler(item);
|
||||
},
|
||||
styleFilter: function (item) {
|
||||
return {
|
||||
'font-family': 'FontAwesome',
|
||||
'cursor': 'pointer',
|
||||
'color': 'rgb(123, 28, 33)'
|
||||
};
|
||||
},
|
||||
attrs: { 'title': GetTextByKey("P_JS_DELETE", 'Delete') }
|
||||
}
|
||||
];
|
||||
|
||||
return columns;
|
||||
}
|
||||
}());
|
||||
}
|
||||
|
||||
var currentscheduler;
|
||||
var allSchedulers;
|
||||
function onEditScheduler(item, schedules) {
|
||||
allSchedulers = [];
|
||||
currentscheduler = item;
|
||||
if (!schedules || schedules.length == 0) {
|
||||
schedules = item.Schedules;
|
||||
}
|
||||
|
||||
if (schedules && schedules.length > 0)
|
||||
allSchedulers = schedules;
|
||||
|
||||
$('#dialog_assetname').text(item.AssetName);
|
||||
$('#dialog_assettype').text(item.TypeName);
|
||||
$('#dialog_make').text(item.MakeName);
|
||||
$('#dialog_model').text(item.ModelName);
|
||||
|
||||
showmaskbg(true);
|
||||
var title = GetTextByKey("P_JS_MANAGESCHEDULER", "Manage Scheduler");
|
||||
$('#dialog_managescheduler .dialog-title span.title').html(title);
|
||||
$('#dialog_managescheduler')
|
||||
.attr('init', 1)
|
||||
.css({
|
||||
'top': (document.documentElement.clientHeight - $('#dialog_managescheduler').height()) / 3,
|
||||
'left': (document.documentElement.clientWidth - $('#dialog_managescheduler').width()) / 2
|
||||
}).showDialogfixed();
|
||||
|
||||
|
||||
if (jobsiteschedulerCtrl) {
|
||||
jobsiteschedulerCtrl.setData(allSchedulers);
|
||||
}
|
||||
}
|
||||
|
||||
function onDeleteScheduler(item) {
|
||||
var schduler = item;
|
||||
var ids = [];
|
||||
if (schduler) {
|
||||
ids.push(schduler.DispatchId);
|
||||
}
|
||||
else {
|
||||
for (var i = 0; i < jobsiteschedulerCtrl.vue.source.length; i++) {
|
||||
var sch = jobsiteschedulerCtrl.vue.source[i];
|
||||
if (sch.Selected && !sch.Completed) {
|
||||
ids.push(sch.DispatchId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ids.length == 0)
|
||||
return;
|
||||
|
||||
var text = GetTextByKey("P_JS_WOULDYOULIKETODELETETHESCHEDULERS", "Would you like to delete the scheduler(s)?");
|
||||
var alerttitle = GetTextByKey("P_JS_DELETESCHEDULER", "Delete Scheduler");
|
||||
showConfirmIndialog(text, alerttitle, function () {
|
||||
var dispatchids = [];
|
||||
if (schduler) {
|
||||
dispatchids.push(schduler.DispatchId);
|
||||
var index = jobsiteschedulerCtrl.vue.source.indexOf(schduler);
|
||||
jobsiteschedulerCtrl.vue.$refs.grid.deleteRow(index);
|
||||
}
|
||||
else {
|
||||
for (var i = jobsiteschedulerCtrl.vue.source.length - 1; i >= 0; i--) {
|
||||
var sch = jobsiteschedulerCtrl.vue.source[i];
|
||||
if (sch.Selected && !sch.Completed) {
|
||||
dispatchids.push(sch.DispatchId);
|
||||
jobsiteschedulerCtrl.vue.$refs.grid.deleteRow(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (dispatchids.length == 0)
|
||||
return;
|
||||
|
||||
var item = {
|
||||
'DispatchId': dispatchids,
|
||||
'DeleteNotes': ''
|
||||
};
|
||||
var p = htmlencode(JSON.stringify(item));
|
||||
jobsitequery("DeleteDispatch", p, function (data) {
|
||||
|
||||
}, function (err) {
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function checkSchedulerItems(alerttitle) {
|
||||
var items = [];
|
||||
for (var i = 0; i < jobsiteschedulerCtrl.vue.source.length; i++) {
|
||||
var sch = jobsiteschedulerCtrl.vue.source[i];
|
||||
if (sch.Changed) {
|
||||
var item = {
|
||||
'DispatchId': sch.DispatchId,
|
||||
'MoveDate': sch.MoveDate,
|
||||
'BeginDate': sch.BeginDateStr,
|
||||
'EndDate': sch.EndDateStr,
|
||||
'Notes': sch.Notes
|
||||
};
|
||||
|
||||
if (!item.BeginDate) {
|
||||
showAlert(GetTextByKey("P_JS_PLEASEENTERTHEBEGINDATE", "Please enter the Begin Date."), alerttitle);
|
||||
return false;
|
||||
}
|
||||
if (!checkDate(item.BeginDate)) {
|
||||
showAlert(GetTextByKey("P_JS_BEGINDATEFORMATERROR", "Begin Date format error."), alerttitle);
|
||||
return false;
|
||||
}
|
||||
if (!item.EndDate) {
|
||||
showAlert(GetTextByKey("P_JS_PLEASEENTERTHEENDDATE", "Please enter the End Date."), alerttitle);
|
||||
return false;
|
||||
}
|
||||
if (!checkDate(item.EndDate)) {
|
||||
showAlert(GetTextByKey("P_JS_ENDDATEFORMATERROR", "End Date format error."), alerttitle);
|
||||
return false;
|
||||
}
|
||||
|
||||
var nowdt = new Date(currentdate.replace("-", "/"));
|
||||
var sdate = item.BeginDate;
|
||||
var stdt = new Date(sdate.replace("-", "/"));
|
||||
var edate = item.EndDate;
|
||||
var etdt = new Date(edate.replace("-", "/"));
|
||||
|
||||
//if (stdt < nowdt) {
|
||||
// showAlert(GetTextByKey("P_JS_BEGINDATESHOULDBENOEARLIERTHANTODAYSDATE", "Begin Date should be no earlier than today’s date. Please select another date."), alerttitle);
|
||||
// return false;
|
||||
//}
|
||||
|
||||
//if (etdt < nowdt) {
|
||||
// showAlert(GetTextByKey("P_JS_ENDDATEMUSTBELATERTHANBEGINDATE1", "End Date must be later than Begin Date. Please select another date range."), alerttitle);
|
||||
// return false;
|
||||
//}
|
||||
|
||||
if (stdt > etdt) {
|
||||
showAlert(GetTextByKey("P_JS_ENDDATEMUSTBELATERTHANBEGINDATE", "End Date must be later than Begin Date."), alerttitle);
|
||||
return false;
|
||||
}
|
||||
|
||||
items.push(item);
|
||||
}
|
||||
}
|
||||
return items;
|
||||
}
|
||||
|
||||
function onUpdateScheduler() {
|
||||
if (jobsiteschedulerCtrl.vue.source.length == 0) {
|
||||
$('#dialog_managescheduler').hide();
|
||||
$('#mask_bg').hide();
|
||||
OnRefresh();
|
||||
return;
|
||||
}
|
||||
|
||||
var alerttitle = GetTextByKey("P_JS_MANAGESCHEDULER", "Manage Scheduler");
|
||||
var items = checkSchedulerItems(alerttitle);
|
||||
if (!items)
|
||||
return;
|
||||
|
||||
if (items.length == 0) {
|
||||
$('#dialog_managescheduler').hide();
|
||||
$('#dialogmask').hide();
|
||||
OnRefresh();
|
||||
return;
|
||||
}
|
||||
|
||||
showloading(true);
|
||||
var param = JSON.stringify(items);
|
||||
param = htmlencode(param);
|
||||
jobsitequery("UpdateDispatch", param, function (data) {
|
||||
showloading(false);
|
||||
if (data !== "OK") {
|
||||
showAlert(data, GetTextByKey("P_AM_ERROR", 'Error'));
|
||||
}
|
||||
$('#dialog_managescheduler').hide();
|
||||
$('#dialogmask').hide();
|
||||
OnRefresh();
|
||||
}, function (err) {
|
||||
console.log(err);
|
||||
showloading(false);
|
||||
showAlert(GetTextByKey("P_JS_FAILEDTOSAVE", "Failed to save jobsite."), alerttitle);
|
||||
});
|
||||
}
|
||||
|
||||
function openAddScheduler() {
|
||||
showmaskbg(true);
|
||||
$('#dialogmask').show();
|
||||
$('#dialog_addjobsite').val('');
|
||||
$('#dialog_addbegindate').val('');
|
||||
$('#dialog_addenddate').val('');
|
||||
$('#dialog_addnotes').val('');
|
||||
$('#dialog_pointofcontact').val('');
|
||||
|
||||
var title = GetTextByKey("P_JS_ADDSCHEDULER", "Add Scheduler");
|
||||
$('#dialog_addscheduler .dialog-title span.title').html(title);
|
||||
$('#dialog_addscheduler')
|
||||
.attr('init', 1)
|
||||
.css({
|
||||
'top': (document.documentElement.clientHeight - $('#dialog_addscheduler').height()) / 3,
|
||||
'left': (document.documentElement.clientWidth - $('#dialog_addscheduler').width()) / 2
|
||||
}).showDialogfixed();
|
||||
}
|
||||
|
||||
function onAddScheduler(ignorebeginpast) {
|
||||
var alerttitle = GetTextByKey("P_JS_ADDSCHEDULER", "Add Scheduler");
|
||||
var item = {
|
||||
'JobSiteId': $('#dialog_addjobsite').find("option:selected").val(),
|
||||
'JobSiteName': $("#dialog_addjobsite").find("option:selected").text(),
|
||||
'BeginDate': $.trim($('#dialog_addbegindate').val()),
|
||||
'EndDate': $.trim($('#dialog_addenddate').val()),
|
||||
'Quantity': 1,
|
||||
'Notes': $('#dialog_addnotes').val(),
|
||||
'PointOfContact': $('#dialog_pointofcontact').val()
|
||||
};
|
||||
|
||||
item.AssetType = currentscheduler.TypeId;
|
||||
var assets = [];
|
||||
var asset = {
|
||||
'AssetId': currentscheduler.AssetId,
|
||||
'BeginDate': item.BeginDate,
|
||||
'EndDate': item.EndDate
|
||||
};
|
||||
assets.push(asset);
|
||||
item.Assets = assets;
|
||||
|
||||
if (item.BeginDate.length === 0) {
|
||||
showAlert(GetTextByKey("P_JS_PLEASEENTERTHEBEGINDATE", "Please enter the Begin Date."), alerttitle);
|
||||
return;
|
||||
}
|
||||
if (!checkDate(item.BeginDate)) {
|
||||
showAlert(GetTextByKey("P_JS_BEGINDATEFORMATERROR", "Begin Date format error."), alerttitle);
|
||||
return;
|
||||
}
|
||||
if (item.EndDate.length === 0) {
|
||||
showAlert(GetTextByKey("P_JS_PLEASEENTERTHEENDDATE", "Please enter the End Date."), alerttitle);
|
||||
return;
|
||||
}
|
||||
if (!checkDate(item.EndDate)) {
|
||||
showAlert(GetTextByKey("P_JS_ENDDATEFORMATERROR", "End Date format error."), alerttitle);
|
||||
return;
|
||||
}
|
||||
var nowdt = new Date(currentdate.replace("-", "/"));
|
||||
var sdate = item.BeginDate;
|
||||
var stdt = new Date(sdate.replace("-", "/"));
|
||||
var edate = item.EndDate;
|
||||
var etdt = new Date(edate.replace("-", "/"));
|
||||
|
||||
if (!ignorebeginpast && stdt < nowdt) {
|
||||
var msg = GetTextByKey("P_JS_BEGINDATEPAST", "The begin date for this requirement is in the past, do you want to continue?")
|
||||
showConfirm(msg, alerttitle, function () {
|
||||
onAddScheduler(true);
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
//if (etdt < nowdt) {
|
||||
// showAlert(GetTextByKey("P_JS_ENDDATEMUSTBELATERTHANBEGINDATE1", "End Date must be later than Begin Date. Please select another date range."), alerttitle);
|
||||
// return;
|
||||
//}
|
||||
|
||||
if (stdt > etdt) {
|
||||
showAlert(GetTextByKey("P_JS_ENDDATEMUSTBELATERTHANBEGINDATE", "End Date must be later than Begin Date."), alerttitle);
|
||||
return;
|
||||
}
|
||||
|
||||
$('#dialogmask1').show();
|
||||
var param = JSON.stringify(item);
|
||||
param = htmlencode(param);
|
||||
jobsitequery("CreateNewRequirment", param, function (data) {
|
||||
if (typeof (data) === "string") {
|
||||
showAlert(data, alerttitle);
|
||||
$('#dialogmask1').hide();
|
||||
} else {
|
||||
$('#dialog_addscheduler').hide();
|
||||
$('#dialogmask').hide();
|
||||
$('#dialogmask1').hide();
|
||||
|
||||
var scheduleritem = item;
|
||||
scheduleritem.DispatchId = data[0];
|
||||
scheduleritem.BeginDateStr = item.BeginDate;
|
||||
scheduleritem.EndDateStr = item.EndDate;
|
||||
allSchedulers.push(scheduleritem);
|
||||
}
|
||||
}, function (err) {
|
||||
console.log(err);
|
||||
showAlert(GetTextByKey("P_JS_FAILEDTOSAVESCHEDULER", "Failed to save scheduler."), alerttitle);
|
||||
$('#dialogmask1').hide();
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user