@@ -3,79 +3,8 @@ package chapter01
33import java.text.NumberFormat
44import java.util.Locale.US
55
6- data class StatementData (
7- val customer : String , val performances : List <EnrichedPerformance >
8- ) {
9- var totalAmount: Int = 0
10- var totalVolumeCredits: Int = 0
11- }
12-
13- class EnrichedPerformance (
14- val playID : String , val audience : Int , val play : Play
15- ) {
16- var amount: Int = 0
17- var volumeCredits: Int = 0
18- }
19-
206fun statement (invoice : Invoice , plays : Plays ): String {
21- fun playFor (aPerformance : Performance ): Play {
22- return plays[aPerformance.playID]!!
23- }
24-
25- fun amountFor (aPerformance : EnrichedPerformance ): Int {
26- var result = 0
27- when (aPerformance.play.type) {
28- " tragedy" -> {
29- result = 40000
30- if (aPerformance.audience > 30 ) {
31- result + = 1000 * (aPerformance.audience - 30 )
32- }
33- }
34-
35- " comedy" -> {
36- result = 30000
37- if (aPerformance.audience > 20 ) {
38- result + = 10000 + 500 * (aPerformance.audience - 20 )
39- }
40- result + = 300 * aPerformance.audience
41- }
42-
43- else -> {
44- throw Error (" 알 수 없는 장르: ${aPerformance.play.type} " )
45- }
46- }
47-
48- return result
49- }
50-
51- fun volumeCreditsFor (aPerformance : EnrichedPerformance ): Int {
52- var result = maxOf(aPerformance.audience - 30 , 0 )
53- if (aPerformance.play.type == " comedy" ) result + = aPerformance.audience / 5
54- return result
55- }
56-
57- fun totalVolumeCredits (data : StatementData ): Int {
58- return data.performances.sumOf { it.volumeCredits }
59- }
60-
61- fun totalAmount (data : StatementData ): Int {
62- return data.performances.sumOf { it.amount }
63- }
64-
65- fun enrichPerformance (aPerformance : Performance ): EnrichedPerformance {
66- val result = EnrichedPerformance (
67- aPerformance.playID, aPerformance.audience, playFor(aPerformance)
68- )
69- result.amount = amountFor(result)
70- result.volumeCredits = volumeCreditsFor(result)
71- return result
72- }
73-
74- val statementData = StatementData (invoice.customer, invoice.performances.map { enrichPerformance(it) }).apply {
75- totalAmount = totalAmount(this )
76- totalVolumeCredits = totalVolumeCredits(this )
77- }
78- return renderPlainText(statementData, plays)
7+ return renderPlainText(createStatementData(plays, invoice), plays)
798}
809
8110private fun renderPlainText (data : StatementData , plays : Plays ): String {
0 commit comments