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

7350 lines
346 KiB
JavaScript

function locale(num, disabled) {
if (!disabled) {
return num;
}
var backup = num;
if (typeof num !== 'number') {
num = Number(num);
}
if (isNaN(num)) {
return backup;
}
var s = num.toFixed(2);
var array = s.split('.');
var integer = array[0].split('').reverse().join('').replace(/(\d{3})+?/g, function (s) { return s + ',' }).split('').reverse().join('');
if (integer[0] == ',') {
integer = integer.substring(1);
}
return integer + '.' + array[1];
}
function OnExpendInTab(e) {
var t = $(e);
var tid = t.attr("target");
if (t.hasClass("iconchevrondown")) {
t.removeClass("iconchevrondown").addClass("iconchevronright");
$("#" + tid).hide();
}
else {
t.removeClass("iconchevronright").addClass("iconchevrondown");
$("#" + tid).show();
}
}
/*************************Inspections********************************/
if (typeof ($woinspection) !== "function") {
$woinspection = function (option) {
this.option = option || {};
var _this = this;
var inspectionDiv = null;
this.changewo = function (woid, aid) {
//if (woid !== option.workorderid) {
this.option.workorderid = woid;
if (aid)
this.option.machineid = aid;
inspectionDiv && inspectionDiv.empty();
getWOInspectItems();
//}
}
this.close = function () {
}
this.changeasset = function (aid) {
this.option.machineid = aid;
}
this.createInspectionDiv = function (p_div) {
inspectionDiv = $('<div style=" min-width: 1000px; height: 668px;"></div>');
p_div.append(inspectionDiv);
p_div.applyFleetLanguageText(true);
}
this.createInspectionDiv(this.option.parent);
if (!this.option.inwidget) {
inspectionDiv.addClass('overflow', 'auto');
window.onresize = resizeContent;
resizeContent();
}
function resizeContent() {
inspectionDiv && inspectionDiv.css('height', $(window).height() - inspectionDiv.offset().top - 4);
}
var assetworkorders;
var inloading = false;
function getWOInspectItems() {
inspectionDiv.empty();
assetworkorders = [];
if (!_this.option.workorderid || _this.option.workorderid == "") return;
if (inloading)
return;
inloading = true;
if (typeof _this.option.showloading == 'function')
_this.option.showloading(true);
worequest("GetWOInspectItems", JSON.stringify([_this.option.workorderid, _this.option.machineid]), function (data) {
inloading = false;
if (typeof _this.option.showloading == 'function')
_this.option.showloading(false);
if (typeof (data) === "string") {
showAlert(data, GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
if (data.WorkOrderID != _this.option.workorderid) {
getWOInspectItems();
return;
}
data = data.Data;
if (data && data.length > 0) {
assetworkorders = data[0].WorkOrders;
ShowWOInspects(data);
}
else {
inspectionDiv.empty();
inspectionDiv.append($('<div class="noinspection"></div>').text(GetTextByKey("P_WO_NOINSPECTION", 'No Inspection')));
}
resizeContent();
}, function (err) {
inloading = false;
if (typeof _this.option.showloading == 'function')
_this.option.showloading(false);
});
}
function ShowWOInspects(inspects) {
var div = inspectionDiv;
div.empty();
for (var i = 0; i < inspects.length; i++) {
var ipt = inspects[i];
var targetid = "tbinspect_" + i;
var div_title = $('<div class="subtitle" style="position:relative;"></div>');
var spimg = $('<span class="sbutton iconchevronright" target="' + targetid + '" style="margin-left: 0; padding-right: 5px;"></span>').data('iptid', ipt.Id).click(function () {
var t = $(this);
var tid = t.attr("target");
if (t.hasClass("iconchevrondown")) {
t.removeClass("iconchevrondown").addClass("iconchevronright");
$("#" + tid).hide();
}
else {
t.removeClass("iconchevronright").addClass("iconchevrondown");
$("#" + tid).show();
var iptid = t.data("iptid");
var iframe = $("#iframe_" + iptid);
if (iframe.data("load") == 0) {
iframe.attr('src', '../Inspection/ReportForWorkOrder.aspx?rid=' + iptid);
iframe.data("load", 1);
}
}
});
div_title.append(spimg);
if (canExport) {
spimg = $('<span class="sbutton icondownload" style="padding: 5px 4px 6px 10px;"></span>');
spimg.attr('title', GetTextByKey('P_IPT_DOWNLOAD', 'Download')).on('click', ipt, function (e) {
window.open("../Inspection/Inspection.aspx?rt=f&t=1&id=" + e.data.Id + "&team=0", '_blank');
});
div_title.append(spimg);
spimg = $('<span class="sbutton iconprint" style="padding: 5px 4px 6px 10px;"></span>');
spimg.attr('title', GetTextByKey('P_IPT_PRINT', 'Print')).on('click', ipt, function (e) {
if (navigator.userAgent.indexOf('Firefox') >= 0 ||
navigator.userAgent.indexOf('Opera') >= 0) {
window.open("../Inspection/Inspection.aspx?rt=f&t=2&id=" + e.data.Id + "&team=0", '_blank');
return;
}
$("#ifdiv").attr('src', "../Inspection/Inspection.aspx?rt=f&t=2&id=" + e.data.Id + "&team=0");
if (!$("#ifdiv").data('inited')) {
$("#ifdiv").on('load', function () {
onifload();
});
$("#ifdiv").data('inited', 1);
}
});
}
div_title.append(spimg);
if (!WOReadOnly) {
spimg = $('<span class="sbutton iconview" style="padding: 5px 4px 6px 10px;"></span>');
if (ipt.VisibleToCustomer)
spimg.data('checked', true).removeClass('iconnotview').addClass('iconview').attr('title', GetTextByKey('P_WO_CUSTOMERVISIBLE', 'Customer Visible'));
else
spimg.data('checked', false).removeClass('iconview').addClass('iconnotview').attr('title', GetTextByKey('P_WO_NOTCUSTOMERVISIBLE', 'Not Customer Visible'));
div_title.append(spimg);
spimg.data('checked', ipt.VisibleToCustomer).on('click', ipt, function (e) {
var t = $(e.target);
if (t.data('checked') == true)
t.data('checked', false).removeClass('iconview').addClass('iconnotview').attr('title', GetTextByKey('P_WO_NOTCUSTOMERVISIBLE', 'Not Customer Visible'));
else
t.data('checked', true).removeClass('iconnotview').addClass('iconview').attr('title', GetTextByKey('P_WO_CUSTOMERVISIBLE', 'Customer Visible'));
updateInspectVisibleToCustomer(e.data.Id, t.data('checked'));
});
}
var span = $('<span class="sttitle" style="width:220px;"></span>').text(ipt.TemplateName);
div_title.append(span);
span = $('<span class="sttitle" style="width:280px;"></span>').text(ipt.CommitTimeLocalStr + ' by ' + ipt.CommitedByUserName);
div_title.append(span);
div_title.append(span);
if (AllowReassignWorkorders) {
span = $('<span style="margin-left:5px;"></span>').text(GetTextByKey('P_WO_WO_COLON', 'WO:'));
div_title.append(span);
var div_editableselect = $('<div style="margin-left:8px;width: 200px;display:inline-block;" class="dropdown"></div>');
div_editableselect
.attr({
'inspection-id': ipt.Id,
'old-wo-id': ipt.WorkOrderId
})
.dropdown(assetworkorders || [], {
input: false,
valueKey: 'Id',
textKey: 'WorkOrderNumber',
//selected: ipt.WorkOrderNumber
}).on('select', function (_e, wo) {
var et = $(_e.target);
if (wo && wo.Id != et.attr('old-wo-id')) {
var msg1 = GetTextByKey('P_WO_AREYOUSURETHATYOUWANTTOPROCEED', 'Are you sure that you want to proceed ?');
var msg = GetTextByKey('P_WO_YOUAREREASSIGNINGTHISWORKORDER', 'You are reassigning this work order. ') + "<br/>" + msg1;
if (wo.Completed)
msg = GetTextByKey('P_WO_YOUAREREASSIGNINGTHISWORKORDERTOACLOSEDWORKORDER', 'You are reassigning this Work Order to a CLOSED Work Order.') + "<br/>" + msg1;
showConfirm(msg, GetTextByKey("P_WO_WORKORDERASSIGNMENT", 'Work Order Assignment'), function () {
updateInspectionWorkOrder(et.attr('inspection-id'), wo.Id);
}, function () {
et.dropdownVal(et.attr('old-wo-id'));
});
}
});
div_editableselect.dropdownVal(ipt.WorkOrderId);
div_title.append(div_editableselect);
}
div_title.append('<hr />');
div.append(div_title);
var tab = $('<table style="display: none;width:100%;" id="' + targetid + '"></table>');
tr = $("<tr></tr>");
td = $('<td></td>');
var iframe = $('<iframe style="width: 100%; height:900px;; display: block; border: none;"></iframe>').attr("id", "iframe_" + ipt.Id).data("load", 0);
td.append(iframe);
tr.append(td);
tab.append(tr);
div.append(tab);
}
}
function onifload() {
var iframe = document.getElementById('ifdiv');
iframe.contentWindow.focus();
iframe.contentWindow.print();
}
function updateInspectionWorkOrder(id, woid) {
var p = JSON.stringify([id, woid, _this.option.workorderid]);
worequest("UpdateInspectionWorkOrder", htmlencode(p), function (data) {
if (typeof (data) === "string") {
showAlert(data, GetTextByKey("P_WO_WORKORDERASSIGNMENT", 'Work Order Assignment'));
return;
}
getWOInspectItems();
}, function (err) {
});
}
function updateInspectVisibleToCustomer(id, chk) {
var item = [id, chk];
var param = JSON.stringify(item);
param = htmlencode(param);
worequest('UpdateInspectionVisibleToCustomer', param, function (data) {
if (data !== 'OK') {
showAlert(data, GetTextByKey("P_WO_AVAILABLETOCUSTOMER", 'Available to Customer'));
}
}, function (err) {
});
}
}
}
/*************************End Inspections********************************/
/*****************************************Begin Estimate*********************************************/
if (typeof ($woestimate) !== "function") {
$woestimate = function (option) {
this.option = option || {};
var _this = this;
var EstimateStatus = {
Draft: 0,
Pending: 1,
Cancelled: 2,
Declined: 3,
Approved: 4,
Void: 5,
None: 100,
};
var estimatedata = [];
var publishestid = 0;
var publishestattach = null;
var addestfiledatas = [];
var cur_uploaddata;
var cur_uploadestid = 0;
var btn_woestattasave = null;
this.changewo = function (woid) {
//if (woid !== option.workorderid) {
var keepui = this.option.workorderid === woid;
this.option.workorderid = woid;
//hideEstimatePopup();
//hidePublishEstimatePopup();
//hideWOEstAttachmentPopup();
getEstimates(keepui);
//}
}
this.close = function () {
estimateDialog?.remove();
estimatePublishMask?.remove();
estimatePublishDialog?.remove();
estimateAttachmentDialog?.remove();
}
this.setwodata = function (wodata) {
this.option.workorderdata = wodata;
}
this.updatecontact = function (contacts) {
this.option.customercontacts = contacts
if (this.option.customercontacts) {
var names = "";
for (var i = 0; i < this.option.customercontacts.length; i++) {
var c = this.option.customercontacts[i];
if (c.OptOut || c.OptOut_BC) continue;
var mp = $.trim(c.MobilePhone);
var email = $.trim(c.Email);
if ((c.ContactPreference == "0" && (checkPhoneNumber(mp))
|| (c.ContactPreference == "1" && isEmail(email)))) {
if (names == "")
names = c.Name;
else
names += ";" + c.Name;
}
}
$('#dialog_est_phonenum').val(names);
}
else {
$('#dialog_est_phonenum').val("");
}
}
this.createEstimate = function (p_div) {
p_div.addClass('tab_estimates');
var div = $('<div class="function_title"></div>');
p_div.append(div);
var span_add = $('<span class="sbutton iconadd" data-lgid="P_WO_ADDESTIMATE">Add Estimate</span>');
span_add.click(OnAddEstimate);
div.append(span_add);
p_div.applyFleetLanguageText(true);
}
this.createEstimate(this.option.parent);
var estimateDialog = createEstimateDialog();
var estimatePublishMask = $('<div class="mask_dialog"></div>').hide();
$(document.body).append(estimatePublishMask);
var estimatePublishDialog = createPublishEstimateDialog();
var estimateAttachmentDialog = createEstimateAttachmentDialog();
function createEstimateDialog() {
var dialog = $('<div class="dialog" style="display: none;"></div>');
dialog.on('drop', function (ev) {
dropAddEstimateAttachment(ev.originalEvent);
}).on('dragover', function (ev) {
dragOverAddEstimateAttachment(ev.originalEvent);
}).on('paste', function (ev) {
cutAddEstimateAttachment(ev.originalEvent);
});
dialog.append('<div class="dialog-title"><span class="title" data-lgid="P_WO_ADDESTIMATE">Add Estimate</span><em class="dialog-close"></em></div>');
var tb = $('<table></table>');
dialog.append($('<div class="dialog-content"></div>').append(tb));
var tr = $('<tr></tr>').appendTo(tb);
var td = $('<td class="label" data-lgid="P_WO_ESTIMATENUMBER_COLON">Estimate #:</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_est_number = $('<input type="text" id="dialog_est_number" tabindex="1" maxlength="50" style="width:150px;" autocomplete="off" />').appendTo(td);
td = $('<td class="label" data-lgid="P_WO_ESTIMATESTATUS_COLON">Estimate Status:</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_est_status = $('<span id="dialog_est_status">Draft</span>').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_ESTIMATETOTALCOST_COLON">Estimate Total Cost ($):</td>').appendTo(tr);
td = $('<td class="cont"></td>').appendTo(tr);
var dialog_est_totalcosts = $('<input type="text" id="dialog_est_totalcosts" maxlength="12" style="width:150px;" tabindex="1" autocomplete="off">').appendTo(td);
var icon = $('<span class="sbutton iconequel" style="padding: 3px 1px 3px 6px; font-size: 12px;" data-title-lgid="P_WO_CALCULATINGTOTALS" title="Calculating Totals"></span>').appendTo(td);
icon.on('click', function () {
getEstimateTotalCost('');
});
td = $('<td class="label" data-lgid="P_WO_OTHERCOST_COLON">Other Cost ($):</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_est_othercost = $('<input type="text" id="dialog_est_othercost" maxlength="12" style="width:150px;" tabindex="1" autocomplete="off" />').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_PARTSCOST_COLON">Parts Cost ($):</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_est_partscost = $('<input type="text" id="dialog_est_partscost" maxlength="12" style="width:150px;" tabindex="1" autocomplete="off" />').appendTo(td);
td = $('<td class="label" data-lgid="P_WO_TRAVELTIMECOST_COLON">Travel Time Cost ($):</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_est_traveltimecost = $('<input type="text" id="dialog_est_traveltimecost" maxlength="12" style="width:150px;" tabindex="1" autocomplete="off" />').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_LABORCOST_COLON">Labor Cost ($):</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_est_laborcost = $('<input type="text" id="dialog_est_laborcost" maxlength="12" style="width:150px;" tabindex="1" autocomplete="off" />').appendTo(td);
td = $('<td class="label" data-lgid="P_WO_TIMETOCOMPLATEHOURS_COLON">Labor Hours:</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_est_timetocomplete = $('<input type="text" id="dialog_est_timetocomplete" maxlength="12" style="width:150px;" tabindex="1" autocomplete="off" />').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_TAXES_COLON">Taxes ($):</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_est_taxes = $('<input type="text" id="dialog_est_taxes" maxlength="12" style="width:150px;" tabindex="1" autocomplete="off" />').appendTo(td);
td = $('<td class="label" data-lgid="P_WO_POREQUIRED_COLON">PO Required:</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_est_porequired = $('<input type="checkbox" id="dialog_est_porequired" style="width: auto;" tabindex="1" />').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_CUSTOMERISSUES_COLON" style="vertical-align: top;">Customer Issues:</td>').appendTo(tr);
td = $('<td colspan="3"></td>').appendTo(tr);
var dialog_est_custissues = $('<textarea id="dialog_est_custissues" tabindex="1" maxlength="2000" style="height:80px;width:450px;"></textarea>').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_TECHNICIANNOTES_COLON" style="vertical-align: top;">Technician Notes:</td>').appendTo(tr);
td = $('<td colspan="3"></td>').appendTo(tr);
var dialog_est_technotes = $('<textarea id="dialog_est_technotes" tabindex="1" maxlength="500" style="height:80px;width:450px;"></textarea>').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_ATTACHMENTS_COLON" style="vertical-align: top;">Attachments:</td>').appendTo(tr);
td = $('<td colspan="3"></td>').appendTo(tr);
var spanAtta = $('<span class="sbutton iconadd" data-lgid="P_WO_ADDFILE">Add File</span>').appendTo(td);
spanAtta.on('click', function () {
openWOEstAttachmentDialog('');
})
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label"></td>').appendTo(tr);
td = $('<td colspan="3"></td>').appendTo(tr);
var tb_att = $('<table id="tab_est_attachments" style="border: 1px solid #a8a8a8; line-height: 25px; width: 320px; display: none;"></table>');
td.append(tb_att);
var tr_att = $('<tr></tr>');
tb_att.append(tr_att);
var td_att = $('<td></td>');
tr_att.append(td_att);
div_att = $('<div style="max-height: 80px; overflow: auto;padding: 0 4px;"></div>');
td_att.append(div_att);
tb_att = $('<table id="tab_est_atts" style="table-layout: fixed;"></table>');
div_att.append(tb_att);
var func = $('<div class="dialog-func"></div>');
dialog.append(func);
func.append('<input type="button" value="Cancel" data-lgid="P_WO_CANCEL" class="dialog-close" tabindex="11" />');
var btnpub = $('<input type="button" value="Publish" data-lgid="P_WO_PUBLISH" tabindex="11" />');
btnpub.on('click', function () {
openPublishDialog(-1);
});
func.append(btnpub);
var btnok = $('<input type="button" value="OK" data-lgid="P_WO_OK" tabindex="11" />');
btnok.on('click', function () {
onSaveWorkOrderEstimate('');
});
func.append(btnok);
func.append('<div class="clear"></div>');
dialog.append('<div class="maskbg" style="display: none;"></div>');
$(document.body).append(dialog);
dialog.dialog(function () {
showmaskbg(false);
});
dialog.applyFleetLanguageText(true);
return dialog;
}
function createPublishEstimateDialog() {
var dialog = $('<div class="dialog" style="display: none;"></div>');
dialog.append('<div class="dialog-title"><span class="title" data-lgid="P_WO_PUBLISHESTIMATE">Publish Estimate</span><em class="dialog-close"></em></div>');
var tb = $('<table style="line-height: 30px; margin-left: 10px; margin-right: 10px;"></table>');
dialog.append($('<div class="dialog-content"></div>').append(tb));
var tr = $('<tr></tr>').appendTo(tb);
var td = $('<td style="text-align: right;"></td>').appendTo(tr);
var dialog_est_chksendtextmsg = $('<input id="dialog_est_chksendtextmsg" type="checkbox" checked="checked" style="width: unset;" />').appendTo(td);
dialog_est_chksendtextmsg.change(function () {
var checked = $('#dialog_est_chksendtextmsg').prop('checked');
$('#dialog_est_phonenum').prop('disabled', !checked);
$('#dialog_est_chkIncludeStatusLink').prop('disabled', !checked);
$('#dialog_est_textmsg').prop('disabled', !checked);
});
td = $('<td></td>').appendTo(tr);
$('<label for="dialog_est_chksendtextmsg" data-lgid="P_WO_SENDUPDATETOCUSTOMER" style="user-select: none;">Send Update To Customer</label>').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td></td>').appendTo(tr);
$('<div style="font-size: 20px; margin-right: 5px; float: right;"><em class="spanbtn iconmobile" style="font-weight: 900; font-size: 14px; cursor: default; padding-left: 0; padding-right: 3px; padding-top: 0;"></em></div>').appendTo(td);
td = $('<td></td>').appendTo(tr);
var dialog_est_phonenum = $('<input type="text" id="dialog_est_phonenum" tabindex="1" autocomplete="off" maxlength="100" style="width: 320px;" />').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td style="text-align: right;"></td>').appendTo(tr);
var dialog_est_chkIncludeStatusLink = $('<input id="dialog_est_chkIncludeStatusLink" type="checkbox" checked="checked" style="width: unset;" />').appendTo(td);
td = $('<td></td>').appendTo(tr);
$('<label for="dialog_est_chkIncludeStatusLink" data-lgid="P_WO_INCLUDESTATUSLINK" style="user-select: none;">Include Status Link</label>').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td style="text-align: right;"></td>').appendTo(tr);
$('<input id="dialog_est_chkSendAttachment" type="checkbox" style="width: unset;" />').on('click', function () {
if (this.disabled) {
return;
}
var attachmentName = document.querySelector('#dialog_est_spanAttachmentName');
if (!this.checked) {
publishestattach = null;
attachmentName.style.display = 'none';
return;
}
var source;
if (publishestid <= 0) {
source = addestfiledatas.map(function (att) {
return {
file: att.File,
name: att.Notes || att.File.name,
enabled: /^image\//.test(att.File.type) || att.File.size <= 2 * 1024 * 1024
};
});
} else {
source = estimatedata.find(e => e.Id === publishestid)?.Attachments?.map(function (att) {
return {
id: att.AttachmentId,
name: att.Notes || att.FileName,
enabled: true
};
});
}
var items = source.filter(function (s) { return s.enabled });
if (items.length === 1) {
publishestattach = items[0];
attachmentName.innerText = publishestattach.name;
attachmentName.style.display = 'block';
return;
}
publishestattach = null;
var ui = window['lib-ui'];
var container = ui.createElement('div');
container.style.width = '440px';
container.style.height = '300px';
var grid = new ui.Grid(container);
grid.columns = [
{
key: 'selected',
type: ui.Grid.ColumnTypes.Checkbox,
enabled: 'enabled',
sortable: false,
orderable: false,
resizable: false,
onchanged: function (item) {
for (var it of this.source) {
if (it !== item) {
it.selected = false;
}
}
this.refresh();
}
},
{
key: 'name',
caption: GetTextByKey('P_WO_NAME', 'Name'),
width: 340,
orderable: false
}
];
grid.init();
var popup = new ui.Popup({
title: GetTextByKey('P_WO_SELECTATTACHMENT', 'Select Attachment'),
content: container,
resolve: function () {
var attachmentName = document.querySelector('#dialog_est_spanAttachmentName');
if (publishestattach == null) {
document.querySelector('#dialog_est_chkSendAttachment').checked = false;
attachmentName.style.display = 'none';
} else {
attachmentName.innerText = publishestattach.name;
attachmentName.style.display = 'block';
}
},
buttons: [
{
text: GetTextByKey('P_WO_ATTACH', 'Attach'),
trigger: function () {
var item = grid.source.filter(function (i) { return i.selected })[0];
if (item != null) {
publishestattach = item;
}
}
},
{ text: GetTextByKey('P_WO_CANCEL', 'Cancel') }
]
});
popup.show(dialog[0]).then(function () { grid.source = source });
}).appendTo(td);
td = $('<td></td>').appendTo(tr);
$('<label for="dialog_est_chkSendAttachment" data-lgid="P_WO_SENDESTIMATEASATTACHMENT" style="user-select: none;">Send Estimate as Attachment</label>').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td></td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
$('<span id="dialog_est_spanAttachmentName" style="user-select: none; color: gray; display: block; white-space: nowrap; max-width: 300px; overflow: hidden; text-overflow: ellipsis; display: none"></span>').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" style="width: unset;"><span data-lgid="P_WO_MESSAGE_COLON">Message:</span></td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_est_variables = $('<select id="dialog_est_variables" style="width: 156px;"></select>').appendTo(td);
dialog_est_variables.append('<option value="0">[Site_Name]</option>');
dialog_est_variables.append('<option value="1">[Location]</option>');
dialog_est_variables.append('<option value="14">[Asset]</option>');
dialog_est_variables.append('<option value="4">[VIN]</option>');
dialog_est_variables.append('<option value="2">[Make]</option>');
dialog_est_variables.append('<option value="3">[Model]</option>');
dialog_est_variables.append('<option value="5">[Id_Phone]</option>');
dialog_est_variables.append('<option value="6">[Advisor]</option>');
dialog_est_variables.append('<option value="7">[Company_Name]</option>');
dialog_est_variables.append('<option value="8">[Contact_Name]</option>');
dialog_est_variables.append('<option value="9">[Contact_First_Name]</option>');
dialog_est_variables.append('<option value="10">[Status_Link]</option>');
dialog_est_variables.append('<option value="11">[Technician_Name]</option>');
dialog_est_variables.append('<option value="12">[Work_Order_Number]</option>');
dialog_est_variables.append('<option value="13">[Parts_Order_Number]</option>');
var dialog_est_insertfield = $('<input type="button" id="dialog_est_insertfield" data-lgid="P_WO_ADD" value="Add" style="width: auto; height: auto; margin-left: 5px;" tabindex="1" /><br />').appendTo(td);
dialog_est_insertfield.on('click', function () {
insertestfield();
});
var dialog_est_textmsg = $('<textarea id="dialog_est_textmsg" tabindex="1" style="width: 320px; height: 120px; margin-top: 6px;" maxlength="2000"></textarea>').appendTo(td);
var func = $('<div class="dialog-func"></div>');
dialog.append(func);
func.append('<input type="button" value="Cancel" data-lgid="P_WO_CANCEL" class="dialog-close" tabindex="11" />');
btn_publish = $('<input type="button" value="Publish" data-lgid="P_WO_PUBLISH" tabindex="1" />');
btn_publish.on('click', function () {
onPublishEstimate();
});
func.append(btn_publish);
func.append('<div class="clear"></div>');
dialog.append('<div class="maskbg" style="display: none;"></div>');
$(document.body).append(dialog);
dialog.dialog(function () {
hidePublishEstimatePopup();
});
dialog.applyFleetLanguageText(true);
return dialog;
}
function createEstimateAttachmentDialog() {
var dialog = $('<div class="dialog" style="display: none;"></div>');
dialog.append('<div class="dialog-title"><span class="title" data-lgid="P_WO_ADDATTACHMENT">Add Attachment</span><em class="dialog-close"></em></div>');
var tb = $('<table style="line-height: 30px; margin-left: 10px; margin-right: 10px;"></table>');
dialog.append($('<div class="dialog-content"></div>').append(tb));
var tr = $('<tr></tr>').appendTo(tb);
var td = $('<td class="label" style="width: unset;"><span data-lgid="P_WO_CAPTION_COLON">Caption:</span></td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_estatt_notes = $('<input type="text" id="dialog_estatt_notes" maxlength="200" tabindex="1" autocomplete="off" />').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_ATTACHMENTS_COLON" style="vertical-align: top; width: unset;">Attachments:</td>').appendTo(tr);
td = $('<td class="cont"></td>').appendTo(tr);
var dialog_woestatt_uploadattfile = $('<input id="dialog_woestatt_uploadattfile" type="button" value="Add File..." data-lgid="P_FR_ADDFILE" tabindex="1" style="background-color: #0099FF; color: #FFFFFF; height: 20px; width: 200px;" />').appendTo(td);
dialog_woestatt_uploadattfile.on('click', function () {
UpLoadEstimateAttachment();
});
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label"></td>').appendTo(tr);
td = $('<td colspan="3"></td>').appendTo(tr);
var tb_att = $('<table id="tab_woest_attachments" style="border: 1px solid #a8a8a8; line-height: 25px; width: 320px; display: none;"></table>');
td.append(tb_att);
var tr_att = $('<tr></tr>');
tb_att.append(tr_att);
var td_att = $('<td></td>');
tr_att.append(td_att);
div_att = $('<div style="max-height: 80px; overflow: auto;padding: 0 4px;"></div>');
td_att.append(div_att);
tb_att = $('<table id="tab_woest_atts" style="table-layout: fixed;"></table>');
div_att.append(tb_att);
var func = $('<div class="dialog-func"></div>');
dialog.append(func);
func.append('<input type="button" value="Cancel" data-lgid="P_WO_CANCEL" class="dialog-close" tabindex="11" />');
btn_woestattasave = $('<input type="button" value="Save" data-lgid="P_WO_SAVE" tabindex="11" />');
btn_woestattasave.on('click', function () {
onSaveWOEstAttachment();
});
func.append(btn_woestattasave);
func.append('<div class="clear"></div>');
dialog.append('<div class="maskbg" style="display: none;"></div>');
$(document.body).append(dialog);
dialog.dialog(function () {
hideWOEstAttachmentPopup();
});
dialog.applyFleetLanguageText(true);
return dialog;
}
function insertestfield() {
var field = $("#dialog_est_variables").find("option:selected").text();
$("#dialog_est_textmsg").focus();
document.execCommand('insertText', false, field);
}
function showEstimatePopup() {
showmaskbg(true);
estimateDialog.css({
'top': (document.documentElement.clientHeight - estimateDialog.height()) / 3,
'left': (document.documentElement.clientWidth - estimateDialog.width()) / 2
}).showDialogfixed();
}
function hideEstimatePopup() {
showmaskbg(false);
estimateDialog.hide();
}
var inloading = false;
function getEstimates(keepui) {
if (!keepui) {
_this.option.parent.find('.estimates_div').remove();
_this.option.parent.find('.estimates_table').remove();
}
if (!_this.option.workorderid || _this.option.workorderid == "") return;
if (inloading)
return;
inloading = true;
if (typeof _this.option.showloading == 'function')
_this.option.showloading(true);
worequest("GetWorkOrderEstimates", _this.option.workorderid, function (data) {
inloading = false;
if (typeof _this.option.showloading == 'function')
_this.option.showloading(false);
if (typeof (data) === "string") {
showAlert(data, GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
if (data.WorkOrderID != _this.option.workorderid) {
getEstimates(false);
return;
}
data = data.Data;
_this.option.parent.find('.estimates_div').remove();
_this.option.parent.find('.estimates_table').remove();
if (data) {
if (data && data.length > 0) {
estimatedata = data;
if (AllowCustomer)
$('#dialog_estimatestatus').text(_this.getEstimateStatus(data[data.length - 1].Status));
for (var i = 0; i < data.length; i++) {
showEstimate(data[i]);
}
}
else {
if (AllowCustomer)
$('#dialog_estimatestatus').text(_this.getEstimateStatus(100))
}
}
}, function (err) {
inloading = false;
if (typeof _this.option.showloading == 'function')
_this.option.showloading(false);
});
}
function dragOverEstimateAttachment(ev, estid) {
ev.preventDefault();
ev.dataTransfer.dropEffect = 'link';
}
function dropEstimateAttachment(ev, estid) {
ev.preventDefault();
ev.stopPropagation();
var df = ev.dataTransfer;
var files = [];
if (df.items !== undefined) {
for (var i = 0; i < df.items.length; i++) {
var item = df.items[i];
if (item.kind === "file" && (item.webkitGetAsEntry() == null || item.webkitGetAsEntry().isFile)) {
var file = item.getAsFile();
if (file.size == 0) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS", "Attachment size is 0kb, uploading failed."));
return;
}
if (file.size > 50 * 1024 * 1024) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS1", "Attachment is too large. Maximum file size is 50 MB."));
return;
}
files.push({ 'File': file, 'Notes': '' });
}
}
}
var estimate = $('#tabestimate' + estid).data('estimate');
if (!estimate)
return;
if (estimate.Status !== 0)
return;
if (files.length > 0)
SaveEstimateAttachmentFiles(files, estid);
}
function cutEstimateAttachment(ev, estid) {
ev.stopPropagation();
var df = ev.clipboardData;
var files = [];
if (df.items !== undefined) {
for (var i = 0; i < df.items.length; i++) {
var item = df.items[i];
if (item.kind === "file" && (item.webkitGetAsEntry() == null || item.webkitGetAsEntry().isFile)) {
var file = item.getAsFile();
if (file.size == 0) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS", "Attachment size is 0kb, uploading failed."));
return;
}
if (file.size > 50 * 1024 * 1024) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS1", "Attachment is too large. Maximum file size is 50 MB."));
return;
}
files.push({ 'File': file, 'Notes': '' });
}
}
}
var estimate = $('#tabestimate' + estid).data('estimate');
if (!estimate)
return;
if (estimate.Status !== 0)
return;
if (files.length > 0)
SaveEstimateAttachmentFiles(files, estid);
}
function showEstimate(estimate) {
var estid = estimate.Id;
var statustext = _this.getEstimateStatus(estimate.Status);
var div_estimates = _this.option.parent;
var div_title = $('<div id="divestimate' + estid + '" class="subtitle estimates_div" style="margin-right:0px;"></div>');
div_title.on('drop', estid, function (ev) {
dropEstimateAttachment(ev.originalEvent, ev.data);
}).on('dragover', estid, function (ev) {
dragOverEstimateAttachment(ev.originalEvent, ev.data);
}).on('paste', estid, function (ev) {
cutEstimateAttachment(ev.originalEvent, ev.data);
});
div_title.append('<span class="sbutton iconchevronright" target="tabestimate' + estid + '" onclick="OnExpendInTab(this)" style="margin-left: 0; padding-right: 5px;"></span>');
div_title.append('<span class="sttitle" id="span_estnumber' + estid + '">' + estimate.EstimateNumber + '</span>');
div_title.append('<span class="sttitle" id="span_eststatus' + estid + '" style="font-weight:bold;width:320px;">' + statustext + '</span>');
if (!WOReadOnly && (estimate.Status == 0 || estimate.Status === 1)) {
var s_del = $('<span class="sbutton icondelete" style="float:right;margin-right: 10px; padding: 0px 0px 0px 5px;"></span>');
s_del.on('click', estid, function (e) {
OnDeleteEstimate(e.data);
});
div_title.append(s_del);
}
div_title.append('<hr />');
div_estimates.append(div_title);
var table = $('<table id="tabestimate' + estid + '" class="estimates_table"></table>').data('estimate', estimate).hide();
table.on('drop', estid, function (ev) {
dropEstimateAttachment(ev.originalEvent, ev.data);
}).on('dragover', estid, function (ev) {
dragOverEstimateAttachment(ev.originalEvent, ev.data);
}).on('paste', estid, function (ev) {
cutEstimateAttachment(ev.originalEvent, ev.data);
});
div_estimates.append(table);
var tr = $('<tr></tr>');
table.append(tr);
var td = $('<td class="label"></td>').text(GetTextByKey('P_WO_ESTIMATENUMBER_COLON', 'Estimate #:'));
tr.append(td);
td = $('<td style="width:150px;"></td>');
tr.append(td);
var ipt = $('<input type="text" id="dialog_est_number' + estid + '" tabindex="1" maxlength="50" autocomplete="off" />').val(estimate.EstimateNumber).change((function (id) { return function () { inputChanged(id) } })(estid));
td.append(ipt);
td = $('<td class="label"></td>').text(GetTextByKey('P_WO_ESTIMATESTATUS_COLON', 'Estimate Status:'));
tr.append(td);
td = $('<td></td>');
tr.append(td);
ipt = $('<span style="font-weight:bold;" id="dialog_est_status' + estid + '"></span>').text(statustext);
td.append(ipt);
if ([3, 4, 5].indexOf(estimate.Status) >= 0) {
td = $('<td class="label"></td>');
if (estimate.Status == 3) {
td.text(GetTextByKey('P_WO_REJECTEDBY_COLON', 'Rejected By:'));
}
else if (estimate.Status == 4 || estimate.Status == 5) {
td.text(GetTextByKey('P_WO_APPROVEDBY_COLON', 'Approved By:'));
}
tr.append(td);
td = $('<td></td>');
tr.append(td);
var byph = "";
if (estimate.ResponsePhoneStr !== "")
byph = " (" + estimate.ResponsePhoneStr + ")";
ipt = $('<span id="dialog_est_crn' + estid + '"></span>').text(estimate.ResponseName + byph);
td.append(ipt);
}
else {
tr.append('<td cospan="2"></td>');
}
var disabled = estimate.Status === EstimateStatus.Pending || estimate.Status === EstimateStatus.Declined || estimate.Status === EstimateStatus.Approved || estimate.Status === EstimateStatus.Void;
tr = $('<tr></tr>');
table.append(tr);
td = $('<td class="label"></td>').text(GetTextByKey('P_WO_ESTIMATETOTALCOST_COLON', 'Estimate Total Cost ($):'));
tr.append(td);
td = $('<td style="display: inline-flex;"></td>');
tr.append(td);
ipt = $('<input type="text" id="dialog_est_totalcosts' + estid + '" tabindex="1" maxlength="12" autocomplete="off"/>').val(locale(estimate.TotalCost, disabled));
td.append(ipt);
var btntotal = $("<span class='sbutton iconequel' style='padding:3px 1px 3px 6px;font-size:12px;margin-left:2px;'></span>").click(estid, function (e) {
getEstimateTotalCost(e.data);
}).attr("title", GetTextByKey('P_WO_CALCULATINGTOTALS', 'Calculating Totals'));
td.append(btntotal);
td = $('<td class="label"></td>').text(GetTextByKey('P_WO_OTHERCOST_COLON', 'Other Cost ($):'));
tr.append(td);
td = $('<td></td>');
tr.append(td);
ipt = $('<input type="text" id="dialog_est_othercost' + estid + '" tabindex="1" maxlength="12" autocomplete="off" />').val(locale(estimate.OtherCost, disabled)).change((function (id) { return function () { inputChanged(id) } })(estid));
td.append(ipt);
if ([3, 4, 5].indexOf(estimate.Status) >= 0) {
td = $('<td class="label"></td>');
if (estimate.Status == 3) {
td.text(GetTextByKey('P_WO_REJECTEDTIME_COLON', 'Rejected Time:'));
}
else if (estimate.Status == 4 || estimate.Status == 5) {
td.text(GetTextByKey('P_WO_APPROVEDTIME_COLON', 'Approved Time:'));
}
tr.append(td);
td = $('<td></td>');
tr.append(td);
ipt = $('<span id="dialog_est_crt' + estid + '"></span>').text(estimate.CustomerResponseTimeStr);
td.append(ipt);
}
else {
tr.append('<td cospan="2"></td>');
}
tr = $('<tr></tr>');
table.append(tr);
td = $('<td class="label"></td>').text(GetTextByKey('P_WO_PARTSCOST_COLON', 'Parts Cost ($):'));
tr.append(td);
td = $('<td></td>');
tr.append(td);
ipt = $('<input type="text" id="dialog_est_partscost' + estid + '" tabindex="1" maxlength="12" autocomplete="off" />').val(locale(estimate.PartsCost, disabled)).change((function (id) { return function () { inputChanged(id) } })(estid));
td.append(ipt);
td = $('<td class="label"></td>').text(GetTextByKey('P_WO_TRAVELTIMECOST_COLON', 'Travel Time Cost ($):'));
tr.append(td);
td = $('<td></td>');
tr.append(td); ipt = $('<input type="text" id="dialog_est_traveltimecost' + estid + '" tabindex="1" maxlength="12" autocomplete="off" />').val(locale(estimate.TravelCost, disabled)).change((function (id) { return function () { inputChanged(id) } })(estid));
td.append(ipt);
if ([3, 4, 5].indexOf(estimate.Status) >= 0) {
td = $('<td class="label"></td>');
if (estimate.Status == 3) {
td.text(GetTextByKey('P_WO_REASONFORREJECTION_COLON', 'Reason for Rejection:'));
}
else if (estimate.Status == 4 || estimate.Status == 5) {
td.text(GetTextByKey('P_WO_PONUMBER_COLON', 'PO #:'));
}
tr.append(td);
td = $('<td></td>');
tr.append(td);
if (estimate.Status == 3) {
ipt = $('<span id="dialog_est_rfr' + estid + '"></span>').text(estimate.RejectReason);
td.append(ipt);
}
else if (estimate.Status == 4 || estimate.Status == 5) {
ipt = $('<span id="dialog_est_rfr' + estid + '"></span>').text(estimate.PONumber);
td.append(ipt);
}
}
else {
tr.append('<td cospan="2"></td>');
}
tr = $('<tr></tr>');
table.append(tr);
td = $('<td class="label"></td>').text(GetTextByKey('P_WO_LABORCOST_COLON', 'Labor Cost ($):'));
tr.append(td);
td = $('<td></td>');
tr.append(td);
ipt = $('<input type="text" id="dialog_est_laborcost' + estid + '" tabindex="1" maxlength="12" autocomplete="off" />').val(locale(estimate.LaborCost, disabled)).change((function (id) { return function () { inputChanged(id) } })(estid));
td.append(ipt);
td = $('<td class="label"></td>').text(GetTextByKey('P_WO_TIMETOCOMPLATEHOURS_COLON', 'Labor Hours:'));
tr.append(td);
td = $('<td></td>');
tr.append(td);
ipt = $('<input type="text" id="dialog_est_timetocomplete' + estid + '" tabindex="1" maxlength="12" autocomplete="off" />').val(estimate.HoursToComplete).change((function (id) { return function () { inputChanged(id) } })(estid));
td.append(ipt);
tr = $('<tr></tr>');
table.append(tr);
td = $('<td class="label"></td>').text(GetTextByKey('P_WO_TAXES_COLON', 'Taxes ($):'));
tr.append(td);
td = $('<td></td>');
tr.append(td);
ipt = $('<input type="text" id="dialog_est_taxes' + estid + '" tabindex="1" maxlength="12" autocomplete="off" />').val(locale(estimate.Taxes, disabled)).change((function (id) { return function () { inputChanged(id) } })(estid));
td.append(ipt);
td = $('<td class="label"></td>').text(GetTextByKey('P_WO_POREQUIRED_COLON', 'PO Required:'));
tr.append(td);
td = $('<td></td>');
tr.append(td);
ipt = $('<input type="checkbox" id="dialog_est_porequired' + estid + '" tabindex="1" style="width: auto;" />').prop('checked', estimate.PORequired).change((function (id) { return function () { inputChanged(id) } })(estid));
td.append(ipt);
tr = $('<tr></tr>');
table.append(tr);
td = $('<td class="label" style="vertical-align:top;"></td>').text(GetTextByKey('P_WO_CUSTOMERISSUES_COLON', 'Customer Issues:'));
tr.append(td);
td = $('<td colspan="3"></td>');
tr.append(td);
ipt = $('<textarea id="dialog_est_custissues' + estid + '" tabindex="1" maxlength="2000" style="width: 480px; height: 80px; margin-top: 5px;"></textarea>').val(estimate.CustomerIssues).change((function (id) { return function () { inputChanged(id) } })(estid));
td.append(ipt);
if ([3, 4, 5].indexOf(estimate.Status) >= 0) {
td = $('<td class="label" style="vertical-align:top;"></td>').text(GetTextByKey('P_WO_CUSTOMERNOTES_COLON', 'Customer Notes:'));
tr.append(td);
td = $('<td></td>');
tr.append(td);
ipt = $('<textarea id="dialog_est_custnotes' + estid + '" tabindex="1" maxlength="2000" disabled="disabled" style="width: 520px; height: 80px; margin-top: 5px;"></textarea>').val(estimate.CustomerNotes);
td.append(ipt);
}
else {
tr.append('<td cospan="2"></td>');
}
tr = $('<tr></tr>');
table.append(tr);
td = $('<td class="label" style="vertical-align:top;"></td>').text(GetTextByKey('P_WO_TECHNICIANNOTES_COLON', 'Technician Notes:'));
tr.append(td);
td = $('<td colspan="3"></td>');
tr.append(td);
ipt = $('<textarea id="dialog_est_technotes' + estid + '" tabindex="1" maxlength="2000" style="width: 480px; height: 80px; margin-top: 5px;" ></textarea>').val(estimate.TechnicianNotes).change((function (id) { return function () { inputChanged(id) } })(estid));
td.append(ipt);
if (([3, 4, 5].indexOf(estimate.Status) >= 0) && estimate.Signature != null && estimate.Signature && estimate.Signature.length > 0) {
td = $('<td class="label" style="vertical-align:top;"></td>').text(GetTextByKey('P_WO_SIGNATURE_COLON', 'Signature:'));
tr.append(td);
td = $('<td rowspan="2"></td>');
tr.append(td);
var jpeg = estimate.Signature;
if (typeof (estimate.Signature) !== "string") {
jpeg = arrayBufferToBase64(estimate.Signature);
}
var imgsig = $('<img style="height: 110px;" />').attr('src', 'data:image/png;base64,' + jpeg);
td.append(imgsig);
}
else {
tr.append('<td rowspan="2"></td>');
}
if (estimate.Status === 0) {
tr = $('<tr></tr>');
table.append(tr);
td = $('<td class="label"></td>').text(GetTextByKey('P_WO_ATTACHMENTS_COLON', ' Attachments:'));
tr.append(td);
td = $('<td colspan="3"></td>');
tr.append(td);
var div_att = $('<div></div>');
td.append(div_att);
if (!WOReadOnly) {
var span_addfile = $('<span class="sbutton iconadd" />').text(GetTextByKey('P_FR_ADDFILE', 'Add File...'));
span_addfile.on('click', estid, function (e) {
openWOEstAttachmentDialog(e.data);
})
div_att.append(span_addfile);
}
}
tr = $('<tr id="tr_est_atts' + estid + '"></tr>');
table.append(tr);
td = $('<td class="label" style="vertical-align:top;"></td>').text(estimate.Status === 0 ? "" : GetTextByKey('P_WO_ATTACHMENTS_COLON', 'Attachments:'));
tr.append(td);
td = $('<td colspan="3"></td>');
tr.append(td);
var tb_att = $('<table id="tab_est_attachments' + estid + '" style="border: 1px solid #a8a8a8; line-height: 25px; width: 480px; display: none;"></table>');
td.append(tb_att);
var tr_att = $('<tr></tr>');
tb_att.append(tr_att);
var td_att = $('<td></td>');
tr_att.append(td_att);
div_att = $('<div style="max-height: 80px; overflow: auto;padding: 0 4px;"></div>');
td_att.append(div_att);
tb_att = $('<table id="tab_est_atts' + estid + '" style="table-layout: fixed;"></table>');
div_att.append(tb_att);
showEstimateAttachment(estid);
tr = $('<tr></tr>');
table.append(tr);
td = $('<td class="label"></td>');
tr.append(td);
ipt = $('<lable id="lable_est_visibletocustomer' + estid + '"></lable>').text(GetTextByKey('P_WO_AVAILABLETOCUSTOMER_COLON', 'Available to Customer:')).hide();
td.append(ipt);
td = $('<td></td>');
tr.append(td);
ipt = $('<input type="checkbox" id="dialog_est_visibletocustomer' + estid + '" tabindex="1" style="width: auto;" />').prop('checked', estimate.VisibleToCustomer).hide().change((function (id) { return function () { updateWOEstimateVisibleToCustomer(id) } })(estid));
td.append(ipt);
td = $('<td style="text-align: right; height: 33px"></td>');
tr.append(td);
ipt = $('<input type="button" style="width: 80px; height: 25px;" id="btn_estimatesave' + estid + '" />').val(GetTextByKey('P_WO_SAVE', 'Save')).hide();
ipt.on('click', estid, function (e) {
onSaveWorkOrderEstimate(e.data);
});
td.append(ipt);
ipt = $('<input type="button" style="width: 80px; height: 25px;margin-left:16px;" id="btn_estimatepublish' + estid + '" />').val(GetTextByKey('P_WO_PUBLISH', 'Publish')).hide();
ipt.on('click', estid, function (e) {
openPublishDialog(e.data);
});
td.append(ipt);
ipt = $('<input type="button" style="width: 80px; height: 25px;" id="btn_estimaterevoke' + estid + '" />').val(GetTextByKey('P_WO_REVOKE', 'Revoke')).hide();
ipt.on('click', estid, function (e) {
OnRevokeEstimate(e.data);
});
td.append(ipt);
if (!WOReadOnly) {
if (estimate.Status === 0) {
$('#btn_estimatesave' + estid).show();
$('#btn_estimatepublish' + estid).show();
}
if (estimate.Status === 1 || estimate.Status === 4) {
$('#btn_estimaterevoke' + estid).show();
}
}
if (disabled || WOReadOnly)
setEstimateDisabled(estid, true);
if (estimate.Status === 3) {
$('#span_eststatus' + estid).css('color', 'red');
$('#dialog_est_status' + estid).css('color', 'red');
}
if (estimate.Status === 4) {
$('#span_eststatus' + estid).css('color', '#2eda2e');
$('#dialog_est_status' + estid).css('color', '#2eda2e');
}
if ([3, 4, 5].indexOf(estimate.Status) >= 0) {
$('#lable_est_visibletocustomer' + estid).show();
$('#dialog_est_visibletocustomer' + estid).show();
}
}
function arrayBufferToBase64(buffer) {
var binary = '';
var bytes = new Uint8Array(buffer);
var len = bytes.byteLength;
for (var i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[i]);
}
return window.btoa(binary);
}
function OnRevokeEstimate(estid) {
if (!estid)
return;
showConfirm(GetTextByKey("P_WO_DOYOUWANTTOREVOKETHEESTIMATE", 'Do you want to revoke the estimate?'), GetTextByKey("P_WO_REVOKEESTIMATE", 'Revoke Estimate'), function () {
worequest("RevokeWorkOrderEstimate", estid, function (data) {
if (data === "OK") {
getEstimates(true);
}
}, function (err) {
showAlert(GetTextByKey("P_WO_FAILEDTOREVOKETHISESTIMATE", 'Failed to revoke this estimate.'), GetTextByKey("P_WO_REVOKEESTIMATE", 'Revoke Estimate'));
});
});
}
function OnDeleteEstimate(estid) {
if (!estid)
return;
showConfirm(GetTextByKey("P_WO_DOYOUWANTTODELETETHEESTIMATE", 'Do you want to delete the estimate?'), GetTextByKey("P_WO_DELETEESTIMATE", 'Delete Estimate'), function () {
worequest("DeleteWorkOrderEstimate", estid, function (data) {
if (data === "OK") {
getEstimates(true);
}
}, function (err) {
showAlert(GetTextByKey("P_WO_FAILEDTODELETETHISESTIMATE", 'Failed to delete this estimate.'), GetTextByKey("P_WO_DELETEESTIMATE", 'Delete Estimate'));
});
});
}
function onSaveWorkOrderEstimate(estid, next) {
var estimateid = -1;
var status = 0;
var alerttitle = GetTextByKey("P_WO_ADDESTIMATE", "Add Estimate");
if (estid > 0) {
alerttitle = GetTextByKey("P_WO_EDITESTIMATE", "Edit Estimate");
var estimate = $('#tabestimate' + estid).data('estimate');
if (!estimate)
return;
estimateid = estimate.Id;
status = estimate.Status;
}
var estsufix = estid > 0 ? String(estid) : '';
var item = {
'Id': estimateid,
'WorkOrderId': _this.option.workorderid,
'Status': status,
'EstimateNumber': $('#dialog_est_number' + estsufix).val(),
'TotalCost': $('#dialog_est_totalcosts' + estsufix).val(),
'OtherCost': $('#dialog_est_othercost' + estsufix).val(),
'PartsCost': $('#dialog_est_partscost' + estsufix).val(),
'TravelCost': $('#dialog_est_traveltimecost' + estsufix).val(),
'LaborCost': $('#dialog_est_laborcost' + estsufix).val(),
'HoursToComplete': $('#dialog_est_timetocomplete' + estsufix).val(),
'CustomerIssues': $('#dialog_est_custissues' + estsufix).val(),
'TechnicianNotes': $('#dialog_est_technotes' + estsufix).val(),
'Taxes': $('#dialog_est_taxes' + estsufix).val(),
'PORequired': $('#dialog_est_porequired' + estsufix).prop('checked')
};
if (isNaN(item.TotalCost) || item.TotalCost < 0) {
showAlert(GetTextByKey('P_WO_TOTALCOST_INVALID', 'Total cost is not a valid number.'), alerttitle, function () { $('#dialog_est_totalcosts' + estsufix).focus() });
return;
}
if (isNaN(item.OtherCost) || item.OtherCost < 0) {
showAlert(GetTextByKey('P_WO_OTHERCOST_INVALID', 'Other cost is not a valid number.'), alerttitle, function () { $('#dialog_est_totalcosts' + estsufix).focus() });
return;
}
if (isNaN(item.PartsCost) || item.PartsCost < 0) {
showAlert(GetTextByKey('P_WO_PARTSCOST_INVALID', 'Parts cost is not a valid number.'), alerttitle, function () { $('#dialog_est_partscost' + estsufix).focus() });
return;
}
if (isNaN(item.TravelCost) || item.TravelCost < 0) {
showAlert(GetTextByKey('P_WO_TRAVELTIMECOST_INVALID', 'Travel time cost is not a valid number.'), alerttitle, function () { $('#dialog_est_traveltimecost' + estsufix).focus() });
return;
}
if (isNaN(item.LaborCost) || item.LaborCost < 0) {
showAlert(GetTextByKey('P_WO_LABORCOST_INVALID', 'Labor cost is not a valid number.'), alerttitle, function () { $('#dialog_est_laborcost' + estsufix).focus() });
return;
}
if (isNaN(item.HoursToComplete) || item.HoursToComplete < 0) {
showAlert(GetTextByKey('P_WO_TIMETOCOMPLETE_INVALID', 'Time to complete is not a valid number.'), alerttitle, function () { $('#dialog_est_timetocomplete' + estsufix).focus() });
return;
}
if (isNaN(item.Taxes) || item.Taxes < 0) {
showAlert(GetTextByKey('P_WO_TAXES_INVALID', 'Taxes is not a valid number.'), alerttitle, function () { $('#dialog_est_taxes' + estsufix).focus() });
return;
}
$('#btn_estimatesave' + estsufix).attr('disabled', true);
var param = JSON.stringify(item);
param = htmlencode(param);
worequest("SaveWorkOrderEstimate", param, function (data) {
if (typeof (data) === "string") {
$('#btn_estimatesave' + estsufix).attr('disabled', false);
showAlert(data, alerttitle);
} else {
$('#btn_estimatesave' + estsufix).attr('disabled', false);
if (estid <= 0) {//新增
if (addestfiledatas && addestfiledatas.length > 0) {
SaveEstimateAttachmentFiles(addestfiledatas, data);
addestfiledatas = [];
}
if (next)
next(data);
else {
getEstimates(true);
}
hideEstimatePopup();
}
else {//编辑
if (next)
next(estid);
else {
showAlert(GetTextByKey("P_WO_SAVSUCCESSFULLY", "Saved successfully."), alerttitle);
$('#span_estnumber' + estsufix).text($('#dialog_est_number' + estsufix).val());
}
}
}
}, function (err) {
$('#btn_estimatesave' + estsufix).attr('disabled', false);
console.log(err);
showAlert(GetTextByKey("P_WO_FAILEDTORSAVEESTIMATE", 'Failed to save estimate.'), alerttitle);
});
}
function OnAddEstimate() {
addestfiledatas = [];
$('#tab_est_atts').empty();
$('#tab_est_attachments').hide();
if (!_this.option.workorderid || _this.option.workorderid === "") {
showAlert(GetTextByKey("P_WO_SAVEWORKORDERFIRST", "Please save work order first."), GetTextByKey("P_WO_ADDESTIMATE", "Add Estimate"));
return;
}
$('#dialog_est_number').val("");
$('#dialog_est_status').text(GetTextByKey('P_WO_DRAFT', 'Draft'));
$('#dialog_est_totalcosts').val("");
$('#dialog_est_othercost').val("");
$('#dialog_est_partscost').val("");
$('#dialog_est_traveltimecost').val("");
$('#dialog_est_laborcost').val("");
$('#dialog_est_timetocomplete').val("");
$('#dialog_est_custissues').val("");
$('#dialog_est_technotes').val("");
$('#dialog_est_taxes').val("");
$('#dialog_est_porequired').prop('checked', WorkorderParams.DefaultPORequired);
if (_this.option.workorderdata) {
$('#dialog_est_totalcosts').val(_this.option.workorderdata.WorkOrderTotalCost == 0 ? "" : _this.option.workorderdata.WorkOrderTotalCost);
$('#dialog_est_othercost').val(_this.option.workorderdata.OtherCost == 0 ? "" : _this.option.workorderdata.OtherCost);
$('#dialog_est_partscost').val(_this.option.workorderdata.PartsCost == 0 ? "" : _this.option.workorderdata.PartsCost);
$('#dialog_est_traveltimecost').val(_this.option.workorderdata.TravelTimeCost == 0 ? "" : _this.option.workorderdata.TravelTimeCost);
$('#dialog_est_laborcost').val(_this.option.workorderdata.LaborCost == 0 ? "" : _this.option.workorderdata.LaborCost);
$('#dialog_est_timetocomplete').val(_this.option.workorderdata.HoursToComplete == 0 ? "" : _this.option.workorderdata.HoursToComplete);
$('#dialog_est_custissues').val(_this.option.workorderdata.Description);
getEstimateTotalCost("");
}
showEstimatePopup();
}
function inputChanged(estid) {
$('#tabestimate' + estid).data('changed', true);
}
function setEstimateDisabled(estid, di) {
$('#dialog_est_number' + estid).attr('disabled', di);
$('#dialog_est_totalcosts' + estid).attr('disabled', di);
$('#dialog_est_othercost' + estid).attr('disabled', di);
$('#dialog_est_partscost' + estid).attr('disabled', di);
$('#dialog_est_traveltimecost' + estid).attr('disabled', di);
$('#dialog_est_laborcost' + estid).attr('disabled', di);
$('#dialog_est_timetocomplete' + estid).attr('disabled', di);
$('#dialog_est_custissues' + estid).attr('disabled', di);
$('#dialog_est_technotes' + estid).attr('disabled', di);
$('#dialog_est_taxes' + estid).attr('disabled', di);
$('#dialog_est_porequired' + estid).attr('disabled', di);
}
function getEstimateTotalCost(estid) {
var othercost = $('#dialog_est_othercost' + estid).val();
var partscost = $('#dialog_est_partscost' + estid).val();
var traveltimecost = $('#dialog_est_traveltimecost' + estid).val();
var laborcost = $('#dialog_est_laborcost' + estid).val();
var taxes = $('#dialog_est_taxes' + estid).val();
var totalcost = 0;
if (othercost !== "" && !isNaN(othercost))
totalcost += eval(othercost);
if (partscost !== "" && !isNaN(partscost))
totalcost += eval(partscost);
if (traveltimecost !== "" && !isNaN(traveltimecost))
totalcost += eval(traveltimecost);
if (laborcost !== "" && !isNaN(laborcost))
totalcost += eval(laborcost);
if (taxes !== "" && !isNaN(taxes))
totalcost += eval(taxes);
$('#dialog_est_totalcosts' + estid).val(totalcost.toFixed(2));
}
this.getEstimateStatus = function (s) {
var text = "";
if (s === 0)
text = GetTextByKey('P_WO_DRAFT', 'Draft');
else if (s === 1)
text = GetTextByKey('P_WO_AWAITINGCUSTOMERAPPROVAL', 'Awaiting Customer Approval');
else if (s === 2)
text = GetTextByKey('P_WO_CANCELLEDBYDEALER', 'Cancelled by Dealer');
else if (s === 3)
text = GetTextByKey('P_WO_CUSTOMERREJECTED', 'Customer Rejected');
else if (s === 4)
text = GetTextByKey('P_WO_CUSTOMERAPPROVED', 'Customer Approved');
else if (s === 5)
text = GetTextByKey('P_WO_VOID', 'Void');
else if (s === 100)
text = "";
return text;
}
function showPublishEstimatePopup() {
if (publishestid <= 0)
estimateDialog.find('.maskbg').show();
else
estimatePublishMask.fadeIn(100);
//showmaskbg(true);
$('#dialog_est_textmsg').val(WorkorderParams.EstimateMessage);
$('#dialog_est_chkSendAttachment')
.prop('disabled', (publishestid <= 0) ? (addestfiledatas.length <= 0) : !(estimatedata.find(e => e.Id === publishestid)?.Attachments?.length > 0))
.prop('checked', false);
$('#dialog_est_spanAttachmentName').hide();
publishestattach = null;
estimatePublishDialog.css({
'top': (document.documentElement.clientHeight - estimatePublishDialog.height()) / 3,
'left': (document.documentElement.clientWidth - estimatePublishDialog.width()) / 2
}).showDialogfixed();
}
function hidePublishEstimatePopup() {
if (publishestid <= 0)
estimateDialog.find('.maskbg').hide();
else
estimatePublishMask.fadeOut(100);
publishestid = 0;
estimatePublishDialog.hide();
}
function openPublishDialog(estid) {
if (estid <= 0) {
publishestid = estid;
showPublishEstimatePopup();
}
else {
onSaveWorkOrderEstimate(estid, function () {
publishestid = estid;
showPublishEstimatePopup();
});
}
}
function onPublishEstimate() {
var changed = $('#tabestimate' + publishestid).data('changed');
if (publishestid <= 0)//add and publish
changed = true;
if (changed)
onSaveWorkOrderEstimate(publishestid <= 0 ? "" : publishestid, PublishEstimate)
else
PublishEstimate(publishestid);
}
function PublishEstimate(estid) {
if (!estid)
return;
var pmemails = [];
var checked = $('#dialog_est_chksendtextmsg').prop('checked');
if (checked) {
var phoneemail = $('#dialog_est_phonenum').val();
if (phoneemail !== "") {
var phoneemails = phoneemail.split(';');
for (var i = 0; i < phoneemails.length; i++) {
var pm = phoneemails[i];
if (checkPhoneNumber(pm) || isEmail(pm)) {
pmemails.push({ 'Key': pm, 'Value': pm });
}
else {
if (_this.option.customercontacts) {
for (var j = 0; j < _this.option.customercontacts.length; j++) {
var c = _this.option.customercontacts[j];
if (c.OptOut || c.OptOut_BC) continue;
var mp = $.trim(c.MobilePhone);
var email = $.trim(c.Email);
if (c.Name === pm) {
if (c.ContactPreference == "0" && checkPhoneNumber(mp)) {
pmemails.push({ 'Key': mp, 'Value': pm });
break;
}
if (c.ContactPreference == "1" && isEmail(email)) {
pmemails.push({ 'Key': email, 'Value': pm });
break;
}
}
}
}
}
}
}
}
var msg = $('#dialog_est_textmsg').val();
var includeStatusLink = $('#dialog_est_chkIncludeStatusLink').prop("checked");
var param = JSON.stringify([estid, _this.option.workorderid, JSON.stringify(pmemails), msg, (includeStatusLink ? "1" : "0")]);
param = htmlencode(param);
var url = _network.root + 'Maintenance/AddWorkOrder.aspx';
var method = 'PublishEstimateToCustomer';
var data = new FormData();
data.append('MethodName', method);
data.append('ClientData', param);
if (publishestattach != null) {
if (Object.prototype.hasOwnProperty.call(publishestattach, 'id')) {
var attap = { Id: publishestattach.id, Caption: publishestattach.name };
data.append('AttaData', htmlencode(JSON.stringify(attap)));
} else {
data.append('attachment', publishestattach.file);
}
}
estimatePublishDialog.find('.maskbg').show();
$.ajax({
url: url,
type: 'POST',
dataType: 'json',
processData: false,
contentType: false,
cache: false,
data: data,
success: function (data) {
if (data !== "") {
showAlert(data, GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
getEstimates(true);
hidePublishEstimatePopup();
},
error: function (request, textStatus, errorThrown) {
showAlert(GetTextByKey("P_WO_FAILEDTOPUBLISHTHISESTIMATE", 'Failed to publish this estimate.'), GetTextByKey("P_WO_PUBLISHESTIMATE", 'Publish Estimate'));
if (request?.readyState == 0) {
console.log(request);
} else {
writelog_ironintel("PublishEstimate", url + ".-1." + method + "." + JSON.stringify(param), JSON.stringify(request), textStatus + errorThrown);
}
},
complete: function () {
estimatePublishDialog.find('.maskbg').hide();
}
});
}
function updateWOEstimateVisibleToCustomer(estid) {
var estimate = $('#tabestimate' + estid).data('estimate');
if (!estimate)
return;
var checked = $('#dialog_est_visibletocustomer' + estid).prop('checked');
var param = JSON.stringify([estimate.Id, checked]);
param = htmlencode(param);
worequest("UpdateWOEstimateVisibleToCustomer", param, function (data) {
if (data !== "") {
showAlert(data, GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
}, function (err) {
showAlert(GetTextByKey("P_WO_FAILEDTOPUBLISHTHISESTIMATE", 'Failed to publish this estimate.'), GetTextByKey("P_WO_AVAILABLETOCUSTOMER", 'Available to Customer'));
});
}
function SaveEstimateAttachmentFiles(filedatas, estid) {
var formData = new FormData();
var notesdata = [];
for (var i = 0; i < filedatas.length; i++) {
formData.append("iconFile" + i, filedatas[i].File);
notesdata.push(encodeURIComponent(filedatas[i].Notes));
}
var p = JSON.stringify([estid, JSON.stringify(notesdata)]);
formData.append("MethodName", "AddEstimateAttachment");
formData.append("ClientData", p);
var url = 'AddWorkOrder.aspx';
$.ajax({
url: url,
type: 'POST',
dataType: 'json',
processData: false,
contentType: false,
data: formData,
async: true,
success: function (data) {
if (data !== 'OK') {
showAlert(data, GetTextByKey("P_WO_ATTACHMENTFILE", 'Attachment File'));
} else {
if (estid > 0) {
hideWOEstAttachmentPopup();
getEstimateAttachment(estid);
}
else
getEstimates(true);
}
},
error: function (err) {
showAlert(GetTextByKey("P_WO_UPLOADFAILED", 'Upload failed'), GetTextByKey("P_WO_ATTACHMENTFILE", 'Attachment File'));
}
});
}
function getEstimateAttachment(estid) {
var estimate = $('#tabestimate' + estid).data('estimate');
if (!estimate)
return;
$('#tab_est_atts' + estid).empty();
$('#tab_est_attachments' + estid).hide();
worequest("GetEstimateAttachment", estimate.Id, function (data) {
if (typeof (data) === "string") {
showAlert(data, GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
if (data && data.length > 0) {
showEstimateAttachment(estid, data);
}
var estimate = estimatedata.find(e => e.Id === estid);
if (estimate != null) {
estimate.Attachments = data;
}
}, function (err) {
});
}
function showEstimateAttachment(estid, atts) {
var isdelete = false;
if (!atts) {
var estimate = $('#tabestimate' + estid).data('estimate');
if (!estimate)
return;
atts = estimate.Attachments;
if (estimate.Status === 0)
isdelete = true;
}
else
isdelete = true;
$('#tab_est_atts' + estid).empty();
$('#tab_est_attachments' + estid).hide();
if (atts && atts.length > 0) {
$('#tab_est_attachments' + estid).show();
for (var i = 0; i < atts.length; i++) {
var att = atts[i];
var tr = $('<tr></tr>').attr('id', att.AttachmentId);
var tdfile = $('<td></td>');
var filename = $("<label style='text-decoration: underline;color: RGB(30,144,255);cursor:pointer;'></label>").text(att.Notes === "" ? att.FileName : att.Notes).click(function () {
window.open("../filesvc.ashx?attchid=" + this.parentElement.parentElement.id + "&sourceType=woestimateattachment");
});
var span = $('<span></span>').text(att.AddedByName).css("margin-right", 5).css("margin-left", 5).css("color", "black");
var spanby = $('<span></span>').text(att.AddedOnLocalStr).css("color", "black");
tdfile.append(filename, span, spanby);
if (!WOReadOnly && isdelete) {
var tdimg = $('<td style="width:18px;border:none;text-align:center;"></td>');
var imgDom = $('<span class="sbutton icondelete" style="padding:0;" ></span>').click(function () {
deleteEstimateAttachment(this.parentElement.parentElement.id, estid);
});
tdimg.append(imgDom);
tr.append(tdimg);
}
tr.append(tdfile).appendTo($('#tab_est_atts' + estid));
}
}
}
function deleteEstimateAttachment(attid, estid) {
if (confirm(GetTextByKey("P_WO_DELETEATTACHMENTTIPS", "Are you sure you want to delete the attachment?"))) {
worequest("DeleteEstimateAttachment", attid, function (data) {
if (data !== 'OK') {
showAlert(data, GetTextByKey("P_WO_DELETEATTACHMENT", 'Delete Attachment'));
}
else {
getEstimateAttachment(estid);
}
}, function (err) { });
}
}
function hideWOEstAttachmentPopup() {
if (cur_uploadestid <= 0)
estimateDialog.find('.maskbg').hide();
else
showmaskbg(false);
estimateAttachmentDialog.hide();
}
function openWOEstAttachmentDialog(estid) {
cur_uploaddata = undefined;
cur_uploadestid = estid;
if (estid <= 0)
estimateDialog.find('.maskbg').show();
else
showmaskbg(true);
btn_woestattasave.attr('disabled', false);
$('#tab_woest_atts').empty();
$('#tab_woest_attachments').hide();
$('#dialog_estatt_notes').val('');
estimateAttachmentDialog.css({
'top': (document.documentElement.clientHeight - estimateAttachmentDialog.height()) / 3,
'left': (document.documentElement.clientWidth - estimateAttachmentDialog.width()) / 2
}).showDialogfixed();
}
function dragOverAddEstimateAttachment(ev) {
ev.preventDefault();
ev.dataTransfer.dropEffect = 'link';
}
function dropAddEstimateAttachment(ev) {
ev.preventDefault();
ev.stopPropagation();
var df = ev.dataTransfer;
var files = [];
if (df.items !== undefined) {
for (var i = 0; i < df.items.length; i++) {
var item = df.items[i];
if (item.kind === "file" && (item.webkitGetAsEntry() == null || item.webkitGetAsEntry().isFile)) {
var file = item.getAsFile();
if (file.size == 0) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS", "Attachment size is 0kb, uploading failed."));
return;
}
if (file.size > 50 * 1024 * 1024) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS1", "Attachment is too large. Maximum file size is 50 MB."));
return;
}
files.push({ 'File': file, 'Notes': '' });
}
}
}
if (files.length > 0) {
for (var i = 0; i < files.length; i++) {
cur_uploaddata = files[i];
onSaveWOEstAttachment();
}
}
}
function cutAddEstimateAttachment(ev) {
ev.stopPropagation();
var df = ev.clipboardData;
var files = [];
if (df.items !== undefined) {
for (var i = 0; i < df.items.length; i++) {
var item = df.items[i];
if (item.kind === "file" && (item.webkitGetAsEntry() == null || item.webkitGetAsEntry().isFile)) {
var file = item.getAsFile();
if (file.size == 0) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS", "Attachment size is 0kb, uploading failed."));
return;
}
if (file.size > 50 * 1024 * 1024) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS1", "Attachment is too large. Maximum file size is 50 MB."));
return;
}
files.push({ 'File': file, 'Notes': '' });
}
}
}
if (files.length > 0) {
for (var i = 0; i < files.length; i++) {
cur_uploaddata = files[i];
onSaveWOEstAttachment();
}
}
}
function UpLoadEstimateAttachment() {
var file = $('<input type="file" style="display: none;" />');
file.change(function () {
var files = this.files;
if (files.length == 0)
return;
if (files[0].size == 0) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS", "Attachment size is 0kb, uploading failed."));
return false;
}
if (files[0].size > 50 * 1024 * 1024) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS1", "Attachment is too large. Maximum file size is 50 MB."));
return false;
}
var notes = $('#dialog_estatt_notes').val();
cur_uploaddata = { 'File': files[0], 'Notes': notes };
createNewEstimateAttachment(cur_uploaddata);
}).click();
}
function createNewEstimateAttachment(data) {
$('#tab_woest_atts').empty();
$('#tab_woest_attachments').show();
var tr = $('<tr></tr>');
var tdfile = $('<td></td>');
var filename = $("<label class='attalabel'></label>").text(data.Notes === "" ? data.File.name : data.Notes);
tdfile.append(filename);
var tdimg = $('<td style="width:18px;border:none;text-align:center;"></td>');
var imgDom = $('<span class="sbutton icondelete" style="padding:0;" ></span>').click(function () {
this.parentElement.parentElement.remove();
cur_uploaddata = undefined;
$('#tab_woest_attachments').hide();
});
tdimg.append(imgDom);
tr.append(tdimg);
tr.append(tdfile).appendTo($('#tab_woest_atts'));
}
function onSaveWOEstAttachment() {
if (!cur_uploaddata)
return;
btn_woestattasave.attr('disabled', true);
var notes = $('#dialog_estatt_notes').val();
cur_uploaddata.Notes = notes;
if (cur_uploadestid <= 0) {
addestfiledatas.push(cur_uploaddata);
createAddEstimateAttachment(cur_uploaddata);
hideWOEstAttachmentPopup();
btn_woestattasave.attr('disabled', false);
}
else {
SaveEstimateAttachmentFiles([cur_uploaddata], cur_uploadestid);
}
}
function createAddEstimateAttachment(data) {
var notes = data.Notes;
var file = data.File;
$('#tab_est_attachments').show();
var tr = $('<tr></tr>');
var tdfile = $('<td></td>');
var filename = $("<label class='attalabel'></label>").text(notes === "" ? file.name : notes);
tdfile.append(filename);
var tdimg = $('<td style="width:18px;border:none;text-align:center;"></td>');
var imgDom = $('<span class="sbutton icondelete" style="padding:0;" ></span>').data('filedata', data).click(function () {
this.parentElement.parentElement.remove();
var fd = $(this).data('filedata');
addestfiledatas.splice(addestfiledatas.indexOf(fd), 1);
if (addestfiledatas.length == 0)
$('#tab_est_attachments').hide();
});
tdimg.append(imgDom);
tr.append(tdimg);
tr.append(tdfile).appendTo($('#tab_est_atts'));
}
}
}
/*****************************************End Estimate*********************************************/
/*****************************************Begin Invoice*********************************************/
if (typeof ($woinvoice) !== "function") {
$woinvoice = function (option) {
this.option = option || {};
var _this = this;
var invoicedata = [];
var publish_invoice_id = 0;
var publish_invoice_var = null;
var publish_invoice_attach = null;
var add_invoice_filedatas = [];
var cur_invoice_uploaddata;
var cur_invoice_uploadid = 0;
this.changewo = function (woid) {
//if (woid !== option.workorderid) {
var keepui = this.option.workorderid === woid;
this.option.workorderid = woid;
//hideInvoicePopup();
//hidePublishInvoicePopup();
//hideWOInvoiceAttachmentPopup();
//hideWOInvoiceMakePaidPopup();
getInvoices(keepui);
//}
}
this.close = function () {
invoiceDialog?.remove();
invoicePublishMask?.remove();
invoicePublishDialog?.remove();
invoiceAttachmentDialog?.remove();
invoiceMarkPaidDialog?.remove();
}
this.setwodata = function (wodata) {
this.option.workorderdata = wodata;
}
this.updatecontact = function (contacts) {
this.option.customercontacts = contacts
if (this.option.customercontacts) {
var names = "";
for (var i = 0; i < this.option.customercontacts.length; i++) {
var c = this.option.customercontacts[i];
if (c.OptOut || c.OptOut_BC) continue;
var mp = $.trim(c.MobilePhone);
var email = $.trim(c.Email);
if ((c.ContactPreference == "0" && (checkPhoneNumber(mp))
|| (c.ContactPreference == "1" && isEmail(email)))) {
if (names == "")
names = c.Name;
else
names += ";" + c.Name;
}
}
$('#dialog_invoice_phonenum').val(names);
}
else {
$('#dialog_invoice_phonenum').val('');
}
}
this.createInvoice = function (p_div) {
p_div.addClass('tab_invoices');
var div = $('<div class="function_title"></div>');
p_div.append(div);
var span_add = $('<span class="sbutton iconadd" data-lgid="P_WO_ADDINVOICE">Add Invoice</span>');
span_add.click(OnAddInvoice);
div.append(span_add);
p_div.applyFleetLanguageText(true);
}
this.createInvoice(this.option.parent);
var invoiceDialog = createInvoiceDialog();
var invoicePublishMask = $('<div class="mask_dialog"></div>').hide();
$(document.body).append(invoicePublishMask);
var invoicePublishDialog = createPublishInvoiceDialog();
var invoiceAttachmentDialog = createInvoiceAttachmentDialog();
var invoiceMarkPaidDialog = createInvoiceMarkPaidDialog();
function createInvoiceDialog() {
var dialog = $('<div class="dialog" style="display: none;"></div>');
dialog.on('drop', function (ev) {
dropAddInvoiceAttachment(ev.originalEvent);
}).on('dragover', function (ev) {
dragOverAddInvoiceAttachment(ev.originalEvent);
}).on('paste', function (ev) {
cutAddInvoiceAttachment(ev.originalEvent);
});
dialog.append('<div class="dialog-title"><span class="title" data-lgid="P_WO_ADDINVOICE">Add Invoice</span><em class="dialog-close"></em></div>');
var tb = $('<table></table>');
dialog.append($('<div class="dialog-content"></div>').append(tb));
var tr = $('<tr></tr>').appendTo(tb);
var td = $('<td class="label" data-lgid="P_WO_INVOICENUMBER">Invoice #:</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_invoice_number = $('<input type="text" id="dialog_invoice_number" tabindex="1" style="width:150px;" maxlength="50" autocomplete="off" />').appendTo(td);
td = $('<td class="label" data-lgid="P_WO_OTHERCOST_COLON">Other Cost ($):</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_invoice_othercost = $('<input type="text" id="dialog_invoice_othercost" maxlength="12" tabindex="1" style="width:150px;" autocomplete="off" />').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_INVOICETOTALCOST">Invoice Total Cost ($):</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_invoice_totalcosts = $('<input type="text" id="dialog_invoice_totalcosts" maxlength="12" tabindex="1" style="width:150px;" autocomplete="off" />').appendTo(td);
td = $('<td class="label" data-lgid="P_WO_TRAVELTIMECOST_COLON">Travel Time Cost ($):</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_invoice_traveltimecost = $('<input type="text" id="dialog_invoice_traveltimecost" maxlength="12" tabindex="1" style="width:150px;" autocomplete="off" />').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_PARTSCOST_COLON">Parts Cost ($):</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_invoice_partscost = $('<input type="text" id="dialog_invoice_partscost" maxlength="12" tabindex="1" style="width:150px;" autocomplete="off" />').appendTo(td);
td = $('<td class="label" data-lgid="P_WO_TAXES_COLON">Taxes ($):</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_invoice_taxes = $('<input type="text" id="dialog_invoice_taxes" maxlength="12" tabindex="1" style="width:150px;" autocomplete="off" />').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_LABORCOST_COLON">Labor Cost ($):</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_invoice_laborcost = $('<input type="text" id="dialog_invoice_laborcost" maxlength="12" tabindex="1" style="width:150px;" autocomplete="off" />').appendTo(td);
td = $('<td class="label" data-lgid="P_WO_INVOICESTATUS">Invoice Status:</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_invoice_status = $('<select id="dialog_invoice_status" style="width: 150px; height: 24px;"><option value="0">Draft</option><option value="1">Awaiting Payment</option><option value="6">Paid</option><option value="10">Revoked</option></select>').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_PAYMENTBY_COLON">Payment By:</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_invoice_paymentby = $('<select id="dialog_invoice_paymentby" style="width: 150px; height: 24px;"></select>').appendTo(td);
dialog_invoice_paymentby.append($('<option value="Credit Card">Credit Card</option>').text(GetTextByKey("P_WO_CREDITCARD", "Credit Card")));
dialog_invoice_paymentby.append($('<option value="Check">Check</option>').text(GetTextByKey("P_WO_CHECK", "Check")));
dialog_invoice_paymentby.append($('<option value="Cash">Cash</option>').text(GetTextByKey("P_WO_CASH", "Cash")));
td = $('<td class="label" data-lgid="P_WO_CHECK_COLON">Check #:</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_invoice_checknumber = $('<input type="text" id="dialog_invoice_checknumber" maxlength="200" tabindex="1" style="width:150px;" autocomplete="off" />').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td></td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
td = $('<td class="label" data-lgid="P_WO_CUSTOMERVISIBLE_COLON">Customer Visible:</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_invoice_customervisible = $('<input type="checkbox" id="dialog_invoice_customervisible" tabindex="1" autocomplete="off" />').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WOS_NOTES_COLON" style="vertical-align: top;">Notes:</td>').appendTo(tr);
td = $('<td colspan="3"></td>').appendTo(tr);
var dialog_invoice_notes = $('<textarea id="dialog_invoice_notes" tabindex="1" maxlength="500" style="height:80px;width:450px;"></textarea>').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_ATTACHMENTS_COLON" style="vertical-align: top;">Attachments:</td>').appendTo(tr);
td = $('<td colspan="3"></td>').appendTo(tr);
var spanAtta = $('<span class="sbutton iconadd" data-lgid="P_WO_ADDFILE">Add File</span>').appendTo(td);
spanAtta.on('click', function () {
openWOInvoiceAttachmentDialog('');
})
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label"></td>').appendTo(tr);
td = $('<td colspan="3"></td>').appendTo(tr);
var tb_att = $('<table id="tab_invoice_attachments" style="border: 1px solid #a8a8a8; line-height: 25px; width: 320px; display: none;"></table>');
td.append(tb_att);
var tr_att = $('<tr></tr>');
tb_att.append(tr_att);
var td_att = $('<td></td>');
tr_att.append(td_att);
div_att = $('<div style="max-height: 80px; overflow: auto;padding: 0 4px;"></div>');
td_att.append(div_att);
tb_att = $('<table id="tab_invoice_atts" style="table-layout: fixed;"></table>');
div_att.append(tb_att);
var func = $('<div class="dialog-func"></div>');
dialog.append(func);
func.append('<input type="button" value="Cancel" data-lgid="P_WO_CANCEL" class="dialog-close" tabindex="11" />');
var btnok = $('<input type="button" value="OK" data-lgid="P_WO_OK" tabindex="11" />');
btnok.on('click', function () {
onAddWorkOrderInvoice('');
});
func.append(btnok);
func.append('<div class="clear"></div>');
dialog.append('<div class="maskbg" style="display: none;"></div>');
$(document.body).append(dialog);
dialog.dialog(function () {
showmaskbg(false);
});
dialog.applyFleetLanguageText(true);
return dialog;
}
function createPublishInvoiceDialog() {
var dialog = $('<div class="dialog" style="display: none;"></div>');
dialog.append('<div class="dialog-title"><span class="title" data-lgid="P_WO_PUBLISH_INVOICE">Publish Invoice</span><em class="dialog-close"></em></div>');
var tb = $('<table style="line-height: 30px; margin-left: 10px; margin-right: 10px;"></table>');
dialog.append($('<div class="dialog-content"></div>').append(tb));
var tr = $('<tr></tr>').appendTo(tb);
var td = $('<td style="text-align: right;"></td>').appendTo(tr);
var dialog_invoice_chksendtextmsg = $('<input id="dialog_invoice_chksendtextmsg" type="checkbox" checked="checked" style="width: unset;" />').appendTo(td);
dialog_invoice_chksendtextmsg.change(function () {
var checked = $('#dialog_invoice_chksendtextmsg').prop('checked');
$('#dialog_invoice_phonenum').prop('disabled', !checked);
$('#dialog_invoice_chkIncludeStatusLink').prop('disabled', !checked);
$('#dialog_invoice_textmsg').prop('disabled', !checked);
});
td = $('<td></td>').appendTo(tr);
$('<label for="dialog_invoice_chksendtextmsg" data-lgid="P_WO_SENDUPDATETOCUSTOMER" style="user-select: none;">Send Update To Customer</label>').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td></td>').appendTo(tr);
$('<div style="font-size: 20px; margin-right: 5px; float: right;"><em class="spanbtn iconmobile" style="font-weight: 900; font-size: 14px; cursor: default; padding-left: 0; padding-right: 3px; padding-top: 0;"></em></div>').appendTo(td);
td = $('<td></td>').appendTo(tr);
var dialog_invoice_phonenum = $('<input type="text" id="dialog_invoice_phonenum" tabindex="1" autocomplete="off" maxlength="100" style="width: 320px;" />').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td style="text-align: right;"></td>').appendTo(tr);
var dialog_invoice_chkIncludeStatusLink = $('<input id="dialog_invoice_chkIncludeStatusLink" type="checkbox" checked="checked" style="width: unset;" />').appendTo(td);
td = $('<td></td>').appendTo(tr);
$('<label for="dialog_invoice_chkIncludeStatusLink" data-lgid="P_WO_INCLUDESTATUSLINK" style="user-select: none;">Include Status Link</label>').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td style="text-align: right;"></td>').appendTo(tr);
$('<input id="dialog_invoice_chkSendAttachment" type="checkbox" style="width: unset;" />').on('click', function () {
if (this.disabled) {
return;
}
var attachmentName = document.querySelector('#dialog_invoice_spanAttachmentName');
if (!this.checked) {
publish_invoice_attach = null;
attachmentName.style.display = 'none';
return;
}
var source;
if (publish_invoice_id <= 0) {
source = add_invoice_filedatas.map(function (att) {
return {
file: att.File,
name: att.Notes || att.File.name,
enabled: /^image\//.test(att.File.type) || att.File.size <= 2 * 1024 * 1024
};
});
} else {
source = invoicedata.find(i => i.Id === publish_invoice_id)?.Attachments?.map(function (att) {
return {
id: att.AttachmentId,
name: att.Notes || att.FileName,
enabled: true
};
});
}
var items = source.filter(function (s) { return s.enabled });
if (items.length === 1) {
publish_invoice_attach = items[0];
attachmentName.innerText = publish_invoice_attach.name;
attachmentName.style.display = 'block';
return;
}
publish_invoice_attach = null;
var ui = window['lib-ui'];
var container = ui.createElement('div');
container.style.width = '440px';
container.style.height = '300px';
var grid = new ui.Grid(container);
grid.columns = [
{
key: 'selected',
type: ui.Grid.ColumnTypes.Checkbox,
enabled: 'enabled',
sortable: false,
orderable: false,
resizable: false,
onchanged: function (item) {
for (var it of this.source) {
if (it !== item) {
it.selected = false;
}
}
this.refresh();
}
},
{
key: 'name',
caption: GetTextByKey('P_WO_NAME', 'Name'),
width: 340,
orderable: false
}
];
grid.init();
var popup = new ui.Popup({
title: GetTextByKey('P_WO_SELECTATTACHMENT', 'Select Attachment'),
content: container,
resolve: function () {
var attachmentName = document.querySelector('#dialog_invoice_spanAttachmentName');
if (publish_invoice_attach == null) {
document.querySelector('#dialog_invoice_chkSendAttachment').checked = false;
attachmentName.style.display = 'none';
} else {
attachmentName.innerText = publish_invoice_attach.name;
attachmentName.style.display = 'block';
}
},
buttons: [
{
text: GetTextByKey('P_WO_ATTACH', 'Attach'),
trigger: function () {
var item = grid.source.filter(function (i) { return i.selected })[0];
if (item != null) {
publish_invoice_attach = item;
}
}
},
{ text: GetTextByKey('P_WO_CANCEL', 'Cancel') }
]
});
popup.show(dialog[0]).then(function () { grid.source = source });
}).appendTo(td);
td = $('<td></td>').appendTo(tr);
$('<label for="dialog_invoice_chkSendAttachment" data-lgid="P_WO_SENDINVOICEASATTACHMENT" style="user-select: none;">Send Invoice as Attachment</label>').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td></td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
$('<span id="dialog_invoice_spanAttachmentName" style="user-select: none; color: gray; display: block; white-space: nowrap; max-width: 300px; overflow: hidden; text-overflow: ellipsis; display: none"></span>').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" style="width: unset;"><span data-lgid="P_WO_MESSAGE_COLON">Message:</span></td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_invoice_variables = $('<select id="dialog_invoice_variables" style="width: 156px;"></select>').appendTo(td);
dialog_invoice_variables.append('<option value="0">[Site_Name]</option>');
dialog_invoice_variables.append('<option value="1">[Location]</option>');
dialog_invoice_variables.append('<option value="14">[Asset]</option>');
dialog_invoice_variables.append('<option value="4">[VIN]</option>');
dialog_invoice_variables.append('<option value="2">[Make]</option>');
dialog_invoice_variables.append('<option value="3">[Model]</option>');
dialog_invoice_variables.append('<option value="5">[Id_Phone]</option>');
dialog_invoice_variables.append('<option value="6">[Advisor]</option>');
dialog_invoice_variables.append('<option value="7">[Company_Name]</option>');
dialog_invoice_variables.append('<option value="8">[Contact_Name]</option>');
dialog_invoice_variables.append('<option value="9">[Contact_First_Name]</option>');
dialog_invoice_variables.append('<option value="10">[Status_Link]</option>');
dialog_invoice_variables.append('<option value="11">[Technician_Name]</option>');
dialog_invoice_variables.append('<option value="12">[Work_Order_Number]</option>');
dialog_invoice_variables.append('<option value="13">[Parts_Order_Number]</option>');
dialog_invoice_variables.append('<option value="15">[Invoice_Number]</option>');
dialog_invoice_variables.append('<option value="16">[Invoice_Total_Cost]</option>');
var dialog_invoice_insertfield = $('<input type="button" id="dialog_invoice_insertfield" data-lgid="P_WO_ADD" value="Add" style="width: auto; height: auto; margin-left: 5px;" tabindex="1" /><br />').appendTo(td);
dialog_invoice_insertfield.on('click', function () {
insertinvoicefield();
});
var dialog_invoice_textmsg = $('<textarea id="dialog_invoice_textmsg" tabindex="1" style="width: 320px; height: 120px; margin-top: 6px;" maxlength="2000"></textarea>').appendTo(td);
var func = $('<div class="dialog-func"></div>');
dialog.append(func);
func.append('<input type="button" value="Cancel" data-lgid="P_WO_CANCEL" class="dialog-close" tabindex="11" />');
btn_publish = $('<input type="button" value="Publish" data-lgid="P_WO_PUBLISH" tabindex="1" />');
btn_publish.on('click', function () {
onPublishInvoice();
});
func.append(btn_publish);
func.append('<div class="clear"></div>');
dialog.append('<div class="maskbg" style="display: none;"></div>');
$(document.body).append(dialog);
dialog.dialog(function () {
hidePublishInvoicePopup();
});
dialog.applyFleetLanguageText(true);
return dialog;
}
function createInvoiceAttachmentDialog() {
var dialog = $('<div class="dialog" style="display: none;"></div>');
dialog.append('<div class="dialog-title"><span class="title" data-lgid="P_WO_ADDATTACHMENT">Add Attachment</span><em class="dialog-close"></em></div>');
var tb = $('<table style="line-height: 30px; margin-left: 10px; margin-right: 10px;"></table>');
dialog.append($('<div class="dialog-content"></div>').append(tb));
var tr = $('<tr></tr>').appendTo(tb);
var td = $('<td class="label" style="width: unset;"><span data-lgid="P_WO_CAPTION_COLON">Caption:</span></td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_invoice_att_notes = $('<input type="text" id="dialog_invoice_att_notes" maxlength="200" tabindex="1" autocomplete="off" />').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_ATTACHMENTS_COLON" style="vertical-align: top; width: unset;">Attachments:</td>').appendTo(tr);
td = $('<td class="cont"></td>').appendTo(tr);
var dialog_woinvoiceatt_uploadattfile = $('<input id="dialog_woinvoiceatt_uploadattfile" type="button" value="Add File..." data-lgid="P_FR_ADDFILE" tabindex="1" style="background-color: #0099FF; color: #FFFFFF; height: 20px; width: 200px;" />').appendTo(td);
dialog_woinvoiceatt_uploadattfile.on('click', function () {
UpLoadInvoiceAttachment();
});
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label"></td>').appendTo(tr);
td = $('<td colspan="3"></td>').appendTo(tr);
var tb_att = $('<table id="tab_woinvoice_attachments" style="border: 1px solid #a8a8a8; line-height: 25px; width: 320px; display: none;"></table>');
td.append(tb_att);
var tr_att = $('<tr></tr>');
tb_att.append(tr_att);
var td_att = $('<td></td>');
tr_att.append(td_att);
div_att = $('<div style="max-height: 80px; overflow: auto;padding: 0 4px;"></div>');
td_att.append(div_att);
tb_att = $('<table id="tab_woinvoice_atts" style="table-layout: fixed;"></table>');
div_att.append(tb_att);
var func = $('<div class="dialog-func"></div>');
dialog.append(func);
func.append('<input type="button" value="Cancel" data-lgid="P_WO_CANCEL" class="dialog-close" tabindex="11" />');
var btn_woinvoice_att_save = $('<input type="button" value="Save" data-lgid="P_WO_SAVE" tabindex="11" />');
btn_woinvoice_att_save.on('click', function () {
onSaveWOInvoiceAttachment();
});
func.append(btn_woinvoice_att_save);
func.append('<div class="clear"></div>');
dialog.append('<div class="maskbg" style="display: none;"></div>');
$(document.body).append(dialog);
dialog.dialog(function () {
hideWOInvoiceAttachmentPopup();
});
dialog.applyFleetLanguageText(true);
return dialog;
}
function createInvoiceMarkPaidDialog() {
var dialog = $('<div class="dialog" style="display: none;"></div>');
dialog.append('<div class="dialog-title"><span class="title" data-lgid="P_WO_MARKASPAID">Mark as Paid</span><em class="dialog-close"></em></div>');
var tb = $('<table style="margin-left: 10px; margin-right: 10px; margin-top: 10px;">');
dialog.append($('<div class="dialog-content"></div>').append(tb));
var tr = $('<tr></tr>').appendTo(tb);
var td = $('<td class="label" style="width:120px;"><span data-lgid="P_WO_PAYMENTBY_COLON">Payment By:</span></td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_invoice_markpaid_paymentby = $('<select id="dialog_invoice_markpaid_paymentby" style="width: 320px; height: 24px;"></select>').appendTo(td);
dialog_invoice_markpaid_paymentby.append($('<option value="Credit Card">Credit Card</option>').text(GetTextByKey("P_WO_CREDITCARD", "Credit Card")));
dialog_invoice_markpaid_paymentby.append($('<option value="Check">Check</option>').text(GetTextByKey("P_WO_CHECK", "Check")));
dialog_invoice_markpaid_paymentby.append($('<option value="Cash">Cash</option>').text(GetTextByKey("P_WO_CASH", "Cash")));
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" style="width:120px;"><span data-lgid="P_WO_CHECK_COLON">Check #:</span></td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_invoice_markpaid_number = $('<input type="text" id="dialog_invoice_markpaid_number" maxlength="200" tabindex="1" autocomplete="off" />').appendTo(td);
var func = $('<div class="dialog-func"></div>');
dialog.append(func);
func.append('<input type="button" value="Cancel" data-lgid="P_WO_CANCEL" class="dialog-close" tabindex="1" />');
var btnok = $('<input type="button" id="btn_woinvoice_maikpaid_save" value="OK" data-lgid="P_WO_OK" tabindex="1" />');
btnok.on('click', function () {
OnMarkAsPaid();
});
func.append(btnok);
func.append('<div class="clear"></div>');
dialog.append('<div class="maskbg" style="display: none;"></div>');
$(document.body).append(dialog);
dialog.dialog(function () {
showmaskbg(false);
});
dialog.applyFleetLanguageText(true);
return dialog;
}
function insertinvoicefield() {
var field = $("#dialog_invoice_variables").find("option:selected").text();
$("#dialog_invoice_textmsg").focus();
document.execCommand('insertText', false, field);
}
function showInvoicePopup() {
showmaskbg(true);
invoiceDialog.show();
invoiceDialog.css({
'top': (document.documentElement.clientHeight - invoiceDialog.height()) / 3,
'left': (document.documentElement.clientWidth - invoiceDialog.width()) / 2
}).showDialogfixed();
}
function hideInvoicePopup() {
showmaskbg(false);
invoiceDialog.hide();
}
var inloading = false;
function getInvoices(keepui) {
if (!keepui) {
_this.option.parent.find('.estimates_div').remove();
_this.option.parent.find('.estimates_table').remove();
}
if (!_this.option.workorderid || _this.option.workorderid == "") return;
if (inloading)
return;
inloading = true;
if (typeof _this.option.showloading == 'function')
_this.option.showloading(true);
worequest("GetWorkOrderInvoices", _this.option.workorderid, function (data) {
inloading = false;
if (typeof _this.option.showloading == 'function')
_this.option.showloading(false);
if (typeof (data) === "string") {
showAlert(data, GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
if (data.WorkOrderID != _this.option.workorderid) {
getInvoices(false);
return;
}
data = data.Data;
_this.option.parent.find('.estimates_div').remove();
_this.option.parent.find('.estimates_table').remove();
if (data) {
if (data && data.length > 0) {
invoicedata = data;
for (var i = 0; i < data.length; i++) {
showInvoice(data[i]);
}
}
}
}, function (err) {
inloading = false;
if (typeof _this.option.showloading == 'function')
_this.option.showloading(false);
});
}
function dragOverInvoiceAttachment(ev, invid) {
ev.preventDefault();
ev.dataTransfer.dropEffect = 'link';
}
function dropInvoiceAttachment(ev, invid) {
ev.preventDefault();
ev.stopPropagation();
var df = ev.dataTransfer;
var files = [];
if (df.items !== undefined) {
for (var i = 0; i < df.items.length; i++) {
var item = df.items[i];
if (item.kind === "file" && (item.webkitGetAsEntry() == null || item.webkitGetAsEntry().isFile)) {
var file = item.getAsFile();
if (file.size == 0) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS", "Attachment size is 0kb, uploading failed."));
return;
}
if (file.size > 50 * 1024 * 1024) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS1", "Attachment is too large. Maximum file size is 50 MB."));
return;
}
files.push({ 'File': file, 'Notes': '' });
}
}
}
var invoice = $('#tabinvoice' + invid).data('invoice');
if (!invoice)
return;
if (invoice.Status !== 0)
return;
if (files.length > 0)
SaveInvoiceAttachmentFiles(files, invid);
}
function cutInvoiceAttachment(ev, invid) {
ev.stopPropagation();
var df = ev.clipboardData;
var files = [];
if (df.items !== undefined) {
for (var i = 0; i < df.items.length; i++) {
var item = df.items[i];
if (item.kind === "file" && (item.webkitGetAsEntry() == null || item.webkitGetAsEntry().isFile)) {
var file = item.getAsFile();
if (file.size == 0) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS", "Attachment size is 0kb, uploading failed."));
return;
}
if (file.size > 50 * 1024 * 1024) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS1", "Attachment is too large. Maximum file size is 50 MB."));
return;
}
files.push({ 'File': file, 'Notes': '' });
}
}
}
var invoice = $('#tabinvoice' + invid).data('invoice');
if (!invoice)
return;
if (invoice.Status !== 0)
return;
if (files.length > 0)
SaveInvoiceAttachmentFiles(files, invid);
}
function showInvoice(invoice) {
var invid = invoice.Id;
var statustext = getInvoiceStatus(invoice.Status);
var div_invoices = _this.option.parent;
var div_title = $('<div id="divinvoice' + invid + '" class="subtitle estimates_div" style="margin-right:0px;" ></div>');
div_title.on('drop', invid, function (ev) {
dropInvoiceAttachment(ev.originalEvent, ev.data);
}).on('dragover', function (ev) {
dragOverInvoiceAttachment(ev.originalEvent, ev.data);
}).on('paste', function (ev) {
cutInvoiceAttachment(ev.originalEvent, ev.data);
});
div_title.append('<span class="sbutton iconchevronright" target="tabinvoice' + invid + '" onclick="OnExpendInTab(this)" style="margin-left: 0; padding-right: 5px;"></span>');
div_title.append('<span class="sttitle" id="span_invoice_number' + invid + '">' + invoice.InvoiceNumber + '</span>');
div_title.append('<span class="sttitle" id="span_invoice_status' + invid + '" style="font-weight:bold;">' + statustext + '</span>');
if (!WOReadOnly) {
if (invoice.Status === InvoiceStatus.Pending || invoice.Status === InvoiceStatus.PaymentCreated || invoice.Status === InvoiceStatus.Draft) {
var ipt = $('<input type="button" style="width: auto; height: 24px;margin-left:100px;" />').val(GetTextByKey('P_WO_MARKASPAID', 'Mark As Paid'));
ipt.on("click", invid, function (e) {
openWOInvoiceMarkPaidDialog(e.data);
});
div_title.append(ipt);
}
if (invoice.Status === InvoiceStatus.Pending) {
var ipt = $('<input type="button" style="width: auto; height: 24px;margin-left:20px;" />').val(GetTextByKey('P_WO_REVOKE', 'Revoke'));
ipt.on("click", invid, function (e) {
OnRevokeInvoice(e.data);
});
div_title.append(ipt);
}
if (invoice.Status == InvoiceStatus.Draft || invoice.Status === InvoiceStatus.Pending || invoice.Status === InvoiceStatus.Revoked) {
var s_del = $('<span class="sbutton icondelete" style="float:right;margin-right: 10px; padding: 0px 0px 0px 5px;" ></span>');
s_del.on("click", invid, function (e) {
OnDeleteInvoice(e.data);
});
div_title.append(s_del);
}
}
div_title.append('<hr />');
div_invoices.append(div_title);
var disabled = invoice.Status === InvoiceStatus.Pending || invoice.Status === InvoiceStatus.PaymentCreated || invoice.Status === InvoiceStatus.Paid || invoice.Status === InvoiceStatus.Revoked || invoice.Status === InvoiceStatus.ManualPaid;
var table = $('<table id="tabinvoice' + invid + '" class="estimates_table" ></table>').data('invoice', invoice).hide();
table.on('drop', invid, function (ev) {
dropInvoiceAttachment(ev.originalEvent, ev.data);
}).on('dragover', function (ev) {
dragOverInvoiceAttachment(ev.originalEvent, ev.data);
}).on('paste', function (ev) {
cutInvoiceAttachment(ev.originalEvent, ev.data);
});
div_invoices.append(table);
var tr = $('<tr></tr>');
table.append(tr);
var td = $('<td class="label"></td>').text(GetTextByKey('P_WO_INVOICENUMBER', 'Invoice #:'));
tr.append(td);
td = $('<td style="width:150px;"></td>');
tr.append(td);
var ipt = $('<input type="text" id="dialog_invoice_number' + invid + '" tabindex="1" maxlength="50" autocomplete="off" />').val(invoice.InvoiceNumber).change((function (id) { return function () { inputInvoiceChanged(id) } })(invid));
td.append(ipt);
td = $('<td class="label"></td>').text(GetTextByKey('P_WO_OTHERCOST_COLON', 'Other Cost ($):'));
tr.append(td);
td = $('<td></td>');
tr.append(td);
ipt = $('<input type="text" id="dialog_invoice_othercost' + invid + '" tabindex="1" maxlength="12" autocomplete="off" />').val(locale(invoice.OtherCost, disabled)).change((function (id) { return function () { inputInvoiceChanged(id) } })(invid));
td.append(ipt);
var tdDetail = $('<td rowspan="7" style="vertical-align: top; padding-left: 20px"></td>').attr('id', 'invoice_payment_tab' + invid);
tr.append(tdDetail);
//if (invoice.Status == InvoiceStatus.Paid)
{
if (invoice.PaymentItem != null) {
var btncancelpayment = "<span></span>";
if (invoice.Status === InvoiceStatus.ManualPaid) {
btncancelpayment = $('<input type="button" style="width: 100px; height: 24px;" />').val(GetTextByKey('P_WO_CANCELPAYMENT', 'Cancel Payment'));
btncancelpayment.on('click', invid, function (e) {
CancelPayment(e.data);
});
}
tdDetail.empty().append(
$('<table style="width: 100%; table-layout: fixed"></table>').append(
$('<tr></tr>').append(
$('<td style="width: 150px" class="payment-label"></td>').text(GetTextByKey('P_WO_PAYMENTENTEREDBY_COLON', 'Payment Entered By:')),
$('<td style="width: 320px"></td>').text(invoice.PaymentItem.PaymentEnteredByName),
$('<td class="payment-label"></td>').text(GetTextByKey('P_WO_CUSTOMERNAME', 'Customer Name:')),
$('<td></td>').text(invoice.PaymentItem.CustomerName)
),
$('<tr></tr>').append(
$('<td style="width: 150px" class="payment-label"></td>').text(GetTextByKey('P_WO_PAYMENTTIME', 'Payment Time:')),
$('<td style="width: 320px"></td>').text(invoice.PaymentItem.CreatedLocalStr),
$('<td class="payment-label"></td>').text(GetTextByKey('P_WO_CUSTOMEREMAIL', 'Customer Email:')),
$('<td></td>').text(invoice.PaymentItem.CustomerEmail)
),
$('<tr></tr>').append(
$('<td class="payment-label"></td>').text(GetTextByKey('P_WO_PAYMENTTYPE_COLON', 'Payment Type:')),
$('<td></td>').text(invoice.PaymentItem.PaymentType),
$('<td></td>'),
$('<td></td>')
),
$('<tr></tr>').append(
$('<td class="payment-label"></td>').text(GetTextByKey('P_WO_CHECK_COLON', 'Check #:')),
$('<td></td>').text(invoice.PaymentItem.CheckNumber),
$('<td></td>'),
$('<td></td>')
),
$('<tr></tr>').append(
$('<td class="payment-label"></td>').text(GetTextByKey('P_WO_CARDNUMBER', 'Card Number:')),
$('<td></td>').text(invoice.PaymentItem.CardNumber),
$('<td class="payment-label"></td>').text(GetTextByKey('P_WO_EXPIRATION', 'Expiration:')),
$('<td></td>').text(invoice.PaymentItem.CardExpiration)
),
$('<tr></tr>').append(
$('<td class="payment-label"></td>').text(GetTextByKey('P_WO_CARDTYPE', 'Card Type:')),
$('<td></td>').text(invoice.PaymentItem.CardType),
$('<td class="payment-label"></td>').text(GetTextByKey('P_WO_COUNTRY_COLON', 'Country:')),
$('<td></td>').text(invoice.PaymentItem.CustomerCountry)
),
$('<tr></tr>').append(
$('<td class="payment-label"></td>').text(GetTextByKey('P_WO_ISSUER', 'Issuer:')),
$('<td style="padding-right: 20px; white-space: nowrap"></td>').text(invoice.PaymentItem.CardIssuer),
$('<td style="text-align:right;"></td>').append(btncancelpayment),
$('<td></td>')
)
)
);
}
}
tr = $('<tr></tr>');
table.append(tr);
td = $('<td class="label"></td>').text(GetTextByKey('P_WO_INVOICETOTALCOST', 'Invoice Total Cost ($):'));
tr.append(td);
td = $('<td></td>');
tr.append(td);
ipt = $('<input type="text" id="dialog_invoice_totalcosts' + invid + '" tabindex="1" maxlength="12" autocomplete="off" />').val(locale(invoice.TotalCost, disabled)).change((function (id) { return function () { inputInvoiceChanged(id) } })(invid));
td.append(ipt);
td = $('<td class="label"></td>').text(GetTextByKey('P_WO_TRAVELTIMECOST_COLON', 'Travel Time Cost ($):'));
tr.append(td);
td = $('<td></td>');
tr.append(td); ipt = $('<input type="text" id="dialog_invoice_traveltimecost' + invid + '" tabindex="1" maxlength="12" autocomplete="off" />').val(locale(invoice.TravelCost, disabled)).change((function (id) { return function () { inputInvoiceChanged(id) } })(invid));
td.append(ipt);
tr = $('<tr></tr>');
table.append(tr);
td = $('<td class="label"></td>').text(GetTextByKey('P_WO_PARTSCOST_COLON', 'Parts Cost ($):'));
tr.append(td);
td = $('<td></td>');
tr.append(td);
ipt = $('<input type="text" id="dialog_invoice_partscost' + invid + '" tabindex="1" maxlength="12" autocomplete="off" />').val(locale(invoice.PartsCost, disabled)).change((function (id) { return function () { inputInvoiceChanged(id) } })(invid));
td.append(ipt);
td = $('<td class="label"></td>').text(GetTextByKey('P_WO_TAXES_COLON', 'Taxes ($):'));
tr.append(td);
td = $('<td></td>');
tr.append(td);
ipt = $('<input type="text" id="dialog_invoice_taxes' + invid + '" tabindex="1" maxlength="12" autocomplete="off" />').val(locale(invoice.Taxes, disabled)).change((function (id) { return function () { inputInvoiceChanged(id) } })(invid));
td.append(ipt);
tr = $('<tr></tr>');
table.append(tr);
td = $('<td class="label"></td>').text(GetTextByKey('P_WO_LABORCOST_COLON', 'Labor Cost ($):'));
tr.append(td);
td = $('<td></td>');
tr.append(td);
ipt = $('<input type="text" id="dialog_invoice_laborcost' + invid + '" tabindex="1" maxlength="12" autocomplete="off" />').val(locale(invoice.LaborCost, disabled)).change((function (id) { return function () { inputInvoiceChanged(id) } })(invid));
td.append(ipt);
td = $('<td class="label"></td>').text(GetTextByKey('P_WO_INVOICESTATUS', 'Invoice Status:'));
tr.append(td);
td = $('<td style="width: 150px"></td>');
tr.append(td);
ipt = $('<span style="font-weight:bold;" id="dialog_invoice_status' + invid + '"></span>').text(statustext);
td.append(ipt);
tr = $('<tr></tr>');
table.append(tr);
td = $('<td class="label"></td>').text(GetTextByKey('P_WO_CUSTOMERVISIBLE_COLON', 'Customer Visible:'));
tr.append(td);
td = $('<td></td>');
tr.append(td);
ipt = $('<input type="checkbox" id="dialog_invoice_customervisible' + invid + '" tabindex="1" />').prop("checked", invoice.CustomerVisible);
if (invoice.Status === InvoiceStatus.Draft || invoice.Status === InvoiceStatus.Revoked)
ipt.attr('disabled', true);
else
ipt.attr('disabled', false);
ipt.change(invid, function (e) {
ChangeWOInvoiceCustomerVisible(e.data, $(e.target).prop("checked"));
});
td.append(ipt);
tr = $('<tr></tr>');
table.append(tr);
td = $('<td class="label" style="vertical-align:top;"></td>').text(GetTextByKey('P_WOS_NOTES_COLON', 'Notes:'));
tr.append(td);
td = $('<td colspan="3"></td>');
tr.append(td);
ipt = $('<textarea id="dialog_invoice_notes' + invid + '" tabindex="1" maxlength="500" style="width: 480px; height: 80px; margin-top: 5px;" ></textarea>').val(invoice.Notes).change((function (id) { return function () { inputInvoiceChanged(id) } })(invid));
td.append(ipt);
if (invoice.Status === InvoiceStatus.Draft) {
tr = $('<tr></tr>');
table.append(tr);
td = $('<td class="label"></td>').text(GetTextByKey('P_WO_ATTACHMENTS_COLON', ' Attachments:'));
tr.append(td);
td = $('<td colspan="3"></td>');
tr.append(td);
var div_att = $('<div></div>');
td.append(div_att);
if (!WOReadOnly) {
var span_addfile = $('<span class="sbutton iconadd" />').text(GetTextByKey('P_FR_ADDFILE', 'Add File...'));
span_addfile.on("click", invid, function (e) {
openWOInvoiceAttachmentDialog(e.data);
});
div_att.append(span_addfile);
}
}
tr = $('<tr id="tr_invoice_atts' + invid + '"></tr>');
table.append(tr);
td = $('<td class="label" style="vertical-align:top;"></td>').text(invoice.Status === InvoiceStatus.Draft ? "" : GetTextByKey('P_WO_ATTACHMENTS_COLON', 'Attachments:'));
tr.append(td);
td = $('<td colspan="3"></td>');
tr.append(td);
var tb_att = $('<table id="tab_invoice_attachments' + invid + '" style="border: 1px solid #a8a8a8; line-height: 25px; width: 480px; display: none;"></table>');
td.append(tb_att);
var tr_att = $('<tr></tr>');
tb_att.append(tr_att);
var td_att = $('<td></td>');
tr_att.append(td_att);
div_att = $('<div style="max-height: 80px; overflow: auto;padding: 0 4px;"></div>');
td_att.append(div_att);
tb_att = $('<table id="tab_invoice_atts' + invid + '" style="table-layout: fixed;"></table>');
div_att.append(tb_att);
showInvoiceAttachment(invid);
tr = $('<tr></tr>');
table.append(tr);
td = $('<td colspan="4" style="text-align: right; height: 33px"></td>');
tr.append(td);
ipt = $('<input type="button" style="width: auto; height: 25px;" id="btn_invoice_save' + invid + '" />').val(GetTextByKey('P_WO_SAVE', 'Save')).hide();
ipt.on("click", invid, function (e) {
onSaveWorkOrderInvoice(e.data);
});
td.append(ipt);
ipt = $('<input type="button" style="width: auto; height: 25px;margin-left:20px;" id="btn_invoice_publish' + invid + '" />').val(GetTextByKey('P_WO_PUBLISH', 'Publish')).hide();
ipt.on("click", {
id: invid,
no: invoice.InvoiceNumber,
cost: invoice.TotalCost
}, function (e) {
openPublishInvoiceDialog(e.data);
});
td.append(ipt);
if (!WOReadOnly) {
if (invoice.Status === InvoiceStatus.Draft) {
$('#btn_invoice_publish' + invid).show();
$('#btn_invoice_save' + invid).show();
}
if (invoice.Status === InvoiceStatus.Pending) {
$('#btn_invoice_revoke' + invid).show();
}
if (invoice.Status === InvoiceStatus.Pending || invoice.Status === InvoiceStatus.PaymentCreated) {
$('#btn_invoice_markaspaid' + invid).show();
}
}
if (disabled || WOReadOnly)
setInvoiceDisabled(invid, true);
if (invoice.Status === InvoiceStatus.PaymentCreated ||
invoice.Status === InvoiceStatus.Failed) {
$('#span_invoice_status' + invid).css('color', 'red');
$('#dialog_invoice_status' + invid).css('color', 'red');
}
if (invoice.Status === InvoiceStatus.Paid || invoice.Status === InvoiceStatus.ManualPaid) {
$('#span_invoice_status' + invid).css('color', '#2eda2e');
$('#dialog_invoice_status' + invid).css('color', '#2eda2e');
}
}
function OnRevokeInvoice(invid) {
if (invid <= 0)
return;
showConfirm(GetTextByKey("P_WO_CONFIRM_REVOKE_INVOICE", 'Do you want to revoke the invoice?'), GetTextByKey("P_WO_REVOKE_INVOICE", 'Revoke Invoice'), function () {
worequest("RevokeWorkOrderInvoice", invid, function (data) {
if (data === "OK") {
getInvoices(true);
}
}, function (err) {
showAlert(GetTextByKey("P_WO_FAILED_REVOKE_INVOICE", 'Failed to revoke this invoice.'), GetTextByKey("P_WO_REVOKE_INVOICE", 'Revoke Invoice'));
});
});
}
function CancelPayment(invid) {
if (invid <= 0)
return;
showConfirm(GetTextByKey("P_WO_AREYOUSUREYOUWANTTOCANCELTHEPAYMENT", 'Are you sure you want to Cancel the Payment?'), GetTextByKey("P_WO_CANCELINVOICE", 'Cancel Invoice'), function () {
worequest("CancelPayment", invid, function (data) {
if (data === "OK") {
getInvoices();
}
}, function (err) {
showAlert(GetTextByKey("P_WO_FAILED_REVOKE_INVOICE", 'Failed to cancel this payment.'), GetTextByKey("P_WO_CANCELINVOICE", 'Cancel Invoice'));
});
});
}
function ChangeWOInvoiceCustomerVisible(invid, visible) {
if (invid <= 0)
return;
worequest("ChangeWOInvoiceCustomerVisible", JSON.stringify([invid, visible ? 1 : 0]), function (data) {
}, function (err) {
});
}
function OnDeleteInvoice(invid) {
if (invid <= 0)
return;
showConfirm(GetTextByKey("P_WO_CONFIRM_DELETE_INVOICE", 'Do you want to delete the invoice?'), GetTextByKey("P_WO_DELETE_INVOICE", 'Delete Invoice'), function () {
worequest("DeleteWorkOrderInvoice", invid, function (data) {
if (data === "OK") {
getInvoices(true);
}
}, function (err) {
showAlert(GetTextByKey("P_WO_FAILED_DELETE_INVOICE", 'Failed to delete this invoice.'), GetTextByKey("P_WO_DELETE_INVOICE", 'Delete Invoice'));
});
});
}
function onAddWorkOrderInvoice() {
var status = parseInt($('#dialog_invoice_status').val());
if (status == InvoiceStatus.Pending) {
var no = $('#dialog_invoice_number').val();
var cost = parseFloat($('#dialog_invoice_totalcosts').val());
openPublishInvoiceDialog({
id: -1,
no: no,
cost: cost
});
}
else
onSaveWorkOrderInvoice("");
}
function onSaveWorkOrderInvoice(invid, next) {
var invoiceid = -1;
var status = 0;
var alerttitle = GetTextByKey("P_WO_ADDINVOICE", "Add Invoice");
if (invid > 0) {
alerttitle = GetTextByKey("P_WO_EDITINVOICE", "Edit Invoice");
var invoice = $('#tabinvoice' + invid).data('invoice');
if (!invoice)
return;
invoiceid = invoice.Id;
status = invoice.Status;
}
else
status = parseInt($('#dialog_invoice_status').val());
var invsufix = invid > 0 ? String(invid) : '';
var item = {
'Id': invoiceid,
'WorkOrderId': _this.option.workorderid,
'Status': status,
'InvoiceNumber': $('#dialog_invoice_number' + invsufix).val(),
'TotalCost': $('#dialog_invoice_totalcosts' + invsufix).val(),
'OtherCost': $('#dialog_invoice_othercost' + invsufix).val(),
'PartsCost': $('#dialog_invoice_partscost' + invsufix).val(),
'TravelCost': $('#dialog_invoice_traveltimecost' + invsufix).val(),
'LaborCost': $('#dialog_invoice_laborcost' + invsufix).val(),
'Taxes': $('#dialog_invoice_taxes' + invsufix).val(),
'Notes': $('#dialog_invoice_notes' + invsufix).val(),
'CustomerVisible': $('#dialog_invoice_customervisible' + invsufix).prop("checked"),
'PaymentMethod': $('#dialog_invoice_paymentby' + invsufix).val(),
'CheckNumber': $('#dialog_invoice_checknumber' + invsufix).val(),
};
if (isNaN(item.TotalCost) || item.TotalCost < 0) {
showAlert(GetTextByKey('P_WO_TOTALCOST_INVALID', 'Total cost is not a valid number.'), alerttitle, function () { $('#dialog_invoice_totalcosts' + invsufix).focus() });
return;
}
if (isNaN(item.OtherCost) || item.OtherCost < 0) {
showAlert(GetTextByKey('P_WO_OTHERCOST_INVALID', 'Other cost is not a valid number.'), alerttitle, function () { $('#dialog_invoice_othercost' + invsufix).focus() });
return;
}
if (isNaN(item.PartsCost) || item.PartsCost < 0) {
showAlert(GetTextByKey('P_WO_PARTSCOST_INVALID', 'Parts cost is not a valid number.'), alerttitle, function () { $('#dialog_invoice_partscost' + invsufix).focus() });
return;
}
if (isNaN(item.TravelCost) || item.TravelCost < 0) {
showAlert(GetTextByKey('P_WO_TRAVELTIMECOST_INVALID', 'Travel time cost is not a valid number.'), alerttitle, function () { $('#dialog_invoice_traveltimecost' + invsufix).focus() });
return;
}
if (isNaN(item.LaborCost) || item.LaborCost < 0) {
showAlert(GetTextByKey('P_WO_LABORCOST_INVALID', 'Labor cost is not a valid number.'), alerttitle, function () { $('#dialog_invoice_laborcost' + invsufix).focus() });
return;
}
if (isNaN(item.Taxes) || item.Taxes < 0) {
showAlert(GetTextByKey('P_WO_TAXES_INVALID', 'Taxes is not a valid number.'), alerttitle, function () { $('#dialog_invoice_taxes' + invsufix).focus() });
return;
}
if (status == InvoiceStatus.Pending) {
if (item.TotalCost <= 0) {
showAlert(GetTextByKey('P_WO_TOTALCOST_MUST_POSITIVE', 'Total cost must be a positive number.'), alerttitle, function () { $('#dialog_invoice_totalcosts' + invoiceid).focus() });
return;
}
}
if ((status == InvoiceStatus.Pending || status == InvoiceStatus.ManualPaid)
&& !item.CustomerVisible) {
var msg = GetTextByKey("P_WO_INVOICEWILLNOTBEDISPLAYEDONCUSTOMERFACINPAGE", "Invoice will not be displayed on Customer Facing Page.<br/> Do you want to:");
showInvoiceConfirm(msg, alerttitle,
function () {
$('#dialog_invoice_customervisible' + invsufix).prop("checked", true)
item.CustomerVisible = true;
doSaveWorkOrderInvoice(item, invid, next, alerttitle);
}, function () {
doSaveWorkOrderInvoice(item, invid, next, alerttitle);
}, null);
}
else
doSaveWorkOrderInvoice(item, invid, next, alerttitle);
}
function doSaveWorkOrderInvoice(item, invid, next, alerttitle) {
var invsufix = invid > 0 ? String(invid) : '';
$('#btn_invoice_save' + invsufix).attr('disabled', true);
var param = JSON.stringify(item);
param = htmlencode(param);
worequest("SaveWorkOrderInvoice", param, function (data) {
if (typeof (data) === "string") {
$('#btn_invoice_save' + invsufix).attr('disabled', false);
showAlert(data, alerttitle);
} else {
$('#btn_invoice_save' + invsufix).attr('disabled', false);
item.Id = data;
if (invid <= 0) {//新增
if (add_invoice_filedatas && add_invoice_filedatas.length > 0) {
SaveInvoiceAttachmentFiles(add_invoice_filedatas, data);
add_invoice_filedatas = [];
}
if (next)
next(data);
else {
getInvoices(true);
}
hideInvoicePopup();
}
else {//编辑
if (next)
next(invid);
else {
showAlert(GetTextByKey("P_WO_SAVSUCCESSFULLY", "Saved successfully."), alerttitle);
$('#span_invoice_number' + invsufix).text($('#dialog_invoice_number' + invsufix).val());
}
}
}
}, function (err) {
$('#btn_invoice_save' + invsufix).attr('disabled', false);
console.log(err);
showAlert(GetTextByKey("P_WO_FAILED_SAVE_INVOICE", 'Failed to save invoice.'), alerttitle);
});
}
function OnAddInvoice() {
add_invoice_filedatas = [];
$('#tab_invoice_atts').empty();
$('#tab_invoice_attachments').hide();
if (!_this.option.workorderid || _this.option.workorderid === "") {
showAlert(GetTextByKey("P_WO_SAVEWORKORDERFIRST", "Please save work order first."), GetTextByKey("P_WO_ADDINVOICE", "Add Invoice"));
return;
}
$('#dialog_invoice_number').val("");
$('#dialog_invoice_status').val("0");
$('#tr_payment').hide();
$('#dialog_invoice_totalcosts').val("");
$('#dialog_invoice_othercost').val("");
$('#dialog_invoice_partscost').val("");
$('#dialog_invoice_traveltimecost').val("");
$('#dialog_invoice_laborcost').val("");
$('#dialog_invoice_taxes').val("");
$('#dialog_invoice_notes').val("");
$("#dialog_invoice_customervisible").prop('checked', false).attr('disabled', true);
$('#dialog_invoice_paymentby').val("Credit Card");
$('#dialog_invoice_checknumber').val("");
if (_this.option.workorderdata) {
$('#dialog_invoice_number').val(_this.option.workorderdata.InvoiceNumber || '');
$('#dialog_invoice_totalcosts').val(_this.option.workorderdata.WorkOrderTotalCost == 0 ? "" : _this.option.workorderdata.WorkOrderTotalCost);
$('#dialog_invoice_othercost').val(_this.option.workorderdata.OtherCost == 0 ? "" : _this.option.workorderdata.OtherCost);
$('#dialog_invoice_partscost').val(_this.option.workorderdata.PartsCost == 0 ? "" : _this.option.workorderdata.PartsCost);
$('#dialog_invoice_traveltimecost').val(_this.option.workorderdata.TravelTimeCost == 0 ? "" : workorderdata.TravelTimeCost);
$('#dialog_invoice_laborcost').val(_this.option.workorderdata.LaborCost == 0 ? "" : _this.option.workorderdata.LaborCost);
$('#dialog_invoice_taxes').val(_this.option.workorderdata.Taxes == 0 ? "" : _this.option.workorderdata.Taxes);
//getInvoiceTotalCost("");
}
showInvoicePopup();
}
function inputInvoiceChanged(invid) {
$('#tabinvoice' + invid).data('changed', true);
}
function setInvoiceDisabled(invid, di) {
$('#dialog_invoice_number' + invid).attr('disabled', di);
$('#dialog_invoice_totalcosts' + invid).attr('disabled', di);
$('#dialog_invoice_othercost' + invid).attr('disabled', di);
$('#dialog_invoice_partscost' + invid).attr('disabled', di);
$('#dialog_invoice_traveltimecost' + invid).attr('disabled', di);
$('#dialog_invoice_laborcost' + invid).attr('disabled', di);
$('#dialog_invoice_taxes' + invid).attr('disabled', di);
$('#dialog_invoice_notes' + invid).attr('disabled', di);
//$('#dialog_invoice_status' + invid).attr('disabled', di);
//$('#dialog_invoice_customervisible' + invid).attr('disabled', di);
}
var InvoiceStatus = {
Draft: 0,
Pending: 1,
Cancelled: 2,
PaymentCreated: 3,
Paid: 4,
Failed: 5,
ManualPaid: 6,
Revoked: 10
};
function getInvoiceStatus(s) {
var text = "";
if (s === InvoiceStatus.Draft)
text = GetTextByKey('P_WO_DRAFT', 'Draft');
else if (s === InvoiceStatus.Pending)
text = GetTextByKey('P_WO_AWATING_PAYMENT', 'Awaiting Payment');
else if (s === InvoiceStatus.Cancelled)
text = GetTextByKey('P_WO_CANCELLEDBYDEALER', 'Cancelled by Dealer');
else if (s === InvoiceStatus.PaymentCreated)
text = GetTextByKey('P_WO_AWATING_PAYMENT', 'Awaiting Payment');
else if (s === InvoiceStatus.Paid || s === InvoiceStatus.ManualPaid)
text = GetTextByKey('P_WO_CUSTOMER_PAID', 'Customer Paid');
else if (s === InvoiceStatus.Failed)
text = GetTextByKey('P_WO_PAYMENT_FAILURE', 'Payment Failure');
else if (s === InvoiceStatus.Revoked)
text = GetTextByKey('P_WO_REVOKED', 'Revoked');
else if (s === 100)
text = "";
return text;
}
function showPublishInvoicePopup() {
if (publish_invoice_id <= 0)
invoiceDialog.find('.maskbg').show();
else
invoicePublishMask.fadeIn(100);
//showmaskbg(true);
$('#dialog_invoice_textmsg').val(WorkorderParams.InvoiceMessage);
$('#dialog_invoice_chkSendAttachment')
.prop('disabled', (publish_invoice_id < 0) ? (add_invoice_filedatas.length <= 0) : !(invoicedata.find(i => i.Id === publish_invoice_id)?.Attachments?.length > 0))
.prop('checked', false);
$('#dialog_invoice_spanAttachmentName').hide();
publish_invoice_attach = null;
invoicePublishDialog.css({
'top': (document.documentElement.clientHeight - invoicePublishDialog.height()) / 3,
'left': (document.documentElement.clientWidth - invoicePublishDialog.width()) / 2
}).showDialogfixed();
}
function hidePublishInvoicePopup() {
if (publish_invoice_id <= 0)
invoiceDialog.find('.maskbg').hide();
else
invoicePublishMask.fadeOut(100);
//showmaskbg(false);
publish_invoice_id = 0;
invoicePublishDialog.hide();
}
function openPublishInvoiceDialog(inv) {
publish_invoice_var = inv;
var invid = inv.id;
if (invid <= 0) {
publish_invoice_id = invid;
showPublishInvoicePopup();
}
else {
onSaveWorkOrderInvoice(invid, function () {
publish_invoice_id = invid;
showPublishInvoicePopup();
});
}
}
function onPublishInvoice() {
var changed = $('#tabinvoice' + publish_invoice_id).data('changed');
if (publish_invoice_id <= 0)//add and publish
changed = true;
if (changed)
onSaveWorkOrderInvoice(publish_invoice_id, PublishInvoice)
else
PublishInvoice(publish_invoice_id);
}
function PublishInvoice(invid) {
if (invid <= 0)
return;
var pmemails = [];
var checked = $('#dialog_invoice_chksendtextmsg').prop('checked');
if (checked) {
var phoneemail = $('#dialog_invoice_phonenum').val();
if (phoneemail !== "") {
var phoneemails = phoneemail.split(';');
for (var i = 0; i < phoneemails.length; i++) {
var pm = phoneemails[i];
if (checkPhoneNumber(pm) || isEmail(pm)) {
pmemails.push({ 'Key': pm, 'Value': pm });
}
else {
if (_this.option.customercontacts) {
for (var j = 0; j < _this.option.customercontacts.length; j++) {
var c = _this.option.customercontacts[j];
if (c.OptOut || c.OptOut_BC) continue;
var mp = $.trim(c.MobilePhone);
var email = $.trim(c.Email);
if (c.Name === pm) {
if (c.ContactPreference == "0" && checkPhoneNumber(mp)) {
pmemails.push({ 'Key': mp, 'Value': pm });
break;
}
if (c.ContactPreference == "1" && isEmail(email)) {
pmemails.push({ 'Key': email, 'Value': pm });
break;
}
}
}
}
}
}
}
}
var msg = $('#dialog_invoice_textmsg').val();
var includeStatusLink = $('#dialog_invoice_chkIncludeStatusLink').prop("checked");
var param = JSON.stringify([invid, publish_invoice_var.no, publish_invoice_var.cost, _this.option.workorderid, JSON.stringify(pmemails), msg, (includeStatusLink ? "1" : "0")]);
param = htmlencode(param);
var url = _network.root + 'Maintenance/AddWorkOrder.aspx';
var method = 'PublishInvoiceToCustomer';
var data = new FormData();
data.append('MethodName', method);
data.append('ClientData', param);
if (publish_invoice_attach != null) {
if (Object.prototype.hasOwnProperty.call(publish_invoice_attach, 'id')) {
var attap = { Id: publish_invoice_attach.id, Caption: publish_invoice_attach.name };
data.append('AttaData', htmlencode(JSON.stringify(attap)));
} else {
data.append('attachment', publish_invoice_attach.file);
}
}
invoicePublishDialog.find('.maskbg').show();
$.ajax({
url: url,
type: 'POST',
dataType: 'json',
processData: false,
contentType: false,
cache: false,
data: data,
success: function (data) {
if (data !== "") {
showAlert(data, GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
getInvoices(true);
hidePublishInvoicePopup();
},
error: function (request, textStatus, errorThrown) {
showAlert(GetTextByKey("P_WO_FAILED_PUBLISH_INVOICE", 'Failed to publish this invoice.'), GetTextByKey("P_WO_PUBLISH_INVOICE", 'Publish Invoice'));
if (request?.readyState == 0) {
console.log(request);
} else {
writelog_ironintel("PublishEstimate", url + ".-1." + method + "." + JSON.stringify(param), JSON.stringify(request), textStatus + errorThrown);
}
},
complete: function () {
invoicePublishDialog.find('.maskbg').hide();
}
});
}
function SaveInvoiceAttachmentFiles(filedatas, invid) {
var formData = new FormData();
var notesdata = [];
for (var i = 0; i < filedatas.length; i++) {
formData.append("iconFile" + i, filedatas[i].File);
notesdata.push(encodeURIComponent(filedatas[i].Notes));
}
var p = JSON.stringify([invid, JSON.stringify(notesdata)]);
formData.append("MethodName", "AddInvoiceAttachment");
formData.append("ClientData", p);
var url = 'AddWorkOrder.aspx';
$.ajax({
url: url,
type: 'POST',
dataType: 'json',
processData: false,
contentType: false,
data: formData,
async: true,
success: function (data) {
if (data !== 'OK') {
showAlert(data, GetTextByKey("P_WO_ATTACHMENTFILE", 'Attachment File'));
} else {
if (invid > 0) {
hideWOInvoiceAttachmentPopup();
getInvoiceAttachment(invid);
}
else
getInvoices(true);
}
},
error: function (err) {
showAlert(GetTextByKey("P_WO_UPLOADFAILED", 'Upload failed'), GetTextByKey("P_WO_ATTACHMENTFILE", 'Attachment File'));
}
});
}
function getInvoiceAttachment(invid) {
var invoice = $('#tabinvoice' + invid).data('invoice');
if (!invoice)
return;
$('#tab_invoice_atts' + invid).empty();
$('#tab_invoice_attachments' + invid).hide();
worequest("GetWorkOrderInvoiceAttachments", invoice.Id, function (data) {
if (typeof (data) === "string") {
showAlert(data, GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
if (data && data.length > 0) {
showInvoiceAttachment(invid, data);
}
var invoice = invoicedata.find(i => i.Id === invid);
if (invoice != null) {
invoice.Attachments = data;
}
}, function (err) {
});
}
function showInvoiceAttachment(invid, atts) {
var candelete = false;
if (!atts) {
var invoice = $('#tabinvoice' + invid).data('invoice');
if (!invoice)
return;
atts = invoice.Attachments;
if (invoice.Status === InvoiceStatus.Draft || invoice.Status === InvoiceStatus.Revoked)
candelete = true;
}
else
candelete = true;
$('#tab_invoice_atts' + invid).empty();
$('#tab_invoice_attachments' + invid).hide();
if (atts && atts.length > 0) {
$('#tab_invoice_attachments' + invid).show();
for (var i = 0; i < atts.length; i++) {
var att = atts[i];
var tr = $('<tr></tr>').attr('id', att.AttachmentId);
var tdfile = $('<td></td>');
var filename = $("<label style='text-decoration: underline;color: RGB(30,144,255);cursor:pointer;'></label>").text(att.Notes === "" ? att.FileName : att.Notes).click(function () {
window.open("../filesvc.ashx?attchid=" + this.parentElement.parentElement.id + "&sourceType=woestimateattachment");
});
var span = $('<span></span>').text(att.AddedByName).css("margin-right", 5).css("margin-left", 5).css("color", "black");
var spanby = $('<span></span>').text(att.AddedOnLocalStr).css("color", "black");
tdfile.append(filename, span, spanby);
if (!WOReadOnly && candelete) {
var tdimg = $('<td style="width:18px;border:none;text-align:center;"></td>');
var imgDom = $('<span class="sbutton icondelete" style="padding:0;" ></span>').click(function () {
deleteInvoiceAttachment(this.parentElement.parentElement.id, invid);
});
tdimg.append(imgDom);
tr.append(tdimg);
}
tr.append(tdfile).appendTo($('#tab_invoice_atts' + invid));
}
}
}
function deleteInvoiceAttachment(attid, invid) {
if (confirm(GetTextByKey("P_WO_DELETEATTACHMENTTIPS", "Are you sure you want to delete the attachment?"))) {
worequest("DeleteInvoiceAttachment", attid, function (data) {
if (data !== 'OK') {
showAlert(data, GetTextByKey("P_WO_DELETEATTACHMENT", 'Delete Attachment'));
}
else {
getInvoiceAttachment(invid);
}
}, function (err) { });
}
}
function hideWOInvoiceAttachmentPopup() {
if (cur_invoice_uploadid <= 0)
invoiceDialog.find('.maskbg').hide();
else
showmaskbg(false);
invoiceAttachmentDialog.hide();
}
function openWOInvoiceAttachmentDialog(invid) {
cur_invoice_uploaddata = undefined;
cur_invoice_uploadid = invid;
if (invid <= 0)
invoiceDialog.find('.maskbg').show();
else
showmaskbg(true);
$('#btn_woinvoice_att_save').attr('disabled', false);
$('#tab_woinvoice_atts').empty();
$('#tab_woinvoice_attachments').hide();
$('#dialog_invoice_att_notes').val('');
invoiceAttachmentDialog.css({
'top': (document.documentElement.clientHeight - invoiceAttachmentDialog.height()) / 3,
'left': (document.documentElement.clientWidth - invoiceAttachmentDialog.width()) / 2
}).showDialogfixed();
}
function dragOverAddInvoiceAttachment(ev) {
ev.preventDefault();
ev.dataTransfer.dropEffect = 'link';
}
function dropAddInvoiceAttachment(ev) {
ev.preventDefault();
ev.stopPropagation();
var df = ev.dataTransfer;
var files = [];
if (df.items !== undefined) {
for (var i = 0; i < df.items.length; i++) {
var item = df.items[i];
if (item.kind === "file" && (item.webkitGetAsEntry() == null || item.webkitGetAsEntry().isFile)) {
var file = item.getAsFile();
if (file.size == 0) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS", "Attachment size is 0kb, uploading failed."));
return;
}
if (file.size > 50 * 1024 * 1024) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS1", "Attachment is too large. Maximum file size is 50 MB."));
return;
}
files.push({ 'File': file, 'Notes': '' });
}
}
}
if (files.length > 0) {
for (var i = 0; i < files.length; i++) {
cur_invoice_uploaddata = files[i];
onSaveWOInvoiceAttachment();
}
}
}
function cutAddInvoiceAttachment(ev) {
ev.stopPropagation();
var df = ev.clipboardData;
var files = [];
if (df.items !== undefined) {
for (var i = 0; i < df.items.length; i++) {
var item = df.items[i];
if (item.kind === "file" && (item.webkitGetAsEntry() == null || item.webkitGetAsEntry().isFile)) {
var file = item.getAsFile();
if (file.size == 0) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS", "Attachment size is 0kb, uploading failed."));
return;
}
if (file.size > 50 * 1024 * 1024) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS1", "Attachment is too large. Maximum file size is 50 MB."));
return;
}
files.push({ 'File': file, 'Notes': '' });
}
}
}
if (files.length > 0) {
for (var i = 0; i < files.length; i++) {
cur_invoice_uploaddata = files[i];
onSaveWOInvoiceAttachment();
}
}
}
function UpLoadInvoiceAttachment() {
var file = $('<input type="file" style="display: none;" />');
file.change(function () {
var files = this.files;
if (files.length == 0)
return;
if (files[0].size == 0) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS", "Attachment size is 0kb, uploading failed."));
return false;
}
if (files[0].size > 50 * 1024 * 1024) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS1", "Attachment is too large. Maximum file size is 50 MB."));
return false;
}
var notes = $('#dialog_invoice_att_notes').val();
cur_invoice_uploaddata = { 'File': files[0], 'Notes': notes };
createNewInvoiceAttachment(cur_invoice_uploaddata);
}).click();
}
function createNewInvoiceAttachment(data) {
$('#tab_woinvoice_atts').empty();
$('#tab_woinvoice_attachments').show();
var tr = $('<tr></tr>');
var tdfile = $('<td></td>');
var filename = $("<label class='attalabel'></label>").text(data.Notes === "" ? data.File.name : data.Notes);
tdfile.append(filename);
var tdimg = $('<td style="width:18px;border:none;text-align:center;"></td>');
var imgDom = $('<span class="sbutton icondelete" style="padding:0;" ></span>').click(function () {
this.parentElement.parentElement.remove();
cur_invoice_uploaddata = undefined;
$('#tab_woinvoice_attachments').hide();
});
tdimg.append(imgDom);
tr.append(tdimg);
tr.append(tdfile).appendTo($('#tab_woinvoice_atts'));
}
function onSaveWOInvoiceAttachment() {
if (!cur_invoice_uploaddata)
return;
$('#btn_woinvoice_att_save').attr('disabled', true);
var notes = $('#dialog_invoice_att_notes').val();
cur_invoice_uploaddata.Notes = notes;
if (cur_invoice_uploadid <= 0) {
add_invoice_filedatas.push(cur_invoice_uploaddata);
createAddInvoiceAttachment(cur_invoice_uploaddata);
hideWOInvoiceAttachmentPopup();
$('#btn_woinvoice_att_save').attr('disabled', false);
}
else {
SaveInvoiceAttachmentFiles([cur_invoice_uploaddata], cur_invoice_uploadid);
}
}
function createAddInvoiceAttachment(data) {
var notes = data.Notes;
var file = data.File;
$('#tab_invoice_attachments').show();
var tr = $('<tr></tr>');
var tdfile = $('<td></td>');
var filename = $("<label class='attalabel'></label>").text(notes === "" ? file.name : notes);
tdfile.append(filename);
var tdimg = $('<td style="width:18px;border:none;text-align:center;"></td>');
var imgDom = $('<span class="sbutton icondelete" style="padding:0;" ></span>').data('filedata', data).click(function () {
this.parentElement.parentElement.remove();
var fd = $(this).data('filedata');
add_invoice_filedatas.splice(add_invoice_filedatas.indexOf(fd), 1);
if (add_invoice_filedatas.length == 0)
$('#tab_invoice_attachments').hide();
});
tdimg.append(imgDom);
tr.append(tdimg);
tr.append(tdfile).appendTo($('#tab_invoice_atts'));
}
function hideWOInvoiceMakePaidPopup() {
showmaskbg(false);
invoiceMarkPaidDialog.hide();
}
function openWOInvoiceMarkPaidDialog(invid) {
cur_invoice_uploadid = invid;
$('#btn_woinvoice_maikpaid_save').attr('disabled', false);
showmaskbg(true);
$('#dialog_invoice_markpaid_paymentby').val("Credit Card");
$('#dialog_invoice_markpaid_number').val('');
invoiceMarkPaidDialog.css({
'top': (document.documentElement.clientHeight - invoiceMarkPaidDialog.height()) / 3,
'left': (document.documentElement.clientWidth - invoiceMarkPaidDialog.width()) / 2
}).showDialogfixed();
}
function OnMarkAsPaid() {
var changed = $('#tabinvoice' + cur_invoice_uploadid).data('changed');
if (changed)
onSaveWorkOrderInvoice(cur_invoice_uploadid, MarkAsPaid)
else
MarkAsPaid();
}
function MarkAsPaid() {
var invoice = $('#tabinvoice' + cur_invoice_uploadid).data('invoice');
var item = [invoice.Id, $('#dialog_invoice_markpaid_paymentby').val(), $('#dialog_invoice_markpaid_number').val()];
var param = JSON.stringify(item);
param = htmlencode(param);
$("#dialog_woinvoice_markpaid .maskbg").show();
worequest('MarkAsPaid', param, function (data) {
$("#dialog_woinvoice_markpaid .maskbg").hide();
if (data === 'OK') {
hideWOInvoiceMakePaidPopup();
getInvoices(true);
}
}, function (err) {
$("#dialog_woinvoice_markpaid .maskbg").hide();
});
}
_dialog.showInvoiceConfirm = function (msg, title, fedit, fcancel, fclose, iniframe, shownote) {
if (!fclose)
fclose = fcancel;
_dialog.showButtonDialog(msg, title, 'question', fclose, [{
value: GetTextByKey("P_WO_MARKASCUSTOMERVISIBLE", 'Mark as Customer Visible'),
func: fcancel
}, {
value: GetTextByKey("P_WO_MCONTINUEWITHOUTMAKINGVISIBLE", 'Continue Without Making Visible'),
func: fedit
}], iniframe, shownote);
};
function showInvoiceConfirm(msg, title, fcancel, fedit, fclose) {
invoicePublishDialog.find('.maskbg').show();
_dialog.showInvoiceConfirm(msg, title, function (e) {
invoicePublishDialog.find('.maskbg').show();
if (typeof fedit === 'function') {
fedit(e);
}
}, function (e) {
invoicePublishDialog.find('.maskbg').show();
if (typeof fcancel === 'function') {
fcancel(e);
}
}, function (e) {
invoicePublishDialog.find('.maskbg').show();
if (typeof fclose === 'function') {
fclose(e);
}
});
}
}
}
/*****************************************End Invoice*********************************************/
/*****************************************Begin Segment*********************************************/
if (typeof ($wosegment) !== "function") {
$wosegment = function (option) {
this.option = option || {};
var _this = this;
var userdata = [];
var jobsitedata = [];
var components = [];
var segmenttypes = [];
var dialog_segmentuser;
var dialog_segmenthour;
var dialog_segmentjobsite;
var dialog_segmentcost;
var dialog_segmenttype;
var dialog_segmentcomponent;
var dialog_segmentbillable;
var dialog_segmentcompleted;
var dialog_segmentcompleteddate;
var dialog_segmentdesc;
var dialog_segmentnotes;
this.changewo = function (woid) {
//if (woid !== option.workorderid) {
this.option.workorderid = woid;
//hidePopup();
GetSegmentDataSource(getSegments);
//}
}
this.close = function () {
segmentDialog?.remove();
}
this.loadsource = function () {
GetSegmentDataSource();
}
this.setwodata = function (wodata) {
this.option.workorderdata = wodata;
}
this.hasSegment = function () {
return segmentdata && segmentdata.length > 0
}
this.createSegment = function (p_div) {
p_div.addClass("tab_segments");
var div = $('<div class="function_title"></div>');
p_div.append(div);
var span_add = $('<span class="sbutton iconadd" data-lgid="P_WO_ADDSEGMENT">Add Segment</span>');
span_add.click(OnAddSegment);
div.append(span_add);
p_div.applyFleetLanguageText(true);
}
this.createSegment(this.option.parent);
var segmentDialog = createSegmentDialog();
function createSegmentDialog() {
var dialog = $('<div class="dialog" style="display: none;"></div>');
dialog.append('<div class="dialog-title"><span class="title" id="popupTitle" data-lgid="P_WO_ADDSEGMENT">Add Segment</span><em class="dialog-close"></em></div>');
var tb = $('<table style="line-height: 28px;"></table>');
dialog.append($('<div class="dialog-content"></div>').append(tb));
var tr = $('<tr></tr>').appendTo(tb);
var td = $('<td class="label" data-lgid="P_WO_USER_COLON">User:</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
dialog_segmentuser = $('<div id="dialog_segmentuser" tabindex="101" style="width: 320px" class="dropdown"></div>').appendTo(td);
dialog_segmentuser.dropdown([], {
search: true,
valueKey: 'IID',
textKey: 'DisplayName',
parent: '.dialog-content'
});
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_HOURS_COLON">Hours:</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
dialog_segmenthour = $('<input type="text" id="dialog_segmenthour" tabindex="102" maxlength="200" autocomplete="off" />').appendTo(td);
dialog_segmenthour.keydown(numberinput);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_JOBSITE_COLON">Jobsite:</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
dialog_segmentjobsite = $('<div id="dialog_segmentjobsite" tabindex="103" style="width: 320px" class="dropdown"></div>').appendTo(td);
dialog_segmentjobsite.dropdown([], {
search: true,
valueKey: 'ID',
textKey: 'Name',
parent: '.dialog-content'
});
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_COST_COLON">Cost:</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
dialog_segmentcost = $('<input type="text" id="dialog_segmentcost" tabindex="104" maxlength="200" autocomplete="off" />').appendTo(td);
dialog_segmentcost.keydown(numberinput);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_SEGMENTTYPE_COLON">Segment Type:</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
dialog_segmenttype = $('<div id="dialog_segmenttype" tabindex="104" style="width: 320px" class="dropdown"></div>').appendTo(td);
dialog_segmenttype.dropdown([], {
input: true,
maxlength: 50,
textKey: 'value',
parent: '.dialog-content'
});
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_COMPONENT_COLON">Component:</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
dialog_segmentcomponent = $('<div id="dialog_segmentcomponent" tabindex="104" style="width: 320px" class="dropdown"></div>').appendTo(td);
dialog_segmentcomponent.dropdown([], {
input: true,
maxlength: 40,
textKey: 'value',
parent: '.dialog-content'
});
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_BILLABLE_COLON">Billable:</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
dialog_segmentbillable = $('<input type="checkbox" id="dialog_segmentbillable" tabindex="105" />').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_COMPLETED_COLON">Completed:</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
dialog_segmentcompleted = $('<input type="checkbox" id="dialog_segmentcompleted" tabindex="105" />').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_COMPLETEDDATE_COLON">Completed Date:</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
dialog_segmentcompleteddate = $('<input type="text" id="dialog_segmentcompleteddate" tabindex="106" maxlength="200" autocomplete="off" />').appendTo(td);
dialog_segmentcompleteddate.datetimepicker({
timepicker: false,
format: 'm/d/Y',
enterLikeTab: false,
scrollInput: false,
onSelectDate: function (v, inp) {
var date = new DateFormatter().formatDate(v, 'm/d/Y 00:00:00');
inp.parent().data('val', [date]);
}
});
dialog_segmentcompleteddate.change(function () {
var date = dialog_segmentcompleteddate.val();
if (date.length > 0 && checkDate(date)) {
dialog_segmentcompleted.prop('checked', true);
}
});
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label"><span data-lgid="P_WO_DESCRIPTION_COLON">Description:</span><span class="redasterisk">*</span></td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
dialog_segmentdesc = $('<input type="text" id="dialog_segmentdesc" tabindex="107" maxlength="200" autocomplete="off" />').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_NOTES_COLON">Notes:</td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
dialog_segmentnotes = $('<textarea id="dialog_segmentnotes" maxlength="1000" tabindex="108" style="width: 540px; height: 120px;"></textarea>').appendTo(td);
var func = $('<div class="dialog-func"></div>');
dialog.append(func);
func.append('<input type="button" value="Cancel" data-lgid="P_WO_CANCEL" class="dialog-close" tabindex="53" />');
var btnok = $('<input type="button" value="OK" data-lgid="P_WO_OK" tabindex="52" />');
btnok.on('click', function () {
SaveSegment('');
});
func.append(btnok);
func.append('<div class="clear"></div>');
$(document.body).append(dialog);
dialog.dialog(function () {
showmaskbg(false);
});
dialog.applyFleetLanguageText(true);
return dialog;
}
function numberinput(e) {
var keyCode = e.which;
if (keyCode === 9//tab
|| keyCode === 8 || keyCode === 46 //delete
|| keyCode === 110 || keyCode === 190//.
|| keyCode === 37 || keyCode === 39//left right
|| keyCode === 55 || keyCode === 56//home end
|| (keyCode >= 48 && keyCode <= 57)
|| (keyCode >= 96 && keyCode <= 105))
return true;
else
return false;
}
function GetSegmentDataSource(next) {
worequest("GetSegmentDataSource", '', function (data) {
if (data.Users && data.Users.length > 0) {
userdata = data.Users;
dialog_segmentuser.dropdownSource(userdata);
}
if (data.JobSites && data.JobSites.length > 0) {
var jss = [{ ID: '-1', Name: ' ', html: '&nbsp;' }];
for (var js of data.JobSites) {
jss.push(js);
}
jobsitedata = jss;
dialog_segmentjobsite.dropdownSource(jobsitedata);
}
if (data.Components && data.Components.length > 0) {
var source = [];
for (var type of data.Components) {
source.push({ value: type });
}
components = source;
dialog_segmentcomponent.dropdownSource(components);
}
if (data.SegmentTypes && data.SegmentTypes.length > 0) {
var source = [];
for (var type of data.SegmentTypes) {
source.push({ value: type });
}
segmenttypes = source;
dialog_segmenttype.dropdownSource(segmenttypes);
}
if (next)
next();
}, function (err) {
console.log(err);;
});
}
function GetSegmentDataSource1(next) {
worequest("GetSegmentDataSource1", '', function (data) {
if (data.Components && data.Components.length > 0) {
var source = [];
for (var type of data.Components) {
source.push({ value: type });
}
components = source;
$("#dialog_segmentcomponent").dropdownSource(components);
}
if (data.SegmentTypes && data.SegmentTypes.length > 0) {
var source = [];
for (var type of data.SegmentTypes) {
source.push({ value: type });
}
segmenttypes = source;
$("#dialog_segmenttype").dropdownSource(segmenttypes);
}
if (next)
next();
}, function (err) {
console.log(err);;
});
}
function SetCompleted(segid) {
var date = $('#dialog_segmentcompleteddate' + segid).val();
if (date.length > 0 && checkDate(date)) {
$('#dialog_segmentcompleted' + segid).prop('checked', true);
}
}
var segmentdata = [];
function initControl(segid) {
$('#dialog_segmentcompleteddate' + segid).datetimepicker({
timepicker: false,
format: 'm/d/Y',
enterLikeTab: false,
onSelectDate: function (v, inp) {
var date = new DateFormatter().formatDate(v, 'm/d/Y 00:00:00');
inp.parent().data('val', [date]);
}
});
$('#dialog_segmentuser' + segid).dropdown(userdata || [], {
search: true,
valueKey: 'IID',
textKey: 'DisplayName'
});
$("#dialog_segmentjobsite" + segid).dropdown(jobsitedata || [], {
search: true,
valueKey: 'ID',
textKey: 'Name'
});
$("#dialog_segmenttype" + segid).dropdown(segmenttypes || [], {
input: true,
maxlength: 50,
textKey: 'value'
});
$("#dialog_segmentcomponent" + segid).dropdown(components || [], {
input: true,
maxlength: 40,
textKey: 'value'
});
}
var inloading = false;
function getSegments(callback) {
segmentindex = 0;
_this.option.parent.find('.segments_table').remove();
if (!_this.option.workorderid || _this.option.workorderid == "") return;
if (inloading)
return;
inloading = true;
if (typeof _this.option.showloading == 'function')
_this.option.showloading(true);
worequest("GetSegments", _this.option.workorderid, function (data) {
inloading = false;
if (typeof _this.option.showloading == 'function')
_this.option.showloading(false);
if (typeof (data) === "string") {
showAlert(data, GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
if (data.WorkOrderID != _this.option.workorderid) {
getSegments(callback);
return;
}
data = data.Data;
segmentindex = 0;
if (data && data.length > 0) {
//$('#dialog_workordercosts').attr('disabled', true);
segmentdata = data;
var wocost = 0;
for (var i = 0; i < segmentdata.length; i++) {
wocost += segmentdata[i].Cost;
showSegment(segmentdata[i]);
}
$('#dialog_workordercosts').val(wocost);
}
else {
//$('#dialog_workordercosts').attr('disabled', false);
if (_this.option.workorderdata)
$('#dialog_workordercosts').val(_this.option.workorderdata.WorkOrderTotalCost == 0 ? "" : _this.option.workorderdata.WorkOrderTotalCost);
segmentdata = [];
if (callback)
callback();
}
}, function (err) {
inloading = false;
if (typeof _this.option.showloading == 'function')
_this.option.showloading(false);
});
}
var segmentindex = 0;
function showSegment(segment) {
segmentindex++;
var segid = segment.SegmentID;
var div_segments = _this.option.parent;
var table = $('<table id="tabsegment_' + segid + '" class="segments_table"></table>');
var tr1 = $('<tr></tr>');
var tr1_td1 = $('<td class="label" style="font-size:14px;font-weight:500;text-align:left;">' + GetTextByKey("P_WO_SEGMENT", "Segment") + " " + segmentindex + '</td>"');
if (!WOReadOnly) {
var s_del = $('<span class="sbutton icondelete" ></span>');
s_del.on('click', segid, function (e) {
DeleteSegment(e.data);
})
tr1_td1.append(s_del);
}
var tr1_td2 = $('<td></td>"');
tr1.append(tr1_td1).append(tr1_td2);
table.append(tr1);
var tr = $('<tr></tr>');
var td1 = $('<td class="label">' + GetTextByKey("P_WO_USER_COLON", " User:") + '</td>"');
var td2 = $('<td></td>"');
var sel_user = $('<div id="dialog_segmentuser' + segid + '" class="dropdown"></div>').css("width", 320);
td2.append(sel_user);
var td3 = $('<td class="label">' + GetTextByKey("P_WO_COMPLETED_COLON", "Completed:") + '</td>"');
var td4 = $('<td></td>"');
var chk_completed = $('<input type="checkbox" id="dialog_segmentcompleted' + segid + '" />');
td4.append(chk_completed);
tr.append(td1).append(td2).append(td3).append(td4);
table.append(tr);
tr = $('<tr></tr>');
td1 = $('<td class="label">' + GetTextByKey("P_WO_HOURS_COLON", "Hours:") + '</td>"');
td2 = $('<td></td>"');
var input_hour = $('<input type="text" id="dialog_segmenthour' + segid + '" maxlength="12" />')
.keydown(numberinput);
td2.append(input_hour);
td3 = $('<td class="label">' + GetTextByKey("P_WO_COMPLETEDDATE_COLON", "Completed Date:") + '</td>"');
td4 = $('<td></td>"');
var input_completeddate = $('<input type="text" id="dialog_segmentcompleteddate' + segid + '" />');
input_completeddate.on("change", segid, function (e) {
SetCompleted(e.data);
});
td4.append(input_completeddate);
tr.append(td1).append(td2).append(td3).append(td4);
table.append(tr);
tr = $('<tr></tr>');
td1 = $('<td class="label">' + GetTextByKey("P_WO_JOBSITE_COLON", "Jobsite:") + '</td>"');
td2 = $('<td></td>"');
var sel_jobsite = $('<div id="dialog_segmentjobsite' + segid + '" class="dropdown"></div>').css("width", 320);
td2.append(sel_jobsite);
td3 = $('<td class="label"><span>' + GetTextByKey("P_WO_DESCRIPTION_COLON", "Description:") + '</span><span class="redasterisk">*</span></td>"');
td4 = $('<td></td>"');
var input_desc = $('<input type="text" id="dialog_segmentdesc' + segid + '" maxlength="200" />');
td4.append(input_desc);
tr.append(td1).append(td2).append(td3).append(td4);
table.append(tr);
tr = $('<tr></tr>');
td1 = $('<td class="label">' + GetTextByKey("P_WO_COST_COLON", "Cost:") + '</td>"');
td2 = $('<td></td>"');
var input_cost = $('<input type="text" id="dialog_segmentcost' + segid + '" />')
.keydown(numberinput);
td2.append(input_cost);
td3 = $('<td class="label">' + GetTextByKey("P_WO_NOTES_COLON", "Notes:") + '</td>"');
td4 = $('<td rowspan="4"></td>"').css("vertical-align", "top");
var textarea_notes = $('<textarea id="dialog_segmentnotes' + segid + '" maxlength="500" style="width: 450px; height: 120px;"></textarea>')
td4.append(textarea_notes);
tr.append(td1).append(td2).append(td3).append(td4);
table.append(tr);
tr = $('<tr></tr>');
td1 = $('<td class="label">' + GetTextByKey("P_WO_SEGMENTTYPE_COLON", "Segment Type:") + '</td>"');
td2 = $('<td></td>"');
var sel_segmenttype = $('<div id="dialog_segmenttype' + segid + '" class="dropdown"></div>').css("width", 320);
td2.append(sel_segmenttype);
tr.append(td1).append(td2);
table.append(tr);
tr = $('<tr></tr>');
td1 = $('<td class="label">' + GetTextByKey("P_WO_COMPONENT_COLON", "Component:") + '</td>"');
td2 = $('<td></td>"');
var sel_component = $('<div id="dialog_segmentcomponent' + segid + '" class="dropdown"></div>').css("width", 320);
td2.append(sel_component);
tr.append(td1).append(td2);
table.append(tr);
tr = $('<tr></tr>');
td1 = $('<td class="label">' + GetTextByKey("P_WO_BILLABLE_COLON", "Billable:") + '</td>"');
td2 = $('<td></td>"');
var chk_billable = $('<input type="checkbox" id="dialog_segmentbillable' + segid + '" />');
td2.append(chk_billable);
tr.append(td1).append(td2);
table.append(tr);
if (!WOReadOnly) {
tr = $('<tr></tr>');
td1 = $('<td colspan="4" style="text-align: right;"></td>"');
var input_save = $('<input type="button" value="Save" style="width:80px;height:25px;" id="btn_savesegment' + segid + '" />').val(GetTextByKey("P_WO_SAVE", "Save"));
input_save.on('click', segid, function (e) {
SaveSegment(e.data);
})
var input_cancel = $('<input type="button" value="Cancel" style="width:80px;height:25px;margin-left:10px;" />').val(GetTextByKey("P_WO_CANCEL", "Cancel"));
input_cancel.on('click', segid, function (e) {
CancelSegment(e.data);
});
td1.append(input_save).append(input_cancel);
tr.append(td1);
table.append(tr);
}
div_segments.append(table);
initControl(segid);
$('#tabsegment_' + segid).data('segment', segment);
$('#dialog_segmentuser' + segid).dropdownVal(segment.UserIID);
$('#dialog_segmentdesc' + segid).val(segment.Description);
$('#dialog_segmenthour' + segid).val(segment.Hours === 0 ? "" : segment.Hours);
$('#dialog_segmentnotes' + segid).val(segment.Notes);
$('#dialog_segmentjobsite' + segid).dropdownVal(segment.JobsiteID);
$('#dialog_segmentcost' + segid).val(segment.Cost === 0 ? "" : segment.Cost);
$('#dialog_segmenttype' + segid).dropdownVal(segment.SegmentType);
$('#dialog_segmentcompleted' + segid).prop('checked', segment.Completed);
$('#dialog_segmentcompleteddate' + segid).val(segment.CompletedDateStr);
$('#dialog_segmentcomponent' + segid).dropdownVal(segment.Component);
$('#dialog_segmentbillable' + segid).prop('checked', segment.Billable);
}
function OnAddSegment() {
if (!_this.option.workorderid || _this.option.workorderid === "") {
showAlert(GetTextByKey("P_WO_SAVEWORKORDERFIRST", "Please save work order first."), GetTextByKey("P_WO_ADDSEGMENT", "Add Segment"));
return;
}
$('#dialog_segmentuser').dropdownVal('');
$('#dialog_segmentdesc').val('');
$('#dialog_segmenthour').val('');
$('#dialog_segmentnotes').val('');
$('#dialog_segmentjobsite').dropdownVal('');
$('#dialog_segmentcost').val('');
$('#dialog_segmentcompleted').prop('checked', false);
$('#dialog_segmentcompleteddate').val('');
$('#dialog_segmenttype').dropdownVal('');
$('#dialog_segmentcomponent').dropdownVal('');
$('#dialog_segmentbillable').prop('checked', false);
showPopup();
}
function DeleteSegment(segid) {
var segment = $('#tabsegment_' + segid).data('segment');
if (!segment)
return;
showConfirm(GetTextByKey("P_WO_DOYOUWANTTODELETETHESEGMENT", 'Do you want to delete the segment?'), GetTextByKey("P_WO_DELETESEGMENT", 'Delete Segment'), function () {
worequest("DeleteSegment", segment.SegmentID, function (data) {
GetSegmentDataSource1(function () {
if (typeof getTotalCost == 'function')
getSegments(getTotalCost);
else
getSegments();
});
}, function (err) {
showAlert(GetTextByKey("P_WO_FAILEDDELETESEGMENT", 'Failed to delete this segment.'), GetTextByKey("P_WO_DELETESEGMENT", 'Delete Segment'));
});
});
}
function CancelSegment(segid) {
var segment = $('#tabsegment_' + segid).data('segment');
if (!segment)
return;
$('#dialog_segmentuser' + segid).dropdownVal(segment.UserIID);
$('#dialog_segmentdesc' + segid).val(segment.Description);
$('#dialog_segmenthour' + segid).val(segment.Hours);
$('#dialog_segmentnotes' + segid).val(segment.Notes);
$('#dialog_segmentjobsite' + segid).dropdownVal(segment.JobsiteID);
$('#dialog_segmentcost' + segid).val(segment.Cost);
$('#dialog_segmentcompleted' + segid).prop('checked', segment.Completed);
$('#dialog_segmentcompleteddate' + segid).val(segment.CompletedDateStr);
$('#dialog_segmenttype' + segid).dropdownVal(segment.SegmentType);
$('#dialog_segmentcomponent' + segid).dropdownVal(segment.Component);
$('#dialog_segmentbillable' + segid).prop('checked', segment.Billable);
}
function SaveSegment(segid) {
$('#btn_savesegment' + segid).attr('disabled', true);
var segmentid = -1;
var alerttitle = GetTextByKey("P_WO_ADDSEGMENT", "Add Segment");
if (segid > 0) {
var alerttitle = GetTextByKey("P_WO_EDITSEGMENT", "Edit Segment");
segmentid = segid;
}
var item = {
'SegmentID': segmentid,
'WorkOrderID': _this.option.workorderid,
'UserIID': $('#dialog_segmentuser' + segid).dropdownVal(),
'Description': $('#dialog_segmentdesc' + segid).val(),
'Hours': $('#dialog_segmenthour' + segid).val(),
'Notes': $('#dialog_segmentnotes' + segid).val(),
'JobsiteID': $('#dialog_segmentjobsite' + segid).dropdownVal(),
'Cost': $('#dialog_segmentcost' + segid).val(),
'Completed': $('#dialog_segmentcompleted' + segid).prop('checked'),
'CompletedDate': $('#dialog_segmentcompleteddate' + segid).val(),
'SegmentType': $('#dialog_segmenttype' + segid).dropdownVal(),
'Component': $('#dialog_segmentcomponent' + segid).dropdownVal(),
'Billable': $('#dialog_segmentbillable' + segid).prop('checked')
};
if (item.Description === "" || item.Description.length == 0) {
showAlert(GetTextByKey("P_WO_DESCRIPTIONREQUIRED", 'Description is required.'), alerttitle);
$('#btn_savesegment' + segid).attr('disabled', false);
return;
}
if (item.Hours !== "") {
if (isNaN(item.Hours)) {
showAlert(GetTextByKey("P_WO_HOURSFORMATERROR", 'Hours format error.'), alerttitle);
$('#btn_savesegment' + segid).attr('disabled', false);
return;
}
else {
if (item.Hours <= 0) {
showAlert(GetTextByKey("P_WO_HOURSMUSTBEGREATERTHAN0", 'Hours must be greater than 0.'), alerttitle);
$('#btn_savesegment' + segid).attr('disabled', false);
return;
}
}
}
if (item.Cost !== "") {
if (isNaN(item.Cost)) {
showAlert(GetTextByKey("P_WO_COSTFORMATERROR", 'Cost format error.'), alerttitle);
$('#btn_savesegment' + segid).attr('disabled', false);
return;
}
else {
if (item.Cost <= 0) {
showAlert(GetTextByKey("P_WO_COSTMUSTBEGREATERTHAN0", 'Cost must be greater than 0.'), alerttitle);
$('#btn_savesegment' + segid).attr('disabled', false);
return;
}
}
}
if (item.Cost === "")
item.Cost = -1;
if (item.Hours === "")
item.Hours = -1;
var param = JSON.stringify(item);
param = htmlencode(param);
worequest("SaveSegment", param, function (data) {
if (typeof (data) === "string") {
$('#btn_savesegment' + segid).attr('disabled', false);
showAlert(data, alerttitle);
} else {
$('#btn_savesegment' + segid).attr('disabled', false);
if (segid > 0) {
showAlert(GetTextByKey("P_WO_SAVSUCCESSFULLY", "Saved successfully."), alerttitle);
}
GetSegmentDataSource1(function () {
if (typeof getTotalCost == 'function')
getSegments(getTotalCost);
else
getSegments();
});
hidePopup();
}
}, function (err) {
$('#btn_savesegment' + segid).attr('disabled', false);
console.log(err);
showAlert(GetTextByKey("P_WO_FAILEDTOSAVESEGMENT", 'Failed to save segment.'), alerttitle);
});
}
function showPopup() {
showmaskbg(true);
segmentDialog.css({
'top': (document.documentElement.clientHeight - segmentDialog.height()) / 3,
'left': (document.documentElement.clientWidth - segmentDialog.width()) / 2
}).showDialogfixed();
}
function hidePopup() {
showmaskbg(false);
segmentDialog.hide();
}
}
}
/*****************************************End Segment*********************************************/
/*****************************************Begin Alert*********************************************/
if (typeof ($woalert) !== "function") {
$woalert = function (option) {
this.option = option || {};
var _this = this;
var alertids = this.option.alertids ? this.option.alertids : [];
var divdtcalerts;
var divpmaalerts;
var divinspectalerts;
var divoilalerts;
var span_addalerts;
var span_removealerts;
var span_addpmalerts;
this.refresh = function () {
getAlerts();
}
this.changewo = function (woid, aid) {
//if (woid !== option.workorderid) {
this.option.workorderid = woid;
if (aid)
this.option.machineid = aid;
//hideAlertPopup();
//hideAllPMSchedulePopup();
getAlerts();
//}
}
this.close = function () {
alertpopupdialog?.remove();
allpmschedulepopupdialog?.remove();
}
this.changeasset = function (aid) {
this.option.machineid = aid;
}
this.getalertids = function () {
return alertids;
}
this.createAlert = function (p_div) {
if (!WOReadOnly) {
var div_ftitle = $('<div class="function_title"></div>');
p_div.append(div_ftitle);
span_addalerts = $('<span class="sbutton iconadd" data-lgid="P_WO_ADDALERTS">Add Alerts</span>');
span_addalerts.click(OnAddAlerts);
div_ftitle.append(span_addalerts);
span_removealerts = $('<span class="sbutton icondelete" data-lgid="P_WO_REMOVEALERTS">Remove Alerts</span>');
span_removealerts.click(OnRemoveAlerts);
div_ftitle.append(span_removealerts);
p_div.append('<div class="clear"></div>');
}
//DTC Alerts
divdtcalerts = $('<div style="height: 260px;min-width:400px; display: none;"></div>');
divdtcalerts.append('<div class="subtitle"><span data-lgid="P_WO_DTCALERTS">DTC Alerts</span></div>');
divdtcalerts.append('<div id="dtcalertslist"></div>');
p_div.append(divdtcalerts);
//PM Alerts
divpmaalerts = $('<div style="height: 260px; min-width:400px;"></div>');
var divpmaalerts_title = $('<div class="subtitle"></div>');
divpmaalerts_title.append('<span data-lgid="P_WO_PMALERTS">PM Alerts</span>');
if (!WOReadOnly) {
span_addpmalerts = $('<span class="sbutton iconadd" style="color: black;" data-lgid="P_WO_ADDPMALERTS">Add PM Alerts (Alerts not yet triggered)</span>');
span_addpmalerts.click(OnAddAllPMSchedules);
divpmaalerts_title.append(span_addpmalerts);
}
divpmaalerts.append(divpmaalerts_title);
divpmaalerts.append('<div id="pmaalertslist"></div>');
p_div.append(divpmaalerts);
//Inspect Alerts
divinspectalerts = $('<div style="height: 260px;min-width:400px; display: none;"></div>');
divinspectalerts.append('<div class="subtitle"><span data-lgid="P_WO_INSPECTALERTS">Inspect Alerts</span></div>');
divinspectalerts.append('<div id="inspectalertslist"></div>');
p_div.append(divinspectalerts);
//Oil Alerts
divoilalerts = $('<div style="height: 260px;min-width:400px; display: none;"></div>');
divoilalerts.append('<div class="subtitle"><span data-lgid="P_WO_OILALERTS">Oil Alerts</span></div>');
divoilalerts.append('<div id="oilalertslist"></div>');
p_div.append(divoilalerts);
p_div.applyFleetLanguageText(true);
}
this.createAlert(this.option.parent);
InitDTCAlertGridData();
InitPMAAlertGridData();
InitInspectAlertGridData();
InitOilAlertGridData();
var alertpopupdialog = createNoneAssignedAlertDialog();
var allpmschedulepopupdialog = createAllPMSchedulesDialog();
function showAllAlerts(alerts) {
if (alerts.DTCAlerts && alerts.DTCAlerts.length > 0) {
_DTCAlerts = alerts.DTCAlerts;
divdtcalerts.show();
showAlerts(_DTCAlerts, grid_dtcalertdt);
}
else {
_DTCAlerts = [];
showAlerts(_DTCAlerts, grid_dtcalertdt);
}
if (alerts.PMAlerts && alerts.PMAlerts.length > 0) {
_PMAAlerts = alerts.PMAlerts;
//divpmaalerts.show();
showAlerts(_PMAAlerts, grid_pmaalertdt);
$('#dialog_expectedcost').val(alerts.AllExpectedCost === 0 ? '' : alerts.AllExpectedCost);
}
else {
_PMAAlerts = [];
showAlerts(_PMAAlerts, grid_pmaalertdt);
}
if (alerts.InspectAlerts && alerts.InspectAlerts.length > 0) {
_InspectAlerts = alerts.InspectAlerts;
divinspectalerts.show();
showAlerts(_InspectAlerts, grid_inspectalertdt);
}
else {
_InspectAlerts = [];
showAlerts(_InspectAlerts, grid_inspectalertdt);
}
if (alerts.OilAlerts && alerts.OilAlerts.length > 0) {
_OilAlerts = alerts.OilAlerts;
divoilalerts.show();
showAlerts(_OilAlerts, grid_oilalertdt);
}
else {
_OilAlerts = [];
showAlerts(_OilAlerts, grid_oilalertdt);
}
}
function showAlerts(data, grid_dt) {
var rows = [];
for (var i = 0; i < data.length; i++) {
var r = data[i];
alertids.push(r.AlertID);
if (r.RepeatedAlerts) {
for (var j = 0; j < r.RepeatedAlerts.length; j++) {
alertids.push(r.RepeatedAlerts[j]);
}
}
for (var j in r) {
if (j === "EngineHours")
r["EngineHoursObj"] = { DisplayValue: r["EngineHours"] == 0 ? "" : r["EngineHours"], Value: r["EngineHours"] };
else if (j === "AlertLocalTime")
r["AlertLocalTime"] = { DisplayValue: r["AlertLocalTimeStr"], Value: r["AlertLocalTime"] };
}
rows.push(r);
}
grid_dt.setData(rows);
}
var grid_dtcalertdt;
function InitDTCAlertGridData() {
grid_dtcalertdt = createGridView('#dtcalertslist');
var list_columns = [
{ name: 'Selected', caption: "", valueIndex: 'Selected', type: 3, css: { 'width': 45, 'text-align': 'center' } },
{ name: 'EngineHours', caption: GetTextByKey("P_WO_HOURS", "Hours"), valueIndex: 'EngineHoursObj', css: { 'width': 150, 'text-align': 'left' } },
{ name: 'AlertType', caption: GetTextByKey("P_WO_ALERTTYPE", "Alert Type"), valueIndex: 'AlertType', css: { 'width': 150, 'text-align': 'left' } },
{ name: 'Description', caption: GetTextByKey("P_WO_DESCRIPTION", "Description"), valueIndex: 'Description', css: { 'width': 480, 'text-align': 'left' } },
//{ name: 'ServiceDescription', caption: GetTextByKey("P_WO_SERVICEDESCRIPTION", "Service Description"), valueIndex: 'ServiceDescription', css: { 'width': 240, 'text-align': 'left' } },
{ name: 'AlertCount', caption: GetTextByKey("P_WO_COUNT", "Count"), valueIndex: 'AlertCount', css: { 'width': 100, 'text-align': 'left' } },
{ name: 'AlertLocalTime', caption: GetTextByKey("P_WO_LATESTDATETIME", "Latest DateTime"), valueIndex: 'AlertLocalTime', css: { 'width': 150, 'text-align': 'left' } },
{ name: 'Comment', caption: GetTextByKey("P_AM_COMMENT", "Comment"), valueIndex: 'Comment', css: { 'width': 150, '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 = true;
col.sortable = true;
col.type = list_columns[hd].type;
col.width = list_columns[hd].css.width;
col.align = list_columns[hd].css["text-align"]
col.key = list_columns[hd].valueIndex;
columns.push(col);
if (col.name === "Selected") {
col.allcheck = true;
} else if (col.name === 'Comment') {
col.type = NoteColumn;
col.readonly = true;
}
}
grid_dtcalertdt.multiSelect = false;
grid_dtcalertdt.columns = columns;
grid_dtcalertdt.init();
}
var grid_pmaalertdt;
function InitPMAAlertGridData() {
grid_pmaalertdt = createGridView('#pmaalertslist');
var list_columns = [
{ name: 'Selected', caption: "", valueIndex: 'Selected', type: 3, css: { 'width': 45, 'text-align': 'center' } },
{ name: 'EngineHours', caption: GetTextByKey("P_WO_HOURS", "Hours"), valueIndex: 'EngineHoursObj', css: { 'width': 150, 'text-align': 'left' } },
{ name: 'AlertType', caption: GetTextByKey("P_WO_ALERTTYPE", "Alert Type"), valueIndex: 'AlertType', css: { 'width': 150, 'text-align': 'left' } },
{ name: 'Description', caption: GetTextByKey("P_WO_DESCRIPTION", "Description"), valueIndex: 'Description', css: { 'width': 240, 'text-align': 'left' } },
{ name: 'ServiceDescription', caption: GetTextByKey("P_WO_SERVICEDESCRIPTION", "Service Description"), valueIndex: 'ServiceDescription', css: { 'width': 240, 'text-align': 'left' } },
{ name: 'ExpectedCost', caption: GetTextByKey("P_PM_EXPECTEDCOST", "Expected Cost"), valueIndex: 'ExpectedCost', css: { 'width': 100, 'text-align': 'left' } },
{ name: 'AlertCount', caption: GetTextByKey("P_WO_COUNT", "Count"), valueIndex: 'AlertCount', css: { 'width': 100, 'text-align': 'left' } },
{ name: 'AlertLocalTime', caption: GetTextByKey("P_WO_LATESTDATETIME", "Latest DateTime"), valueIndex: 'AlertLocalTime', css: { 'width': 150, 'text-align': 'left' } },
{ name: 'Comment', caption: GetTextByKey("P_AM_COMMENT", "Comment"), valueIndex: 'Comment', css: { 'width': 150, '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 = true;
col.sortable = true;
col.type = list_columns[hd].type;
col.width = list_columns[hd].css.width;
col.align = list_columns[hd].css["text-align"]
col.key = list_columns[hd].valueIndex;
columns.push(col);
if (col.name === "Selected") {
col.allcheck = true;
} else if (col.name === 'Comment') {
col.type = NoteColumn;
col.readonly = true;
}
}
grid_pmaalertdt.multiSelect = false;
grid_pmaalertdt.columns = columns;
grid_pmaalertdt.init();
}
var grid_inspectalertdt;
function InitInspectAlertGridData() {
grid_inspectalertdt = createGridView('#inspectalertslist');
var list_columns = [
{ name: 'Selected', caption: "", valueIndex: 'Selected', type: 3, css: { 'width': 45, 'text-align': 'center' } },
{ name: 'EngineHours', caption: GetTextByKey("P_WO_HOURS", "Hours"), valueIndex: 'EngineHoursObj', css: { 'width': 150, 'text-align': 'left' } },
{ name: 'AlertType', caption: GetTextByKey("P_WO_ALERTTYPE", "Alert Type"), valueIndex: 'AlertType', css: { 'width': 150, 'text-align': 'left' } },
{ name: 'Description', caption: GetTextByKey("P_WO_DESCRIPTION", "Description"), valueIndex: 'Description', css: { 'width': 480, 'text-align': 'left' } },
//{ name: 'ServiceDescription', caption: GetTextByKey("P_WO_SERVICEDESCRIPTION", "Service Description"), valueIndex: 'ServiceDescription', css: { 'width': 240, 'text-align': 'left' } },
{ name: 'AlertCount', caption: GetTextByKey("P_WO_COUNT", "Count"), valueIndex: 'AlertCount', css: { 'width': 100, 'text-align': 'left' } },
{ name: 'AlertLocalTime', caption: GetTextByKey("P_WO_LATESTDATETIME", "Latest DateTime"), valueIndex: 'AlertLocalTime', css: { 'width': 150, 'text-align': 'left' } },
{ name: 'Comment', caption: GetTextByKey("P_AM_COMMENT", "Comment"), valueIndex: 'Comment', css: { 'width': 150, '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 = true;
col.sortable = true;
col.type = list_columns[hd].type;
col.width = list_columns[hd].css.width;
col.align = list_columns[hd].css["text-align"]
col.key = list_columns[hd].valueIndex;
columns.push(col);
if (col.name === "Selected") {
col.allcheck = true;
} else if (col.name === 'Comment') {
col.type = NoteColumn;
col.readonly = true;
}
}
grid_inspectalertdt.multiSelect = false;
grid_inspectalertdt.columns = columns;
grid_inspectalertdt.init();
}
var grid_oilalertdt;
function InitOilAlertGridData() {
grid_oilalertdt = createGridView('#oilalertslist');
var list_columns = [
{ name: 'Selected', caption: "", valueIndex: 'Selected', type: 3, css: { 'width': 45, 'text-align': 'center' } },
{ name: 'EngineHours', caption: GetTextByKey("P_WO_HOURS", "Hours"), valueIndex: 'EngineHoursObj', css: { 'width': 150, 'text-align': 'left' } },
{ name: 'AlertType', caption: GetTextByKey("P_WO_ALERTTYPE", "Alert Type"), valueIndex: 'AlertType', css: { 'width': 150, 'text-align': 'left' } },
{ name: 'Description', caption: GetTextByKey("P_WO_DESCRIPTION", "Description"), valueIndex: 'Description', css: { 'width': 480, 'text-align': 'left' } },
//{ name: 'ServiceDescription', caption: GetTextByKey("P_WO_SERVICEDESCRIPTION", "Service Description"), valueIndex: 'ServiceDescription', css: { 'width': 240, 'text-align': 'left' } },
{ name: 'AlertCount', caption: GetTextByKey("P_WO_COUNT", "Count"), valueIndex: 'AlertCount', css: { 'width': 100, 'text-align': 'left' } },
{ name: 'AlertLocalTime', caption: GetTextByKey("P_WO_LATESTDATETIME", "Latest DateTime"), valueIndex: 'AlertLocalTime', css: { 'width': 150, 'text-align': 'left' } },
{ name: 'Comment', caption: GetTextByKey("P_AM_COMMENT", "Comment"), valueIndex: 'Comment', css: { 'width': 150, '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 = true;
col.sortable = true;
col.type = list_columns[hd].type;
col.width = list_columns[hd].css.width;
col.align = list_columns[hd].css["text-align"]
col.key = list_columns[hd].valueIndex;
columns.push(col);
if (col.name === "Selected") {
col.allcheck = true;
} else if (col.name === 'Comment') {
col.type = NoteColumn;
col.readonly = true;
}
}
grid_oilalertdt.multiSelect = false;
grid_oilalertdt.columns = columns;
grid_oilalertdt.init();
}
function createNoneAssignedAlertDialog() {
var dialog = $('<div class="dialog" style="display: none;"></div>');
dialog.append('<div class="dialog-title"><span class="title" data-lgid="P_WO_ADDALERTS">Add Alerts</span><em class="dialog-close"></em></div>');
var noneassignedalertlist = $('<div id="noneassignedalertlist" style="width:820px; height: 200px;"></div>');
dialog.append($('<div class="dialog-content"></div>').append(noneassignedalertlist))
var func = $('<div class="dialog-func"></div>');
dialog.append(func);
func.append('<input type="button" value="Cancel" data-lgid="P_WO_CANCEL" class="dialog-close" tabindex="53" style="margin-right: 30px;" />');
var btnok = $('<input type="button" value="OK" data-lgid="P_WO_OK" tabindex="52" />');
btnok.on('click', function () {
OnSaveAlerts();
});
func.append(btnok);
func.append('<div class="clear"></div>');
$(document.body).append(dialog);
dialog.dialog(function () {
showmaskbg(false);
});
InitNoneAssignedAlertGridData(noneassignedalertlist);
dialog.applyFleetLanguageText(true);
return dialog;
}
var grid_noneassignedalertdt;
function InitNoneAssignedAlertGridData(pdiv) {
grid_noneassignedalertdt = createGridView(pdiv);
var list_columns = [
{ name: 'Selected', caption: "", valueIndex: 'Selected', type: 3, css: { 'width': 45, 'text-align': 'center' } },
{ name: 'EngineHours', caption: GetTextByKey("P_WO_HOURS", "Hours"), valueIndex: 'EngineHours', css: { 'width': 80, 'text-align': 'left' } },
{ name: 'AlertType', caption: GetTextByKey("P_WO_ALERTTYPE", "Alert Type"), valueIndex: 'AlertType', css: { 'width': 150, 'text-align': 'left' } },
{ name: 'Description', caption: GetTextByKey("P_WO_DESCRIPTION", "Description"), valueIndex: 'Description', css: { 'width': 200, 'text-align': 'left' } },
{ name: 'ServiceDescription', caption: GetTextByKey("P_WO_SERVICEDESCRIPTION", "Service Description"), valueIndex: 'ServiceDescription', css: { 'width': 200, 'text-align': 'left' } },
{ name: 'AlertTime', caption: GetTextByKey("P_WO_LATESTDATETIME", "Latest DateTime"), valueIndex: 'AlertLocalTime', css: { 'width': 125, '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 = true;
col.sortable = true;
col.type = list_columns[hd].type;
col.width = list_columns[hd].css.width;
col.align = list_columns[hd].css["text-align"]
col.key = list_columns[hd].valueIndex;
columns.push(col);
if (col.name === "Selected") {
col.allcheck = true;
}
}
grid_noneassignedalertdt.multiSelect = false;
grid_noneassignedalertdt.columns = columns;
grid_noneassignedalertdt.init();
}
function clearAlertData() {
_DTCAlerts = [];
_PMAAlerts = [];
_InspectAlerts = [];
_OilAlerts = [];
grid_dtcalertdt.setData([]);
grid_pmaalertdt.setData([]);
grid_inspectalertdt.setData([]);
grid_oilalertdt.setData([]);
}
var _DTCAlerts = [];
var _PMAAlerts = [];
var _InspectAlerts = [];
var _OilAlerts = [];
var inloading = false;
function getAlerts() {
alertids = [];
divdtcalerts.hide();
//divpmaalerts.hide();
divinspectalerts.hide();
divoilalerts.hide();
clearAlertData();
if (inloading)
return;
inloading = true;
if (typeof _this.option.showloading == 'function')
_this.option.showloading(true);
alertrequest("GETWORKORDERALERTS", _this.option.workorderid, function (data) {
inloading = false;
if (typeof _this.option.showloading == 'function')
_this.option.showloading(false);
if (typeof (data) === "string") {
showAlert(data, GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
if (data.WorkOrderID != _this.option.workorderid) {
getAlerts();
return;
}
data = data.Data;
showAllAlerts(data);
_this.reshowalertgrid();
//resizeContent();
}, function (err) {
inloading = false;
if (typeof _this.option.showloading == 'function')
_this.option.showloading(false);
});
}
this.getAssetAlerts = function (mid) {//widget里面不会调用这个方法
alertids = [];
divdtcalerts.hide();
//divpmaalerts.hide();
divinspectalerts.hide();
divoilalerts.hide();
clearAlertData();
if (mid)
_this.option.machineid = mid;
if (typeof _this.option.showloading == 'function')
_this.option.showloading(true);
alertrequest("GETASSETALERTS", _this.option.machineid + String.fromCharCode(170) + JSON.stringify(alertids), function (data) {
if (typeof _this.option.showloading == 'function')
_this.option.showloading(false);
if (typeof (data) === "string") {
showAlert(data, GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
if (data.MachineID != _this.option.machineid) return;
data = data.Data;
showAllAlerts(data);
}, function (err) {
if (typeof _this.option.showloading == 'function')
_this.option.showloading(false);
});
}
this.reshowalertgrid = function () {
setTimeout(function () {
$("#dtcalertslist").css("height", 240);
grid_dtcalertdt && grid_dtcalertdt.resize();
$("#pmaalertslist").css("height", 240);
grid_pmaalertdt && grid_pmaalertdt.resize();
$("#inspectalertslist").css("height", 240);
grid_inspectalertdt && grid_inspectalertdt.resize();
$("#oilalertslist").css("height", 240);
grid_oilalertdt && grid_oilalertdt.resize();
});
}
function showAlertPopup() {
showmaskbg(true);
alertpopupdialog.css({
'top': (document.documentElement.clientHeight - alertpopupdialog.height()) / 3,
'left': (document.documentElement.clientWidth - alertpopupdialog.width()) / 2
}).showDialogfixed();
grid_noneassignedalertdt && grid_noneassignedalertdt.resize();
}
function hideAlertPopup() {
alertpopupdialog.hide();
showmaskbg(false);
}
function OnAddAlerts() {
if (!_this.option.workorderid || _this.option.workorderid === "") {
showAlert(GetTextByKey("P_WO_SAVEWORKORDERFIRST", "Please save work order first."), GetTextByKey("P_WO_ADDALERTS", 'Add Alerts'));
return;
}
getNoneAssignedAlerts();
}
var noneassignedalerts = [];
function getNoneAssignedAlerts() {
if (!_this.option.machineid) {
showAlert(GetTextByKey("P_WO_PLEASESELECTANASSET", "Please select an Asset."), GetTextByKey("P_WO_SENDEMAIL", "Send Email"));
$('#dialog_machine').focus();
return;
}
worequest("GetNoneAssignedAlerts", _this.option.machineid, function (data) {
if (typeof (data) === "string") {
showAlert(data, GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
showAlertPopup();
noneassignedalerts = data;
showNoneAssienedAlerts(noneassignedalerts);
}, function (err) {
});
}
function showNoneAssienedAlerts(data) {
var rows = [];
for (var i = 0; i < data.length; i++) {
var r = data[i];
for (var j in r) {
if (j === "EngineHours")
r[j] = { DisplayValue: r[j] == 0 ? "" : r[j], Value: r[j] };
else if (j === "AlertLocalTime")
r[j] = { DisplayValue: r["AlertLocalTimeStr"], Value: r[j] };
}
rows.push(r);
}
grid_noneassignedalertdt.setData(rows);
}
function AddOrRemoveAlertsFromWorkOrder(isadd, alertids) {
worequest("AddOrRemoveAlertsFromWorkOrder", _this.option.workorderid + String.fromCharCode(170) + JSON.stringify(alertids) + String.fromCharCode(170) + isadd, function (data) {
if (isadd)
hideAlertPopup();
getAlerts();
}, function (err) {
});
}
function OnRemoveAlerts() {
var alerts = [];
alertids = [];
if (_DTCAlerts.length > 0) {
for (var i = _DTCAlerts.length - 1; i >= 0; i--) {
var alert = _DTCAlerts[i];
if (alert.Selected) {
alerts.push(alert.AlertID);
_DTCAlerts.splice(i, 1);
if (alert.RepeatedAlerts) {
for (var j = 0; j < alert.RepeatedAlerts.length; j++) {
alerts.push(alert.RepeatedAlerts[j]);
}
}
}
}
showAlerts(_DTCAlerts, grid_dtcalertdt);
}
if (_PMAAlerts.length > 0) {
for (var i = _PMAAlerts.length - 1; i >= 0; i--) {
var alert = _PMAAlerts[i];
if (alert.Selected) {
alerts.push(alert.AlertID);
_PMAAlerts.splice(i, 1);
if (alert.RepeatedAlerts) {
for (var j = 0; j < alert.RepeatedAlerts.length; j++) {
alerts.push(alert.RepeatedAlerts[j]);
}
}
}
}
showAlerts(_PMAAlerts, grid_pmaalertdt);
//grid_pmaalertdt.setData(_PMAAlerts);
}
if (_InspectAlerts.length > 0) {
for (var i = _InspectAlerts.length - 1; i >= 0; i--) {
var alert = _InspectAlerts[i];
if (alert.Selected) {
alerts.push(alert.AlertID);
_InspectAlerts.splice(i, 1);
if (alert.RepeatedAlerts) {
for (var j = 0; j < alert.RepeatedAlerts.length; j++) {
alerts.push(alert.RepeatedAlerts[j]);
}
}
}
}
showAlerts(_InspectAlerts, grid_inspectalertdt);
}
if (_OilAlerts.length > 0) {
for (var i = _OilAlerts.length - 1; i >= 0; i--) {
var alert = _OilAlerts[i];
if (alert.Selected) {
alerts.push(alert.AlertID);
_OilAlerts.splice(i, 1);
if (alert.RepeatedAlerts) {
for (var j = 0; j < alert.RepeatedAlerts.length; j++) {
alerts.push(alert.RepeatedAlerts[j]);
}
}
}
}
showAlerts(_OilAlerts, grid_oilalertdt);
}
if (alerts.length == 0) {
showAlert(GetTextByKey("P_WO_PLEASESELECTANALERT", "Please select an Alert."), GetTextByKey("P_WO_REMOVEALERTS", "Remove Alerts"));
return;
}
if (_this.option.workorderid && _this.option.workorderid !== "") {
AddOrRemoveAlertsFromWorkOrder(false, alerts);
}
}
function OnSaveAlerts() {
var alerts = [];
if (noneassignedalerts.length > 0) {
for (var i in noneassignedalerts) {
var alert = noneassignedalerts[i];
if (alert.Selected) {
alerts.push(alert.ID);
}
}
}
if (alerts.length == 0) {
showAlert(GetTextByKey("P_WO_PLEASESELECTANALERT", "Please select an Alert."), GetTextByKey("P_WO_ADDALERTS", "Add Alerts"));
return;
}
AddOrRemoveAlertsFromWorkOrder(true, alerts);
}
//**********************************Add PM Alerts (Alerts not yet triggered)***********************************************/
function createAllPMSchedulesDialog() {
var dialog = $('<div class="dialog" style="display: none;"></div>');
dialog.append('<div class="dialog-title"><span class="title" data-lgid="P_WO_SELECTPLANFORALERT">Select Plan for Alert</span><em class="dialog-close"></em></div>');
var allpmpmalertslist = $('<div id="allpmpmalertslist" style="width: 420px; height: 200px;"></div>');
dialog.append($('<div class="dialog-content"></div>').append(allpmpmalertslist))
var func = $('<div class="dialog-func"></div>');
dialog.append(func);
func.append('<input type="button" value="Cancel" data-lgid="P_WO_CANCEL" class="dialog-close" tabindex="53" style="margin-right: 30px;" />');
var btnok = $('<input type="button" value="OK" data-lgid="P_WO_OK" tabindex="52" />');
btnok.on('click', function () {
GenerateManualPMAlerts();
});
func.append(btnok);
func.append('<div class="clear"></div>');
$(document.body).append(dialog);
dialog.dialog(function () {
showmaskbg(false);
});
InitAllPMSchedulesGridData(allpmpmalertslist);
dialog.applyFleetLanguageText(true);
return dialog;
}
function showAllPMSchedules(data) {
grid_pmschedulesdt.setData(data);
}
var grid_pmschedulesdt;
function InitAllPMSchedulesGridData(pdiv) {
grid_pmschedulesdt = createGridView(pdiv);
var list_columns = [
{ name: 'Selected', caption: "", valueIndex: 'Selected', type: 3, css: { 'width': 45, 'text-align': 'center' } },
{ name: 'Name', caption: GetTextByKey("P_MV_SCHEDULENAME", "Schedule Name"), valueIndex: 'Name', css: { 'width': 300, '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 = true;
col.sortable = true;
col.type = list_columns[hd].type;
col.width = list_columns[hd].css.width;
col.align = list_columns[hd].css["text-align"]
col.key = list_columns[hd].valueIndex;
columns.push(col);
if (col.name === "Selected") {
col.allcheck = true;
}
}
grid_pmschedulesdt.multiSelect = false;
grid_pmschedulesdt.columns = columns;
grid_pmschedulesdt.init();
}
function showAllPMSchedulePopup() {
showmaskbg(true);
allpmschedulepopupdialog.css({
'top': (document.documentElement.clientHeight - allpmschedulepopupdialog.height()) / 3,
'left': (document.documentElement.clientWidth - allpmschedulepopupdialog.width()) / 2
}).showDialogfixed();
grid_pmschedulesdt && grid_pmschedulesdt.resize();
}
function hideAllPMSchedulePopup() {
allpmschedulepopupdialog.hide();
showmaskbg(false);
}
function OnAddAllPMSchedules() {
if (!_this.option.workorderid || _this.option.workorderid === "") {
showAlert(GetTextByKey("P_WO_SAVEWORKORDERFIRST", "Please save work order first."), GetTextByKey("P_WO_ADDALERTS", 'Add Alerts'));
return;
}
GetPMSchedulesByAsset();
}
var allpmschedules = [];
function GetPMSchedulesByAsset() {
if (!_this.option.machineid) {
showAlert(GetTextByKey("P_WO_PLEASESELECTANASSET", "Please select an Asset."), GetTextByKey("P_WO_SENDEMAIL", "Send Email"));
$('#dialog_machine').focus();
return;
}
showAllPMSchedulePopup();
worequest("GetPMSchedulesByAsset", _this.option.machineid, function (data) {
if (typeof (data) === "string") {
showAlert(data, GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
allpmschedules = data;
showAllPMSchedules(allpmschedules);
}, function (err) {
});
}
function GenerateManualPMAlerts() {
var schids = [];
if (allpmschedules.length > 0) {
for (var i in allpmschedules) {
var pmsch = allpmschedules[i];
if (pmsch.Selected) {
schids.push(pmsch.Id);
}
}
}
if (schids.length == 0) {
showAlert(GetTextByKey("P_WO_PLEASESELECTAPLAN", "Please select a plan."), GetTextByKey("P_WO_ADDALERTS", "Add Alerts"));
return;
}
if (!_this.option.machineid) {
showAlert(GetTextByKey("P_WO_PLEASESELECTANASSET", "Please select an Asset."), GetTextByKey("P_WO_SENDEMAIL", "Send Email"));
$('#dialog_machine').focus();
return;
}
worequest("GenerateManualPMAlerts", JSON.stringify([_this.option.machineid, _this.option.workorderid, JSON.stringify(schids)])
, function (data) {
if (typeof (data) === "string") {
showAlert(data, GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
else {
var msg = "";
for (var i = 0; i < data.length; i++) {
var r = data[i];
if (r.Status == -1)
msg += GetTextByKey("P_WO_FAILEDTOGENERATEALERT", "Failed to generate alert.") + " (" + r.ScheduleName + ")\r\n";
else if (r.Status == 1)
msg += GetTextByKey("P_WO_FAILEDTOGENERATEALERT1", "Unable to generate alert because there already exists an unmaintained alert.") + " (" + r.ScheduleName + ")\r\n";
else if (r.Status == 2) {
if (r.UOM == "hour(s)")
msg += GetTextByKey("P_WO_FAILEDTOGENERATEALERT2", "Unable to generate alert until Hour Meter is higher than ") + r.NextTargetValue.toLocaleString() + " " + r.UOM + " (" + r.ScheduleName + ")\r\n";
else if (r.UOM == "day(s)")
msg += GetTextByKey("P_WO_FAILEDTOGENERATEALERT3", "Unable to generate alert until {0} later {1}").replace('{0}', r.NextTargetValue.toLocaleString() + " " + r.UOM).replace('{1}', " (" + r.ScheduleName + ")\r\n");
else
msg += GetTextByKey("P_WO_FAILEDTOGENERATEALERT4", "Unable to generate alert until odometer is higher than ") + r.NextTargetValue.toLocaleString() + " " + r.UOM + " (" + r.ScheduleName + ")\r\n";
}
}
if (msg !== "")
showAlert(msg, GetTextByKey("P_WO_ERROR", 'Error'));
}
hideAllPMSchedulePopup();
getAlerts();
}, function (err) {
});
}
function resizeContent() {
grid_dtcalertdt && grid_dtcalertdt.resize();
grid_pmaalertdt && grid_pmaalertdt.resize();
grid_inspectalertdt && grid_inspectalertdt.resize();
grid_oilalertdt && grid_oilalertdt.resize();
grid_noneassignedalertdt && grid_noneassignedalertdt.resize();
grid_pmschedulesdt && grid_pmschedulesdt.resize();
}
window.onresize = resizeContent;
resizeContent();
}
}
/*****************************************End Alert*********************************************/
/*****************************************Begin Attachment*********************************************/
if (typeof ($woattachment) !== "function") {
$woattachment = function (option) {
this.option = option || {};
var _this = this;
var allAttachments;
var viewtype = 0;
var div_attlarge;
var div_woatts;
var div_aatts;
var div_iatts;
var div_attlist;
var woattslist_tbody;
var woassetattslist_tbody;
var woiptattslist_tbody;
var panddlist;
var btn_print;
var btn_download;
var btn_ok;
var attupload_ul;
var cur_wo_uploaddata;
viewtype = getCookie("woattachmentviewtype");
this.refresh = function () {
getWorkOrderAttachments(true);
}
this.changewo = function (woid, aid) {
//if (woid !== option.workorderid) {
var keepui = allAttachments && this.option.workorderid === woid && this.option.machineid === aid;
this.option.workorderid = woid;
if (aid)
this.option.machineid = aid;
//hideWOAttachmentPopup();
//hidePAndDAttachmentPopup();
getWorkOrderAttachments(keepui);
//}
}
this.close = function () {
dialog_panddattachments?.remove();
woattachmentDialog?.remove();
wosendattachmentDialog?.remove();
}
this.updatecontact = function (contacts) {
this.option.customercontacts = contacts
if (this.option.customercontacts) {
var names = "";
for (var i = 0; i < this.option.customercontacts.length; i++) {
var c = this.option.customercontacts[i];
if (c.OptOut || c.OptOut_BC) continue;
var mp = $.trim(c.MobilePhone);
var email = $.trim(c.Email);
if ((c.ContactPreference == "0" && (checkPhoneNumber(mp))
|| (c.ContactPreference == "1" && isEmail(email)))) {
if (names == "")
names = c.Name;
else
names += ";" + c.Name;
}
}
$('#dialog_atta_phonenum').val(names);
}
else {
$('#dialog_atta_phonenum').val('');
}
}
this.createAttachment = function (p_div) {
var div_ftitle = $('<div class="function_title" style="min-width:470px; white-space:nowrap"></div>');
p_div.append(div_ftitle);
var span_add = $('<span class="sbutton iconadd" data-lgid="P_WO_ADDFILE">Add File</span>');
span_add.click(UpLoadWorkOrderAttachment);//openWOAttachmentDialog
div_ftitle.append(span_add);
if (this.option.canExport) {
var span_print = $('<span class="sbutton iconprint" data-lgid="P_WO_PRINT">Print</span>');
span_print.click(function () { openPAndDGDialog(0) });
div_ftitle.append(span_print);
var span_down = $('<span class="sbutton icondownload" data-lgid="P_WO_DOWNLOAD">Download</span>');
span_down.click(function () { openPAndDGDialog(1) });
div_ftitle.append(span_down);
}
if (AllowCustomer) {
var span_access = $('<span class="sbutton iconaccess" data-lgid="P_WO_CUSTOMERACCESS">Customer Access</span>');
span_access.click(function () { openPAndDGDialog(2) });
div_ftitle.append(span_access);
}
var div_view = $('<div style="display:inline-block;position: relative;"></div>');
div_ftitle.append(div_view);
var span_view = $('<span class="sbutton iconviewatt" data-lgid="P_WO_VIEW">View</span>');
div_view.append(span_view);
span_view.click(function (ev) {
if ($('.panel_holder.attviewtypemenus').is(':visible')) {
return;
}
hidePanels();
var left = $(this).offset().left;
var top = $(this).offset().top;
$('.panel_holder.attviewtypemenus').css({
'opacity': 0,
'left': -35,
'right': 'auto',
'top': 27
}).show().animate({ 'opacity': 1 }, 100);
$('.panel_holder.attviewtypemenus .trigledown').css({
'left': 50,
'right': 'auto',
'top': -20
});
return false;
});
//View Menu
var div_viewmenu = $('<div class="panel_holder attviewtypemenus"></div>');
div_view.append(div_viewmenu);
var attviewtypemenu_panel = $('<div class="panel" style="min-width: 150px; background-color: white;"></div>');
div_viewmenu.append(attviewtypemenu_panel);
var viewmenu_ul = $('<ul class="lefttitlemenu_ul" style="line-height: 32px;"></ul>')
attviewtypemenu_panel.append(viewmenu_ul);
var viewlarge_li = $('<li><a style="padding-left: 0;"><span class="sbutton iconlarge" data-lgid="P_WO_LARGE">Large</span></a></li>');
viewlarge_li.click(function () { onViewAttachment(0); });
viewmenu_ul.append(viewlarge_li);
var viewlist_li = $('<li> <a style="padding-left: 0;"><span class="sbutton iconlist" data-lgid="P_WO_LIST">List</span></a></li>');
viewlist_li.click(function () { onViewAttachment(1); });
viewmenu_ul.append(viewlist_li);
attviewtypemenu_panel.append('<div class="trigledown"></div>');
attviewtypemenu_panel.append('<div class="trigledown white"></div>');
//Large
div_attlarge = $('<div></div>');
p_div.append(div_attlarge);
//WO Attachments Large
var tb_woattlarge = $('<table class="main_table maintenance" ></table>');
tb_woattlarge.on('drop', function (ev) {
dropWOAttachment(ev.originalEvent);
}).on('dragover', function (ev) {
dragOverWOAttachment(ev.originalEvent);
}).on('paste', function (ev) {
cutWOAttachment(ev.originalEvent);
});
div_attlarge.append(tb_woattlarge);
tb_woattlarge.append('<tr style="line-height: 35px;"><td class="subtitle"><span class="sbutton iconchevrondown woattafoldicon" target="woaatts_tr" onclick="OnExpendInTab(this)" style="margin-left: 0; padding-right: 5px;"></span><span data-lgid="P_WO_WORKORDERATTACHMENTS">Work Order Attachments</span></td></tr>');
var tr = $('<tr id="woaatts_tr" class="tr_intervals woattafoldtr"></tr>').appendTo(tb_woattlarge);
var td = $('<td></td>').appendTo(tr);
div_woatts = $('<div style="min-height: 80px; overflow: auto; padding-left: 20px;"></div>').appendTo(td);
//Asset Attachments Large
var tb_assetattlarge = $('<table class="main_table maintenance"></table>');
div_attlarge.append(tb_assetattlarge);
tb_assetattlarge.append('<tr style="line-height: 35px;"><td class="subtitle"><span class="sbutton iconchevrondown woattafoldicon" target="woassetatts_tr" onclick="OnExpendInTab(this)" style="margin-left: 0; padding-right: 5px;"></span><span data-lgid="P_WO_ASSETATTACHMENTS">Asset Attachments</span></td></tr>');
var tr = $('<tr id="woassetatts_tr" class="tr_intervals woattafoldtr"></tr>').appendTo(tb_assetattlarge);
var td = $('<td></td>').appendTo(tr);
div_aatts = $('<div style="min-height: 80px; overflow: auto; padding-left: 20px;"></div>').appendTo(td)
//Inspection Attachments Large
var tb_ispattlarge = $('<table class="main_table maintenance"></table>');
div_attlarge.append(tb_ispattlarge);
tb_ispattlarge.append('<tr style="line-height: 35px;"><td class="subtitle"><span class="sbutton iconchevrondown woattafoldicon" target="woiptatts_tr" onclick="OnExpendInTab(this)" style="margin-left: 0; padding-right: 5px;"></span><span data-lgid="P_WO_INSPECTIONATTACHMENTS">Inspection Attachments</span></td></tr>');
var tr = $('<tr id="woiptatts_tr" class="tr_intervals woattafoldtr"></tr>').appendTo(tb_ispattlarge);
var td = $('<td></td>').appendTo(tr);
div_iatts = $('<div style="min-height: 80px; overflow: auto; padding-left: 20px;"></div>').appendTo(td);
//List
div_attlist = $('<div style="display: none;"></div>');
p_div.append(div_attlist);
//WO Attachments List
var tb_wolist = $('<table class="main_table maintenance"></table>');
tb_wolist.on('drop', function (ev) {
dropWOAttachment(ev.originalEvent);
}).on('dragover', function (ev) {
dragOverWOAttachment(ev.originalEvent);
}).on('paste', function (ev) {
cutWOAttachment(ev.originalEvent);
});
div_attlist.append(tb_wolist);
var tr_wolist = $('<tr style="line-height: 35px;"></tr>');
tb_wolist.append(tr_wolist);
var td_wolist = $('<td class="subtitle"></td>');
tr_wolist.append(td_wolist);
var div_wolist = $('<div style="display:flex;align-items:center;max-width:835px"></div>');
td_wolist.append(div_wolist);
div_wolist.append('<span class="sbutton iconchevrondown woattafoldicon" target="woattslist_tr" onclick="OnExpendInTab(this)" style="margin-left: 0; padding-right: 5px;"></span>');
div_wolist.append('<span data-lgid="P_WO_WORKORDERATTACHMENTS" style="flex:1 1 auto">Work Order Attachments</span>');
if (AllowCustomer)
div_wolist.append('<span data-lgid="P_WO_AVAILABLETOCUSTOMER" style="width: 240px; color: #333; font-size: 13px">Available to Customer</span>');
else
div_wolist.append('<span style="width: 240px; color: #333; font-size: 13px"></span>');
div_wolist.append('<lable class="lable_attuploadname" style="margin-left: 200px;"></lable>');
tr_wolist = $('<tr id="woattslist_tr" class="tr_intervals woattafoldtr"></tr>');
tb_wolist.append(tr_wolist);
td_wolist = $('<td></td>');
tr_wolist.append(td_wolist);
var tab_woattslist = $('<table class="table_intervals"></table>');
td_wolist.append(tab_woattslist);
woattslist_tbody = $('<tbody></tbody>').appendTo(tab_woattslist);
//Asset Attachments List
var tb_assetlist = $('<table class="main_table maintenance"></table>');
div_attlist.append(tb_assetlist);
var tr_assetlist = $('<tr style="line-height: 35px;"></tr>');
tb_assetlist.append(tr_assetlist);
var td_assetlist = $('<td class="subtitle"></td>');
tr_assetlist.append(td_assetlist);
td_assetlist.append('<span class="sbutton iconchevrondown woattafoldicon" target="woassetattslist_tr" onclick="OnExpendInTab(this)" style="margin-left: 0; padding-right: 5px;"></span>');
td_assetlist.append('<span data-lgid="P_WO_ASSETATTACHMENTS">Asset Attachments</span>');
tr_assetlist = $('<tr id="woassetattslist_tr" class="tr_intervals woattafoldtr"></tr>');
tb_assetlist.append(tr_assetlist);
td_assetlist = $('<td></td>');
tr_assetlist.append(td_assetlist);
var tab_assetattslist = $('<table class="table_intervals"></table>');
td_assetlist.append(tab_assetattslist);
woassetattslist_tbody = $('<tbody></tbody>').appendTo(tab_assetattslist);
//Inspection Attachments List
var tb_isplist = $('<table class="main_table maintenance"></table>');
div_attlist.append(tb_isplist);
var tr_isplist = $('<tr style="line-height: 35px;"></tr>');
tb_isplist.append(tr_isplist);
var td_isplist = $('<td class="subtitle"></td>');
tr_isplist.append(td_isplist);
td_isplist.append('<span class="sbutton iconchevrondown woattafoldicon" target="woiptattslist_tr" onclick="OnExpendInTab(this)" style="margin-left: 0; padding-right: 5px;"></span>');
td_isplist.append('<span data-lgid="P_WO_INSPECTIONATTACHMENTS">Inspection Attachments</span>');
tr_isplist = $('<tr id="woiptattslist_tr" class="tr_intervals woattafoldtr"></tr>');
tb_isplist.append(tr_isplist);
tb_isplist = $('<td></td>');
tr_isplist.append(tb_isplist);
var tab_ispattslist = $('<table class="table_intervals"></table>');
tb_isplist.append(tab_ispattslist);
woiptattslist_tbody = $('<tbody></tbody>').appendTo(tab_ispattslist);
var div_attuoloadmsgmenus = $('<div class="panel_holder attuoloadmsgmenus"></div>')
p_div.append(div_attuoloadmsgmenus);
var attuplodmsg_panel = $('<div class="panel" style="min-width: 150px; background-color: white; max-width: 480px; max-height: 400px;"></div>');
div_attuoloadmsgmenus.append(attuplodmsg_panel);
attupload_ul = $('<ul class="lefttitlemenu_ul"></ul>');
attuplodmsg_panel.append(attupload_ul);
attuplodmsg_panel.append('<div class="trigledown"></div>');
attuplodmsg_panel.append('<div class="trigledown white"></div>');
p_div.applyFleetLanguageText(true);
}
this.createAttachment(this.option.parent);
var dialog_panddattachments = createPAndDAttachmentDialog();
var woattachmentDialog = createWOAttachmentDialog();
var wosendattachmentDialog = createSendAttachmentDialog();
function createWOAttachmentDialog() {
var dialog = $('<div class="dialog" style="display: none;"></div>');
dialog.append('<div class="dialog-title"><span class="title" data-lgid="P_WO_ADDATTACHMENT">Add Attachment</span><em class="dialog-close"></em></div>');
var tb = $('<table style="line-height: 30px; margin-left: 10px; margin-right: 10px;"></table>');
dialog.append($('<div class="dialog-content"></div>').append(tb));
var tr = $('<tr></tr>').appendTo(tb);
var td = $('<td class="label" style="width: unset;"><span data-lgid="P_WO_CAPTION_COLON">Caption:</span></td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_wo_att_notes = $('<input type="text" id="dialog_wo_att_notes" maxlength="200" tabindex="1" autocomplete="off" />').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" data-lgid="P_WO_ATTACHMENTS_COLON" style="vertical-align: top; width: unset;">Attachments:</td>').appendTo(tr);
td = $('<td class="cont"></td>').appendTo(tr);
var dialog_wo_att_uploadattfile = $('<input id="dialog_wo_att_uploadattfile" type="button" value="Add File..." data-lgid="P_FR_ADDFILE" tabindex="1" style="background-color: #0099FF; color: #FFFFFF; height: 20px; width: 200px;" />').appendTo(td);
dialog_wo_att_uploadattfile.on('click', function () {
UpLoadWOAttachment();
});
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label"></td>').appendTo(tr);
td = $('<td colspan="3"></td>').appendTo(tr);
var tb_att = $('<table id="tab_wo_attachments" style="border: 1px solid #a8a8a8; line-height: 25px; width: 320px; display: none;"></table>');
td.append(tb_att);
var tr_att = $('<tr></tr>');
tb_att.append(tr_att);
var td_att = $('<td></td>');
tr_att.append(td_att);
div_att = $('<div style="max-height: 80px; overflow: auto;padding: 0 4px;"></div>');
td_att.append(div_att);
tb_att = $('<table id="tab_wo_atts" style="table-layout: fixed;"></table>');
div_att.append(tb_att);
var func = $('<div class="dialog-func"></div>');
dialog.append(func);
func.append('<input type="button" value="Cancel" data-lgid="P_WO_CANCEL" class="dialog-close" tabindex="11" />');
var btn_wo_att_save = $('<input type="button" value="Save" data-lgid="P_WO_SAVE" tabindex="11" />');
btn_wo_att_save.on('click', function () {
onSaveWONewAttachment();
});
func.append(btn_wo_att_save);
func.append('<div class="clear"></div>');
dialog.append('<div class="maskbg" style="display: none;"></div>');
$(document.body).append(dialog);
dialog.dialog(function () {
hideWOAttachmentPopup();
});
dialog.applyFleetLanguageText(true);
return dialog;
}
function openWOAttachmentDialog() {//上传附件时弹出输入Caption的功能取消,还原为批量上传,代码暂时保留
showmaskbg(true);
$('#btn_wo_att_save').attr('disabled', false);
$('#tab_wo_atts').empty();
$('#tab_wo_attachments').hide();
$('#dialog_wo_att_notes').val('');
woattachmentDialog.css({
'top': (document.documentElement.clientHeight - woattachmentDialog.height()) / 3,
'left': (document.documentElement.clientWidth - woattachmentDialog.width()) / 2
}).showDialogfixed();
}
function hideWOAttachmentPopup() {
showmaskbg(false);
woattachmentDialog.hide();
}
function hidePAndDAttachmentPopup() {
showmaskbg(false);
dialog_panddattachments.hideDialog();
}
function hideSendWOAttachmentPopup() {
showmaskbg(false);
wosendattachmentDialog.hide();
}
function openSendAttachmentPopup(atta) {
showmaskbg(true);
$('#dialog_atta_textmsg').val("");
var attname = atta ? (atta.Notes === "" ? atta.FileName : atta.Notes) : "";
$('#dialog_atta_sendattaname').text(attname).attr('title', attname);
wosendattachmentDialog.data('atta', atta);
wosendattachmentDialog.css({
'top': (document.documentElement.clientHeight - wosendattachmentDialog.height()) / 3,
'left': (document.documentElement.clientWidth - wosendattachmentDialog.width()) / 2
}).showDialogfixed();
}
function createSendAttachmentDialog() {
var dialog = $('<div class="dialog" style="display: none;"></div>');
dialog.append('<div class="dialog-title"><span class="title" data-lgid="P_WO_SENDATTACHMENTS">Send Attachments</span><em class="dialog-close"></em></div>');
var tb = $('<table style="line-height: 30px; margin-left: 10px; margin-right: 10px;"></table>');
dialog.append($('<div class="dialog-content"></div>').append(tb));
var tr = $('<tr></tr>').appendTo(tb);
var td = $('<td></td>').appendTo(tr);
$('<div style="font-size: 20px; margin-right: 5px; float: right;"><em class="spanbtn iconmobile" style="font-weight: 900; font-size: 14px; cursor: default; padding-left: 0; padding-right: 3px; padding-top: 0;"></em></div>').appendTo(td);
td = $('<td style="width:350px;"></td>').appendTo(tr);
var dialog_atta_phonenum = $('<input type="text" id="dialog_atta_phonenum" tabindex="1" autocomplete="off" maxlength="100" style="width: 320px;" />').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td style="text-align: right;"></td>').appendTo(tr);
var dialog_atta_chkIncludeStatusLink = $('<input id="dialog_atta_chkIncludeStatusLink" type="checkbox" checked="checked" style="width: unset;" />').appendTo(td);
td = $('<td></td>').appendTo(tr);
$('<label for="dialog_atta_chkIncludeStatusLink" data-lgid="P_WO_INCLUDESTATUSLINK" style="user-select: none;">Include Status Link</label>').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td class="label" style="width: unset;"><span data-lgid="P_WO_MESSAGE_COLON">Message:</span></td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_atta_variables = $('<select id="dialog_atta_variables" style="width: 156px;"></select>').appendTo(td);
dialog_atta_variables.append('<option value="0">[Site_Name]</option>');
dialog_atta_variables.append('<option value="1">[Location]</option>');
dialog_atta_variables.append('<option value="14">[Asset]</option>');
dialog_atta_variables.append('<option value="4">[VIN]</option>');
dialog_atta_variables.append('<option value="2">[Make]</option>');
dialog_atta_variables.append('<option value="3">[Model]</option>');
dialog_atta_variables.append('<option value="5">[Id_Phone]</option>');
dialog_atta_variables.append('<option value="6">[Advisor]</option>');
dialog_atta_variables.append('<option value="7">[Company_Name]</option>');
dialog_atta_variables.append('<option value="8">[Contact_Name]</option>');
dialog_atta_variables.append('<option value="9">[Contact_First_Name]</option>');
dialog_atta_variables.append('<option value="10">[Status_Link]</option>');
dialog_atta_variables.append('<option value="11">[Technician_Name]</option>');
dialog_atta_variables.append('<option value="12">[Work_Order_Number]</option>');
dialog_atta_variables.append('<option value="13">[Parts_Order_Number]</option>');
var dialog_atta_insertfield = $('<input type="button" id="dialog_atta_insertfield" data-lgid="P_WO_ADD" value="Add" style="width: auto; height: auto; margin-left: 5px;" tabindex="1" /><br />').appendTo(td);
dialog_atta_insertfield.on('click', function () {
insertattafield();
});
var dialog_atta_textmsg = $('<textarea id="dialog_atta_textmsg" tabindex="1" style="width: 320px; height: 120px; margin-top: 6px;" maxlength="2000"></textarea>').appendTo(td);
tr = $('<tr></tr>').appendTo(tb);
td = $('<td><div style="font-size: 20px; margin-right: 5px; float: right;"><em class="spanbtn iconlink" style="font-weight: 900; font-size: 14px; cursor: default; padding-left: 0; padding-right: 3px; padding-top: 0;"></em></div></td>').appendTo(tr);
td = $('<td></td>').appendTo(tr);
var dialog_atta_sendattaname = $('<span id="dialog_atta_sendattaname" class="selector-name" style="width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: pre;display:block;"></span>').appendTo(td);
var func = $('<div class="dialog-func"></div>');
dialog.append(func);
func.append('<input type="button" value="Cancel" data-lgid="P_WO_CANCEL" class="dialog-close" tabindex="11" />');
var btn_send = $('<input type="button" value="Send" data-lgid="P_WO_SEND" tabindex="1" />');
btn_send.on('click', function () {
var phoneemail = $('#dialog_atta_phonenum').val();
SendAttachmentMsg(phoneemail);
});
func.append(btn_send);
func.append('<div class="clear"></div>');
dialog.append('<div class="maskbg" style="display: none;"></div>');
$(document.body).append(dialog);
dialog.dialog(function () {
hideSendWOAttachmentPopup();
});
dialog.applyFleetLanguageText(true);
return dialog;
}
function insertattafield() {
var field = $("#dialog_atta_variables").find("option:selected").text();
$("#dialog_atta_textmsg").focus();
document.execCommand('insertText', false, field);
}
function UpLoadWOAttachment() {
var file = $('<input type="file" style="display: none;" />');
file.change(function () {
var files = this.files;
if (files.length == 0)
return;
if (files[0].size == 0) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS", "Attachment size is 0kb, uploading failed."));
return false;
}
if (files[0].size > 50 * 1024 * 1024) {
alert(GetTextByKey("P_WO_ATTACHMENTSTIPS1", "Attachment is too large. Maximum file size is 50 MB."));
return false;
}
var notes = $('#dialog_wo_att_notes').val();
cur_wo_uploaddata = files[0];// { 'File': files[0], 'Notes': notes };
cur_wo_uploaddata.Notes = notes
createNewWOAttachment(cur_wo_uploaddata);
}).click();
}
function createNewWOAttachment(data) {
$('#tab_wo_atts').empty();
$('#tab_wo_attachments').show();
var tr = $('<tr></tr>');
var tdfile = $('<td></td>');
var filename = $("<label class='attalabel'></label>").text(data.Notes === "" ? data.name : data.Notes);
tdfile.append(filename);
var tdimg = $('<td style="width:18px;border:none;text-align:center;"></td>');
var imgDom = $('<span class="sbutton icondelete" style="padding:0;" ></span>').click(function () {
this.parentElement.parentElement.remove();
cur_wo_uploaddata = null;
$('#tab_wo_attachments').hide();
});
tdimg.append(imgDom);
tr.append(tdimg);
tr.append(tdfile).appendTo($('#tab_wo_atts'));
}
function onSaveWONewAttachment() {
if (!cur_wo_uploaddata)
return;
$('#btn_wo_att_save').attr('disabled', true);
var notes = $('#dialog_wo_att_notes').val();
cur_wo_uploaddata.Notes = notes;
hideWOAttachmentPopup();
onSaveWOAttachment([cur_wo_uploaddata]);
cur_wo_uploaddata = null;
}
function createPAndDAttachmentDialog() {
var dialog = $('<div class="dialog" style="display: none;"></div>');
dialog.append('<div class="dialog-title"><span class="title" data-lgid="P_WO_ATTACHMENTS">Attachments</span><em class="dialog-close"></em></div>');
panddlist = $('<div style="height: 320px; width:420px;"></div>');
dialog.append($('<div class="dialog-content"></div>').append(panddlist));
var func = $('<div class="dialog-func"></div>');
dialog.append(func);
func.append('<input type="button" value="Cancel" data-lgid="P_WO_CANCEL" class="dialog-close" tabindex="1" style="height: unset;" />');
btn_print = $('<input type="button" value="Print" data-lgid="P_WO_PRINT" tabindex="1" />');
btn_print.on('click', function () {
printWOAttachments();
});
func.append(btn_print);
btn_download = $('<input type="button" value="Download" data-lgid="P_WO_DOWNLOAD" tabindex="1" />');
btn_download.on('click', function () {
downloadWOAttachments();
});
func.append(btn_download);
btn_ok = $('<input type="button" value="OK" data-lgid="P_WO_OK" tabindex="1" />');
btn_ok.on('click', function () {
updateWOAttachmentExtensionBatch();
});
func.append(btn_ok);
func.append('<div class="clear"></div>');
dialog.append('<div class="maskbg" style="display: none;"></div>');
$(document.body).append(dialog);
dialog.dialog(function () {
showmaskbg(false);
});
dialog.applyFleetLanguageText(true);
return dialog;
}
function UpLoadWorkOrderAttachment() {
var file = $('<input type="file" style="display: none;" multiple="multiple" />');
file.change(function () {
var files = this.files;
if (files.length > 0) {
onSaveWOAttachment(files);
}
}).click();
}
var filesinuploading = [];
var uploadingindex = -1;
var fileupload_errors = "";
function onSaveWOAttachment(files) {
fileupload_errors = "";
if (!_this.option.workorderid) {
OnSave(0, function (item) {
_this.option.workorderid = item.Id;
showLoading(true);
$('.span_attupload').show();
$('.span_vieuploadmsg').css('margin-left', 0);
$('.span_vieuploadmsg').show();
if (filesinuploading.length > 0) {
for (var i = 0; i < files.length; i++)
filesinuploading.push(_this.option.workorderid, files[i]);
showUploadingStatus(0);
}
else {
filesinuploading = files;
DoUploadWorkOrderAttachments(_this.option.workorderid);
}
});
}
else {
showLoading(true);
$('.span_attupload').show();
$('.span_vieuploadmsg').css('margin-left', 0);
$('.span_vieuploadmsg').show();
if (filesinuploading.length > 0) {
for (var i = 0; i < files.length; i++)
filesinuploading.push(files[i]);
showUploadingStatus(0);
}
else {
filesinuploading = files;
DoUploadWorkOrderAttachments(_this.option.workorderid);
}
}
}
function DoUploadWorkOrderAttachments(woid) {
if (woid != _this.option.workorderid) {
filesinuploading = [];
uploadingindex = -1;
return;
}
uploadingindex++;
if (uploadingindex >= filesinuploading.length) {
uploadingindex--;
showUploadingStatus(3);
filesinuploading = [];
uploadingindex = -1;
$('.span_attupload').hide();
$('.span_vieuploadmsg').css('margin-left', 200);
getWorkOrderAttachments(true);
hideLoading();
if (fileupload_errors !== "")
showAlert(fileupload_errors, GetTextByKey("P_WO_UPLOADFAILED", 'Upload failed'));
return;
}
var file = filesinuploading[uploadingindex];
if (file.name.length > 200) {
showUploadingStatus(2, GetTextByKey("P_WO_ATTACHMENTNAMELENGTHCANNOTBEGREATERTHAN", "Attachment name length cannot be greater than 200."));
DoUploadWorkOrderAttachments(woid);
return;
}
if (file.size == 0) {
showUploadingStatus(2, GetTextByKey("P_WO_ATTACHMENTSTIPS", "Attachment size is 0kb, uploading failed."));
DoUploadWorkOrderAttachments(woid);
return;
}
if (file.size > 50 * 1024 * 1024) {
showUploadingStatus(2, GetTextByKey("P_WO_ATTACHMENTSTIPS1", "Attachment is too large. Maximum file size is 50 MB."));
DoUploadWorkOrderAttachments(woid);
return;
}
showUploadingStatus(0);
var top = $(window).height() / 2 - 100;
var left = $(window).width() / 2 - 100;
var width = $('#dialogattmask .lable_attuploadname').width();
$('#dialogattmask .loading_icon').css({ top: top, left: left });
$('#dialogattmask .lable_attuploadname').css({ top: top + 70, left: ($(window).width() - width - 100) / 2 });
var p = JSON.stringify([woid, file.Notes]);
var formData = new FormData();
formData.append("iconFile", file);
formData.append("MethodName", "AddAttachment");
formData.append("ClientData", p);
var url = 'AddWorkOrder.aspx';
$.ajax({
url: url,
type: 'POST',
dataType: 'json',
processData: false,
contentType: false,
data: formData,
async: true,
success: function (data) {
if (data !== 'OK') {
showAlert(GetTextByKey("P_WO_UPLOADFAILED", 'Upload failed'), GetTextByKey("P_WO_ATTACHMENTFILE", 'Attachment File'));
}
showUploadingStatus(1);
DoUploadWorkOrderAttachments(woid);
},
error: function (err) {
showUploadingStatus(2, GetTextByKey("P_WO_UPLOADFAILED", 'Upload failed'));
DoUploadWorkOrderAttachments(woid);
}
});
}
function showUploadingStatus(status, msg) {
if (filesinuploading.length == 0) return;
var filename = filesinuploading[uploadingindex].name;
if (filename.length > 50)
filename = filename.substring(0, 49) + "...";
var statustxt = "";
if (status == 0) {
statustxt = "Uploading " + filename + " (" + (uploadingindex + 1) + "/" + filesinuploading.length + ")";
$('.lable_attuploadname').text(statustxt);
}
else if (status == 1) {
statustxt = filename;
attupload_ul.append('<li style="padding-left: 0;height:unset;line-height:24px;"><span class="sbutton iconattsuc">' + statustxt + '</span></li>');
}
else if (status == 2) {
statustxt = filename + " - " + msg;
attupload_ul.append('<li style="padding-left: 0;height:unset;line-height:24px;"><span class="sbutton iconatterror">' + statustxt + '</span></li>');
if (fileupload_errors === "")
fileupload_errors = statustxt;
else
fileupload_errors = fileupload_errors + " \n " + statustxt;
}
else if (status == 3) {
statustxt = "Upload Completed";
statustxt = "";
$('.lable_attuploadname').text(statustxt);
}
}
function deleteAttachment(attID, target) {
if (confirm(GetTextByKey("P_WO_DELETEATTACHMENTTIPS", "Are you sure you want to delete the attachment?"))) {
worequest("DeleteAttachment", attID, function (data) {
if (data !== 'OK') {
showAlert(data, GetTextByKey("P_WO_DELETEATTACHMENT", 'Delete Attachment'));
}
else {
target.parent().parent().remove();
//getWorkOrderAttachments();
}
}, function (err) {
showAlert(GetTextByKey("P_WO_FAILEDDELETEATTACHMENT", 'Failed to delete this attachment.'), GetTextByKey("P_WO_DELETEATTACHMENT", 'Delete Attachment'));
});
}
}
function onViewAttachment(type) {
viewtype = type;
if (typeof setCookie === "function")
setCookie("woattachmentviewtype", viewtype);
$(".woattafoldicon").removeClass("iconchevronright").addClass("iconchevrondown");
$(".woattafoldtr").show();
showWOAttachments();
}
function showWOAttachments() {
if (!viewtype)
viewtype = 0;
if (parseInt(viewtype) === 1) {
div_attlarge.hide();
div_attlist.show();
showAttachmentList(allAttachments);
}
else {
div_attlarge.show();
div_attlist.hide();
showWorkOrderAttachments(allAttachments);
}
$('#dialogattmask').height($(document).outerHeight(false)).width($(document).outerWidth(false));
}
var inloading = false;
function getWorkOrderAttachments(keepui) {
if (!_this.option.workorderid && !_this.option.machineid) return;
if (inloading)
return;
inloading = true;
if (!keepui) {
div_woatts.empty();
div_aatts.empty();
div_iatts.empty();
woattslist_tbody.empty();
woassetattslist_tbody.empty();
woiptattslist_tbody.empty();
if (typeof _this.option.showloading == 'function')
_this.option.showloading(true);
}
worequest('GetAttachments', JSON.stringify([_this.option.workorderid, _this.option.machineid]), function (data) {
inloading = false;
if (!keepui) {
if (typeof _this.option.showloading == 'function')
_this.option.showloading(false);
}
if (data && typeof data != "string") {
if (data.WorkOrderID != _this.option.workorderid) {
getWorkOrderAttachments(false);
return;
}
data = data.Data;
allAttachments = data;
showWOAttachments(allAttachments);
}
}, function () {
inloading = false;
if (!keepui) {
if (typeof _this.option.showloading == 'function')
_this.option.showloading(false);
}
});
}
var imgTypes = [".jfif", ".jpg", ".jpeg", ".bmp", ".png", ".tiff", ".gif"];
var printTypes = ['.pdf', ".jfif", ".jpg", ".jpeg", ".bmp", ".png", ".tiff", ".gif"];//types to be loaded to print
function showWorkOrderAttachments(attas) {
if (attas.WorkOrderAttachments && attas.WorkOrderAttachments.length > 0) {
var divs = div_woatts.children('div');
for (var i = 0; i < attas.WorkOrderAttachments.length; i++) {
var att = attas.WorkOrderAttachments[i];
var pdiv = $('<div class="divattp"></div>');
var div = createAttaDiv(att, true);
if (AllowCustomer) {
var div1 = $('<div style=" margin-top: 15px;"></div>');
var ext_span = $('<span style="font-weight:500;"></span>').text(GetTextByKey("P_WO_AVAILABLETOCUSTOMER", 'Available to Customer'));
var ext_chk = $('<input type="checkbox" />').prop('checked', att.AvailableToCustomer).click(att, function (e) {
updateWOAttachmentExtension(e.data.AttachmentId, $(this).prop('checked'));
});
ext_chk.data('aid', att.AttachmentId);
div1.append(ext_chk).append(ext_span);
pdiv.append(div1);
}
if (AllowDeleteAtta) {
var sdel = $('<span class="delete"></span>').attr('title', GetTextByKey("P_WO_DELETE", 'Delete')).click(att, function (e) {
deleteAttachment(e.data.AttachmentId, $(e.target));
});
div.append(sdel);
}
var ssend = $('<span class="attaicon attasend"></span>').attr('title', GetTextByKey("P_WO_SEND", 'Send')).click(att, function (e) {
openSendAttachmentPopup(e.data);
}).css('right', 55);
div.append(ssend);
if ($.inArray(att.FileType.toLowerCase(), printTypes) >= 0) {
var sprint = $('<span class="attaicon attaprint"></span>').attr('title', GetTextByKey("P_WO_PRINT", 'Print')).click(att, function (e) {
openPrintFrame(e.data.AttachmentType, e.data.AttachmentIdStr);
}).css('right', 30);
div.append(sprint);
}
else
ssend.css('right', 30);
var sdownload = $('<span class="attaicon attadownload"></span>').attr('title', GetTextByKey("P_WO_DOWNLOAD", 'Download')).click(att, function (e) {
openDownloadFrame(e.data.Url + "&d=1");
});
div.append(sdownload);
pdiv.append(div);
var caption = att.Notes === "" ? att.FileName : att.Notes;
var div3 = $('<div style="text-align:center;clear:both;height:25px;"></div>');
var iptcaption = $('<input type="text" style="width: 296px;" class="inp_name" style="height:24px;" maxlength="200"/>').attr('data-ori', caption).val(caption);
iptcaption.data('attdata', att);
if (!caption || caption == '')
iptcaption.attr('placeholder', 'Click to Add caption');
div3.append(iptcaption);
iptcaption.focus({ AttachmentId: att.AttachmentId, iptcaption: iptcaption }, function (e) {
e.data.iptcaption.addClass('focused');
});
iptcaption.blur({ div: div, AttachmentId: att.AttachmentId, iptcaption: iptcaption, caption: caption }, function (e) {
e.data.iptcaption.removeClass('focused');
updateWOAttachmentCaption(e.data);
});
iptcaption.keydown({ div: div, AttachmentId: att.AttachmentId, iptcaption: iptcaption, caption: caption }, function (e) {
if (e.keyCode == 13 || e.keyCode == 9) {
e.data.iptcaption.blur();
}
});
pdiv.append(div3);
var div_exists = divs[i];
if (div_exists) {
pdiv.insertAfter(div_exists);
div_exists.remove();
}
else
div_woatts.append(pdiv);
}
for (var i = attas.WorkOrderAttachments.length; i < divs.length; i++) {
divs[i].remove();
}
}
else
div_woatts.empty();
if (attas.AssetAttachments && attas.AssetAttachments.length > 0) {
var divs = div_aatts.children('div');
for (var i = 0; i < attas.AssetAttachments.length; i++) {
var att = attas.AssetAttachments[i];
if (imgTypes.indexOf(att.FileType.toLowerCase()) >= 0)
att.ThumbnailUrl = att.Url + "&thumb=1";
var div = createAttaDiv(att, false, 300);
if ($.inArray(att.FileType.toLowerCase(), printTypes) >= 0) {
var sprint = $('<span class="attaicon attaprint"></span>').attr('title', GetTextByKey("P_WO_PRINT", 'Print')).click(att, function (e) {
openPrintFrame(e.data.AttachmentType, e.data.AttachmentIdStr);
}).css('right', 30);
div.append(sprint);
}
if (att.FileType.toLowerCase() != "url") {
var sdownload = $('<span class="attaicon attadownload"></span>').attr('title', GetTextByKey("P_WO_DOWNLOAD", 'Download')).click(att, function (e) {
openDownloadFrame(e.data.Url + "&d=1");
});
div.append(sdownload);
}
var div_exists = divs[i];
if (div_exists) {
div.insertAfter(div_exists);
div_exists.remove();
}
else
div_aatts.append(div);
}
for (var i = attas.AssetAttachments.length; i < divs.length; i++) {
divs[i].remove();
}
}
else
div_aatts.empty();
if (attas.InspectionAttachments && attas.InspectionAttachments.length > 0) {
var divs = div_iatts.children('div');
for (var i = 0; i < attas.InspectionAttachments.length; i++) {
var att = attas.InspectionAttachments[i];
var div = createAttaDiv(att, false, 300);
if ($.inArray(att.FileType.toLowerCase(), printTypes) >= 0) {
var sprint = $('<span class="attaicon attaprint"></span>').attr('title', GetTextByKey("P_WO_PRINT", 'Print')).click(att, function (e) {
openPrintFrame(e.data.AttachmentType, e.data.AttachmentIdStr);
}).css('right', 30);
div.append(sprint);
}
var sdownload = $('<span class="attaicon attadownload"></span>').attr('title', GetTextByKey("P_WO_DOWNLOAD", 'Download')).click(att, function (e) {
openDownloadFrame(e.data.Url + "&d=1");
});
div.append(sdownload);
var div_exists = divs[i];
if (div_exists) {
div.insertAfter(div_exists);
div_exists.remove();
}
else
div_iatts.append(div);
}
for (var i = attas.AssetAttachments.length; i < divs.length; i++) {
divs[i].remove();
}
}
else
div_iatts.empty();
}
function createAttaDiv(att, iswoatta, size) {
var div = $('<div class="divatt"></div>').attr('title', att.FileName);
if (iswoatta)
div.attr('title', att.Notes === "" ? att.FileName : att.Notes)
if (!att.FileType || att.FileType == "") att.FileType = ".jpg";
if (imgTypes.indexOf(att.FileType.toLowerCase()) >= 0) {
var url = att.ThumbnailUrl;
if (size > 0) {
url += "&size=" + size;
}
var pic = $('<img loading="lazy" class="picture"></img>').attr('src', url);
pic.click(att, function (e) {
window.open(e.data.Url, "_blank")
});
div.append(pic);
}
else {
var sdown = $('<img loading="lazy" class="picture" />').click(att, function (e) {
window.open(e.data.Url);
});
setAttachemntIcon(att.FileType, sdown);
div.append(sdown);
}
return div
}
function updateWOAttachmentExtension(attID, chk) {
var item = {
'Key': "1",
'Value': chk
};
var param = JSON.stringify(item);
param = htmlencode(param);
worequest('UpdateWOAttachmentExtension', JSON.stringify([attID, param]), function (data) {
if (data !== 'OK') {
showAlert(data, GetTextByKey("P_WO_AVAILABLETOCUSTOMER", 'Available to Customer'));
}
if (allAttachments && allAttachments.WorkOrderAttachments) {
for (var i = 0; i < allAttachments.WorkOrderAttachments.length; i++) {
if (allAttachments.WorkOrderAttachments[i].AttachmentId == attID) {
allAttachments.WorkOrderAttachments[i].AvailableToCustomer = chk;
break;
}
}
}
}, function (err) {
});
}
function updateWOAttachmentExtensionBatch() {
var atts = [];
if (grid_panddattachments) {
var tempsource = grid_panddattachments.source || [];
for (var i = 0; i < tempsource.length; i++) {
var a = tempsource[i];
atts.push({
Id: a.AttachmentIdStr,
Visible: a.Selected
});
}
}
var param = JSON.stringify(atts);
param = encodeURIComponent(param);
worequest('UpdateWOAttachmentExtensionBatch', param, function (data) {
if (data !== 'OK') {
showAlert(data, GetTextByKey("P_WO_AVAILABLETOCUSTOMER", 'Available to Customer'));
return;
}
hidePAndDAttachmentPopup();
if (div_woatts != null) {
var inps = div_woatts.find('input[type="checkbox"]');
inps.each(function () {
var id = $(this).data('aid');
if (id != null) {
var selected = atts.find(function (a) { return a.Id == id })?.Visible;
this.checked = selected;
}
});
}
if (allAttachments && allAttachments.WorkOrderAttachments) {
for (var i = 0; i < allAttachments.WorkOrderAttachments.length; i++) {
var att = allAttachments.WorkOrderAttachments[i];
var a = atts.find(function (n) { return n.Id == att.AttachmentId });
if (a != null) {
att.AvailableToCustomer = a.Visible;
}
}
}
}, function () {
});
}
var grid_panddattachments
function InitPAndDGrid() {
grid_panddattachments = new GridView(panddlist);
var list_columns = [
{ name: 'Selected', caption: "", valueIndex: 'Selected', type: 3, css: { 'width': 45, 'text-align': 'center' } },
{ name: 'ThumbnailUrl', caption: "", valueIndex: 'ThumbnailUrl', css: { 'width': 42, 'text-align': 'center' } },
{ name: 'FileName', caption: GetTextByKey("P_WO_NAME", "Name"), valueIndex: 'FileName', css: { 'width': 280, 'text-align': 'left' } }
];
var columns = [];
for (var hd in list_columns) {
var col = {};
if (list_columns[hd].type) {
col.type = list_columns[hd].type;
}
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;
columns.push(col);
if (col.name == "Selected") {
col.allcheck = true;
col.sortable = false;
}
else if (col.name == "ThumbnailUrl") {
col.type = ThumbnailUrlColumn;
col.sortable = false;
//col.filter = function (item) {
// if (imgTypes.indexOf(item.FileType.toLowerCase()) >= 0)
// return $('<img loading="lazy" style="height:30px;width:30px;"></img>').attr('src', item.ThumbnailUrl);
// else {
// var sdown = $('<img loading="lazy" style="height:30px;width:30px;line-height:40px;" />')
// setAttachemntIcon(item.FileType, sdown);
// return sdown;
// }
//}
//col.styleFilter = function () {
// return { "width": "100%", 'margin': 0 };
//}
}
}
grid_panddattachments.multiSelect = true;
grid_panddattachments.columns = columns;
grid_panddattachments.init();
}
function openPAndDGDialog(type) {
if (!allAttachments) return;
var d = dialog_panddattachments;
if (!d.data("loaded")) {
d.data("loaded", true);
InitPAndDGrid();
}
btn_print.css('display', type == 0 ? '' : 'none');
btn_download.css('display', type == 1 ? '' : 'none');
btn_ok.css('display', type == 2 ? '' : 'none');
var data = [];
if (allAttachments.AssetAttachments && allAttachments.AssetAttachments.length > 0)
data = data.concat(allAttachments.AssetAttachments);
if (allAttachments.WorkOrderAttachments && allAttachments.WorkOrderAttachments.length > 0)
data = data.concat(allAttachments.WorkOrderAttachments);
if (allAttachments.InspectionAttachments && allAttachments.InspectionAttachments.length > 0)
data = data.concat(allAttachments.InspectionAttachments);
var count = 0;
var rows = [];
for (var i = 0; i < data.length; i++) {
var att = data[i];
if (att.FileType.toLowerCase() == "url") continue;
var f;
if (type == 2) {
f = att.AttachmentType == 2;
} else {
f = type == 1 || $.inArray(att.FileType.toLowerCase(), printTypes) >= 0;
}
if (f) {
var fr = {
FileName: att.Notes === "" ? att.FileName : att.Notes,
FileType: att.FileType,
Url: att.Url,
ThumbnailUrl: att.ThumbnailUrl,
AttachmentType: att.AttachmentType,
AttachmentIdStr: att.AttachmentIdStr,
Selected: type == 2 && att.AvailableToCustomer,
};
rows.push(fr);
count++;
}
}
d.find('.dialog-title span.title').text(GetTextByKey("P_WO_ATTACHMENTS", 'Attachments') + " (" + count + ")");
showmaskbg(true);
d.css({
'top': (document.documentElement.clientHeight - d.height()) / 3,
'left': (document.documentElement.clientWidth - d.width()) / 2
}).showDialogfixed();
setTimeout(function () {
grid_panddattachments.setData(rows);
grid_panddattachments.clearHeaderCheckbox();
});
}
function getSelectedPAndDAttas() {
var sels = [];
if (grid_panddattachments) {
var tempsource = grid_panddattachments.source || [];
for (var i = 0; i < tempsource.length; i++) {
var a = tempsource[i];
if (a.Selected)
sels.push(a);
}
}
return sels;
}
function printWOAttachments() {
var sels = getSelectedPAndDAttas();
if (!sels || sels.length == 0) return;
if (sels && sels.length > 0) {
for (var i = 0; i < sels.length; i++) {
var att = sels[i];
if ($.inArray(att.FileType.toLowerCase(), printTypes) >= 0) {
openPrintFrame(att.AttachmentType, att.AttachmentIdStr);
}
}
}
hidePAndDAttachmentPopup();
}
function openPrintFrame(attatype, id) {
var frame = $("<iframe style='display:none;'></iframe>");
$(document.body).after(frame);
//frame.attr("src", url);
frame.attr("src", _network.root + "Print.aspx?pt=3&at=" + attatype + "&id=" + id);
frame.on('load', function () {
setTimeout(function () {
frame.contents().find("body").css("text-align", "center");
//frame.contents().find("img").css("max-height", window.screen.availHeight).css("max-width", window.screen.availWidth);
frame.contents().find("img").css("max-height", "98%").css("max-width", "98%");
frame[0].contentWindow.print();
});
setTimeout(function () {
frame.remove();
}, 60000);
});
}
function downloadWOAttachments() {
var sels = getSelectedPAndDAttas();
if (!sels || sels.length == 0) return;
if (sels && sels.length > 0) {
for (var i = 0; i < sels.length; i++) {
var att = sels[i];
openDownloadFrame(att.Url + "&d=1");
}
}
hidePAndDAttachmentPopup();
}
function openDownloadFrame(url) {
var frame = $("<iframe style='display:none;'></iframe>");
$(document.body).after(frame);
frame.attr("src", url);
worequest('RecordDownloadLog', JSON.stringify([url]), function (data) {
}, function (err) {
});
var timer = setInterval(function () {
if (frame[0].contentDocument && (frame[0].contentDocument.readyState == "complete" || frame[0].contentDocument.readyState == 4)) {
frame.remove();
clearInterval(timer);
}
}, 5000);
}
function updateWOAttachmentCaption(edata) {
var attid = edata.AttachmentId;
var caption = edata.iptcaption.val();
//if (caption === "") {
// var pcap = edata.caption;
// if (edata.iptcaption.data('caption'))
// pcap = edata.iptcaption.data('caption');
// edata.iptcaption.val(pcap);
// return;
//}
var att = edata.iptcaption.data('attdata');
att.Notes = caption;
if (allAttachments && allAttachments.WorkOrderAttachments) {
for (var i = 0; i < allAttachments.WorkOrderAttachments.length; i++) {
if (allAttachments.WorkOrderAttachments[i].AttachmentId == att.AttachmentId) {
allAttachments.WorkOrderAttachments[i] = att;
break;
}
}
}
worequest('UpdateWorkOrderAttachmentCaption', JSON.stringify([attid, htmlencode(caption)]), function (data) {
if (data !== 'OK') {
showAlert(data, GetTextByKey("P_WO_UPDATECAPTION", 'Update Caption'));
}
else {
if (edata.div)
edata.div.attr('title', caption);
edata.iptcaption.data('caption', caption);
}
}, function (err) {
});
}
//***********************************Begin Attachment List************************************//
function showAttachmentList(data) {
if (data.WorkOrderAttachments && data.WorkOrderAttachments.length > 0) {
var trs = woattslist_tbody.children('tr');
for (var i = 0; i < data.WorkOrderAttachments.length; i++) {
var att = data.WorkOrderAttachments[i];
var tr = createWOAttachmentTr(att);
var tr_exists = trs[i];
if (tr_exists) {
tr.insertAfter(tr_exists);
tr_exists.remove();
}
else
woattslist_tbody.append(tr);
}
for (var i = data.WorkOrderAttachments.length; i < trs.length; i++) {
trs[i].remove();
}
}
else
woattslist_tbody.empty();
if (data.AssetAttachments && data.AssetAttachments.length > 0) {
var trs = woassetattslist_tbody.children('tr');
for (var i = 0; i < data.AssetAttachments.length; i++) {
var att = data.AssetAttachments[i];
if (imgTypes.indexOf(att.FileType.toLowerCase()) >= 0)
att.ThumbnailUrl = att.Url + "&thumb=1";
var tr = createWOOtherAttachmentTr(att, 60);
var tr_exists = trs[i];
if (tr_exists) {
tr.insertAfter(tr_exists);
tr_exists.remove();
}
else
woassetattslist_tbody.append(tr);
}
for (var i = data.AssetAttachments.length; i < trs.length; i++) {
trs[i].remove();
}
}
else
woassetattslist_tbody.empty();
if (data.InspectionAttachments && data.InspectionAttachments.length > 0) {
var trs = woiptattslist_tbody.children('tr');
for (var i = 0; i < data.InspectionAttachments.length; i++) {
var att = data.InspectionAttachments[i];
//if (imgTypes.indexOf(att.FileType.toLowerCase()) >= 0)
// att.ThumbnailUrl = att.Url & "&thumb=1";
var tr = createWOOtherAttachmentTr(att, 60);
var tr_exists = trs[i];
if (tr_exists) {
tr.insertAfter(tr_exists);
tr_exists.remove();
}
else
woiptattslist_tbody.append(tr);
}
for (var i = data.InspectionAttachments.length; i < trs.length; i++) {
trs[i].remove();
}
}
else
woiptattslist_tbody.empty();
}
function createWOAttachmentTr(att) {
var caption = att.Notes === "" ? att.FileName : att.Notes;
var tr = $('<tr class="tr-attachment-flex-line"></tr>').attr('data-id', att.AttachmentId);
var td;
tr.append('<td style="width:30px;"></td>');
td = $('<td style="width:60px;"></td>');
if (!att.FileType || att.FileType == "")
att.FileType = ".jpg";
var divpic = $('<div style="width:60px;height:60px;text-align:center;"></div>');
td.append(divpic);
if (imgTypes.indexOf(att.FileType.toLowerCase()) >= 0) {
var pic = $('<img loading="lazy" class="wolist_picture"></img>').attr('src', att.ThumbnailUrl);
pic.click(att, function (e) {
window.open(e.data.Url, "_blank")
});
divpic.append(pic);
}
else {
var sdown = $('<img loading="lazy" class="wolist_picture" />').click(att, function (e) {
window.open(e.data.Url);
});
setAttachemntIcon(att.FileType, sdown);
divpic.append(sdown);
}
tr.append(td);
td = $('<td class="attachment-caption"></td>');
var iptcaption = $('<input type="text" class="inp_name" maxlength="200" style="height:24px;"/>').css('width', '100%').attr('data-ori', caption).val(caption);
iptcaption.data('attdata', att);
if (!caption || caption == '')
iptcaption.attr('placeholder', 'Click to Add caption');
td.append(iptcaption);
iptcaption.focus({ AttachmentId: att.AttachmentId, iptcaption: iptcaption }, function (e) {
e.data.iptcaption.addClass('focused');
});
iptcaption.blur({ AttachmentId: att.AttachmentId, iptcaption: iptcaption, caption: caption }, function (e) {
e.data.iptcaption.removeClass('focused');
updateWOAttachmentCaption(e.data);
});
iptcaption.keydown({ AttachmentId: att.AttachmentId, iptcaption: iptcaption, caption: caption }, function (e) {
if (e.keyCode == 13 || e.keyCode == 9) {
e.data.iptcaption.blur();
}
});
tr.append(td);
td = $('<td style="width:70px;"></td>');
if (AllowCustomer) {
var chk_tocust = $('<input type="checkbox" class="inp_recurring"/>').attr('data-ori', att.AvailableToCustomer).prop('checked', att.AvailableToCustomer);
td.append(chk_tocust);
chk_tocust.click(att, function (e) {
updateWOAttachmentExtension(e.data.AttachmentId, $(this).prop('checked'));
});
}
tr.append(td);
td = $('<td class="td_funcs" style="width: 132px;text-align:right;"></td>');
var sdel = $('<span class="wolist_icon wolist_delete"></span>').attr('title', GetTextByKey("P_WO_DELETE", 'Delete')).click(att, function (e) {
deleteAttachment(e.data.AttachmentId, $(e.target));
});
td.append(sdel);
var ssend = $('<span class="wolist_icon wolist_attasend"></span>').attr('title', GetTextByKey("P_WO_SEND", 'Send')).click(att, function (e) {
openSendAttachmentPopup(e.data);
});
td.append(ssend);
var sdownload = $('<span class="wolist_icon wolist_attadownload"></span>').attr('title', GetTextByKey("P_WO_DOWNLOAD", 'Download')).click(att, function (e) {
openDownloadFrame(e.data.Url + "&d=1");
});
td.append(sdownload);
if ($.inArray(att.FileType.toLowerCase(), printTypes) >= 0) {
var sprint = $('<span class="wolist_icon wolist_attaprint"></span>').attr('title', GetTextByKey("P_WO_PRINT", 'Print')).click(att, function (e) {
openPrintFrame(e.data.AttachmentType, e.data.AttachmentIdStr);
});
td.append(sprint);
}
tr.append(td);
return tr;
}
function createWOOtherAttachmentTr(att, size) {
var tr = $('<tr class="tr-attachment-flex-line"></tr>').attr('data-id', att.AttachmentId);
var td;
tr.append('<td style="width:30px;"></td>');
td = $('<td style="width:60px;"></td>');
if (!att.FileType || att.FileType == "")
att.FileType = ".jpg";
var divpic = $('<div style="width:60px;height:60px;text-align:center;"></div>');
td.append(divpic);
if (imgTypes.indexOf(att.FileType.toLowerCase()) >= 0) {
var url = att.ThumbnailUrl;
if (size > 0) {
url += "&size=" + size;
}
var pic = $('<img loading="lazy" class="wolist_picture"></img>').attr('src', url);
pic.click(att, function (e) {
window.open(e.data.Url, "_blank")
});
divpic.append(pic);
}
else {
var sdown = $('<img loading="lazy" class="wolist_picture" />').click(att, function (e) {
window.open(e.data.Url);
});
setAttachemntIcon(att.FileType, sdown);
divpic.append(sdown);
}
tr.append(td);
td = $('<td class="attachment-caption"></td>').text(att.FileName);
tr.append(td);
td = $('<td class="td_funcs" style="width: 132px;text-align:right;"></td>');
if (att.FileType.toLowerCase() != "url") {
var sdownload = $('<span class="wolist_icon wolist_attadownload"></span>').attr('title', GetTextByKey("P_WO_DOWNLOAD", 'Download')).click(att, function (e) {
openDownloadFrame(e.data.Url + "&d=1");
});
td.append(sdownload);
}
if ($.inArray(att.FileType.toLowerCase(), printTypes) >= 0) {
var sprint = $('<span class="wolist_icon wolist_attaprint"></span>').attr('title', GetTextByKey("P_WO_PRINT", 'Print')).click(att, function (e) {
openPrintFrame(e.data.AttachmentType, e.data.AttachmentIdStr);
});
td.append(sprint);
}
tr.append(td);
return tr;
}
function SendAttachmentMsg(phoneemail) {
var phoneemail = phoneemail;// $('#txtphonenum_statuschange').val();
if (!phoneemail || phoneemail.trim() == "") {
showAlert(GetTextByKey("P_WO_PLEASEINPUTTHEPHONENUMBEROREMAL", "Please input the phone number or email."), GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
var phoneemails = phoneemail.split(';');
var pmemails = [];
for (var i = 0; i < phoneemails.length; i++) {
var pm = phoneemails[i];
if (checkPhoneNumber(pm) || isEmail(pm)) {
pmemails.push({ 'Key': pm, 'Value': pm });
}
else {
if (_this.option.customercontacts) {
for (var j = 0; j < _this.option.customercontacts.length; j++) {
var c = _this.option.customercontacts[j];
if (c.OptOut || c.OptOut_BC) continue;
var mp = $.trim(c.MobilePhone);
var email = $.trim(c.Email);
if (c.Name === pm) {
if (c.ContactPreference == "0" && checkPhoneNumber(mp)) {
pmemails.push({ 'Key': mp, 'Value': pm });
break;
}
if (c.ContactPreference == "1" && isEmail(email)) {
pmemails.push({ 'Key': email, 'Value': pm });
break;
}
}
}
}
}
}
var comm = $('#dialog_atta_textmsg').val();
if ($.trim(comm) == "") {
showAlert(GetTextByKey("P_WO_PLEASEINPUTTHEMESSAGE", "Please input the message."), GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
$('#dialogattmask').show();
$('#dialogattmask').css('z-index', 1000);
var includeStatusLink = $('#dialog_atta_chkIncludeStatusLink').prop("checked");
var url = 'AddWorkOrder.aspx';
var method = 'AddWorkOrderCommunication';
var data = new FormData();
data.append('MethodName', method);
data.append('WorkorderId', _this.option.workorderid);
data.append('PMEmails', JSON.stringify(pmemails));
data.append('Comment', encodeURIComponent(comm));
data.append('IncludeStatusLink', includeStatusLink ? "1" : "0");
var atta = wosendattachmentDialog.data('atta');
var attap = { AttaType: '2', Id: atta.AttachmentId, Filename: atta.FileName, Caption: atta.Notes };
data.append('AttaData', encodeURIComponent(JSON.stringify(attap)));
if (imgTypes.indexOf(atta.FileType.toLowerCase()) < 0) {//图片无需验证大小
data.append('IsAttachment', "1");
}
$.ajax({
url: url,
type: 'POST',
dataType: 'json',
processData: false,
contentType: false,
cache: false,
data: data,
success: function (data) {
$('#dialogattmask').hide();
$('#dialogattmask').css('z-index', 'unset');
//$('#mask_over_bg').hide();
if (data !== "") {
showAlert(data, GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
hideSendWOAttachmentPopup();
},
error: function (request, textStatus, errorThrown) {
$('#dialogattmask').hide();
$('#dialogattmask').css('z-index', 'unset');
if (request?.readyState == 0) {
console.log(request);
} else {
writelog_ironintel("onAddMessage", url + ".-1." + method + "." + JSON.stringify(param), JSON.stringify(request), textStatus + errorThrown);
}
}
});
}
//***********************************End Attachment List************************************//
function dragOverWOAttachment(ev) {
ev.preventDefault();
ev.dataTransfer.dropEffect = 'link';
}
function dropWOAttachment(ev) {
ev.preventDefault();
ev.stopPropagation();
var df = ev.dataTransfer;
var files = [];
if (df.items !== undefined) {
for (var i = 0; i < df.items.length; i++) {
var item = df.items[i];
if (item.kind === "file" && (item.webkitGetAsEntry() == null || item.webkitGetAsEntry().isFile)) {
var file = item.getAsFile();
files.push(file);
}
}
}
if (files.length > 0)
onSaveWOAttachment(files);
}
function cutWOAttachment(ev) {
ev.stopPropagation();
var df = ev.clipboardData;
var files = [];
if (df.items !== undefined) {
for (var i = 0; i < df.items.length; i++) {
var item = df.items[i];
if (item.kind === "file" && (item.webkitGetAsEntry() == null || item.webkitGetAsEntry().isFile)) {
var file = item.getAsFile();
files.push(file);
}
}
}
if (files.length > 0)
onSaveWOAttachment(files);
}
}
}
/*****************************************End Attachment*********************************************/
function getMessageStatusHistoryText(p) {
var getStatusText = function (s) {
switch (s) {
case 0: return GetTextByKey('P_CU_PENDING', 'Pending');
case 1: return GetTextByKey('P_WO_SENT', 'Sent');
case 5: return GetTextByKey('P_CU_DELIVERYCONFIRMED', 'Delivery Confirmed');
case 6: return GetTextByKey('P_CU_RESENT', 'Resent');
case 9:
case 10:
case 412: return GetTextByKey('P_MA_FAILED', 'Failed');
default: return GetTextByKey('P_CU_UNKNOWN', 'Unknown');
}
};
var msg = GetTextByKey('P_CU_UPDATESTATUSDESC', 'Status changed from {0} to {1}\nBy {2} on {3}')
.replace('{0}', getStatusText(p.History.StatusFrom))
.replace('{1}', getStatusText(p.History.StatusTo))
.replace('{2}', p.History.UpdatedBy)
.replace('{3}', p.UpdatedOnStr);
return msg;
}
/*****************************************Begin Customer Communication*********************************************/
if (typeof $wocommunication !== 'function') {
$wocommunication = function (option) {
var _this = this;
this.customercontacts = [];
this.followers = [];
this.changewo = function (woid, aid, wo) {
option.workorderid = woid;
if (aid)
option.machineid = aid;
if (wo)
option.wo = wo;
this.updatecontact([]);//清空联系人
this.followers = [];
this.customer.followers = [];
this.getWorkOrderFollowers(woid);
this.getCommunications(true);
var customer = this.customer;
if (customer && option.wo) {
customer.companyName = option.wo.CustomerName;
customer.companyCode = option.wo.CustomerCode;
customer.setData('companyCode', option.wo.CustomerCode);
customer.autoUpdates = option.wo.AutoText?.Value;
}
};
this.updatecontact = function (contacts) {
this.customercontacts = contacts
this.showCustomerContacts(this.customercontacts);
}
this.close = function () {
}
this.resetCommunications = function () {
var customer = _this.customer;
if (typeof customer !== 'undefined') {
customer.text = '';
customer.load();
}
}
var communicationsLoading = false;
var communicationsLoadingWaitCount = 0;
/**Communication */
this.getCommunications = function (reset) {
if (reset) {
_this.resetCommunications();
}
if (communicationsLoading) {
communicationsLoadingWaitCount++;
return;
}
communicationsLoading = true;
if (!option.workorderid || option.workorderid == "") return;
option.showloading(true);
worequest("GetCommunications", option.workorderid, function (data) {
communicationsLoading = false;
option.showloading(false);
if (typeof (data) === "string") {
return;
}
_this.customer?.load(data, _this.customercontacts, _this.followers);
if (communicationsLoadingWaitCount > 0) {
communicationsLoadingWaitCount = 0;
_this.getCommunications(reset);
}
}, function () {
communicationsLoading = false;
if (communicationsLoadingWaitCount > 0) {
communicationsLoadingWaitCount = 0;
_this.getCommunications(reset);
}
option.showloading(false);
});
};
this.showCustomerContacts = function (data) {
var customer = this.customer;
if (customer != null) {
//customer.setData('contacts', data);
customer.contacts = data;
}
};
this.getCustomerContacts = function (custid, next) {
worequest('GetCustomerContacts', custid, function (data) {
if (typeof (data) === "string") {
showAlert(data, GetTextByKey('P_CUSTOMERRECORD', "Customer Record"));
if (next)
next([]);//next 在Communication选Contacts时传入
return;
}
if (next) {
next(data);//next 在Communication选Contacts时传入
return;
}
_this.showCustomerContacts(data);
_this.SaveWorkorderContact();
}, function () {
});
}
this.SaveWorkorderContact = function (data, next) {
var workorderid = option.workorderid;
if (!workorderid || workorderid == "")
return;
var custid = option.wo.CustomerId;
if (!custid)
custid = -1;
var param = JSON.stringify([workorderid, custid, JSON.stringify(data ?? _this.customercontacts)]);
param = htmlencode(param);
worequest("SaveWorkOrderContact", param, function (data) {
if (typeof next === 'function') {
next(data);
return;
}
if (typeof data === "string") {
showAlert(data, GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
}, function () {
//showmaskbg(false);
});
};
this.SaveWorkOrderFollower = function (next) {
var workorderid = option.workorderid;
if (!workorderid || workorderid == "")
return;
var param = JSON.stringify([workorderid, JSON.stringify(_this.followers)]);
param = htmlencode(param);
worequest("SaveWorkOrderFollower", param, function (data) {
if (typeof next === 'function') {
next(data);
} else {
if (data !== "OK") {
showAlert(data, GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
}
}, function () {
//showmaskbg(false);
});
};
this.getWorkOrderFollowers = function (woid) {
worequest('GetWorkOrderFollowers', woid, function (data) {
if (typeof (data) === "string") {
showAlert(data, GetTextByKey('P_CUSTOMERRECORD', "Customer Record"));
return;
}
_this.followers = data;
_this.customer.followers = _this.followers;
}, function () {
});
};
var isloadfollower = false;
var allfollowers = [];
this.getAllFollowers = function (next) {
worequest('GetAllFollowers', '', function (data) {
if (typeof next === 'function') {
next(data);
} else {
if (typeof (data) === "string") {
showAlert(data, GetTextByKey('P_CUSTOMERRECORD', "Customer Record"));
return;
}
isloadfollower = true;
allfollowers = data;
_this.customer.setData('allfollowers', data);
}
}, function () {
});
};
window.customer = this.customer = new window['lib-app'].CustomerCommunication({
getText: GetTextByKey,
autoUpdates: false,
readonly: WOReadOnly || COMMReadOnly,
recordReadonly: !AllowCustomer || WOReadOnly || CRReadOnly,
contactCollapsed: spliterProps.contactCollapsed,
onMasking: window.parent.onmaskbg,
onContactCollapsed: function (checked) {
spliterProps.contactCollapsed = checked;
localStorage.setItem('spliter_props', JSON.stringify(spliterProps));
},
onStatusLinkChanged: function (checked) {
this.freeze = true;
var customer = document.querySelector('#iframeworkorder').contentWindow?.customer;
if (customer != null) {
customer.statusLink = checked;
}
this.freeze = false;
},
onAddMessage: function () {
var customer = _this.customer;
var pmemails = customer?.contacts;
if (pmemails == null || pmemails.length === 0) {
customer.loading = false;
showAlert(GetTextByKey("P_WO_PLEASEINPUTTHEPHONENUMBEROREMAL", "Please input the phone number or email."), GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
var comm = customer?.text;
if ($.trim(comm) == "") {
customer.loading = false;
showAlert(GetTextByKey("P_WO_PLEASEINPUTTHEMESSAGE", "Please input the message."), GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
var includeStatusLink = customer?.statusLink;
option.showloading(true);
var url = 'Maintenance/WorkOrderMaintenance.aspx';
var method = 'AddWorkOrderCommunication';
var data = new FormData();
data.append('MethodName', method);
data.append('WorkorderId', option.workorderid);
data.append('PMEmails', JSON.stringify(pmemails));
data.append('Comment', encodeURIComponent(comm));
data.append('IncludeStatusLink', includeStatusLink ? "1" : "0");
var file = customer?.file;
if (file != null) {
data.append('Attachment', file);
}
$.ajax({
url: _network.root + url,
type: 'POST',
dataType: 'json',
processData: false,
contentType: false,
cache: false,
data: data,
success: function (data) {
option.showloading(false);
customer.loading = false;
if (data !== "") {
showAlert(data, GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
customer.text = '';
customer.file = null;
},
error: function (request, textStatus, errorThrown) {
option.showloading(false);
customer.loading = false;
if (request?.readyState == 0) {
console.log(request);
} else {
writelog_ironintel("onAddMessage", url + ".-1." + method + "." + JSON.stringify(param), JSON.stringify(request), textStatus + errorThrown);
}
}
});
},
onUpdateMessageStatus: function (msgs) {
if (msgs?.length > 0) {
worequest('UpdateMessageStatus', JSON.stringify(msgs), function (data) {
if (data !== 'OK') {
ui.showAlert(GetTextByKey('P_WO_ERROR', 'Error'), data, 'error');
return;
}
_this.getCommunications();
});
}
},
onMessageStatusClicked: function (p) {
worequest('GetMessageStatusHistory', String(p.Id), function (data) {
if (typeof data === 'string') {
ui.showAlert(GetTextByKey('P_WO_ERROR', 'Error'), data, 'error');
return;
}
if (data.length > 0) {
var msg = data.map(function (p) { return getMessageStatusHistoryText(p) }).join('\n\n');
ui.showAlert(data[0].CustomerNumberFormatted, msg);
}
});
},
onSave: function (item, add) {
var contact;
if (!add) {
contact = _this.customercontacts.filter(function (f) { return f.Id < 0 ? f.Name === item.OldName && f.MobilePhone === item.OldMobilePhone : f.Id === item.Id })[0];
}
var array = [];
for (let c of _this.customercontacts) {
if (c === contact) {
let ct = {
...contact,
Name: item.Name,
ContactPreference: item.ContactPreference,
Email: item.Email,
MobilePhone: item.MobilePhone,
OptOut: item.OptOut,
Notes: item.Notes,
SaveToCustomer: item.SaveToCustomer
};
if (parseInt(ct.ContactPreference) == 0) {
ct.ContactPreferenceStr = GetTextByKey("P_CR_TEXT", "Text");
} else if (parseInt(ct.ContactPreference) == 1) {
ct.ContactPreferenceStr = GetTextByKey("P_CR_EMAIL", "Email");
} else if (parseInt(ct.ContactPreference) == 2) {
ct.ContactPreferenceStr = GetTextByKey("P_CR_PHONE", "Phone");
}
array.push(ct)
} else {
array.push(c);
}
}
if (add) {
item.Id = -1;
array.push(item);
}
return new Promise(function (resolve, reject) {
_this.SaveWorkorderContact(array, function (data) {
if (typeof data === 'string') {
ui.showAlert(GetTextByKey('P_WO_ERROR', 'Error'), data, 'error')
reject();
} else {
for (let d of data) {
const c = _this.customercontacts.find(function (c) {
return c.Id < 0 ?
c.Name === d.Name && c.MobilePhone === d.MobilePhone :
c.Id === d.Id
});
if (c != null) {
d.selected = c.selected;
} else {
d.selected = true;
}
}
_this.showCustomerContacts(_this.customercontacts = data);
resolve(data);
}
});
});
},
onDelete: function (_op, item, customer) {
var index;
var customercontacts = _this.customercontacts;
if (customer) {
index = customercontacts.findIndex(function (c) { return c.Id === item.Id });
} else {
index = customercontacts.findIndex(function (c) { return c.Name === item.Name && c.MobilePhone === item.MobilePhone });
}
if (index >= 0) {
customercontacts.splice(index, 1);
_this.SaveWorkorderContact();
_this.showCustomerContacts(customercontacts);
// from customer record
if (customer) {
_network.request("Maintenance/AddCustomerRecord.aspx", -1, 'DeleteContact', item.Id, function () { }, function (e) {
console.log(e);
ui.showAlert(GetTextByKey("P_WO_ERROR", 'Error'), GetTextByKey('P_UM_PAGEERROR', 'An unknown error occurred. Please refresh page.'), 'error');
});
}
}
},
onChanged: function (source) {
_this.customer.contacts = source;
},
onDeleteFollower: function (_op, f) {
var followers = _this.followers;
var index = followers.findIndex(function (c) { return c.UserIID === f.UserIID });
if (index < 0) {
return;
}
followers.splice(index, 1);
_this.SaveWorkOrderFollower();
_this.customer.followers = followers;
},
onChangeFollower: function (_op, f, text, email) {
var follower = _this.followers.find(function (c) { return c.UserIID === f.UserIID });
if (follower != null) {
follower.SendText = text;
follower.SendEmail = email;
_this.SaveWorkOrderFollower();
_this.customer.followers = followers;
}
},
onInitFollower: function (selfollowers) {
if (isloadfollower && allfollowers?.length > 0) {
for (let f of allfollowers) {
f.Email = false;
f.Text = false;
if (selfollowers) {
var tf = selfollowers.find(function (c) { return c.UserIID.toLowerCase() === f.IID.toLowerCase() });
if (tf) {
f.Email = tf.SendEmail;
f.Text = tf.SendText;
}
}
}
return Promise.resolve(allfollowers);
}
return new Promise(function (resolve) {
_this.getAllFollowers(function (data) {
if (Array.isArray(data)) {
isloadfollower = true;
allfollowers = data;
}
for (let f of allfollowers) {
f.Email = false;
f.Text = false;
if (selfollowers) {
var tf = selfollowers.find(function (c) { return c.UserIID.toLowerCase() === f.IID.toLowerCase() });
if (tf) {
f.Email = tf.SendEmail;
f.Text = tf.SendText;
}
}
}
resolve(data);
});
});
},
onAddFollower: function (list) {
var followers = _this.followers = [];
for (let f of list) {
let o = {
Id: -1,
UserIID: f.IID,
Name: f.DisplayName,
Email: f.ID,
MobilePhone: f.Mobile,
SendEmail: f.Email,
SendText: f.Text
};
followers.push(o);
}
return new Promise(function (resolve, reject) {
_this.SaveWorkOrderFollower(function (data) {
if (data !== 'OK') {
ui.showAlert(GetTextByKey("P_WO_ERROR", 'Error'), data, 'error')
reject();
} else {
resolve(followers);
}
});
});
},
onOpenSelectCRContacts: function () {
return new Promise(function (resolve) {
var customerid = option.wo.CustomerId;
if (!customerid || customerid === "") {
setTimeout(function () { resolve([]) }, 0);
return;
}
_this.getCustomerContacts(customerid, function (data) {
resolve(data);
});
});
},
onSelectCRContacts: function (list) {
if (_this.customercontacts) {
var temp = [];
for (var i = 0; i < _this.customercontacts.length; i++) {//移除上一个Customer的Contacts
if (_this.customercontacts[i].Id > 0) continue;
temp.push(_this.customercontacts[i]);
}
_this.customercontacts = temp;
}
for (var i = 0; i < list.length; i++) {
var r = list[i];
var item = { ...r };
var contactexists = false;
if (_this.customercontacts) {
for (var j = 0; j < _this.customercontacts.length; j++) {
var ct = _this.customercontacts[j];
if (ct.Name === item.Name && ct.MobilePhone === item.MobilePhone) {
ct.Id = item.Id;
contactexists = true;
break;
}
}
}
if (!contactexists)
_this.customercontacts.push(item);
}
_this.showCustomerContacts(_this.customercontacts);
_this.SaveWorkorderContact();
}
});
option.parent.append(this.customer.create());
}
}
/*****************************************End Customer Communication*********************************************/
/*****************************************Begin Internal Communcation*********************************************/
if (typeof $wointernal !== 'function') {
$wointernal = function (option) {
var _this = this;
this.changewo = function (woid, aid) {
//if (woid !== option.workorderid) {
option.workorderid = woid;
if (aid)
option.machineid = aid;
this.getComments(true);
//}
};
this.close = function () {
}
this.updatecontact = function (contacts) {
var internal = this.internal;
if (internal != null) {
internal.contacts = contacts;
}
}
this.resetComments = function () {
var internal = this.internal;
if (internal != null) {
internal.text = '';
internal.load();
}
};
this.getComments = function (reset) {
option.showloading(true);
if (reset) {
this.resetComments();
}
var workorderid = option.workorderid;
if (!workorderid || workorderid == "") return;
worequest("GetComments", workorderid, function (data) {
option.showloading(false);
if (typeof (data) === "string") {
return;
}
$("#li_comments").data("loaded", true);
_this.internal?.load(data);
}, function () {
option.showloading(false);
});
};
window.internal = this.internal = new window['lib-app'].InternalComment({
getText: GetTextByKey,
readonly: WOReadOnly,
onAddMessage: openSendICEmail,
onAddComment: function (comment) {
if ($.trim(comment) == "") {
//showAlert(GetTextByKey("P_FR_PLEASEINPUTTHECOMMENT", "Please input the comment."), GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
option.showloading(true);
var url = 'Maintenance/AddWorkOrder.aspx';
var method = 'SendInternalComments';
var data = new FormData();
data.append('MethodName', method);
data.append('WorkorderId', workorderid);
data.append('Comment', encodeURIComponent(comment));
//data.append('Emails', JSON.stringify(emailaddress));
//data.append('Phones', JSON.stringify(phonenumbers));
var file = internal?.file;
if (file != null) {
data.append('Attachment', file);
}
$.ajax({
url: _network.root + url,
type: 'POST',
dataType: 'json',
processData: false,
contentType: false,
cache: false,
data: data,
success: function (data) {
option.showloading(false);
_this.internal.loading = false;
if (data !== "") {
showAlert(data, GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
_this.internal.text = '';
_this.internal.file = null;
$('#commentsinputcount').text("0/" + $('#dialog_comments').attr("maxlength"));
//setTimeout(function () { _this.getComments() }, 400);
},
error: function () {
_this.internal.loading = false;
option.showloading(false);
}
});
},
onUpdateMessageStatus: function (msgs) {
if (msgs?.length > 0) {
worequest('UpdateMessageStatus', JSON.stringify(msgs), function (data) {
if (data !== 'OK') {
ui.showAlert(GetTextByKey('P_WO_ERROR', 'Error'), data, 'error');
return;
}
_this.getComments();
});
}
},
onMessageStatusClicked: function (p) {
worequest('GetMessageStatusHistory', String(p.Id), function (data) {
if (typeof data === 'string') {
ui.showAlert(GetTextByKey('P_WO_ERROR', 'Error'), data, 'error');
return;
}
if (data.length > 0) {
var msg = data.map(function (p) { return getMessageStatusHistoryText(p) }).join('\n\n');
ui.showAlert(data[0].CustomerNumberFormatted, msg);
}
});
}
});
option.parent.append(this.internal.create());
};
}
/*****************************************End Internal Communcation*********************************************/
/*****************************************Begin Customer Record Communcation*********************************************/
if (typeof $wocrcomment !== 'function') {
$wocrcomment = function (option) {
var _this = this;
this.changewo = function (woid, aid, wo) {
//if (woid !== option.workorderid) {
if (wo) {
option.customerid = wo.CustomerId;
}
this.getComments(true);
//}
};
this.close = function () {
}
this.resetComments = function () {
var comment = this.comment;
if (comment != null) {
comment.text = '';
comment.load();
}
};
this.getComments = function (reset) {
option.showloading(true);
if (reset) {
this.resetComments();
}
var customerid = option.customerid;
if (isNaN(customerid) || customerid <= 0) {
option.showloading(false);
if (_this.comment != null) {
_this.comment.load();
_this.comment.readonly = true;
}
return;
}
crrequest("GetCustomerComments", customerid, function (data) {
option.showloading(false);
if (typeof (data) === "string") {
return;
}
$("#li_comments").data("loaded", true);
if (_this.comment != null) {
_this.comment.load(data);
_this.comment.readonly = CRReadOnly;
}
}, function () {
option.showloading(false);
});
};
window.customerComment = this.comment = new window['lib-app'].CustomerRecordComment({
getText: GetTextByKey,
readonly: CRReadOnly,
onAddComment: function (comment) {
if ($.trim(comment) == "") {
//showAlert(GetTextByKey("P_FR_PLEASEINPUTTHECOMMENT", "Please input the comment."), GetTextByKey("P_WO_ERROR", 'Error'));
return;
}
var param = JSON.stringify([option.customerid, false, comment]);
param = htmlencode(param);
option.showloading(true);
crrequest("SubmitComment", param, function (data) {
option.showloading(false);
if (data !== "") {
showAlert(data, GetTextByKey("P_FR_ERROR", 'Error'));
return;
}
_this.comment.text = '';
$('#commentsinputcount').text("0/" + $('#dialog_comments').attr("maxlength"));
setTimeout(function () { _this.getComments() }, 400);
}, function () {
option.showloading(false);
});
}
});
option.parent.append(this.comment.create());
};
}
/*****************************************End Customer Record Communcation*********************************************/