aboutsummaryrefslogtreecommitdiff
path: root/classes/payment.php
blob: 9d4782c5c8023b41541dbf4e95d2df411474299a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<?php
/**
 * Provides the payment class, an interface to the payment 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 payment table in the database
 */
class payment {
	/**
	 * @var pdo $pdo                The PDO class for database communication
	 * @var int $id                 The id of the payment
	 * @var int $offerId            The id of the offer this payment is linked to
	 * @var int $date               A unix timestamp describing the date of the payment
	 */
	protected $pdo, $offerId, $id, $date;

	/**
	 * Create a new instance
	 *
	 * @param PDO $pdo              The PDO class, to access the database
	 * @param int $id               The id of the payment to fetch
	 *
	 * @throws PDOException         If something went wrong with the database
	 * @throws Exception            If the payment could not be found
	 */
	public function __construct($pdo, $id) {
		$this->pdo = $pdo;

		$stmt = $this->pdo->prepare("SELECT * FROM `".constants::db_prefix."payment` WHERE `id`=?");
		$stmt->execute(array($id));
		if ($stmt->rowCount() == 0) {
			throw new Exception("The payment with id '$id' could not be found.");
		}
		$payment = $stmt->fetch(PDO::FETCH_ASSOC);

		$this->id = $payment['id'];
		$this->offerId = $payment['offerId'];
		$this->date = strtotime($payment['date']);
	}

	//------------------------------------------------------------------------------
	// Getters and setters
	//------------------------------------------------------------------------------

	/**
	 * Get the ID of the payment
	 *
	 * @return int                  The ID
	 */
	public function getId() {
		return $this->id;
	}

	/**
	 * Get the ID of the offer that this payment is linked to
	 *
	 * @return int                  The ID
	 */
	public function getOfferId() {
		return $this->offerId;
	}

	/**
	 * Get the offer that this payment is linked to
	 *
	 * @return offer                The offer
	 */
	public function getOffer() {
		return new offer($this->pdo, $this->offerId);
	}

	/**
	 * Get the date of the payment
	 *
	 * @return int                   A unix timestamp describing the date of the payment
	 */
	public function getDate() {
		return $this->date;
	}

	/**
	 * Set the date of the payment
	 *
	 * @param int $date              The new date for the payment
	 *
	 * @throws PDOException          If something went wrong with the database
	 *
	 * @return bool                  True on success, false on failure
	 */
	public function setDate($date) {
		$stmt = $this->pdo->prepare("UPDATE `".constants::db_prefix."payment` SET `date`=? WHERE `id`=?");
		$stmt->execute([date('Y-m-d H:i:s', $date), $this->id]);
		if ($stmt->rowCount() == 1) {
			$this->date = $date;
			return true;
		} else {
			return false;
		}
	}

	//------------------------------------------------------------------------------
	// Other functions
	//------------------------------------------------------------------------------

	/**
	 * Remove this payment from the database
	 *
	 * If this doesn't succeed (i.e. false is returned), that means the payment 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."payment` WHERE `id`=?");
		$stmt->execute(array($this->id));
		if ($stmt->rowCount() != 1) {
			return false;
		} else {
			return true;
		}
	}
}