diff --git a/src/Entity/Company.php b/src/Entity/Company.php index da64b289..21ddc74a 100644 --- a/src/Entity/Company.php +++ b/src/Entity/Company.php @@ -150,6 +150,8 @@ abstract class Company extends StructuralDBElement /** * Set the addres * @param string $new_address the new address (with "\n" as line break) + * + * @return self */ public function setAddress(string $new_address) : self { @@ -161,6 +163,8 @@ abstract class Company extends StructuralDBElement * Set the phone number * * @param string $new_phone_number the new phone number + * + * @return self */ public function setPhoneNumber(string $new_phone_number) : self { @@ -172,6 +176,8 @@ abstract class Company extends StructuralDBElement * Set the fax number * * @param string $new_fax_number the new fax number + * + * @return self */ public function setFaxNumber(string $new_fax_number) : self { @@ -183,6 +189,8 @@ abstract class Company extends StructuralDBElement * Set the e-mail address * * @param string $new_email_address the new e-mail address + * + * @return self */ public function setEmailAddress(string $new_email_address) : self @@ -195,6 +203,8 @@ abstract class Company extends StructuralDBElement * Set the website * * @param string $new_website the new website + * + * @return self */ public function setWebsite(string $new_website) : self { @@ -207,6 +217,7 @@ abstract class Company extends StructuralDBElement * * @param string $new_url the new URL with the placeholder %PARTNUMBER% for the part number * + * @return self */ public function setAutoProductUrl(string $new_url) : self { diff --git a/src/Entity/Device.php b/src/Entity/Device.php index e436fa0e..fa224be8 100644 --- a/src/Entity/Device.php +++ b/src/Entity/Device.php @@ -108,6 +108,7 @@ class Device extends PartsContainingDBElement * Set the order quantity * * @param integer $new_order_quantity the new order quantity + * @return self */ public function setOrderQuantity(int $new_order_quantity) : self { @@ -121,9 +122,8 @@ class Device extends PartsContainingDBElement /** * Set the "order_only_missing_parts" attribute - * * @param boolean $new_order_only_missing_parts the new "order_only_missing_parts" attribute - * + * @return self */ public function setOrderOnlyMissingParts(bool $new_order_only_missing_parts) : self { diff --git a/src/Entity/Part.php b/src/Entity/Part.php index d84c8fd2..07a31e65 100644 --- a/src/Entity/Part.php +++ b/src/Entity/Part.php @@ -35,6 +35,7 @@ namespace App\Entity; use Doctrine\ORM\Mapping as ORM; +use Webmozart\Assert\Assert; /** * Class Part @@ -174,48 +175,24 @@ class Part extends AttachmentContainingDBElement ********************************************************************************/ /** - * Get the description + * Get the description string like it is saved in the database. + * This can contain BBCode, it is not parsed yet. * - * @param boolean|int $bbcode_parse_level Should BBCode converted to HTML, before returning - * @param int $short_output If this is bigger than 0, than the description will be shortened to this length. * @return string the description */ - public function getDescription($bbcode_parse_level = 0/*BBCodeParsingLevel::PARSE*/, int $short_output = 0) : string + public function getDescription() : string { - $val = htmlspecialchars($this->description); - - if ($short_output > 0 && \strlen($val) > $short_output) { - $val = substr($val, 0, $short_output); - $val .= '...'; - $val = '' . $val . ''; - } - - //TODO - /** - if ($bbcode_parse_level === BBCodeParsingLevel::PARSE) { - $bbcode = new BBCodeParser(); - $val = $bbcode->only('bold', 'italic', 'underline', 'linethrough')->parse($val); - } elseif ($bbcode_parse_level === BBCodeParsingLevel::STRIP) { - $bbcode = new BBCodeParser(); - $val = $bbcode->stripBBCodeTags($val); - }*/ - - return $val; + return htmlspecialchars($this->description); } /** - * Get the count of parts which are in stock - * @param $with_unknown bool Set this, to true, if the unknown state should be returned as string. Otherwise -2 is returned. + * Get the count of parts which are in stock. + * When the instock is unkown, then Part::INSTOCK_UNKNOWN is returned. * - * @return integer|string count of parts which are in stock, "Unknown" if $with_unknown is set and instock is unknown. + * @return int count of parts which are in stock */ - public function getInstock(bool $with_unknown = false) : int + public function getInstock() : int { - - if ($with_unknown && $this->isInstockUnknown()) { - return _('[Unbekannt]'); - } - return $this->instock; } @@ -239,30 +216,14 @@ class Part extends AttachmentContainingDBElement } /** - * Get the comment + * Get the comment associated with this part. * - * @param boolean|int $bbcode_parsing_level Should BBCode converted to HTML, before returning - * @return string the comment + * @return string The raw/unparsed comment */ - public function getComment($bbcode_parsing_level = true /*= BBCodeParsingLevel::PARSE*/) : string + public function getComment() : string { - $val = htmlspecialchars($this->comment); - - //TODO - /*if ($bbcode_parsing_level === BBCodeParsingLevel::PARSE) { - $bbcode = new BBCodeParser(); - $bbcode->setParser('brLinebreak', "/\[br\]/s", '
', ''); - $bbcode->setParser('namedlink', '/\[url\=(.*?)\](.*?)\[\/url\]/s', '$2', '$2'); - $bbcode->setParser('link', '/\[url\](.*?)\[\/url\]/s', '$1', '$1'); - $val = $bbcode->parse($val); - } elseif ($bbcode_parsing_level === BBCodeParsingLevel::STRIP) { - $bbcode = new BBCodeParser(); - $val = str_replace("\n", ' ', $val); - $val = $bbcode->stripBBCodeTags($val); - }*/ - - return $val; + return htmlspecialchars($this->comment); } /** @@ -271,11 +232,9 @@ class Part extends AttachmentContainingDBElement * A Part is marked as "obsolete" if all their orderdetails are marked as "obsolete". * If a part has no orderdetails, the part isn't marked as obsolete. * - * @return boolean @li true if this part is obsolete - * @li false if this part isn't obsolete - * @throws Exception + * @return boolean true, if this part is obsolete. false, if this part isn't obsolete */ - public function getObsolete() : bool + public function isObsolete() : bool { $all_orderdetails = $this->getOrderdetails(); @@ -295,12 +254,12 @@ class Part extends AttachmentContainingDBElement /** * Get if this part is visible * - * @return boolean @li true if this part is visible - * @li false if this part isn't visible + * @return boolean true if this part is visible + * false if this part isn't visible */ - public function getVisible() : bool + public function isVisible() : bool { - return (bool) $this->visible; + return $this->visible; } /** @@ -309,9 +268,9 @@ class Part extends AttachmentContainingDBElement * @return bool * true if this part is a favorite * * false if this part is not a favorite. */ - public function getFavorite() : bool + public function isFavorite() : bool { - return (bool) $this->favorite; + return $this->favorite; } /** @@ -340,7 +299,7 @@ class Part extends AttachmentContainingDBElement */ public function getOrderQuantity() : int { - return (int) $this->order_quantity; + return $this->order_quantity; } /** @@ -380,20 +339,21 @@ class Part extends AttachmentContainingDBElement } /** - * Get the "manual_order" attribute + * Check if this part is marked for manual ordering * * @return boolean the "manual_order" attribute */ - public function getManualOrder() : bool + public function isMarkedForManualOrder() : bool { - return (bool) $this->manual_order; + return $this->manual_order; } /** * Check if the part is automatically marked for Ordering, because the instock value is smaller than the min instock value. + * This is called automatic ordering * @return bool True, if the part should be ordered. */ - public function getAutoOrder() : bool + public function isAutoOrdered() : bool { //Parts with negative instock never gets ordered. if ($this->getInstock() < 0) { @@ -405,23 +365,35 @@ class Part extends AttachmentContainingDBElement /** * Get the link to the website of the article on the manufacturers website + * When no this part has no explicit url set, then it is tried to generate one from the Manufacturer of this part + * automatically. * * @param * * @return string the link to the article - * @throws Exception */ - public function getManufacturerProductUrl(bool $no_auto_url = false) : string + public function getManufacturerProductUrl() : string { - if ($no_auto_url || $this->manufacturer_product_url != '') { + if ($this->manufacturer_product_url != '') { return $this->manufacturer_product_url; - } elseif (\is_object($this->getManufacturer())) { + } + + if ($this->getManufacturer() !== null) { return $this->getManufacturer()->getAutoProductUrl($this->name); } else { return ''; } // no url is available } + /** + * Similar to getManufacturerProductUrl, but here only the database value is returned. + * @return string The manufacturer url saved in DB for this part. + */ + public function getOwnProductURL() : string + { + return $this->manufacturer_product_url; + } + /** * Get the category of this part * @@ -805,6 +777,8 @@ class Part extends AttachmentContainingDBElement * Set the description * * @param string $new_description the new description + * + * @return self */ public function setDescription(string $new_description) : self { @@ -817,11 +791,12 @@ class Part extends AttachmentContainingDBElement * * @param integer $new_instock the new count of parts which are in stock * - * @throws Exception if the new instock is not valid - * @throws Exception if there was an error + * @return self */ public function setInstock(int $new_instock, $comment = null) : self { + Assert::natural($new_instock, 'New instock must be positive. Got: %s'); + $old_instock = (int) $this->getInstock(); $this->instock = $new_instock; //TODO @@ -839,22 +814,40 @@ class Part extends AttachmentContainingDBElement return $this; } + /** + * Sets the unknown status of this part. + * When the instock is currently unknown and you pass false, then the instock is set to zero. + * If the instock is not unknown and you pass false, nothing is changed. + * + * @param bool $new_unknown Set this to true if the instock should be marked as unknown. + * @return Part + */ + public function setInstockUnknown(bool $new_unknown) : self + { + if($new_unknown == true) { + $this->instock = self::INSTOCK_UNKNOWN; + } else { + //Change only if instock is currently unknown. + if ($this->isInstockUnknown()) { + $this->setInstock(0); + } + } + + } + /** * Withdrawal the given number of parts. * @param $count int The number of parts which should be withdrawan. * @param $comment string A comment that should be associated with the withdrawal. - * @throws Exception if there was an error + * + * @return self */ public function withdrawalParts(int $count, $comment = null) : self { - if ($count <= 0) { - throw new \Exception('Zahl der entnommenen Bauteile muss größer 0 sein!'); - } - if ($count > $this->getInstock()) { - throw new Exception('Es können nicht mehr Bauteile entnommen werden, als vorhanden sind!'); - } + Assert::greaterThan($count,0, 'Count of withdrawn parts must be greater 0! Got %s!'); + Assert::greaterThan($count, $this->instock, 'You can not withdraw more parts, than there are existing!'); - $old_instock = (int) $this->getInstock(); + $old_instock = $this->getInstock(); $new_instock = $old_instock - $count; //TODO @@ -878,17 +871,16 @@ class Part extends AttachmentContainingDBElement * Add the given number of parts. * @param $count int The number of parts which should be withdrawan. * @param $comment string A comment that should be associated with the withdrawal. - * @throws Exception if there was an error + * + * @return self */ public function addParts(int $count, string $comment = null) : self { + Assert::greaterThan($count, 0, 'Count of added parts must be greater zero! Got %s.'); //TODO - if ($count <= 0) { - throw new Exception('Zahl der entnommenen Bauteile muss größer 0 sein!'); - } - $old_instock = (int) $this->getInstock(); + $old_instock = $this->getInstock(); $new_instock = $old_instock + $count; //TODO @@ -912,17 +904,13 @@ class Part extends AttachmentContainingDBElement * Set the count of parts which should be in stock at least * * @param integer $new_mininstock the new count of parts which should be in stock at least - * - * @throws Exception if the new mininstock is not valid + * @return self */ public function setMinInstock(int $new_mininstock) : self { - if($new_mininstock < 0) { - throw new \InvalidArgumentException('$new_mininstock must be positive!'); - } + Assert::natural($new_mininstock, 'The new minimum instock value must be positive! Got %s.'); $this->mininstock = $new_mininstock; - return $this; } @@ -931,7 +919,7 @@ class Part extends AttachmentContainingDBElement * * @param string $new_comment the new comment * - * @throws Exception if there was an error + * @return self */ public function setComment(string $new_comment) : self { @@ -952,11 +940,15 @@ class Part extends AttachmentContainingDBElement * set this orderdetails as order orderdetails. * Otherwise, set "no order orderdetails") * - * @throws Exception if there was an error + * @return self */ public function setManualOrder(bool $new_manual_order, int $new_order_quantity = 1, $new_order_orderdetails_id = null) : self { + Assert::greaterThan($new_order_quantity, 0, 'The new order quantity must be greater zero. Got %s!'); + + $this->manual_order = $new_manual_order; + //TODO; /* $this->order_orderdetail = $new_order_orderdetails_id; */ $this->order_quantity = $new_order_quantity; @@ -969,6 +961,8 @@ class Part extends AttachmentContainingDBElement * * @param integer|NULL $new_order_orderdetails_id @li the new order orderdetails ID * @li Or, to remove the orderdetails, pass a NULL + * + * @return self */ public function setOrderOrderdetailsID($new_order_orderdetails_id) : self { @@ -982,9 +976,13 @@ class Part extends AttachmentContainingDBElement * Set the order quantity * * @param integer $new_order_quantity the new order quantity + * + * @return self */ public function setOrderQuantity(int $new_order_quantity) : self { + Assert::greaterThan($new_order_quantity,0, 'The new order quantity must be greater zero. Got %s!'); + $this->order_quantity = $new_order_quantity; return $this; @@ -1000,6 +998,8 @@ class Part extends AttachmentContainingDBElement * * @throws Exception if the new category ID is not valid * @throws Exception if there was an error + * + * @return self */ public function setCategoryID(int $new_category_id) : self { @@ -1064,6 +1064,8 @@ class Part extends AttachmentContainingDBElement * Set the favorite status for this part. * @param $new_favorite_status bool The new favorite status, that should be applied on this part. * Set this to true, when the part should be a favorite. + * + * @return self */ public function setFavorite(bool $new_favorite_status) : self { @@ -1075,7 +1077,7 @@ class Part extends AttachmentContainingDBElement /** * Sets the URL to the manufacturer site about this Part. Set to "" if this part should use the automatically URL based on its manufacturer. * @param string $new_url The new url - * @throws Exception when an error happens. + * @return self */ public function setManufacturerProductURL(string $new_url) : self { @@ -1092,6 +1094,8 @@ class Part extends AttachmentContainingDBElement * * @throws Exception if the new ID is not valid * @throws Exception if there was an error + * + * @return self */ public function setMasterPictureAttachementID($new_master_picture_attachement_id) : self { diff --git a/src/Entity/Pricedetail.php b/src/Entity/Pricedetail.php index 0de0a8f4..f4d0083a 100644 --- a/src/Entity/Pricedetail.php +++ b/src/Entity/Pricedetail.php @@ -35,6 +35,7 @@ namespace App\Entity; use Doctrine\ORM\Mapping as ORM; +use Webmozart\Assert\Assert; /** * Class Pricedetail @@ -138,7 +139,7 @@ class Pricedetail extends DBElement */ public function getPriceRelatedQuantity() : int { - return (int) $this->price_related_quantity; + return $this->price_related_quantity; } /** @@ -153,7 +154,7 @@ class Pricedetail extends DBElement */ public function getMinDiscountQuantity() : int { - return (int) $this->min_discount_quantity; + return $this->min_discount_quantity; } /******************************************************************************** @@ -170,13 +171,13 @@ class Pricedetail extends DBElement * @li This is the price for "price_related_quantity" parts!! * @li Example: if "price_related_quantity" is '10', * you have to set here the price for 10 parts! + * + * @return self */ public function setPrice(float $new_price) : self { - if($new_price < 0) - { - throw new \InvalidArgumentException('$new_price must be positive!'); - } + Assert::natural($new_price, 'The new price must be positive! Got %s!'); + $this->price = $new_price; return $this; @@ -192,12 +193,15 @@ class Pricedetail extends DBElement * quantity to 100. The single price (20$/100 = 0.2$) will be calculated automatically. * * @param integer $new_price_related_quantity the price related quantity + * + * @return self */ public function setPriceRelatedQuantity(int $new_price_related_quantity) : self { - if($new_price_related_quantity <= 0) { - throw new \InvalidArgumentException('$new_price_related_quantity must be greater 0!'); - } + + Assert::greaterThan($new_price_related_quantity, 0, + 'The new price related quantity must be greater zero! Got %s.'); + $this->price_related_quantity = $new_price_related_quantity; return $this; @@ -219,12 +223,14 @@ class Pricedetail extends DBElement * So the orderdetails would have three Pricedetails for one supplier.) * * @param integer $new_min_discount_quantity the minimum discount quantity + * + * @return self */ public function setMinDiscountQuantity(int $new_min_discount_quantity) : self { - if($new_min_discount_quantity <= 0 ){ - throw new \InvalidArgumentException('$new_min_discount_quantity must be positive!'); - } + Assert::greaterThan($new_min_discount_quantity, 0, + 'The new minimum discount quantity must be greater zero! Got %s.'); + $this->min_discount_quantity = $new_min_discount_quantity; return $this;