137 lines
4.8 KiB
Python
137 lines
4.8 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
"""
|
||
|
|
Скрипт для исправления черновика bddb6815-8e17-4d54-a721-5e94382942c7
|
||
|
|
Добавляет documents_required и исправляет статус
|
||
|
|
"""
|
||
|
|
import asyncio
|
||
|
|
import asyncpg
|
||
|
|
import json
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
# Параметры подключения к БД (из config.py)
|
||
|
|
POSTGRES_HOST = "147.45.189.234"
|
||
|
|
POSTGRES_PORT = 5432
|
||
|
|
POSTGRES_DB = "default_db"
|
||
|
|
POSTGRES_USER = "gen_user"
|
||
|
|
POSTGRES_PASSWORD = "2~~9_^kVsU?2\\S"
|
||
|
|
|
||
|
|
CLAIM_ID = "bddb6815-8e17-4d54-a721-5e94382942c7"
|
||
|
|
|
||
|
|
DOCUMENTS_REQUIRED = [
|
||
|
|
{
|
||
|
|
"id": "contract",
|
||
|
|
"name": "Договор или заказ",
|
||
|
|
"hints": "Фото или скан подписанного договора или квитанции",
|
||
|
|
"accept": ["pdf", "jpg", "png"],
|
||
|
|
"priority": 1,
|
||
|
|
"required": True
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "payment",
|
||
|
|
"name": "Чек или подтверждение оплаты",
|
||
|
|
"hints": "Копия кассового чека, онлайн-платежа или квитанции",
|
||
|
|
"accept": ["pdf", "jpg", "png"],
|
||
|
|
"priority": 1,
|
||
|
|
"required": True
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "correspondence",
|
||
|
|
"name": "Переписка",
|
||
|
|
"hints": "Скриншоты сообщений, писем, жалоб",
|
||
|
|
"accept": ["pdf", "jpg", "png"],
|
||
|
|
"priority": 2,
|
||
|
|
"required": False
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "evidence_photo",
|
||
|
|
"name": "Фото доказательства",
|
||
|
|
"hints": "Фото дефектов товара, видео процесса ремонта или передачи",
|
||
|
|
"accept": ["jpg", "png", "pdf"],
|
||
|
|
"priority": 2,
|
||
|
|
"required": False
|
||
|
|
}
|
||
|
|
]
|
||
|
|
|
||
|
|
|
||
|
|
async def fix_draft():
|
||
|
|
"""Исправляет черновик: добавляет documents_required и обновляет статус"""
|
||
|
|
conn = await asyncpg.connect(
|
||
|
|
host=POSTGRES_HOST,
|
||
|
|
port=POSTGRES_PORT,
|
||
|
|
database=POSTGRES_DB,
|
||
|
|
user=POSTGRES_USER,
|
||
|
|
password=POSTGRES_PASSWORD
|
||
|
|
)
|
||
|
|
|
||
|
|
try:
|
||
|
|
# Получаем текущее состояние черновика
|
||
|
|
row = await conn.fetchrow("""
|
||
|
|
SELECT id, status_code, payload
|
||
|
|
FROM clpr_claims
|
||
|
|
WHERE id::text = $1 OR payload->>'claim_id' = $1
|
||
|
|
LIMIT 1
|
||
|
|
""", CLAIM_ID)
|
||
|
|
|
||
|
|
if not row:
|
||
|
|
print(f"❌ Черновик {CLAIM_ID} не найден!")
|
||
|
|
return
|
||
|
|
|
||
|
|
payload = row['payload'] if isinstance(row['payload'], dict) else json.loads(row['payload'])
|
||
|
|
current_status = row['status_code']
|
||
|
|
documents_uploaded = payload.get('documents_uploaded', [])
|
||
|
|
uploaded_count = len(documents_uploaded) if isinstance(documents_uploaded, list) else 0
|
||
|
|
|
||
|
|
print(f"📋 Текущее состояние черновика:")
|
||
|
|
print(f" - status_code: {current_status}")
|
||
|
|
print(f" - documents_required: {len(payload.get('documents_required', []))} шт.")
|
||
|
|
print(f" - documents_uploaded: {uploaded_count} шт.")
|
||
|
|
|
||
|
|
# Определяем новый статус
|
||
|
|
if uploaded_count > 0:
|
||
|
|
if uploaded_count >= len(DOCUMENTS_REQUIRED):
|
||
|
|
new_status = 'draft_docs_complete'
|
||
|
|
else:
|
||
|
|
new_status = 'draft_docs_progress'
|
||
|
|
else:
|
||
|
|
new_status = 'draft_new'
|
||
|
|
|
||
|
|
# Обновляем payload
|
||
|
|
payload['documents_required'] = DOCUMENTS_REQUIRED
|
||
|
|
|
||
|
|
# Обновляем черновик
|
||
|
|
await conn.execute("""
|
||
|
|
UPDATE clpr_claims
|
||
|
|
SET
|
||
|
|
status_code = $1,
|
||
|
|
payload = $2::jsonb,
|
||
|
|
updated_at = now()
|
||
|
|
WHERE id::text = $3 OR payload->>'claim_id' = $3
|
||
|
|
""", new_status, json.dumps(payload, ensure_ascii=False), CLAIM_ID)
|
||
|
|
|
||
|
|
print(f"\n✅ Черновик исправлен!")
|
||
|
|
print(f" - Новый status_code: {new_status}")
|
||
|
|
print(f" - documents_required: {len(DOCUMENTS_REQUIRED)} документов добавлено")
|
||
|
|
|
||
|
|
# Проверяем результат
|
||
|
|
row_after = await conn.fetchrow("""
|
||
|
|
SELECT
|
||
|
|
id::text,
|
||
|
|
status_code,
|
||
|
|
jsonb_array_length(COALESCE(payload->'documents_required', '[]'::jsonb)) as docs_count
|
||
|
|
FROM clpr_claims
|
||
|
|
WHERE id::text = $1 OR payload->>'claim_id' = $1
|
||
|
|
LIMIT 1
|
||
|
|
""", CLAIM_ID)
|
||
|
|
|
||
|
|
print(f"\n📊 Результат:")
|
||
|
|
print(f" - status_code: {row_after['status_code']}")
|
||
|
|
print(f" - documents_required count: {row_after['docs_count']}")
|
||
|
|
|
||
|
|
finally:
|
||
|
|
await conn.close()
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
asyncio.run(fix_draft())
|
||
|
|
|