PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.19.7
GiveWP – Donation Plugin and Fundraising Platform v2.19.7
4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Donations / Models / Donation.php
give / src / Donations / Models Last commit date
Donation.php 4 years ago
Donation.php
232 lines
1 <?php
2
3 namespace Give\Donations\Models;
4
5 use DateTime;
6 use Exception;
7 use Give\Donations\DataTransferObjects\DonationQueryData;
8 use Give\Donations\Factories\DonationFactory;
9 use Give\Donations\Properties\BillingAddress;
10 use Give\Donations\ValueObjects\DonationMode;
11 use Give\Donations\ValueObjects\DonationStatus;
12 use Give\Donors\Models\Donor;
13 use Give\Framework\Exceptions\Primitives\InvalidArgumentException;
14 use Give\Framework\Models\Contracts\ModelCrud;
15 use Give\Framework\Models\Contracts\ModelHasFactory;
16 use Give\Framework\Models\Model;
17 use Give\Framework\Models\ModelQueryBuilder;
18 use Give\Framework\Models\ValueObjects\Relationship;
19 use Give\Subscriptions\Models\Subscription;
20 use Give\ValueObjects\Money;
21
22 /**
23 * Class Donation
24 *
25 * @since 2.19.6
26 *
27 * @property int $id
28 * @property int $formId
29 * @property string $formTitle
30 * @property DateTime $createdAt
31 * @property DateTime $updatedAt
32 * @property DonationStatus $status
33 * @property DonationMode $mode
34 * @property int $amount
35 * @property string $currency
36 * @property string $gateway
37 * @property int $donorId
38 * @property string $firstName
39 * @property string $lastName
40 * @property string $email
41 * @property int $parentId
42 * @property int $subscriptionId
43 * @property BillingAddress $billingAddress
44 * @property string $purchaseKey
45 * @property string $donorIp
46 * @property bool $anonymous
47 * @property int $levelId
48 * @property string $gatewayTransactionId
49 * @property Donor $donor
50 * @property Subscription $subscription
51 */
52 class Donation extends Model implements ModelCrud, ModelHasFactory
53 {
54 /**
55 * @inheritdoc
56 */
57 protected $properties = [
58 'id' => 'int',
59 'formId' => 'int',
60 'formTitle' => 'string',
61 'purchaseKey' => 'string',
62 'donorIp' => 'string',
63 'createdAt' => DateTime::class,
64 'updatedAt' => DateTime::class,
65 'status' => DonationStatus::class,
66 'mode' => DonationMode::class,
67 'amount' => 'int',
68 'currency' => 'string',
69 'gateway' => 'string',
70 'donorId' => 'int',
71 'firstName' => 'string',
72 'lastName' => 'string',
73 'email' => 'string',
74 'parentId' => 'int',
75 'subscriptionId' => 'int',
76 'billingAddress' => BillingAddress::class,
77 'anonymous' => 'bool',
78 'levelId' => 'int',
79 'gatewayTransactionId' => 'string',
80 ];
81
82 /**
83 * @inheritdoc
84 */
85 protected $relationships = [
86 'donor' => Relationship::BELONGS_TO,
87 'subscription' => Relationship::BELONGS_TO,
88 ];
89
90 /**
91 * Find donation by ID
92 *
93 * @since 2.19.6
94 *
95 * @param int $id
96 *
97 * @return Donation
98 */
99 public static function find($id)
100 {
101 return give()->donations->getById($id);
102 }
103
104 /**
105 * @since 2.19.6
106 *
107 * @param array $attributes
108 *
109 * @return Donation
110 *
111 * @throws Exception|InvalidArgumentException
112 */
113 public static function create(array $attributes)
114 {
115 $donation = new static($attributes);
116
117 return give()->donations->insert($donation);
118 }
119
120 /**
121 * @since 2.19.6
122 *
123 * @return Donation
124 *
125 * @throws Exception|InvalidArgumentException
126 */
127 public function save()
128 {
129 if (!$this->id) {
130 return give()->donations->insert($this);
131 }
132
133 return give()->donations->update($this);
134 }
135
136 /**
137 * @since 2.19.6
138 *
139 * @return bool
140 *
141 * @throws Exception|InvalidArgumentException
142 */
143 public function delete()
144 {
145 return give()->donations->delete($this);
146 }
147
148 /**
149 * @since 2.19.6
150 *
151 * @return ModelQueryBuilder<Donor>
152 */
153 public function donor()
154 {
155 return give()->donors->queryById($this->donorId);
156 }
157
158 /**
159 * @since 2.19.6
160 *
161 * @return ModelQueryBuilder<Subscription>
162 */
163 public function subscription()
164 {
165 if ($this->subscriptionId) {
166 return give()->subscriptions->queryById($this->subscriptionId);
167 }
168
169 return give()->subscriptions->queryByDonationId($this->id);
170 }
171
172 /**
173 * @since 2.19.6
174 *
175 * @return int|null
176 */
177 public function getSequentialId()
178 {
179 return give()->donations->getSequentialId($this->id);
180 }
181
182 /**
183 * @since 2.19.6
184 *
185 * @return object[]
186 */
187 public function getNotes()
188 {
189 return give()->donations->getNotesByDonationId($this->id);
190 }
191
192 /**
193 * @since 2.19.6
194 *
195 * @return Money
196 */
197 public function getMinorAmount()
198 {
199 return Money::ofMinor($this->amount, $this->currency);
200 }
201
202 /**
203 * @since 2.19.6
204 *
205 * @return ModelQueryBuilder<Donation>
206 */
207 public static function query()
208 {
209 return give()->donations->prepareQuery();
210 }
211
212 /**
213 * @since 2.19.6
214 *
215 * @param object $object
216 *
217 * @return Donation
218 */
219 public static function fromQueryBuilderObject($object)
220 {
221 return DonationQueryData::fromObject($object)->toDonation();
222 }
223
224 /**
225 * @return DonationFactory<Donation>
226 */
227 public static function factory()
228 {
229 return new DonationFactory(static::class);
230 }
231 }
232