Esempio n. 1
0
    def text_format(self, message_text, update: Update, state):
        now = datetime.now()
        day = now - timedelta(days=abs(int(state['day'])))

        day_activities = DB.get_user_activities_by_day(state['u_id'],
                                                       state['day'])

        string = ""

        sum_duration = 0

        for activity in day_activities:
            project_str = ""
            if activity['project_name'] is not None:
                pr_name = activity['project_name'].replace("_", "\_")
                pr_name = pr_name.replace("(", "\(")
                pr_name = pr_name.replace(")", "\)")
                pr_name = pr_name.replace(".", "\.")
                pr_name = pr_name.replace("-", "\-")

                project_str = "(%s)" % pr_name

            duration = activity['sum']

            if duration == 0:
                start = datetime.strptime(activity['start_time'],
                                          '%Y-%m-%d %H:%M:%S')
                duration = (now - start).seconds / 3600

            if activity['challenge']:
                sum_duration += duration

            ac_name = activity['activity_name'].replace("_", "\_")
            # ac_name = ac_name.replace("(", "\(")
            # ac_name = ac_name.replace(")", "\)")
            # ac_name = ac_name.replace("-", "\-")
            # ac_name = ac_name.replace(".", "\.")

            string += "*%s*: _%s_ %s\n" %\
                      (ac_name, self.get_string_by_duration(duration), project_str)

        return message_text.format(day=day.strftime('%d.%m.%Y'),
                                   stats=string,
                                   time="_%s_" %
                                   self.get_string_by_duration(sum_duration))
Esempio n. 2
0
    def start_activity(self,
                       user_id,
                       name,
                       update: Update,
                       penalty=0,
                       edit=True,
                       delay=0,
                       project=None):
        active_activity = DB.get_active_activity(user_id)

        stopped_activity = None

        duration = 0

        if active_activity is not None:
            data_now = datetime.datetime.now()
            data_start = datetime.datetime.strptime(
                active_activity['start_time'], '%Y-%m-%d %H:%M:%S')
            duration = (data_now - data_start).seconds / 3600 - penalty / 60

            stopped_activity = active_activity
            stopped_activity['duration'] = duration

        if project is None:
            project = DB.get_active_project(user_id, name)

        if project is not None:
            DB.start_activity(user_id, name, duration, project['id'],
                              update.effective_chat.id, delay)
        else:
            DB.start_activity(user_id, name, duration, None,
                              update.effective_chat.id, delay)

        if stopped_activity is not None and stopped_activity[
                'activity_id'] != 0:
            if edit and update:
                func = update.callback_query.message.reply_to_message.reply_text
            else:
                func = update.message.reply_text

            ac_name = stopped_activity['name'].replace("_", "\_")
            ac_name = ac_name.replace("(", "\(")
            ac_name = ac_name.replace(")", "\)")
            ac_name = ac_name.replace("-", "\-")
            ac_name = ac_name.replace(".", "\.")

            project_string = ""

            if stopped_activity['project_id'] is not None:
                stopped_project = DB.get_project_by_id(
                    stopped_activity['project_id'])

                pr_name = stopped_project['name'].replace("_", "\_")
                pr_name = pr_name.replace("(", "\(")
                pr_name = pr_name.replace(")", "\)")
                pr_name = pr_name.replace(".", "\.")
                pr_name = pr_name.replace("-", "\-")

                project_string = "📂 *Проект:* _%s_\n" % pr_name

            day_activities = DB.get_user_activities_by_day(user_id, 0)

            sum_duration = 0

            for activity in day_activities:
                if activity['activity_id'] == stopped_activity['activity_id']:
                    if any([
                            stopped_activity['project_id'] is None,
                            stopped_activity['project_id'] ==
                            activity['project_id']
                    ]):
                        sum_duration += activity['sum']

            func(
                text=
                "✅ Занятие завершено \({}\)\n{}\n⏱ Продолжительность: {}\.\n😎 Всего за сутки: {}\."
                .format(
                    ac_name,
                    project_string,
                    self.get_string_by_duration(stopped_activity['duration']),
                    self.get_string_by_duration(sum_duration),
                ),
                parse_mode="MarkdownV2")

        if name != "Ничего":
            string = ""

            if project is not None:
                pr_name = project['name'].replace("_", "\_")
                pr_name = pr_name.replace("(", "\(")
                pr_name = pr_name.replace(")", "\)")
                pr_name = pr_name.replace(".", "\.")
                pr_name = pr_name.replace("-", "\-")

                string = "\n📂 *Проект:* _%s_" % pr_name

            ac_name = name.replace("_", "\_")
            ac_name = ac_name.replace("(", "\(")
            ac_name = ac_name.replace(")", "\)")
            ac_name = ac_name.replace("-", "\-")
            ac_name = ac_name.replace(".", "\.")

            delay_str = ""

            if delay > 0:
                delay_str = "\n\n⏱ \+%s мин\." % delay

            text = "🧾 Ты начал занятие \"{}\"\.{}{}\n\n⏹ Остановить: /stop".format(
                ac_name, string, delay_str)

            if update.callback_query is not None:
                update.callback_query.message.edit_text(
                    text=text, parse_mode="MarkdownV2")
            else:
                update.effective_message.reply_text(text=text,
                                                    parse_mode="MarkdownV2")