functions.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. import phonenumbers
  2. import re
  3. import datetime
  4. from datetime import date, timedelta
  5. from bot import database
  6. import intervaltree
  7. def validate_phone(number):
  8. number = number.replace('-', '')
  9. number = number.replace(' ', '')
  10. if len(number) == 10:
  11. number = "+7" + number
  12. elif len(number) == 11 and number[0] == '8':
  13. number = "+7" + number[1:]
  14. try:
  15. parse_phone = phonenumbers.parse(number)
  16. if phonenumbers.is_possible_number(parse_phone):
  17. return True
  18. else:
  19. return False
  20. except:
  21. return False
  22. def reject_cmd(text):
  23. if "/" in text:
  24. return True
  25. else:
  26. return False
  27. def reject_latin(text):
  28. if re.search(r'[a-zA-Z0-9]', text):
  29. return True
  30. else:
  31. return False
  32. def validate_fio(text):
  33. if len(text.split(' ')) < 3:
  34. return True
  35. else:
  36. return False
  37. def validate_time():
  38. pass
  39. def beauty_reg_request(data):
  40. result = (f"ФИО: {data['ФИО']}\n"
  41. f"Контакт: {data['Номер телефона']}")
  42. return result
  43. def beauty_booked_time(data):
  44. result = ""
  45. for elem in data:
  46. result += f"{elem['e_start']} - {elem['e_end']}\n"
  47. return result
  48. def beauty_event_request(data):
  49. result = (f"ID: {data['ID']}\n"
  50. f"Инициатор: {data['Инициатор']}\n"
  51. f"Телефон: {data['Номер телефона']}\n"
  52. f"Описание: {data['Описание']}\n"
  53. f"Начало в: {data['Начало в']}\n"
  54. f"Конец в: {data['Конец в']}")
  55. return result
  56. def beauty_all_events(data):
  57. result = ""
  58. for elem in data:
  59. result += f"<b>Инициатор:</b> {elem['name']}\n" \
  60. f"<b>Событие:</b> {elem['description']}\n" \
  61. f"<b>Дата:</b> {elem['e_date']}\n" \
  62. f"<b>Время:</b> {elem['e_start']} - {elem['e_end']}\n\n"
  63. return result
  64. def make_date():
  65. today = datetime.datetime.now()
  66. return datetime.datetime.strftime(today, '%d.%m.%Y')
  67. def date_range(data):
  68. today = date.today()
  69. weekday = today.weekday()
  70. days_per_month = {1: 31, 2: 28, 3: 30, 4: 31, 5: 30, 6: 31,
  71. 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31}
  72. if data == "today":
  73. return today
  74. if data == "week":
  75. first = today - timedelta(days=weekday)
  76. # upper bound
  77. last = today + timedelta(days=(6 - weekday))
  78. return f"{first} and {last}"
  79. if data == "month":
  80. first = today.replace(day=1)
  81. try:
  82. last = today.replace(day=days_per_month[today.month])
  83. except ValueError:
  84. if today.month == 2: # Not a leap year
  85. last = today.replace(day=28)
  86. else:
  87. raise
  88. return f"{first} and {last}"
  89. def to_quotes(data):
  90. data = "'" + str(data) + "'"
  91. return data
  92. def time_validator(data):
  93. re_pattern = "^(2[0-3]|[01]?[0-9])(:|\.)([0-5]?[0-9])( |-)(2[0-3]|[01]?[0-9])(:|\.)([0-5]?[0-9])$"
  94. if re.match(re_pattern, data):
  95. if len(data.split(" ")) == 2:
  96. return True
  97. elif len(data.split("-")) == 2:
  98. return True
  99. else:
  100. return False
  101. else:
  102. return False
  103. def normalize_time(data):
  104. if len(data.split(" ")) == 2:
  105. if len(data.split(" ")[0]) == 4:
  106. data = "0" + data
  107. return data.replace(".", ":").split(" ")
  108. else:
  109. return data.replace(".", ":").split(" ")
  110. elif len(data.split("-")) == 2:
  111. if len(data.split("-")[0]) == 4:
  112. data = "0" + data
  113. return data.replace(".", ":").split("-")
  114. else:
  115. return data.replace(".", ":").split("-")
  116. else:
  117. return False
  118. def check_overlap(start, end, date):
  119. it = intervaltree.IntervalTree()
  120. db = database.Database()
  121. times = db.sql_fetchall(f"select e_start,e_end from events_table where e_date = {date}")
  122. for time in times:
  123. it.addi(time['e_start'], time['e_end'])
  124. return not it.overlaps(start, end)
  125. def parse_events(data):
  126. events_list = []
  127. for elem in data:
  128. event = {"ID": elem['id'],
  129. "Инициатор": elem['name'],
  130. "Номер телефона": elem['phone'],
  131. "Описание": elem['description'],
  132. "Начало в": elem['e_start'],
  133. "Конец в": elem['e_end']}
  134. events_list.append(event)
  135. return events_list