PluginProbe
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.4.1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.4.1
4.7.2 4.7.1 4.7.0 4.6.6 4.6.5 4.6.4 4.6.3 4.6.2 4.6.1 4.6.0 4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 All 281 releases
surecart / app / src / Models / Charge.php
Charge.php
159 lines 3.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace SureCart\Models;
4
5 use SureCart\Models\Traits\HasCustomer;
6 use SureCart\Models\Traits\HasDates;
7 use SureCart\Models\Traits\HasDisputes;
8 use SureCart\Models\Traits\HasOrder;
9 use SureCart\Models\Traits\HasPaymentMethod;
10 use SureCart\Models\Traits\HasSubscription;
11 use SureCart\Models\Traits\HasPaymentIntent;
12 use SureCart\Support\Currency;
13
14 /**
15 * Subscription model
16 */
17 class Charge extends Model {
18 use HasCustomer;
19 use HasOrder;
20 use HasSubscription;
21 use HasDates;
22 use HasPaymentMethod;
23 use HasPaymentIntent;
24 use HasDisputes;
25
26 /**
27 * Rest API endpoint
28 *
29 * @var string
30 */
31 protected $endpoint = 'charges';
32
33 /**
34 * Object name
35 *
36 * @var string
37 */
38 protected $object_name = 'charge';
39
40 /**
41 * Refund this specific charge
42 *
43 * @return \SureCart\Models\Refund
44 */
45 protected function refund() {
46 return new Refund( [ 'charge' => $this->id ] );
47 }
48
49 /**
50 * Get the display amount attribute.
51 *
52 * @return string
53 */
54 protected function getDisplayAmountAttribute() {
55 return Currency::format( $this->amount, $this->currency );
56 }
57
58 /**
59 * Get the human discount attribute.
60 *
61 * @return string|null
62 */
63 public function getExternalChargeLinkAttribute() {
64 if ( ! $this->payment_method || ! $this->payment_method->processor_type ) {
65 return null;
66 }
67
68 $payment_type = $this->payment_method->processor_type;
69
70 if ( ! in_array( $payment_type, [ 'stripe', 'paypal' ], true ) ) {
71 return null;
72 }
73
74 if ( ! $this->external_charge_id ) {
75 return null;
76 }
77
78 $external_charge_id = $this->external_charge_id;
79 $is_live_mode = $this->live_mode;
80
81 if ( 'stripe' === $payment_type ) {
82 return 'https://dashboard.stripe.com/' . ( ! $is_live_mode ? 'test/' : '' ) . 'charges/' . $external_charge_id;
83 }
84 if ( 'paypal' === $payment_type ) {
85 return 'https://www.' . ( ! $is_live_mode ? 'sandbox.' : '' ) . 'paypal.com/activity/payment/' . $external_charge_id;
86 }
87 }
88
89 /**
90 * Get the display amount attribute.
91 *
92 * @return string
93 */
94 public function getAmountDisplayAmountAttribute() {
95 return Currency::format( $this->amount, $this->currency );
96 }
97
98 /**
99 * Get the refunded display amount attribute.
100 *
101 * @return string
102 */
103 public function getRefundedDisplayAmountAttribute() {
104 return Currency::format( $this->refunded_amount, $this->currency );
105 }
106
107 /**
108 * Get the dispute status attribute.
109 *
110 * @return string
111 */
112 public function getDisputeStatusAttribute(): string {
113 if ( ! $this->disputed_amount ) {
114 return '';
115 }
116
117 if ( ! empty( $this->disputes->data ) && count( $this->disputes->data ) > 1 ) {
118 return __( 'Multiple Disputes', 'surecart' );
119 }
120
121 return $this->disputes->data[0]->status_display ?? '';
122 }
123
124 /**
125 * Get the dispute status type attribute.
126 *
127 * @return string
128 */
129 public function getDisputeStatusTypeAttribute(): string {
130 if ( ! $this->disputed_amount ) {
131 return '';
132 }
133
134 if ( ! empty( $this->disputes->data ) && count( $this->disputes->data ) > 1 ) {
135 return 'warning';
136 }
137
138 return $this->disputes->data[0]->status_type ?? '';
139 }
140
141 /**
142 * Get the disputed amount attribute.
143 *
144 * @return string
145 */
146 public function getDisputedDisplayAmountAttribute(): string {
147 return ! empty( $this->disputed_amount ) ? Currency::format( $this->disputed_amount, $this->currency ) : '';
148 }
149
150 /**
151 * Get the fully disputed attribute.
152 *
153 * @return bool
154 */
155 public function getFullyDisputedAttribute(): bool {
156 return $this->disputed_amount && ( $this->disputed_amount >= $this->amount );
157 }
158 }
159