Пример #1
0
    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("Мои активные запросы")]]))
Пример #3
0
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)
Пример #5
0
        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()
Пример #10
0
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')
Пример #14
0
 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}
Пример #15
0
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)
Пример #16
0
 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')
Пример #20
0
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
Пример #21
0
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
Пример #22
0
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()
Пример #23
0
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))
Пример #24
0
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, "Введите описание вашего запроса:")
Пример #28
0
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"])