X-Git-Url: https://git.mxchange.org/?p=shipsimu.git;a=blobdiff_plain;f=application%2Fship-simu%2Fmain%2Fcompanies%2Fclass_ShippingCompany.php;h=24603fd86b1309381305e1b132eb44c6c1f5e6b2;hp=381aa4ce8f665e37cbf4457d291d277da0b7b12e;hb=5bf79580029c4f6ee71e6c9e7890169e4b344def;hpb=d527a312ec4b2983fc0ecda2179ce335c1a5a1f9 diff --git a/application/ship-simu/main/companies/class_ShippingCompany.php b/application/ship-simu/main/companies/class_ShippingCompany.php index 381aa4c..24603fd 100644 --- a/application/ship-simu/main/companies/class_ShippingCompany.php +++ b/application/ship-simu/main/companies/class_ShippingCompany.php @@ -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,92 +62,160 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner */ private $contractList = null; + // Exception constants + const EXCEPTION_USER_OWNS_NO_COMPANY = 0x200; + /** - * Main constructor + * Protected constructor * * @return void */ protected function __construct () { // Call parent constructor parent::__construct(__CLASS__); + } + + /** + * Creates an instance of this company class or throws an exception if the + * given user owns no company. + * + * @param $userInstance A user class + * @return $companyInstance Prepared company instance + * @todo Add functionality if user participates in a company + */ + public final static function createShippingCompany (ManageableAccount $userInstance) { + // Get new instance + $companyInstance = new ShippingCompany(); - // Set description - $this->setObjectDescription("Reederei"); + // Does the given user owns a 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't throw exceptions here."); + } // END - if - // Generate unique ID number - $this->generateUniqueId(); + // Init all lists + $companyInstance->initCompanyLists(); - // Clean up a little - $this->removeSystemArray(); + // Return instance + return $companyInstance; } - // Reederei gruenden (create wegen Namenskonvention) - public final static function createShippingCompany ($companyName, Harbor $hqInstance) { - // Get new instance - $companyInstance = new ShippingCompany(); + /** + * Checks wether the given user participates in a company + * + * @param $userInstance An instance of a user class + * @return $participates Wether the user participates at lease in one company + */ + protected function ifUserParticipatesInCompany (ManageableAccount $userInstance) { + // By default no user owns any company... ;) + $participates = false; - if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $companyInstance->getDebugInstance()->output(sprintf("[%s:%d] Die Reederei %s wird gegründet.", - __CLASS__, - __LINE__, - $companyName - )); + // Get a company database wrapper class + $wrapperInstance = ObjectFactory::createObjectByConfiguredName('company_db_wrapper_class', array($this)); - // Firmennamen setzen - $companyInstance->setCompanyName($companyName); + // Ask the wrapper if this user participates + $participates = $wrapperInstance->ifUserParticipatesInCompany($userInstance); - // Kuerzel setzen - $companyInstance->createShortName(); + // Get the result instance + $resultInstance = $wrapperInstance->getResultInstance(); - // Sitz festlegen - $companyInstance->setHQInstance($hqInstance); + // 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 - // Werftenliste erstellen - $companyInstance->createshipyardList(); + // Return result + return $participates; + } - // Angestellten-Liste erstellen - $companyInstance->createEmployeeList(); + /** + * 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; - // Auftragsliste erstellen - $companyInstance->createContractList(); + // Get result instance + $resultInstance = $this->getResultInstance(); - // Clean up a little - $companyInstance->removeWidth(); - $companyInstance->removeHeight(); - $companyInstance->removeLength(); - $companyInstance->removeDraught(); - $companyInstance->removePartInstance(); + // Is it set? + if ($resultInstance instanceof SearchableResult) { + // Result found so analyse it + $this->partialStub("Check if user is company founder."); + } // END - if - // Instanz zurueckgeben - return $companyInstance; + // Return result + return $isFounder; } - // Angestellten-Liste erstellen - private function createEmployeeList () { - if ((defined('DEBUG_COMPANY_EMPLOYEE')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Die Reederei %s erhält eine Angestelltenliste.", - __CLASS__, - __LINE__, - $this->getCompanyName() - )); - $this->employeeList = new FrameworkArrayObject("FakedEmployeeList"); + /** + * 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 + + // Return result + return $isOwner; } - // Werftenliste erstellen - public function createShipyardList () { - if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Die Reederei %s erhält eine Werftsliste.", - __CLASS__, - __LINE__, - $this->getCompanyName() - )); - $this->shipyardList = new FrameworkArrayObject("FakedShipyardList"); + /** + * 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(); + + // Is it set? + if ($resultInstance instanceof SearchableResult) { + // Result found so he is employee + $isEmployee = true; + } // END - if + + // Return result + return $isEmployee; } - // Auftragsliste erstellen - public function createContractList () { - if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Die Reederei %s erhält eine Auftragsliste.", - __CLASS__, - __LINE__, - $this->getCompanyName() - )); + //------------------------------------------------------------------------------\ + // 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 + $this->employeeList = new FrameworkArrayObject("FakedEmployeeList"); + + // Ship yards + $this->shipyardList = new FrameworkArrayObject("FakedShipyardList"); + + // Contracts $this->contractList = new FrameworkArrayObject("FakedContractList"); } @@ -167,17 +235,17 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner } // Kuerzel setzen - private function createShortName () { + private function initShortName () { // Mindestens eine Leerstelle? $dummy = explode(" ", $this->getCompanyName()); foreach ($dummy as $part) { $this->shortName .= substr($part, 0, 1); - } + } // END - if } // 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 %s baut im %s eine Werft %s.", + if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei %s baut im %s eine Werft %s.", __CLASS__, __LINE__, $this->getCompanyName(), @@ -222,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 %s stellt per Zufall %d neue Mitarbeiter ein.", + if ((defined('DEBUG_COMPANY_EMPLOYEE')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei %s stellt per Zufall %d neue Mitarbeiter ein.", __CLASS__, __LINE__, $this->getCompanyName(), @@ -257,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 %s stellt den/die Angestellte(n) %s %s ein.", + if ((defined('DEBUG_COMPANY_EMPLOYEE')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei %s stellt den/die Angestellte(n) %s %s ein.", __CLASS__, __LINE__, $this->getCompanyName(), @@ -292,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 %s hat per Zufall %d neue Mitarbeiter eingestellt.", + if ((defined('DEBUG_COMPANY_EMPLOYEE')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei %s hat per Zufall %d neue Mitarbeiter eingestellt.", __CLASS__, __LINE__, $this->getCompanyName(), @@ -302,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 %s verteilt alle ihre %d Mitarbeiter auf alle %d Werft(en).", + if ((defined('DEBUG_COMPANY_EMPLOYEE')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei %s verteilt alle ihre %d Mitarbeiter auf alle %d Werft(en).", __CLASS__, __LINE__, $this->getCompanyName(), @@ -322,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(); @@ -337,7 +404,7 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner } elseif (!is_object($shipyard)) { // Not an object! ;-( throw new NoObjectException($shipyard, self::EXCEPTION_IS_NO_OBJECT); - } elseif (!$shipyard->isClass("Shipyard")) { + } elseif ($shipyard->isClass("Shipyard") === false) { // Nope, so throw exception throw new ClassMismatchException(array($shipyard->__toString(), "Shipyard"), self::EXCEPTION_CLASSES_NOT_MATCHING); } @@ -356,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 %s hat %d Mitarbeiter.", + if ((defined('DEBUG_COMPANY_EMPLOYEE')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei %s hat %d Mitarbeiter.", __CLASS__, __LINE__, $this->getCompanyName(), @@ -369,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ür die Reederei %s werden die Anzahl der Werften in allen Häfen ermittelt.", + if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Für die Reederei %s werden die Anzahl der Werften in allen Häfen ermittelt.", __CLASS__, __LINE__, $this->getCompanyName() @@ -385,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 %s hat %d Werft(en).", + if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei %s hat %d Werft(en).", __CLASS__, __LINE__, $this->getCompanyName(), @@ -413,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 %s baut in allen Werften bald Schiffe vom Typ %s.", - __CLASS__, - __LINE__, - $this->getCompanyName(), - $shipInstance->getObjectDescription() - )); - // Iterate shipyard list for ($idx = $this->shipyardList->getIterator(); $idx->valid(); $idx->next()) { // Get current element @@ -433,25 +492,18 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner } elseif (!is_object($shipyard)) { // Not an object! ;-( throw new NoObjectException($shipyard, self::EXCEPTION_IS_NO_OBJECT); - } elseif (!$shipyard->isClass("Shipyard")) { + } 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 %s prüft den Bauauftrag der %s.", - __CLASS__, - __LINE__, - $this->getCompanyName(), - $contractInstance->getShipName() - )); - // First get the ship type $shipInstance = $contractInstance->getShipInstance(); @@ -467,16 +519,7 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner // 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 %s prüft, ob die %s (Typ:%s) 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)); } @@ -486,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 %s fragt alle Werften ab, ob diese Schiffe vom Typ %s bauen können.", + if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei %s fragt alle Werften ab, ob diese Schiffe vom Typ %s bauen können.", __CLASS__, __LINE__, $this->getCompanyName(), @@ -508,20 +551,20 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner } elseif (!is_object($shipyard)) { // Not an object! ;-( throw new NoObjectException($shipyard, self::EXCEPTION_IS_NO_OBJECT); - } elseif (!$shipyard->isClass("Shipyard")) { + } 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 %s hat die Suche nach einer Werft beendet, die Schiffe vom Typ %s bauen kann.", + if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei %s hat die Suche nach einer Werft beendet, die Schiffe vom Typ %s bauen kann.", __CLASS__, __LINE__, $this->getCompanyName(), @@ -534,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 %s erstellt einen Bauauftrag für ein %s mit dem Namen %s.", - __CLASS__, - __LINE__, - $this->getCompanyName(), - $contractInstance->getShipInstance()->getObjectDescription(), - $contractInstance->getShipInstance()->getShipName() - )); $this->contractList->append($contractInstance); } @@ -564,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 %s erteilt an sich selbst einen Bauauftrag für das %s "%s".", + if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei %s erteilt an sich selbst einen Bauauftrag für das %s "%s".", __CLASS__, __LINE__, $this->getCompanyName(), @@ -581,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 %s unterzeichnet einen Bauauftrag für das %s "%s" mit der %s.", + if ((defined('DEBUG_COMPANY')) || (defined('DEBUG_ALL'))) $this->debugOutput(sprintf("[%s:%d] Die Reederei %s unterzeichnet einen Bauauftrag für das %s "%s" mit der %s.", __CLASS__, __LINE__, $this->getCompanyName(), @@ -616,7 +652,7 @@ class ShippingCompany extends BaseSimulator implements Customer, ContractPartner } elseif (!is_object($contractInstance)) { // Not an object! ;-( throw new NoObjectException($contractInstance, self::EXCEPTION_IS_NO_OBJECT); - } elseif (!$contractInstance->isClass('WorksContract')) { + } elseif ($contractInstance->isClass("WorksContract") === false) { // Is not a merchant throw new ClassMismatchException(array($contractInstance->__toString(), "WorksContract"), self::EXCEPTION_CLASSES_NOT_MATCHING); }