8
0
2024-01-24 16:42:38 +01:00

149 lines
4.6 KiB
Transact-SQL

/****** Object: UserDefinedFunction [dbo].[FNDD_GET_ALL_MACROSUBARTICLE] Script Date: 08.06.2021 13:03:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =================================================================
-- FNDD_GET_ALL_MACROSUBARTICLE
-- =================================================================
-- Die Funktion läd für einen Makro-Artikel alle im VK-Makro enthaltenen
-- Makro-Sub-Artikel inklusive Menge und dem Bundlepreis.
--
-- Die Funktion soll aus einem Web-Shop aufgerufen werden können.
--
-- Returns: Tabelle mit den Spalten
-- LaufendeNummer INT Wert aus t326.c009 Expl: 1
-- MakroSubArtikelnummer VARCHAR(30) Wert aus t326.c006 Expl: 'GT0674001'
-- MakroMenge INT Berechneter Wert aus Aktion, Wert und Expl: 1
-- Bestellter Menge
-- MakroPreis FLOAT Der Bundlepreis für diesen Sub-Artikel Expl: 123.45
--
-- Hinweise:
-- - Wenn der Preis = -999.00 ist, dann wurde kein Bundlepreis gefunden
-- - Wenn die Menge = 0 ist, dann konnte keine menge berchnet werden, z.B. weil es sich um einen Textbaustein handelt!
--
-- =================================================================
-- Copyright (c) 2021 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: 26.05.2021 / MP
-- Version Date / Editor: 27.05.2021 / MP
-- Version Number: 1.0.0.1
-- =================================================================
-- History:
-- 01.01.202X / XX - DESCRIPTION
CREATE FUNCTION [dbo].[FNDD_GET_ALL_MACROSUBARTICLE]
(
-- Add the parameters for the function here
@WinLineYear INT -- Mandatory Parameter, for the WinLine Year (yyyy) Expl: 1440 (= 2020)
,@WinLineMandator VARCHAR(4) -- Mandatory Parameter, for the WinLine Mandator (~~~~) Expl: '500M'
,@MakroArtikelnummer VARCHAR(30) -- Hauptartikelnummer des Makro-Artikels (T026.C003) Expl: 'XX1000001'
,@BestellteMenge INT -- Die bestellte Menge, als Basis für die Anzahl der Sub-Artikel Expl: 1
)
RETURNS @Table TABLE
(
-- Add the column definitions for the TABLE variable here
LaufendeNummer INT
,MakroSubArtikelnummer VARCHAR(30) NOT NULL DEFAULT ''
,MakroMenge INT NOT NULL DEFAULT 0
,MakroPreis FLOAT NOT NULL DEFAULT 0.00
)
AS
BEGIN
DECLARE
@LaufendeNummer INT
,@MakroSubArtikelnummer VARCHAR(30)
,@MakroMenge INT
,@MakroPreis FLOAT
,@MakroWert INT
,@MakroAktion INT
,@VKMakroName VARCHAR(20)
,@LastMengeKonstante INT
SELECT DISTINCT
@VKMakroName = t.c037
FROM v021 t
WHERE t.c002 = @MakroArtikelnummer
AND t.mesocomp = @WinLineMandator
AND t.mesoyear = @WinLineYear
IF Len(@VKMakroName) <= 0
BEGIN
-- Kein VKMakroName definiert, dann gibt es auch keine Sub-Artikel
RETURN
END
DECLARE cursMacroSubArticles CURSOR FOR
SELECT
t.c009 -- Zeile
,t.c006 -- Artikelnummer
,t.c008 -- Wert
,t.c007 -- Aktion
FROM t326 t
WHERE t.c002 like @VKMakroName + '%'
AND t.mesocomp = @WinLineMandator
AND t.mesoyear = @WinLineYear
OPEN cursMacroSubArticles
FETCH NEXT FROM cursMacroSubArticles INTO @LaufendeNummer, @MakroSubArtikelnummer, @MakroWert, @MakroAktion
WHILE @@FETCH_STATUS = 0
BEGIN
-- Hole MakroPreis über die Skalarfunktion FNDD_GET_MACROSUBARTICLE_PRICE
Select @MakroPreis = [dbo].[FNDD_GET_MACROSUBARTICLE_PRICE] (@WinLineYear, @WinLineMandator, @MakroArtikelnummer, @MakroSubArtikelnummer)
-- Berechne die MakroMenge anhand der Aktion, des Wert und der bestellten Menge
IF @MakroAktion = 1
BEGIN
-- Mengeneingabe
SET @MakroMenge = @BestellteMenge
SET @LastMengeKonstante = @BestellteMenge
END
ELSE IF @MakroAktion = 2
BEGIN
-- Mengenkonstante
SET @MakroMenge = @MakroWert
SET @LastMengeKonstante = @MakroWert
END
ELSE IF @MakroAktion = 3
BEGIN
-- Mengenmutliplikation
SET @MakroMenge = @BestellteMenge * @MakroWert
END
ELSE IF @MakroAktion = 4
BEGIN
-- Mengenaddition = Addition des Werts zur letzten Konstante
SET @MakroMenge = @LastMengeKonstante + @MakroWert
END
ELSE
BEGIN
SET @MakroMenge = 0
END
INSERT INTO @Table (
LaufendeNummer
,MakroSubArtikelnummer
,MakroMenge
,MakroPreis
) VALUES (
@LaufendeNummer
,@MakroSubArtikelnummer
,@MakroMenge
,@MakroPreis
)
FETCH NEXT FROM cursMacroSubArticles INTO @LaufendeNummer, @MakroSubArtikelnummer, @MakroWert, @MakroAktion
END
CLOSE cursMacroSubArticles
DEALLOCATE cursMacroSubArticles
RETURN
END
GO