public function decide(Request $request, Order $order) { /** @var OrderRevision $orderRevision */ if (!($orderRevision = $this->orderManager->getOrderRevisionRepository()->whereOrder($order)->first())) { return $this->error(OrderRevision::CAN_NOT_FIND); } $this->authorize('decide', $orderRevision); $approved = $request->input('approved') ?: false; // If rejected mark the revision as not approved and be done. if (!$approved) { $orderRevision->setApproved(false); $this->orderManager->getOrderRevisionRepository()->save($orderRevision); return $this->success('action'); } // If accepted mark the revision as approved and update the order details. DB::transaction(function () use($order, $orderRevision, $approved) { $orderRevision->setApproved(); $this->orderManager->getOrderRevisionRepository()->save($orderRevision); $this->orderManager->getOrderRepository()->update($order, $orderRevision->getChangesArray()); event(new OrderRevisionEvent($orderRevision)); }); return $this->success('edit'); }