Redesigned the querying for the sale duplicates screen to use aggregation; Finished the styling of the sale duplicate screen; Tested the functionality of sale duplicates; Added a way to show hidden (ignored) duplicates.

This commit is contained in:
Wynne Crisman
2017-05-26 11:17:32 -07:00
parent e1b0b19589
commit 210517a5c2
42 changed files with 15153 additions and 8505 deletions

57
server/cleanDates.js Normal file
View File

@@ -0,0 +1,57 @@
Meteor.methods({
// Cleans up all Date objects that don't have a time component. Removes any time component.
"cleanDates": function() {
// Update the sales dates.
let sales = Sales.find({}).fetch();
for(let i = 0; i < sales.length; i++) {
if(sales[i].date && _.isDate(sales[i].date)) {
let date = ~~(moment(sales[i].date).format("YYYYMMDD"));
console.log("Converted " + sales[i].date + " to " + date);
// Save to the database.
Sales.update(sales[i]._id, {$set: {date}}, function(err, id) {
if(err) console.log(err);
}, {bypassCollection2: true});
}
}
console.log("+++++++++++++++++++++++++++++++ FINISHED Sales +++++++++++++++++++++++++++++");
// Update the product price effective dates.
let products = Products.find({}).fetch();
for(let i = 0; i < products.length; i++) {
let product = products[i];
let hasChanges = false;
let prices = product.prices;
if(prices) {
for(let prop in prices) {
if(prices[prop] && prices[prop].effectiveDate) {
if(_.isDate(prices[prop].effectiveDate)) {
let oldDate = prices[prop].effectiveDate;
prices[prop].effectiveDate = ~~(moment(prices[prop].effectiveDate).format("YYYYMMDD"));
console.log("Converted " + oldDate + " to " + prices[prop].effectiveDate + " for the product " + product.name);
hasChanges = true;
}
}
}
}
// Save the changes.
if(hasChanges) {
Products.update(product._id, {$set: {prices}}, function(err, id) {
if(err) console.log(err);
}, {validate: false, bypassCollection2: true});
}
}
}
});

48
server/exportMissing.js Normal file
View File

@@ -0,0 +1,48 @@
let fs = require('fs');
Meteor.methods({
"exportMissingSales": function() {
try {
let products = Products.find({}).fetch();
let venues = Venues.find({}).fetch();
let measures = Measures.find({}).fetch();
let productNameMap = {};
let venueNameMap = {};
let measureNameMap = {};
let sales = Sales.find({createdAt: {$gte: moment.utc("2017-01-28", "YYYY-MM-DD").toDate(), $lt: moment.utc("2017-01-29", "YYYY-MM-DD").toDate()}}).fetch();
let output = "";
for(let i = 0; i < products.length; i++) {
productNameMap[products[i]._id] = products[i].name;
}
for(let i = 0; i < venues.length; i++) {
venueNameMap[venues[i]._id] = venues[i].name;
}
for(let i = 0; i < measures.length; i++) {
measureNameMap[measures[i]._id] = measures[i].name;
}
for(let i = 0; i < sales.length; i++) {
let sale = sales[i];
let saleOutput = '{\n\t"date": ' + sale.date + ',\n\t "amount": ' + sale.amount + ',\n\t "price": ' + sale.price + ',\n\t "venue": "' + venueNameMap[sale.venueId] + '",\n\t "product": "' + productNameMap[sale.productId] + '",\n\t "measure": "' + measureNameMap[sale.measureId] + '",\n\t "createdAt": "' + sale.createdAt + '"\n}';
if(output.length > 0) {
output += ",\n";
}
else {
output = "[";
}
output += saleOutput;
}
fs.writeFile("./exportedMissingSales.json", output, function(err) {
if(err) console.log(err);
});
output += "]";
console.log(output);
} catch(err) {
console.log(err);
}
}
});

View File

@@ -0,0 +1,24 @@
Meteor.methods({
"checkDuplicateSales": function() {
try {
let sales = Sales.find({}).fetch();
let duplicateCount = 0;
for(let i = 0; i < sales.length; i++) {
let next = missingData[i];
let count = Sales.find({date: next.date, measureId: next.measureId, productId: next.productId, venueId: next.venueId, price: next.price, amount: next.amount}).count();
if(count > 1) {
console.log("This sale has a duplicate:");
console.log(next);
}
}
console.log("Total Duplicate Count: " + duplicateCount);
console.log("Finished Checking Duplicates");
Meteor.log.info("xxx");
} catch(err) {
console.log(err);
}
}
});

5469
server/importMissing.js Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -17,3 +17,5 @@ if (!process.env.MAIL_URL) {
}
// console.log("Mail settings: " + process.env.MAIL_URL);
if(Meteor.log) Meteor.log.info("Server Started");