Added a lot of functionality; Fixed a large number of bugs; Removed Bootstrap from the mix and replaced it with SimpleGrid and some choice bits from the bootstrap system; Pricing, Sales, and Product management all now function at basic levels.
This commit is contained in:
@@ -1,13 +1,26 @@
|
||||
|
||||
import './Pricing.html';
|
||||
|
||||
let QUERY_LIMIT = 20;
|
||||
let PREFIX = "Pricing.";
|
||||
|
||||
Meteor.subscribe("products");
|
||||
let measuresSubscription = Meteor.subscribe("measures");
|
||||
Tracker.autorun(function() {
|
||||
Meteor.subscribe("products");
|
||||
Meteor.subscribe("measures");
|
||||
let ready = measuresSubscription.ready();
|
||||
|
||||
if(ready) {
|
||||
console.log("setting selected measure session var");
|
||||
let firstMeasure = Meteor.collections.Measures.findOne({}, {sort: {order: 1}, fields: {_id: 1}});
|
||||
Session.set(PREFIX + "selectedMeasure", firstMeasure._id);
|
||||
}
|
||||
});
|
||||
|
||||
Template.Pricing.onCreated(function() {
|
||||
});
|
||||
Template.Pricing.onRendered(function() {
|
||||
this.$('input[name="date"]').val(new Date().toDateInputValue());
|
||||
// this>$('select[name="measures"]').val()
|
||||
});
|
||||
Template.Pricing.helpers({
|
||||
measures: function() {
|
||||
@@ -22,66 +35,95 @@ Template.Pricing.helpers({
|
||||
return measures;
|
||||
},
|
||||
product: function() {
|
||||
let measureId = Session.get("selectedMeasure");
|
||||
let skipCount = Session.get(PREFIX + 'skipCount') || 0;
|
||||
let measureId = Session.get(PREFIX + "selectedMeasure");
|
||||
let dbQuery = {measures: {$all: [measureId]}, $or: [{hidden: false}, {hidden: {$exists:false}}]};
|
||||
|
||||
return Meteor.collections.Products.find({measures: {$all: [measureId]}}, {sort: {name: 1}});
|
||||
Session.set(PREFIX + 'productCount', Meteor.collections.Products.find(dbQuery).count()); //Always get a full count.
|
||||
return Meteor.collections.Products.find(dbQuery, {limit: QUERY_LIMIT, skip: skipCount, sort: {name: 1}});
|
||||
},
|
||||
disablePrev: function() {
|
||||
return (Session.get(PREFIX + 'skipCount') || 0) == 0;
|
||||
},
|
||||
disableNext: function() {
|
||||
return Session.get(PREFIX + 'productCount') - (Session.get(PREFIX + 'skipCount') || 0) - QUERY_LIMIT <= 0;
|
||||
}
|
||||
});
|
||||
Template.Pricing.events({
|
||||
'change select[name="measures"]': function(event, template) {
|
||||
Session.set("selectedMeasure", $(event.target).val());
|
||||
Session.get(PREFIX + 'skipCount', 0);
|
||||
Session.set(PREFIX + "selectedMeasure", $(event.target).val());
|
||||
},
|
||||
'click .applyButton': function(event, template) {
|
||||
let measureId = Session.get("selectedMeasure");
|
||||
let measureId = template.$('select[name="measures"]').val();
|
||||
let $selectedRows = template.$('tr.selected');
|
||||
// let selectedProducts = $selectedRows.map(function() {return $(this).data('product')});
|
||||
let price = Number(template.$('input[name="price"]').val());
|
||||
let setPrevious = template.$('input[name="setPrevious"]').prop('checked');
|
||||
let date = template.$('input[name="date"]').val();
|
||||
|
||||
date = moment(date ? date : new Date().toDateInputValue(), "YYYY-MM-DD").toDate();
|
||||
setPrevious = setPrevious == true || setPrevious == 'on' || setPrevious == "true" || setPrevious == "yes";
|
||||
|
||||
if(setPrevious == true && !date) {
|
||||
sAlert.error("Unexpected input.");
|
||||
}
|
||||
|
||||
if(!price || isNaN(price) || price < 0) {
|
||||
sAlert.error("Unexpected input.");
|
||||
}
|
||||
let productIds = [];
|
||||
|
||||
for(let i = 0; i < $selectedRows.length; i++) {
|
||||
let product = $($selectedRows[i]).data('product');
|
||||
|
||||
Meteor.call("setProductPrice", product._id, measureId, price, setPrevious, date);
|
||||
productIds.push(product._id);
|
||||
}
|
||||
|
||||
if(!price) {
|
||||
Meteor.call("clearProductPrice", productIds, measureId)
|
||||
}
|
||||
else {
|
||||
date = moment(date ? date : new Date().toDateInputValue(), "YYYY-MM-DD").toDate();
|
||||
setPrevious = setPrevious == true || setPrevious == 'on' || setPrevious == "true" || setPrevious == "yes";
|
||||
|
||||
if(setPrevious == true && !date) {
|
||||
sAlert.error("Unexpected input.");
|
||||
}
|
||||
|
||||
if(!price || isNaN(price) || price < 0) {
|
||||
sAlert.error("Unexpected input.");
|
||||
}
|
||||
|
||||
Meteor.call("setProductPrice", productIds, measureId, price, setPrevious, date);
|
||||
}
|
||||
},
|
||||
'click .resetButton': function(event, template) {
|
||||
template.$('input.price').val(0);
|
||||
template.$('input.date').val(new Date().toDateInputValue());
|
||||
template.$('input[name="setPrevious"]').removeProp('checked');
|
||||
},
|
||||
'click .prevProducts': function(event, template) {
|
||||
if(!$(event.target).hasClass('disabled'))
|
||||
Session.set(PREFIX + 'skipCount', Math.max(0, (Session.get(PREFIX + 'skipCount') || 0) - QUERY_LIMIT));
|
||||
},
|
||||
'click .nextProducts': function(event, template) {
|
||||
if(!$(event.target).hasClass('disabled'))
|
||||
Session.set(PREFIX + 'skipCount', (Session.get(PREFIX + 'skipCount') || 0) + QUERY_LIMIT);
|
||||
}
|
||||
});
|
||||
|
||||
// Template.PricingForProduct.onCreated(function() {
|
||||
//
|
||||
// });
|
||||
Template.PricingForProduct.onRendered(function() {
|
||||
this.$('tr').data("product", this.data);
|
||||
});
|
||||
Template.PricingForProduct.helpers({
|
||||
currentPrice: function() {
|
||||
let measureId = Session.get("selectedMeasure");
|
||||
let measureId = Session.get(PREFIX + "selectedMeasure");
|
||||
let price = this.prices && measureId && this.prices[measureId] && this.prices[measureId].price ? this.prices[measureId].price : undefined;
|
||||
|
||||
return price ? price.toLocaleString("en-US", {style: 'currency', currency: 'USD', minimumFractionDigits: 2}) : "-";
|
||||
},
|
||||
previousPrice: function() {
|
||||
let measureId = Session.get("selectedMeasure");
|
||||
let measureId = Session.get(PREFIX + "selectedMeasure");
|
||||
let price = this.prices && measureId && this.prices[measureId] && this.prices[measureId].previousPrice ? this.prices[measureId].previousPrice : undefined;
|
||||
|
||||
return price ? price.toLocaleString("en-US", {style: 'currency', currency: 'USD', minimumFractionDigits: 2}) : "-";
|
||||
},
|
||||
priceChangeDate: function() {
|
||||
let measureId = Session.get("selectedMeasure");
|
||||
let measureId = Session.get(PREFIX + "selectedMeasure");
|
||||
let date = this.prices && measureId && this.prices[measureId] && this.prices[measureId].effectiveDate ? this.prices[measureId].effectiveDate : undefined;
|
||||
|
||||
return date ? moment(date).format("MM/DD/YYYY (w)") : "-";
|
||||
},
|
||||
rowClass: function() {
|
||||
return this.deactivated ? "deactivated" : "";
|
||||
}
|
||||
});
|
||||
Template.PricingForProduct.events({
|
||||
|
||||
Reference in New Issue
Block a user