public function findAll(UsersEntity $user)
 {
     $hydrator = new ClassMethods();
     $hydrator->addStrategy('items', new OrderItemHydratorStrategy(new ClassMethods()));
     $res = [];
     switch ($user->getRole()) {
         case 'administrador':
             $orders = $this->tableGateway->select();
             break;
         case 'salesman':
             $orders = $this->tableGateway->select(['user_id' => $user->getId()]);
             break;
         case 'guest':
         default:
             return new ApiProblem(405, "Guests can't get orders list.");
             break;
     }
     foreach ($orders as $order) {
         $items = $this->orderItemTableGateway->select(['order_id' => $order->getId()]);
         foreach ($items as $item) {
             $order->addItem($item);
         }
         $data = $hydrator->extract($order);
         $res[] = $data;
     }
     $arrayAdapter = new ArrayAdapter($res);
     $ordersCollection = new OrdersCollection($arrayAdapter);
     return $ordersCollection;
 }
 public function find($id, UsersEntity $user = null)
 {
     $hydrator = new ClassMethods();
     $hydrator->addStrategy('items', new OrderItemHydratorStrategy($hydrator));
     $where = new Where();
     $where->equalTo('id', $id);
     if ($user) {
         $where->equalTo('user_id', $user->getId());
     }
     $order = $this->tableGateway->select($where)->current();
     if (!$order) {
         return null;
     }
     $client = $this->clientTableGateway->select(['id' => $order->getClientId()])->current();
     $order->setClient($client);
     $sql = $this->tableGatewayItems->getSql();
     $select = $sql->select();
     $select->join('products', 'order_items.product_id = products.id', ['product_name' => 'name'])->where(['order_id' => $order->getId()]);
     $items = $this->tableGatewayItems->selectWith($select);
     foreach ($items as $item) {
         $order->addItem($item);
     }
     return $hydrator->extract($order);
 }
 /**
  * 
  * @param UsersEntity $object
  */
 public function extract($object)
 {
     return ['id' => $object->getId(), 'username' => $object->getUsername(), 'password' => $object->getPassword(), 'first_name' => $object->getFirstName(), 'last_name' => $object->getLastName(), 'role' => $object->getRole()];
 }