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