-
-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathExtension.php
115 lines (102 loc) · 3.81 KB
/
Extension.php
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
<?php
namespace Igniter\Coupons;
use Admin\Models\Customers_model;
use Admin\Models\Orders_model;
use Igniter\Cart\Classes\CartManager;
use Igniter\Coupons\Models\Coupons_history_model;
use Igniter\Coupons\Models\Coupons_model;
use Igniter\Flame\Cart\Facades\Cart;
use Igniter\Local\Facades\Location;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Support\Facades\Event;
use System\Classes\BaseExtension;
class Extension extends BaseExtension
{
public function boot()
{
Orders_model::extend(function ($model) {
$model->relation['hasMany']['coupon_history'] = [\Igniter\Coupons\Models\Coupons_history_model::class, 'delete' => true];
$model->implement[] = 'Igniter.Coupons.Actions.RedeemsCoupon';
});
Event::listen('cart.added', function () {
Coupons_model::isEnabled()
->isAutoApplicable()
->whereHasOrDoesntHaveLocation(Location::getId())
->each(function ($coupon) {
$orderDateTime = Location::orderDateTime();
if ($coupon->isExpired($orderDateTime))
return;
CartManager::instance()->applyCouponCondition($coupon->code);
});
});
Event::listen('igniter.checkout.afterSaveOrder', function ($order) {
if ($couponTotal = $order->getOrderTotals()->firstWhere('code', 'coupon')) {
$order->logCouponHistory($couponTotal);
}
});
Event::listen('admin.order.paymentProcessed', function ($order) {
$order->redeemCoupon();
});
Customers_model::created(function ($customer) {
Orders_model::where('email', $customer->email)
->chunk(100, function ($orders) use ($customer) {
foreach ($orders as $order) {
Coupons_history_model::where('order_id', $order->order_id)
->update(['customer_id' => $customer->customer_id]);
}
});
});
Relation::morphMap([
'coupon_history' => \Igniter\Coupons\Models\Coupons_history_model::class,
'coupons' => \Igniter\Coupons\Models\Coupons_model::class,
]);
}
public function registerApiResources()
{
return [
'coupons' => [
'controller' => \Igniter\Coupons\ApiResources\Coupons::class,
'name' => 'Coupons',
'description' => 'An API resource for coupons',
'actions' => [
'index:all', 'show:all', 'store:admin', 'update:admin', 'destroy:admin',
],
],
];
}
public function registerCartConditions()
{
return [
\Igniter\Coupons\CartConditions\Coupon::class => [
'name' => 'coupon',
'label' => 'lang:igniter.coupons::default.text_coupon',
'description' => 'lang:igniter.coupons::default.help_coupon_condition',
],
];
}
public function registerPermissions()
{
return [
'Admin.Coupons' => [
'label' => 'igniter.coupons::default.permissions',
'group' => 'admin::lang.permissions.name',
],
];
}
public function registerNavigation()
{
return [
'marketing' => [
'child' => [
'coupons' => [
'priority' => 10,
'class' => 'coupons',
'href' => admin_url('igniter/coupons/coupons'),
'title' => lang('igniter.coupons::default.side_menu'),
'permission' => 'Admin.Coupons',
],
],
],
];
}
}