Imports IntraSell_DLL
Imports IntraSell_Net_Base

Public Class AuftragStatusListener

    Private isVorgang As New IntraSellVorgang()

    Public Sub Init()
        WriteLog("AuftragStatusListener.Init")
        AddHandler ModuleGlobal.CommandRequestEvent, AddressOf OnAuftragStatusWechsel
        isVorgang.Init(CurrentDB.ConnectionString)
    End Sub

    Public Sub Destroy()
        WriteLog("AuftragStatusListener.Destroy")
        RemoveHandler ModuleGlobal.CommandRequestEvent, AddressOf OnAuftragStatusWechsel
    End Sub

    Private Sub OnAuftragStatusWechsel(cmd As IntraSellCommand)
        Try
            WriteLog("OnAuftragStatusWechsel cmd " & cmd.Serialize)
            If TypeOf (cmd) Is IntraSellVorgangStatusCommand Then
                Dim c = CType(cmd, IntraSellVorgangStatusCommand)
                Dim vorgInBearb = LadeVorgang(c.Typ, c.Nummer)

                ErstelleReminder(vorgInBearb)
            End If
        Catch ex As Exception
            HandleAppError(ex, "Fehler in OnAuftragStatusWechsel", Silent:=True)
        End Try
    End Sub


    ''' <summary>
    ''' Erstelle Reminder für diese Order
    ''' </summary>
    ''' <param name="vorgInBearb"></param>
    Sub ErstelleReminder(vorgInBearb As VorgangInBearbeitung)

        Dim erstellt = isVorgang.GetVorgangEigenschaft(vorgInBearb.Typ, vorgInBearb.Nummer, "Reminder")
        If erstellt = "Erstellt" Then
            Return
        End If
        Dim reminderCommand As New IntraSellOrderReminderCommand
        reminderCommand.Typ = vorgInBearb.Typ
        reminderCommand.Nummer = vorgInBearb.Nummer

        'Nur dann wenn neuer kunde 
        If VarValue_Default(Variablen.Event_Neukunde, False) Then
            Try
                Dim kundenAuftraege = ModuleKunden.AnzahlKundenVorgaenge(vorgInBearb.KundNr, vorgInBearb.Typ, True)
                If kundenAuftraege <= 1 Then
                    reminderCommand.ReminderSendenAn = Now.AddHours(3 / 60)
                    reminderCommand.ReminderTyp = Variablen.Event_Neukunde
                    ModuleGlobal.RequestCommandMitZeitpunktDerAusfuehrung(reminderCommand, reminderCommand.ReminderSendenAn)
                End If
            Catch ex As Exception
                HandleAppError(ex, Silent:=True)
            End Try
        End If

        If VarValue_Default(Variablen.Order_Confirmation, False) Then
            reminderCommand.ReminderSendenAn = Now.AddHours(0)
            reminderCommand.ReminderTyp = Variablen.Order_Confirmation
            ModuleGlobal.RequestCommandMitZeitpunktDerAusfuehrung(reminderCommand, reminderCommand.ReminderSendenAn)
        End If

        If VarValue_Default(Variablen.Order_Feedback, False) Then
            reminderCommand.ReminderSendenAn = Now.AddHours(1)
            reminderCommand.ReminderTyp = Variablen.Order_Feedback
            ModuleGlobal.RequestCommandMitZeitpunktDerAusfuehrung(reminderCommand, reminderCommand.ReminderSendenAn)
        End If

        If VarValue_Default(Variablen.Reminder_1Woche, True) Then
            reminderCommand.ReminderSendenAn = Now.AddDays(7).AddHours(-1)
            reminderCommand.ReminderTyp = Variablen.Reminder_1Woche
            ModuleGlobal.RequestCommandMitZeitpunktDerAusfuehrung(reminderCommand, reminderCommand.ReminderSendenAn)
        End If

        If VarValue_Default(Variablen.Reminder_2Woche, True) Then
            reminderCommand.ReminderSendenAn = Now.AddDays(14).AddHours(-1)
            reminderCommand.ReminderTyp = Variablen.Reminder_2Woche
            ModuleGlobal.RequestCommandMitZeitpunktDerAusfuehrung(reminderCommand, reminderCommand.ReminderSendenAn)
        End If

        If VarValue_Default(Variablen.Reminder_4Woche, True) Then
            reminderCommand.ReminderSendenAn = Now.AddDays(28).AddHours(-1)
            reminderCommand.ReminderTyp = Variablen.Reminder_4Woche
            ModuleGlobal.RequestCommandMitZeitpunktDerAusfuehrung(reminderCommand, reminderCommand.ReminderSendenAn)
        End If

        isVorgang.AddVorgangEigenschaft(vorgInBearb.Typ, vorgInBearb.Nummer, "Reminder", "Erstellt")
    End Sub

End Class
