. */ /** * An interface to the discount table in the database */ class Discount { use Calculatable; /** * @var pdo $pdo The PDO class for database communication * @var int $id The id of the discount * @var int $offerId The id of the offer this discount is linked to * @var string $title The title of the discount * @var string $description The description of the discount * @var float $value The actual discount * @var float $vat The percentage of VAT to calculate on this discount */ protected $pdo, $offerId, $id, $title, $description, $value, $vat; const SUBTOTAL = 1; const VAT = 2; const TOTAL = 3; /** * Create a new instance * * @param PDO $pdo The PDO class, to access the database * @param int $id The id of the discount to fetch * * @throws PDOException If something went wrong with the database * @throws Exception If the discount could not be found */ public function __construct($pdo, $id) { $this->pdo = $pdo; $stmt = $this->pdo->prepare("SELECT * FROM `".Constants::db_prefix."discount` WHERE `id`=?"); $stmt->execute(array($id)); if ($stmt->rowCount() == 0) { throw new Exception("The discount with id '$id' could not be found."); } $discount = $stmt->fetch(PDO::FETCH_ASSOC); $this->id = $discount['id']; $this->offerId = $discount['offerId']; $this->title = $discount['title']; $this->description = $discount['description']; $this->value = $discount['value']; $this->vat = $discount['VAT_percentage']; } //------------------------------------------------------------------------------ // Getters and setters //------------------------------------------------------------------------------ /** * Get the ID of the discount * * @return int The ID */ public function getId() { return $this->id; } /** * Get the ID of the offer that this discount is linked to * * @return int The ID */ public function getOfferId() { return $this->offerId; } /** * Get the offer that this discount is linked to * * @return offer The offer */ public function getOffer() { return new Offer($this->pdo, $this->offerId); } /** * Get the title of the discount * * @return string The title */ public function getTitle() { return $this->title; } /** * Set the title of the discount * * @param string $title The new title for the discount * * @throws PDOException If something went wrong with the database * * @return bool True on succes, false on failure */ public function setTitle($title) { $stmt = $this->pdo->prepare("UPDATE `".Constants::db_prefix."discount` SET `title`=? WHERE `id`=?"); $stmt->execute(array($title, $this->id)); if ($stmt->rowCount() == 1) { $this->title = $title; return true; } else { return false; } } /** * Get the description of the discount * * @param bool $parseMarkdown Whether or not to parse markdown * * @return string The description */ public function getDescription($parseMarkdown = true) { if ($parseMarkdown) { $pd = new Parsedown; return $pd->text($this->description); } else { return $this->description; } } /** * Set the description of the discount * * @param string $description The new description for the discount * * @throws PDOException If something went wrong with the database * * @return bool True on succes, false on failure */ public function setDescription($description) { $stmt = $this->pdo->prepare("UPDATE `".Constants::db_prefix."discount` SET `description`=? WHERE `id`=?"); $stmt->execute(array($description, $this->id)); if ($stmt->rowCount() == 1) { $this->description = $description; return true; } else { return false; } } /** * Get the value of the discount * * @return float The value */ public function getValue() { return $this->value; } /** * Set the value of the discount * * @param float $value The new value for the discount * * @throws PDOException If something went wrong with the database * * @return bool True on succes, false on failure */ public function setValue($value) { $stmt = $this->pdo->prepare("UPDATE `".Constants::db_prefix."discount` SET `value`=? WHERE `id`=?"); $stmt->execute(array($value, $this->id)); if ($stmt->rowCount() == 1) { $this->value = $value; return true; } else { return false; } } /** * Get the VAT percentage of the discount * * @return float The VAT percentage */ public function getVAT() { return $this->vat; } /** * Set the VAT percentage of the discount * * @param float $vat The new VAT percentage for the discount * * @throws PDOException If something went wrong with the database * * @return bool True on succes, false on failure */ public function setVAT($vat) { $stmt = $this->pdo->prepare("UPDATE `".Constants::db_prefix."discount` SET `VAT_percentage`=? WHERE `id`=?"); $stmt->execute(array($vat, $this->id)); if ($stmt->rowCount() == 1) { $this->vat = $vat; return true; } else { return false; } } //------------------------------------------------------------------------------ // Other functions //------------------------------------------------------------------------------ protected function calculateSubtotal() { return - $this->value; } protected function calculateVAT() { return $this->calculateSubtotal() * $this->getVAT() / 100; } /** * Remove this discount from the database * * If this doesn't succeed (i.e. false is returned), that means the discount was removed manually or by another instance of this class * * @throws PDOException If something went wrong with the database * * @return bool True on success, false on failure */ public function delete() { $stmt = $this->pdo->prepare("DELETE FROM `".Constants::db_prefix."discount` WHERE `id`=?"); $stmt->execute(array($this->id)); if ($stmt->rowCount() != 1) { return false; } else { return true; } } }