8
0

FNDD_GET_INVOICE_POS_TAX_VALUES: First commit

This commit is contained in:
2026-02-25 16:56:48 +01:00
parent f295c40876
commit 12e0834a18

View File

@@ -0,0 +1,138 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- [FNDD_GET_INVOICE_POS_TAX_VALUES]
-- =================================================================
-- Die Funktion liefert den Steuerbeträge für einen Beleg (Positionen)
--
-- =================================================================
-- Copyright (c) 2025 by Digital Data GmbH
--
-- Digital Data GmbH • Ludwig-Rinn-Strasse 16 • D-35452 Heuchelheim
-- Tel.: 0641/202360 • E-Mail: info-flow@digitaldata.works
-- =================================================================
-- Creation Date / Author: 04.11.2025 / MK
-- Version Date / Editor: 08.12.2025 / MK
-- Version Number: 1.1.0.0
-- =================================================================
-- History:
-- 04.11.2025 / MK - Initial
-- 08.12.2025 / MK - Improved type convertion and empty String handling
CREATE OR ALTER FUNCTION [dbo].[FNDD_GET_INVOICE_POS_TAX_VALUES] (
@pREFERENCE_GUID NVARCHAR(900) -- @EmailMessageID
)
RETURNS
@vTB TABLE ([GUID] [BIGINT] IDENTITY(1,1) NOT NULL,
[REFERENCE_GUID] [NVARCHAR](900) NOT NULL,
[INVOICE_TAXPOS_BASEAMOUNT] [DECIMAL](30,2) NOT NULL,
[INVOICE_TAXPOS_RATE] [DECIMAL](5,0) NOT NULL,
[INVOICE_TAXPOS_AMOUNT] [DECIMAL](30,2) NOT NULL)
AS
BEGIN
-- declare new vars because of parameter sniffing
DECLARE @REFERENCE_GUID [NVARCHAR](900) = @pREFERENCE_GUID;
-- declare runtime vars
DECLARE @GROUP_COUNTER [SMALLINT] = 0,
@GROUP_COUNTER_MIN [SMALLINT] = 0,
@GROUP_COUNTER_MAX [SMALLINT] = 0,
@INVOICE_TAXPOS_BASEAMOUNT [DECIMAL](30,2) = 0.00,
@INVOICE_TAXPOS_RATE [DECIMAL](5,0) = 0,
@INVOICE_TAXPOS_AMOUNT [DECIMAL](30,2) = 0.00;
--==============================================-- Get range of pos lines --==============================================--
SELECT @GROUP_COUNTER_MIN = MIN(ISNULL([GROUP_COUNTER],0)),
@GROUP_COUNTER_MAX = MAX(ISNULL([GROUP_COUNTER],0))
FROM [TBEDMI_ITEM_VALUE] (NOLOCK)
WHERE [REFERENCE_GUID] = @REFERENCE_GUID and [GROUP_COUNTER] > 0 AND [SPEC_NAME] IN ('INVOICE_TAXPOS_AMOUNT','INVOICE_TAXPOS_BASEAMOUNT','INVOICE_TAXPOS_RATE');
-----------------------------------------------------------------------------------------------------------------------------
--==============================================-- Check for valid range --================================================--
IF (@GROUP_COUNTER_MIN > 0) AND (@GROUP_COUNTER_MAX > 0) BEGIN
--==========================================-- Loop for every group counter --=============================================--
DECLARE CURSOR_INVOICE_POS_TAX_VALUES CURSOR
LOCAL FAST_FORWARD FOR
SELECT DISTINCT [GROUP_COUNTER] as 'GROUP_COUNTER'
FROM [TBEDMI_ITEM_VALUE] (NOLOCK)
WHERE [REFERENCE_GUID] = @REFERENCE_GUID AND ([GROUP_COUNTER] >= @GROUP_COUNTER_MIN AND [GROUP_COUNTER] <= @GROUP_COUNTER_MAX)
AND [SPEC_NAME] = 'INVOICE_TAXPOS_RATE'
ORDER BY [GROUP_COUNTER] ASC;
OPEN CURSOR_INVOICE_POS_TAX_VALUES;
FETCH NEXT FROM CURSOR_INVOICE_POS_TAX_VALUES INTO @GROUP_COUNTER;
WHILE @@FETCH_STATUS = 0
BEGIN
--====================================================-- Nettobetrag --====================================================--
SET @INVOICE_TAXPOS_BASEAMOUNT = (SELECT CASE WHEN LEN(LTRIM(RTRIM([ITEM_VALUE]))) = 0
THEN 0.0
ELSE CAST([ITEM_VALUE] AS DECIMAL(30,2))
END as 'ITEM_VALUE'
FROM [TBEDMI_ITEM_VALUE] (NOLOCK)
WHERE [REFERENCE_GUID] = @REFERENCE_GUID
AND [GROUP_COUNTER] = @GROUP_COUNTER
AND [SPEC_NAME] = 'INVOICE_TAXPOS_BASEAMOUNT');
SET @INVOICE_TAXPOS_BASEAMOUNT = ISNULL(@INVOICE_TAXPOS_BASEAMOUNT,0.0);
-----------------------------------------------------------------------------------------------------------------------------
--====================================================-- Steuersatz --=====================================================--
SET @INVOICE_TAXPOS_RATE = (SELECT CASE WHEN LEN(LTRIM(RTRIM([ITEM_VALUE]))) = 0
THEN 0.0
ELSE CAST([ITEM_VALUE] AS DECIMAL(30,2))
END as 'ITEM_VALUE'
FROM [TBEDMI_ITEM_VALUE] (NOLOCK)
WHERE [REFERENCE_GUID] = @REFERENCE_GUID
AND [GROUP_COUNTER] = @GROUP_COUNTER
AND [SPEC_NAME] = 'INVOICE_TAXPOS_RATE');
SET @INVOICE_TAXPOS_RATE = ISNULL(@INVOICE_TAXPOS_RATE,0.0);
-----------------------------------------------------------------------------------------------------------------------------
--====================================================-- Steuerbetrag --===================================================--
SET @INVOICE_TAXPOS_AMOUNT = (SELECT CASE WHEN LEN(LTRIM(RTRIM([ITEM_VALUE]))) = 0
THEN 0.0
ELSE CAST([ITEM_VALUE] AS DECIMAL(30,2))
END as 'ITEM_VALUE'
FROM [TBEDMI_ITEM_VALUE] (NOLOCK)
WHERE [REFERENCE_GUID] = @REFERENCE_GUID
AND [GROUP_COUNTER] = @GROUP_COUNTER
AND [SPEC_NAME] = 'INVOICE_TAXPOS_AMOUNT');
SET @INVOICE_TAXPOS_AMOUNT = ISNULL(@INVOICE_TAXPOS_AMOUNT,0.0);
-----------------------------------------------------------------------------------------------------------------------------
--====================================================-- Set result --=====================================================--
IF NOT EXISTS (SELECT * FROM @vTB WHERE [INVOICE_TAXPOS_RATE] = @INVOICE_TAXPOS_RATE) BEGIN
INSERT INTO @vTB([REFERENCE_GUID],[INVOICE_TAXPOS_BASEAMOUNT],[INVOICE_TAXPOS_RATE],[INVOICE_TAXPOS_AMOUNT])
VALUES (@REFERENCE_GUID, @INVOICE_TAXPOS_BASEAMOUNT, @INVOICE_TAXPOS_RATE, @INVOICE_TAXPOS_AMOUNT);
END; ELSE BEGIN
UPDATE @vTB
SET [INVOICE_TAXPOS_BASEAMOUNT] = [INVOICE_TAXPOS_BASEAMOUNT] + @INVOICE_TAXPOS_BASEAMOUNT,
[INVOICE_TAXPOS_AMOUNT] = [INVOICE_TAXPOS_AMOUNT] + @INVOICE_TAXPOS_AMOUNT
WHERE [INVOICE_TAXPOS_RATE] = @INVOICE_TAXPOS_RATE;
END;
-----------------------------------------------------------------------------------------------------------------------------
FETCH NEXT FROM CURSOR_INVOICE_POS_TAX_VALUES INTO @GROUP_COUNTER;
END
CLOSE CURSOR_INVOICE_POS_TAX_VALUES;
DEALLOCATE CURSOR_INVOICE_POS_TAX_VALUES;
-----------------------------------------------------------------------------------------------------------------------------
END;
-----------------------------------------------------------------------------------------------------------------------------
RETURN;
END
-- Test
-- select * from [FNDD_GET_INVOICE_POS_TAX_VALUES]('D3C672FBF2D80BFB2014BBA6E7D3D18B')
-- select * from [FNDD_GET_INVOICE_POS_TAX_VALUES]('B8A1C762E007E35290D21AF624CAEC35')