PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.16.9
GiveWP – Donation Plugin and Fundraising Platform v4.16.9
4.16.9 4.16.8.1 4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 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 All 255 releases
give / src / EventTickets / ListTable / Columns / SalesAmountColumn.php

SalesAmountColumn.php in GiveWP – Donation Plugin and Fundraising Platform 4.16.9, at src/EventTickets/ListTable/Columns/SalesAmountColumn.php

100 lines 2.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare(strict_types=1);
4
5 namespace Give\EventTickets\ListTable\Columns;
6
7 use Give\EventTickets\Models\Event;
8 use Give\Framework\ListTable\ModelColumn;
9 use Give\Framework\Support\ValueObjects\Money;
10
11 /**
12 * @since 3.6.0
13 *
14 * @extends ModelColumn<Event>
15 */
16 class SalesAmountColumn extends ModelColumn
17 {
18 /**
19 * @inheritDoc
20 *
21 * @since 3.6.0
22 */
23 public static function getId(): string
24 {
25 return 'salesAmount';
26 }
27
28 /**
29 * @inheritDoc
30 *
31 * @since 3.6.0
32 */
33 public function getLabel(): string
34 {
35 return __('Ticket Sales', 'give');
36 }
37
38 /**
39 * @inheritDoc
40 *
41 * @since 3.20.0 Refactored to use event ticket amount instead of ticket type price
42 * @since 3.6.0
43 *
44 * @param Event $model
45 */
46 public function getCellValue($model, $locale = ''): string
47 {
48 $ticketTypes = [];
49 foreach ($model->ticketTypes()->getAll() ?? [] as $ticketType) {
50 $salesCount = $ticketType->eventTickets()->count();
51 $ticketsAvailable = $ticketType->capacity - $salesCount;
52
53 $ticketTypes[$ticketType->id] = [
54 'price' => $ticketType->price,
55 'capacity' => $ticketType->capacity,
56 'ticketsAvailable' => $ticketsAvailable,
57 ];
58 }
59
60 $salesTotal = array_reduce(
61 $model->eventTickets()->getAll() ?? [],
62 function (Money $carry, $eventTicket) {
63 return $carry->add($eventTicket->amount);
64 },
65 new Money(0, give_get_currency())
66 );
67 $maxCapacitySales = array_reduce($ticketTypes, function (Money $carry, $ticketType) {
68 return $carry->add($ticketType['price']->multiply($ticketType['ticketsAvailable']));
69 }, $salesTotal);
70
71 $salesPercentage = $maxCapacitySales->formatToMinorAmount() > 0 ? max(
72 min($salesTotal->formatToMinorAmount() / $maxCapacitySales->formatToMinorAmount(), 100),
73 0
74 ) : 0;
75
76 $template = '
77 <div
78 role="progressbar"
79 aria-labelledby="giveEventTicketsProgressBar-%1$d"
80 aria-valuenow="%2$s"
81 aria-valuemin="0"
82 aria-valuemax="100"
83 class="goalProgress"
84 >
85 <span style="width: %2$s%%"></span>
86 </div>
87 <div id="giveEventTicketsProgressBar-%1$d">%3$s %4$s %5$s</div>
88 ';
89
90 return sprintf(
91 $template,
92 $model->id,
93 $salesPercentage,
94 $salesTotal->formatToLocale($locale),
95 __('of', 'give'),
96 $maxCapacitySales->formatToLocale($locale)
97 );
98 }
99 }
100