823 lines
35 KiB
Python
823 lines
35 KiB
Python
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
|
|
from config import config
|
|
import requests
|
|
from datetime import datetime
|
|
|
|
# Авторизация 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.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": "Дата рождения отсутствует"})
|
|
|
|
try:
|
|
# Преобразуем формат из 2016-09-25 в datetime объект
|
|
date_obj = datetime.strptime(dob, "%Y-%m-%d")
|
|
# Преобразуем datetime объект в строку в формате ISO 8601
|
|
birth_year = date_obj.strftime("%Y-%m-%dT%H:%M:%S.000Z")
|
|
except ValueError:
|
|
return jsonify({'success': False, "error": "Неверный формат даты рождения"}), 400
|
|
|
|
|
|
# Данные для отправки в сервер Полимед
|
|
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": "Пользователь не найден среди пациентов клиники. <br> Если у Вас возникли вопросы по регистрации, Вы можете связаться с нами в рабочие часы по телефону: +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.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": "Если звонок не поступил, это может быть связано с временными работами на сервере. <br> Пожалуйста, попробуйте зарегистрироваться позже!"})
|
|
|
|
except Exception as e:
|
|
print(f"Ошибка при обработке SMS верификации: {e}")
|
|
return jsonify({'success': False, "error": "Если звонок не поступил, это может быть связано с временными работами на сервере. <br> Пожалуйста, попробуйте зарегистрироваться позже!"})
|
|
|
|
|
|
|
|
|
|
@webApp.route('/request_patient', methods=['POST'])
|
|
def request_patient_information():
|
|
try:
|
|
# return {
|
|
# "fio": "Чистогов Илья Дмитриевич",
|
|
# "formatted_birthdate": "24.09.2003",
|
|
# "js_formatted_passport_date": "2016-09-25",
|
|
# "js_formatted_birthdate": "2003-09-24",
|
|
# "pct_doc_ser": "1234",
|
|
# "pct_doc_nom": "123456",
|
|
# "pct_doc_org_kod": "590-003",
|
|
# "pct_doc_org_name": "ГУ МВД РОССИИ ПО ПЕРМСКОМУ КРАЮ",
|
|
# "pct_email": "1@1.ru",
|
|
# "pct_inn": "123123123123",
|
|
# "taxpayer_status_zapros": "Отец",
|
|
# "pct_doc_ind": "1",
|
|
# "server_data": {
|
|
# "pct_birthday": "2003-09-24T00:00:00.000Z",
|
|
# "pct_doc_date": "",
|
|
# "pct_doc_ind": "",
|
|
# "pct_doc_nom": "",
|
|
# "pct_doc_org_kod": "",
|
|
# "pct_doc_org_name": "",
|
|
# "pct_doc_ser": "",
|
|
# "pct_doc_type": "",
|
|
# "pct_email": "",
|
|
# "pct_first_name": "Илья",
|
|
# "pct_inn": "",
|
|
# "pct_last_name": "Чистогов",
|
|
# "pct_second_name": "Дмитриевич",
|
|
# "result": "OK",
|
|
# "status_code": 200
|
|
# },
|
|
# "success": True,
|
|
# "user_id": "766945900"
|
|
# }
|
|
|
|
|
|
data = request.get_json()
|
|
print(data)
|
|
user_id = data.get('user_id')
|
|
# taxpayer_fio = data.get('taxpayer_fio')
|
|
patient_fio = data.get('patient_fio')
|
|
|
|
url = "http://192.168.1.10:8080/AppFindPacFromTel"
|
|
data = {"telegram_id": user_id}
|
|
|
|
response = requests.post(url, json=data)
|
|
|
|
if response.status_code == 200:
|
|
result = response.json()
|
|
patients = [] # Список пациентов
|
|
birthday_pac = {} # Словарь для хранения ФИО и даты рождения
|
|
|
|
for patient in result.get("Pacients", []):
|
|
# Формируем строку ФИО
|
|
fio = f"{patient['last_name']} {patient['first_name']} {patient['second_name']}"
|
|
patients.append(fio)
|
|
|
|
# Сохраняем дату рождения в словарь с ключом ФИО
|
|
birthday_pac[fio] = patient['birthday']
|
|
print("список:", patients)
|
|
print("даты рождения:", birthday_pac)
|
|
birthday_users = birthday_pac.get(patient_fio)
|
|
|
|
|
|
|
|
|
|
if not user_id or not patient_fio: #or not taxpayer_fio
|
|
return "Ошибка: Не выбраны налогоплательщик и пациент", 400
|
|
|
|
payload = {
|
|
"telegram_id": int(user_id),
|
|
"first_name": patient_fio.split()[1] if len(patient_fio.split()) > 1 else "",
|
|
"second_name": patient_fio.split()[2] if len(patient_fio.split()) > 2 else "",
|
|
"last_name": patient_fio.split()[0],
|
|
"pac_poluchat": "True",
|
|
"poluchat_status": "",
|
|
"birthday": birthday_users
|
|
}
|
|
print(payload)
|
|
headers = {"User-Agent": "Mozilla/5.0", "Content-Type": "application/json"}
|
|
url = "http://192.168.1.10:8080/AppZaprSvedPac"
|
|
response = requests.post(url, json=payload, headers=headers)
|
|
|
|
if response.status_code == 200:
|
|
print("Ответ:", response.text)
|
|
result = response.json
|
|
print(result)
|
|
try:
|
|
result = response.json()
|
|
except:
|
|
result = {}
|
|
|
|
js_formatted_birthdate = (
|
|
datetime.strptime(result.get("pct_birthday", ""), "%Y-%m-%dT%H:%M:%S.%fZ").strftime("%Y-%m-%d")
|
|
if result.get("pct_birthday") else "")
|
|
|
|
|
|
js_formatted_passport_date = (
|
|
datetime.strptime(result.get("pct_doc_date", ""), "%Y-%m-%dT%H:%M:%S.%fZ").strftime("%Y-%m-%d")
|
|
if result.get("pct_doc_date") else "")
|
|
|
|
return jsonify(
|
|
user_id=user_id,
|
|
fio=patient_fio,
|
|
server_data=result,
|
|
js_formatted_birthdate=js_formatted_birthdate,
|
|
js_formatted_passport_date=js_formatted_passport_date,
|
|
pct_doc_ser=result.get('pct_doc_ser', ''),
|
|
pct_doc_nom=result.get('pct_doc_nom', ''),
|
|
pct_inn=result.get('pct_inn', ''),
|
|
pct_email=result.get('pct_email', ''),
|
|
pct_doc_org_kod=result.get('pct_doc_org_kod', ''),
|
|
pct_doc_org_name=result.get('pct_doc_org_name', ''),
|
|
success = True
|
|
)
|
|
else:
|
|
return f"Ошибка: {response.status_code} - {response.text}", 500
|
|
except Exception as e:
|
|
return f"Произошла ошибка: {e}", 500
|
|
|
|
|
|
|
|
@webApp.route('/sending_patient', methods=['POST'])
|
|
def sending_patient_data():
|
|
try:
|
|
raw_data = json.loads(request.data)
|
|
|
|
print(raw_data)
|
|
|
|
# Разделение ФИО
|
|
fio = raw_data.get("fio", "")
|
|
parts = fio.split(" ")
|
|
if len(parts) < 3:
|
|
return jsonify({'success': False, "error": "ФИО должно содержать 3 слова"}), 400 # Код 400 - ошибка клиента
|
|
|
|
first_name = parts[1]
|
|
middle_name = " ".join(parts[2:])
|
|
last_name = parts[0]
|
|
passport = raw_data.get("passport", "")
|
|
part = passport.split(" ")
|
|
pct_doc_ser = part[0]
|
|
plc_doc_nom = part[1]
|
|
# Обработка даты рождения
|
|
dob = raw_data.get("dob", "")
|
|
if dob:
|
|
# Преобразуем формат из 2016-09-25 в datetime объект
|
|
date_obje = datetime.strptime(dob, "%Y-%m-%d")
|
|
|
|
# Преобразуем datetime объект в строку в формате ISO 8601
|
|
pct_birthday = date_obje.strftime("%Y-%m-%dT%H:%M:%S.000Z")
|
|
pct_inn = raw_data.get("inn", "")
|
|
formatted_date = raw_data.get("passport_date", "")
|
|
# Преобразуем строку в объект datetime
|
|
if formatted_date:
|
|
# Преобразуем формат из 2016-09-25 в datetime объект
|
|
date_obj = datetime.strptime(formatted_date, "%Y-%m-%d")
|
|
|
|
# Преобразуем datetime объект в строку в формате ISO 8601
|
|
plc_doc_date = date_obj.strftime("%Y-%m-%dT%H:%M:%S.000Z")
|
|
plc_doc_org_name = raw_data.get("passport_issued_by", "")
|
|
plc_doc_org_kod = raw_data.get("postal_code", "")
|
|
pct_email = raw_data.get("email", "")
|
|
# Извлекаем список выбранных годов
|
|
selected_years = raw_data.get('selected_years', [])
|
|
|
|
if selected_years:
|
|
# Преобразуем элементы в целые числа
|
|
selected_years = list(map(int, selected_years))
|
|
|
|
# Находим минимальный и максимальный год
|
|
year_beg_spr = min(selected_years)
|
|
year_end_spr = max(selected_years)
|
|
|
|
# Если выбран только один год, то обе переменные будут одинаковыми
|
|
if year_beg_spr == year_end_spr:
|
|
year_end_spr = year_beg_spr
|
|
|
|
# Теперь у нас есть year_beg_spr и year_end_spr
|
|
print("Минимальный год:", year_beg_spr)
|
|
print("Максимальный год:", year_end_spr)
|
|
|
|
|
|
# Формируем данные для отправки
|
|
data1 = {
|
|
"telegram_id": raw_data.get("user_id"),
|
|
"pct_first_name": first_name,
|
|
"pct_second_name": middle_name,
|
|
"pct_last_name": last_name,
|
|
"pct_birthday": pct_birthday,
|
|
"pct_inn": pct_inn,
|
|
"pct_doc_type": "Паспорт",
|
|
"pct_doc_ind": 1,
|
|
"pct_doc_ser": pct_doc_ser,
|
|
"pct_doc_nom": plc_doc_nom,
|
|
"pct_doc_date": plc_doc_date,
|
|
"pct_doc_org_name": plc_doc_org_name,
|
|
"pct_doc_org_kod": plc_doc_org_kod,
|
|
"pac_poluchat": "True",
|
|
"pct_email": pct_email,
|
|
"year_beg_spr": year_beg_spr,
|
|
"year_end_spr": year_end_spr
|
|
}
|
|
|
|
print("Отправляемые данные:", data1)
|
|
|
|
#Успешный ответ
|
|
HEADER1 = {"User-Agent": "Mozilla/5.0", "Content-Type": "application/json"}
|
|
try:
|
|
response = requests.post("http://192.168.1.10:8080/AppSaveSvedPac", headers=HEADER1, json=data1, timeout=5)
|
|
print("Ответ сервера:", response.text) # вдруг сервер всё же что-то вернёт
|
|
if response.status_code == 200:
|
|
return jsonify({'success': True})
|
|
else:
|
|
return jsonify({'success': False, 'error': f'Сервер вернул статус {response.status_code}'}), 500
|
|
|
|
except requests.exceptions.RequestException as e:
|
|
return jsonify({'success': False, 'error': f'Ошибка соединения: {str(e)}'}), 500
|
|
|
|
except Exception as e:
|
|
print(f"Ошибка: {e}")
|
|
return jsonify({'success': False, 'error': str(e)}), 500
|
|
# Заглушка — вместо отправки просто возвращаем успех
|
|
# return jsonify({'success': True})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@webApp.route('/request_patient2', methods=['POST'])
|
|
def request_patient2():
|
|
try:
|
|
# return {
|
|
# "fio": "Чистогов Илья Дмитриевич",
|
|
# "formatted_birthdate": "24.09.2003",
|
|
# "js_formatted_passport_date": "2016-09-25",
|
|
# "js_formatted_birthdate": "2003-09-24",
|
|
# "pct_doc_ser": "1234",
|
|
# "pct_doc_nom": "123456",
|
|
# "pct_doc_org_kod": "590-003",
|
|
# "pct_doc_org_name": "ГУ МВД РОССИИ ПО ПЕРМСКОМУ КРАЮ",
|
|
# "pct_email": "1@1.ru",
|
|
# "pct_inn": "123123123123",
|
|
# "taxpayer_status_zapros": "Отец",
|
|
# "pct_doc_ind": "1",
|
|
# "server_data": {
|
|
# "pct_birthday": "2003-09-24T00:00:00.000Z",
|
|
# "pct_doc_date": "",
|
|
# "pct_doc_ind": "",
|
|
# "pct_doc_nom": "",
|
|
# "pct_doc_org_kod": "",
|
|
# "pct_doc_org_name": "",
|
|
# "pct_doc_ser": "",
|
|
# "pct_doc_type": "",
|
|
# "pct_email": "",
|
|
# "pct_first_name": "Илья",
|
|
# "pct_inn": "",
|
|
# "pct_last_name": "Чистогов",
|
|
# "pct_second_name": "Дмитриевич",
|
|
# "result": "OK",
|
|
# "status_code": 200
|
|
# },
|
|
# "success": True,
|
|
# "user_id": "766945900"
|
|
# }
|
|
|
|
|
|
data = request.get_json()
|
|
print(data)
|
|
user_id = data.get('user_id')
|
|
taxpayer_status_zapros = data.get('taxpayer_status')
|
|
patient_fio = data.get('patient_fio')
|
|
|
|
url = "http://192.168.1.10:8081/AppFindPacFromTel"
|
|
data = {"telegram_id": user_id}
|
|
|
|
response = requests.post(url, json=data)
|
|
|
|
if response.status_code == 200:
|
|
result = response.json()
|
|
patients = [] # Список пациентов
|
|
birthday_pac = {} # Словарь для хранения ФИО и даты рождения
|
|
|
|
for patient in result.get("Pacients", []):
|
|
# Формируем строку ФИО
|
|
fio = f"{patient['last_name']} {patient['first_name']} {patient['second_name']}"
|
|
patients.append(fio)
|
|
|
|
# Сохраняем дату рождения в словарь с ключом ФИО
|
|
birthday_pac[fio] = patient['birthday']
|
|
print("список:", patients)
|
|
print("даты рождения:", birthday_pac)
|
|
birthday_users = birthday_pac.get(patient_fio)
|
|
|
|
print(birthday_users)
|
|
|
|
|
|
payload = {
|
|
"telegram_id": int(user_id),
|
|
"first_name": patient_fio.split()[1] if len(patient_fio.split()) > 1 else "",
|
|
"second_name": patient_fio.split()[2] if len(patient_fio.split()) > 2 else "",
|
|
"last_name": patient_fio.split()[0],
|
|
"pac_poluchat": "False",
|
|
"poluchat_status": taxpayer_status_zapros,
|
|
"birthday": birthday_users
|
|
}
|
|
print(payload)
|
|
headers = {"User-Agent": "Mozilla/5.0", "Content-Type": "application/json"}
|
|
url = "http://192.168.1.10:8081/AppZaprSvedPac"
|
|
response = requests.post(url, json=payload, headers=headers)
|
|
|
|
if response.status_code == 200:
|
|
print("Ответ:", response.text)
|
|
result = response.json
|
|
print(result)
|
|
try:
|
|
result = response.json()
|
|
except:
|
|
result = {}
|
|
|
|
js_formatted_birthdate = (
|
|
datetime.strptime(result.get("pct_birthday", ""), "%Y-%m-%dT%H:%M:%S.%fZ").strftime("%Y-%m-%d")
|
|
if result.get("pct_birthday") else "")
|
|
|
|
js_formatted_birthdate_plc = (
|
|
datetime.strptime(result.get("plc_birthday", ""), "%Y-%m-%dT%H:%M:%S.%fZ").strftime("%Y-%m-%d")
|
|
if result.get("plc_birthday") else "")
|
|
|
|
js_formatted_passport_date = (
|
|
datetime.strptime(result.get("pct_doc_date", ""), "%Y-%m-%dT%H:%M:%S.%fZ").strftime("%Y-%m-%d")
|
|
if result.get("pct_doc_date") else "")
|
|
|
|
js_formatted_passport_date_plc = (
|
|
datetime.strptime(result.get("plc_doc_date", ""), "%Y-%m-%dT%H:%M:%S.%fZ").strftime("%Y-%m-%d")
|
|
if result.get("plc_doc_date") else "")
|
|
|
|
return jsonify(
|
|
user_id=user_id,
|
|
taxpayer_status_zapros=taxpayer_status_zapros,
|
|
fio=patient_fio,
|
|
server_data=result,
|
|
js_formatted_birthdate=js_formatted_birthdate,
|
|
js_formatted_passport_date=js_formatted_passport_date,
|
|
pct_doc_ser=result.get('pct_doc_ser', ''),
|
|
pct_doc_nom=result.get('pct_doc_nom', ''),
|
|
pct_inn=result.get('pct_inn', ''),
|
|
pct_doc_type=result.get('pct_doc_type', ''),
|
|
pct_doc_ind=result.get('pct_doc_ind', ''),
|
|
pct_email=result.get('pct_email', ''),
|
|
pct_doc_org_kod=result.get('pct_doc_org_kod', ''),
|
|
pct_doc_org_name=result.get('pct_doc_org_name', ''),
|
|
plc_status=result.get('plc_status', ''),
|
|
plc_fio=result.get('plc_fio', ''),
|
|
js_formatted_birthdate_plc=js_formatted_birthdate_plc,
|
|
plc_inn=result.get('plc_inn', ''),
|
|
plc_doc_type=result.get('plc_doc_type', ''),
|
|
plc_doc_ind=result.get('plc_doc_ind', ''),
|
|
plc_doc_ser=result.get('plc_doc_ser', ''),
|
|
plc_doc_nom=result.get('plc_doc_nom', ''),
|
|
js_formatted_passport_date_plc=js_formatted_passport_date_plc,
|
|
plc_doc_org_name=result.get('plc_doc_org_name', ''),
|
|
plc_doc_org_kod=result.get('plc_doc_org_kod', ''),
|
|
success = True
|
|
)
|
|
else:
|
|
return f"Ошибка: {response.status_code} - {response.text}", 500
|
|
except Exception as e:
|
|
return f"Произошла ошибка: {e}", 500
|
|
|
|
|
|
|
|
|
|
@webApp.route('/sending_patient2', methods=['POST'])
|
|
def send_registration_request2():
|
|
try:
|
|
raw_data = json.loads(request.data)
|
|
|
|
print("Полученные данные:", raw_data)
|
|
|
|
# Разделение ФИО
|
|
|
|
|
|
# Определение документа
|
|
if raw_data.get("passport1") and raw_data.get("passport_date1") and raw_data.get(
|
|
"postal_code1") and raw_data.get("passport_issued_by1"):
|
|
pct_doc_type = "Паспорт"
|
|
pct_doc_ind = 1
|
|
passport = raw_data.get("passport1", "")
|
|
parts = passport.split(" ")
|
|
pct_doc_ser = parts[0]
|
|
pct_doc_nom = parts[1]
|
|
formatted_date = raw_data.get("passport_date1", "")
|
|
date_obj = datetime.strptime(formatted_date, "%Y-%m-%d")
|
|
pct_doc_date = date_obj.strftime("%Y-%m-%dT00:00:00.000Z")
|
|
pct_doc_org_name = raw_data.get("passport_issued_by1", "")
|
|
pct_doc_org_kod = raw_data.get("postal_code1", "")
|
|
inn1 = ""
|
|
|
|
elif raw_data.get("svedetelstvo") and raw_data.get("svedetelstvo_date") and raw_data.get(
|
|
"svedetelstvo_issued_by"):
|
|
pct_doc_type = "Свидетельство о рождении"
|
|
pct_doc_ind = 2
|
|
pct_doc_ser, pct_doc_nom = raw_data.get("svedetelstvo", "").split(" ")
|
|
formatted_date = raw_data.get("svedetelstvo_date", "")
|
|
date_obj = datetime.strptime(formatted_date, "%Y-%m-%d")
|
|
pct_doc_date = date_obj.strftime("%Y-%m-%dT00:00:00.000Z")
|
|
pct_doc_org_name = raw_data.get("svedetelstvo_issued_by", "")
|
|
pct_doc_org_kod = ""
|
|
inn1 = ""
|
|
elif raw_data.get("inn1"):
|
|
inn1 = raw_data.get("inn1", "")
|
|
pct_doc_type = ""
|
|
pct_doc_ind = ""
|
|
pct_doc_ser = ""
|
|
pct_doc_nom = ""
|
|
pct_doc_date = ""
|
|
pct_doc_org_name = ""
|
|
pct_doc_org_kod = ""
|
|
|
|
else:
|
|
return jsonify({'success': False, "error": "Недостаточно данных для определения документа"}), 400
|
|
|
|
fio = raw_data.get("patient_fio", "")
|
|
parts = fio.split(" ")
|
|
if len(parts) < 3:
|
|
return jsonify({'success': False, "error": "ФИО должно содержать 3 слова"}), 400
|
|
|
|
pct_last_name = parts[0]
|
|
pct_first_name = parts[1]
|
|
pct_second_name = " ".join(parts[2:])
|
|
|
|
# Обработка даты рождения
|
|
dob = raw_data.get("dob1", "")
|
|
if dob:
|
|
date_obj = datetime.strptime(dob, "%Y-%m-%d")
|
|
pct_birthday = date_obj.strftime("%Y-%m-%dT00:00:00.000Z")
|
|
|
|
# Данные родителей
|
|
plc_fio = raw_data.get("fional", "")
|
|
plc_status = raw_data.get("taxpayer_status_zapros", "")
|
|
dob_parent = raw_data.get("dobnal", "")
|
|
plc_birthday = ""
|
|
if dob_parent:
|
|
date_obj = datetime.strptime(dob_parent, "%Y-%m-%d")
|
|
plc_birthday = date_obj.strftime("%Y-%m-%dT00:00:00.000Z")
|
|
|
|
plc_doc_ser, plc_doc_nom = raw_data.get("passportnal", "").split(" ")
|
|
formatted_date = raw_data.get("passport_datenal", "")
|
|
date_obj = datetime.strptime(formatted_date, "%Y-%m-%d")
|
|
plc_doc_date = date_obj.strftime("%Y-%m-%dT00:00:00.000Z")
|
|
plc_doc_org_name = raw_data.get("passport_issued_bynal", "")
|
|
plc_doc_org_kod = raw_data.get("postal_codenal", "")
|
|
plc_inn = raw_data.get("innnal", "")
|
|
|
|
user_id = raw_data.get('user_id')
|
|
|
|
email1=raw_data.get("email1", "")
|
|
# Извлекаем годы
|
|
selected_years = raw_data.get('selected_years', [])
|
|
|
|
if selected_years:
|
|
# Преобразуем элементы в целые числа
|
|
selected_years = list(map(int, selected_years))
|
|
|
|
# Находим минимальный и максимальный год
|
|
year_beg_spr1 = min(selected_years)
|
|
year_end_spr2 = max(selected_years)
|
|
|
|
# Если выбран только один год, то обе переменные будут одинаковыми
|
|
if year_beg_spr1 == year_end_spr2:
|
|
year_end_spr2 = year_beg_spr1
|
|
|
|
# Теперь у нас есть year_beg_spr и year_end_spr
|
|
print("Минимальный год:", year_beg_spr1)
|
|
print("Максимальный год:", year_end_spr2)
|
|
|
|
# Формируем данные
|
|
data2 = {
|
|
"telegram_id": int(user_id),
|
|
"pct_last_name": pct_last_name,
|
|
"pct_first_name": pct_first_name,
|
|
"pct_second_name": pct_second_name,
|
|
"pct_birthday": pct_birthday,
|
|
"pct_inn": inn1,
|
|
"pct_doc_type": pct_doc_type,
|
|
"pct_doc_ind": pct_doc_ind,
|
|
"pct_doc_ser": pct_doc_ser,
|
|
"pct_doc_nom": pct_doc_nom,
|
|
"pct_doc_date": pct_doc_date,
|
|
"pct_doc_org_name": pct_doc_org_name,
|
|
"pct_doc_org_kod": pct_doc_org_kod,
|
|
"pac_poluchat": "False",
|
|
"pct_email": email1,
|
|
"plc_status": plc_status,
|
|
"plc_fio": plc_fio,
|
|
"plc_birthday": plc_birthday,
|
|
"plc_inn": plc_inn,
|
|
"plc_doc_type": "Паспорт",
|
|
"plc_doc_ind": 1,
|
|
"plc_doc_ser": plc_doc_ser,
|
|
"plc_doc_nom": plc_doc_nom,
|
|
"plc_doc_date": plc_doc_date,
|
|
"plc_doc_org_name": "ГУ МВД РОССИИ ПО ПЕРМСКОМУ КРАЮ",
|
|
"plc_doc_org_kod": plc_doc_org_kod,
|
|
"year_beg_spr": year_beg_spr1,
|
|
"year_end_spr": year_end_spr2
|
|
}
|
|
|
|
# print("Отправляемые данные:", data2)
|
|
# return jsonify({'success': True, 'data': data2})
|
|
# except Exception as e:
|
|
# return jsonify({'success': False, 'error': str(e)}), 500
|
|
|
|
|
|
print("Отправляемые данные:", data2)
|
|
|
|
# Успешный ответ
|
|
HEADER2 = {"User-Agent": "Mozilla/5.0", "Content-Type": "application/json"}
|
|
try:
|
|
response = requests.post("http://192.168.1.10:8081/AppSaveSvedPac", headers=HEADER2, json=data2, timeout=5)
|
|
print("Ответ сервера:", response.text) # вдруг сервер всё же что-то вернёт
|
|
if response.status_code == 200:
|
|
return jsonify({'success': True})
|
|
else:
|
|
return jsonify({'success': False, 'error': f'Сервер вернул статус {response.status_code}'}), 500
|
|
|
|
except requests.exceptions.RequestException as e:
|
|
return jsonify({'success': False, 'error': f'Ошибка соединения: {str(e)}'}), 500
|
|
|
|
except Exception as e:
|
|
print(f"Ошибка: {e}")
|
|
return jsonify({'success': False, 'error': str(e)}), 500
|
|
|
|
|
|
|
|
@webApp.route('/')
|
|
def main_page_2_0():
|
|
return render_template('2.0/main_page.pug', user_id=request.args.get('user_id', None))
|
|
|
|
|
|
|
|
@webApp.route('/fns')
|
|
def main_page_2_0_fns():
|
|
try:
|
|
user_id = request.args.get('user_id')
|
|
if not user_id:
|
|
return "Ошибка: не передан user_id", 400
|
|
|
|
sheet = authorize_google().open("Пациенты клиники").sheet1
|
|
records = sheet.get_all_values()
|
|
|
|
# Получаем список всех людей с таким user_id
|
|
matching_users = [row[0] for row in records[1:] if row[3] == user_id]
|
|
matching_users = sum(matching_users, []) if any(isinstance(i, list) for i in matching_users) else matching_users
|
|
|
|
print(matching_users)
|
|
|
|
if not matching_users:
|
|
return "Ошибка: пользователь не найден", 404
|
|
|
|
return render_template('2.0/main_page_fns.pug', user_id=user_id, users=matching_users)
|
|
except Exception as e:
|
|
return f"Произошла ошибка: {e}", 500
|
|
|
|
|
|
|
|
|
|
|
|
@webApp.route('/fnstest')
|
|
def main_page_2_0_fns_test():
|
|
try:
|
|
user_id = request.args.get('user_id')
|
|
if not user_id:
|
|
return "Ошибка: не передан user_id", 400
|
|
|
|
url = "http://192.168.1.10:8081/AppFindPacFromTel"
|
|
data = {"telegram_id": user_id}
|
|
|
|
response = requests.post(url, json=data)
|
|
patients = []
|
|
|
|
if response.status_code == 200:
|
|
result = response.json()
|
|
for patient in result.get("Pacients", []):
|
|
# Формируем строку ФИО
|
|
fio = f"{patient['last_name']} {patient['first_name']} {patient['second_name']}"
|
|
patients.append(fio)
|
|
print("список:", patients)
|
|
birthday_pac = {patient['birthday']}
|
|
|
|
|
|
if not patients:
|
|
return "Ошибка: пользователь не найден", 404
|
|
|
|
return render_template('2.0/main_page_fns2.pug', user_id=user_id, users=patients, birthday_paci=birthday_pac)
|
|
except Exception as e:
|
|
return f"Произошла ошибка: {e}", 500 |