예제 #1
0
 /**
  * Cash Payment.
  *
  * @param $order
  *
  * @return \Illuminate\Http\JsonResponse
  */
 public function payment($order)
 {
     try {
         \DB::beginTransaction();
         $type = \Input::get('type', 'cash');
         /**
          * ! Todo:: Optimize the payment creation logic.
          *
          * Check if the order payment is exist;
          * If exist and has the same payment type, return the payment.
          * If don't have the same payment type, delete the old payment.
          * Create a new payment for this order.
          */
         if ($order->payment) {
             if ($order->payment->payment_method()->get()->first()->name == $type) {
                 return $this->setStatusCode(200)->respondWithItem($order->payment);
             } else {
                 $order->payment->delete();
                 // Fire delete sales event.
                 \Event::fire('paxifi.notifications.sales.delete', [$order->payment]);
             }
         }
         $newPayment = ['payment_method_id' => PaymentMethods::getMethodIdByName($type), 'order_id' => $order->id, 'details' => $this->translator->trans("payments.{$type}.create")];
         if ($payment = Payment::create($newPayment)) {
             \DB::commit();
             return $this->setStatusCode(200)->respondWithItem($payment);
         }
         return $this->setStatusCode(500)->respondWithError('Payment create failed, please try it later.');
     } catch (ValidationException $e) {
         return $this->errorWrongArgs($e->getErrors());
     } catch (\Exception $e) {
         return $this->errorInternalError();
     }
 }