Example #1
0
def receipts(user_id):
    
    user = User.query.filter_by(id=user_id).first()

    if not user:
        return make_response("User " + str(user_id) + " doesn't exist", 404)

    if request.method == "POST":        
        if validate_request_receipt():
            receipt_date = date_string_to_datetime(request.json["date_time"])

            receipt = Receipt(request.json["store_name"],
                        request.json["category"],
                        request.json["total_transaction"],
                        receipt_date)

            user.receipts.append(receipt)

            for item in request.json["items"]:
                if validate_item(item):
                    item = PurchasedItem(item["name"],
                        request.json["category"],
                        item["price_per_item"],
                        item["quantity"])

                    receipt.purchased_items.append(item)


            db.add(user)
            db.commit()

            return json.dumps({"receipt": receipt.serialize()})

    else: #request is a get and return the receipts of the user
        return get_user_receipts(user)
Example #2
0
def add_receipt(num_receipts=1):
	user = User.query.first()

	days_ago_to_start = num_receipts/2
	date = datetime.now() - timedelta(days=days_ago_to_start)
	even_receipt = True

	for x in range(num_receipts):
		SHOP_NAME = "Countdown Birkenhead"
		SHOP_CATEGORY = "Groceries"
		TOTAL = 123.81
		r = Receipt(SHOP_NAME, SHOP_CATEGORY, TOTAL, date)
		r.purchased_items = [
			    PurchasedItem("Chocolate Milk", SHOP_CATEGORY, 3.99, 2),
			    PurchasedItem("Garlic Pita Breads", SHOP_CATEGORY, 4.50, 1),
			    PurchasedItem("Old Spice Deoderant", SHOP_CATEGORY, 6.21, 4),
			    PurchasedItem("Eye Fillet Steak", SHOP_CATEGORY, 21.4, 1),
			    PurchasedItem("Obikwa Wine 750mL", SHOP_CATEGORY, 6.99, 4),
			    PurchasedItem("North Shore Rubbish Sack", SHOP_CATEGORY, 4.99, 5),
			    PurchasedItem("Nutri-Grain 700g", SHOP_CATEGORY, 6.23, 1),
			    PurchasedItem("Olivio Butter", SHOP_CATEGORY, 5.95, 1)
       					 	]
		user.receipts.append(r)

		even_receipt = not even_receipt
		if even_receipt:
			date = date + timedelta(days=1)
		print len(user.receipts)

	db.add(user)
	db.commit()
Example #3
0
def rand_receipt():
  store = choice(store_names)
  # print store
  store_name = store.split("-")[0].strip()
  category = store.split("-")[1].strip()

  # tax_rate = randint(100, 150)/1000.0

  items = rand_items(store_name, category, randint(1, 7))

  total_transaction = 0.0
  for item in items:
    total_transaction += item.price_per_item * item.quantity

  total_transaction = round(total_transaction, 2)

  days = randint(0, 21)
  hours = randint(0,23)
  minutes = randint(0, 59)
  time_ago = timedelta(days=days, hours=hours, minutes=minutes)

  receipt = Receipt(store_name, category, total_transaction, datetime.now()-time_ago)
  receipt.purchased_items = items

  return receipt
def create_cocktail_mary_post():
    user = Session.query(User).filter(User.username == 'Fat Larry').first()
    category = (Session.query(Category).filter(
        Category.name == 'Коктейли').one_or_none())
    receipt_text = '''Налить водку и томатный сок в охлаждённый высокий
        стакан. Добавить лимонный сок. После по вкусу насыпать перец и соль.
        Всё тщательно перемешать и украсить веточкой сельдерея, можно долькой
        лимона.
    '''
    receipt = Receipt(
        user_id=user.id,
        category_id=category.id,
        title='Коктейль Кровавая Мэри',
        text=receipt_text,
        is_published=True,
        category=category,
        picture='mary.jpg',
        picture_min='mary-small.jpg',
    )
    ingredients = [
        ('водка', 'охлаждённая', 75, 'мл'),
        ('томатный сок', '', 100, 'мл'),
    ]
    for item in ingredients:
        ingredient = Session.query(Ingredient).filter(
            Ingredient.name == item[0]).first()
        a = IngredientsAssociation(correction=item[1],
                                   quantity=item[2],
                                   measure=item[3])
        a.ingredient = ingredient
        receipt.ingredients.append(a)
    Session.flush()
    Session.add(receipt)
    Session.commit()
Example #5
0
	def get(self):
		user = users.get_current_user()
		if user:
			list_receipt = Receipt.listReceiptByUsr(user)
			self.response.write(JINJA_ENVIRONMENT.get_template('templates/list_new.html').render({'receipts' : list_receipt}))
			

		else:
			self.redirect(users.create_login_url(self.request.uri))
Example #6
0
def monitor_receipt_and_contract():
    """
    监听 kafka 交易数据,出现新数据时,从 web3 获取 receipt
    :return:
    """
    if not config.get('kafka', 'transaction_topic', fallback=None):
        logger_err.error(
            'config.ini 中没有 transaction_topic 参数,退出 monitor_receipt_and_contract 任务'
        )
        return
    elif not config.get('kafka', 'receipt_topic', fallback=None):
        logger_err.error(
            'config.ini 中没有 receipt_topic 参数,退出 monitor_receipt_and_contract 任务'
        )
        return
    elif not config.get('kafka', 'contract_topic', fallback=None):
        logger_err.error(
            'config.ini 中没有 contract_topic 参数,退出 monitor_receipt_and_contract 任务'
        )
        return
    consumer = kafka_consumer(config.get('kafka', 'transaction_topic'),
                              group_id='monitor_receipt')
    last_block_height = None
    tx_cnt = 0  # 已处理的交易数
    for msg in consumer:
        tx = msg.value

        current_block_height = tx["block_number"]
        if last_block_height != current_block_height:
            logger.info(f'区块 {last_block_height} 共处理交易 {tx_cnt} 笔')
            logger.info(f'开始处理区块高度 {current_block_height} 下各交易的 receipt')
            last_block_height = current_block_height
            tx_cnt = 1
        else:
            tx_cnt += 1

        try:
            receipt = w3.eth.getTransactionReceipt(tx['hash'])
        except TransactionNotFound:
            logger_err.error(
                f'在区块高度 {current_block_height} 中找不到交易 {tx["hash"]}')
            continue

        Receipt(data=receipt).save()
        if receipt.get('contractAddress'):
            logger.info(f'在区块高度为 {current_block_height} 的交易 {tx["hash"]} 中'
                        f'发现新创建合约 {receipt.get("contractAddress")}')
            Contract(data=receipt,
                     block_number=receipt.get('blockNumber')).save()
Example #7
0
	def get(self):
		user = users.get_current_user()
		if user:
			list_receipt = Receipt.listReceiptByUsr(user, self.request.get('keyword'))
			
			search
			self.response.headers['Content-Type'] = 'applicaton/json'
			result = search.Index('api-tags').search("ii")

			obj = {
			 'list' : {"a":"a"}
			}
			self.response.out.write(json.dumps(obj))

		else:
			self.redirect(users.create_login_url(self.request.uri))
def create_omelet_post():
    user = (Session.query(User).filter(
        User.username == 'Fat Larry').one_or_none())
    category = (Session.query(Category).filter(
        Category.name == 'Завтраки').one_or_none())
    receipt_text = '''Нагрейте оливковое масло в маленькой сковороде на
        среднем огне. Добавьте лук и бекон, жарьте 2-3 минуты, постоянно
        помешивая компоненты. Взбейте два яйца, разбавьте небольшим
        количеством холодной воды. Приправьте специями, тщательно перемешайте.
        Постепенно выливайте яичную смесь на сковороду с луком и беконом.
        Жарьте яичницу с беконом на протяжении 3-4 минут, подавайте с
        французским багетом. Декорируйте листьями салата, пряными веточками
        душистых трав (укропом, петрушкой).
    '''
    receipt = Receipt(
        user_id=user.id,
        category_id=category.id,
        title='Омлет с беконом',
        text=receipt_text,
        is_published=True,
        category=category,
        picture='omelette.jpeg',
        picture_min='omelette-small.jpeg',
    )
    ingredients = [
        ('яйцо', 'куриное', 3, 'шт'),
        ('бекон', 'тонкий', 125, 'гр'),
        ('масло оливковое', '', 1, 'ст. ложка'),
        ('сыр', 'тёртый', 85, 'гр'),
        ('лук', 'красный', 1, 'шт'),
        ('соль', 'по вкусу', 1, 'щепотка'),
        ('перец', 'по вкусу', 1, 'щепотка'),
        ('специи', 'по вкусу', 1, 'щепотка'),
    ]
    for item in ingredients:
        ingredient = Session.query(Ingredient).filter(
            Ingredient.name == item[0]).first()
        a = IngredientsAssociation(correction=item[1],
                                   quantity=item[2],
                                   measure=item[3])
        a.ingredient = ingredient
        receipt.ingredients.append(a)
    Session.flush()
    Session.add(receipt)
    Session.commit()
def create_chicken_post():
    user = (Session.query(User).filter(
        User.username == 'Child of spices').first())
    category = (Session.query(Category).filter(
        Category.name == 'Вторые блюда').one_or_none())
    receipt_text = '''Голени посолить, поперчить и обжарить до румяной
        корочки. Уложить в форму, смазанную маслом. Помидоры и один сладкий
        перец нарезать кубиками, другой перец — средними полосками, лук —
        полукольцами, чеснок измельчить. Там же, где жарилась курица,
        обжарить лук, затем добавить помидоры и перец кубиком, готовить на
        большом огне 5 минут. Под конец добавить чеснок и листики 1 веточки
        розмарина (я добавляла сушёный), посолить, поперчить. Выложить соус
        на курицу. Сверху положить полоски перца, целые помидорки черри и 2
        веточки розмарина. Печь около 25 минут при 200 градусах.
    '''
    receipt = Receipt(
        user_id=user.id,
        category_id=category.id,
        title='Курица с овощами',
        text=receipt_text,
        is_published=True,
        category=category,
        picture='chicken.jpg',
        picture_min='chicken-small.jpg',
    )
    ingredients = [
        ('курица', '', 500, 'гр'),
        ('розмарин', 'по вкусу', 1, 'веточка'),
        ('сметана', '', 1, 'столовая ложка'),
        ('соль', 'по вкусу', 1, 'щепотка'),
        ('перец', 'по вкусу', 1, 'щепотка'),
    ]
    for item in ingredients:
        ingredient = Session.query(Ingredient).filter(
            Ingredient.name == item[0]).first()
        a = IngredientsAssociation(correction=item[1],
                                   quantity=item[2],
                                   measure=item[3])
        a.ingredient = ingredient
        receipt.ingredients.append(a)
    Session.flush()
    Session.flush()
    Session.add(receipt)
    Session.commit()
Example #10
0
def confirm_ticket(ticket_id, user_id, quantity, price):
    receipt = Receipt(user_id=user_id)
    db.session.add(receipt)
    db.session.commit()
    # db.session.close()
    # session = db.Session()
    # receipt_created = session.query(Receipt).filter(Receipt.user_id==user_id)
    receipt_detail = ReceiptDetail(receipt_id=receipt.id,
                                   ticket_id=ticket_id,
                                   quantity=quantity,
                                   price=price * quantity)
    db.session.add(receipt_detail)

    try:
        db.session.commit()
        return True
    except Exception as e:
        print(e)
        db.session.rollback()
        return False
def create_banana_cocktail_post():
    user = (Session.query(User).filter(
        User.username == 'Child of spices').first())
    category = (Session.query(Category).filter(
        Category.name == 'Коктейли').one_or_none())
    receipt_text = '''Бананы очистить, нарезать кусочками, шоколад разломить
        на несколько частей. В кастрюлю влить молоко, положить бананы и
        поставить на медленный огонь. Постоянно помешивая, довести почти до
        кипения. Как только шоколад расплавится, снять с огня. Блендером
        взбить полученную смесь до появления пены. Разлить по стаканам и
        посыпьте корицей.
    '''
    receipt = Receipt(
        user_id=user.id,
        category_id=category.id,
        title='Молочный коктейль с бананом и шоколадом',
        text=receipt_text,
        is_published=True,
        category=category,
        picture='banana.jpg',
        picture_min='banana-small.jpg',
    )
    ingredients = [
        ('молоко', '', 500, 'мл'),
        ('банан', 'свежий', 1, 'шт'),
        ('шоколад', 'молочный', 80, 'гр'),
        ('сахар', 'по вкусу', 2, 'столовые ложки'),
    ]
    for item in ingredients:
        ingredient = Session.query(Ingredient).filter(
            Ingredient.name == item[0]).first()
        a = IngredientsAssociation(correction=item[1],
                                   quantity=item[2],
                                   measure=item[3])
        a.ingredient = ingredient
        receipt.ingredients.append(a)
    Session.flush()
    Session.add(receipt)
    Session.commit()
Example #12
0
	def post(self):

		user = users.get_current_user()
		if user:
			
			file_upload = self.request.POST.get("file", None)
			file_name = file_upload.filename
			logging.info(file_name)
			receipt = Receipt()
			receipt.store = self.request.get('store')
			receipt.usr = user
			receipt.picture = Images(filename = file_name, blob = file_upload.file.read()).put()
			receipt.put()
			t = {"image" : '/serve/%s'%receipt.picture.id()}
			self.response.write(JINJA_ENVIRONMENT.get_template('templates/submit_success.html').render(t))
		else:
			self.redirect(users.create_login_url(self.request.uri))
Example #13
0
	def post(self):
		user = users.get_current_user()
		if user:
			try:
				file_upload = self.request.POST.get("file", None)
				file_name = file_upload.filename
				logging.info(file_name)
				file = insert_file(file_name,"Image file",None, mimetypes.guess_type(file_name)[0],file_upload.file.read())
				insert_permission(file.get('id'), '*****@*****.**','user','reader')
				receipt = Receipt()
				receipt.desc = self.request.get('desc')
				receipt.tags = self.request.get('tags').split()
				receipt.usr = user
				receipt.picture_dlink = file.get('id')
				receipt.put()
				self.response.write(JINJA_ENVIRONMENT.get_template('templates/submit_success.html').render({'id' : file.get('id')}))
			except Exception as e:
				self.response.write("Sorry, something went wrong. Please try again later!!")
				logging.error(e)
		else:
			self.redirect(users.create_login_url(self.request.uri))