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