from flask import abort, request, render_template, url_for, jsonify from webApp import * from webApp import webApp import gspread from oauth2client.service_account import ServiceAccountCredentials import json import datetime from config import config import requests # Авторизация Google API def authorize_google(): # google_json = {} # for key in config["GOOGLE"].keys(): # google_json[key] = config["GOOGLE"][key] scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"] creds = ServiceAccountCredentials.from_json_keyfile_name("botforclinic-436512-0c117dd103a8.json", scope) # creds = ServiceAccountCredentials.from_json_keyfile_dict(google_json, scope) client = gspread.authorize(creds) return client def find_patients(data): """ Поиск пациента в таблице по данным. """ sheet = authorize_google().open("Пациенты клиники").sheet1 records = sheet.get_all_records() # Получаем все строки таблицы print(data) for i, record in enumerate(records, start=2): # Нумерация строк Google Таблицы начинается с 2 try: print(str(record.get("Telegram ID", "")).strip(), str(record.get("ФИО", "")).strip().lower(), str(record.get("Дата рождения", "")).strip(), str(record.get("Номер телефона", "")).strip()) print(str(data.get("user_id", "")).strip(), str(data.get("fio", "")).strip().lower(), str(data.get("dob", "")).strip(), str(data.get("tel", "")).strip()) if ( str(record.get("Telegram ID", "")).strip() == str(data.get("user_id", "")).strip() and str(record.get("ФИО", "")).strip().lower() == str(data.get("fio", "")).strip().lower() and str(record.get("Дата рождения", "")).strip() == str(data.get("dob", "")).strip() and str(record.get("Номер телефона", "")).strip() == str(data.get("tel", "")).strip() ): return i, record # Возвращаем номер строки и запись except Exception as e: print(f"Ошибка при сравнении записи: {e}") continue return None, None @webApp.route('/form_submit', methods=['POST']) def form_submit(): """ Обработка данных формы и обновление записи в Google Таблице. """ try: data = json.loads(request.data) data['current_time'] = datetime.datetime.now().strftime("%d.%m.%Y, %H:%M") # Поиск пациента row_number, patient_row = find_patients(data) if not patient_row: return jsonify({'success': False, 'error': "Пациент не найден"}) # Проверка кода верификации expected_code = str(patient_row.get("Верификация", "")).strip() received_code = str(data.get("verification_code", "")).strip() if expected_code != received_code: return jsonify({'success': False, 'error': "Код верификации не совпадает"}) # Обновление записи в таблице sheet = authorize_google().open("Пациенты клиники").sheet1 # Определяем динамический столбец по заголовкам headers = sheet.row_values(1) verification_col = headers.index("Верификация") + 1 # Столбцы нумеруются с 1 sheet.update_cell(row_number, verification_col, "Пройдена") return jsonify({'success': True}) except KeyError as e: print(f"Ключ отсутствует в данных: {e}") return jsonify({'success': False, 'error': f"Некорректные данные: {e}"}) except Exception as e: print(f"Ошибка при обработке формы: {e}") return jsonify({'success': False, 'error': str(e)}) @webApp.route('/tel_verification', methods=['POST']) def send_registration_request(): raw_data = json.loads(request.data) """ Блок записи в Полимед """ try: HEADER = { "Content-Type": "application/json" } # Разделение ФИО на части fio = raw_data.get("fio", "") parts = fio.split(" ") if len(parts) < 3: return jsonify({'success': False, "error": "ФИО должно содержать 3 слова"}) first_name = parts[1] middle_name = " ".join(parts[2:]) last_name = parts[0] # Обработка номера телефона raw_phone = raw_data.get("tel", "") formatted_phone = ''.join(filter(str.isdigit, raw_phone)) if formatted_phone.startswith("7"): formatted_phone = formatted_phone # Обработка даты рождения dob = raw_data.get("dob", "") if not dob: return jsonify({'success': False, "error": "Дата рождения отсутствует"}) birth_year = dob.split("-")[0] # Предполагается формат "YYYY-MM-DD" # Данные для отправки в сервер Полимед data = { "telegram_id": raw_data.get("user_id"), "first_name": first_name, "second_name": middle_name, "last_name": last_name, "mobile_phone": formatted_phone, "birthday": birth_year } print("Отправляемые данные на сервер:", data) response = requests.post("http://192.168.1.10:8080/AppFindPac", headers=HEADER, json=data) if response.status_code == 200: result = response.json() print("Результат JSON:", result) if result.get('result', None): if result.get('result', None) == 'OK': # return jsonify({'success': True, 'message': "Скоро вам позвонят!"}) pass else: return jsonify({'success': False, "error": "Пользователь не найден среди пациентов клиники.
Если у Вас возникли вопросы по регистрации, Вы можете связаться с нами в рабочие часы по телефону: +7 (342)207-03-03."}) else: return jsonify({'success': False, "error": "Ошибка формата запроса"}) else: print(f"Ошибка при отправке данных. Статус-код: {response.status_code}") return jsonify({'success': False, "error": "Ошибка отправки данных в Полимед"}) except Exception as e: print(f"Ошибка обработки данных для Полимед: {e}") return jsonify({'success': False, "error": "Ошибка обработки данных для Полимед"}) """ Блок верификации через SMS """ try: url = "https://sms.ru/code/call" api_key = "2ED72E61-76C8-5637-3587-2792D47B698C" # Отправка запроса на вызов с кодом верификации response = requests.post(url, data={"phone": formatted_phone, "api_id": api_key}) print(response) json_data = response.json() verification_code = None current_time = datetime.datetime.now().strftime("%d.%m.%Y, %H:%M") # Авторизация и доступ к таблице sheet = authorize_google().open("Пациенты клиники").sheet1 # Проверка успешного получения кода if json_data and json_data["status"] == "OK": verification_code = json_data.get("code") # Поиск пациента row_number, patient_row = find_patients(raw_data) if patient_row: # Обновление записи в таблице sheet = authorize_google().open("Пациенты клиники").sheet1 # Определяем динамический столбец по заголовкам headers = sheet.row_values(1) verification_col = headers.index("Верификация") + 1 # Столбцы нумеруются с 1 sheet.update_cell(row_number, verification_col, verification_code) else: # Записываем данные и код верификации в таблицу sheet.append_row([ fio, raw_phone, dob, raw_data.get("user_id"), # Telegram ID пользователя current_time, # Время отправки данных verification_code # Код верификации ]) print(f"Код верификации, отправленный пользователю: {verification_code}") return jsonify({'success': True}) else: print("Звонок не может быть выполнен.") print("Текст ошибки:", json_data.get("status_text")) return jsonify({'success': False, "error": "Если звонок не поступил, это может быть связано с временными работами на сервере.
Пожалуйста, попробуйте зарегистрироваться позже!"}) except Exception as e: print(f"Ошибка при обработке SMS верификации: {e}") return jsonify({'success': False, "error": "Если звонок не поступил, это может быть связано с временными работами на сервере.
Пожалуйста, попробуйте зарегистрироваться позже!"}) @webApp.route('/') def main_page_2_0(): return render_template('2.0/main_page.pug', user_id=request.args.get('user_id', None))