diff --git a/chrome_extension/common/order.js b/chrome_extension/common/order.js index 7283df4..256ae70 100644 --- a/chrome_extension/common/order.js +++ b/chrome_extension/common/order.js @@ -4,6 +4,10 @@ class Order { } constructor(config = {tip: 0, tax: 0, untaxedFees: 0, taxedFees: 0, isTipPercentage: false, people: {}}) { + if (config.taxedFees) { + console.warn('Taxed fees have not been tested and probably don\'t work. I was contemplating removing this feature.'); + } + // validation { var defaults = { @@ -124,7 +128,12 @@ class Order { } get feesPerPerson() { - return this.fee/this.people.size; + if (!this.hasPeople) return {}; + var subtotal = Array.from(this.people.values()).reduce((a,b)=>a+b); + return Array.from(this.people.entries()).reduce((feesPerPerson, [name, price]) => { + feesPerPerson[name] = price/subtotal*this.untaxedFees; + return feesPerPerson; + }, {}); } get total() { @@ -149,7 +158,7 @@ class Order { let totalForPerson = price; totalForPerson += price * this.taxPercent; totalForPerson += price * this.tipPercent; - totalForPerson += this.feesPerPerson; + totalForPerson += this.feesPerPerson[name]; this.totals.set(name, totalForPerson); } let totalPrice = Array.from(this.totals.values()).reduce((acc, val) => acc+val); diff --git a/elements/order-split-results-table.html b/elements/order-split-results-table.html index 745554d..39f4c1b 100644 --- a/elements/order-split-results-table.html +++ b/elements/order-split-results-table.html @@ -44,7 +44,7 @@ + - $[[_prettifyNumber(order.feesPerPerson)]] fee [[order.feesPerPerson]] + $[[_computeFeesPerPerson(order, item.name)]] fee [[_computeFeesPerPersonTooltip(order, item.name)]] + @@ -107,12 +107,13 @@ if (!people) { return []; } - return Array.from(this.order.people.entries()).map(entry => { - return { - name: entry[0], - price: entry[1] - }; - }); + return Array.from(this.order.people.entries()).map(([name, price]) => ({ name, price })); + } + _computeFeesPerPerson(order, name) { + return this._prettifyNumber(order.feesPerPerson[name]); + } + _computeFeesPerPersonTooltip(order, name) { + return `${order.untaxedFees} x ${order.people.get(name)} / ${order.subTotal}`; } _computePersonTotal(name) { return this._prettifyNumber(this.order.totals.get(name)); @@ -180,26 +181,6 @@ return output + '\n' + this._makeUrl(this.order); } - /** - * Returns a display breaking down the Order split calculations - * @param {Order} order - the Order to breakdown - * @returns {string} A view of the Order breakdown - */ - _makeBreakdownDisplay(order) { - var breakdown = ''; - breakdown += ''; - for (var [person, price] of order.people) { - breakdown += ''; - } - - breakdown += '
PersonItem CostsTaxTipFees Per PersonPerson Total
' + person + '' + - price + ' + ' + // item costs - price + ' * ' + order.taxPercent + ' + ' + // taxes - price + ' * ' + order.tipPercent + ' + ' + // tip - order.feesPerPerson + ' = ' + - this._prettifyNumber(order.totals.get(person)) + '
'; - return breakdown; - } _makeUrl(order) { if (!this.order) { return;