import phonenumbers import re import datetime from datetime import date, timedelta from bot import database import intervaltree def validate_phone(number): number = number.replace('-', '') number = number.replace(' ', '') if len(number) == 10: number = "+7" + number elif len(number) == 11 and number[0] == '8': number = "+7" + number[1:] try: parse_phone = phonenumbers.parse(number) if phonenumbers.is_possible_number(parse_phone): return True else: return False except: return False def reject_cmd(text): if "/" in text: return True else: return False def reject_latin(text): if re.search(r'[a-zA-Z0-9]', text): return True else: return False def validate_fio(text): if len(text.split(' ')) < 3: return True else: return False def validate_time(): pass def beauty_reg_request(data): result = (f"ФИО: {data['ФИО']}\n" f"Контакт: {data['Номер телефона']}") return result def beauty_booked_time(data): result = "" for elem in data: result += f"{elem['e_start']} - {elem['e_end']}\n" return result def beauty_event_request(data): result = (f"ID: {data['ID']}\n" f"Инициатор: {data['Инициатор']}\n" f"Телефон: {data['Номер телефона']}\n" f"Описание: {data['Описание']}\n" f"Дата: {data['Дата']}\n" f"Начало в: {data['Начало в']}\n" f"Конец в: {data['Конец в']}") return result def beauty_all_events(data): result = "" for elem in data: result += f"Инициатор: {elem['name']}\n" \ f"Событие: {elem['description']}\n" \ f"Дата: {elem['e_date']}\n" \ f"Время: {elem['e_start']} - {elem['e_end']}\n\n" return result def make_date(): today = datetime.datetime.now() return datetime.datetime.strftime(today, '%d.%m.%Y') def date_range(data): today = date.today() weekday = today.weekday() days_per_month = {1: 31, 2: 28, 3: 30, 4: 31, 5: 30, 6: 31, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31} if data == "today": return today if data == "week": first = today - timedelta(days=weekday) # upper bound last = today + timedelta(days=(6 - weekday)) return f"{first} and {last}" if data == "month": first = today.replace(day=1) try: last = today.replace(day=days_per_month[today.month]) except ValueError: if today.month == 2: # Not a leap year last = today.replace(day=28) else: raise return f"{first} and {last}" def to_quotes(data): data = "'" + str(data) + "'" return data def time_validator(data): re_pattern = "^(2[0-3]|[01]?[0-9])(:|\.)([0-5]?[0-9])( |-)(2[0-3]|[01]?[0-9])(:|\.)([0-5]?[0-9])$" if re.match(re_pattern, data): if len(data.split(" ")) == 2: return True elif len(data.split("-")) == 2: return True else: return False else: return False def normalize_time(data): if len(data.split(" ")) == 2: data = data.split(" ") if len(data[0]) == 4: data[0] = "0" + data[0] if len(data[1]) == 4: data[1] = "0" + data[1] data = f"{data[0]} {data[1]}" return data.replace(".", ":").split(" ") if len(data.split("-")) == 2: data = data.split("-") if len(data[0]) == 4: data[0] = "0" + data[0] if len(data[1]) == 4: data[1] = "0" + data[1] data = f"{data[0]} {data[1]}" return data.replace(".", ":").split(" ") else: return False def check_overlap(start, end, date): it = intervaltree.IntervalTree() db = database.Database() times = db.sql_fetchall(f"select e_start,e_end from events_table where e_date = {date}") for time in times: it.addi(time['e_start'], time['e_end']) # print(it.overlaps(start, end)) return not it.overlaps(start, end) def parse_events(data): events_list = [] for elem in data: event = {"ID": elem['id'], "Инициатор": elem['name'], "Номер телефона": elem['phone'], "Описание": elem['description'], "Дата": elem['e_date'], "Начало в": elem['e_start'], "Конец в": elem['e_end']} events_list.append(event) return events_list def month_text(data): months = ["Январь","Февраль","Март", "Апрель","Май","Июнь", "Июль","Август","Сентябрь", "Октябрь","Ноябрь","Декабрь"] return months[data]