55use App \Events \OrderAfterCreatedEvent ;
66use App \Events \OrderAfterPaymentCreatedEvent ;
77use App \Events \OrderAfterRefundedEvent ;
8+ use App \Events \OrderAfterUpdatedEvent ;
89use App \Events \OrderBeforeDeleteEvent ;
910use App \Models \Order ;
1011use App \Models \OrderPayment ;
@@ -19,16 +20,24 @@ class ComputeCustomerAccountJob implements ShouldQueue
1920{
2021 use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
2122
23+ /**
24+ * @var CustomerService
25+ */
26+ protected $ customerService ;
27+
2228 public $ event ;
2329
2430 /**
2531 * Create a new job instance.
2632 *
2733 * @return void
2834 */
29- public function __construct ( $ event )
30- {
31- $ this ->event = $ event ;
35+ public function __construct (
36+ $ event ,
37+ CustomerService $ customerService
38+ ) {
39+ $ this ->event = $ event ;
40+ $ this ->customerService = $ customerService ;
3241 }
3342
3443 /**
@@ -38,61 +47,63 @@ public function __construct( $event )
3847 */
3948 public function handle ()
4049 {
41- if ( $ this ->event instanceof OrderBeforeDeleteEvent ) {
42- $ this ->handleDeletion ( $ this ->event );
43- } else if ( $ this ->event instanceof OrderAfterRefundedEvent ) {
44- $ this ->reduceCustomerPurchases ( $ this ->event );
45- } else if ( $ this ->event instanceof OrderAfterCreatedEvent ) {
46- $ this ->computeCustomerOwed ( $ this ->event );
47- $ this ->computeCustomerRewards ( $ this ->event );
50+ if ($ this ->event instanceof OrderBeforeDeleteEvent) {
51+ $ this ->handleDeletion ($ this ->event );
52+ } else if ($ this ->event instanceof OrderAfterRefundedEvent) {
53+ $ this ->reduceCustomerPurchases ($ this ->event );
54+ } else if (
55+ $ this ->event instanceof OrderAfterCreatedEvent ||
56+ $ this ->event instanceof OrderAfterUpdatedEvent
57+ ) {
58+ $ this ->computeCustomerOwed ($ this ->event );
59+ $ this ->computeCustomerRewards ($ this ->event );
4860 }
4961 }
5062
51- private function computeCustomerOwed ( OrderAfterCreatedEvent $ event )
63+ /**
64+ * We'll make sure to update the customer owed amount
65+ * when even he's involved on a transaction.
66+ */
67+ private function computeCustomerOwed ( $ event )
5268 {
53- $ event ->order ->customer ->owed_amount += ns ()->currency
54- ->define ( $ event ->order ->total )
55- ->subtractBy ( $ event ->order ->tendered )
56- ->getRaw ();
57-
58- $ event ->order ->customer ->save ();
69+ $ this ->customerService ->updateCustomerOwedAmount ($ event ->order ->customer );
5970 }
6071
61- private function computeCustomerRewards ( OrderAfterCreatedEvent $ event )
72+ private function computeCustomerRewards ( $ event )
6273 {
63- if ( $ event ->order ->payment_status === Order::PAYMENT_PAID ) {
74+ if ($ event ->order ->payment_status === Order::PAYMENT_PAID ) {
6475 /**
6576 * @var CustomerService
6677 */
67- $ customerService = app ()->make ( CustomerService::class );
68-
69- $ customerService ->computeReward (
70- $ event ->order ,
71- $ event ->order ->customer
78+ $ customerService = app ()->make (CustomerService::class);
79+
80+ $ customerService ->computeReward (
81+ $ event ->order ,
82+ $ event ->order ->customer
7283 );
7384 }
7485 }
7586
76- private function reduceCustomerPurchases ( OrderAfterRefundedEvent $ event )
87+ private function reduceCustomerPurchases (OrderAfterRefundedEvent $ event )
7788 {
7889 $ event ->order ->customer ->purchases_amount = $ event ->order ->customer ->purchases_amount - $ event ->orderRefund ->total ;
7990 $ event ->order ->customer ->save ();
8091 }
8192
82- private function handleDeletion ( OrderBeforeDeleteEvent $ event )
93+ private function handleDeletion (OrderBeforeDeleteEvent $ event )
8394 {
84- switch ( $ event ->order ->payment_status ) {
85- case 'paid ' :
95+ switch ( $ event ->order ->payment_status ) {
96+ case 'paid ' :
8697 $ event ->order ->customer ->purchases_amount -= $ event ->order ->total ;
87- break ;
88- case 'partially_paid ' :
98+ break ;
99+ case 'partially_paid ' :
89100 $ event ->order ->customer ->purchases_amount -= $ event ->order ->tendered ;
90- break ;
101+ break ;
91102 default :
92103 $ event ->order ->customer ->owed_amount -= $ event ->order ->total ;
93- break ;
104+ break ;
94105 }
95-
106+
96107 $ event ->order ->customer ->save ();
97108 }
98109}
0 commit comments