274 lines
8.9 KiB
JavaScript
274 lines
8.9 KiB
JavaScript
/*jslint browser : true, continue : true,
|
|
devel : true, indent : 2, maxerr : 50,
|
|
newcap : true, nomen : true, plusplus : true,
|
|
regexp : true, sloppy : true, vars : false,
|
|
white : true
|
|
*/
|
|
|
|
/*global $, app */
|
|
|
|
app.purchaseEdit = (function () {
|
|
"use strict";
|
|
//---------------- BEGIN MODULE SCOPE VARIABLES --------------
|
|
var stateMap = {},
|
|
onSave,
|
|
onDelete,
|
|
onRenew,
|
|
configModule,
|
|
initModule,
|
|
onPasteNotes;
|
|
//----------------- END MODULE SCOPE VARIABLES ---------------
|
|
|
|
//------------------- BEGIN UTILITY METHODS ------------------
|
|
//-------------------- END UTILITY METHODS -------------------
|
|
|
|
//------------------- BEGIN EVENT HANDLERS -------------------
|
|
|
|
onSave = function (event) {
|
|
|
|
event.preventDefault();
|
|
$.gevent.publish("app-clear-error");
|
|
//get form data
|
|
var formData = $("form").serializeArray({
|
|
checkboxesAsBools: true
|
|
});
|
|
|
|
var submitData = app.utilB.objectifyFormDataArray(formData);
|
|
//serializeArray method doesn't handle "Number" type inputs at all
|
|
//just ignores them so we need to do it here manually
|
|
submitData['quantity']=Number($("#quantity").val());
|
|
//I know, it's weird, but it wasn't required way back in the day and the plan is to replace rockfish with a Vue/vuetify app anyway.
|
|
|
|
console.log({ formData: formData, submitData: submitData });
|
|
//is this a new record?
|
|
if (stateMap.id != "new") {
|
|
//put id into the form data
|
|
submitData.id = stateMap.id;
|
|
|
|
app.api.update("purchase", submitData, function (res) {
|
|
if (res.error) {
|
|
$.gevent.publish("app-show-error", res.msg);
|
|
}
|
|
});
|
|
} else {
|
|
//create new record
|
|
app.api.create("purchase", submitData, function (res) {
|
|
if (res.error) {
|
|
$.gevent.publish("app-show-error", res.msg);
|
|
} else {
|
|
page(
|
|
"#!/purchaseEdit/" +
|
|
res.id +
|
|
"/" +
|
|
stateMap.context.params.site_id
|
|
);
|
|
return false;
|
|
}
|
|
});
|
|
}
|
|
return false; //prevent default
|
|
};
|
|
|
|
onRenew = function (event) {
|
|
event.preventDefault();
|
|
$.gevent.publish("app-clear-error");
|
|
|
|
if (stateMap.id == "new") {
|
|
$.gevent.publish(
|
|
"app-show-error",
|
|
"Save this record before attempting to renew it"
|
|
);
|
|
return false;
|
|
}
|
|
stateMap.id = "new";
|
|
|
|
//case 3396, no more renewal or dupe names
|
|
// var nm = $('#name').val();
|
|
// nm = "DUPE-" + nm;
|
|
// $('#name').val(nm);
|
|
|
|
//case 3396, set values accordingly
|
|
|
|
//Clear salesOrderNumber
|
|
$("#salesOrderNumber").val("");
|
|
|
|
//set purchaseDate to today
|
|
$("#purchaseDate").val(moment().toISOString().substring(0, 10));
|
|
|
|
//set expireDate to plus one year from today
|
|
$("#expireDate").val(
|
|
moment().add(1, "years").toISOString().substring(0, 10)
|
|
);
|
|
|
|
//clear the couponCode
|
|
$("#couponCode").val("");
|
|
|
|
//clear the notes
|
|
$("#notes").val("");
|
|
|
|
$("#renewNoticeSent").prop("checked", false);
|
|
$("#cancelDate").val("");
|
|
|
|
return false; //prevent default
|
|
};
|
|
|
|
//ONDELETE
|
|
//
|
|
onDelete = function (event) {
|
|
event.preventDefault();
|
|
$.gevent.publish("app-clear-error");
|
|
|
|
var r = confirm("Are you sure you want to delete this record?");
|
|
if (r == true) {
|
|
//==== DELETE ====
|
|
app.api.remove("purchase/" + stateMap.id, function (res) {
|
|
if (res.error) {
|
|
$.gevent.publish("app-show-error", res.msg);
|
|
} else {
|
|
//deleted, return to master list
|
|
page("#!/purchases/" + stateMap.context.params.site_id);
|
|
return false;
|
|
}
|
|
});
|
|
} else {
|
|
return false;
|
|
}
|
|
return false; //prevent default?
|
|
};
|
|
|
|
onPasteNotes = function (event) {
|
|
var clipboardData, pastedData;
|
|
var e = event.originalEvent;
|
|
|
|
// // Stop data actually being pasted into div
|
|
// e.stopPropagation();
|
|
// e.preventDefault();
|
|
|
|
// Get pasted data via clipboard API
|
|
clipboardData = e.clipboardData || window.clipboardData;
|
|
pastedData = clipboardData.getData("Text");
|
|
|
|
//Iterate through the lines looking for the SHareIt name=value lines (they all contain equal signs)
|
|
var lines = pastedData.split("\n"); // lines is an array of strings
|
|
var purchaseData = {};
|
|
|
|
// Loop through all lines
|
|
for (var j = 0; j < lines.length; j++) {
|
|
var thisLine = lines[j];
|
|
if (thisLine.includes("=")) {
|
|
var thisElement = thisLine.split("=");
|
|
purchaseData[thisElement[0].trim()] = thisElement[1].trim();
|
|
}
|
|
}
|
|
|
|
//Now have an object with the value pairs in it
|
|
if (purchaseData["ShareIt Ref #"]) {
|
|
$("#salesOrderNumber").val(purchaseData["ShareIt Ref #"]);
|
|
}
|
|
|
|
// if (purchaseData["E-Mail"]) {
|
|
// $("#email").val(purchaseData["E-Mail"]);
|
|
// }
|
|
};
|
|
|
|
//-------------------- END EVENT HANDLERS --------------------
|
|
|
|
//------------------- BEGIN PUBLIC METHODS -------------------
|
|
//CONFIGMODULE
|
|
//
|
|
configModule = function (context) {
|
|
stateMap.context = context.context;
|
|
if (stateMap.context.params.id) {
|
|
stateMap.id = stateMap.context.params.id;
|
|
}
|
|
};
|
|
|
|
//INITMODULE
|
|
//
|
|
initModule = function ($container) {
|
|
if (typeof $container === "undefined") {
|
|
$container = $("#app-shell-main-content");
|
|
}
|
|
|
|
$container.html(Handlebars.templates["app.purchaseEdit"]({}));
|
|
var title = "Purchase";
|
|
|
|
if (!stateMap.context.params.site_id) {
|
|
throw "app.purchaseEdit.js::initModule - There is no stateMap.context.params.site_id!";
|
|
}
|
|
|
|
//Append master record id as a hidden form field for referential integrity
|
|
$("<input />")
|
|
.attr("type", "hidden")
|
|
.attr("name", "siteId")
|
|
.attr("value", stateMap.context.params.site_id)
|
|
.appendTo("#frm");
|
|
|
|
//fetch entire site record to get name *and* customer id which is required for redundancy
|
|
|
|
//RFC - get site name and customer name for form
|
|
|
|
app.api.get("site/" + stateMap.context.params.site_id, function (res) {
|
|
if (res.error) {
|
|
$.gevent.publish("app-show-error", res.msg);
|
|
} else {
|
|
//Also append customer ID redundantly
|
|
$("<input />")
|
|
.attr("type", "hidden")
|
|
.attr("name", "customerId")
|
|
.attr("value", res.customerId)
|
|
.appendTo("#frm");
|
|
title = "Purchase - " + res.name;
|
|
|
|
if (stateMap.id != "new") {
|
|
//fetch existing record
|
|
app.api.get("purchase/" + stateMap.id, function (res) {
|
|
if (res.error) {
|
|
$.gevent.publish("app-show-error", res.msg);
|
|
} else {
|
|
//fill out form
|
|
app.utilB.formData(res);
|
|
}
|
|
});
|
|
} else {
|
|
//it's a new record, set default
|
|
$("#quantity").val(1);
|
|
$("#purchaseDate").val(
|
|
new Date().toISOString().substring(0, 10)
|
|
);
|
|
$("#expireDate").val(
|
|
moment().add(1, "years").toISOString().substring(0, 10)
|
|
);
|
|
$("#vendorName").val("ShareIt");
|
|
}
|
|
}
|
|
});
|
|
|
|
//Context menu
|
|
app.nav.contextClear();
|
|
app.nav.contextAddLink(
|
|
"purchases/" + stateMap.context.params.site_id,
|
|
"Purchases",
|
|
"basket"
|
|
);
|
|
|
|
// bind actions
|
|
$("#btn-save").bind("click", onSave);
|
|
$("#btn-delete").bind("click", onDelete);
|
|
$("#btn-renew").bind("click", onRenew);
|
|
$("#notes").bind("paste", onPasteNotes);
|
|
|
|
//Autocomplete
|
|
app.utilB.autoComplete("name", "purchase.name");
|
|
app.utilB.autoComplete("productCode", "purchase.productCode");
|
|
app.utilB.autoComplete("vendorName", "purchase.vendorName");
|
|
};
|
|
|
|
// return public methods
|
|
return {
|
|
configModule: configModule,
|
|
initModule: initModule
|
|
};
|
|
//------------------- END PUBLIC METHODS ---------------------
|
|
})();
|