]> git.mxchange.org Git - shipsimu.git/blobdiff - ship-simu/application/ship-simu/main/class_Merchant.php
Initial import of current development status
[shipsimu.git] / ship-simu / application / ship-simu / main / class_Merchant.php
diff --git a/ship-simu/application/ship-simu/main/class_Merchant.php b/ship-simu/application/ship-simu/main/class_Merchant.php
new file mode 100644 (file)
index 0000000..1ef6dbd
--- /dev/null
@@ -0,0 +1,188 @@
+<?php
+
+// Die Haendler-Klasse
+class Merchant extends BaseFrameworkSystem {
+       // Name des Haendlers
+       private $merchantName   = "Namenloser H&auml;ndler";
+
+       // Preislite (Objekte wiedermal!)
+       private $priceList      = null;
+
+       // Zugewiesener Hafen
+       private $harborInstance = null;
+
+       // Konstruktor
+       private function __construct () {
+               // Eltern-Konstruktor aufrufen
+               parent::constructor(__CLASS__);
+
+               // Debug message
+               if (((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) && (defined('DEBUG_CONSTRUCT'))) {
+                       $this->getDebugInstance()->output(sprintf("[%s:%d] Konstruktor erreicht.<br />\n",
+                               __CLASS__,
+                               __LINE__
+                       ));
+               }
+
+               // Beschreibung setzen
+               $this->setPartDescr("H&auml;ndler");
+
+               // Unique-ID erzeugen
+               $this->createUniqueID();
+
+               // Clean up a little
+               $this->removeSystemArray();
+       }
+
+       // Haendler mit Namen erzeugen
+       public static function createMerchant ($merchantName, Harbor $harborInstance) {
+               // String absichern
+               $merchantName = (string) $merchantName;
+
+               // Instanz holen
+               $merchantInstance = new Merchant();
+
+               // Debug message
+               if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) {
+                       $merchantInstance->getDebugInstance()->output(sprintf("[%s:%d] Ein H&auml;ndler <strong>%s</strong> wird angelegt und soll sich am <strong>%s</strong> niederlassen.<br />\n",
+                               __CLASS__,
+                               __LINE__,
+                               $merchantName,
+                               $harborInstance->getHarborName()
+                       ));
+               }
+
+               // Haendlernamen setzen
+               $merchantInstance->setMerchantName($merchantName);
+
+               // In dem angegebenen Hafen den Haendler ansiedeln
+               $merchantInstance->setHarborInstance($harborInstance);
+
+               // Preisliste initialisieren
+               $merchantInstance->createPriceList();
+
+               // Instanz zurueckliefern
+               return $merchantInstance;
+       }
+
+       // Initialize pricing list
+       private function createPriceList () {
+               if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der H&auml;ndler <strong>%s</strong> erh&auml;lt eine leere Preisliste.<br />\n",
+                       __CLASS__,
+                       __LINE__,
+                       $this->getMerchantName()
+               ));
+               $this->priceList = new FrameworkArrayObject();
+       }
+
+       // Setter for merchant name
+       public function setMerchantName ($merchantName) {
+               // Secure string
+               $merchantName = (string) $merchantName;
+
+               // Debug message
+               if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der H&auml;ndlername <strong>%s</strong> ist nun bekannt.<br />\n",
+                       __CLASS__,
+                       __LINE__,
+                       $merchantName
+               ));
+               $this->merchantName = $merchantName;
+       }
+
+       // Getter for merchant name
+       public function getMerchantName () {
+               if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der H&auml;ndlername <strong>%s</strong> wird verlangt.<br />\n",
+                       __CLASS__,
+                       __LINE__,
+                       $this->merchantName
+               ));
+               return $this->merchantName;
+       }
+
+       // Setter for harbor instance
+       public function setHarborInstance (Harbor $harborInstance) {
+               if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der H&auml;ndler <strong>%s</strong> l&auml;sst sich am <strong>%s</strong> nieder.<br />\n",
+                       __CLASS__,
+                       __LINE__,
+                       $this->getMerchantName(),
+                       $harborInstance->getHarborName()
+               ));
+               $this->harborInstance = $harborInstance;
+       }
+
+       // Getter for harbor instance
+       public function getHarborInstance () {
+               if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der H&auml;ndler <strong>%s</strong> hat sich am <strong>%s</strong> niedergelassen.<br />\n",
+                       __CLASS__,
+                       __LINE__,
+                       $this->getMerchantName(),
+                       $harborInstance->getHarborName()
+               ));
+               return $this->harborInstance;
+       }
+
+       // Add new item to merchant's price list
+       public function addItemToPriceList (ItemIsTradeable $itemInstance, $price) {
+               // Secure pricing
+               $price = (float) $price;
+
+               // Debug message
+               if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der H&auml;ndler <strong>%s</strong> kann nun das Schiffsteil <strong>%s</strong> &quot;<strong>%s</strong>&quot; zu <strong>%s</strong> verkaufen.<br />\n",
+                       __CLASS__,
+                       __LINE__,
+                       $this->getMerchantName(),
+                       $itemInstance->__toString(),
+                       $itemInstance->getPartDescr(),
+                       $this->formatCurrency($price)
+               ));
+
+               // Construct pricing item and add it to the list
+               $this->priceList->append(array(
+                       'item'  => $itemInstance,
+                       'price' => $price
+               ));
+
+               // Remove price attribute
+               $itemInstance->removePrice();
+       }
+
+       // Get a price from the merchant's list
+       public function getPriceFromList (ItemIsTradeable $itemInstance) {
+               $price = 0;
+
+               // Iterate throw whole list
+               for ($iter = $this->priceList->getIterator(); $iter->valid(); $iter->next()) {
+                       // Get current item
+                       $item = $iter->current();
+
+                       // Does this item match? The unique ID may not work...
+                       if ($item['item']->itemMatches($itemInstance)) {
+                               // Extract price and stop searching
+                               $price = $item['price'];
+                               break;
+                       }
+               }
+
+               // Was the item found?
+               if ($price === 0) {
+                       // Throw exception
+                       throw new ItemNotInPriceListException($itemInstance, self::EXCEPTION_ITEM_NOT_IN_PRICE_LIST);
+               }
+
+               // Return price
+               return $price;
+       }
+
+       /**
+        * Stub!
+        */
+       public function saveObjectToDatabase () {
+               $this->getDebugInstance()->output(sprintf("[%s:] Stub <strong>%s</strong> erreicht.",
+                       $this->__toString(),
+                       __FUNCTION__
+               ));
+       }
+}
+
+// [EOF]
+?>