orderByRequest($order, $request); // Filter $this->filterRequest( builder: $order, request: $request, filterKeys: [ 'payment_id' => self::F_TEXT, 'discount' => self::F_TEXT, 'email' => [ 'type' => self::F_TEXT, 'column' => 'users.email' ], 'status' => [ 'type' => self::F_NOT_CONTAIN, 'column' => 'orders.status' ], 'from_date' => [ 'type' => self::F_THAN_EQ_DATETIME, 'column' => 'orders.created_at' ], 'to_date' => [ 'type' => self::F_LESS_EQ_DATETIME, 'column' => 'orders.created_at' ], ] ); $responseData = array_merge( $order->paginate($request->get('per_page'))->toArray(), ['status' => true] ); return response()->json($responseData); } public function update(OrderRequest $request) { $id = $request->input('id'); $order = Order::find($id); $client = Client::find($order['user_id']); $package = Package::find($order['package_id']); $order['status'] = $request->input('status'); if ($request->input('status') == self::ORDER_STATUS_COMPLETE) { if ($order['discount']) { // Update discount $discount = Discount::where('code', $order['discount'])->first(); if ($discount != null) { $discount['user_id'] = $client->id; $discount['email'] = $client->email; $discount['date_used'] = now(); $discount->save(); } } // Update point for client $client->point += (int) $order['point']; } $status = -1; if ($request->input('status') == self::ORDER_STATUS_COMPLETE) { $status = 1; event( new PaymentCompleted( payment_id: $order['payment_id'], email: $client->email, name: $client->name, type: "PAYPAL", product_name: $package->title, point: $order->point, discount_value: view_price((float) $package->price - (float) $order['total_price']), total_price: $package->price ) ); } elseif ($request->input('status') == self::ORDER_STATUS_CANCEL) { $status = 0; if ($order['discount']) { $discount = Discount::where('code', $order['discount'])->first(); $discount['status'] = 1; $discount->save(); } event( new PaymentCanceled( payment_id: $order['payment_id'], email: $client->email, name: $client->name ) ); } else { $status = 2; } // Create history HistoryPayment::create([ 'payment_id' => $order['payment_id'], 'status' => $status, 'payload' => $request->all(), 'response' => [ 'order' => $order, 'client' => $client, 'discount' => $discount ?? [], 'message' => "Change by Admin" ] ]); $order->save(); $client->save(); return response()->json([ 'data' => $order, 'status' => true ]); } }