functions.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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['Начало в']}\n"
  55. f"Конец в: {data['Конец в']}")
  56. return result
  57. def beauty_all_events(data):
  58. result = ""
  59. for elem in data:
  60. result += f"<b>Инициатор:</b> {elem['name']}\n" \
  61. f"<b>Событие:</b> {elem['description']}\n" \
  62. f"<b>Дата:</b> {elem['e_date']}\n" \
  63. f"<b>Время:</b> {elem['e_start']} - {elem['e_end']}\n\n"
  64. return result
  65. def make_date():
  66. today = datetime.datetime.now()
  67. return datetime.datetime.strftime(today, '%d.%m.%Y')
  68. def date_range(data):
  69. today = date.today()
  70. weekday = today.weekday()
  71. days_per_month = {1: 31, 2: 28, 3: 30, 4: 31, 5: 30, 6: 31,
  72. 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31}
  73. if data == "today":
  74. return today
  75. if data == "week":
  76. first = today - timedelta(days=weekday)
  77. # upper bound
  78. last = today + timedelta(days=(6 - weekday))
  79. return f"{first} and {last}"
  80. if data == "month":
  81. first = today.replace(day=1)
  82. try:
  83. last = today.replace(day=days_per_month[today.month])
  84. except ValueError:
  85. if today.month == 2: # Not a leap year
  86. last = today.replace(day=28)
  87. else:
  88. raise
  89. return f"{first} and {last}"
  90. def to_quotes(data):
  91. data = "'" + str(data) + "'"
  92. return data
  93. def time_validator(data):
  94. re_pattern = "^(2[0-3]|[01]?[0-9])(:|\.)([0-5]?[0-9])( |-)(2[0-3]|[01]?[0-9])(:|\.)([0-5]?[0-9])$"
  95. if re.match(re_pattern, data):
  96. if len(data.split(" ")) == 2:
  97. return True
  98. elif len(data.split("-")) == 2:
  99. return True
  100. else:
  101. return False
  102. else:
  103. return False
  104. def normalize_time(data):
  105. if len(data.split(" ")) == 2:
  106. data = data.split(" ")
  107. if len(data[0]) == 4:
  108. data[0] = "0" + data[0]
  109. if len(data[1]) == 4:
  110. data[1] = "0" + data[1]
  111. data = f"{data[0]} {data[1]}"
  112. return data.replace(".", ":").split(" ")
  113. if len(data.split("-")) == 2:
  114. data = data.split("-")
  115. if len(data[0]) == 4:
  116. data[0] = "0" + data[0]
  117. if len(data[1]) == 4:
  118. data[1] = "0" + data[1]
  119. data = f"{data[0]} {data[1]}"
  120. return data.replace(".", ":").split(" ")
  121. else:
  122. return False
  123. def check_overlap(start, end, date):
  124. it = intervaltree.IntervalTree()
  125. db = database.Database()
  126. times = db.sql_fetchall(f"select e_start,e_end from events_table where e_date = {date}")
  127. for time in times:
  128. it.addi(time['e_start'], time['e_end'])
  129. print(it.overlaps(start, end))
  130. return not it.overlaps(start, end)
  131. def parse_events(data):
  132. events_list = []
  133. for elem in data:
  134. event = {"ID": elem['id'],
  135. "Инициатор": elem['name'],
  136. "Номер телефона": elem['phone'],
  137. "Описание": elem['description'],
  138. "Дата": elem['e_date'],
  139. "Начало в": elem['e_start'],
  140. "Конец в": elem['e_end']}
  141. events_list.append(event)
  142. return events_list
  143. def month_text(data):
  144. months = ["Январь","Февраль","Март",
  145. "Апрель","Май","Июнь",
  146. "Июль","Август","Сентябрь",
  147. "Октябрь","Ноябрь","Декабрь"]
  148. return months[data]