aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--classes/Discount.php212
-rw-r--r--classes/Offer.php4
-rw-r--r--include/discounts-edit.php9
-rw-r--r--include/discounts-new.php2
-rw-r--r--include/discounts-overview.php18
-rw-r--r--include/discounts.php6
-rw-r--r--include/offers-overview.php2
-rw-r--r--include/offers-view.php14
8 files changed, 38 insertions, 229 deletions
diff --git a/classes/Discount.php b/classes/Discount.php
index 91dd53b..3f12348 100644
--- a/classes/Discount.php
+++ b/classes/Discount.php
@@ -24,74 +24,18 @@
/**
* An interface to the discount table in the database
*/
-class Discount {
+class Discount extends Model {
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;
+ public
+ $table = 'discount',
+ $fillable_columns = ['offerId', 'title', 'description', 'value', 'VAT_percentage'];
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
@@ -101,156 +45,20 @@ class Discount {
}
/**
- * 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
+ * The description after having parsed markdown
*
- * @param bool $parseMarkdown Whether or not to parse markdown
- *
- * @return string The description
+ * @return string The description in HTML format
*/
- public function getDescription($parseMarkdown = true) {
- if ($parseMarkdown) {
- $pd = new Parsedown;
- return $pd->text($this->description);
- } else {
- return $this->description;
- }
+ public function getHTMLDescription() {
+ $pd = new Parsedown;
+ return $pd->text($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;
- }
+ return $this->calculateSubtotal() * $this->VAT_percentage / 100;
}
}
diff --git a/classes/Offer.php b/classes/Offer.php
index 1a11633..84a7da4 100644
--- a/classes/Offer.php
+++ b/classes/Offer.php
@@ -581,9 +581,9 @@ class Offer {
);
foreach ($this->getDiscounts() as $discount)
$list[] = array(
- $discount->getTitle(),
+ $discount->title,
$discount->calculate(discount::SUBTOTAL),
- $discount->getVAT() . "%",
+ $discount->VAT_percentage . "%",
$discount->calculate(discount::TOTAL)
);
diff --git a/include/discounts-edit.php b/include/discounts-edit.php
index 797a95b..94f4c29 100644
--- a/include/discounts-edit.php
+++ b/include/discounts-edit.php
@@ -21,6 +21,7 @@ require_once('./conf.php');
require_once('./login-ajax.php');
$response = new Response();
+$response->success = true;
try {
$discount = new Discount($_pdo, $_REQUEST['pk']);
@@ -29,16 +30,16 @@ try {
$what_to_edit = $name[count($name) - 1];
switch ($what_to_edit) {
case 'title':
- $response->success = $discount->setTitle($_REQUEST['value']);
+ $discount->title = $_REQUEST['value'];
break;
case 'value':
- $response->success = $discount->setValue($_REQUEST['value']);
+ $discount->value = $_REQUEST['value'];
break;
case 'vat':
- $response->success = $discount->setVAT($_REQUEST['value']);
+ $discount->VAT_percentage = $_REQUEST['value'];
break;
case 'description':
- $response->success = $discount->setDescription($_REQUEST['value']);
+ $discount->description = $_REQUEST['value'];
break;
default:
$response->http_response_code(404);
diff --git a/include/discounts-new.php b/include/discounts-new.php
index 26452aa..2d7fca5 100644
--- a/include/discounts-new.php
+++ b/include/discounts-new.php
@@ -32,7 +32,7 @@ try {
$_REQUEST['vat']
);
$response->success = true;
- $response->message = "Assignment {$discount->getTitle()} has been succesfully created. <a class='alert-link' href='javascript:location.reload(true);'>Refresh the page</a>.";
+ $response->message = "Assignment {$discount->title} has been succesfully created. <a class='alert-link' href='javascript:location.reload(true);'>Refresh the page</a>.";
} catch (PDOException $e) {
$response->http_response_code(500);
$response->success = false;
diff --git a/include/discounts-overview.php b/include/discounts-overview.php
index 60ddf13..0b0534d 100644
--- a/include/discounts-overview.php
+++ b/include/discounts-overview.php
@@ -39,25 +39,25 @@ require_once('./login.php');
$discounts = BusinessAdmin::getDiscounts($_pdo);
foreach ($discounts as $discount) {
echo "<tr class='mix'
- data-mixer-order-id='{$discount->getId()}'
+ data-mixer-order-id='{$discount->id}'
data-mixer-order-offer='{$discount->getOffer()->getId()}'
- data-mixer-order-value='{$discount->getValue()}'>
- <td class='col-min-width'>{$discount->getId()}</td>
+ data-mixer-order-value='{$discount->value}'>
+ <td class='col-min-width'>{$discount->id}</td>
<td class='col-min-width'>
<a href='".Constants::url_internal."/offers?id={$discount->getOffer()->getId()}'>#{$discount->getOffer()->getId()}</a> to
<a href='".Constants::url_internal."/contacts?id={$discount->getOffer()->getContact()->getId()}'>{$discount->getOffer()->getContact()->getName()}</a>
(<a href='".Constants::url_internal."/clients?id={$discount->getOffer()->getContact()->getClient()->id}'>{$discount->getOffer()->getContact()->getClient()->name}</a>)
<td class='col-max-width'>
- <b><a href='#' class='editable' id='editable-discount-{$discount->getId()}-title' data-type='text' data-pk='{$discount->getId()}' data-url='".Constants::url_external."discounts/edit'>{$discount->getTitle()}</a></b><br/>
- <p><a href='#' class='editable editable-noshow' id='editable-discount-{$discount->getId()}-description' data-type='textarea' data-mode='inline' data-pk='{$discount->getId()}' data-url='".Constants::url_external."discounts/edit'>{$discount->getDescription(false)}</a></p>
+ <b><a href='#' class='editable' id='editable-discount-{$discount->id}-title' data-type='text' data-pk='{$discount->id}' data-url='".Constants::url_external."discounts/edit'>{$discount->title}</a></b><br/>
+ <p><a href='#' class='editable editable-noshow' id='editable-discount-{$discount->id}-description' data-type='textarea' data-mode='inline' data-pk='{$discount->id}' data-url='".Constants::url_external."discounts/edit'>{$discount->description}</a></p>
</td>
<td class='col-min-width'>
- ".Constants::invoice_valuta."<a href='#' class='editable' id='editable-discount-{$discount->getId()}-value' data-type='text' data-pk='{$discount->getId()}' data-url='".Constants::url_external."discounts/edit'>{$discount->getValue()}</a><br/>
- <a href='#' class='editable' id='editable-discount-{$discount->getId()}-vat' data-type='text' data-pk='{$discount->getId()}' data-url='".Constants::url_external."discounts/edit'>{$discount->getVAT()}</a>% VAT
+ ".Constants::invoice_valuta."<a href='#' class='editable' id='editable-discount-{$discount->id}-value' data-type='text' data-pk='{$discount->id}' data-url='".Constants::url_external."discounts/edit'>{$discount->value}</a><br/>
+ <a href='#' class='editable' id='editable-discount-{$discount->id}-vat' data-type='text' data-pk='{$discount->id}' data-url='".Constants::url_external."discounts/edit'>{$discount->VAT_percentage}</a>% VAT
</td>
<td class='col-min-width'>
- <a title='View' href='?id={$discount->getId()}' class='btn btn-primary btn-circle fa fa-arrow-right'></a>
- <a title='Delete' href='?delete={$discount->getId()}' class='btn btn-danger btn-circle fa fa-times'></a>
+ <a title='View' href='?id={$discount->id}' class='btn btn-primary btn-circle fa fa-arrow-right'></a>
+ <a title='Delete' href='?delete={$discount->id}' class='btn btn-danger btn-circle fa fa-times'></a>
</td>
</tr>";
}
diff --git a/include/discounts.php b/include/discounts.php
index a4d9df6..5da2dc4 100644
--- a/include/discounts.php
+++ b/include/discounts.php
@@ -46,7 +46,7 @@ require('./header.php');
$id = (int) $_GET['id'];
try {
$discount = new Discount($_pdo, $id);
- $header = "<a href='".Constants::url_external."discounts'>Discounts</a> / {$discount->getTitle()}";
+ $header = "<a href='".Constants::url_external."discounts'>Discounts</a> / {$discount->title}";
$show_individual = $id;
} catch (PDOException $e) {
$alert = "<div class='alert alert-danger alert-dismissable'><button type='button' class='close fa fa-times' data-dismiss='alert' aria-hidden='true'></button>The discount with id $id</i> could not be found.</div>";
@@ -66,9 +66,9 @@ require('./header.php');
try {
$discount = new Discount($_pdo, $id);
if ($discount->delete()) {
- echo "<div class='alert alert-success alert-dismissable'><button type='button' class='close fa fa-times' data-dismiss='alert' aria-hidden='true'></button>The discount with title <i>{$discount->getTitle()}</i> has been removed.</div>";
+ echo "<div class='alert alert-success alert-dismissable'><button type='button' class='close fa fa-times' data-dismiss='alert' aria-hidden='true'></button>The discount with title <i>{$discount->title}</i> has been removed.</div>";
} else {
- echo "<div class='alert alert-warning alert-dismissable'><button type='button' class='close fa fa-times' data-dismiss='alert' aria-hidden='true'></button>The discount with title <i>{$discount->getTitle()}</i> could not be removed. Perhaps it's already removed?</div>";
+ echo "<div class='alert alert-warning alert-dismissable'><button type='button' class='close fa fa-times' data-dismiss='alert' aria-hidden='true'></button>The discount with title <i>{$discount->title}</i> could not be removed. Perhaps it's already removed?</div>";
}
} catch (PDOException $e) {
echo "<div class='alert alert-danger alert-dismissable'><button type='button' class='close fa fa-times' data-dismiss='alert' aria-hidden='true'></button>The discount could not be removed due to a PDO error.</div>";
diff --git a/include/offers-overview.php b/include/offers-overview.php
index 09c6e12..2c5b483 100644
--- a/include/offers-overview.php
+++ b/include/offers-overview.php
@@ -49,7 +49,7 @@ require_once('./login.php');
echo "<b>{$assignment->title}</b><br/><span class='smaller'>(".Constants::invoice_valuta."{$assignment->calculate(assignment::SUBTOTAL)} excl. VAT, ".Constants::invoice_valuta."{$assignment->calculate(assignment::TOTAL)} incl. VAT)</span><br/><p>{$assignment->getHTMLDescription()}</p>";
}
foreach ($offer->getDiscounts() as $discount) {
- echo "<b>{$discount->getTitle()}</b><br/><span class='smaller'>(".Constants::invoice_valuta."{$discount->calculate(discount::SUBTOTAL)} excl. VAT, ".Constants::invoice_valuta."{$discount->calculate(discount::TOTAL)} incl. VAT)</span><br/><p>{$discount->getDescription()}</p>";
+ echo "<b>{$discount->title}</b><br/><span class='smaller'>(".Constants::invoice_valuta."{$discount->calculate(discount::SUBTOTAL)} excl. VAT, ".Constants::invoice_valuta."{$discount->calculate(discount::TOTAL)} incl. VAT)</span><br/><p>{$discount->description}</p>";
}
echo "</td>
<td class='col-min-width'>
diff --git a/include/offers-view.php b/include/offers-view.php
index 6b84e5c..9a2978f 100644
--- a/include/offers-view.php
+++ b/include/offers-view.php
@@ -147,18 +147,18 @@ $_offer = new Offer($_pdo, $_id);
$discounts = BusinessAdmin::getDiscounts($_pdo, array("offerId = {$_offer->getId()}"));
foreach ($discounts as $discount) {
echo "<tr>
- <td class='col-min-width'>{$discount->getId()}</td>
+ <td class='col-min-width'>{$discount->id}</td>
<td class='col-max-width'>
- <b><a href='#' class='editable' id='editable-discount-{$discount->getId()}-title' data-type='text' data-pk='{$discount->getId()}' data-url='".Constants::url_external."discounts/edit'>{$discount->getTitle()}</a></b><br/>
- <p>{$discount->getDescription()}</p>
+ <b><a href='#' class='editable' id='editable-discount-{$discount->id}-title' data-type='text' data-pk='{$discount->id}' data-url='".Constants::url_external."discounts/edit'>{$discount->title}</a></b><br/>
+ <p>{$discount->description}</p>
</td>
<td class='col-min-width'>
- ".Constants::invoice_valuta."<a href='#' class='editable' id='editable-discount-{$discount->getId()}-value' data-type='text' data-pk='{$discount->getId()}' data-url='".Constants::url_external."discounts/edit'>{$discount->getValue()}</a> / hr<br/>
- <a href='#' class='editable' id='editable-discount-{$discount->getId()}-vat' data-type='text' data-pk='{$discount->getId()}' data-url='".Constants::url_external."discounts/edit'>{$discount->getVAT()}</a>% VAT
+ ".Constants::invoice_valuta."<a href='#' class='editable' id='editable-discount-{$discount->id}-value' data-type='text' data-pk='{$discount->id}' data-url='".Constants::url_external."discounts/edit'>{$discount->value}</a> / hr<br/>
+ <a href='#' class='editable' id='editable-discount-{$discount->id}-vat' data-type='text' data-pk='{$discount->id}' data-url='".Constants::url_external."discounts/edit'>{$discount->VAT_percentage}</a>% VAT
</td>
<td class='col-min-width'>
- <a title='View' href='".Constants::url_internal."/discounts?id={$discount->getId()}' class='btn btn-primary btn-circle fa fa-arrow-right'></a>
- <a title='Delete' href='".Constants::url_internal."/discounts?delete={$discount->getId()}' class='btn btn-danger btn-circle fa fa-times'></a>
+ <a title='View' href='".Constants::url_internal."/discounts?id={$discount->id}' class='btn btn-primary btn-circle fa fa-arrow-right'></a>
+ <a title='Delete' href='".Constants::url_internal."/discounts?delete={$discount->id}' class='btn btn-danger btn-circle fa fa-times'></a>
</td>
</tr>";
}