aboutsummaryrefslogblamecommitdiff
path: root/classes/discount.php
blob: 31be887c526d575e4d2464a2957a0253f4e32912 (plain) (tree)
1
2
3
4
5
6
7
8
9

                                                                                  
  
                      
  
                                                             
  


                                                                       
  


                                                                  
  






                                                                        
                         
 








                                                                                           
 

                           
 









                                                                                 
 




                                                                                                             
 





                                                              
 

                                                                                        
 






                                              
 






                                                                  
 






                                                             
 






                                                 
 

















                                                                                                                    
 













                                                                         
 

















                                                                                                                          
 






                                                  
 

















                                                                                                                    
 






                                                           
 

















                                                                                                                             
 

                                                                                        
 
                                                
                                      
 
                                           



















                                                                                                                                              
 
<?php
/**
 * Provides the discount class, an interface to the discount table in the database
 *
 * @author Camil Staps
 *
 * BusinessAdmin: administrative software for small companies
 * Copyright (C) 2015 Camil Staps (ViviSoft)
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

/**
 * 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;
		}
	}
}