Permalink
Cannot retrieve contributors at this time
Fetching contributors…

$(function() { | |
Parse.initialize('d5tdL4NAt9kJFg9Uj07oKbO6KT8Esva4wQi8MPfK'); | |
Parse.serverURL = 'http://hydroparseserver.xt6rpkprba.us-east-1.elasticbeanstalk.com/parse'; | |
$("document").ready(function() { | |
var graphShowing = false; | |
var graphInitialised = false; | |
var test = {}; | |
var realTimeChart = {}; | |
var isInitialLoad = true; | |
var showRealtimeCharts = false; | |
var sortBy = 'date'; | |
var order = 'DESC'; | |
var currentQuery = null; | |
var searching = false; | |
var state = []; | |
const QUERY_LIMIT = 40 | |
var QUERY_OFFSET = 0 | |
const clientSocket = io.connect("http://hydrorealtimeserver.ncueqnzcnu.us-east-1.elasticbeanstalk.com:3000"); | |
var currentUser = Parse.User.current(); | |
var reports = []; | |
if (currentUser) { | |
if(showRealtimeCharts) { | |
initSocket(currentUser); | |
} | |
init(currentUser); | |
reloadReports(); | |
} else { | |
window.location.href = "/login"; | |
} | |
function reloadReports() { | |
getReports(currentUser, null, function(data, error) { | |
if(error === null) { | |
reports = data; | |
if(currentUser.get("admin") === false) { | |
//renderRecentTest(data[0]); | |
} | |
buildRows(reports, true); | |
} | |
}); | |
} | |
$(window).scroll(function(e) { | |
fetchHelper() | |
}) | |
$('#logout').on('click', function() { | |
logout() | |
}) | |
$('#loadMore').on('click', function() { | |
fetchHelper() | |
}) | |
function fetchHelper() { | |
if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight + 50) { | |
// Show the spinner | |
var lm = document.querySelector("#loadMore") | |
lm.innerHTML = "Loading More <i class='fa fa-spinner fa-spin'></i>" | |
// Emulate a pause to show spinner | |
setTimeout(function() { | |
fetchMore(function(rowsLeft) { | |
console.log("Rows left is: ", rowsLeft) | |
console.log("Offset is: ", QUERY_OFFSET) | |
if(rowsLeft) { | |
QUERY_OFFSET += QUERY_LIMIT | |
lm.innerHTML = "Load More" | |
} else { | |
currentQuery = null | |
QUERY_OFFSET = 0 | |
lm.innerHTML = "End of results" | |
} | |
}) | |
}, 200) | |
} | |
} | |
$('body').on('click', 'th', function(event) { | |
var label = event.target.innerText.toUpperCase().trim(); | |
order = order === 'DESC' ? 'ASC' : 'DESC'; | |
if(label.indexOf('CUSTOMER') > -1) { | |
sortBy = 'customerName'; | |
sort('customerName') | |
} else if(label.indexOf('MAN.') > -1) { | |
sortBy = 'date'; | |
sort('manufactureDate'); | |
} else if(label.indexOf('SERIAL') > -1) { | |
sortBy = 'serialNumber'; | |
sort('serialNumber'); | |
} else if(label.indexOf('PART') > -1) { | |
sortBy = 'partNumber'; | |
sort('partNumber'); | |
} else if(label.indexOf('DESCRIPTION') > -1) { | |
sortBy = 'description'; | |
sort('description'); | |
} else { | |
} | |
buildRows(state.tests, false); | |
}); | |
function sort(key) { | |
console.log(state); | |
console.log('sorting by key: ', key); | |
if(state.tests.length > 0) { | |
if(key === 'serialNumber' || key === 'partNumber') | |
{ | |
var k = key === 'serialNumber' ? 'IntrSerial' : 'ItemCode' | |
console.log("Key is: ", key) | |
state.tests.sort(function(a, b) { | |
if(a.assembly[0][k] > b.assembly[0][k]) return (order === 'DESC' ? -1 : 1); | |
if(a.assembly[0][k] < b.assembly[0][k]) return (order === 'DESC' ? 1 : -1); | |
return 0; | |
}); | |
} | |
else | |
{ | |
console.log("Key is: ", key) | |
state.tests.sort(function(a, b) { | |
if(a[key] > b[key]) return (order === 'DESC' ? -1 : 1); | |
if(a[key] < b[key]) return (order === 'DESC' ? 1 : -1); | |
return 0; | |
}); | |
} | |
} | |
} | |
$('#toDate').change(function(event) { | |
var toDate = event.target.value; | |
var fromDate = $('#fromDate').val(); | |
var searchValue = $('#searchField').val(); | |
search(searchValue); | |
}); | |
$('#fromDate').change(function(event) { | |
var fromDate = event.target.value; | |
var toDate = $('#toDate').val(); | |
var searchValue = $('#searchField').val(); | |
search(searchValue); | |
}); | |
function init(user) { | |
state = { | |
tests : [], | |
selected : [], | |
searchTerm : "" | |
}; | |
initEventListeners(); | |
var customerName = toTitleCase(user.get("customerName")); | |
$("#customerName").html(customerName); | |
} | |
function initEventListeners() { | |
// Event handlers | |
$("#stream-button").click(function() { | |
if(showRealtimeCharts) { | |
graphShowing = !graphShowing; | |
$("#chartWrapper").animate({ | |
height: graphShowing ? "700px" : "0px" | |
}, 250); | |
} | |
}); | |
$("#profile-image").click(function(event) { | |
event.preventDefault(); | |
var wrapper = $("#more-options-wrapper"); | |
var navBar = $("#customer-header"); | |
if(wrapper !== null && typeof wrapper !== "undefined") { | |
if(wrapper.hasClass("active")) { | |
navBar.removeClass("active"); | |
wrapper.removeClass("active"); | |
} else { | |
navBar.addClass("active"); | |
wrapper.addClass("active"); | |
} | |
} | |
}); | |
$("input:text").keyup(function(event) { | |
event.preventDefault(); | |
var value = this.value.trim(); | |
clearTimeout($.data(this, 'timer')); | |
var wait = setTimeout(search.bind(this, value), 1250); | |
$(this).data('timer', wait); | |
}); | |
$("body").on("click", ".checkbox", function(event) { | |
const elem = event.target; | |
var master_checkbox = $(".master_checkbox")[0]; | |
if(elem.id === master_checkbox.id && elem.className !== "master_checkbox") { | |
master_checkbox.checked = !master_checkbox.checked; | |
} | |
updateQuantity(elem); | |
}); | |
$('body').on('click', '.latestDetail', function(event) { | |
var id = event.target.id; | |
if(id && (id.indexOf('print_') > -1 || id.indexOf('save_') > -1 || id.indexOf('check_') > -1)) { | |
return; | |
} | |
if(event.target.className !== 'latestDetail') { | |
var i = 0; | |
var elem = event.target; | |
while(i < 10) { | |
if(elem.parentElement !== null) { | |
elem = elem.parentElement; | |
if(elem.className === 'latestDetail') { | |
id = elem.id; | |
i = 10; | |
} | |
} | |
i++; | |
} | |
} | |
if(id) { | |
var objectId = ""; | |
if(id.substr(0, 5).trim().toUpperCase() === "VIEW_") { | |
objectId = id.substr(5).trim(); | |
window.location = "/pdf" + objectId; | |
} | |
else if(id.substr(0, 6).trim().toUpperCase() === "PRINT_") { | |
objectId = id.substr(6).trim(); | |
} | |
else if(id.substr(0, 5).trim().toUpperCase() === "SAVE_") { | |
objectId = id.substr(5).trim(); | |
} | |
} | |
}); | |
$("body").on("click", ".master_checkbox", function(event) { | |
const elem = event.target; | |
// Find the child node on this page with the same value | |
$(".checkbox").each(function(index) { | |
if(elem.id === this.id) { | |
this.checked = !this.checked; | |
} | |
}.bind(this)); | |
updateQuantity(elem); | |
}); | |
$("body").on("click", ".row-buttons span", function(event) { | |
var id = event.target.id; | |
if(id) { | |
var objectId = ""; | |
if(id.substr(0, 5).trim().toUpperCase() === "VIEW_") { | |
objectId = id.substr(5).trim(); | |
window.location = "/pdf" + objectId; | |
} | |
else if(id.substr(0, 6).trim().toUpperCase() === "PRINT_") { | |
objectId = id.substr(6).trim(); | |
} | |
else if(id.substr(0, 5).trim().toUpperCase() === "SAVE_") { | |
objectId = id.substr(5).trim(); | |
} | |
} | |
}); | |
} | |
function initSocket(user) { | |
console.log("Initialising socket for streamId " + user.id); | |
clientSocket.emit("client-connect", { | |
streamId : user.id | |
}); | |
clientSocket.on("client connected", function() { | |
console.log("Client connected, attempting to subscribe"); | |
clientSocket.emit("subscribe"); | |
}); | |
clientSocket.on("subscribe to stream", function() { | |
console.log("Attempting to subscribe to the broadcasting device"); | |
clientSocket.emit("subscribe"); | |
}); | |
clientSocket.on("subscribed", function(payload) { | |
console.log("subscribed to stream"); | |
console.log(payload); | |
if(payload.error === 500) { | |
initGraph(); | |
$("#stream-button").addClass("visible"); | |
$("#stream-button").animate({ | |
opacity: 1.0 | |
}, 300); | |
} | |
}); | |
clientSocket.on("stream updated", function(payload) { | |
test = payload; | |
updateGraphRegion(); | |
}); | |
clientSocket.on("device disconnected", function() { | |
console.log("The device disconnected from the server"); | |
test = []; | |
$("#stream-button").animate({ | |
opacity: 0.0 | |
}, 300, function() { | |
$("#stream-button").removeClass("visible"); | |
}) | |
}) | |
} | |
function initGraph() { | |
Chart.defaults.global.responsive = true; | |
var ctx = $("#realTimeChart"); | |
realTimeChart = new Chart(ctx, { | |
type : 'line', | |
data : { | |
labels: [0], | |
datasets: [ | |
{ | |
label: "Test 1", | |
fill: true, | |
lineTension: 0.25, | |
backgroundColor: "rgba(75,192,192,0.4)", | |
borderColor: "rgba(75,192,192,1)", | |
borderCapStyle: 'butt', | |
borderDash: [], | |
borderDashOffset: 0.0, | |
borderJoinStyle: 'miter', | |
pointBorderColor: "rgba(75,192,192,1)", | |
pointBackgroundColor: "#fff", | |
pointBorderWidth: 1, | |
pointHoverRadius: 5, | |
pointHoverBackgroundColor: "rgba(75,192,192,1)", | |
pointHoverBorderColor: "rgba(220,220,220,1)", | |
pointHoverBorderWidth: 2, | |
pointRadius: 1, | |
pointHitRadius: 10, | |
data: [0] | |
} | |
] | |
} | |
}); | |
graphInitialised = true; | |
} | |
function search(value) { | |
toggleSearch(true); | |
state = { | |
tests : [], | |
selected : [], | |
searchTerm : "" | |
}; | |
var TestData = Parse.Object.extend("TestData"); | |
console.log("QUERYING WITH ", value); | |
var fromDate = $('#fromDate').val(); | |
var toDate = $('#toDate').val(); | |
var betweenQuery = new Parse.Query(TestData); | |
if(currentUser.get("admin") === false) { | |
betweenQuery.equalTo("customerName", currentUser.get("customerName")); | |
} else { | |
betweenQuery.contains("customerName", ""); | |
} | |
betweenQuery.greaterThanOrEqualTo("manufacturedDate", new Date(fromDate)); | |
betweenQuery.lessThanOrEqualTo("manufacturedDate", new Date(toDate)); | |
if(value) { | |
// Extract a potential date from the value | |
var reTYD = /(today|yesterday|\d{1,2}\/\d{1,2}\/\d{4})/i; | |
var searchComponents = value.split(" "); | |
var date = ""; | |
searchComponents.forEach(function(string){ | |
var match = value.match(reTYD); | |
if(match) date = match; | |
}); | |
if(date) { | |
switch(date[0].toUpperCase()) { | |
case "TODAY": | |
date = new Date(); | |
break; | |
case "YESTERDAY": | |
date = new Date(new Date().getDate() - 1); | |
break; | |
default : | |
// Create a safe date string | |
var components = date[0].split("/"); | |
var newValue = ""; | |
components.forEach(function(digit) { | |
if(digit.length === 1) { | |
newValue += "0" + digit + "/" | |
} else { | |
newValue += digit + "/" | |
} | |
}); | |
newValue = newValue.substr(0, newValue.length-1); | |
date = newValue.match(/^(\d{2})\/(\d{2})\/(\d{4})$/); | |
date = new Date( date[3], date[2]-1, date[1] ); | |
break; | |
} | |
} | |
if(currentUser) { | |
var testTypeQuery = new Parse.Query(TestData); | |
if(currentUser.get("admin") === false) { | |
testTypeQuery.equalTo("customerName", currentUser.get("customerName")); | |
} else { | |
testTypeQuery.contains("customerName", ""); | |
} | |
testTypeQuery.equalTo("testType", value.trim()); | |
/* | |
var invoiceQuery = new Parse.Query(TestData); | |
if(currentUser.get("admin") === false) { | |
testTypeQuery.equalTo("customerName", currentUser.get("customerName")); | |
} else { | |
testTypeQuery.contains("customerName", ""); | |
} | |
invoiceQuery.equalTo("invoiceNumber", Number(value)); | |
*/ | |
var orderQuery = new Parse.Query(TestData); | |
if(currentUser.get("admin") === false) { | |
testTypeQuery.equalTo("customerName", currentUser.get("customerName")); | |
} else { | |
testTypeQuery.contains("customerName", ""); | |
} | |
orderQuery.equalTo("orderNumber", Number(value)); | |
var descriptionQuery = new Parse.Query(TestData); | |
if(currentUser.get("admin") === false) { | |
testTypeQuery.equalTo("customerName", currentUser.get("customerName")); | |
} else { | |
testTypeQuery.contains("customerName", ""); | |
} | |
descriptionQuery.contains("description", value.trim().toUpperCase()); | |
var customerNameQuery = new Parse.Query(TestData); | |
if(currentUser.get("admin") === true) { | |
customerNameQuery.contains("customerName", value.trim().toUpperCase()); | |
} else { | |
customerNameQuery.equalTo("customerName", ""); | |
} | |
var query = new Parse.Query.or(testTypeQuery, descriptionQuery, customerNameQuery); | |
if(date instanceof Date) { | |
var dateQuery = new Parse.Query(TestData); | |
if(currentUser.get("admin") === false) { | |
testTypeQuery.equalTo("customerName", currentUser.get("customerName")); | |
} | |
var field = "manufacturedDate"; | |
if(value.indexOf(">") > -1) { | |
console.log("SEARCHING DATES > than ", date) | |
dateQuery.greaterThanOrEqualTo("manufacturedDate", date); | |
} else if(value.indexOf("<") > -1) { | |
console.log("SEARCHING DATES < than ", date) | |
dateQuery.lessThanOrEqualTo("manufacturedDate", date) | |
} else { | |
console.log("SEARCHING DATES equal to date") | |
dateQuery.equalTo("manufacturedDate", date); | |
} | |
query = new Parse.Query.or(testTypeQuery, orderQuery, descriptionQuery, dateQuery, betweenQuery); | |
} | |
if(order == 'DESC') | |
query.descending('manufacturedDate'); | |
else | |
query.ascending('manufacturedDate'); | |
query.limit(QUERY_LIMIT); | |
console.log(query) | |
getReports(currentUser, query, function(data, error) { | |
console.log(data) | |
console.log(error) | |
if(error === null && data.length > 0) { | |
toggleSearch(false); | |
updateQuantity(null); | |
buildRows(data, true); | |
} else { | |
serialQuery(value, function(data, error) { | |
toggleSearch(false); | |
if(error === null) { | |
updateQuantity(null); | |
buildRows(data, true); | |
} | |
}); | |
} | |
}); | |
} | |
} else { | |
if(order == 'DESC') | |
betweenQuery.descending('manufacturedDate'); | |
else | |
betweenQuery.ascending('manufacturedDate'); | |
betweenQuery.limit(QUERY_LIMIT); | |
getReports(currentUser, betweenQuery, function(data, error) { | |
if(error === null && data.length > 0) { | |
toggleSearch(false); | |
updateQuantity(null); | |
buildRows(data, true); | |
} else { | |
serialQuery(value, function(data, error) { | |
toggleSearch(false); | |
if(error === null) { | |
updateQuantity(null); | |
buildRows(data, true); | |
} | |
}); | |
} | |
}); | |
} | |
} | |
function serialQuery(value, callback) { | |
if(!searching) { | |
searching = true | |
console.log("Running serila query with: ", value) | |
value = value.toUpperCase().trim(); | |
var TestData = Parse.Object.extend("TestData"); | |
var SerialQuery = new Parse.Query(TestData); | |
var PartQuery = new Parse.Query(TestData); | |
var LCSerialQuery = new Parse.Query(TestData); | |
var LCPartQuery = new Parse.Query(TestData); | |
var fromDate = $('#fromDate').val(); | |
var toDate = $('#toDate').val(); | |
SerialQuery.contains("serialNumber", value) | |
LCSerialQuery.contains("serialNumber", value.toLowerCase()) | |
PartQuery.contains("partNumber", value) | |
LCPartQuery.contains("partNumber", value.toLowerCase()) | |
var query = new Parse.Query.or(SerialQuery, PartQuery, LCSerialQuery, LCPartQuery); | |
query.greaterThanOrEqualTo("manufacturedDate", new Date(fromDate)); | |
query.lessThanOrEqualTo("manufacturedDate", new Date(toDate)); | |
query.limit(QUERY_LIMIT) | |
if(currentUser.get("admin") === false) { | |
query.equalTo("customerName", currentUser.get("customerName")); | |
} else { | |
query.contains("customerName", ""); | |
} | |
if(order == 'DESC') { | |
query.descending('manufacturedDate'); | |
} else { | |
query.ascending('manufacturedDate'); | |
} | |
query.find({ | |
success: function(data) { | |
searching = false | |
currentQuery = query | |
var results = []; | |
data.forEach(function(object) { | |
var found = false; | |
results.some(function(result) { | |
found = result.serialNumber === object.get("assembly")[0].IntrSerial | |
return found | |
}); | |
if(!found) { | |
results.push({ | |
objectId : object.id, | |
testDate : object.get("testDate"), | |
assembly: object.get("assembly"), | |
customerName : object.get("customerName"), | |
invoiceNumber : object.get("invoiceNumber"), | |
orderNumber : object.get("orderNumber"), | |
description : object.get("description"), | |
serialNumber : object.get("assembly")[0].IntrSerial, | |
manufactureDate : new Date(object.get("manufactureDate")), | |
serializedObject : object | |
}) | |
} | |
}); | |
console.log("RESULTS IS: ", results) | |
callback(results, null); | |
}, | |
error: function(error) { | |
searching = false | |
currentQuery = null | |
console.log("Error retrieving results for this user"); | |
console.log(error); | |
callback({}, error); | |
} | |
}) | |
} | |
} | |
function fetchMore(cb) { | |
if(currentQuery && !searching) { | |
searching = true | |
currentQuery.skip(QUERY_OFFSET+QUERY_LIMIT) | |
currentQuery.find({ | |
success: function(data) { | |
searching = false | |
if(data.length > 0) { | |
data.forEach(function(object) { | |
var o = { | |
objectId : object.id, | |
testDate : object.get("testDate"), | |
assembly: object.get("assembly"), | |
customerName : object.get("customerName"), | |
invoiceNumber : object.get("invoiceNumber"), | |
orderNumber : object.get("orderNumber"), | |
description : object.get("description"), | |
serialNumber : object.get("assembly")[0].IntrSerial, | |
manufactureDate : new Date(object.get("manufactureDate")), | |
serializedObject : object | |
} | |
addRow(o) | |
state.tests.push(o) | |
}) | |
if(data.length >= QUERY_LIMIT) { | |
cb(true) | |
} else { | |
console.log("Said false because no data left") | |
currentQuery = null | |
cb(false) | |
} | |
} else { | |
console.log("Said false because there was an error") | |
cb(true) | |
} | |
}, | |
error: function(error) { | |
console.log("Said false because there was an error") | |
cb(true) | |
searching = false | |
currentQuery = null | |
console.log("Error retrieving results for this user"); | |
} | |
}) | |
} else { | |
console.log("Search already running") | |
cb(true) | |
} | |
} | |
function toggleSearch(isSearching) { | |
var searchSpinner = document.getElementById('search-spinner'); | |
if(searchSpinner) { | |
if(isSearching) { | |
searchSpinner.className = 'visible'; | |
} else { | |
searchSpinner.className = 'hidden'; | |
} | |
} | |
} | |
function updateQuantity(elem) { | |
if(elem && elem.id) { | |
var objectId = elem.id.replace("check_", "").trim(); | |
var selectedTest = null; | |
state.tests.forEach(function(test) { | |
if(test.objectId === objectId) { | |
selectedTest = test; | |
} | |
}); | |
if(selectedTest !== null) { | |
var found = false; | |
state.selected.forEach(function(test, i) { | |
if(test.objectId === selectedTest.objectId) { | |
state.selected.splice(i, 1); | |
found = true; | |
} | |
}); | |
if(!found) { | |
state.selected.push(selectedTest); | |
} | |
} | |
} else { | |
var checkboxes = $("input:checkbox"); | |
checkboxes.each(function(index) { | |
this.checked = false; | |
}.bind(this)); | |
} | |
$("#quantity").html(state.selected.length); | |
} | |
function updateGraphRegion() { | |
if(graphInitialised && isInitialLoad) { | |
console.log("Checking if we already have stream data"); | |
console.log(test); | |
if(typeof test.testData !== "undefined") { | |
console.log("Stream had existing data, the "); | |
if (test.testData[1].length > 0) { | |
realTimeChart.data.datasets[0].data = test.testData[1]; | |
test.testData[1].map(function() { | |
realTimeChart.data.labels.push(realTimeChart.data.labels[realTimeChart.data.labels.length - 1] + 1); | |
}) | |
} | |
} | |
} | |
else if(graphInitialised && !isInitialLoad) { | |
console.log("Adding new value") | |
realTimeChart.data.datasets[0].data.push(test.newestValue); | |
realTimeChart.data.labels.push(realTimeChart.data.labels[realTimeChart.data.labels.length - 1] + 1); | |
normaliseChart(); | |
realTimeChart.update(); | |
} | |
isInitialLoad = false; | |
} | |
function normaliseChart() { | |
if(realTimeChart.data.datasets[0].data.length > 100) { | |
////console.log("NORMALISING THE DATA") | |
var newData = []; | |
var newLabels = []; | |
var newSecond = 1; | |
var normalisedValue = 0; | |
var normalisedCounter = 0; | |
var normalisedDivider = Math.floor(realTimeChart.data.datasets[0].data.length % 10); | |
for(var i = 0; i < realTimeChart.data.datasets[0].data.length; i++) { | |
var value = realTimeChart.data.datasets[0].data[i]; | |
if(normalisedCounter < normalisedDivider) { | |
normalisedValue += value; | |
normalisedCounter++; | |
} else { | |
newData.push(normalisedValue / normalisedDivider); | |
newLabels.push(newSecond); | |
newSecond++; | |
normalisedCounter = 0; | |
normalisedValue = 0; | |
} | |
} | |
realTimeChart.data.datasets[0].data = newData; | |
realTimeChart.data.labels = newLabels; | |
} | |
} | |
function getReports(user, query, callback) { | |
if(!searching) { | |
searching = true | |
var TestData = Parse.Object.extend("TestData"); | |
if(query === null) { | |
query = new Parse.Query(TestData); | |
var fromDate = $('#fromDate').val(); | |
var toDate = $('#toDate').val(); | |
if(currentUser.get("admin") === false) { | |
query.equalTo("customerName", currentUser.get("customerName")); | |
} else { | |
query.contains("customerName", ""); | |
} | |
query.greaterThanOrEqualTo("manufacturedDate", new Date(fromDate)); | |
query.lessThanOrEqualTo("manufacturedDate", new Date(toDate)); | |
if(order == 'DESC') | |
query.descending('manufacturedDate'); | |
else | |
query.ascending('manufacturedDate'); | |
query.limit(QUERY_LIMIT); | |
} | |
if(user.get("admin") === true) { | |
query.contains("customerName", ""); | |
} | |
query.find({ | |
success: function(data) { | |
searching = false | |
currentQuery = query | |
callback(data.map((object) => { | |
return { | |
objectId : object.id, | |
testDate : object.get("testDate"), | |
assembly: object.get("assembly"), | |
customerName : object.get("customerName"), | |
invoiceNumber : object.get("invoiceNumber"), | |
orderNumber : object.get("orderNumber"), | |
description : object.get("description"), | |
serialNumber : object.get("assembly")[0].IntrSerial, | |
manufactureDate : new Date(object.get("manufactureDate")), | |
serializedObject : object | |
} | |
}), null) | |
}, | |
error: function(error) { | |
searching = false | |
currentQuery = null | |
console.log("Error retrieving results for this user"); | |
console.log(error); | |
callback({}, error); | |
} | |
}) | |
} else { | |
callback({}, "Search is already running") | |
} | |
} | |
function buildRows(data, shouldPush) { | |
if(data.length > 0) { | |
const orderArrow = `<i class="fa fa-caret-${ order === 'DESC' ? 'down' : 'up'}">`; | |
const parentNode = $("#reportListInject"); | |
parentNode.empty(); | |
var child = ''; | |
child += `<thead id='table-header'>`; | |
child += ` <tr>`; | |
if(currentUser.get("admin") === true) { | |
child += `<th>Customer Name ${orderArrow}</th>`; | |
} | |
child += ` <th>Serial # ${orderArrow}</th>`; | |
child += ` <th>Part # ${orderArrow}</th>`; | |
child += ` <th>Man. Date ${orderArrow}</th>`; | |
child += ` <th>Description ${orderArrow}</th>`; | |
child += ` </tr>`; | |
child += `</thead>`; | |
child += '<tbody id="reportBody"></tbody>'; | |
parentNode.append(child); | |
data.map((object) => { | |
object.checked = false; | |
if(shouldPush) { state.tests.push(object); } | |
addRow(object); | |
}); | |
} else { | |
const parentNode = $("#reportListInject"); | |
parentNode.empty(); | |
child = `<div id="">Sorry, no results match your query</div>`; | |
parentNode.append(child); | |
} | |
} | |
function viewReport(objectId) { | |
window.location = '/pdf' + objectId; | |
} | |
function addRow(data) { | |
var objectId = data.objectId; | |
var url = "/pdf" + objectId; | |
var orderNumber = data.orderNumber; | |
var customerName = data.customerName; | |
var assembly = data.assembly[0]; | |
var description = data.description; | |
var testDate = getDateStringWithFullMonth(data.manufactureDate != null ? data.manufactureDate : data.testDate); | |
var testType = data.serializedObject.get("testType"); | |
if(typeof(testType) === "undefined") | |
testType = "CUSTOM"; | |
const parentNode = $("#reportBody"); | |
if(parentNode) { | |
var row = document.createElement('tr'); | |
var node = ''; | |
if(currentUser.get("admin") === true) { | |
node += `<td><a href="${url}">${customerName.toLowerCase()}</td>`; | |
} | |
node += ` <td><a href="${url}">${data.assembly[0].IntrSerial}</td>`; | |
node += ` <td><a href="${url}">${data.assembly[0].ItemCode}</td>`; | |
node += ` <td><a href="${url}">${testDate}</td>`; | |
node += ` <td><a href="${url}">${data.description.toLowerCase()}</td>`; | |
row.innerHTML = node; | |
row.addEventListener('click', viewReport.bind(this, objectId)); | |
parentNode.append(row); | |
} | |
//var node = document.createElement("tr"); | |
//node.innerHTML = '<td>' + testDate + '</td><td>' + data.invoiceNumber + '</td><td>' + data.orderNumber + '</td><td>' + data.description + '</td>'; | |
//var childNodeContent = ``; | |
//childNodeContent += `<div class="col latestWrapper">`; | |
//childNodeContent += `<div class="latestDetail" id="view_${data.objectId}">`; | |
//if(currentUser.get('admin') === false) { | |
//childNodeContent += `<div class="detail-wrapper"><div class="hidden">${data.objectId}</div><span class="col-date">${testDate}</span><span class="col-invoice">${assembly.Inv}</span><span class="col-po">${assembly.NumAtCard}</span><span class="col-desc">${data.description}</span></div>`; | |
//} else { | |
//childNodeContent += `<div class="detail-wrapper"><div class="hidden">${data.objectId}</div><span class="col-name">${}</span><span class="col-date">${testDate}</span><span class="col-invoice">${assembly.Inv}</span><span class="col-po">${assembly.NumAtCard}</span><span class="col-desc">${data.description}</span></div>`; | |
//} | |
//childNodeContent += `<div class="row-buttons"><span id="view_${data.objectId}">View</span><span id="print_${data.objectId}">Print</span><span id="save_${data.objectId}">Save</span><input type="checkbox" id="check_${data.objectId}" class="checkbox" defaultChecked="false" /></div>`; | |
//childNodeContent += `<div class="row-buttons"><span id="view_${data.objectId}">View</span></div>`; | |
//childNodeContent += `</div>`; | |
//childNodeContent += ``; | |
} | |
function renderRecentTest(test) { | |
var parentNode = $("#latest"); | |
var childNodeContent = ``; | |
if(test) { | |
var date = test.testDate !== null ? test.testDate : test.manufactureDate; | |
childNodeContent += `<p class="testLabel">LATEST ORDER</p>`; | |
childNodeContent += `<div class="col latestWrapper">`; | |
childNodeContent += `<div class="latestDetail" id="view_${test.objectId}">`; | |
childNodeContent += `<div class="detail-wrapper"><div class="hidden">${test.objectId}</div><span class="col-date">${getDateStringWithFullMonth(date)}</span><span class="col-invoice">${test.invoiceNumber}</span><span class="col-po">${test.orderNumber}</span><span class="col-desc">${test.description}</span></div>`; | |
childNodeContent += `<div class="row-buttons"><span id="view_${test.objectId}">View</span><span id="print_${test.objectId}">Print</span><span id="save_${test.objectId}">Save</span><input id="check_${test.objectId}" type="checkbox" class="master_checkbox" defaultChecked="false" /></div>`; | |
childNodeContent += `</div>`; | |
childNodeContent += ``; | |
parentNode.append(childNodeContent) | |
} else { | |
childNodeContent = "<div class='col latestWrapper empty'>Sorry, it appears that you don't have any orders with us yet.</div>"; | |
parentNode.append(childNodeContent); | |
} | |
} | |
function logout() { | |
Parse.User.logOut().then(() => { | |
window.location.href = "/login"; | |
}); | |
} | |
function datesMatch(date, dateToCompare) { | |
var dateString = getDateAsString(date) | |
var dateToCompareString = getDateAsString(dateToCompare) | |
return dateString === dateToCompareString | |
} | |
function getDateAsString(date) { | |
var month = date.getUTCMonth() + 1 | |
var day = date.getUTCDate() | |
var year = date.getUTCFullYear() | |
return day + "/" + month + "/" + year | |
} | |
function getDateStringWithFullMonth(date) { | |
var month = date.getUTCMonth() + 1 | |
var monthString = "" | |
var day = date.getUTCDate() | |
var year = date.getUTCFullYear() | |
switch(month) { | |
case 1 : monthString = "Jan"; break; | |
case 2 : monthString = "Feb"; break; | |
case 3 : monthString = "Mar"; break; | |
case 4 : monthString = "Apr"; break; | |
case 5 : monthString = "May"; break; | |
case 6 : monthString = "Jun"; break; | |
case 7 : monthString = "Jul"; break; | |
case 8 : monthString = "Aug"; break; | |
case 9 : monthString = "Sep"; break; | |
case 10: monthString = "Oct"; break; | |
case 11: monthString = "Nov"; break; | |
case 12: monthString = "Dec"; break; | |
default: monthString = ""; break; | |
} | |
return `${monthString} ${day}, ${year}` | |
} | |
function toTitleCase(str) | |
{ | |
return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); | |
} | |
}) | |
}); |