• Notifications

/flowvalve-website Private

Permalink
Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
executable file 939 lines (865 sloc) 40.6 KB
$(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();});
}
})
});