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