public function approveOrder(User $user, Order $order, $approved_at = null)
 {
     $allowedStatus = [OrderStatus::NewOrderStatus()->id, OrderStatus::FirstOrder()->id, OrderStatus::PaymentUploaded()->id, OrderStatus::Draft()->id];
     assert(in_array($order->order_status_id, $allowedStatus), "Invalid Order to approve {$order->id} - Status {$order->orderStatus->name}");
     Site::protect($order, 'Order');
     if (Auth::user()) {
         User::userProtect($order->user);
     }
     if ($order->order_status_id == OrderStatus::FirstOrder()->id) {
         Site::protect($order->user, 'User');
         $this->userManager->approveNewMember($user);
     }
     $wasDraft = $order->order_status_id == OrderStatus::Draft()->id;
     $order->orderStatus()->associate(OrderStatus::Approved());
     if (!$approved_at) {
         $approved_at = new Carbon();
     }
     $order->approved_at = $approved_at;
     if (Auth::user()) {
         $order->approved_by_id = Auth::user()->id;
     }
     $order->save();
     $approveId = Auth::user() ? Auth::user()->id : 0;
     Log::info("Order approved:{$order->id} by:" . $approveId);
     if (Auth::user()) {
         User::createUserEvent($order->user, ['created_at' => $approved_at, 'controller' => 'timeline', 'route' => '/order-approved', 'target_id' => $order->id, 'parameter_id' => $approveId]);
     } else {
         User::createUserEvent($order->user, ['created_at' => $approved_at, 'controller' => 'timeline', 'route' => '/order-auto-approved', 'target_id' => $order->id]);
     }
     NotificationRequest::create(['target_id' => $order->id, 'route' => 'order-approved', 'channel' => 'Sms', 'to_user_id' => $order->user->id]);
     if ($wasDraft) {
         NotificationRequest::create(['target_id' => $order->id, 'route' => 'new-online-order', 'channel' => 'Sms', 'to_user_id' => $order->proofOfTransfer->receiver_user_id]);
     }
     return $order;
 }
Beispiel #2
0
 public function canPrintState()
 {
     return $this->order_status_id == OrderStatus::Approved()->id;
 }