Files
rockfish/wwwroot/js/app.purchaseEdit.js

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 ---------------------
})();