EUVATChecker
3 years ago
Calculator.php
3 years ago
CouponService.php
3 years ago
CustomerService.php
3 years ago
OrderService.php
4 months ago
SubscriptionService.php
4 months ago
TaxService.php
3 years ago
index.php
3 years ago
CouponService.php
82 lines
| 1 | <?php |
| 2 | |
| 3 | namespace ProfilePress\Core\Membership\Services; |
| 4 | |
| 5 | use ProfilePress\Core\Membership\Models\Coupon\CouponFactory; |
| 6 | use ProfilePress\Core\Membership\Models\Coupon\CouponUnit; |
| 7 | use ProfilePress\Core\Membership\Models\Order\OrderStatus; |
| 8 | use ProfilePress\Core\Membership\Models\Order\OrderType; |
| 9 | use ProfilePress\Core\Membership\Repositories\OrderRepository; |
| 10 | |
| 11 | class CouponService |
| 12 | { |
| 13 | public function get_coupon_percentage_fee($percentage, $subtotal) |
| 14 | { |
| 15 | return Calculator::init($percentage)-> |
| 16 | dividedBy('100')-> |
| 17 | multipliedBy($subtotal)-> |
| 18 | val(); |
| 19 | } |
| 20 | |
| 21 | /** |
| 22 | * Checks whether a customer has used a particular discount code. |
| 23 | * |
| 24 | * This is used to prevent users from spamming discount codes. |
| 25 | * |
| 26 | * @param int $customer_id |
| 27 | * @param string $code The discount code to check against the customer ID. |
| 28 | * |
| 29 | * @return bool |
| 30 | */ |
| 31 | function customer_has_used_discount($customer_id, $code) |
| 32 | { |
| 33 | $result = OrderRepository::init()->retrieveBy([ |
| 34 | 'coupon_code' => $code, |
| 35 | 'status' => [OrderStatus::COMPLETED, OrderStatus::REFUNDED], |
| 36 | 'customer_id' => (int)$customer_id, |
| 37 | 'number' => 1 |
| 38 | ]); |
| 39 | |
| 40 | return ! empty($result); |
| 41 | } |
| 42 | |
| 43 | /** |
| 44 | * Returns a formatted discount amount with a '%' sign appended (percentage-based) or with the |
| 45 | * currency sign added to the amount (flat discount rate). |
| 46 | * |
| 47 | * @param string $amount Discount amount. |
| 48 | * @param string $type Discount amount - either 'percentage' or 'flat'. |
| 49 | * |
| 50 | * @return string |
| 51 | */ |
| 52 | function format_discount_display($amount, $type) |
| 53 | { |
| 54 | $discount = ''; |
| 55 | if ($type == CouponUnit::PERCENTAGE) { |
| 56 | $discount = $amount . '%'; |
| 57 | } elseif ($type == CouponUnit::FLAT) { |
| 58 | $discount = ppress_display_amount($amount); |
| 59 | } |
| 60 | |
| 61 | return $discount; |
| 62 | } |
| 63 | |
| 64 | public function validate_discount($code, $plan_id = 0, $order_type = OrderType::NEW_ORDER) |
| 65 | { |
| 66 | return CouponFactory::fromCode($code)->is_valid($plan_id, $order_type); |
| 67 | } |
| 68 | |
| 69 | /** |
| 70 | * @return self |
| 71 | */ |
| 72 | public static function init() |
| 73 | { |
| 74 | static $instance = null; |
| 75 | |
| 76 | if (is_null($instance)) { |
| 77 | $instance = new self(); |
| 78 | } |
| 79 | |
| 80 | return $instance; |
| 81 | } |
| 82 | } |