Option Strict On
Option Explicit On
Imports IntraSell_DLL
Imports IntraSell_Net_Base

Module ModulePreise
    Public SQL_PREISLISTEN As String = <a>SELECT PreislisteName FROM (SELECT PreislisteName FROM `grArtikel-VKPreisPerSelection` 
GROUP BY PreislisteName  
UNION 
SELECT DISTINCT Preisliste FROM `ofadressen-settings`
UNION 
SELECT 'Zustellung' FROM DUAL
UNION 
SELECT 'Abholung' FROM DUAL) AS  t
 ORDER BY 1</a>.Value


    Dim preiseDict As New Dictionary(Of String, Preis)
    Sub ResetCache()
        preiseDict.Clear()
        ModuleGlobal.intrasell.preise.ResetCache()
    End Sub

    Function CalculateEinzehlpreis(ArtNr As Integer, PreisATS_Brutto As Decimal, Vorgang As VorgangInBearbeitung) As Decimal

        If Vorgang Is Nothing Then
            Return PreisATS_Brutto
        End If

        If Vorgang.KundNr <= 1 Then
            Return PreisATS_Brutto
        End If

        Dim cacheName As String = ArtNr & "_" & "_" & Vorgang.KundNr & "_" & Vorgang.LieferMethode
        If preiseDict.ContainsKey(cacheName) Then
            Return CDec(preiseDict(cacheName).BruttoPreis)
        End If
        Dim Preisliste = GetVorgangPreisliste(Vorgang)
        Dim LieferLandISO2 = GetLieferLandISO2(Vorgang.Typ, Vorgang.Nummer)
        Dim nettoPreis As Double = intrasell.preise.GetPreis(IdNr:=Vorgang.KundNr, ArtNr:=ArtNr, Stk:=1, Preisliste:=Preisliste, LieferLandISO2:=LieferLandISO2)
        Dim p = (intrasell.preise.CalculateBruttoPreisMitMwSt(nettoPreis, ArtNr, Vorgang.KundNr, LieferLandISO2))
        preiseDict.Add(cacheName, p)
        Return CDec(p.BruttoPreis)
    End Function

    Function GetZustellpreisAT(ArtNr As Integer, Preisliste As String) As Decimal
        Dim LieferLandISO2 = "AT"
        Dim nettoPreis As Double = intrasell.preise.GetPreis(IdNr:=-1, ArtNr:=ArtNr, Stk:=1, Preisliste:=Preisliste, LieferLandISO2)
        Dim p = (intrasell.preise.CalculateBruttoPreisMitMwSt(nettoPreis, ArtNr, Vorgang.KundNr, LieferLandISO2))
        Return CDec(p.BruttoPreis)
    End Function

End Module
