mirror of
https://origin.cursor.com/mrdevmx/panels.git
synced 2026-10-09 13:23:17 +00:00
La API pedía el PDF con { id } y fn_project_document_get leía
payload->>'doc_id', así que el id llegaba vacío aunque el archivo
ya estuviera en el bucket. Mismo desajuste en empresa y trabajador.
Co-authored-by: alberto.martinez <alberto.martinez@mrdev.mx>
99 lines
4.3 KiB
PL/PgSQL
99 lines
4.3 KiB
PL/PgSQL
--liquibase formatted sql
|
|
-- PANELS · core · fn_*_document_get acepta doc_id o id
|
|
-- La API HTTP enviaba { id } y las RPC leían payload->>'doc_id', dejando el id vacío.
|
|
|
|
--changeset panel:core-032a-fn-project-document-get splitStatements:false
|
|
CREATE OR REPLACE FUNCTION core.fn_project_document_get(payload jsonb)
|
|
RETURNS jsonb
|
|
LANGUAGE plpgsql
|
|
SECURITY INVOKER
|
|
SET search_path = core
|
|
AS $$
|
|
DECLARE
|
|
v_project_id bigint := NULLIF(payload->>'project_id', '')::bigint;
|
|
v_doc_id bigint := NULLIF(COALESCE(payload->>'doc_id', payload->>'id'), '')::bigint;
|
|
v_doc jsonb;
|
|
BEGIN
|
|
IF v_project_id IS NULL OR v_doc_id IS NULL THEN
|
|
RETURN core.rpc_err('VALIDATION',
|
|
'fn_project_document_get: project_id y doc_id son obligatorios',
|
|
jsonb_build_object('fn', 'fn_project_document_get', 'project_id', v_project_id, 'doc_id', v_doc_id));
|
|
END IF;
|
|
SELECT to_jsonb(d) INTO v_doc FROM project_documents d
|
|
WHERE d.id = v_doc_id AND d.project_id = v_project_id;
|
|
IF v_doc IS NULL THEN
|
|
RETURN core.rpc_err('NOT_FOUND',
|
|
format('fn_project_document_get: documento id=%s no encontrado en proyecto %s', v_doc_id, v_project_id),
|
|
jsonb_build_object('fn', 'fn_project_document_get', 'doc_id', v_doc_id, 'project_id', v_project_id));
|
|
END IF;
|
|
RETURN core.rpc_ok(jsonb_build_object('document', v_doc),
|
|
format('Documento id=%s del proyecto %s obtenido', v_doc_id, v_project_id),
|
|
jsonb_build_object('fn', 'fn_project_document_get', 'doc_id', v_doc_id));
|
|
EXCEPTION WHEN OTHERS THEN
|
|
RETURN core.rpc_from_exception('fn_project_document_get', SQLSTATE, SQLERRM);
|
|
END;
|
|
$$;
|
|
|
|
--changeset panel:core-032b-fn-company-document-get splitStatements:false
|
|
CREATE OR REPLACE FUNCTION core.fn_company_document_get(payload jsonb)
|
|
RETURNS jsonb
|
|
LANGUAGE plpgsql
|
|
SECURITY INVOKER
|
|
SET search_path = core
|
|
AS $$
|
|
DECLARE
|
|
v_company_id bigint := NULLIF(payload->>'company_id', '')::bigint;
|
|
v_doc_id bigint := NULLIF(COALESCE(payload->>'doc_id', payload->>'id'), '')::bigint;
|
|
v_doc jsonb;
|
|
BEGIN
|
|
IF v_company_id IS NULL OR v_doc_id IS NULL THEN
|
|
RETURN core.rpc_err('VALIDATION',
|
|
'fn_company_document_get: company_id y doc_id son obligatorios',
|
|
jsonb_build_object('fn', 'fn_company_document_get', 'company_id', v_company_id, 'doc_id', v_doc_id));
|
|
END IF;
|
|
SELECT to_jsonb(d) INTO v_doc FROM company_documents d
|
|
WHERE d.id = v_doc_id AND d.company_id = v_company_id;
|
|
IF v_doc IS NULL THEN
|
|
RETURN core.rpc_err('NOT_FOUND',
|
|
format('fn_company_document_get: documento id=%s no encontrado en empresa %s', v_doc_id, v_company_id),
|
|
jsonb_build_object('fn', 'fn_company_document_get', 'doc_id', v_doc_id, 'company_id', v_company_id));
|
|
END IF;
|
|
RETURN core.rpc_ok(jsonb_build_object('document', v_doc),
|
|
format('Documento id=%s de la empresa %s obtenido', v_doc_id, v_company_id),
|
|
jsonb_build_object('fn', 'fn_company_document_get', 'doc_id', v_doc_id));
|
|
EXCEPTION WHEN OTHERS THEN
|
|
RETURN core.rpc_from_exception('fn_company_document_get', SQLSTATE, SQLERRM);
|
|
END;
|
|
$$;
|
|
|
|
--changeset panel:core-032c-fn-worker-document-get splitStatements:false
|
|
CREATE OR REPLACE FUNCTION core.fn_worker_document_get(payload jsonb)
|
|
RETURNS jsonb
|
|
LANGUAGE plpgsql
|
|
SECURITY INVOKER
|
|
SET search_path = core
|
|
AS $$
|
|
DECLARE
|
|
v_worker_id bigint := NULLIF(payload->>'worker_id', '')::bigint;
|
|
v_doc_id bigint := NULLIF(COALESCE(payload->>'doc_id', payload->>'id'), '')::bigint;
|
|
v_doc jsonb;
|
|
BEGIN
|
|
IF v_worker_id IS NULL OR v_doc_id IS NULL THEN
|
|
RETURN core.rpc_err('VALIDATION',
|
|
'fn_worker_document_get: worker_id y doc_id son obligatorios',
|
|
jsonb_build_object('fn', 'fn_worker_document_get', 'worker_id', v_worker_id, 'doc_id', v_doc_id));
|
|
END IF;
|
|
SELECT to_jsonb(d) INTO v_doc FROM documents d
|
|
WHERE d.id = v_doc_id AND d.worker_id = v_worker_id;
|
|
IF v_doc IS NULL THEN
|
|
RETURN core.rpc_err('NOT_FOUND',
|
|
format('fn_worker_document_get: documento id=%s no encontrado para trabajador %s', v_doc_id, v_worker_id),
|
|
jsonb_build_object('fn', 'fn_worker_document_get', 'doc_id', v_doc_id, 'worker_id', v_worker_id));
|
|
END IF;
|
|
RETURN core.rpc_ok(jsonb_build_object('document', v_doc),
|
|
format('Documento id=%s del trabajador %s obtenido', v_doc_id, v_worker_id),
|
|
jsonb_build_object('fn', 'fn_worker_document_get', 'doc_id', v_doc_id));
|
|
EXCEPTION WHEN OTHERS THEN
|
|
RETURN core.rpc_from_exception('fn_worker_document_get', SQLSTATE, SQLERRM);
|
|
END;
|
|
$$;
|