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