コード例 #1
0
 public function insert($data)
 {
     $hydrator = new ObjectProperty();
     //Hidrate StdClass to array
     $data->user_id = $this->usersRepository->getAuthenticated()->getId();
     $data->created_at = (new \DateTime())->format('Y-m-d');
     $data->total = 0;
     $items = $data->item;
     unset($data->item);
     $orderData = $hydrator->extract($data);
     $tableGateway = $this->repository->getTableGateway();
     try {
         $tableGateway->getAdapter()->getDriver()->getConnection()->beginTransaction();
         $order_id = $this->repository->insert($orderData);
         foreach ($items as $key => $item) {
             $product = $this->productsRepository->find($item['product_id']);
             $item['order_id'] = $order_id;
             $item['price'] = $product->getPrice();
             $item['total'] = $items[$key]['total'] = $item['quantity'] * $item['price'];
             $total += $item['total'];
             $this->repository->insertItem($item);
         }
         $this->repository->update(['total' => $total], $order_id);
         $tableGateway->getAdapter()->getDriver()->getConnection()->commit();
         return ['order_id' => $order_id];
     } catch (\Exception $e) {
         $tableGateway->getAdapter()->getDriver()->getConnection()->rollback();
         return 'error';
     }
 }
コード例 #2
0
ファイル: OrdersService.php プロジェクト: netoudi/apigility
 public function update($idOrder, $data)
 {
     $order = $this->ordersRepository->find($idOrder);
     $items = $data->items;
     unset($data->items);
     $total = 0;
     $orderTable = $this->ordersRepository->getTableGateway();
     try {
         // Begin Transaction
         $orderTable->getAdapter()->getDriver()->getConnection()->beginTransaction();
         foreach ($items as $key => $item) {
             $item['total'] = $item['quantity'] * $item['price'];
             $items[$key]['total'] = $item['total'];
             $total += $item['total'];
         }
         foreach ($items as $item) {
             if (isset($item['id'])) {
                 $this->ordersRepository->updateItem($item['id'], $item);
             } else {
                 $item['order_id'] = $order->getId();
                 $this->ordersRepository->insertItem($item);
             }
         }
         $data->total = $this->getTotal($order->getId());
         $this->ordersRepository->update($order->getId(), $data);
         // Commit
         $orderTable->getAdapter()->getDriver()->getConnection()->commit();
         return $this->find($order->getId());
     } catch (\Exception $e) {
         // Rollback
         $orderTable->getAdapter()->getDriver()->getConnection()->rollback();
         throw new \Exception('Error processing order.');
     }
 }
コード例 #3
0
 public function insert($data)
 {
     $hydrator = new ObjectProperty();
     $data = $hydrator->extract($data);
     $orderData = $data;
     unset($orderData['item']);
     $items = $data['item'];
     $tableGateway = $this->repository->getTableGateway();
     try {
         $tableGateway->getAdapter()->getDriver()->getConnection()->beginTransaction();
         $orderId = $this->repository->insert($orderData);
         foreach ($items as $item) {
             $item['order_id'] = $orderId;
             $this->repository->insertItem($item);
         }
         $tableGateway->getAdapter()->getDriver()->getConnection()->commit();
         return ['order_id' => $orderId];
     } catch (\Exception $e) {
         $tableGateway->getAdapter()->getDriver()->getConnection()->rollback();
         return 'error';
     }
 }
コード例 #4
0
 public function delete($id)
 {
     $tableGateway = $this->repository->getTableGateway();
     $existe = $tableGateway->select(['id' => (int) $id]);
     if (count($existe) === 1) {
         try {
             $tableGateway->getAdapter()->getDriver()->getConnection()->beginTransaction();
             $orderItemTablegateway = $this->repository->getOrderItemTablegateway();
             $items = $this->repository->getOrderItems($id);
             foreach ($items as $item) {
                 $orderItemTablegateway->delete(['id' => (int) $item->getId()]);
             }
             $tableGateway->delete(['id' => (int) $id]);
             $tableGateway->getAdapter()->getDriver()->getConnection()->commit();
             return true;
         } catch (\Exception $e) {
             $tableGateway->getAdapter()->getDriver()->getConnection()->rollback();
             return new ApiProblem(450, 'Não foi possivel excluir o registro', null, 'Problemas ao excluir');
         }
     }
     return new ApiProblem(451, 'O registro não foi encontrado na base de dados', null, 'Registro não encontrado');
 }