Esempio n. 1
0
def set_price(bot, update, session, **kwargs):
    """ Set order price when command /set <order> = <price> is issued """

    orders = update.message.text.replace('/set ', '').split(',')

    for order in orders:
        order, price = [x.strip() for x in order.split('=')]
        if is_digit(price):
            price = abs(float(price))
            Order.objects(session=session, order=order).update(price=price)
Esempio n. 2
0
def create_order(user_email):
    user = User.query.filter_by(email=user_email).first()
    if user is not None:
        neworder = Order(userID=user.id)
        for order in user.orders:
            order.mostRecent = False
        user.orders = user.orders + [neworder]
        db.session.add(neworder)
        db.session.commit()
        return json.dumps({'success': True, 'data': neworder.serialize()}), 200
    return json.dumps({'success': False, 'error': 'User not found!'}), 404
Esempio n. 3
0
 def update(self, *args, msg=None, hand=None, data=None, **kwargs):
     order = Order.filter_by(user_id=msg.from_user.id, state=StateOrder.not_send).first()
     if not order:
         order = Order.create(user_id=msg.from_user.id, number=str(msg.message.message_id))
     ware = Ware.get(data)
     if not ware:
         logger.error(f'Товар {data} не найден')
         return
     try:
         order_item = order.add_item(ware)
     except Exception as e:
         hand.send_cb(msg, str(e), show_alert=False)
         return
     self.answer(*args, msg=msg, hand=hand, ware=ware, order=order, order_item=order_item, **kwargs)
Esempio n. 4
0
def create_order(date_time, user_id, restaurant_id, driver_id):
    user = User.query.filter_by(id=user_id).first()
    restaurant = Restaurant.query.filter_by(id=restaurant_id).first()
    if user is None or restaurant is None:
        return None
    order = Order(date_time=date_time,
                  paid=False,
                  delivered=False,
                  user_id=user_id,
                  restaurant_id=restaurant_id,
                  driver_id=driver_id)
    db.session.add(order)
    db.session.commit()
    return order.serialize()
Esempio n. 5
0
def menu():
    email = global_email
    if request.method == 'POST':
        item_id = request.form['index']
        item = request.form['item']
        if email != None:

            all = db.session.query(Order).all()
            list = []
            for a in all:
                list.append(a.order_id)

            if list ==[]:
                i = 1
            else:
                i = max(list) + 1

            row = Order(order_id=i, email=global_email, item_id=item_id, item=item, order_status=0)
            db.session.add(row)
            db.session.commit()
            return render_template('menu.html', email=email,name=global_name )

        else:
            return render_template('menu.html', email=email)
    else:
        email = global_email

        return render_template('menu.html', email=email, name=global_name)
Esempio n. 6
0
def extract_order_details(order_string, session):
        order = ''
        quantity = None
        orders_db = []

        all_orders = Order.objects(session=session)
        for item in all_orders:
            orders_db.extend(item.order.split())
        
        for word in order_string.split():
            if word.isdigit() and not quantity:
                quantity = int(word)
            else:
                if order:
                    order += ' '
                
                closest_matches = get_close_matches(word, set(list(orders_db)))

                if closest_matches:
                    order += closest_matches[0]
                else:
                    order += word

        quantity = quantity or 1
        return quantity, order
Esempio n. 7
0
def delete_order(bot, update, session, **kwargs):
    """ Delete order(s) when command /delete is issued """
    
    username = kwargs.get('username')
    
    if update.message.reply_to_message:
        payload = update.message.reply_to_message.text.replace('/add', '')
    else:
        payload = update.message.text.replace('/delete', '')

    orders = payload.split('+')

    for order_string in orders:
        quantity, order = extract_order_details(order_string.strip(), session)
        quantity = abs(int(quantity))

        order_obj = Order.get(session=session, 
                              username=username, 
                              order=order)
                              
        if order_obj:
            if quantity >= order_obj.quantity:
                order_obj.delete()
            else:
                order_obj.update(inc__quantity= -quantity)
 async def post(self):
     data = await self.request.post()
     order = Order(**data['order'])
     session.add(order)
     async for fields in data['chooce_clothes']:
         order.chooce_clothes.append(ChooceClothes(**fields))
     session.commit()
     return web.json_response({'created': True}, status=200)
Esempio n. 9
0
 def update(self, *args, msg=None, hand=None, **kwargs):
     msg_text = 'Нет открытых заказов'
     order = Order.filter_by(user_id=msg.from_user.id, state=StateOrder.not_send).first()
     if order:
         order.delete()
         hand.send_msg(msg, 'Заказ удален', reply_markup=hand.keybords.kb_menu('start'))
     else:
         hand.send_msg(msg, msg_text, reply_markup=hand.keybords.kb_menu('start'))
Esempio n. 10
0
 def update(self, *args, msg=None, hand=None, **kwargs):
     msg_text = 'Нет открытых заказов'
     order = Order.filter_by(user_id=msg.from_user.id, state=StateOrder.not_send).first()
     if order:
         msg_text = order.for_msg()
         hand.send_msg(msg, 'Ваш заказ', reply_markup=hand.keybords.kb_menu('order'))
         hand.send_msg(msg, msg_text, parse_mode='HTML', reply_markup=hand.keybords.in_line_kb_menu(menu_items=order.make_inline_menu()))
     else:
         hand.send_msg(msg, msg_text)
Esempio n. 11
0
 def update(self, *args, msg=None, hand=None, **kwargs):
     msg_text = 'Нет открытых заказов'
     order = Order.filter_by(user_id=msg.from_user.id, state=StateOrder.not_send).first()
     if order:
         msg_text = order.for_msg() + settings.BOTTOM_ORDER_APPLY
         order.state = StateOrder.sended
         order.save()
         hand.send_msg(msg, msg_text, parse_mode='HTML', reply_markup=hand.keybords.kb_menu('order'))
     else:
         hand.send_msg(msg, msg_text)
Esempio n. 12
0
def add_order(bot, update, session, **kwargs):
    """ Add new order(s) when command /add is issued """
    
    username = kwargs.get('username')

    if update.message.reply_to_message:
        payload = update.message.reply_to_message.text
    else:
        payload = update.message.text

    pattern = '(/add|@{})'.format(config['telegram']['username'])
    regex = re.compile(pattern, re.IGNORECASE)
    orders = regex.sub('', payload).split('+')

    for order_string in orders:
        quantity, order = extract_order_details(order_string.strip(), session)

        if not order:
            update.message.reply_text('Invalid order')
            return
        
        # check if the order exists in user's order
        exists_order = Order.get(session=session, 
                                 username=username, 
                                 order=order)

        # if the order exists in user's order, increment quantity
        if exists_order:
            exists_order.update(inc__quantity=quantity)
        
        # else, record the new order
        else: 
            order_object = Order(session=session, 
                                 username=username, 
                                 quantity=quantity, 
                                 order=order)
            order_object.save()
Esempio n. 13
0
 async def post(self):
     try:
         data = await self.request.post()
         order = Order(type_order=data['type_order'],
                       name=data['name'],
                       phone=data['phone'],
                       price=data['price'])
         chooce_clothes = ChooceClothes(clothes_id=data['id_clothes'],
                                        price=data['price'])
         session.add(order, chooce_clothes)
         order.chooce_clothes.append(chooce_clothes)
         session.commit()
         return web.json_response({'created': True}, status=200)
     except:
         return web.json_response({'created': False}, status=500)
Esempio n. 14
0
    def finish(self):
        """Finish the order."""
        # Get the information.
        local = self.ids['local'].text.strip()
        info = self.ids['info'].text.strip()
        delivered = self.ids['delivered'].state == 'down'

        # Ensure local was given.
        if not local:
            ErrorPopup('É necessário especificar o local da entrega!').open()
            return

        app = App.get_running_app()

        # Get the client if already exists, otherwise create one.
        if 'id' in self.manager.client.keys():
            print('hi')
            query = app.session.query(Client)
            client = query.filter(Client.id == self.manager.client['id']).one()
        else:
            client = Client(
                name=self.manager.client['name'],
                phone=self.manager.client['phone']
            )
            app.session.add(client)
            app.session.commit()

        # Create the order
        order = Order(
            local=local,
            itens=self.manager.itens,
            total=self.manager.total,
            extra_info=info,
            client_id=client.id,
            delivered=delivered
        )
        app.session.add(order)
        app.session.commit()

        # Show that the operation succeeded and go back to main menu.
        SuccessPopup('Pedido realizado com sucesso').open()
        app.sm.current = 'menu'
        app.new_order.sm.current = 'itens'

        # Clean all the screens in this section.
        for screen in app.new_order.sm.children:
            screen.clean()
Esempio n. 15
0
def bill(bot, update, session, **kwargs):
    """ Show bill when command /bill is issued """
    
    normalized_service = 0
    normalized_tax = 0
    service = session.service
    tax = session.tax

    number_of_users = len(Order.objects.distinct('username'))

    if number_of_users:
        normalized_service = service / number_of_users
        normalized_tax = tax / number_of_users

    pipeline = [
        {
            '$match': {'session': session.id}
        },
        {
            '$group':{
                '_id':{'username':'******'},
                'net':{'$sum':{'$multiply':["$price", "$quantity"]}},
            }
        },
        {
            '$addFields':{
                'total':{'$add':['$net', normalized_service, normalized_tax]}
            }
        }
    ]

    unknown_orders = Order.objects(session=session, price=None)
    bill = Order.objects.aggregate(*pipeline)

    text = render_template(
        'bill.html',
        bill=bill, 
        unknown_orders=unknown_orders,
        service=service,
        tax=tax,
    )
    bot.send_message(text=text, chat_id=session.chat_id, parse_mode=ParseMode.HTML)
Esempio n. 16
0
def menu():
    if 'email' in session:
        email = session['email']
        name = session['name']
    else:
        email = None
        name = None

    if request.method == 'POST':
        item_id = request.form['index']
        item = request.form['item']
        if email != None:

            all = session_app.query(Order).all()
            list = []
            for a in all:
                list.append(a.order_id)

            if list == []:
                i = 1
            else:
                i = max(list) + 1

            row = Order(order_id=i,
                        email=email,
                        item_id=item_id,
                        item=item,
                        order_status=0)
            session_app.add(row)
            session_app.commit()
            return render_template('menu.html', email=email, name=name)

        else:
            return render_template('menu.html', email=email)
    else:
        email = email

        return render_template('menu.html', email=email, name=name)
Esempio n. 17
0
def create_order(buyer_id):
    new_order = Order(total=0, buyer_id=buyer_id, submitted=False)
    db.session.add(new_order)
    db.session.commit()
    return new_order.serialize()