def generate(self): username = self.StringReq('User') try: user = User.get(User.username == username) except: user = User.get() self.headers.append(('DateTime', getDate() + ' ' + getTime())) self.headers.append(('UserName', user.fullname())) list = user.salelist list = [d for d in list] users = User.select() for user in users: self.Echo('<User>') self.EchoTag('Id', user.username) self.EchoTag('UserName', user.fullname()) self.Echo('</User>') pages = split(list, _max_rows_) for list in pages: self.Echo('<Page>') for row in list: self.Echo('<Row>') self.EchoTag('Id', row.id) self.EchoTag('Time', row.time) self.EchoTag('Customer', row.customer.name) self.EchoTag('FullSale', row.fullsale) self.EchoTag('Prepaid', row.advance) self.EchoTag('Remain', row.remind()) self.Echo('</Row>') self.Echo('</Page>')
def _end_request(self, event, custom_data=None): user = User.get(id=self.user) if custom_data is None: from_stp = event.kwargs.get('from_stp', False) message = event.kwargs.get('message') request = Request.get(id=user.additional_data.get('chat')) else: from_stp = custom_data.get('from_stp', False) message = custom_data.get('message') request = Request.get(id=custom_data.get('request')) request.is_finished = True request.save() if from_stp: self.tb.edit_message_text("Вы согласились закрыть заявку.", chat_id=self.chat, message_id=message) else: self.tb.edit_message_text("Вы закрыли данную заявку.", chat_id=self.chat, message_id=message) user_stp = request.stp.user if from_stp: self.tb.send_message(user_stp.telegram_chat_id, "Пользователь согласился закрыть заявку /r%s %s" % (request.id, request.unicode_icons)) else: self.tb.send_message(user_stp.telegram_chat_id, "Пользователь закрыл заявку /r%s %s" % (request.id, request.unicode_icons)) if user_stp.state == 'stp_chatting' and user_stp.additional_data.get('chat') == request.id: user_stp.state = 'stp_main_menu' user_stp.additional_data = {} user_stp.save() self.tb.send_message(user_stp.telegram_chat_id, "Сейчас вы будете переведены в главное меню", reply_markup=generate_custom_keyboard(types.ReplyKeyboardMarkup, [[get_button("Список запросов")], [get_button("Мои активные запросы")]]))
def add_recipe_(data, user): """ Добавление рецепта пользователем :param data: Поля Рецента :param user: Пользователь, добавивший рецепт :return: json - добавленный элемент или текст ошибки. """ try: with db.atomic(): recipe = Recipe.create( author_id=User.get(nickname=user.nickname), name=data['name'], description=data['description'], steps=data['steps'], image=data['image'], dish_type=DishType.get(dish_type_name=data['dish_type']), hashtags=data['hashtags'], active=True) recipe.save() recipe_json = __create_json_recipe(recipe) except Exception as e: error_message = str(e).split('\n')[0] recipe_json = {'error': error_message} return json.dumps(recipe_json, ensure_ascii=False)
def _save_state(self, event): if self.user: user = User.get(id=self.user) user.state = self.state user.save() if not config.IS_PROD: self.tb.send_message(self.chat, "State: %s" % user.state)
def arguments_wrapper(*args, **kwargs): try: changed = False user = User.get(telegram_user_id=args[0].from_user.id) if not user.has_messages_after_notification: user.has_messages_after_notification = True changed = True if user.username != args[0].from_user.username: user.username = args[0].from_user.username changed = True if user.first_name != args[0].from_user.first_name: user.first_name = args[0].from_user.first_name changed = True if user.surname != args[0].from_user.last_name: user.surname = args[0].from_user.last_name changed = True if changed: user.save() except Exception as e: user = User.create( username=args[0].from_user.username, telegram_chat_id=args[0].chat.id, first_name=args[0].from_user.first_name, surname=args[0].from_user.last_name, # phone=args[0].contact.phone_number, telegram_user_id=args[0].from_user.id) obj = tele_func(*args, **kwargs, user=user) return obj
def _main_menu(self, event): user = User.get(id=self.user) user.additional_data = {} user.save() keyboard = generate_custom_keyboard(types.ReplyKeyboardMarkup, buttons=[["Создать заявку"], ["Мои заявки"]]) self.tb.send_message(self.chat, "Для продолжения выберите одну из команд под полем ввода.", reply_markup=keyboard)
def send_to_chat_text(self, stp_user, message): r = Request.get(id=stp_user.additional_data['chat']) user = User.get(id=r.user) if 'chat' in user.additional_data and r.id == user.additional_data['chat']: Message(is_read=True, from_user=stp_user, to_user=user, text=message.text, request=r).save() self.tb.send_message(user.telegram_chat_id, "%s" % message.text) else: Message(is_read=False, from_user=stp_user, to_user=user, text=message.text, request=r).save()
def _check_comment(self, event): user = User.get(id=self.user) sel_type = Type.get(id=user.additional_data['type']) if sel_type.comment_required: if user.additional_data.get('comment', None) is None: return False else: return True else: return True
def save_selected_type(self, type, message): user = User.get(id=self.user) user.additional_data['type'] = type bread = get_breadcrumb(type, Type, 'parent_type') self.tb.edit_message_text("Вы выбрали тип вопроса: %s" % bread, chat_id=self.chat, message_id=message) keyboard = generate_custom_keyboard(types.InlineKeyboardMarkup, [[get_button_inline("Изменить", "type_change")]]) self.tb.edit_message_reply_markup(self.chat, message_id=message, reply_markup=keyboard) user.save()
def PromoteUser(user_id, sections): user = User.get(id=user_id) user.state = 'stp_initial' user.save() stp = Stp.get_or_create(user=user, staff_id=1, is_active=True)[0] stp.save() [ StpSection.get_or_create(stp=stp, section=section, importance=1) for section in sections ]
def save_selected_section(self, section, message): user = User.get(id=self.user) user.additional_data = dict() user.additional_data['section'] = section bread = get_breadcrumb(section, Section, 'parent_section') self.tb.edit_message_text("Вы выбрали раздел: %s" % bread, chat_id=self.chat, message_id=message) keyboard = generate_custom_keyboard(types.InlineKeyboardMarkup, [[get_button_inline("Изменить", "section_change")]]) self.tb.edit_message_reply_markup(self.chat, message_id=message, reply_markup=keyboard) user.save()
def print_request(self, request, keyboard, stp, reply=None): stp = User.get(id=stp.user) self.tb.send_message(self.chat, "Заявка /r%s:\nНомер: %s\nНовых сообщений: <b>%s</b>\nКатегория: %s\nТип: %s\nКомментарий: %s" % ( str(request.id) + ' ' + request.unicode_icons, request.id, self.count_request_messages(request, stp), get_breadcrumb(request.type.section.id, Section, 'parent_section'), get_breadcrumb(request.type.id, Type, 'parent_type'), request.text, ), reply_markup=keyboard, parse_mode='HTML')
def _show_request(self, event): user = User.get(id=self.user) sel_type = Type.get(id=user.additional_data['type']) sel_section = Section.get(id=user.additional_data['section']) text = "<b>Категория заявки</b>: %s\n<b>Тип заявки</b>: %s\n" % (sel_section.name, sel_type.name) comment = user.additional_data.get('comment', '') text += "<b>Комментарий</b>: %s" % comment keyboard = generate_custom_keyboard(types.InlineKeyboardMarkup, [[get_button_inline("Изменить комментарий", "comment_change")], [get_button_inline("Изменить категорию", "section_change")], [get_button_inline("Изменить тип", "type_change")], [get_button_inline("Отправить обращение", "save_request")]]) self.tb.send_message(self.chat, text, reply_markup=keyboard, parse_mode='HTML')
def on_post(self, req, resp): username = req.get_param('username', required=True) password = req.get_param('password', required=True) try: user = User.get( Filter(username=username) & Filter(password=password)) token = jwt.encode( { 'id': user.id, 'exp': datetime.utcnow() + timedelta(days=14) }, SECRET_KEY).decode('utf-8') req.context['result'] = {'success': True, 'token': token} except (DoesNotExists, jwt.ExpiredSignatureError): req.context['result'] = {'success': False}
def get_recipes_list_favorites_(current_user): """ Получить список избранных рецптов пользователя :param current_user: ПОльзователь :return: json список рецептов """ user = User.get(nickname=current_user.nickname) favorites = user.favorites recipe_list = [] for favorite in favorites: recipe = favorite.recipe if recipe.active: recipe_list.append(__create_json_recipe(recipe, 'list')) return json.dumps(recipe_list, ensure_ascii=False)
def post(self): username = self.get_argument('username', None) password = self.get_argument('password', None) if username and password: try: user = User.get((User.username == username) | (User.email == username)) if user.check_password(password): self.session['user'] = user self.session.save() self.redirect('/admin') return else: self.flash('UserName or password invidate!') except Exception, e: self.flash('%s not Found!' % username)
def send_to_chat(self, text, user): try: r = Request.get(id=user.additional_data['chat']) if r.stp is not None: stp = User.get(id=Stp.get(id=r.stp).user) m = Message(from_user=user, to_user=stp.id, text=text, request=r) if 'chat' in stp.additional_data and stp.additional_data['chat'] == r.id: m.is_read = True self.tb.send_message(stp.telegram_chat_id, m.text) else: m = Message(from_user=user, to_user=None, text=text, request=r) m.save() except Exception as e: pass
def _show_types(self, event, custom_data=None): user = User.get(id=self.user) page = 0 selected_type = None reply_message = None if custom_data: page = custom_data.get('page', 0) selected_type = custom_data.get('selected_type', None) if not selected_type: selected_type = None reply_message = custom_data.get('message_id', None) av_types = Type.select().where( Type.section == user.additional_data['section']).where(Type.parent_type == selected_type).order_by( Type.click_count.desc()).offset( page * PAGE_SIZE).limit( PAGE_SIZE) total_count = Type.select().where( Type.section == user.additional_data['section']).where(Type.parent_type == selected_type).offset( page * PAGE_SIZE).count() if reply_message is None: keyboard = generate_custom_keyboard(types.ReplyKeyboardMarkup, [['В главное меню']]) self.tb.send_message(self.chat, "Выберите тип вопроса:", reply_markup=keyboard) buttons = [] for type in av_types: buttons.append([get_button_inline(type.name, "type_select %s" % type.id)]) nav_buttons = [] if page > 0: nav_buttons.append( get_button_inline("<", "type_prev %s %s" % (page - 1, selected_type if selected_type else ''))) if selected_type: nav_buttons.append( get_button_inline("На уровень выше", "type_up %s" % selected_type if selected_type else '')) if total_count > PAGE_SIZE: nav_buttons.append( get_button_inline(">", "type_next %s %s" % (page + 1, selected_type if selected_type else ''))) buttons.append(nav_buttons) keyboard = generate_custom_keyboard(types.InlineKeyboardMarkup, buttons) if reply_message is None: if av_types: self.tb.send_message(self.chat, "Доступные типы вопросов:", reply_markup=keyboard) else: self.tb.send_message(self.chat, "Доступные типы вопросов:\nКажется у данного типа или категории нет доступных типов обращений") else: self.tb.edit_message_reply_markup(self.chat, message_id=reply_message, reply_markup=keyboard)
def print_request(self, request): if not request.is_finished: keyboard = generate_custom_keyboard(types.InlineKeyboardMarkup, [ [get_button_inline("Перейти в чат", 'start_chat %s' % request.id)], [get_button_inline("Заявка решена", "change_request_status %s" % request.id)]]) else: keyboard = None self.tb.send_message(self.chat, "Заявка /r%s:\nНомер: %s\nНовых сообщений: <b>%s</b>\nКатегория: %s\nТип: %s\nКомментарий: %s\nСтатус: %s" % ( str(request.id) + ' ' + request.unicode_icons, request.id, self.count_request_messages(request.id, User.get(id=request.user)), get_breadcrumb(request.type.section.id, Section, 'parent_section'), get_breadcrumb(request.type.id, Type, 'parent_type'), request.text, "Завершена" if request.is_finished else "Не завершена" ), reply_markup=keyboard, parse_mode='HTML')
def delete_user_(current_user): """ Удалить пользователя :param current_user: пользователь :return: ответ как прошла операция """ try: nickname = current_user.nickname user = User.get(nickname=nickname) success = user.delete_instance(recursive=True) if success: response = {'success': nickname + ' user is deleted'} else: # тут я тоже не знаю что может ломаться response = {'error': 'error'} except Exception as e: error_message = str(e).split('\n')[0] response = {'error': error_message} return response
def get_user_(nickname, authorization=False): """ Достать пользователя :param nickname: никнейм :param authorization: Если авторизация, то другой ответ :return: json ответ с полями пользователя """ try: user = User.get(User.nickname == nickname) if authorization: user_json = __create_json_auth_user(user) else: user_json = __create_json_user(user) except Exception as e: error_message = str(e).split('\n')[0] user_json = {'error': error_message} if not authorization: user_json = json.dumps(user_json, ensure_ascii=False) return user_json
def _notify_user(data): text = "Для ваших заявок есть новые сообщения:\n" keyboard = generate_custom_keyboard( types.InlineKeyboardMarkup, [[get_button_inline("Мои заявки", "show_requests")]]) for user_id in data: user = User.get(id=user_id) if user.has_messages_after_notification: for chat in data[user_id]: request = Request.get() text += "Заявка /r%s:\nНомер: %s\n<b>Новых сообщений:" \ "%s</b>\nКатегория: %s\nТип: %s\nКомментарий: %s\n" % ( str(request.id) + ' ' + request.unicode_icons, request.id, chat['message_count'], get_breadcrumb(request.type.section.id, Section, 'parent_section'), get_breadcrumb(request.type.id, Type, 'parent_type'), request.text) tb.send_message(user.telegram_chat_id, text, reply_markup=keyboard, parse_mode='HTML') user.has_messages_after_notification = False user.save()
def promote_to_stp(user): tb = telebot.TeleBot(config.token) user = User.get(id=user) user.state = 'stp_main_menu' user.save() stp = Stp.get_or_create(user=user)[0] stp.is_active = True stp.save() try: keyboard = generate_custom_keyboard( types.ReplyKeyboardMarkup, buttons=[ ["Список запросов"], ["Мои активные запросы"], # ["Мои завершенные запросы"] ]) tb.send_message( user.telegram_chat_id, "Вы были переведены в раздел СТП, команды находятся под полем ввода", reply_markup=keyboard) except Exception as e: print("Cant promote to stp, reason: %s" % e) return redirect(url_for('stp.edit_view', id=stp.id))
def load_user(user_id): return User.get(user_id)
def _save_state(self, event): if self.user: user = User.get(id=self.user) user.state = self.state user.save()
def _save_comment(self, comment): user = User.get(id=self.user) user.additional_data['comment'] = comment user.save()
def _add_comment(self, event): user = User.get(id=self.user) self.tb.send_message(self.chat, "Введите описание вашего запроса:")
def _logged_in_user(): """ Helper function to get a logged in user """ if "user" in session: u = session['user'] return User.get(User.login_id == u["login_id"])