예제 #1
0
    def __make_html_row(self, data_row):
        """Создает строку HTML с заданными параметрами."""
        future_sign = self.config.restore_value(cfg.FUTURE_SIGN_KEY)
        tomorrow_sign = self.config.restore_value(cfg.TOMORROW_SIGN_KEY)
        today_sign = self.config.restore_value(cfg.TODAY_SIGN_KEY)
        yesterday_sign = self.config.restore_value(cfg.YESTERDAY_SIGN_KEY)
        type_id = data_row[db.EVENT_LIST_CONVERTED_TYPE_ID_FIELD]
        emodji = data_row[db.EVENT_LIST_CONVERTED_TYPE_EMODJI_FIELD]
        type_name = data_row[db.EVENT_LIST_CONVERTED_TYPE_NAME_FIELD]
        event_date = data_row[db.EVENT_LIST_CONVERTED_DATE_FIELD]
        event_name = data_row[db.EVENT_LIST_CONVERTED_NAME_FIELD]
        if event_date == tls.shift_date(datetime.now(), 1).date():
            
            time_mark = tomorrow_sign
        elif event_date == datetime.now().date():

            time_mark = today_sign
        elif event_date == tls.shift_date(datetime.now(), -1).date():

            time_mark = yesterday_sign
        else:

            time_mark = future_sign
        html_row = f"<tr><td class='style_{type_id}'>{time_mark} {emodji} {type_name}{const.TYPE_SEPARATOR}{event_date:%d.%m.%Y} {event_name} "
        
        if (type_id == db.EVENT_TYPE_MEMORY_DAY) or (type_id == db.EVENT_TYPE_BIRTH_DAY) :
        
            html_row += data_row[db.EVENT_LIST_CONVERTED_MESSAGE_FIELD]
        html_row += "</td></tr>\n"
        return html_row
예제 #2
0
 def cleanup(self):
     """Удаляет одноразовые устаревшие события."""
     date_passed = tls.shift_date(dt.now(), -2)
     query = self.session.query(c_event.CEvent.id)
     query = query.filter(c_event.CEvent.fperiod==const.EVENT_ONE_SHOT,
                          and_(c_event.CEvent.fstatus>STATUS_INACTIVE,
                          and_(c_event.CEvent.fyear<date_passed.year)))
     past_year = query.all()
     query = self.session.query(c_event.CEvent.id)
     query = query.filter(c_event.CEvent.fperiod==const.EVENT_ONE_SHOT,
                          and_(c_event.CEvent.fstatus>STATUS_INACTIVE,
                          and_(c_event.CEvent.fyear==date_passed.year,
                          and_(c_event.CEvent.fmonth<date_passed.month))))
     past_month = query.all()
     
     query = self.session.query(c_event.CEvent.id)
     query = query.filter(c_event.CEvent.fperiod==const.EVENT_ONE_SHOT,
                          and_(c_event.CEvent.fstatus>STATUS_INACTIVE,
                          and_(c_event.CEvent.fyear==date_passed.year,
                          and_(c_event.CEvent.fmonth==date_passed.month,
                          and_(c_event.CEvent.fday<=date_passed.day)))))
     past_days = query.all()
    
     full_list = []
     full_list.extend(past_year)
     full_list.extend(past_month)
     full_list.extend(past_days)
     
     for event_id in full_list:
         
         event_query = self.session.query(c_event.CEvent).filter_by(id=event_id[0])
         event_query.update({c_event.CEvent.fstatus:STATUS_INACTIVE}, synchronize_session = False)
         self.session.commit()
예제 #3
0
    def get_actual_monthly_events(self):
        """Возвращает список ежемесячных событий, актуальных в периоде от текущей даты до текущей + период видимости."""
        # *** Дата c = текущая дата 
        date_from = tls.shift_date(dt.now().date(), -1)
        # *** Дата по = Дата с + период видимости
        date_to =  date_from + dtime.timedelta(days=int(self.config.restore_value(c_config.MONITORING_PERIOD_KEY)))
        # *** Если дата по в следующем месяце
        if date_to.month != date_from.month:
        
            # ***  Разделяем период на два отрезка - от текущей даты до конца м-ца 
            last_day = tls.get_months_last_date(date_from)
            this_month_date_to = dtime.datetime(date_from.year, date_from.month, last_day)
            # *** И от нач. м-ца до даты по 
            next_month_date_from = this_month_date_to + dtime.timedelta(days=1)
            # *** Делаем выборку за текущий месяц
            queried_data1=self.universal_query(date_from.day, 0, 0, this_month_date_to.day, 0, 0, const.EVENT_MONTH_PERIOD)
            # *** Конвертируем кортеж в список и подставляем текущий месяц и год
            queried_data1 = self.convert_monthly_tuple(queried_data1, this_month_date_to)
            # *** Делаем выборку за следующий месяц
            queried_data2 = self.universal_query(next_month_date_from.day, 0, 0, date_to.day, 0, 0, const.EVENT_MONTH_PERIOD)
            # *** Конвертируем кортеж в список и подставляем следующий месяц и год
            queried_data2 = self.convert_monthly_tuple(queried_data2, next_month_date_from)
            # *** Сливаем выборки
            queried_data1.extend(queried_data2)
            return queried_data1
        else:

            # *** Иначе делаем одну выборку
            queried_data = self.universal_query(date_from.day, 0, 0, date_to.day, 0, 0, const.EVENT_MONTH_PERIOD)
            # *** Конвертируем кортеж в список и подставляем текущий месяц и год
            queried_data = self.convert_monthly_tuple(queried_data, date_from)
            return queried_data
예제 #4
0
    def convert_yearly_tuple(self, pevent_super_tuple, pnew_date):
        """Конвертирует кортеж в список, подставляя значения года и месяца из даты."""
        event_super_list = []
        # *** Перебираем события в списке
        for event_tuple in pevent_super_tuple:

            event_list = list(event_tuple)
            # *** Вычислим возраст события
            event_age = dt.now().year - event_list[EVENT_LIST_YEAR_FIELD]
            one_digit = event_age % 10
            message = ""
            # *** Поменяем год в списке на текущий
            event_list[EVENT_LIST_YEAR_FIELD] = pnew_date.year
            if event_list[EVENT_LIST_TYPE_ID_FIELD] == EVENT_TYPE_MEMORY_DAY:
            
                # *** Для дня памяти всё просто...
                message = f"({event_age}-я годовщина)"
            elif event_list[EVENT_LIST_TYPE_ID_FIELD] == EVENT_TYPE_BIRTH_DAY:
                
                # *** Для дня рождения всё сложнее...
                if (one_digit == 0) or (one_digit >= 5):
                    
                    message = f"({event_age} лет)"
                elif one_digit == 1:
                    
                    message = f"({event_age} год)"
                elif (one_digit >= 2) or (one_digit <= 4):
                    
                    message = f"({event_age} года)"
            
            # *** Собираем дату события из года, месяца и дня
            event_date = dtime.date(event_list[EVENT_LIST_YEAR_FIELD], 
                                    event_list[EVENT_LIST_MONTH_FIELD], 
                                    event_list[EVENT_LIST_DAY_FIELD])
            # *** Если дата совпадает с сегодняшней или вчерашней - заменяем цвет.
            if event_date == dt.now():

                event_list[EVENT_LIST_TYPE_COLOR_FIELD] = self.config.restore_value(c_config.TODAY_COLOR_KEY)
            if event_date == tls.shift_date(dt.now(), -1):

                event_list[EVENT_LIST_TYPE_COLOR_FIELD] = self.config.restore_value(c_config.YESTERDAY_COLOR_KEY)
            # *** Удаляем из списка год, месяц и день
            event_list.pop(EVENT_LIST_YEAR_FIELD)
            event_list.pop(EVENT_LIST_MONTH_FIELD)
            event_list.pop(EVENT_LIST_DAY_FIELD)
            # *** Добавляем дату и сообщение
            event_list.append(event_date)
            event_list.append(message)
            # *** Закидываем событие в список событий
            event_super_list.append(event_list)
        return event_super_list    
예제 #5
0
    def get_actual_yearly_events(self):
        """Возвращает список ежегодных событий, актуальных в периоде от текущей даты до текущей + период видимости."""
        # *** Дата с..
        date_from = tls.shift_date(dt.now().date(), -1)
        # *** Дата по..
        date_to = date_from + dtime.timedelta(days=int(self.config.restore_value(c_config.MONITORING_PERIOD_KEY)))
        # *** Если дата по в следующем году 
        if date_to.year != date_from.year:
            
            # *** То разделяем период на два отрезка - от текущей даты до конца года 
            last_day = tls.get_years_last_date(date_from)
            this_year_date_to = dtime.datetime(date_from.year, date_from.month, last_day)
            # и от нач. года до даты по 
            next_year_date_from = this_year_date_to + dtime.timedelta(days=1)
            # *** делаем две выборки
            queried_data1=self.universal_query(date_from.day, date_from.month, 0, this_year_date_to.day, this_year_date_to.month, 0, const.EVENT_YEAR_PERIOD)
            # *** Конвертируем кортеж в список и подставляем текущий год
            queried_data1 = self.convert_yearly_tuple(queried_data1, this_year_date_to)
            # Вторая выборка
            queried_data2=self.universal_query(next_year_date_from.day, next_year_date_from.month, 0, date_to.day, date_to.month, 0, const.EVENT_YEAR_PERIOD)
            # *** Конвертируем кортеж в список и подставляем следующий год
            queried_data2 = self.convert_yearly_tuple(queried_data2, next_year_date_from)
            # *** Сливаем обе выборки
            queried_data1.extend(queried_data2)
            return queried_data1
        # *** Если дата по в следующем месяце
        if date_to.month != date_from.month:
        
            # ***  Разделяем период на два отрезка - от текущей даты до конца м-ца 
            last_day = tls.get_months_last_date(date_from)
            this_month_date_to = dtime.datetime(date_from.year, date_from.month, last_day)
            # *** И от нач. м-ца до даты по 
            next_month_date_from = this_month_date_to + dtime.timedelta(days=1)
            queried_data1 = self.universal_query(date_from.day, date_from.month, 0, this_month_date_to.day, this_month_date_to.month, 0, const.EVENT_YEAR_PERIOD)
            queried_data1 = self.convert_yearly_tuple(queried_data1, date_from)
            queried_data2 = self.universal_query(next_month_date_from.day, next_month_date_from.month, 0, date_to.day, date_to.month, 0, const.EVENT_YEAR_PERIOD)
            queried_data2 = self.convert_yearly_tuple(queried_data2, next_month_date_from)
            queried_data1.extend(queried_data2)
            return queried_data1

        queried_data=self.universal_query(date_from.day, date_from.month, 0, date_to.day, date_to.month, 0, const.EVENT_YEAR_PERIOD)
        queried_data = self.convert_yearly_tuple(queried_data, date_from)
        return queried_data
예제 #6
0
    def get_actual_one_shot_events(self):
        """Возвращает список одноразовых событий, актуальных в периоде от текущей даты до текущей + период видимости."""
        # *** Дата с..
        date_from = tls.shift_date(dt.now().date(), -1)
        # *** Дата по..
        date_to =  date_from + dtime.timedelta(days=int(self.config.restore_value(c_config.MONITORING_PERIOD_KEY)))
        # *** Если дата по в следующем году разделяем период на два отрезка - от текущей даты до конца года
        if date_to.year != date_from.year:
            
            last_day = tls.get_years_last_date(date_from)
            this_year_date_to = dtime.datetime(date_from.year, date_from.month, last_day)
            # *** И от нач. года до даты по 
            next_year_date_from = this_year_date_to + dtime.timedelta(days=1)
            queried_data1 = self.universal_query(date_from.day, date_from.month, date_from.year, this_year_date_to.day, this_year_date_to.month, this_year_date_to.year, const.EVENT_YEAR_PERIOD)
            queried_data1 = self.convert_one_shot_tuple(queried_data1)
            # Вторая выборка
            queried_data2 = self.universal_query(next_year_date_from.day, next_year_date_from.month, next_year_date_from.year, date_to.day, date_to.month, date_to.year, const.EVENT_YEAR_PERIOD)
            queried_data2 = self.convert_one_shot_tuple(queried_data2)
            # *** Сливаем обе выборки
            queried_data1.extend(queried_data2)
            return queried_data1
        if date_to.month != date_from.month:
        
            # ***  Разделяем период на два отрезка - от текущей даты до конца м-ца 
            last_day = tls.get_months_last_date(date_from)
            this_month_date_to = dtime.datetime(date_from.year, date_from.month, last_day)
            next_month_date_from = this_month_date_to + dtime.timedelta(days=1)
            queried_data1 = self.universal_query(date_from.day, date_from.month, date_from.year, this_month_date_to.day, this_month_date_to.month, this_month_date_to.year, const.EVENT_ONE_SHOT)
            queried_data1 = self.convert_yearly_tuple(queried_data1, date_from)
            # *** И от нач. м-ца до даты по 
            queried_data2 = self.universal_query(next_month_date_from.day, next_month_date_from.month, next_month_date_from.year, date_to.day, date_to.month, date_to.year, const.EVENT_ONE_SHOT)
            queried_data2 = self.convert_yearly_tuple(queried_data2, next_month_date_from)
            queried_data1.extend(queried_data2)
            return queried_data1

        queried_data=self.universal_query(date_from.day, date_from.month, date_from.year, date_to.day, date_to.month, date_to.year, const.EVENT_ONE_SHOT)
        queried_data = self.convert_yearly_tuple(queried_data, date_from)
        return queried_data
예제 #7
0
    def convert_one_shot_tuple(self, pevent_super_tuple):
        """Конвертирует кортеж в список, подставляя значения года и месяца из даты."""
        event_super_list = []
        for event_tuple in pevent_super_tuple:

            event_list = list(event_tuple)
            event_date = dtime.date(event_list[EVENT_LIST_YEAR_FIELD], 
                                    event_list[EVENT_LIST_MONTH_FIELD], 
                                    event_list[EVENT_LIST_DAY_FIELD])
            # *** Если дата совпадает с сегодняшней или вчерашней - заменяем цвет.
            if event_date == dt.now():

                event_list[EVENT_LIST_TYPE_COLOR_FIELD] = self.config.restore_value(c_config.TODAY_COLOR_KEY)
            if event_date == tls.shift_date(dt.now(), -1):

                event_list[EVENT_LIST_TYPE_COLOR_FIELD] = self.config.restore_value(c_config.YESTERDAY_COLOR_KEY)
            event_list.pop(EVENT_LIST_YEAR_FIELD)
            event_list.pop(EVENT_LIST_MONTH_FIELD)
            event_list.pop(EVENT_LIST_DAY_FIELD)
            event_list.append(event_date)
            event_list.append("")
            event_super_list.append(event_list)
        return event_super_list