More renamed
[shipsimu.git] / application / ship-simu / main / companies / class_ShippingCompany.php
index d3ab6985dec4c5d08e602f645dcaa330de337044..de959b62f836e6f272d9de6d6e74e676a24994bf 100644 (file)
@@ -2,11 +2,11 @@
 /**
  * A shipping company may be founded with this class
  *
- * @author             Roland Haeder <webmaster@ship-simu.org>
+ * @author             Roland Haeder <webmaster@shipsimu.org>
  * @version            0.0.0
- * @copyright  Copyright (c) 2007, 2008 Roland Haeder, this is free software
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 Ship-Simu Developer Team
  * @license            GNU GPL 3.0 or any newer version
- * @link               http://www.ship-simu.org
+ * @link               http://www.shipsimu.org
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -38,14 +38,14 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
        private $founderInstance = null;
 
        /**
-        * Employed people by this company
+        * Headquarter harbor instance
         */
-       private $employeeList    = null;
+       private $hqInstance      = null;
 
        /**
-        * Headquarter harbor instance
+        * Employed people by this company
         */
-       private $hqInstance      = null;
+       private $employeeList    = null;
 
        /**
         * List of all assigned shipyards
@@ -62,11 +62,6 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
         */
        private $contractList    = null;
 
-       /**
-        * Database result instance
-        */
-       private $resultInstance = null;
-
        // Exception constants
        const EXCEPTION_USER_OWNS_NO_COMPANY = 0x200;
 
@@ -78,15 +73,6 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
        protected function __construct () {
                // Call parent constructor
                parent::__construct(__CLASS__);
-
-               // Set description
-               $this->setObjectDescription("A shipping company class");
-
-               // Generate unique ID number
-               $this->generateUniqueId();
-
-               // Clean up a little
-               $this->removeSystemArray();
        }
 
        /**
@@ -95,21 +81,19 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
         *
         * @param       $userInstance           A user class
         * @return      $companyInstance        Prepared company instance
-        * @throws      NoShippingCompanyOwnedException         If the user owns no shipping companies
+        * @todo        Add functionality if user participates in a company
         */
-       public final static function createShippingCompany (BaseUser $userInstance) {
+       public static final function createShippingCompany (ManageableAccount $userInstance) {
                // Get new instance
                $companyInstance = new ShippingCompany();
 
                // Does the given user owns a company?
-               if (!$companyInstance->ifUserOwnsShippingCompany($userInstance)) {
-                       // Throw an exception here
-                       throw new NoShippingCompanyOwnedException(array($companyInstance, $userInstance), self::EXCEPTION_USER_OWNS_NO_COMPANY);
+               if ($companyInstance->ifUserParticipatesInCompany($userInstance)) {
+                       // Then do some nasty caching here but don't throw an exception
+                       // because then you will hurt our web helpers... :/
+                       $companyInstance->partialStub("Don&#39;t throw exceptions here.");
                } // END - if
 
-               // Set the user instance. We don't care here if he is founder or employee.
-               $companyInstance->setUserInstance($userInstance);
-
                // Init all lists
                $companyInstance->initCompanyLists();
 
@@ -118,34 +102,111 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
        }
 
        /**
-        * Checks wether the given user owns a company or not
+        * Checks wether the given user participates in a company
         *
         * @param       $userInstance   An instance of a user class
-        * @return      $ownsCompany    Wether the user owns at least one company
+        * @return      $participates   Wether the user participates at lease in one company
         */
-       protected function ifUserOwnsShippingCompany (BaseUser $userInstance)  {
+       protected function ifUserParticipatesInCompany (ManageableAccount $userInstance)  {
                // By default no user owns any company... ;)
-               $ownsCompany = false;
+               $participates = false;
 
                // Get a company database wrapper class
-               $wrapperInstance = ObjectFactory::createObjectByConfiguredName('company_db_wrapper_class');
+               $wrapperInstance = ObjectFactory::createObjectByConfiguredName('company_db_wrapper_class', array($this));
+
+               // Ask the wrapper if this user participates
+               $participates = $wrapperInstance->ifUserParticipatesInCompany($userInstance);
+
+               // Get the result instance
+               $resultInstance = $wrapperInstance->getResultInstance();
+
+               // Caches the result instance here, if set (we don't the wrapper anymore!)
+               if ($resultInstance instanceof SearchableResult) {
+                       // Set the result instance
+                       $this->setResultInstance($resultInstance);
+               } // END - if
+
+               // Return result
+               return $participates;
+       }
+
+       /**
+        * Checks wether the current user in registry is the company founder
+        *
+        * @return      $isFounder      Wether the current user is the company founder
+        * @todo        Check if user is company founder
+        */
+       public function ifUserIsFounder () {
+               // Default is not the founder
+               $isFounder = false;
+
+               // Get result instance
+               $resultInstance = $this->getResultInstance();
+
+               // Is it set?
+               if ($resultInstance instanceof SearchableResult) {
+                       // Result found so analyse it
+                       $this->partialStub("Check if user is company founder.");
+               } // END - if
+
+               // Return result
+               return $isFounder;
+       }
+
+       /**
+        * Checks wether the current user in registry is the company owner
+        *
+        * @return      $isOwner        Wether the current user is the company owner
+        * @todo        Check if user is company owner
+        */
+       public function ifUserIsOwner () {
+               // Default is not the owner
+               $isOwner = false;
+
+               // Get result instance
+               $resultInstance = $this->getResultInstance();
+
+               // Is it set?
+               if ($resultInstance instanceof SearchableResult) {
+                       // Result found so analyse it
+                       $this->partialStub("Check if user is company owner.");
+               } // END - if
 
-               // Get a search criteria class
-               $criteriaInstance = ObjectFactory::createObjectByConfiguredName('search_criteria_class');
+               // Return result
+               return $isOwner;
+       }
+
+       /**
+        * Checks wether the current user in registry is an employee in this company
+        *
+        * @return      $isOwner        Wether the current user is an employee in this company
+        */
+       public function ifUserIsEmployee () {
+               // Default is no employee
+               $isEmployee = false;
+
+               // Get result instance
+               $resultInstance = $this->getResultInstance();
 
-               // Add the user primary key as a search criteria
-               $criteriaInstance->addCriteria('company_owner', $userInstance->getPrimaryKey());
-               $criteriaInstance->setLimit(1);
+               // Is it set?
+               if ($resultInstance instanceof SearchableResult) {
+                       // Result found so he is employee
+                       $isEmployee = true;
+               } // END - if
 
-               // Get the result back
-               $resultInstance = $wrapperInstance->doSelectByCriteria($criteriaInstance);
-               $resultInstance->debugInstance();
+               // Return result
+               return $isEmployee;
        }
 
+       //------------------------------------------------------------------------------\
+       // Below here is very old code which needs to be translated and changed heavily |
+       //------------------------------------------------------------------------------/
+
        /**
         * Intialize all lists
         *
         * @return      void
+        * @todo        Maybe we don't need these big lists anymore?! So we can deprecate/remove it
         */
        protected function initCompanyLists () {
                // Employees
@@ -158,10 +219,6 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
                $this->contractList = new FrameworkArrayObject("FakedContractList");
        }
 
-       //----------------------------------------------------------------------------
-       // From here is very old code which needs to be translated and changed heavily
-       //----------------------------------------------------------------------------
-
        // Setter-Methode fuer Firmennamen
        public final function setCompanyName ($companyName) {
                $this->companyName = (string) $companyName;
@@ -188,7 +245,7 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
 
        // Reedereien Werften bauen lassen
        public function createShipyardInHarbor($shipyardName, Harbor $harborInstance) {
-               if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Die Reederei <strong>%s</strong> baut im <strong>%s</strong> eine Werft <strong>%s</strong>.",
+               if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei <strong>%s</strong> baut im <strong>%s</strong> eine Werft <strong>%s</strong>.",
                        __CLASS__,
                        __LINE__,
                        $this->getCompanyName(),
@@ -233,7 +290,7 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
                $amount = (int) $amount;
 
                // Debug-Meldung ausgeben
-               if ((defined('DEBUG_COMPANY_EMPLOYEE')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Die Reederei <strong>%s</strong> stellt per Zufall <strong>%d</strong> neue Mitarbeiter ein.",
+               if ((defined('DEBUG_COMPANY_EMPLOYEE')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei <strong>%s</strong> stellt per Zufall <strong>%d</strong> neue Mitarbeiter ein.",
                        __CLASS__,
                        __LINE__,
                        $this->getCompanyName(),
@@ -268,26 +325,25 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
                                $iterator->seek($pos);
 
                                // Is the current position valid?
-                               if ($iterator->valid()) {
-                                       // Element holen
-                                       $employee = $iterator->current();
-                               } else {
+                               if ($iterator->valid() === false) {
                                        // Should normally not happen... :(
                                        throw new StructuresOutOfBoundsException($idx, self::EXCEPTION_INDEX_OUT_OF_BOUNDS);
-                               }
-                       }
+                               } // END - if
+
+                               // Get current element
+                               $employee = $iterator->current();
+                       } // END - while
 
                        // A dummy just for the description and real class
                        $dummy = CompanyEmployee::createCompanyEmployee("", "", "M", 1970, 1, 1, $employee->isMarried(), 0);
 
                        // Make this person employed and give him some money to work
                        $employee->setEmployed(true);
-                       $employee->setObjectDescription($dummy->getObjectDescription());
                        $employee->setRealClass($dummy->__toString());
                        $employee->increaseSalary((mt_rand(7, 14) * 100)); // Are 700 to 1400 EUR for the begin okay?
 
                        // Debug message
-                       if ((defined('DEBUG_COMPANY_EMPLOYEE')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Die Reederei <strong>%s</strong> stellt den/die Angestellte(n) <strong>%s %s</strong> ein.",
+                       if ((defined('DEBUG_COMPANY_EMPLOYEE')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei <strong>%s</strong> stellt den/die Angestellte(n) <strong>%s %s</strong> ein.",
                                __CLASS__,
                                __LINE__,
                                $this->getCompanyName(),
@@ -303,7 +359,7 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
                $personellInstance->resetCache();
 
                // Debug-Meldung ausgeben
-               if ((defined('DEBUG_COMPANY_EMPLOYEE')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Die Reederei <strong>%s</strong> hat per Zufall <strong>%d</strong> neue Mitarbeiter eingestellt.",
+               if ((defined('DEBUG_COMPANY_EMPLOYEE')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei <strong>%s</strong> hat per Zufall <strong>%d</strong> neue Mitarbeiter eingestellt.",
                        __CLASS__,
                        __LINE__,
                        $this->getCompanyName(),
@@ -313,7 +369,7 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
 
        // Distribute all personells on all shipyards
        public function distributeAllPersonellOnShipyards () {
-               if ((defined('DEBUG_COMPANY_EMPLOYEE')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Die Reederei <strong>%s</strong> verteilt alle ihre <strong>%d</strong> Mitarbeiter auf alle <strong>%d</strong> Werft(en).",
+               if ((defined('DEBUG_COMPANY_EMPLOYEE')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei <strong>%s</strong> verteilt alle ihre <strong>%d</strong> Mitarbeiter auf alle <strong>%d</strong> Werft(en).",
                        __CLASS__,
                        __LINE__,
                        $this->getCompanyName(),
@@ -333,10 +389,10 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
                // Iterate through all employees
                for ($idx = $this->employeeList->getIterator(); $idx->valid(); $idx->next()) {
                        // Is the shipyard iterator still okay?
-                       if (!$shipyardIter->valid()) {
+                       if ($shipyardIter->valid() === false) {
                                // Rewind to first position
                                $shipyardIter->seek(0);
-                       }
+                       } // END - if
 
                        // Get Shipyard object
                        $shipyard = $shipyardIter->current();
@@ -347,8 +403,8 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
                                throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
                        } elseif (!is_object($shipyard)) {
                                // Not an object! ;-(
-                               throw new NoObjectException($shipyard, self::EXCEPTION_IS_NO_OBJECT);
-                       } elseif (!$shipyard->isClass("Shipyard")) {
+                               throw new InvalidObjectException($shipyard, self::EXCEPTION_IS_NO_OBJECT);
+                       } elseif ($shipyard->isClass("Shipyard") === false) {
                                // Nope, so throw exception
                                throw new ClassMismatchException(array($shipyard->__toString(), "Shipyard"), self::EXCEPTION_CLASSES_NOT_MATCHING);
                        }
@@ -367,7 +423,7 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
                $total = $this->employeeList->count();
 
                // Debug message
-               if ((defined('DEBUG_COMPANY_EMPLOYEE')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Die Reederei <strong>%s</strong> hat <strong>%d</strong> Mitarbeiter.",
+               if ((defined('DEBUG_COMPANY_EMPLOYEE')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei <strong>%s</strong> hat <strong>%d</strong> Mitarbeiter.",
                        __CLASS__,
                        __LINE__,
                        $this->getCompanyName(),
@@ -380,7 +436,7 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
 
        // Getter for total shipyards
        public final function getTotalShipyards () {
-               if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] F&uuml;r die Reederei <strong>%s</strong> werden die Anzahl der Werften in allen H&auml;fen ermittelt.",
+               if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] F&uuml;r die Reederei <strong>%s</strong> werden die Anzahl der Werften in allen H&auml;fen ermittelt.",
                        __CLASS__,
                        __LINE__,
                        $this->getCompanyName()
@@ -396,7 +452,7 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
                $total = $this->shipyardList->count();
 
                // Debug message
-               if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Die Reederei <strong>%s</strong> hat <strong>%d</strong> Werft(en).",
+               if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei <strong>%s</strong> hat <strong>%d</strong> Werft(en).",
                        __CLASS__,
                        __LINE__,
                        $this->getCompanyName(),
@@ -415,7 +471,7 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
                // Is the class there?
                if (!class_exists($shipType)) {
                        // Throw exception
-                       throw new ClassNotFoundException($shipType, self::EXCEPTION_CLASS_NOT_FOUND);
+                       throw new NoClassException($shipType, self::EXCEPTION_CLASS_NOT_FOUND);
                }
 
                // Create dummy ship
@@ -424,14 +480,6 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
                        $shipType
                ));
 
-               // Debug message
-               if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Die Reederei <strong>%s</strong> baut in allen Werften bald Schiffe vom Typ <strong>%s</strong>.",
-                       __CLASS__,
-                       __LINE__,
-                       $this->getCompanyName(),
-                       $shipInstance->getObjectDescription()
-               ));
-
                // Iterate shipyard list
                for ($idx = $this->shipyardList->getIterator(); $idx->valid(); $idx->next()) {
                        // Get current element
@@ -443,26 +491,19 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
                                throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
                        } elseif (!is_object($shipyard)) {
                                // Not an object! ;-(
-                               throw new NoObjectException($shipyard, self::EXCEPTION_IS_NO_OBJECT);
-                       } elseif (!$shipyard->isClass("Shipyard")) {
+                               throw new InvalidObjectException($shipyard, self::EXCEPTION_IS_NO_OBJECT);
+                       } elseif ($shipyard->isClass("Shipyard") === false) {
                                // Class is not a shipyard
                                throw new ClassMismatchException(array($shipyard->__toString(), "Shipyard"), self::EXCEPTION_CLASSES_NOT_MATCHING);
                        }
 
                        // Add the new ship type to the shipyard
                        $shipyard->addNewConstructableShipType($shipType);
-               }
+               } // END - for
        }
 
        // Validate the requested ship type with the company if they can construct it
        public function validateWorksContractShipType (SignableContract $contractInstance) {
-               if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Die Reederei <strong>%s</strong> pr&uuml;ft den Bauauftrag der <strong>%s</strong>.",
-                       __CLASS__,
-                       __LINE__,
-                       $this->getCompanyName(),
-                       $contractInstance->getShipName()
-               ));
-
                // First get the ship type
                $shipInstance = $contractInstance->getShipInstance();
 
@@ -472,22 +513,13 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
                        throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
                } elseif (!is_object($shipInstance)) {
                        // Not an object! ;-(
-                       throw new NoObjectException($shipInstance, self::EXCEPTION_IS_NO_OBJECT);
+                       throw new InvalidObjectException($shipInstance, self::EXCEPTION_IS_NO_OBJECT);
                }
 
                // Get it's real class name
                $shipType = $shipInstance->__toString();
 
-               // Debug message
-               if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Die Reederei <strong>%s</strong> pr&uuml;ft, ob die <strong>%s</strong> (Typ:<strong>%s</strong>) gebaut werden kann.",
-                       __CLASS__,
-                       __LINE__,
-                       $this->getCompanyName(),
-                       $contractInstance->getShipName(),
-                       $shipInstance->getObjectDescription()
-               ));
-
-               // Now check if the ship type is in any list and return the result
+               // Now check if ship type is in any list and return the result
                return ($this->isShipTypeConstructable($shipType));
        }
 
@@ -497,7 +529,7 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
                $shipType = (string) $shipType;
 
                // Debug message
-               if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Die Reederei <strong>%s</strong> fragt alle Werften ab, ob diese Schiffe vom Typ <strong>%s</strong> bauen k&ouml;nnen.",
+               if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei <strong>%s</strong> fragt alle Werften ab, ob diese Schiffe vom Typ <strong>%s</strong> bauen k&ouml;nnen.",
                        __CLASS__,
                        __LINE__,
                        $this->getCompanyName(),
@@ -518,21 +550,21 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
                                throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
                        } elseif (!is_object($shipyard)) {
                                // Not an object! ;-(
-                               throw new NoObjectException($shipyard, self::EXCEPTION_IS_NO_OBJECT);
-                       } elseif (!$shipyard->isClass("Shipyard")) {
+                               throw new InvalidObjectException($shipyard, self::EXCEPTION_IS_NO_OBJECT);
+                       } elseif ($shipyard->isClass("Shipyard") === false) {
                                // Class is not a shipyard
                                throw new ClassMismatchException(array($shipyard->__toString(), "Shipyard"), self::EXCEPTION_CLASSES_NOT_MATCHING);
                        }
 
-                       // Validate if the first found shipyard can construct the requested type
+                       // Validate if first found shipyard can construct the requested type
                        $result = $shipyard->isShipTypeConstructable($shipType);
 
                        // Does this shipyard construct the requested ship type?
                        if ($result) break; // Then abort the search!
-               }
+               } // END - for
 
                // Debug message
-               if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Die Reederei <strong>%s</strong> hat die Suche nach einer Werft beendet, die Schiffe vom Typ <strong>%s</strong> bauen kann.",
+               if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei <strong>%s</strong> hat die Suche nach einer Werft beendet, die Schiffe vom Typ <strong>%s</strong> bauen kann.",
                        __CLASS__,
                        __LINE__,
                        $this->getCompanyName(),
@@ -545,13 +577,6 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
 
        // As a customer the shipping company can add new contracts
        public function addNewWorksContract (SignableContract $contractInstance) {
-               if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Die Reederei <strong>%s</strong> erstellt einen Bauauftrag f&uuml;r ein <strong>%s</strong> mit dem Namen <strong>%s</strong>.",
-                       __CLASS__,
-                       __LINE__,
-                       $this->getCompanyName(),
-                       $contractInstance->getShipInstance()->getObjectDescription(),
-                       $contractInstance->getShipInstance()->getShipName()
-               ));
                $this->contractList->append($contractInstance);
        }
 
@@ -575,15 +600,15 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
        // Sign a contract with an other party which must also implement Customer
        public function signContract (SignableContract $contractInstance, ContractPartner $partnerInstance) {
                // Check wether the other party is our contract partner
-               if (!$partnerInstance->isContractPartner($contractInstance)) {
+               if ($partnerInstance->isContractPartner($contractInstance) === false) {
                        // Invalid contract partner!
                        throw new InvalidContractPartnerException($partnerInstance, self::EXCEPTION_CONTRACT_PARTNER_INVALID);
-               }
+               } // END - if
 
                // Determine if company "signs" own contract (must be done) or with an other party
                if ($this->equals($partnerInstance)) {
                        // With itself
-                       if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Die Reederei <strong>%s</strong> erteilt an sich selbst einen Bauauftrag f&uuml;r das <strong>%s</strong> &quot;<strong>%s</strong>&quot;.",
+                       if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei <strong>%s</strong> erteilt an sich selbst einen Bauauftrag f&uuml;r das <strong>%s</strong> &quot;<strong>%s</strong>&quot;.",
                                __CLASS__,
                                __LINE__,
                                $this->getCompanyName(),
@@ -592,7 +617,7 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
                        ));
                } else {
                        // Other external company
-                       if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Die Reederei <strong>%s</strong> unterzeichnet einen Bauauftrag f&uuml;r das <strong>%s</strong> &quot;<strong>%s</strong>&quot; mit der <strong>%s</strong>.",
+                       if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei <strong>%s</strong> unterzeichnet einen Bauauftrag f&uuml;r das <strong>%s</strong> &quot;<strong>%s</strong>&quot; mit der <strong>%s</strong>.",
                                __CLASS__,
                                __LINE__,
                                $this->getCompanyName(),
@@ -626,8 +651,8 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner
                        throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
                } elseif (!is_object($contractInstance)) {
                        // Not an object! ;-(
-                       throw new NoObjectException($contractInstance, self::EXCEPTION_IS_NO_OBJECT);
-               } elseif (!$contractInstance->isClass('WorksContract')) {
+                       throw new InvalidObjectException($contractInstance, self::EXCEPTION_IS_NO_OBJECT);
+               } elseif ($contractInstance->isClass("WorksContract") === false) {
                        // Is not a merchant
                        throw new ClassMismatchException(array($contractInstance->__toString(), "WorksContract"), self::EXCEPTION_CLASSES_NOT_MATCHING);
                }