forked from mtov/RoteiroRefactoringJS
-
Notifications
You must be signed in to change notification settings - Fork 0
/
servico.js
55 lines (50 loc) · 1.54 KB
/
servico.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// servico.js
var Repositorio = require("./repositorio.js");
var { formatarMoeda } = require("./util.js");
module.exports = class ServicoCalculoFatura {
constructor(repo) {
this.repo = repo;
}
calcularCredito(apresentacao) {
let creditos = 0;
creditos += Math.max(apresentacao.audiencia - 30, 0);
if (this.repo.getPeca(apresentacao).tipo === "comedia")
creditos += Math.floor(apresentacao.audiencia / 5);
return creditos;
}
calcularTotalCreditos(apresentacoes) {
let totalCreditos = 0;
for (let apresentacao of apresentacoes) {
totalCreditos += this.calcularCredito(apresentacao);
}
return totalCreditos;
}
calcularTotalApresentacao(apresentacao) {
let total = 0;
switch (this.repo.getPeca(apresentacao).tipo) {
case "tragedia":
total = 40000;
if (apresentacao.audiencia > 30) {
total += 1000 * (apresentacao.audiencia - 30);
}
break;
case "comedia":
total = 30000;
if (apresentacao.audiencia > 20) {
total += 10000 + 500 * (apresentacao.audiencia - 20);
}
total += 300 * apresentacao.audiencia;
break;
default:
throw new Error(`Peça desconhecida: ${this.repo.getPeca(apresentacao).tipo}`);
}
return total;
}
calcularTotalFatura(apresentacoes) {
let totalFatura = 0;
for (let apresentacao of apresentacoes) {
totalFatura += this.calcularTotalApresentacao(apresentacao);
}
return totalFatura;
}
};