FNCUST_GET_JSON_INVOICE_DATA: Erster Release canidate

This commit is contained in:
2026-02-26 14:56:58 +01:00
parent 1f4d919a0f
commit e670cefb0e

View File

@@ -8,7 +8,7 @@ GO
-- Reads invoice data from relational tables and returns a normalized
-- JSON response matching the CreateInvoice_Request structure.
--
-- Parameter: @DocumentID INT = NULL (NULL = alle Dokumente)
-- Parameter: @pDOCUMENT_ID INT = NULL (NULL = alle Dokumente)
-- Returns: TABLE (success BIT, message NVARCHAR(MAX), data NVARCHAR(MAX))
-- Usage: SELECT * FROM dbo.FNCUST_GET_JSON_INVOICE_DATA(NULL)
-- SELECT * FROM dbo.FNCUST_GET_JSON_INVOICE_DATA(42)
@@ -20,40 +20,43 @@ GO
-- =================================================================
-- Creation Date / Author: 26.02.2026 / MK
-- Version Date / Editor: 26.02.2026 / MK
-- Version Number: 3.0.0.0
-- Version Number: 3.2.0.0
-- =================================================================
-- History:
-- 26.02.2026 / MK - Initial version based on JSON invoice import
-- 26.02.2026 / MK - Style harmonized to PRDEX convention
-- 26.02.2026 / MK - Umstellung auf Export-Prozedur (Tabellen → JSON)
-- 26.02.2026 / MK - JSON-Ausgabe: camelCase, INCLUDE_NULL_VALUES, CreateInvoice_Request-Vorlage
-- 26.02.2026 / MK - Umbau zu Inline-Tabellenwertfunktion (ITVF)
-- 26.02.2026 / MK - Converted to export function (tables to JSON)
-- 26.02.2026 / MK - JSON output: camelCase, INCLUDE_NULL_VALUES, CreateInvoice_Request template
-- 26.02.2026 / MK - Converted to inline table-valued function (ITVF)
-- 26.02.2026 / MK - Style, formatting, naming convention aligned with PRDEX_CHECK_SYSTEM
-- 26.02.2026 / MK - Added SCHEMABINDING, ORDER BY in subqueries, simplified validation
CREATE OR ALTER FUNCTION [dbo].[FNCUST_GET_JSON_INVOICE_DATA](
@DocumentID INT = NULL
@pDOCUMENT_ID INT = NULL
)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
(
SELECT
--==== success ====--
--=========================================================-- success --=========================================================--
success = CAST(IIF(v.status = 0, 1, 0) AS BIT)
--==== message ====--
--=========================================================-- message --=========================================================--
, message = CAST(
CASE v.status
WHEN 1 THEN N'Kein PurchaseDocument mit DocumentID = ' + CAST(@DocumentID AS NVARCHAR(20)) + N' gefunden.'
WHEN 1 THEN N'Kein PurchaseDocument mit DocumentID = ' + CAST(@pDOCUMENT_ID AS NVARCHAR(20)) + N' gefunden.'
WHEN 2 THEN N'Keine PurchaseDocuments vorhanden.'
ELSE N'Daten erfolgreich verarbeitet.'
END
AS NVARCHAR(MAX))
--==== data ====--
--===========================================================-- data --==========================================================--
, data = CAST(
CASE WHEN v.status > 0 THEN NULL
ELSE (
--===============================================-- Build output JSON result --===============================================--
--=================================================-- Build output JSON result --================================================--
SELECT
JSON_QUERY(
COALESCE(
@@ -125,6 +128,7 @@ RETURN
, [dimensionValueCode] = d.DimensionValueCode
FROM dbo.DimSetEntry d
WHERE d.LineID = pl.LineID
ORDER BY d.DimSetEntryID
FOR JSON PATH, INCLUDE_NULL_VALUES
)
, '[]'
@@ -147,6 +151,7 @@ RETURN
, [appliesToDocLineAmount] = ia.AppliesToDocLineAmount
FROM dbo.ItemChargeAssignment ia
WHERE ia.LineID = pl.LineID
ORDER BY ia.ItemChargeAssignmentID
FOR JSON PATH, INCLUDE_NULL_VALUES
)
, '[]'
@@ -154,13 +159,14 @@ RETURN
)
FROM dbo.PurchaseLine pl
WHERE pl.DocumentID = pd.DocumentID
ORDER BY pl.LineID
FOR JSON PATH, INCLUDE_NULL_VALUES
)
, '[]'
)
)
FROM dbo.PurchaseDocument pd
WHERE @DocumentID IS NULL OR pd.DocumentID = @DocumentID
WHERE @pDOCUMENT_ID IS NULL OR pd.DocumentID = @pDOCUMENT_ID
ORDER BY pd.DocumentID
FOR JSON PATH, INCLUDE_NULL_VALUES
)
@@ -175,14 +181,16 @@ RETURN
FROM (VALUES (1)) AS src(x)
CROSS APPLY (
--======================================================-- Validate input --=====================================================--
SELECT status = CASE
WHEN @DocumentID IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM dbo.PurchaseDocument WHERE DocumentID = @DocumentID)
WHEN @pDOCUMENT_ID IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM dbo.PurchaseDocument WHERE DocumentID = @pDOCUMENT_ID)
THEN 1
WHEN NOT EXISTS (SELECT 1 FROM dbo.PurchaseDocument WHERE @DocumentID IS NULL OR DocumentID = @DocumentID)
WHEN NOT EXISTS (SELECT 1 FROM dbo.PurchaseDocument)
THEN 2
ELSE 0
END
-----------------------------------------------------------------------------------------------------------------------------------
) AS v
);
GO