diff --git a/php/src/StatementPrinter.php b/php/src/StatementPrinter.php index 475f532..41c26f6 100644 --- a/php/src/StatementPrinter.php +++ b/php/src/StatementPrinter.php @@ -1,63 +1,62 @@ customer . '\n'; + $result = "Statement for {$invoice->customer}\n"; + $format = new NumberFormatter('en_US', NumberFormatter::CURRENCY); - foreach($invoice->performances as $performance) - { + foreach ($invoice->performances as $performance) { $play = $plays[$performance->play_id]; - $thisAmount = 0; - switch($play->type) - { - case "tragedy": + switch ($play->type) { + case 'tragedy': $thisAmount = 40000; - if($performance->audience > 30) - { + if ($performance->audience > 30) { $thisAmount += 1000 * ($performance->audience - 30); } break; - case "comedy": + case 'comedy': $thisAmount = 30000; - if($performance->audience > 20) - { + if ($performance->audience > 20) { $thisAmount += 10000 + 500 * ($performance->audience - 20); } $thisAmount += 300 * $performance->audience; break; default: - throw new \Error("Unknow type: $play->type"); + throw new Error("Unknown type: {$play->type}"); } - + + // add volume credits $volumeCredits += max($performance->audience - 30, 0); - if($play->type == 'comedy') - { + // add extra credit for every ten comedy attendees + if ($play->type === 'comedy') { $volumeCredits += floor($performance->audience / 5); } - $thisFinalAmount = $thisAmount / 100; - $result = "$play->name: $thisFinalAmount ($performance->audience seats)\n"; + + // print line for this order + $result .= " {$play->name}: {$format->formatCurrency($thisAmount / 100, 'USD')} "; + $result .= "({$performance->audience} seats)\n"; + $totalAmount += $thisAmount; } - $finalTotal = ($totalAmount / 100); - $result .= "Amount owed is $finalTotal\n"; - $result .= "You earned $volumeCredits credits\n"; + $result .= "Amount owed is {$format ->formatCurrency($totalAmount / 100, 'USD')}\n"; + $result .= "You earned {$volumeCredits} credits"; return $result; - - } -} \ No newline at end of file +} diff --git a/php/tests/StatementPrinterTest.php b/php/tests/StatementPrinterTest.php index 2d9c2b7..165bc71 100644 --- a/php/tests/StatementPrinterTest.php +++ b/php/tests/StatementPrinterTest.php @@ -1,50 +1,51 @@ new Play("Hamlet", "tragedy"), - "as-like" => new Play("As You Like It", "comedy"), - "othello" => new Play("Othello", "tragedy") + 'hamlet' => new Play('Hamlet', 'tragedy'), + 'as-like' => new Play('As You Like It', 'comedy'), + 'othello' => new Play('Othello', 'tragedy'), ]; $performances = [ - new Performance("hamlet", 55), - new Performance("as-like", 35), - new Performance("othello", 40) + new Performance('hamlet', 55), + new Performance('as-like', 35), + new Performance('othello', 40), ]; - $invoice = new Invoice("BigCo", $performances); + $invoice = new Invoice('BigCo', $performances); $statementPrinter = new StatementPrinter(); $result = $statementPrinter->print($invoice, $plays); Approvals::verifyString($result); } - public function testNewPlayTypes() : void + public function testNewPlayTypes(): void { $plays = [ - "henry-v" => new Play("Henry V", "history"), - "as-like" => new Play("As You Like It", "comedy"), + 'henry-v' => new Play('Henry V', 'history'), + 'as-like' => new Play('As You Like It', 'comedy'), ]; - $performances = [ - new Performance("henry-v", 53), - new Performance("as-like", 55) - ]; + $performances = [new Performance('henry-v', 53), new Performance('as-like', 55)]; - $invoice = new Invoice("BigCo", $performances); + $invoice = new Invoice('BigCo', $performances); $statementPrinter = new StatementPrinter(); - $this->expectException(\Error::class); + $this->expectException(Error::class); $statementPrinter->print($invoice, $plays); } }