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; } });