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