示例#1
0
 def get(self, id_persona):
     try:
         dirname = os.path.dirname(__file__)
         user_model = UserModel()
         id_cliente = yield user_model.get_client_id_by_person_id(
             id_persona)
         if not id_cliente:
             raise Exception('Cliente no encontrado')
         try:
             filename = os.path.join(dirname,
                                     'recoms/' + str(id_cliente) + '.json')
             file = open(filename, 'r')
             file = file.read()
             recom = json.loads(file)
         except:
             product_model = ProductModel()
             util = UtilProject()
             recom = yield product_model.get_default_recommendations()
             recom = util.cast_numeric_to_string(recom, 'precio_venta')
             recom = util.cast_numeric_to_string(recom, 'score')
         self.set_status(200)
         self.write({'recommendations': recom})
     except Exception as error:
         self.set_status(400)
         self.write({'message': str(error)})
示例#2
0
 def get(self, id_usuario, id_departamento):
     try:
         util = UtilProject()
         user_model = UserModel()
         product_model = ProductModel()
         products = yield product_model.get_products_by_department(
             id_departamento)
         id_cliente = yield user_model.get_client_id_by_person_id(
             id_usuario)
         if not id_cliente:
             raise Exception('Cliente no encontrado')
         client = yield user_model.get_client_thetas(id_cliente)
         if client['thetas']:
             client['theta'] = np.array([client['thetas']],
                                        dtype=np.longdouble)
             del client['thetas']
             for product in products:
                 product['x'] = np.array([product['x']],
                                         dtype=np.longdouble)
             client = yield user_model.get_purchases_and_favs_by_client(
                 client)
             favs = client['favs']
             purchases = client['purchases']
             recommendations = []
             for product in products:
                 if not any(
                         d['fk_id_producto'] == product['id_producto']
                         for d in favs) or not any(
                             d['fk_id_producto'] == product['id_producto']
                             for d in purchases):
                     recommendations.append({
                         'id_producto':
                         product['id_producto'],
                         'score':
                         np.matmul(client['theta'].T, product['x'])[0][0] +
                         product['mu']
                     })
             recommendations = yield product_model.get_recommendations_specific_info(
                 recommendations
             )  #obtenemos los datos de cada recomendacion
             recommendations = sorted(
                 recommendations, key=lambda k: k['score'],
                 reverse=True)  #ordenamos de mayor a menor
             recommendations = recommendations[:15]
         else:
             recommendations = yield product_model.get_default_recommendations_department(
                 id_departamento)
         recommendations = util.cast_numeric_to_string(
             recommendations, 'precio_venta')
         recommendations = util.cast_numeric_to_string(
             recommendations, 'score')
         self.set_status(200)
         self.write({'recommendations': recommendations})
     except Exception as error:
         import traceback
         traceback.print_exc()
         self.set_status(400)
         self.write({'message': str(error)})
     """
示例#3
0
 def get(self, id_persona):
     try:
         user_model = UserModel()
         id_cliente = yield user_model.get_client_id_by_person_id(
             id_persona)
         if not id_cliente:
             raise Exception('Cliente no encontrado.')
         achievements = yield user_model.get_client_achievements(id_cliente)
         if len(achievements) is 0:
             raise Exception('No tienes ningun logro.')
         self.set_status(200)
         self.write({'achievements': achievements})
     except Exception as error:
         self.set_status(400)
         self.write({'message': str(error)})
class FavouriteHandler(tornado.web.RequestHandler):

  @gen.coroutine
  def post(self):
    try:
      self.__model = UserModel()
      data = json.loads(self.request.body.decode('UTF-8'))
      if not 'id_persona' in data and not 'id_producto' in data and not 'favorito' in data:
        raise Exception('No cumples con los datos necesarios.')
      id_cliente = yield self.__model.get_client_id_by_person_id(data['id_persona'])
      if not id_cliente:
        raise Exception('Ha ocurrido un error al buscar el cliente.')
      if data['favorito'] is 1:
        registered = yield self.__model.existent_favourite(id_cliente, data['id_producto'])
        if registered:
          raise Exception('Este producto ya estaba agregado a tus favoritos.')
        register = yield self.__model.add_client_favourite(id_cliente, data['id_producto'])
        if not register:
          raise Exception('Ha ocurrido un error.')    
        self.set_status(200)
        self.write({'message': 'Producto agregado a favoritos'})
      else:
        errased = yield self.__model.remove_client_favourite(id_cliente, data['id_producto'])
        if not errased:
          raise Exception('Ha habido un problema al remover de favoritos.')
        self.set_status(200)
        self.write({'message' : 'Se ha removido el producto de favoritos.'})
    except Exception as error:
      self.set_status(400)
      self.write({'message' : str(error)})
  
  @gen.coroutine
  def get(self):
    try:
      self.__model = UserModel()
      self.__util = UtilProject()
      id_cliente = yield self.__model.get_cliente_id_from_persona_id(self.get_argument('id_persona'))
      if not id_cliente:
        raise Exception('Ha ocurrido un error al buscar el cliente.')
      favourites = yield self.__model.get_client_favourites_products(id_cliente)
      if not favourites or len(favourites) == 0:
        raise Exception('No tienes ningún favorito registrado.')
      favourites = self.__util.cast_numeric_to_string(favourites, 'precio_venta')
      self.set_status(200)
      self.write({'products': favourites})
    except Exception as error:
      self.set_status(400)
      self.write({'message' : str(error)})