114 lines
3.9 KiB
JavaScript
114 lines
3.9 KiB
JavaScript
|
|
import './Pricing.html';
|
|
|
|
Tracker.autorun(function() {
|
|
Meteor.subscribe("products");
|
|
Meteor.subscribe("measures");
|
|
});
|
|
|
|
Template.Pricing.onRendered(function() {
|
|
this.$('input[name="date"]').val(new Date().toDateInputValue());
|
|
});
|
|
Template.Pricing.helpers({
|
|
measures: function() {
|
|
//return Meteor.collections.Measures.find({}, {sort: {order: 1}});
|
|
let measures = Meteor.collections.Measures.find({}, {sort: {order: 1}}).fetch();
|
|
|
|
for(let i = 0; i < measures; i++) {
|
|
if(Meteor.collections.Products.find({measures: {$all: [measures[i]._id]}}, {sort: {name: 1}}).count() == 0)
|
|
measures.splice(i, 1); //Remove the measure from the list.
|
|
}
|
|
|
|
return measures;
|
|
},
|
|
product: function() {
|
|
let measureId = Session.get("selectedMeasure");
|
|
|
|
return Meteor.collections.Products.find({measures: {$all: [measureId]}}, {sort: {name: 1}});
|
|
}
|
|
});
|
|
Template.Pricing.events({
|
|
'change select[name="measures"]': function(event, template) {
|
|
Session.set("selectedMeasure", $(event.target).val());
|
|
},
|
|
'click .applyButton': function(event, template) {
|
|
let measureId = Session.get("selectedMeasure");
|
|
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.");
|
|
}
|
|
|
|
for(let i = 0; i < $selectedRows.length; i++) {
|
|
let product = $($selectedRows[i]).data('product');
|
|
|
|
Meteor.call("setProductPrice", product._id, measureId, price, setPrevious, date);
|
|
}
|
|
}
|
|
});
|
|
|
|
// 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 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 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 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)") : "-";
|
|
}
|
|
});
|
|
Template.PricingForProduct.events({
|
|
'click tr': function(event, template) {
|
|
let $row = template.$(event.target).closest("tr");
|
|
let parentTemplate = template.parentTemplate(1);
|
|
|
|
if(event.shiftKey) {
|
|
let $lastRow = parentTemplate.$lastClickedRow;
|
|
let $range = ($row.index() > $lastRow.index() ? $lastRow.nextUntil($row) : $row.nextUntil($lastRow)).add($row);
|
|
|
|
if(event.ctrlKey) {
|
|
$range.toggleClass("selected");
|
|
}
|
|
else {
|
|
$range.addClass("selected");
|
|
}
|
|
}
|
|
else if(event.ctrlKey) {
|
|
$row.toggleClass("selected");
|
|
}
|
|
else {
|
|
$row.addClass("selected");
|
|
$row.siblings().removeClass('selected');
|
|
}
|
|
|
|
//Store the last row clicked on in a non-reactive variable attached to the parent template.
|
|
parentTemplate.$lastClickedRow = $row;
|
|
}
|
|
}); |