getID()); } /******************************************************************************** * * Getters * *********************************************************************************/ /** * Get the part. * * @return Part the part of this orderdetails */ public function getPart(): Part { return $this->part; } /** * Get the supplier. * * @return Supplier the supplier of this orderdetails * * @throws DatabaseException if there was an error */ public function getSupplier(): Supplier { return $this->supplier; } /** * Get the supplier part-nr. * * @return string the part-nr. */ public function getSupplierPartNr(): string { return $this->supplierpartnr; } /** * Get if this orderdetails is obsolete. * * "Orderdetails is obsolete" means that the part with that supplier-part-nr * is no longer available from the supplier of that orderdetails. * * @return bool * true if this part is obsolete at that supplier * * false if this part isn't obsolete at that supplier */ public function getObsolete(): bool { return (bool) $this->obsolete; } /** * Returns the date/time when the element was created. * Returns null if the element was not yet saved to DB yet. * * @return \DateTime|null The creation time of the part. */ public function getAddedDate(): ?\DateTime { return $this->addedDate; } /** * Get the link to the website of the article on the suppliers website. * * @param $no_automatic_url bool Set this to true, if you only want to get the local set product URL for this Orderdetail * and not a automatic generated one, based from the Supplier * * @return string the link to the article */ public function getSupplierProductUrl(bool $no_automatic_url = false): string { if ($no_automatic_url || '' !== $this->supplier_product_url) { return $this->supplier_product_url; } return $this->getSupplier()->getAutoProductUrl($this->supplierpartnr); // maybe an automatic url is available... } /** * Get all pricedetails. * * @return Pricedetail[] all pricedetails as a one-dimensional array of Pricedetails objects, * sorted by minimum discount quantity * * @throws Exception if there was an error */ public function getPricedetails(): PersistentCollection { return $this->pricedetails; } /** * Get the price for a specific quantity. * @param int $quantity this is the quantity to choose the correct pricedetails * @param int|null $multiplier * This is the multiplier which will be applied to every single price * * If you pass NULL, the number from $quantity will be used * * @return float float: the price as a float number (if "$as_money_string == false") * * @throws Exception if there are no pricedetails for the choosed quantity * (for example, there are only one pricedetails with the minimum discount quantity '10', * but the choosed quantity is '5' --> the price for 5 parts is not defined!) * @throws Exception if there was an error */ public function getPrice(int $quantity = 1, $multiplier = null) : ?float { if (($quantity == 0) && ($multiplier === null)) { return 0.0; } $all_pricedetails = $this->getPricedetails(); if (count($all_pricedetails) == 0) { return null; } $correct_pricedetails = null; foreach ($all_pricedetails as $pricedetails) { // choose the correct pricedetails for the choosed quantity ($quantity) if ($quantity < $pricedetails->getMinDiscountQuantity()) { break; } $correct_pricedetails = $pricedetails; } if ($correct_pricedetails == null) { return null; } if ($multiplier === null) { $multiplier = $quantity; } return $correct_pricedetails->getPricePerUnit($multiplier); } /******************************************************************************** * * Setters * *********************************************************************************/ /** * Set the supplier ID. * * @param int $new_supplier_id the ID of the new supplier */ public function setSupplierId(int $new_supplier_id): self { throw new \Exception('Not implemented yet!'); //TODO; return $this; } /** * Set the supplier part-nr. * * @param string $new_supplierpartnr the new supplier-part-nr */ public function setSupplierpartnr(string $new_supplierpartnr): self { $this->supplierpartnr = $new_supplierpartnr; return $this; } /** * Set if the part is obsolete at the supplier of that orderdetails. * * @param bool $new_obsolete true means that this part is obsolete */ public function setObsolete(bool $new_obsolete): self { $this->obsolete = $new_obsolete; return $this; } /** * Sets the custom product supplier URL for this order detail. * Set this to "", if the function getSupplierProductURL should return the automatic generated URL. * * @param $new_url string The new URL for the supplier URL. */ public function setSupplierProductUrl(string $new_url) { $this->supplier_product_url = $new_url; return $this; } }