old tests moved away to make place for new PHPUnit tests (see www.phpunit.de)
[shipsimu.git] / tests / contract-test.php
1 <?php
2 define('TEST', true);
3 // Change directory
4 @chdir("..");
5
6 // Load config file
7 require(dirname(dirname(__FILE__)) . "/inc/config.php");
8
9 // Load all include files
10 require(PATH . "inc/includes.php");
11
12 // Load all game classes
13 require(PATH . "inc/classes.php");
14
15 // Set default application
16 FrameworkConfiguration::getInstance()->setConfigEntry("default_application", "ship-simu");
17
18 // Set testing mode (no starter.php will be loaded!)
19 define('TEST_MODE', true);
20
21 // Load the "selector"
22 require(PATH . "inc/selector.php");
23
24 // Wir tun hier so, als waere schon das Reederei-Objekt generiert und wir wollen
25 // jetzt die Personalliste wiederherstellen
26 try {
27         $personell = SimulatorPersonell::createSimulatorPersonellByID("SimulatorPersonell@829292aeca3f6bf78c16e25fc4f75c98");
28 } catch (InvalidIDFormatException $e) {
29         die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
30                 $e->getMessage()
31         ));
32 } catch (InvalidArrayCountException $e) {
33         die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
34                 $e->getMessage()
35         ));
36 } catch (NullPointerException $e) {
37         die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
38                 $e->getMessage()
39         ));
40 } catch (NoObjectException $e) {
41         die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
42                 $e->getMessage()
43         ));
44 } catch (MissingMethodException $e) {
45         die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
46                 $e->getMessage()
47         ));
48 } catch (FileIsEmptyException $e) {
49         die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
50                 $e->getMessage()
51         ));
52 } catch (FilePointerNotOpenedException $e) {
53         die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
54                 $e->getMessage()
55         ));
56 } catch (InvalidArrayCountException $e) {
57         die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
58                 $e->getMessage()
59         ));
60 } catch (InvalidMD5ChecksumException $e) {
61         die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
62                 $e->getMessage()
63         ));
64 } catch (InvalidDataLengthException $e) {
65         die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
66                 $e->getMessage()
67         ));
68 } catch (InvalidSimulatorIDException $e) {
69         die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
70                 $e->getMessage()
71         ));
72 } catch (MismatchingCompressorsException $e) {
73         die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
74                 $e->getMessage()
75         ));
76 } catch (ContainerItemIsNullException $e) {
77         die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
78                 $e->getMessage()
79         ));
80 } catch (ContainerItemIsNoArrayException $e) {
81         die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
82                 $e->getMessage()
83         ));
84 } catch (ContainerMaybeDamagedException $e) {
85         die(sprintf("[Main:] Die Personenliste konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
86                 $e->getMessage()
87         ));
88 }
89
90 // Personal-Objekt debuggen
91 if (defined('DEBUG_PERSONELL_OBJ')) {
92         DebugMiddleware::getInstance()->output(sprintf("Das Personal-Objekt sieht wie folgt aus:<br />
93 <pre>%s</pre>\n",
94                 print_r($personell, true)
95         ));
96 }
97
98 // Hafen bauen
99 $harbor = Harbor::createHarbor("Hamburger Hafen");
100
101 // Name ausgeben
102 DebugMiddleware::getInstance()->output(sprintf("Der <strong>%s</strong> ist gegr&uuml;ndet worden.<br />\n",
103         $harbor->getHarborName()
104 ));
105
106 // Hafen-Objekt debuggen
107 if (defined('DEBUG_HARBOR_OBJ')) {
108         DebugMiddleware::getInstance()->output(sprintf("Der <strong>%s</strong> sieht wie folgt aus:<br />
109 <pre>%s</pre>\n",
110                 $harbor->getHarborName(),
111                 print_r($harbor, true)
112         ));
113 }
114
115 // Haendler gruenden
116 $merchant = Merchant::createMerchant("Namenlos", $harbor);
117
118 // Array mit Einbauten erstellen
119 $einbauten = array(
120         'parts' => array(                       // *** Die zu einbauenden Schiffsteile ***
121                 'Motor' => array(        // --- Maschinenraum mit Motor ---
122                         "Ocean-Power 2000", // Bezeichnung
123                         20000,              // Pferdestaerken
124                         6,                  // Anzahl Nocken
125                         2.5, 2, 3.5         // Abmasse (Breite/Hoehe/Laenge)
126                 ),
127                 'Bridge' => array(       // --- Kommandobruecke ---
128                         26, 2.5, 15         // Abmasse (Breite/Hoehe/Laenge)
129                 ),
130                 'CarDeck' => array(      // --- Autodecks ---
131                         'amount' => 8,      // Anzahl Autodecks (einige liegen hintereinander im selben Deck!)
132                         'dim'    => array(  // Abmessung (Breite/Hoehe/Laenge)
133                                 6, 3, 16
134                         )
135                 ),
136                 'TruckDeck' => array(    // --- Decks fuer LKW/Busse haben vielleicht ein anderes Belueftgungssystem, etc. ---
137                         'amount' => 1,      // Anzahl der Decks
138                         'dim'    => array(  // Abmessung (Breite/Hoehe/Laenge)
139                                 8, 5, 195      // Geht durchs gesamte Schiff!
140                         )
141                 ),
142                 'TrainDeck' => array(    // --- Decks fuer Zuege haben Schienen... ---
143                         'amount' => 1,      // Anzahl der Decks
144                         'dim'    => array(  // Abmessung (Breite/Hoehe/Laenge)
145                                 8, 4, 195      // Geht durchs gesamte Schiff!
146                         )
147                 ),
148                 'LuxuryCabin' => array(  // --- Luxuskabinen ---
149                         'amount' => 20,     // Anzahl Luxuskabinen im Schiff
150                         'rooms'  => 4,      // Raeume: 2 Schlafzimmer, 1 Auffenthaltszimmer, 1 Bad mit Dusche/Toilette/Waschbecken
151                         'bed'    => 3,      // Anzahl Betten (1 Doppelbett 2 Einzelbetten, Doppel-/Einzelbetten in getrennte Raeume)
152                         'dim' => array(     // Abmessung der Luxuskabine (Breite/Hoehe/Laenge)
153                                 4, 3, 5
154                         ),
155                 ),
156                 'PremierCabin' => array( // --- Mittlere Kabinen ---
157                         'amount' => 40,     // Anzahl
158                         'rooms'  => 2,      // Raeume: Schlafzimmer, Bad mit Toilette/Waschbecken
159                         'bed'    => 2,      // Anzahl Betten (1 Doppelbett, 1 Einzelbett; gemeinsamer Raum)
160                         'dim' => array(     // Abmessungen der Kabine (Breite/Hoehe/Laenge)
161                                 4, 2.5, 4
162                         )
163                 ),
164                 'LowCabin' => array(     // --- Untere Kabinen (befinden sich in den Unterbauten) ---
165                         'amount' => 90,     // Anzahl
166                         'rooms'  => 1,      // Raeume: Schlafzimmer, Waschbecken
167                         'bed'    => 2,      // Anzahl Betten (2 Etagenbetten)
168                         'dim' => array(     // Abmessungen der Kabine (Breite/Hoehe/Laenge)
169                                 3, 2.5, 4
170                         )
171                 ),
172                 'EconomyCabin' => array( // --- Unterste Kabinen (befinden sich tief unten im Schiffsbauch) ---
173                         'amount' => 140,    // Anzahl
174                         'rooms'  => 1,      // Raeume: Schlafzimmer, Waschbecken
175                         'bed'    => 1,      // Anzahl Betten (1 Etagenbett)
176                         'dim' => array(     // Abmessungen der Kabine (Breite/Hoehe/Laenge)
177                                 2, 2.5, 2
178                         )
179                 )
180         ),
181         'builds' => array(            // *** Welche Oberklasse verwendet werden sollen ***
182                 'Motor'        => "MaschineRoom",
183                 'Bridge'       => "BaseUpperStructure",
184                 'LuxuryCabin'  => "BaseCabin",
185                 'PremierCabin' => "BaseCabin",
186                 'LowCabin'     => "BaseCabin",
187                 'EconomyCabin' => "BaseCabin",
188                 'CarDeck'      => "BaseDeck",
189                 'TrainDeck'    => "BaseDeck",
190                 'TruckDeck'    => "BaseDeck"
191         )
192 );
193
194 // Preisliste auffuellen
195 foreach ($einbauten['parts'] as $key=>$part) {
196         // Create item array string
197         $item = "";
198         foreach ($part as $idx=>$itemPart) {
199                 if (is_string($itemPart)) {
200                         // String found
201                         $item .= sprintf("\"%s\", ", $itemPart);
202                 } elseif (is_int($itemPart)) {
203                         // Integer found
204                         $item .= sprintf("%d, ", $itemPart);
205                 } elseif (is_float($itemPart)) {
206                         // Float found
207                         $item .= sprintf("%f, ", $itemPart);
208                 } elseif (is_array($itemPart)) {
209                         // Sub-array found
210                         $item .= "array(";
211
212                         // Go all items through
213                         foreach ($itemPart as $idx2=>$subPart) {
214                                 if (is_int($subPart)) {
215                                         // Integer again found
216                                         $item .= sprintf("%d, ", $subPart);
217                                 } elseif (is_float($subPart)) {
218                                         // Float found
219                                         $item .= sprintf("%f, ", $subPart);
220                                 } else {
221                                         // Unsupport part found
222                                         die(sprintf("[Main:] Unsupported sub-array element on pos <strong>%d</strong> in array <strong>%s</strong> found: <u>%s</u>", $idx2, $idx, $subPart));
223                                 }
224                         }
225
226                         // Remove trailing comma
227                         $item = substr($item, 0, -2);
228
229                         // Add closing bracket
230                         $item .= "), ";
231                 } else {
232                         // Unsupport part found
233                         die(sprintf("[Main:] Unsupported array element on pos <strong>%d</strong>: <u>%s</u>", $idx, $itemPart));
234                 }
235         }
236
237         // Remove trailing comma
238         $item = substr($item, 0, -2);
239
240         // Random price
241         $price = mt_rand(5, 12) * 10000;
242
243         // Give it a try...
244         try {
245                 // Generate command for adding objects to a price list
246                 $eval = sprintf("\$merchant->addItemToPriceList(%s::create%s(%s), %d);",
247                         $key,
248                         $key,
249                         $item,
250                         $price
251                 );
252
253                 // Debug message
254                 if ((defined('DEBUG_EVAL')) || (defined('DEBUG_ALL'))) DebugMiddleware::getInstance()->output(sprintf("[Main:] Konstruierte PHP-Anweisung: <pre><em>%s</em></pre><br />\n",
255                         htmlentities($eval)
256                 ));
257
258                 // Run the constructed command
259                 eval($eval);
260         } catch (ItemNotTradeableException $e) {
261                 die(sprintf("[Main:] Die Preisliste des H&auml;ndlers <strong>%s</strong> kann nicht bef&uuml;llt werden. Grund: <strong>%s</strong><br />\n",
262                         $merchant->getMerchantName(),
263                         $e->getMessage()
264                 ));
265         }
266 }
267
268 // Haendler-Objekt debuggen
269 if (defined('DEBUG_MERCHANT_OBJ')) {
270         DebugMiddleware::getInstance()->output(sprintf("Der H&auml;ndler <strong>%s</strong> sieht wie folgt aus:<br />
271 <pre>%s</pre>\n",
272                 $merchant->getMerchantName(),
273                 print_r($merchant, true)
274         ));
275 }
276
277 // Reederei gruenden
278 $shipping = ShippingCompany::createShippingCompany("Hanseatic Travel Company", $harbor);
279
280 // Firmenschef setzen
281 try {
282         $shipping->setCompanyFounder(CompanyEmployee::createCompanyEmployee("Roland", "H&auml;der", "M", 1977, 9, 26, true, 2000));
283 } catch (BirthdayInvalidException $e) {
284         die(sprintf("[Main:] Reederei-Gr&uuml;nder konnte nicht gesetzt werden. Grund: <strong>%s</strong><br />\n",
285                 $e->getMessage()
286         ));
287 }
288
289 // Dann mal ausgeben...
290 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <strong>%s</strong> ist von <strong>%s %s</strong> gegr&uuml;ndet worden.<br />\n",
291         $shipping->getCompanyName(),
292         $shipping->getFounderInstance()->getSurname(),
293         $shipping->getFounderInstance()->getFamily()
294 ));
295
296 // Die Reederei stellt Personal ein und bedient sich an der $personell-Instanz
297 try {
298         $shipping->recruitRandomEmployees(10, $personell);
299 } catch (ToMuchEmployeesException $e) {
300         die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte kein Personal einstellen. Grund: <strong>%s</strong><br />\n",
301                 $shipping->getCompanyName(),
302                 $e->getMessage()
303         ));
304 } catch (OutOfBoundsException $e) {
305         die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte kein Personal einstellen. Grund: <strong>%s</strong><br />\n",
306                 $shipping->getCompanyName(),
307                 $e->getMessage()
308         ));
309 }
310
311 // Anzahl Personal ausgeben
312 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <strong>%s</strong> hat nun <strong>%d</strong> weitere Mitarbeiter.<br />\n",
313         $shipping->getCompanyName(),
314         $shipping->getTotalEmployee()
315 ));
316
317 // Dann die ersten 3 Werften in den Hafen einbauen und Personal zuweisen
318 $shipping->createShipyardInHarbor("Werft 1", $harbor);
319 $shipping->createShipyardInHarbor("Werft 2", $harbor);
320 $shipping->createShipyardInHarbor("Werft 3", $harbor);
321
322 // In alle Werften sollen Passagierschiffe gebaut werden koennen
323 try {
324         $shipping->addShipTypeToAllShipyards("PassengerShip");
325 } catch (ClassNotFoundException $e) {
326         die(sprintf("[Main:] Die Reederei <strong>%s</strong> kann ihre Werften nicht besch&auml;ftigen. Grund: <strong>%s</strong><br />\n",
327                 $shipping->getCompanyName(),
328                 $e->getMessage()
329         ));
330 } catch (ClassMismatchException $e) {
331         die(sprintf("[Main:] Die Reederei <strong>%s</strong> kann ihre Werften nicht besch&auml;ftigen. Grund: <strong>%s</strong><br />\n",
332                 $shipping->getCompanyName(),
333                 $e->getMessage()
334         ));
335 } catch (NoObjectException $e) {
336         die(sprintf("[Main:] Die Reederei <strong>%s</strong> kann ihre Werften nicht besch&auml;ftigen. Grund: <strong>%s</strong><br />\n",
337                 $shipping->getCompanyName(),
338                 $e->getMessage()
339         ));
340 }
341
342 // Personal auf die Werften verteilen
343 try {
344         $shipping->distributeAllPersonellOnShipyards();
345 } catch (NoShipyardsConstructedException $e) {
346         die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte kein Personal den Werften zuteilen. Grund: <strong>%s</strong><br />\n",
347                 $shipping->getCompanyName(),
348                 $e->getMessage()
349         ));
350 } catch (ClassMismatchException $e) {
351         die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte kein Personal den Werften zuteilen. Grund: <strong>%s</strong><br />\n",
352                 $shipping->getCompanyName(),
353                 $e->getMessage()
354         ));
355 } catch (NullPointerException $e) {
356         die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte kein Personal den Werften zuteilen. Grund: <strong>%s</strong><br />\n",
357                 $shipping->getCompanyName(),
358                 $e->getMessage()
359         ));
360 } catch (NoObjectException $e) {
361         die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte kein Personal den Werften zuteilen. Grund: <strong>%s</strong><br />\n",
362                 $shipping->getCompanyName(),
363                 $e->getMessage()
364         ));
365 }
366
367 // Normale Meldung ausgeben
368 DebugMiddleware::getInstance()->output(sprintf("Die Reederei <strong>%s</strong> besch&auml;ftigt nun ihre <strong>%d</strong> Mitarbeiter in <strong>%d</strong> Werft(en):<br />\n",
369         $shipping->getCompanyName(),
370         $shipping->getTotalEmployee(),
371         $shipping->getTotalShipyards()
372 ));
373
374 // Dann nimmt die Reederei ihren ersten Bauauftrag entgegen.
375 // Sie muss auch sich selber Bauauftraege erteilen!
376 try {
377         $shipping->addNewWorksContract(WorksContract::createWorksContract("PassengerShip", "M/S Poseidon", $shipping));
378 } catch (ClassNotFoundException $e) {
379         die(sprintf("[Main:] Der Bauauftrag konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
380                 $e->getMessage()
381         ));
382 } catch (NullPointerException $e) {
383         die(sprintf("[Main:] Der Bauauftrag konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
384                 $e->getMessage()
385         ));
386 } catch (NoObjectException $e) {
387         die(sprintf("[Main:] Der Bauauftrag konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
388                 $e->getMessage()
389         ));
390 } catch (MissingMethodException $e) {
391         die(sprintf("[Main:] Der Bauauftrag konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
392                 $e->getMessage()
393         ));
394 } catch (EmptyStructuresListException $e) {
395         die(sprintf("[Main:] Der Bauauftrag konnte nicht erstellt werden. Grund: <strong>%s</strong><br />\n",
396                 $e->getMessage()
397         ));
398 }
399
400 // Auftrag-Instanz holen
401 $contract = $shipping->getLastContractInstance();
402
403 // Die Reederei hat einen Haendler gewaehlt
404 try {
405         $shipping->setMerchantInstance($merchant);
406 } catch (NullPointerException $e) {
407         die(sprintf("[Main:] Der H&auml;ndler <strong>%s</strong> konnte nicht ausgew&auml;hlt werden. Grund: <strong>%s</strong><br />\n",
408                 $merchant->getMerchantName(),
409                 $e->getMessage()
410         ));
411 } catch (NoObjectException $e) {
412         die(sprintf("[Main:] Der H&auml;ndler <strong>%s</strong> konnte nicht ausgew&auml;hlt werden. Grund: <strong>%s</strong><br />\n",
413                 $merchant->getMerchantName(),
414                 $e->getMessage()
415         ));
416 } catch (ClassMismatchException $e) {
417         die(sprintf("[Main:] Der H&auml;ndler <strong>%s</strong> konnte nicht ausgew&auml;hlt werden. Grund: <strong>%s</strong><br />\n",
418                 $merchant->getMerchantName(),
419                 $e->getMessage()
420         ));
421 }
422
423 // Den Bauauftrag mit der Reederei abgleichen, ob sie den Schiffstyp bauen koennen
424 try {
425         $typeValid = $shipping->validateWorksContractShipType($contract);
426 } catch (NullPointerException $e) {
427         die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte den Bauauftrag nicht validieren. Grund: <strong>%s</strong><br />\n",
428                 $shipping->getCompanyName(),
429                 $e->getMessage()
430         ));
431 } catch (NoObjectException $e) {
432         die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte den Bauauftrag nicht validieren. Grund: <strong>%s</strong><br />\n",
433                 $shipping->getCompanyName(),
434                 $e->getMessage()
435         ));
436 }
437
438 // Kann gebaut werden?
439 if ($typeValid) {
440         DebugMiddleware::getInstance()->output(sprintf("Die Reederei <strong>%s</strong> kann Schiffe vom Typ <strong>%s</strong> bauen.<br />\n",
441                 $shipping->getCompanyName(),
442                 $contract->getShipInstance()->getPartDescr()
443         ));
444 } else {
445         DebugMiddleware::getInstance()->output(sprintf("Die Reederei <strong>%s</strong> kann keine Schiffe vom Typ <strong>%s</strong> bauen!<br />\n",
446                 $shipping->getCompanyName(),
447                 $contract->getShipInstance()->getPartDescr()
448         ));
449         exit;
450 }
451
452 // Dann den Bauauftrag verfeinern
453 foreach ($einbauten['parts'] as $key=>$part) {
454         try {
455                 $contract->addContractDetails($key, $einbauten['builds'][$key], $part);
456         } catch (ShipPartNotConstructableException $e) {
457                 // Output message
458                 die($e->getMessage());
459         } catch (ShipNotConstructedException $e) {
460                 // Output message
461                 die($e->getMessage());
462         } catch (ItemNotInPriceListException $e) {
463                 die(sprintf("[Main:] Der Artikel <strong>%s</strong> konnte nicht in der Preisliste gefunden werden. Grund: <strong>%s</strong><br />\n",
464                         $key,
465                         $e->getMessage()
466                 ));
467         } catch (InvalidArrayCountException $e) {
468                 die(sprintf("[Main:] Der Artikel <strong>%s</strong> konnte nicht in der Preisliste gefunden werden. Grund: <strong>%s</strong><br />\n",
469                         $key,
470                         $e->getMessage()
471                 ));
472         }
473 }
474
475 // Reederei-Objekt ausgeben
476 if (defined('DEBUG_COMPANY_OBJ')) {
477         DebugMiddleware::getInstance()->output(sprintf("Die Reederei <strong>%s</strong> sieht wie folgt aus:<br />
478 <pre>%s</pre>\n",
479                 $shipping->getCompanyName(),
480                 print_r($shipping, true)
481         ));
482 }
483
484 // Clean up a little
485 unset($einbauten);
486 unset($part);
487 unset($eval);
488 unset($item);
489 unset($key);
490 unset($typeValid);
491
492 // Gesamtwert ausgeben
493 try {
494         $totalValue = $contract->getTotalPrice();
495 } catch (NullPointerException $e) {
496         die(sprintf("[Main:] Gesamtbestellwert nicht ermittelbar. Grund: <strong>%s</strong><br />\n",
497                 $e->getMessage()
498         ));
499 } catch (NoObjectException $e) {
500         die(sprintf("[Main:] Gesamtbestellwert nicht ermittelbar. Grund: <strong>%s</strong><br />\n",
501                 $e->getMessage()
502         ));
503 } catch (MissingMethodException $e) {
504         die(sprintf("[Main:] Gesamtbestellwert nicht ermittelbar. Grund: <strong>%s</strong><br />\n",
505                 $e->getMessage()
506         ));
507 } catch (EmptyStructuresListException $e) {
508         die(sprintf("[Main:] Gesamtbestellwert nicht ermittelbar. Grund: <strong>%s</strong><br />\n",
509                 $e->getMessage()
510         ));
511 } catch (TotalPriceNotCalculatedException $e) {
512         die(sprintf("[Main:] Gesamtbestellwert nicht ermittelbar. Grund: <strong>%s</strong><br />\n",
513                 $e->getMessage()
514         ));
515 }
516
517 // Wert ausgeben
518 DebugMiddleware::getInstance()->output(sprintf("Der Bau der <strong>%s</strong> wird der Reederei <strong>%s</strong> voraussichtlich <strong>%s</strong> kosten.<br />\n",
519         $contract->getShipInstance()->getShipName(),
520         $shipping->getCompanyName(),
521         $contract->formatCurrency($totalValue)
522 ));
523
524 // Clean up a little
525 unset($totalValue);
526
527 // Den Bauvertrag unterschreiben (damit wird er in den Bau-Queue aufgenommen)
528 try {
529         $shipping->signContract($contract, $shipping);
530 } catch (NullPointerException $e) {
531         die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte den Bauauftrag nicht unterzeichnen. Grund: <strong>%s</strong><br />\n",
532                 $shipping->getCompanyName(),
533                 $e->getMessage()
534         ));
535 } catch (NoObjectException $e) {
536         die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte den Bauauftrag nicht unterzeichnen. Grund: <strong>%s</strong><br />\n",
537                 $shipping->getCompanyName(),
538                 $e->getMessage()
539         ));
540 } catch (MissingMethodException $e) {
541         die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte den Bauauftrag nicht unterzeichnen. Grund: <strong>%s</strong><br />\n",
542                 $shipping->getCompanyName(),
543                 $e->getMessage()
544         ));
545 } catch (InvalidContractPartnerException $e) {
546         die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte den Bauauftrag nicht unterzeichnen. Grund: <strong>%s</strong><br />\n",
547                 $shipping->getCompanyName(),
548                 $e->getMessage()
549         ));
550 } catch (ContractAllreadySignedException $e) {
551         die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte den Bauauftrag nicht unterzeichnen. Grund: <strong>%s</strong><br />\n",
552                 $shipping->getCompanyName(),
553                 $e->getMessage()
554         ));
555 } catch (WrongContractPartnerException $e) {
556         die(sprintf("[Main:] Die Reederei <strong>%s</strong> konnte den Bauauftrag nicht unterzeichnen. Grund: <strong>%s</strong><br />\n",
557                 $shipping->getCompanyName(),
558                 $e->getMessage()
559         ));
560 }
561
562 // Meldung ausgeben
563 if ($contract->isSigned()) {
564         DebugMiddleware::getInstance()->output(sprintf("Die Reederei <strong>%s</strong> hat den Bau der <strong>%s</strong> zugestimmt.<br />\n",
565                 $shipping->getCompanyName(),
566                 $contract->getShipInstance()->getShipName()
567         ));
568 } else {
569         DebugMiddleware::getInstance()->output(sprintf("Die Reederei <strong>%s</strong> hat den Bau der <strong>%s</strong> abgelehnt.<br />\n",
570                 $shipping->getCompanyName(),
571                 $contract->getShipInstance()->getShipName()
572         ));
573         exit;
574 }
575
576 // Auftrag-Objekt ausgeben
577 if (defined('DEBUG_CONTRACT_OBJ')) {
578         DebugMiddleware::getInstance()->output(sprintf("Der Bauauftrag sieht wie folgt aus:<br />
579 <pre>%s</pre>\n",
580                 print_r($contract, true)
581         ));
582 }
583
584 // Erstmal bis hier hin...
585 //exit();
586
587 // Anzahl Betten ermitteln
588 try {
589         $totalBeds = $contract->getShipInstance()->calcTotalBeds();
590 } catch (StructuresOutOfBoundsException $e) {
591         die(sprintf("[Main:] Anzahl Betten konnten nicht ermittelt werden. Grund: <strong>%s</strong><br />\n",
592                 $e->getMessage()
593         ));
594 } catch (EmptyStructuresListException $e) {
595         die(sprintf("[Main:] Anzahl Betten konnten nicht ermittelt werden. Grund: <strong>%s</strong><br />\n",
596                 $e->getMessage()
597         ));
598 }
599
600 // Bettenanzahl ausgeben
601 DebugMiddleware::getInstance()->output(sprintf("Es stehen <strong>%d</strong> Betten zur Verf&uuml;gung.",
602         $totalBeds
603 ));
604
605 //
606 ?>