Problem: - Form was empty because propertyName was not passed to iframe - JavaScript code checked for injected.propertyName but it was undefined - Only case (normalized) was passed, not the original propertyName Solution: - Added propertyName to caseJson object that gets embedded in HTML - Now JavaScript code can access both case and propertyName - This allows the form to properly display data from send_to_form_approve.draft Files: - frontend/src/components/form/generateConfirmationFormHTML.ts: Added propertyName to caseJson
103 lines
3.9 KiB
SQL
103 lines
3.9 KiB
SQL
-- Исправленный SQL для сохранения send_to_form_approve
|
||
-- ✅ ИСПРАВЛЕНО: Ищем запись и по ID, и по payload->>'claim_id', чтобы избежать дубликатов
|
||
-- Используется в n8n workflow для сохранения данных формы подтверждения
|
||
|
||
-- Параметры:
|
||
-- $json.meta.claim_id - UUID заявки (может быть как ID записи, так и claim_id из payload)
|
||
-- $json - полные данные для сохранения в send_to_form_approve.draft
|
||
|
||
WITH
|
||
-- ✅ ИСПРАВЛЕНО: Ищем запись и по ID, и по payload->>'claim_id'
|
||
claim_lookup AS (
|
||
SELECT
|
||
c.id,
|
||
c.payload
|
||
FROM {{ $('set').first()?.json?.prefix ?? '' }}claims c
|
||
WHERE c.id = '{{ $json.meta.claim_id }}'::uuid
|
||
OR c.payload->>'claim_id' = '{{ $json.meta.claim_id }}'::text
|
||
ORDER BY
|
||
CASE WHEN c.id = '{{ $json.meta.claim_id }}'::uuid THEN 1 ELSE 2 END,
|
||
c.updated_at DESC
|
||
LIMIT 1
|
||
),
|
||
|
||
base AS (
|
||
SELECT coalesce(c.payload, '{}'::jsonb) AS p
|
||
FROM claim_lookup c
|
||
),
|
||
|
||
entry AS (
|
||
SELECT jsonb_build_object(
|
||
'id', gen_random_uuid(),
|
||
'draft', '{{ JSON.stringify($json) }}'::jsonb,
|
||
'status', 'pending',
|
||
'created_at', to_jsonb(now()),
|
||
'created_by', 'miniapp'
|
||
) AS e
|
||
),
|
||
|
||
upd AS (
|
||
SELECT
|
||
jsonb_set(
|
||
jsonb_set(
|
||
p,
|
||
'{send_to_form_approve_history}',
|
||
coalesce((p->'send_to_form_approve_history')::jsonb, '[]'::jsonb) || e,
|
||
true
|
||
),
|
||
'{send_to_form_approve}',
|
||
e,
|
||
true
|
||
) AS new_payload
|
||
FROM base b CROSS JOIN entry
|
||
)
|
||
|
||
UPDATE {{ $('set').first()?.json?.prefix ?? '' }}claims c
|
||
SET payload = u.new_payload,
|
||
updated_at = now()
|
||
FROM upd u, claim_lookup cl
|
||
WHERE c.id = cl.id
|
||
RETURNING
|
||
c.id,
|
||
c.payload->'send_to_form_approve' AS send_to_form_approve,
|
||
jsonb_array_length(c.payload->'send_to_form_approve_history') AS history_length;
|
||
|
||
/*
|
||
============================================================================
|
||
ИСПРАВЛЕНИЯ (2025-11-24):
|
||
============================================================================
|
||
|
||
ПРОБЛЕМА: Запрос искал запись только по ID:
|
||
WHERE id = '{{ $json.meta.claim_id }}'::uuid
|
||
Если запись была создана с другим ID, но с тем же claim_id в payload,
|
||
она не находилась и send_to_form_approve не сохранялся.
|
||
|
||
РЕШЕНИЕ:
|
||
1. Добавлен CTE claim_lookup - ищет запись и по ID, и по payload->>'claim_id':
|
||
WHERE c.id = claim_id::uuid OR c.payload->>'claim_id' = claim_id::text
|
||
2. base теперь использует claim_lookup вместо прямого запроса
|
||
3. UPDATE использует claim_lookup.id вместо прямого claim_id::uuid
|
||
4. Это гарантирует, что всегда используется правильная запись
|
||
|
||
ИЗМЕНЕНИЯ:
|
||
- Добавлен claim_lookup CTE для поиска записи
|
||
- base теперь читает из claim_lookup вместо прямого запроса
|
||
- UPDATE использует claim_lookup.id вместо claim_id::uuid
|
||
|
||
============================================================================
|
||
ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ:
|
||
============================================================================
|
||
|
||
1. С claim_id как UUID (ID записи):
|
||
$json.meta.claim_id = '0eb051ec-23a6-4e06-8b98-f02d20d35f68'
|
||
→ Найдет запись по ID
|
||
|
||
2. С claim_id как UUID из payload:
|
||
$json.meta.claim_id = '0eb051ec-23a6-4e06-8b98-f02d20d35f68'
|
||
→ Если ID не совпадает, найдет по payload->>'claim_id'
|
||
|
||
============================================================================
|
||
*/
|
||
|
||
|