functions.py 4.6 KB

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