FNDD_GET_INVOICE_POS_TAX_VALUES: First commit
This commit is contained in:
@@ -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')
|
||||||
Reference in New Issue
Block a user