97 lines
2.6 KiB
JavaScript
97 lines
2.6 KiB
JavaScript
|
module.exports = {
|
||
|
methods: {
|
||
|
/**
|
||
|
* Get the current discount for the given billable entity.
|
||
|
*/
|
||
|
getCurrentDiscountForBillable(type, billable) {
|
||
|
if (type === 'user') {
|
||
|
return this.getCurrentDiscountForUser(billable);
|
||
|
} else {
|
||
|
return this.getCurrentDiscountForTeam(billable);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Get the current discount for the user.
|
||
|
*/
|
||
|
getCurrentDiscountForUser(user) {
|
||
|
this.currentDiscount = null;
|
||
|
|
||
|
this.loadingCurrentDiscount = true;
|
||
|
|
||
|
axios.get(`/coupon/user/${user.id}`)
|
||
|
.then(response => {
|
||
|
if (response.status == 200) {
|
||
|
this.currentDiscount = response.data;
|
||
|
}
|
||
|
|
||
|
this.loadingCurrentDiscount = false;
|
||
|
});
|
||
|
},
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Get the current discount for the team.
|
||
|
*/
|
||
|
getCurrentDiscountForTeam(team) {
|
||
|
this.currentDiscount = null;
|
||
|
|
||
|
this.loadingCurrentDiscount = true;
|
||
|
|
||
|
axios.get(`/coupon/${Spark.teamString}/${team.id}`)
|
||
|
.then(response => {
|
||
|
if (response.status == 200) {
|
||
|
this.currentDiscount = response.data;
|
||
|
}
|
||
|
|
||
|
this.loadingCurrentDiscount = false;
|
||
|
});
|
||
|
},
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Get the formatted discount amount for the given discount.
|
||
|
*/
|
||
|
formattedDiscount(discount) {
|
||
|
if ( ! discount) {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if (discount.percent_off) {
|
||
|
return `${discount.percent_off}%`;
|
||
|
} else {
|
||
|
return Vue.filter('currency')(
|
||
|
this.calculateAmountOff(discount.amount_off)
|
||
|
);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Calculate the amount off for the given discount amount.
|
||
|
*/
|
||
|
calculateAmountOff(amount) {
|
||
|
return amount / 100;
|
||
|
},
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Get the formatted discount duration for the given discount.
|
||
|
*/
|
||
|
formattedDiscountDuration(discount) {
|
||
|
if ( ! discount) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
switch (discount.duration) {
|
||
|
case 'forever':
|
||
|
return 'all future invoices';
|
||
|
case 'once':
|
||
|
return 'a single invoice';
|
||
|
case 'repeating':
|
||
|
return `all invoices during the next ${discount.duration_in_months} months`;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|