From 12e0834a18ddb92ab65b1ee26b2bb7d5e584f10d Mon Sep 17 00:00:00 2001 From: KammM Date: Wed, 25 Feb 2026 16:56:48 +0100 Subject: [PATCH] FNDD_GET_INVOICE_POS_TAX_VALUES: First commit --- .../[FNDD_GET_INVOICE_POS_TAX_VALUES].sql | 138 ++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 current/[DD_ECM]-Database/[FNDD_GET_INVOICE_POS_TAX_VALUES]/[FNDD_GET_INVOICE_POS_TAX_VALUES].sql diff --git a/current/[DD_ECM]-Database/[FNDD_GET_INVOICE_POS_TAX_VALUES]/[FNDD_GET_INVOICE_POS_TAX_VALUES].sql b/current/[DD_ECM]-Database/[FNDD_GET_INVOICE_POS_TAX_VALUES]/[FNDD_GET_INVOICE_POS_TAX_VALUES].sql new file mode 100644 index 0000000..ab9dbb4 --- /dev/null +++ b/current/[DD_ECM]-Database/[FNDD_GET_INVOICE_POS_TAX_VALUES]/[FNDD_GET_INVOICE_POS_TAX_VALUES].sql @@ -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')