def _get_trader(self, trader_id): """ enter in current order and display form for work with it :param trader_id: :return TraderUser: """ trader_user = TraderUser(trader_id=trader_id) trader_user.load_current(db=self.BD) return trader_user
def _add_trader(self, message): """ add new user with role 'Trader' """ user = User(chat_id=message.chat.id, role=config.Role.Trader) trader_id = self.BD.save_element(user) trader_user = TraderUser(trader_id=trader_id, user_name=message.from_user.first_name) trader_user.save(self.BD) self.bot.send_message(message.chat.id, 'Приятной работы', reply_markup=self.keybords.start_menu())
def pressed_btn_client(self, call, code): """ add client to order :param data: :return: """ trader = TraderUser(code['t']) trader.load_order(db=self.BD, order_id=code['o']) trader.order.set_client(client_id=code['c']) # calculate cost of delivery delivery_cost = trader.order.delivery_cost(db=self.BD) trader.order.save(db=self.BD) self.bot.answer_callback_query( call.id, 'Стоимость доставки {} рублей'.format(delivery_cost))
def _get_current_trader(self, message): """ get current trader :param message: :return: TraderUser """ user = self.BD.get_user(chat_id=message.chat.id) return TraderUser(user.id, message.from_user.first_name)
def pressed_btn_product(self, call, code): """ обрабатывает входящие запросы на нажатие кнопок товара inline """ trader = TraderUser(code['t']) if code['o'] is None: trader.order.save(self.BD) else: trader.load_order(db=self.BD, order_id=code['o']) if trader.add_item(db=self.BD, product_id=code['p']): product = self.BD.select_single_product(code['p']) self.bot.answer_callback_query(call.id, MESSAGES['product_order'].format( product.name, product.title, product.price, product.quantity), show_alert=True) else: self.bot.answer_callback_query(call.id, 'Недостаточно товаров на складе', show_alert=True)
def orders_info_menu(self, trader_user: TraderUser): """ create inline-menu of trader's orders :param trader_user: :return: markup """ orders = trader_user.get_orders(self.BD) self.markup = InlineKeyboardMarkup(row_width=1) if len(orders): for order in orders: # dump a data to json string # keys & values are: 'm' - menu: 'o' - orders (choose one order to work with) # 't' - trader id # 'o' - current order id data = json.dumps( { 'm': 'o', 't': trader_user.id, 'o': order.id }, separators=(',', ':')) self.markup.add(self.set_inline_btn(str(order), data)) return self.markup