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)
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
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)
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()
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)
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
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)
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'))
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)
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)
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()
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)
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()
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)
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)
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()