diff --git a/webApp/interfaces/pagesController.py b/webApp/interfaces/pagesController.py index 6caf4d9..7f00ac5 100644 --- a/webApp/interfaces/pagesController.py +++ b/webApp/interfaces/pagesController.py @@ -217,6 +217,39 @@ def send_registration_request(): @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() @@ -247,7 +280,7 @@ def request_patient_information(): } print(payload) headers = {"User-Agent": "Mozilla/5.0", "Content-Type": "application/json"} - url = "http://192.168.1.10:8081/AppZaprSvedPac" + url = "http://192.168.1.10:8080/AppZaprSvedPac" response = requests.post(url, json=payload, headers=headers) if response.status_code == 200: @@ -375,7 +408,7 @@ def sending_patient_data(): #Успешный ответ HEADER1 = {"User-Agent": "Mozilla/5.0", "Content-Type": "application/json"} try: - response = requests.post("http://192.168.1.10:8081/AppSaveSvedPac", headers=HEADER1, json=data1, timeout=5) + 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}) @@ -396,6 +429,291 @@ def sending_patient_data(): + + + + + + + + +@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') + + sheet = authorize_google().open("Пациенты клиники").sheet1 + records = sheet.get_all_values() + + # Получаем список всех людей с таким user_id + birthday_users = [datetime.strptime(row[2], "%Y-%m-%d").strftime("%Y-%m-%dT00:00:00.000Z") for row in records[1:] if row[0] == 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": data.get('taxpayer_status'), + "birthday": birthday_users[0] if birthday_users else None + } + 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) + + # Разделение ФИО + 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", "") + pct_birthday = "" + if dob: + date_obj = datetime.strptime(dob, "%Y-%m-%d") + pct_birthday = date_obj.strftime("%Y-%m-%dT00:00:00.000Z") + + # Определение документа + 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", "") + + 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 = "" + else: + return jsonify({'success': False, "error": "Недостаточно данных для определения документа"}), 400 + + # Данные родителей + 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') + inn1=raw_data.get("inn1", "") + 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)) @@ -424,3 +742,30 @@ def main_page_2_0_fns(): 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 + + 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_fns2.pug', user_id=user_id, users=matching_users) + except Exception as e: + return f"Произошла ошибка: {e}", 500 \ No newline at end of file diff --git a/webApp/templates/2.0/main_page.pug b/webApp/templates/2.0/main_page.pug index 5939787..ef6b75b 100644 --- a/webApp/templates/2.0/main_page.pug +++ b/webApp/templates/2.0/main_page.pug @@ -60,5 +60,3 @@ script(type="text/javascript", src="/js/2.0.dashboard.js?q="~randomString()) h3="Отлично!" p="Регистрация завершена. Перейдите в Telegram, чтобы продолжить." - - diff --git a/webApp/templates/2.0/main_page_fns2.pug b/webApp/templates/2.0/main_page_fns2.pug new file mode 100644 index 0000000..70f18ec --- /dev/null +++ b/webApp/templates/2.0/main_page_fns2.pug @@ -0,0 +1,272 @@ +include 2.0/application + + + + +link(rel="stylesheet" href="/css/1_model_app.css?q="~randomString()) +link(rel="stylesheet" href="/css/1_model_icons.css?q="~randomString()) +script(type="text/javascript", src="/js/UFMS.js?q="~randomString()) +script(type="text/javascript", src="/js/2.0.dashboard.test_fns.js?q="~randomString()) + +.enterblock.custom-font.py-5 + .row.mx-auto(style='max-width: 448px; vertical-align: middle; padding-bottom: 120%;') + .col-12.my-md-auto.p-0.card.shadow.rounded-3(style='min-height: 500px;') + .card-body.px-0.pb-0 + h5.mx-4.fw-bold Заказать справку ФНС + input.tg_input#user_id(type="hidden", value=user_id) + + + .my-3.mx-4.success-field.primary-field + label.form-label.m-0(for="patient_fio") Выберите пациента + select.form-control.tg_input#patient_fio(name="patient_fio" required) + option(value="") Выберите пациента + each user in users + option(value=user) #{user} + + .my-3.mx-4.success-field.primary-field + label.form-label.m-0(for="taxpayer_status") Являюсь налогоплательщиком как + select.form-select.tg_input#taxpayer_status + option(disabled, selected)='Выберите статус' + small="(Пожалуйста, выберите подходящий вариант)" + + .my-3.mx-4.primary-field + button.btn.btn-success.float-end.mb-3#form_submit(type="submit") + span.spinner-border.spinner-border-sm.me-1.d-none(role="status" aria-hidden="true") + span Отправить + + + + .my-3.mx-4.success-field.verification(style="display: none;") + label.form-label.m-0(for="fio") Фамилия Имя Отчество + input.form-control.tg_input#fio(type="text" name="fio") + small="(Пожалуйста, проверьте правильность данных)" + + .my-3.mx-4.success-field.verification(style="display: none;") + label.form-label.m-0(for="birthdate") Дата рождения + input.form-control.tg_input#dob(type="date") + small="(Пожалуйста, проверьте правильность данных)" + + .my-3.mx-4.success-field.verification(style="display: none;") + label.form-label.m-0(for="passport") Серия и номер паспорта + input.form-control.tg_input#passport + small="(Пожалуйста, проверьте правильность данных)" + + .my-3.mx-4.success-field.verification(style="display: none;") + label.form-label.m-0(for="passport_date") Дата выдачи паспорта + input.form-control.tg_input#passport_date(type="date") + small="(Пожалуйста, проверьте правильность данных)" + + + .my-3.mx-4.success-field.verification(style="display: none;") + label.form-label.m-0(for="postal_code") Код подразделения + input.form-control.tg_input#postal_code + small="(Пожалуйста, проверьте правильность данных)" + + + .my-3.mx-4.success-field.verification(style="display: none;") + label.form-label.m-0(for="passport_issued_by") Кем выдан паспорт + select.form-select.tg_input#passport_issued_by(style="") + option(disabled, selected)="Кем выдан паспорт" + small="(Пожалуйста, проверьте правильность данных)" + + + .my-3.mx-4.success-field.verification(style="display: none;") + label.form-label.m-0(for="inn") ИНН + input.form-control.tg_input#inn(type="text" name="#inn") + small="(Пожалуйста, проверьте правильность данных)" + + + .my-3.mx-4.success-field.verification(style="display: none;") + label.form-label.m-0(for="email") Электронная почта + input.form-control.tg_input#email(type="text" name="email" value=pct_email) + small="(Пожалуйста, проверьте правильность данных)" + + + .my-3.mx-4.success-field.verification(style="display: none;") + label.form-label.m-0 За какой год выдать данные + .checkbox-container + each year in [2025, 2024, 2023, 2022] + label.checkbox-item + input(type="checkbox" name="god_zapros" value=year) + span= year + button.btn.btn-primary#select-all Выбрать все + + hr.primary-field(style="display: none;") + .my-3.mx-4.primary-field.verification(style="display: none;") + button.btn.btn-success.float-end.mb-3#code_submit + span.spinner-border.spinner-border-sm.me-1.d-none(role="status" aria-hidden="true") + span="Заказать справку" + + .my-3.mx-4.primary-field.success_window(style="display: none;") + h3 Отлично! + + p Ваша заявка принята. Справка будет оформлена в течение трёх рабочих дней. + p Готовые документы будут отправлены на вашу электронную почту. + p + | 📍 Также их можно забрать лично по адресу: + br + strong г. Пермь, ул. Г. Звезда, д. 31 А + | , в удобное для вас время: + br + | – будни: с 09:00 до 21:00 + br + | – выходные и праздничные дни: с 09:00 до 19:00 + br + em (❗️Обращаем внимание! Каждый четвёртый четверг месяца Клиника работает до 17:00). + p + | ☝️ + strong Важно: + br + | Справку может получить налогоплательщик при предъявлении паспорта или его представитель с доверенностью и паспортом. + p Спасибо за ваше обращение! 😊 + + + + + .my-3.mx-4.success-field.verificationpacient(style="display: none;") + p ДАННЫЕ ПАЦИЕНТА + + .my-3.mx-4.success-field.verificationpacient(style="display: none;") + label.form-label.m-0(for="fio") Фамилия Имя Отчество + input.form-control.tg_input#fio1(type="text" name="fio") + small="(Пожалуйста, проверьте правильность данных)" + + + .my-3.mx-4.success-field.verificationpacient(style="display: none;") + label.form-label.m-0(for="birthdate") Дата рождения + input.form-control.tg_input#dob1(type="date") + small="(Пожалуйста, проверьте правильность данных)" + + + .my-3.mx-4.success-field.verificationpacient(style="display: none;") + label.form-label.m-0(for="documentTypePacient") Документ пациента: выберите паспорт, ИНН или свидетельство о рождении и введите его данные. + .my-3.d-flex.justify-content-between.gap-2 + button.btn.btn-secondary.flex-fill#passportBtn(type="button") Паспортные данные пациента + button.btn.btn-secondary.flex-fill#INNpacientBtn(type="button") ИНН пациента + button.btn.btn-secondary.flex-fill#SvidetelstvoBth(type="button") Свидетельство о рождении + + + + #passportFields.d-none + .my-3.mx-4.success-field.verificationpacient + label.form-label.m-0(for="passport") Серия и номер паспорта + input.form-control.tg_input#passport1 + small="(Пожалуйста, проверьте правильность данных)" + + .my-3.mx-4.success-field.verificationpacient + label.form-label.m-0(for="passport_date") Дата выдачи паспорта + input.form-control.tg_input#passport_date1(type="date") + small="(Пожалуйста, проверьте правильность данных)" + + + .my-3.mx-4.success-field.verificationpacient + label.form-label.m-0(for="postal_code") Код подразделения + input.form-control.tg_input#postal_code1 + small="(Пожалуйста, проверьте правильность данных)" + + + .my-3.mx-4.success-field.verificationpacient + label.form-label.m-0(for="passport_issued_by") Кем выдан паспорт + select.form-select.tg_input#passport_issued_by1(style="") + option(disabled, selected)="Кем выдан паспорт" + small="(Пожалуйста, проверьте правильность данных)" + + #INNpacientFields.d-none + .my-3.mx-4.success-field.verificationpacient + label.form-label.m-0(for="inn") ИНН + input.form-control.tg_input#inn1(type="text" name="#inn") + small="(Пожалуйста, проверьте правильность данных)" + + #SvidetelstvoFields.d-none + .my-3.mx-4.success-field.verificationpacient + label.form-label.m-0(for="svedetelstvo") Серия и номер свидетельства о рождении + input.form-control.tg_input#svedetelstvo + small="(Пожалуйста, проверьте правильность данных)" + + .my-3.mx-4.success-field.verificationpacient + label.form-label.m-0(for="svedetelstvo_date") Дата выдачи свидетельства о рождении + input.form-control.tg_input#svedetelstvo_date(type="date") + small="(Пожалуйста, проверьте правильность данных)" + + + .my-3.mx-4.success-field.verificationpacient + label.form-label.m-0(for="svedetelstvo_issued_by") Кем выдано свидетельство о рождении + input.form-control.tg_input#svedetelstvo_issued_by + small="(Пожалуйста, проверьте правильность данных)" + + + .my-3.mx-4.success-field.verificationpacient(style="display: none;") + p ДАННЫЕ НАЛОГОПЛАТЕЛЬЩИКА + + + .my-3.mx-4.success-field.verificationpacient(style="display: none;") + label.form-label.m-0(for="taxpayer_status_zapros") Являюсь налогоплательщиком как + select.form-select.tg_input#taxpayer_status_zapros + option(disabled, selected)='Выберите статус' + small="(Пожалуйста, выберите подходящий вариант)" + + .my-3.mx-4.success-field.verificationpacient(style="display: none;") + label.form-label.m-0(for="fio") Фамилия Имя Отчество + input.form-control.tg_input#fional(type="text" name="fio") + small="(Пожалуйста, проверьте правильность данных)" + + .my-3.mx-4.success-field.verificationpacient(style="display: none;") + label.form-label.m-0(for="birthdate") Дата рождения + input.form-control.tg_input#dobnal(type="date") + small="(Пожалуйста, проверьте правильность данных)" + + + .my-3.mx-4.success-field.verificationpacient(style="display: none;") + label.form-label.m-0(for="inn") ИНН + input.form-control.tg_input#innnal(type="text" name="#inn") + small="(Пожалуйста, проверьте правильность данных)" + + + .my-3.mx-4.success-field.verificationpacient(style="display: none;") + label.form-label.m-0(for="passport") Серия и номер паспорта + input.form-control.tg_input#passportnal + small="(Пожалуйста, проверьте правильность данных)" + + .my-3.mx-4.success-field.verificationpacient(style="display: none;") + label.form-label.m-0(for="passport_date") Дата выдачи паспорта + input.form-control.tg_input#passport_datenal(type="date") + small="(Пожалуйста, проверьте правильность данных)" + + + .my-3.mx-4.success-field.verificationpacient(style="display: none;") + label.form-label.m-0(for="postal_code") Код подразделения + input.form-control.tg_input#postal_codenal + small="(Пожалуйста, проверьте правильность данных)" + + + .my-3.mx-4.success-field.verificationpacient(style="display: none;") + label.form-label.m-0(for="passport_issued_by") Кем выдан паспорт + select.form-select.tg_input#passport_issued_bynal(style="") + option(disabled, selected)="Кем выдан паспорт" + small="(Пожалуйста, проверьте правильность данных)" + + + + .my-3.mx-4.success-field.verificationpacient(style="display: none;") + label.form-label.m-0(for="email") Электронная почта + input.form-control.tg_input#email1(type="text" name="email" value=pct_email) + small="(Пожалуйста, проверьте правильность данных)" + + + + + + .my-3.mx-4.success-field.verificationpacient(style="display: none;") + label.form-label.m-0 За какой год выдать данные + .checkbox-container + each year in [2025, 2024, 2023, 2022] + label.checkbox-item + input(type="checkbox" name="god_zapros2" value=year) + span= year + button.btn.btn-outline-primary.btn-sm#select-all2="Выбрать все" + + hr.primary-field.verificationpacient(style="display: none;") + .my-3.mx-4.primary-field.verificationpacient(style="display: none;") + button.btn.btn-success.float-end.mb-3#code_submit2 + span.spinner-border.spinner-border-sm.me-1.d-none(role="status" aria-hidden="true") + span="Заказать справку" diff --git a/webApp/templates/static/js/2.0.dashboard.test_fns.js b/webApp/templates/static/js/2.0.dashboard.test_fns.js new file mode 100644 index 0000000..6a46ef6 --- /dev/null +++ b/webApp/templates/static/js/2.0.dashboard.test_fns.js @@ -0,0 +1,1091 @@ +function show_error(message){ + $('#error_alert').slideDown(500); + $('#success_alert').hide(); + $('#error_alert').delay(5000).slideUp(); + $('#alert_error_text').empty(); + if (message) + $('#alert_error_text').append(message) +} + +function show_success(message){ + $('#success_alert').slideDown(500); + $('#success_alert').delay(5000).slideUp(); + $('#alert_success_text').empty(); + if (message) + $('#alert_success_text').append(message); +} + + + +function validate_length(val, dest_len){ + if(val.length < dest_len){ + return false; + } + return true; +} + + + + + +$(document).ready(function(){ + $("#select-all").on("click", function() { + $("input[name='god_zapros']").prop("checked", true); + }); + $("#select-all2").on("click", function() { + $("input[name='god_zapros2']").prop("checked", true); + }); + + $("#postal_code").change(function(){ + $('#passport_issued_by').empty(); + $('#passport_issued_by').append('') + for(i in UFMS_list[$(this).val()]) + { + item = UFMS_list[$(this).val()][i]; + $('#passport_issued_by').append(''); + } +// $('#passport_issued_by').select2("change"); + }); + + + $("#postal_codenal").change(function(){ + $('#passport_issued_bynal').empty(); + $('#passport_issued_bynal').append('') + for(i in UFMS_list[$(this).val()]) + { + item = UFMS_list[$(this).val()][i]; + $('#passport_issued_bynal').append(''); + } +// $('#passport_issued_by').select2("change"); + }); + + + $("#postal_code1").change(function(){ + $('#passport_issued_by1').empty(); + $('#passport_issued_by1').append('') + for(i in UFMS_list[$(this).val()]) + { + item = UFMS_list[$(this).val()][i]; + $('#passport_issued_by1').append(''); + } +// $('#passport_issued_by').select2("change"); + }); + + const statusesMain = ["Я являюсь налогоплательщиком", "Мать", "Отец", "Сын", "Дочь", "Муж", "Жена", "Опекун"]; + const selectMain = document.getElementById("taxpayer_status"); + + statusesMain.forEach(status => { + selectMain.innerHTML += ``; + }); + + const statusesZapros = ["Мать", "Отец", "Сын", "Дочь", "Муж", "Жена", "Опекун"]; + const selectZapros = document.getElementById("taxpayer_status_zapros"); + + statusesZapros.forEach(status => { + selectZapros.innerHTML += ``; + }); + + + + + + $('#passportBtn').on('click', function() { + $('#passportFields').removeClass('d-none'); + $('#INNpacientFields').addClass('d-none'); + $('#SvidetelstvoFields').addClass('d-none'); + }); + + + + + + // При нажатии на кнопку "ИНН пациента" + $('#INNpacientBtn').on('click', function() { + $('#INNpacientFields').removeClass('d-none'); + $('#passportFields').addClass('d-none'); + $('#SvidetelstvoFields').addClass('d-none'); + }); + + $('#SvidetelstvoBth').on('click', function() { + $('#SvidetelstvoFields').removeClass('d-none'); + $('#passportFields').addClass('d-none'); + $('#INNpacientFields').addClass('d-none'); + }); + + + const validateEmail = (email) => { + return email.match( + /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ + ); + }; + + const validate = (selector) => { + const email = $(selector).val(); + if (validateEmail(email)) { + $(selector).parent().removeClass('errors-field').addClass('success-field'); + } else { + $(selector).parent().removeClass('success-field').addClass('errors-field'); + } + }; + + const sanitizeEmailInput = (selector) => { + $(selector).on('input', function () { + let input = $(this).val(); + // Разрешаем только буквы, цифры, точки, дефисы и подчеркивания + input = input.replace(/[^a-zA-Z0-9._@-]/g, ''); + // Обновляем поле ввода + $(this).val(input); + validate(selector); + }); + }; + + // Вызов валидации для каждого поля email + sanitizeEmailInput('#email'); + sanitizeEmailInput('#email1'); + + + $('body').append('
'); + $('body').append(' '); + + $('#fio').on('input', function () { + let input = $(this).val(); + + // Убираем все лишние символы, кроме букв и пробелов + input = input.replace(/[^a-zA-Zа-яА-ЯёЁ ]/g, ''); + + // Преобразуем каждое слово, чтобы оно начиналось с заглавной буквы + let formattedInput = input.split(' ').map(word => { + if (word.length > 0) { + return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase(); + } + return ''; // Пустые слова не трогаем + }).join(' '); // Объединяем обратно с пробелами + + // Обновляем поле ввода с отформатированным текстом + $(this).val(formattedInput); + + // Проверяем количество слов + let words = formattedInput.trim().split(/\s+/); // Убираем лишние пробелы + if (words.length < 3 || words.some(word => word.length < 2)) { + $(this).parent().removeClass('success-field').addClass('errors-field'); // Подсветить поле + } else { + $(this).parent().removeClass('errors-field').addClass('success-field'); // Убрать подсветку + } + }); + + + $('#fio1').on('input', function () { + let input = $(this).val(); + + // Убираем все лишние символы, кроме букв и пробелов + input = input.replace(/[^a-zA-Zа-яА-ЯёЁ ]/g, ''); + + // Преобразуем каждое слово, чтобы оно начиналось с заглавной буквы + let formattedInput = input.split(' ').map(word => { + if (word.length > 0) { + return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase(); + } + return ''; // Пустые слова не трогаем + }).join(' '); // Объединяем обратно с пробелами + + // Обновляем поле ввода с отформатированным текстом + $(this).val(formattedInput); + + // Проверяем количество слов + let words = formattedInput.trim().split(/\s+/); // Убираем лишние пробелы + if (words.length < 3 || words.some(word => word.length < 2)) { + $(this).parent().removeClass('success-field').addClass('errors-field'); // Подсветить поле + } else { + $(this).parent().removeClass('errors-field').addClass('success-field'); // Убрать подсветку + } + }); + + + + $('#fional').on('input', function () { + let input = $(this).val(); + + // Убираем все лишние символы, кроме букв и пробелов + input = input.replace(/[^a-zA-Zа-яА-ЯёЁ ]/g, ''); + + // Преобразуем каждое слово, чтобы оно начиналось с заглавной буквы + let formattedInput = input.split(' ').map(word => { + if (word.length > 0) { + return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase(); + } + return ''; // Пустые слова не трогаем + }).join(' '); // Объединяем обратно с пробелами + + // Обновляем поле ввода с отформатированным текстом + $(this).val(formattedInput); + + // Проверяем количество слов + let words = formattedInput.trim().split(/\s+/); // Убираем лишние пробелы + if (words.length < 3 || words.some(word => word.length < 2)) { + $(this).parent().removeClass('success-field').addClass('errors-field'); // Подсветить поле + } else { + $(this).parent().removeClass('errors-field').addClass('success-field'); // Убрать подсветку + } + }); + + + $('#patient_fio').on('input', function () { + let input = $(this).val(); + + // Убираем все лишние символы, кроме букв и пробелов + input = input.replace(/[^a-zA-Zа-яА-ЯёЁ ]/g, ''); + + // Преобразуем каждое слово, чтобы оно начиналось с заглавной буквы + let formattedInput = input.split(' ').map(word => { + if (word.length > 0) { + return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase(); + } + return ''; // Пустые слова не трогаем + }).join(' '); // Объединяем обратно с пробелами + + // Обновляем поле ввода с отформатированным текстом + $(this).val(formattedInput); + + // Проверяем количество слов + let words = formattedInput.trim().split(/\s+/); // Убираем лишние пробелы + if (words.length < 3 || words.some(word => word.length < 2)) { + $(this).parent().removeClass('success-field').addClass('errors-field'); // Подсветить поле + } else { + $(this).parent().removeClass('errors-field').addClass('success-field'); // Убрать подсветку + } + }); + + + + $('#tel').on('change', function() { + if($(this).val().length != 16){ + $(this).parent().removeClass('success-field').addClass('errors-field'); + } else{ + $(this).parent().removeClass('errors-field').addClass('success-field'); + } + }); + + + + // Проверка на дату рождения (не старше 80 лет) + $('#dob').on('change', function() { + const dob = new Date($(this).val()); + const currentDate = new Date(); + const age = currentDate.getFullYear() - dob.getFullYear(); + + // Проверка на возраст (не старше 80 лет) + if (age > 100 || (age === 100 && (currentDate.getMonth() < dob.getMonth() || (currentDate.getMonth() === dob.getMonth() && currentDate.getDate() < dob.getDate())))) { + // Если возраст больше 80 лет, подсвечиваем ячейку как ошибку + $(this).parent().removeClass('success-field').addClass('errors-field'); + } else { + // Если возраст нормален, подсвечиваем ячейку как успешную + $(this).parent().removeClass('errors-field').addClass('success-field'); + } + }); + + + $('#dob1').on('change', function() { + const dob1 = new Date($(this).val()); + const currentDate = new Date(); + const age = currentDate.getFullYear() - dob1.getFullYear(); + + // Проверка на возраст (не старше 80 лет) + if (age > 100 || (age === 100 && (currentDate.getMonth() < dob1.getMonth() || (currentDate.getMonth() === dob1.getMonth() && currentDate.getDate() < dob1.getDate())))) { + // Если возраст больше 80 лет, подсвечиваем ячейку как ошибку + $(this).parent().removeClass('success-field').addClass('errors-field'); + } else { + // Если возраст нормален, подсвечиваем ячейку как успешную + $(this).parent().removeClass('errors-field').addClass('success-field'); + } + }); + + + $('#dobnal').on('change', function() { + const dobnal = new Date($(this).val()); + const currentDate = new Date(); + const age = currentDate.getFullYear() - dobnal.getFullYear(); + + // Проверка на возраст (не старше 80 лет) + if (age > 100 || (age === 100 && (currentDate.getMonth() < dobnal.getMonth() || (currentDate.getMonth() === dobnal.getMonth() && currentDate.getDate() < dobnal.getDate())))) { + // Если возраст больше 80 лет, подсвечиваем ячейку как ошибку + $(this).parent().removeClass('success-field').addClass('errors-field'); + } else { + // Если возраст нормален, подсвечиваем ячейку как успешную + $(this).parent().removeClass('errors-field').addClass('success-field'); + } + }); + + + $('#postal_code').on('input', function() { + let input = $(this).val(); + // Удаляем все символы, кроме цифр + input = input.replace(/\D/g, ''); + // Форматируем ввод в "000-000" только при наличии 4 и более цифр + if (input.length > 3) { + input = input.replace(/(\d{3})(\d{0,3})/, '$1-$2'); + } + // Ограничиваем длину до "000-000" + if (input.length > 7) { + input = input.slice(0, 7); + } + // Обновляем поле ввода + $(this).val(input); + + // Проверка на минимальную длину (не менее 11 символов) + if (input.length < 7) { + // Если введено меньше цифр, показываем ошибку + $(this).parent().removeClass('success-field').addClass('errors-field'); + } else { + // Если введено достаточно цифр, показываем успех + $(this).parent().removeClass('errors-field').addClass('success-field'); + } + }); + + + $('#postal_code1').on('input', function() { + let input = $(this).val(); + // Удаляем все символы, кроме цифр + input = input.replace(/\D/g, ''); + // Форматируем ввод в "000-000" только при наличии 4 и более цифр + if (input.length > 3) { + input = input.replace(/(\d{3})(\d{0,3})/, '$1-$2'); + } + // Ограничиваем длину до "000-000" + if (input.length > 7) { + input = input.slice(0, 7); + } + // Обновляем поле ввода + $(this).val(input); + + // Проверка на минимальную длину (не менее 11 символов) + if (input.length < 7) { + // Если введено меньше цифр, показываем ошибку + $(this).parent().removeClass('success-field').addClass('errors-field'); + } else { + // Если введено достаточно цифр, показываем успех + $(this).parent().removeClass('errors-field').addClass('success-field'); + } + }); + + + $('#postal_codenal').on('input', function() { + let input = $(this).val(); + // Удаляем все символы, кроме цифр + input = input.replace(/\D/g, ''); + // Форматируем ввод в "000-000" только при наличии 4 и более цифр + if (input.length > 3) { + input = input.replace(/(\d{3})(\d{0,3})/, '$1-$2'); + } + // Ограничиваем длину до "000-000" + if (input.length > 7) { + input = input.slice(0, 7); + } + // Обновляем поле ввода + $(this).val(input); + + // Проверка на минимальную длину (не менее 11 символов) + if (input.length < 7) { + // Если введено меньше цифр, показываем ошибку + $(this).parent().removeClass('success-field').addClass('errors-field'); + } else { + // Если введено достаточно цифр, показываем успех + $(this).parent().removeClass('errors-field').addClass('success-field'); + } + }); + + + + + $('#passport').on('input', function() { + let input = $(this).val(); + // Удаляем все символы, кроме цифр + input = input.replace(/\D/g, ''); + // Форматируем ввод в "000-000" только при наличии 4 и более цифр + if (input.length > 4) { + input = input.replace(/(\d{4})(\d{0,4})/, '$1 $2'); + } + // Ограничиваем длину до "000-000" + if (input.length > 11) { + input = input.slice(0, 11); + } + // Обновляем поле ввода + $(this).val(input); + + // Проверка на минимальную длину (не менее 11 символов) + if (input.length < 11) { + // Если введено меньше цифр, показываем ошибку + $(this).parent().removeClass('success-field').addClass('errors-field'); + } else { + // Если введено достаточно цифр, показываем успех + $(this).parent().removeClass('errors-field').addClass('success-field'); + } + }); + + $('#passport1').on('input', function() { + let input = $(this).val(); + // Удаляем все символы, кроме цифр + input = input.replace(/\D/g, ''); + // Форматируем ввод в "000-000" только при наличии 4 и более цифр + if (input.length > 4) { + input = input.replace(/(\d{4})(\d{0,4})/, '$1 $2'); + } + // Ограничиваем длину до "000-000" + if (input.length > 11) { + input = input.slice(0, 11); + } + // Обновляем поле ввода + $(this).val(input); + + // Проверка на минимальную длину (не менее 11 символов) + if (input.length < 11) { + // Если введено меньше цифр, показываем ошибку + $(this).parent().removeClass('success-field').addClass('errors-field'); + } else { + // Если введено достаточно цифр, показываем успех + $(this).parent().removeClass('errors-field').addClass('success-field'); + } + }); + + + $('#passportnal').on('input', function() { + let input = $(this).val(); + // Удаляем все символы, кроме цифр + input = input.replace(/\D/g, ''); + // Форматируем ввод в "000-000" только при наличии 4 и более цифр + if (input.length > 4) { + input = input.replace(/(\d{4})(\d{0,4})/, '$1 $2'); + } + // Ограничиваем длину до "000-000" + if (input.length > 11) { + input = input.slice(0, 11); + } + // Обновляем поле ввода + $(this).val(input); + + // Проверка на минимальную длину (не менее 11 символов) + if (input.length < 11) { + // Если введено меньше цифр, показываем ошибку + $(this).parent().removeClass('success-field').addClass('errors-field'); + } else { + // Если введено достаточно цифр, показываем успех + $(this).parent().removeClass('errors-field').addClass('success-field'); + } + }); + + $("#inn").attr('maxlength','12'); + $('#inn').on('input', function() { + let input = $(this).val(); + // Убираем все символы, кроме цифр + input = input.replace(/\D/g, ''); + // Ограничиваем длину до 12 символов + if (input.length > 12) { + input = input.slice(0, 12); + } + // Обновляем значение в поле ввода + $(this).val(input); + if (input.length < 12) { + // Если введено меньше цифр, показываем ошибку + $(this).parent().removeClass('success-field').addClass('errors-field'); + } else { + // Если введено достаточно цифр, показываем успех + $(this).parent().removeClass('errors-field').addClass('success-field'); + } + }); + + + + $("#inn1").attr('maxlength','12'); + $('#inn1').on('input', function() { + let input = $(this).val(); + // Убираем все символы, кроме цифр + input = input.replace(/\D/g, ''); + // Ограничиваем длину до 12 символов + if (input.length > 12) { + input = input.slice(0, 12); + } + // Обновляем значение в поле ввода + $(this).val(input); + if (input.length < 12) { + // Если введено меньше цифр, показываем ошибку + $(this).parent().removeClass('success-field').addClass('errors-field'); + } else { + // Если введено достаточно цифр, показываем успех + $(this).parent().removeClass('errors-field').addClass('success-field'); + } + }); + + + $("#innnal").attr('maxlength','12'); + $('#innnal').on('input', function() { + let input = $(this).val(); + // Убираем все символы, кроме цифр + input = input.replace(/\D/g, ''); + // Ограничиваем длину до 12 символов + if (input.length > 12) { + input = input.slice(0, 12); + } + // Обновляем значение в поле ввода + $(this).val(input); + if (input.length < 12) { + // Если введено меньше цифр, показываем ошибку + $(this).parent().removeClass('success-field').addClass('errors-field'); + } else { + // Если введено достаточно цифр, показываем успех + $(this).parent().removeClass('errors-field').addClass('success-field'); + } + }); + + + $('#passport_date').on('change', function() { + const dob = new Date($(this).val()); + const currentDate = new Date(); + const age = currentDate.getFullYear() - dob.getFullYear(); + + // Проверка на возраст (не старше 80 лет) + if (age > 100 || (age === 100 && (currentDate.getMonth() < dob.getMonth() || (currentDate.getMonth() === dob.getMonth() && currentDate.getDate() < dob.getDate())))) { + // Если возраст больше 80 лет, подсвечиваем ячейку как ошибку + $(this).parent().removeClass('success-field').addClass('errors-field'); + } else { + // Если возраст нормален, подсвечиваем ячейку как успешную + $(this).parent().removeClass('errors-field').addClass('success-field'); + } + }); + + + $('#passport_datenal').on('change', function() { + const dob = new Date($(this).val()); + const currentDate = new Date(); + const age = currentDate.getFullYear() - dob.getFullYear(); + + // Проверка на возраст (не старше 80 лет) + if (age > 100 || (age === 100 && (currentDate.getMonth() < dob.getMonth() || (currentDate.getMonth() === dob.getMonth() && currentDate.getDate() < dob.getDate())))) { + // Если возраст больше 80 лет, подсвечиваем ячейку как ошибку + $(this).parent().removeClass('success-field').addClass('errors-field'); + } else { + // Если возраст нормален, подсвечиваем ячейку как успешную + $(this).parent().removeClass('errors-field').addClass('success-field'); + } + }); + + + + $('#passport_date1').on('change', function() { + const dob = new Date($(this).val()); + const currentDate = new Date(); + const age = currentDate.getFullYear() - dob.getFullYear(); + + // Проверка на возраст (не старше 80 лет) + if (age > 100 || (age === 100 && (currentDate.getMonth() < dob.getMonth() || (currentDate.getMonth() === dob.getMonth() && currentDate.getDate() < dob.getDate())))) { + // Если возраст больше 80 лет, подсвечиваем ячейку как ошибку + $(this).parent().removeClass('success-field').addClass('errors-field'); + } else { + // Если возраст нормален, подсвечиваем ячейку как успешную + $(this).parent().removeClass('errors-field').addClass('success-field'); + } + }); + + + $("#kod").attr('maxlength','4'); + $('#kod').on('input', function() { + let input = $(this).val(); + // Удаляем все символы, кроме цифр + input = input.replace(/\D/g, ''); + // Обновляем поле ввода + $(this).val(input); + + // Проверка на минимальную длину (не менее 11 символов) + if (input.length < 4) { + // Если введено меньше цифр, показываем ошибку + $(this).parent().removeClass('success-field').addClass('errors-field'); + } else { + // Если введено достаточно цифр, показываем успех + $(this).parent().removeClass('errors-field').addClass('success-field'); + } + }); + +// function verification(){ +// $("#form_submit").children(".spinner-border").removeClass('d-none'); +// $("#form_submit").attr("disabled", true); +// message = {} + + + +// if(!(validate_length($('#fio').val(), 3))) +// { +// show_error('Введите ФИО', false); +// $("#form_submit").children(".spinner-border").addClass('d-none'); +// $("#form_submit").removeAttr("disabled"); +// return; +// } +// +// if(!(validate_length($('#tel').val(), 16))) +// { +// show_error('Введите Телефон', false); +// $("#form_submit").children(".spinner-border").addClass('d-none'); +// $("#form_submit").removeAttr("disabled"); +// return; +// } +// +// if ($('#dob').val().length !== 10 || new Date().getFullYear() - new Date($('#dob').val()).getFullYear() > 100) { +// show_error('Дата рождения должна быть корректной и возраст не более 80 лет', false); +// $("#form_submit").children(".spinner-border").addClass('d-none'); +// $("#form_submit").removeAttr("disabled"); +// return; +// } +// +// if ($('#dob').val().length !== 10 || new Date().getFullYear() < new Date($('#dob').val()).getFullYear()) { +// show_error('Проверьте дату ввода, вы указали дату больше чем сегодняшняя дата', false); +// $("#form_submit").children(".spinner-border").addClass('d-none'); +// $("#form_submit").removeAttr("disabled"); +// return; +// } + + + function verificationpacient(){ + $("#form_submit").children(".spinner-border").removeClass('d-none'); + $("#form_submit").attr("disabled", true); + + let message = {}; + $('.tg_input').each(function() { + message[$(this).attr("id")] = $(this).val(); + }); + + show_success("Ваши данные отправлены на проверку."); + + $.ajax({ + type: "POST", + url: "/request_patient2", + contentType: "application/json", // <-- Указываем JSON + data: JSON.stringify(message), // <-- Преобразуем объект в JSON + success: function(data) { + console.log(data); + if (data.success) { + $('.primary-field').hide(); + $('.verification').hide(); + $('.verificationpacient').show(); + $('#fio1').val(data.fio); + $('#fio1').prop('readonly', true); + + $('#dob1').val(data.js_formatted_birthdate); + $('#dob1').prop('readonly', true); + + + if (data.pct_doc_ind == 2) { + // Заполняем данные свидетельства + $('#svedetelstvo').val(data.pct_doc_ser + ' ' + data.pct_doc_nom); + $('#svedetelstvo_date').val(data.js_formatted_passport_date); + $('#svedetelstvo_issued_by').val(data.pct_doc_org_name); + } else if (data.pct_doc_ind == 1) { + // Заполняем данные паспорта + $('#passport1').val(data.pct_doc_ser + ' ' + data.pct_doc_nom); + $('#passport_date1').val(data.js_formatted_passport_date); + $('#postal_code1').val(data.pct_doc_org_kod); + + // Обрабатываем код подразделения + for(i in UFMS_list[data.pct_doc_org_kod]) + { + item = UFMS_list[data.pct_doc_org_kod][i]; + console.log(item.toLowerCase()) + console.log(data.pct_doc_org_name.toLowerCase()) + console.log(item.toLowerCase()==data.pct_doc_org_name.toLowerCase()) + if(item.toLowerCase()==data.pct_doc_org_name.toLowerCase()) + { + $('#passport_issued_by1').append(''); + } + else{ + $('#passport_issued_by1').append(''); + } + } + } + +// $('#passport1').val(data.pct_doc_ser + ' ' + data.pct_doc_nom); +// +// $('#passport_date1').val(data.js_formatted_passport_date); +// +// $('#postal_code1').val(data.pct_doc_org_kod); +// +// for(i in UFMS_list[data.pct_doc_org_kod]) +// { +// item = UFMS_list[data.pct_doc_org_kod][i]; +// console.log(item.toLowerCase()) +// console.log(data.pct_doc_org_name.toLowerCase()) +// console.log(item.toLowerCase()==data.pct_doc_org_name.toLowerCase()) +// if(item.toLowerCase()==data.pct_doc_org_name.toLowerCase()) +// { +// $('#passport_issued_by1').append(''); +// } +// else{ +// $('#passport_issued_by1').append(''); +// } +// } + + $('#inn1').val(data.pct_inn); + $('#taxpayer_status_zapros').val(data.taxpayer_status_zapros); + $('#email1').val(data.pct_email); + + +// $('#svedetelstvo').val(data.pct_doc_ser + ' ' + data.pct_doc_nom); +// $('#svedetelstvo_date').val(data.js_formatted_passport_date); +// $('#svedetelstvo_issued_by').val(data.pct_doc_org_name); + + $('#fional').val(data.plc_fio); + $('#dobnal').val(data.js_formatted_birthdate_plc); + $('#innnal').val(data.plc_inn); + $('#passportnal').val(data.plc_doc_ser + ' ' + data.plc_doc_nom); + $('#passport_datenal').val(data.js_formatted_passport_date_plc); + $('#postal_codenal').val(data.plc_doc_org_kod); + for(i in UFMS_list[data.plc_doc_org_kod]) + { + item = UFMS_list[data.plc_doc_org_kod][i]; + console.log(item.toLowerCase()) + console.log(data.plc_doc_org_kod.toLowerCase()) + console.log(item.toLowerCase()==data.plc_doc_org_kod.toLowerCase()) + if(item.toLowerCase()==data.plc_doc_org_kod.toLowerCase()) + { + $('#passport_issued_bynal').append(''); + } + else{ + $('#passport_issued_bynal').append(''); + } + } + + + + } else { + show_error(data.error); + } + $("#form_submit").children(".spinner-border").addClass('d-none'); + $("#form_submit").removeAttr("disabled"); + }, + error: function(jqXHR) { + show_error('Что-то пошло не так'); + $("#form_submit").children(".spinner-border").addClass('d-none'); + $("#form_submit").removeAttr("disabled"); + } + }); + } + + + + function verificationnalogoplat(){ + $("#form_submit").children(".spinner-border").removeClass('d-none'); + $("#form_submit").attr("disabled", true); + + let message = {}; + $('.tg_input').each(function() { + message[$(this).attr("id")] = $(this).val(); + }); + + show_success("Ваши данные отправлены на проверку."); + + $.ajax({ + type: "POST", + url: "/request_patient", + contentType: "application/json", // <-- Указываем JSON + data: JSON.stringify(message), // <-- Преобразуем объект в JSON + success: function(data) { + console.log(data); + if (data.success) { + $('.primary-field').hide(); + $('.verification').show(); + $('.verificationpacient').hide(); + + $('#fio').val(data.fio); + $('#fio').prop('readonly', true); + + $('#dob').val(data.js_formatted_birthdate); + $('#dob').prop('readonly', true); + + $('#passport').val(data.pct_doc_ser + ' ' + data.pct_doc_nom); + + $('#passport_date').val(data.formatted_passport_date); + + $('#postal_code').val(data.pct_doc_org_kod); + + for(i in UFMS_list[data.pct_doc_org_kod]) + { + item = UFMS_list[data.pct_doc_org_kod][i]; + console.log(item.toLowerCase()) + console.log(data.pct_doc_org_name.toLowerCase()) + console.log(item.toLowerCase()==data.pct_doc_org_name.toLowerCase()) + if(item.toLowerCase()==data.pct_doc_org_name.toLowerCase()) + { + $('#passport_issued_by').append(''); + } + else{ + $('#passport_issued_by').append(''); + } + } + + $('#inn').val(data.pct_inn); + + $('#email').val(data.pct_email); + + } else { + show_error(data.error); + } + $("#form_submit").children(".spinner-border").addClass('d-none'); + $("#form_submit").removeAttr("disabled"); + }, + error: function(jqXHR) { + show_error('Что-то пошло не так'); + $("#form_submit").children(".spinner-border").addClass('d-none'); + $("#form_submit").removeAttr("disabled"); + } + }); + } + + + $("#form_submit").click(function() { + let selectedValue = $("#taxpayer_status").val(); // Получаем выбранное значение + + if (selectedValue === "Я являюсь налогоплательщиком") { + verificationnalogoplat(); + } else { + console.log("Выбрано другое значение:", selectedValue); + verificationpacient(); + // Тут можно добавить вызов других функций, если нужно + } + }); + + $("#code_submit").click(function(){ + + $(this).children(".spinner-border").removeClass('d-none'); + $(this).attr("disabled", true); + message = {} + + + + if(!(validate_length($('#fio').val(), 3))) + { + show_error('Введите ФИО', false); + $(this).children(".spinner-border").addClass('d-none'); + $(this).removeAttr("disabled"); + return; + } + + if(!(validateEmail($('#email').val()))){ + show_error('Введите корректный Email', false); + $(this).children(".spinner-border").addClass('d-none'); + $(this).removeAttr("disabled"); + return; + } + + if ($('#dob').val().length !== 10 || new Date().getFullYear() - new Date($('#dob').val()).getFullYear() > 100) { + show_error('Дата рождения должна быть корректной и возраст не более 80 лет', false); + $(this).children(".spinner-border").addClass('d-none'); + $(this).removeAttr("disabled"); + return; + } + + if ($('#passport_date').val().length !== 10 || (new Date($('#passport_date').val()).getFullYear() - new Date($('#dob').val()).getFullYear()) < 13) { + show_error('Проверьте дату выдачи паспорта, паспорт РФ может быть выдан с 14 лет', false); + $(this).children(".spinner-border").addClass('d-none'); + $(this).removeAttr("disabled"); + return; + } + + if(!(validate_length($('#postal_code').val(), 7))) + { + show_error('Введите серию и номер паспорта', false); + $(this).children(".spinner-border").addClass('d-none'); + $(this).removeAttr("disabled"); + return; + } + + if(!(validate_length($('#passport').val(), 11))) + { + show_error('Введите код подразделения', false); + $(this).children(".spinner-border").addClass('d-none'); + $(this).removeAttr("disabled"); + return; + } + + if($('#passport_issued_by').val() == null){ + show_error("Выберите кем выдан паспорт"); + $(this).children(".spinner-border").addClass('d-none'); + $(this).removeAttr("disabled"); + return; + } + + if(!(validate_length($('#inn').val(), 12))) + { + show_error('Введите ИНН', false); + $(this).children(".spinner-border").addClass('d-none'); + $(this).removeAttr("disabled"); + return; + } + + // Добавление значений с чекбоксов (годы) + let selectedYears = []; + $("input[name='god_zapros']:checked").each(function() { + selectedYears.push($(this).val()); + }); + + if (selectedYears.length > 0) { + message['selected_years'] = selectedYears; + } + + $.each($('.tg_input'), function(e) { + message[$(this).prop("id")] = $(this).val(); + }); + + + $.ajax({ + type: "post", + url: "/sending_patient", + processData: false, // tell jQuery not to process the data + contentType: false, // tell jQuery not to set contentType + async: true, + data: JSON.stringify(message), + success: (data) => { + if(data.success==true){ + $('.primary-field').hide(); + $('.verification').hide(); + $('.success_window').show(); + } + else{ + show_error(data.error); + $(this).children(".spinner-border").addClass('d-none'); + $(this).removeAttr("disabled"); + } + }, + error:function (jqXHR, exception) { + $(this).children(".spinner-border").addClass('d-none'); + $(this).removeAttr("disabled"); + show_error('Что-то пошло не так', false) + } + }); + }); + + + + $("#code_submit2").click(function(){ + + $(this).children(".spinner-border").removeClass('d-none'); + $(this).attr("disabled", true); + message = {} + + + let selectedYears = []; + $("input[name='god_zapros2']:checked").each(function() { + selectedYears.push($(this).val()); + }); + if (selectedYears.length > 0) { + message['selected_years'] = selectedYears; + } + + $.each($('.tg_input'), function(e) { + message[$(this).prop("id")] = $(this).val(); + }); + + + $.each($('.tg_input'), function(e) { + message[$(this).prop("id")] = $(this).val(); + }); + + + $.ajax({ + type: "post", + url: "/sending_patient2", + processData: false, // tell jQuery not to process the data + contentType: false, // tell jQuery not to set contentType + async: true, + data: JSON.stringify(message), + success: (data) => { + if(data.success==true){ + $('.primary-field').hide(); + $('.verification').hide(); + $('.verificationpacient').hide(); + $('.success_window').show(); + } + else{ + show_error(data.error); + $(this).children(".spinner-border").addClass('d-none'); + $(this).removeAttr("disabled"); + } + }, + error:function (jqXHR, exception) { + $(this).children(".spinner-border").addClass('d-none'); + $(this).removeAttr("disabled"); + show_error('Что-то пошло не так', false) + } + }); + }); + + + + + + + + + +// $('.alert-placeholder').mouseenter(function(){ +// var popOverSettings = { +// placement: 'bottom', +// content: $(this).data('content'), +// trigger: 'hover', +// container: this, +// offset: '0' +// } +// $(this).popover(popOverSettings); +// $(this).popover('show'); +// $('.popover').addClass('alert-popover'); +// }); +// $('.alert-placeholder').mouseleave(function(){ +// $('.alert-popover').remove() +// }); + + + + let phoneStr = ''; + let formattedStr = ''; + let deleteMode = false; + const phoneInput = document.querySelector('#tel'); + const defaultFormat = '+7({0}{1}{2}){3}{4}{5}-{6}{7}-{8}{9}'; +// phoneInput.value = formatPhoneString(); + +// phoneInput.addEventListener('keydown', (e) => { +// if (e.key === 'Backspace') +// deleteMode = true; +// else +// deleteMode = false; +// }); +// +// phoneInput.addEventListener('input', (e) => { +// if (deleteMode) { +// phoneInput.value = phoneInput.value; +// phoneStr = parsePhoneString(phoneInput.value.replace("+7", "").replace("-", "")); +// } else { +// if (e.inputType == 'insertText' && !isNaN(parseInt(e.data))) { +// if (phoneStr.length <= 9) +// phoneStr += e.data; +// } +// phoneInput.value = formatPhoneString(); +// } +// }); + + function formatPhoneString() { + let strArr = phoneStr.split(''); + formattedStr = defaultFormat; + for (let i = 0; i < strArr.length; i++) { + formattedStr = formattedStr.replace(`{${i}}`, strArr[i]); + } + + if (formattedStr.indexOf('{') === -1) + { + return formattedStr; + } + else + { + return formattedStr.substring(0, formattedStr.indexOf('{')); + } + } + + function parsePhoneString(str) { + return str.replace(' ', '').replace('(', '').replace(')', '').replace('-', ''); + } +}); + +