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'; } }
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.'); } }
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'; } }
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'); }