statement.es6
import Customer from './customer.es6';
function statement(customerArg, movies) {
const customer = new Customer(customerArg, movies);
let result = `Rental Record for ${customer.name}\n`;
for (let r of customer.rentals) {
result += `\t${r.movie.title}\t${r.amount}\n`;
}
result += `Amount owed is ${customer.amount}\n`;
result += `You earned ${customer.frequentRenterPoints} frequent renter points\n`;
return result;
}
function htmlStatement(customerArg, movies) {
const customer = new Customer(customerArg, movies);
let result = `<h1>Rental Record for <em>${customer.name}</em></h1>\n`;
result += "<table>\n";
for (let r of customer.rentals) {
result += ` <tr><td>${r.movie.title}</td><td>${r.amount}</td></tr>\n`;
}
result += "</table>\n";
result += `<p>Amount owed is <em>${customer.amount}</em></p>\n`;
result += `<p>You earned <em>${customer.frequentRenterPoints}</em> frequent renter points</p>\n`;
return result;
}
export {statement, htmlStatement};
customer.es6
import Rental from './rental.es6'
export default class Customer {
constructor(data, movies) {
this._data = data;
this._movies = movies
}
get rentals() { return this._data.rentals.map(r => new Rental(r, this._movies));}
get frequentRenterPoints() {
return this.rentals
.map((r) => r.frequentRenterPoints)
.reduce((a, b) => a + b, 0)
;
}
get amount() {
return this.rentals
.reduce((total, r) => total + r.amount, 0);
}
get name() {return this._data.name;}
}
rental.es6
export default class Rental {
constructor(data, movies) {
this._data = data;
this._movies = movies;
}
get days() {return this._data.days}
get movieID() {return this._data.movieID}
get movie() {
return this._movies[this.movieID];
}
get frequentRenterPoints() {
return (this.movie.code === "new" && this.days > 2) ? 2 : 1;
}
get amount() {
let result = 0;
switch (this.movie.code) {
case "regular":
result = 2;
if (this.days > 2) {
result += (this.days - 2) * 1.5;
}
return result;
case "new":
result = this.days * 3;
return result;
case "childrens":
result = 1.5;
if (this.days > 3) {
result += (this.days - 3) * 1.5;
}
return result;
}
return result;
}
}