Files
SDL/SDL/kassenbuch/POS.vb

299 lines
11 KiB
VB.net

Imports System.Drawing.Printing
Imports Microsoft.Win32
Public Class POS
Public Sub New(ByVal _rptKundenBeleg, betrag)
rptKundenBeleg = _rptKundenBeleg
betrag = CInt(betrag)
End Sub
' Erstellt durch Jan Groetzner, Groetzner Unternehmensberatung, Seevetal
' Version: 02.03.2020
' Kontakt: easyzvt@groetzner.de
' Dieser Quellcode dient als Beispielimplementierung zur Einbindung von EasyZVT in die eigene Kassenanwendung.
' Der Code und auch Teile davon dürfen frei kopiert und in der Kassenanwendung verwendet werden
Private EasyZVT_Worker As System.ComponentModel.BackgroundWorker = New System.ComponentModel.BackgroundWorker()
Private Funktion As Integer
Private rptKundenBeleg As rptKundenBeleg
Private Betrag As Integer
Private WithEvents PDoc As Printing.PrintDocument
Private Sub POS_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
' Anwendungsstart
' Worker-Thread wird initialisiert
' Vorherige Werte werden aus der Registry gelesen und in die Oberfläche eingetragen
' Die Werte in der Oberfläche sollten in der echten Anwendung in der Stammdatentabelle der Kasse gespeichert werden und nicht in der Registry. Geht aber natürlich auch hier.
Try
AddHandler EasyZVT_Worker.DoWork, New System.ComponentModel.DoWorkEventHandler(AddressOf EasyZVT_Async)
AddHandler EasyZVT_Worker.RunWorkerCompleted, New System.ComponentModel.RunWorkerCompletedEventHandler(AddressOf EasyZVT_OnCompleted)
Dim ZVTKey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\GUB\ZVT", True)
TextBox_KasseNr.Text = ZVTKey.GetValue("KasseNr", "1")
ComboBox_COM.Text = ZVTKey.GetValue("COM", "LAN")
TextBox_IP.Text = ZVTKey.GetValue("IP", "192.168.86.122")
TextBox_Port.Text = ZVTKey.GetValue("Port", "20007")
ComboBox_ComSpeed.Text = ZVTKey.GetValue("ComSpeed", "9600")
ComboBox_ComStop.Text = ZVTKey.GetValue("ComStop", "1")
TextBox_Lizenz.Text = ZVTKey.GetValue("Lizenz", "")
If ZVTKey.GetValue("Kassedruck", 0) = 1 Then
CheckBox_Kassedruck.Checked = True
Else
CheckBox_Kassedruck.Checked = False
End If
ComboBox_Typ.SelectedIndex = ComboBox_Typ.FindString(ZVTKey.GetValue("Typ", 0).ToString)
PopulateInstalledPrintersCombo()
comboInstalledPrinters.SelectedIndex = comboInstalledPrinters.FindString(ZVTKey.GetValue("DemoDruckername", ""))
If ZVTKey.GetValue("DemoAutodruck", 0) = 0 Then
CheckBoxAutodruck.Checked = False
Else
CheckBoxAutodruck.Checked = True
End If
If ZVTKey.GetValue("DemoDummydruck", 1) = 0 Then
CheckBoxDummy.Checked = False
Else
CheckBoxDummy.Checked = True
End If
ZVTKey.Close()
Catch ex As Exception
MessageBox.Show("Fehler beim Einlesen der Standardwerte: " & ex.Message)
End Try
End Sub
Private Sub SetRegistryParameter()
'Funktion holt Werte direkt aus der Oberfläche (TextBox_...) und schreibt diese in die Registry als Eingabeparameter für EasyZVT.
'Im wahren Leben stehen diese Werte in Datenbankeinträgen der Stammdatenverwaltung in der Hauptanwendung
Dim ZVTKey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\GUB\ZVT", True)
Dim TypSelected As String
Dim Typ As Long
Try
ZVTKey.SetValue("Funktion", Funktion, RegistryValueKind.DWord)
TypSelected = Strings.Left(ComboBox_Typ.Text, 2).Replace(":", "")
Typ = TypSelected
ZVTKey.SetValue("Typ", Typ, RegistryValueKind.DWord)
ZVTKey.SetValue("KasseNr", TextBox_KasseNr.Text, RegistryValueKind.String)
ZVTKey.SetValue("COM", ComboBox_COM.Text, RegistryValueKind.String)
ZVTKey.SetValue("IP", TextBox_IP.Text, RegistryValueKind.String)
ZVTKey.SetValue("Port", CInt(TextBox_Port.Text), RegistryValueKind.DWord)
ZVTKey.SetValue("ComSpeed", CInt(ComboBox_ComSpeed.Text), RegistryValueKind.DWord)
ZVTKey.SetValue("ComStop", CInt(ComboBox_ComStop.Text), RegistryValueKind.DWord)
ZVTKey.SetValue("Lizenz", TextBox_Lizenz.Text, RegistryValueKind.String)
If Funktion = 0 Or Funktion = 4 Then
Betrag = CInt("0" & TextBox_Betrag.Text)
ZVTKey.SetValue("Betrag", Betrag, RegistryValueKind.DWord)
End If
If Funktion = 3 Then
ZVTKey.SetValue("StornoBetrag", CInt("0" & TextBox_Betrag.Text), RegistryValueKind.DWord)
ZVTKey.SetValue("StornoBelegNr", CInt("0" & StornoBelegNr.Text), RegistryValueKind.DWord)
End If
If CheckBox_Kassedruck.Checked Then
ZVTKey.SetValue("Kassedruck", 1, RegistryValueKind.DWord)
Else
ZVTKey.SetValue("Kassedruck", 0, RegistryValueKind.DWord)
End If
ZVTKey.SetValue("Ergebnis", 1000, RegistryValueKind.DWord) ' Zur Sicherheit, falls EasyZVT gar nicht installiert ist oder nicht gestartet werden kann
ZVTKey.SetValue("ErgebnisText", "EasyZVT konnte nicht gestartet werden", RegistryValueKind.String)
ZVTKey.SetValue("DemoDruckername", comboInstalledPrinters.Text, RegistryValueKind.String)
If CheckBoxAutodruck.Checked Then
ZVTKey.SetValue("DemoAutodruck", 1, RegistryValueKind.DWord)
Else
ZVTKey.SetValue("DemoAutodruck", 0, RegistryValueKind.DWord)
End If
If CheckBoxDummy.Checked Then
ZVTKey.SetValue("DemoDummydruck", 1, RegistryValueKind.DWord)
Else
ZVTKey.SetValue("DemoDummydruck", 0, RegistryValueKind.DWord)
End If
Button_Autorisierung.Enabled = False
Button_Diagnose.Enabled = False
Button_Tagesabschluss.Enabled = False
Button_Storno.Enabled = False
Button_Gutschrift.Enabled = False
Button_Exit.Enabled = False
TextBox_ErgebnisText.Text = "EasyZVT-Zahlung aktiv"
TextBox_Aktiv.Text = "warte auf Aktiv=0"
Catch ex As Exception
MessageBox.Show("Das Schreiben der Parameter ist fehlgeschlagen: " & ex.Message)
Exit Sub
End Try
ZVTKey.Close()
End Sub
Private Sub Autorisierung()
Funktion = 0
SetRegistryParameter()
EasyZVT_Worker.RunWorkerAsync()
End Sub
Private Sub Button_Autorisierung_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Autorisierung.Click
'Zahlung per Klick auslösen
Autorisierung()
End Sub
Private Sub TextBox_Betrag_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox_Betrag.KeyPress
End Sub
Private Sub EasyZVT_Async(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
' Programmstart von ZVTStart.exe und warten auf Programmende
Dim ZVTKey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\GUB\ZVT", True)
Try
Dim ZVTStart As String = ZVTKey.GetValue("Start")
Dim Proc As System.Diagnostics.Process
If (Len(ZVTStart) > 1) Then
ZVTKey.SetValue("Ergebnis", 1000, RegistryValueKind.DWord) ' Wenn das Ergebnis 1000 bleibt konnte EasyZVT nicht gestartet werden
Proc = System.Diagnostics.Process.Start(ZVTStart)
System.Threading.Thread.Sleep(3000) ' Warte drei Sekunden bis Prozess ZVTStart geladen ist, dann erst anfangen Flag Aktiv abzufragen
While ZVTKey.GetValue("Aktiv") = 1
System.Threading.Thread.Sleep(500) ' Warten...
If TextBox_Aktiv.BackColor = Color.Gray Then ' kleine Spielerei :-)
TextBox_Aktiv.BackColor = Color.Red
Else
TextBox_Aktiv.BackColor = Color.Gray
End If
End While
TextBox_Aktiv.BackColor = Color.Gray
Else
MsgBox("EasyZVT ist nicht installiert. Bitte im Internet Explorer über www.easyzvt.de/publish installieren")
End If
Catch ex As Exception
MessageBox.Show("Der Programmstart ist fehlgeschlagen: " & ex.Message)
Exit Sub
End Try
ZVTKey.Close()
End Sub
Private Sub EasyZVT_OnCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs)
' Diese Funktion wird automatisch aufgerufen wenn der Worker-Thread seine Arbeit beendet
' und EasyZVT seine Ausgabewerte in die Registry zurückgeschrieben hat
Dim ZVTKey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\GUB\ZVT", True)
TextBox_Aktiv.Text = ""
TextBox_Ergebnis.Text = ZVTKey.GetValue("Ergebnis")
TextBox_ErgebnisText.Text = ZVTKey.GetValue("ErgebnisText")
TextBox_Drucktext.Text = Replace(ZVTKey.GetValue("Drucktext"), vbLf, vbCrLf)
TextBox_Drucktext2.Text = Replace(ZVTKey.GetValue("Drucktext2"), vbLf, vbCrLf)
TextBox_BelegNr.Text = ZVTKey.GetValue("BelegNr").ToString
TextBox_Betrag.Text = ""
If CheckBoxAutodruck.Checked Then
If Len(TextBox_Drucktext.Text) > 1 Then
Button_Kundenbeleg_drucken.PerformClick()
End If
If Len(TextBox_Drucktext2.Text) > 1 Then
Button_Haendlerbeleg_drucken.PerformClick()
End If
End If
TextBox_Betrag.Focus()
Button_Autorisierung.Enabled = True
Button_Diagnose.Enabled = True
Button_Tagesabschluss.Enabled = True
Button_Storno.Enabled = True
Button_Gutschrift.Enabled = True
Button_Exit.Enabled = True
ZVTKey.Close()
End Sub
Private Sub Button_Diagnose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Diagnose.Click
Funktion = 1
SetRegistryParameter()
EasyZVT_Worker.RunWorkerAsync()
End Sub
Private Sub Button_Exit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Exit.Click
Application.Exit()
End Sub
Private Sub Button_Tagesabschluss_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Tagesabschluss.Click
Funktion = 2
SetRegistryParameter()
EasyZVT_Worker.RunWorkerAsync()
End Sub
Private Sub Button_Storno_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Storno.Click
Funktion = 3
SetRegistryParameter()
EasyZVT_Worker.RunWorkerAsync()
End Sub
Private Sub Button_Gutschrift_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Gutschrift.Click
Funktion = 4
SetRegistryParameter()
EasyZVT_Worker.RunWorkerAsync()
End Sub
Private Sub PDoc_SeiteDrucken(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PDoc.PrintPage
Dim Textfont As Font = TextBox_Kassenbon.Font
Dim Hoehe, Breite As Integer
Dim Links, Oben As Integer
With PDoc.DefaultPageSettings
'Hoehe = .PaperSize.Height - .Margins.Top - .Margins.Bottom
'Breite = .PaperSize.Width - .Margins.Left - .Margins.Right
Hoehe = 500 ' 5,00 Zoll
Breite = 270 ' = 2,70 zoll
'Links = PDoc.DefaultPageSettings.Margins.Left
'Oben = PDoc.DefaultPageSettings.Margins.Top
Links = 10
Oben = 10
End With
' Einen Rahmen zeichnen
Dim Rahmen As New Rectangle(Links, Oben, Breite, Hoehe)
e.Graphics.DrawRectangle(Pens.Blue, Rahmen)
' In den Rahmen den Kassenbontext zeichnen
Dim StrFormat As StringFormat
StrFormat = New StringFormat(StringFormatFlags.LineLimit)
e.Graphics.DrawString(TextBox_Kassenbon.Text, Textfont, Brushes.Black, Rahmen, StrFormat)
e.HasMorePages = False
End Sub
Private Sub Button_Kundenbeleg_drucken_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Kundenbeleg_drucken.Click
End Sub
Private Sub Button_Haendlerbeleg_drucken_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Haendlerbeleg_drucken.Click
End Sub
Private Sub PopulateInstalledPrintersCombo()
' Add list of installed printers found to the combo box.
' The pkInstalledPrinters string will be used to provide the display string.
Dim i As Integer
Dim pkInstalledPrinters As String
For i = 0 To PrinterSettings.InstalledPrinters.Count - 1
pkInstalledPrinters = PrinterSettings.InstalledPrinters.Item(i)
comboInstalledPrinters.Items.Add(pkInstalledPrinters)
Next
End Sub
Private Sub comboInstalledPrinters_SelectionChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles comboInstalledPrinters.SelectedIndexChanged
End Sub
End Class