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

538 lines
20 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

function showSchedulerData(data) {
if (data) {
assetsObj = data;
var col = grid_dt.columns.find(c => c.name === 'Schedules');
if (assetsObj.HasSchedule)
col.width = assetsObj.TotalDays * 5;
else
col.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];
for (var j in r) {
if (j === "StartDate") {
r[j] = { DisplayValue: r["StartDateStr"], Value: r[j] };
}
else if (j === "FinishDate") {
r[j] = { DisplayValue: r["FinishDateStr"], Value: r[j] };
}
else if (j === "EngineHours") {
r[j] = { DisplayValue: r[j] === null ? "" : r[j], Value: r[j] };
}
if (r.AttachedToAsset)
r.AttachedToAssetName = r.AttachedToAsset.AssetName;
else
r.AttachedToAssetName = r.AssetName;
}
rows.push(r);
}
grid_dt.setData(rows);
grid_dt.refresh();
}
var grid_dt;
function InitGridData() {
grid_dt = createGridView('#schedulerlist', true);
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_JS_MAKE", "Make"), valueIndex: 'MakeName', allowFilter: true, css: { 'width': 100, 'text-align': 'left' } },
{ name: 'ModelName', caption: GetTextByKey("P_JS_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: 'AttachedToAsset', caption: GetTextByKey("P_JS_ATTACHEDTO", "Attached To"), valueIndex: 'AttachedToAssetName', 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: 'NextJobSite', caption: GetTextByKey("P_JS_SCHEDULEDFOR", "Scheduled For"), allowFilter: true, valueIndex: 'NextJobSite', 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', allowFilter: true, 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: 'StartDate', caption: GetTextByKey("P_JS_START", "Start"), valueIndex: 'StartDate', allowFilter: true, css: { 'width': 100, 'text-align': 'left' } },
{ name: 'FinishDate', caption: GetTextByKey("P_JS_FINISH", "Finish"), valueIndex: 'FinishDate', allowFilter: true, css: { 'width': 100, 'text-align': 'left' } },
{ name: 'DurationDays', caption: GetTextByKey("P_JS_DURATIONDAYS", "Duration (days)"), valueIndex: 'DurationDays', allowFilter: true, css: { 'width': 120, 'text-align': 'right' } },
{ 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 === "AttachedToAsset") {
col.sortFilter = function (a, b) {
a = a.AttachedToAssetName + (a.AttachedToAsset ? "1" : "");
b = b.AttachedToAssetName + (b.AttachedToAsset ? "1" : "");
return a > b ? 1 : -1;
}
}
else if (col.name === "Schedules") {
col.sortable = false;
col.orderable = false;
col.type = SchedulesColumn;
col.onScheduleClicked = function (item, sp) {
onEditScheduler(item, sp.Schedules);
};
col.styleFilter = function () {
return {
'position': 'relative',
'height': '36px',
};
}
}
columns.push(col);
}
grid_dt.canMultiSelect = false;
grid_dt.onCellDblClicked = function (rowindex, columnIndex) {
if (!IsReadOnly) {
if (columnIndex != grid_dt.columns.length - 1) {
var rowdata = grid_dt.source[rowindex];
if (rowdata) {
onEditScheduler(rowdata);
}
}
}
}
grid_dt.allcolumns = columns;
// multiple sort
grid_dt.columnchanged = function (ev) {
if (ev === 'sort') {
try {
var sorts = JSON.parse(window.localStorage.getItem('jobsite_schedulers_sorts'));
delete sorts[`${companyid}_${userid}`];
window.localStorage.setItem('jobsite_schedulers_sorts', JSON.stringify(sorts));
}
catch { }
}
};
grid_dt.onsorts = function (arr) {
var sorts;
try {
sorts = JSON.parse(window.localStorage.getItem('jobsite_schedulers_sorts'));
if (sorts == null) {
sorts = {};
}
}
catch {
sorts = {};
}
sorts[`${companyid}_${userid}`] = arr;
window.localStorage.setItem('jobsite_schedulers_sorts', JSON.stringify(sorts));
};
try {
var sorts = JSON.parse(window.localStorage.getItem('jobsite_schedulers_sorts'));
grid_dt.sortArray = sorts[`${companyid}_${userid}`];
} catch { }
getGridLayout(gridLayoutID, grid_dt);
}
function showJobsiteSchedulerList(data) {
var rows = [];
for (var i = 0; i < data.length; i++) {
var r = data[i];
r.Selected = false;
r.Changed = false;
for (var j in r) {
if (j === "BeginDate") {
r[j] = { DisplayValue: r["BeginDateStr"], Value: r[j] };
}
if (j === "EndDate") {
r[j] = { DisplayValue: r["EndDateStr"], Value: r[j] };
}
}
rows.push(r);
}
grid_jsschedulerdt.setData(rows);
grid_jsschedulerdt.refresh();
}
var grid_jsschedulerdt;
function InitJobsiteschedulerGridData() {
grid_jsschedulerdt = createGridView('#schedulerlist1');
grid_jsschedulerdt.isEditable = true;
var list_columns = [
{ name: 'Selected', caption: "", valueIndex: 'Selected', type: 3, css: { 'width': 45, 'text-align': 'center' } },
{ name: 'JobSiteName', caption: GetTextByKey("P_JOBSITES", "Jobsite"), valueIndex: 'JobSiteName', allowFilter: true, css: { 'width': 130, 'text-align': 'left' } },
{ name: 'BeginDate', caption: GetTextByKey("P_JS_BEGINDATE", 'Begin Date'), valueIndex: 'BeginDate', allowFilter: true, css: { 'width': 120, 'text-align': 'left' } },
{ name: 'EndDate', caption: GetTextByKey("P_JS_ENDDATE", 'End Date'), valueIndex: 'EndDate', allowFilter: true, css: { 'width': 120, 'text-align': 'left' } },
{ name: 'Delete', caption: "", alwaysshow: true, css: { 'width': 30, '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;
col.allowFilter = list_columns[hd].allowFilter;
col.oldFilterValues = col.filterValues;
if (list_columns[hd].type) {
col.type = list_columns[hd].type;
}
col.alwaysshow = list_columns[hd].alwaysshow;
var DateColumn = window['lib-ui'].GridDateColumn;
if (col.name === "BeginDate") {
col.type = DateColumn;
col.filter = function (item, editing) {
return item.BeginDateStr;
};
col.sortFilter = function (a, b) {
a = a.BeginDate.Value;
b = b.BeginDate.Value;
return a > b ? 1 : (a < b ? -1 : 0);
};
col.onChanged = function (item, value) {
item.BeginDateStr = item.BeginDate.DisplayValue = DateColumn.formatDate(value);
item.BeginDate = item.BeginDate.Value;
item.Changed = true;
};
}
else if (col.name === "EndDate") {
col.type = DateColumn;
col.filter = function (item, editing) {
return item.EndDateStr;
};
col.sortFilter = function (a, b) {
a = a.EndDate.Value;
b = b.EndDate.Value;
return a > b ? 1 : (a < b ? -1 : 0);
};
col.onChanged = function (item, value) {
item.EndDateStr = item.EndDate.DisplayValue = DateColumn.formatDate(value);
item.EndDate = item.EndDate.Value;
item.Changed = true;
};
}
else if (col.name === "Delete") {
col.sortable = false;
col.resizable = false;
col.type = GridView.ColumnTypes.Icon;
col.text = 'times';
col.events = {
onclick: function () {
onDeleteScheduler(this);
}
};
col.attrs = { 'title': GetTextByKey("P_WO_DELETE", 'Delete') };
}
columns.push(col);
}
grid_jsschedulerdt.multiSelect = true;
grid_jsschedulerdt.columns = columns;
grid_jsschedulerdt.init();
}
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();
showJobsiteSchedulerList(allSchedulers);
}
function onDeleteScheduler(item) {
var schduler = item;
var ids = [];
if (schduler) {
ids.push(schduler.DispatchId);
}
else {
var tempsource = grid_jsschedulerdt.source;
for (var i = 0; i < tempsource.length; i++) {
var sch = tempsource[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 = grid_jsschedulerdt.selectedIndex;
grid_jsschedulerdt.removeItem(index);
}
else {
var tempsource = grid_jsschedulerdt.source;
for (var i = tempsource.length - 1; i >= 0; i--) {
var sch = tempsource[i];
if (sch.Selected && !sch.Completed) {
dispatchids.push(sch.DispatchId);
grid_jsschedulerdt.removeItem(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 = [];
var tempsource = grid_jsschedulerdt.source;
for (var i = 0; i < tempsource.length; i++) {
var sch = tempsource[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 todays 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 (grid_jsschedulerdt.source.length == 0) {
$('#dialog_managescheduler').hide();
showmaskbg(false);
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);
showJobsiteSchedulerList(allSchedulers);
}
}, function (err) {
console.log(err);
showAlert(GetTextByKey("P_JS_FAILEDTOSAVESCHEDULER", "Failed to save scheduler."), alerttitle);
$('#dialogmask1').hide();
});
}