Trigger für prozentuale Aufpreise in Variationskombinationen

mylederhosen.com

Aktives Mitglied
1. November 2011
36
0
WAWI 099890 SHOP 3.16

Hallo zusammen,
wir arbeiten viel mit prozentuellen Aufschlägen, und habe hier ein Skript erstellt, dass vielleicht einmal von JTL als Inspiration nehmen könnte 🙂
Dieses Skript benutzt den Namen der Variation, hier 'Größe' und sucht dort nach der Zeichenkette (+10%), dann berechnet es die Aufschläge für fVKBrutto und fVKNetto über die enthaltene Zahl, hier also 10 ! Das Skript nimmt in diesem Beispiel auch den Aufpreis auf die Variation mit dem Namen "Material" und berücksichtigt diesen.
Beispiel: Hose 100€, Material +50€, Größe +10% -> Preis: 165€
Beispiel: Hose 100€, Material + 0€, Größe + 10% -> Preis: 110€
Beispiel: Hose 100€, Material +50€, Größe ohne Aufschlag -> Preis 150€

Das Skript ist als Trigger angelegt, so dass meine Mitarbeiterin nichts starten oder kontrollieren muß.
Funktioniert zauberhaft. Viel Spaß

PHP:
USE eazybusiness;
GO
IF OBJECT_ID ('dbo.abv_update_aufpreise','TR') IS NOT NULL
   DROP TRIGGER dbo.abv_update_aufpreise;
GO
CREATE TRIGGER dbo.abv_update_aufpreise on [eazybusiness].[dbo].[tartikel]
AFTER UPDATE
AS
DECLARE @artikelnummer as varchar(20);
BEGIN
    SELECT @artikelnummer = kArtikel from INSERTED;
    update [eazybusiness].[dbo].[tartikel]  
        set fVKBrutto = source.fVKBrutto,
        fVKNetto = source.fVKNetto
    from  [eazybusiness].[dbo].[tartikel] a
        inner join
        ( select kArtikel, vaterBrutto, fAufpreisLeder, 
            fVKBrutto = case when perc is not null THEN round((z.vaterBrutto + z.fAufpreisLeder) * ( 1 + (convert(numeric,perc)/100)),0) ELSE z.vaterBrutto + z.fAufpreisLeder END,
            fVKNetto = case when perc is not null THEN round((z.vaterBrutto + z.fAufpreisLeder) * ( 1 + (convert(numeric,perc)/100)) / 1.19 ,2) ELSE round((z.vaterBrutto + z.fAufpreisLeder) / 1.19,2) END
          FROM
          (SELECT a.[kArtikel],v.fvkbrutto vaterBrutto ,ewl.[fAufpreis] fAufpreisLeder
            , perc = case when charindex('(+',ew.cName) > 0 then substring(ew.cName,charindex('(+',ew.cName) +2,(charindex('%)',ew.cName) - (charindex('(+',ew.cName)+2))) else null END
            FROM [eazybusiness].[dbo].[tartikel] v, [eazybusiness].[dbo].[tartikel] a 
            ,[eazybusiness].[dbo].[tEigenschaftKombiWert] ek, [eazybusiness].[dbo].[teigenschaft] e ,[eazybusiness].[dbo].[teigenschaftwert] ew
            ,[eazybusiness].[dbo].[tEigenschaftKombiWert] ekl, [eazybusiness].[dbo].[teigenschaft] el ,[eazybusiness].[dbo].[teigenschaftwert] ewl
            where v.kVaterArtikel = 0
            and a.kVaterArtikel = @artikelnummer
            and a.kVaterArtikel = v.kArtikel
            and v.nIstVater = 1
            and a.keigenschaftkombi = ek.keigenschaftkombi
            and e.keigenschaft = ek.keigenschaft 
            and e.cName = 'Größe'
            and ew.keigenschaftwert = ek.keigenschaftwert
            and a.keigenschaftkombi = ekl.keigenschaftkombi
            and el.keigenschaft = ekl.keigenschaft 
            and el.cName = 'Material'
            and ewl.keigenschaftwert = ekl.keigenschaftwert
          ) z
        ) as source
    on a.kartikel = source.kartikel
END
GO
IF OBJECT_ID ('dbo.abv_aufpreise','TR') IS NOT NULL
   DROP TRIGGER dbo.abv_aufpreise;
GO
CREATE TRIGGER dbo.abv_aufpreise on [eazybusiness].[dbo].[tartikel]
AFTER INSERT
AS
DECLARE @artikelnummer as varchar(20);
DECLARE @vater as varchar(20);
BEGIN
    SELECT @artikelnummer = kArtikel from INSERTED;
    SELECT @vater = kVaterArtikel from INSERTED;
    update [eazybusiness].[dbo].[tartikel]  
        set fVKBrutto = source.fVKBrutto,
        fVKNetto = source.fVKNetto
    from  [eazybusiness].[dbo].[tartikel] a
        inner join
        ( select kArtikel, vaterBrutto, fAufpreisLeder, 
            fVKBrutto = case when perc is not null THEN round((z.vaterBrutto + z.fAufpreisLeder) * ( 1 + (convert(numeric,perc)/100)),0) ELSE z.vaterBrutto + z.fAufpreisLeder END,
            fVKNetto = case when perc is not null THEN round((z.vaterBrutto + z.fAufpreisLeder) * ( 1 + (convert(numeric,perc)/100)) / 1.19 ,2) ELSE round((z.vaterBrutto + z.fAufpreisLeder) / 1.19,2) END
          FROM
          (SELECT a.[kArtikel],v.fvkbrutto vaterBrutto ,ewl.[fAufpreis] fAufpreisLeder
            , perc = case when charindex('(+',ew.cName) > 0 then substring(ew.cName,charindex('(+',ew.cName) +2,(charindex('%)',ew.cName) - (charindex('(+',ew.cName)+2))) else null END
            FROM [eazybusiness].[dbo].[tartikel] v, [eazybusiness].[dbo].[tartikel] a 
            ,[eazybusiness].[dbo].[tEigenschaftKombiWert] ek, [eazybusiness].[dbo].[teigenschaft] e ,[eazybusiness].[dbo].[teigenschaftwert] ew
            ,[eazybusiness].[dbo].[tEigenschaftKombiWert] ekl, [eazybusiness].[dbo].[teigenschaft] el ,[eazybusiness].[dbo].[teigenschaftwert] ewl
            where v.kVaterArtikel = 0
            and a.kArtikel= @artikelnummer
            and v.kArtikel = @vater
            and a.kVaterArtikel = v.kArtikel
            and v.nIstVater = 1
            and a.keigenschaftkombi = ek.keigenschaftkombi
            and e.keigenschaft = ek.keigenschaft 
            and e.cName = 'Größe'
            and ew.keigenschaftwert = ek.keigenschaftwert
            and a.keigenschaftkombi = ekl.keigenschaftkombi
            and el.keigenschaft = ekl.keigenschaft 
            and el.cName = 'Material'
            and ewl.keigenschaftwert = ekl.keigenschaftwert
          ) z
        ) as source
    on a.kartikel = source.kartikel
END


GO
 

Ähnliche Themen