Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports Styletronix.AuftragsverwaltungV2.Common
Imports Styletronix.AuftragsverwaltungV2
Imports Styletronix.AuftragsverwaltungV2.IPC
Imports Styletronix
Imports Styletronix.Threading.Thread_Manager
Namespace LagerstandAbfrage
Public Class DynamicCode
Implements IPC.IPluginDetails
Implements IPC.IArtikelsuche
Implements IPC.ICommonPlugIn
#Region "Benutzereinstellungen"
Private DownloadURL = "http://www.ingrammicro.de/cgi-bin/scripts/get_PL.pl"
Private Kundennummer As String = "xxxxxx" 'Hier Ihre Kundennummer eintragen
Private Kennwort As String = "xxxxxx" 'Hier Ihr Kennwort eintragen
Private Folder As String = IO.Path.GetDirectoryName(My.Computer.FileSystem.SpecialDirectories.AllUsersApplicationData) & "\" & Styletronix.Utils.Settings.DB_GUID & "\Temp"
Private PlugInKennung As String = "IngramMicro"
Dim ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Folder & ";Extended Properties=dBase III"
#End Region
#Region "Deklarationen"
Private _Host As Object
Private RunningUserTokens As New List(Of Object)
#End Region
#Region "PluginDetails"
Public ReadOnly Property Plugin_Company As String Implements IPC.IPluginDetails.Plugin_Company
Get
Return "Styletronix.net"
End Get
End Property
Public ReadOnly Property Plugin_Description As String Implements IPC.IPluginDetails.Plugin_Description
Get
Return "Artikelimport aus einer lokalen dBase Artikeldatenbank von IngramMicro"
End Get
End Property
Public ReadOnly Property Plugin_Icon As System.Drawing.Image Implements IPC.IPluginDetails.Plugin_Icon
Get
Return Nothing
End Get
End Property
Public ReadOnly Property Plugin_Name As Object Implements IPC.IPluginDetails.Plugin_Name
Get
Return "Artikelabfrage - IngramMicro dBase Artikeldatenbank"
End Get
End Property
Public ReadOnly Property Plugin_Version As System.Version Implements IPC.IPluginDetails.Plugin_Version
Get
Return New Version(1, 0, 0)
End Get
End Property
#End Region
#Region "IArtikelsuche"
Public Event ArtikelSucheCompleted(sender As Object, e As AuftragsverwaltungV2.IPC.IArtikelsuche.ArtikelSucheCompletedEventArgs) Implements AuftragsverwaltungV2.IPC.IArtikelsuche.ArtikelSucheCompleted
Public Event ArtikelSuchePartialResult(sender As Object, e As AuftragsverwaltungV2.IPC.IArtikelsuche.ArtikelSucheCompletedEventArgs) Implements AuftragsverwaltungV2.IPC.IArtikelsuche.ArtikelSuchePartialResult
Public Sub BeginArtikelSuche(Artikelnummer As String, userToken As Object) Implements AuftragsverwaltungV2.IPC.IArtikelsuche.BeginArtikelSuche
Try
RunningUserTokens.Add(userToken)
Dim dBaseConnection As New System.Data.OleDb.OleDbConnection(ConnectionString)
dBaseConnection.Open()
Artikelnummer = Artikelnummer.ToUpper
Dim dBaseCommand As New System.Data.OleDb.OleDbCommand(String.Format("SELECT * FROM mac_dbf WHERE UCASE(ARTIKEL_Nr) Like '{0}' OR UCASE(HSTNUMMER) LIKE '{0}' OR UCASE(EANCODE) LIKE '{0}' OR UCASE(EANCODE) LIKE '0{0}'", Artikelnummer), dBaseConnection)
Dim dBaseDataReader As System.Data.OleDb.OleDbDataReader = dBaseCommand.ExecuteReader(System.Data.CommandBehavior.Default)
Do While dBaseDataReader.Read
If Not RunningUserTokens.Contains(userToken) Then GoTo ende
Dim art As New tbl_Artikel
art.Artikelnummer3 = dBaseDataReader("ARTIKEL_Nr").ToString
art.Gruppe1 = dBaseDataReader("GRUPPE1").ToString
art.Gruppe2 = dBaseDataReader("GRUPPE2").ToString
art.Gruppe3 = dBaseDataReader("GRUPPE3").ToString
art.Artikelnummer2 = dBaseDataReader("HSTNUMMER").ToString
art.Artikelnummer = dBaseDataReader("EANCODE").ToString
If art.Artikelnummer.Length = 13 And art.Artikelnummer.StartsWith("0") Then
art.Artikelnummer = art.Artikelnummer.Remove(0, 1)
End If
art.Artikelnummer4 = dBaseDataReader("CATALOGUEI").ToString
art.VK = dBaseDataReader("EVP").ToString
art.EK = dBaseDataReader("HEK").ToString
art.Name = dBaseDataReader("HERSTELLER").ToString & " " & dBaseDataReader("ARTIKEL1").ToString & vbCrLf & dBaseDataReader("ARTIKEL2").ToString
If String.IsNullOrWhitespace(art.Artikelnummer) Then art.Artikelnummer = art.Artikelnummer3
'Bild herunterladen
Dim imgURL = dBaseDataReader("PICTUREFIL").ToString
If art.Thumb Is Nothing AndAlso Not String.IsNullOrWhiteSpace(imgURL) Then
imgURL = "http://ec.ingrammicro.de/jpg/" & imgURL
Try
Dim img = Styletronix.Imaging.Utils.GetImageFromURL(imgURL)
If Not img Is Nothing Then
art.Bild = Styletronix.Imaging.Utils.GetImageFromBinary(img)
End If
Catch ex As Exception
End Try
End If
Dim ArtikelText = String.Format("{1}{0}{2}", vbCrLf, art.Artikelnummer, art.Name)
Dim args As New Styletronix.AuftragsverwaltungV2.IPC.IArtikelsuche.ArtikelSucheCompletedEventArgs
args.PlugInKennung = PlugInKennung
args.userToken = userToken
args.Text = ArtikelText
args.ArtikelDetails = art
RaiseEvent ArtikelSuchePartialResult(Me, args)
Loop
ende:
dBaseConnection.Close()
Dim args2 As New Styletronix.AuftragsverwaltungV2.IPC.IArtikelsuche.ArtikelSucheCompletedEventArgs
args2.PlugInKennung = PlugInKennung
args2.userToken = userToken
RaiseEvent ArtikelSucheCompleted(Me, args2)
Try
If Me.RunningUserTokens.Contains(userToken) Then Me.RunningUserTokens.Remove(userToken)
Catch ex As Exception
End Try
Catch ex As Exception
MsgBox(ex.ToString, MsgBoxStyle.OkOnly, Me.Plugin_Name)
End Try
End Sub
Public Sub CancelArtikelSuche(userToken As Object) Implements AuftragsverwaltungV2.IPC.IArtikelsuche.CancelArtikelSuche
Try
If Me.RunningUserTokens.Contains(userToken) Then Me.RunningUserTokens.Remove(userToken)
Catch ex As Exception
End Try
End Sub
Public Function GetArtikelSucheStatus(userToken As Object) As AuftragsverwaltungV2.IPC.IArtikelsuche.ArtikelSucheStatusResult Implements AuftragsverwaltungV2.IPC.IArtikelsuche.GetArtikelSucheStatus
If Me.RunningUserTokens.Contains(userToken) Then
Return IArtikelsuche.ArtikelSucheStatusResult.Running
Else
Return IArtikelsuche.ArtikelSucheStatusResult.Completed
End If
End Function
#End Region
#Region "ICommonPlugIn"
Public Sub Initialize(Host As Object) Implements AuftragsverwaltungV2.IPC.ICommonPlugIn.Initialize
Me._Host = Host
If Not IO.Directory.Exists(Me.Folder) Then IO.Directory.CreateDirectory(Me.Folder)
Dim Vorbereitung As New DatenbankVorbereitung
Vorbereitung.DownloadURL = Me.DownloadURL
Vorbereitung.Kennwort = Me.Kennwort
Vorbereitung.Kundennummer = Me.Kundennummer
Vorbereitung.Folder = Me.Folder
Styletronix.Threading.Thread_Manager.Instance.AddThread(Vorbereitung)
End Sub
Public ReadOnly Property Plugin_HasConfigMenu As Boolean Implements AuftragsverwaltungV2.IPC.ICommonPlugIn.Plugin_HasConfigMenu
Get
Return False
End Get
End Property
Public Sub ShowConfigMenu() Implements AuftragsverwaltungV2.IPC.ICommonPlugIn.ShowConfigMenu
Throw New NotImplementedException
End Sub
Public Function ShutDown() As Boolean Implements AuftragsverwaltungV2.IPC.ICommonPlugIn.ShutDown
Return True
End Function
Public Function ShutDownRequest() As AuftragsverwaltungV2.IPC.ICommonPlugIn.Shutdown_Result Implements AuftragsverwaltungV2.IPC.ICommonPlugIn.ShutDownRequest
Dim ret As New AuftragsverwaltungV2.IPC.ICommonPlugIn.Shutdown_Result
ret.Cancel = False
Return ret
End Function
#End Region
Private Class DatenbankVorbereitung
Implements Styletronix.Threading.Thread_Manager.IThread
Public Folder As String
Public DownloadURL As String
Public Kundennummer As String
Public Kennwort As String
Public ReadOnly Property AllowCancel As Boolean Implements Styletronix.Threading.Thread_Manager.IThread.AllowCancel
Get
Return False
End Get
End Property
Private _BarSubItem As DevExpress.XtraBars.BarSubItem
Public Property BarSubItem As DevExpress.XtraBars.BarSubItem Implements Styletronix.Threading.Thread_Manager.IThread.BarSubItem
Get
Return Me._BarSubItem
End Get
Set(value As DevExpress.XtraBars.BarSubItem)
Me._BarSubItem = value
End Set
End Property
Public Sub Cancel() Implements Styletronix.Threading.Thread_Manager.IThread.Cancel
Throw New NotImplementedException
End Sub
Public ReadOnly Property Caption As String Implements Styletronix.Threading.Thread_Manager.IThread.Caption
Get
Return "IngramMicro DB Download"
End Get
End Property
Public Sub DoWork() Implements Styletronix.Threading.Thread_Manager.IThread.DoWork
Try
RaiseEvent Thread_Progress_Changed(Me, 0, "Datei herunterladen...")
Dim DataStream = DownloadFile(DownloadURL, Kundennummer, Kennwort)
RaiseEvent Thread_Progress_Changed(Me, 80, "Temporärer Ordner vorbereiten...")
Dim TempFolder = My.Computer.FileSystem.SpecialDirectories.Temp & "\AuftrV2_IMdb"
IO.Directory.CreateDirectory(Folder)
'Datei entpacken
RaiseEvent Thread_Progress_Changed(Me, 90, "Datenbank extrahieren...")
DataStream.Position = 0
ExtractFile(DataStream, Folder)
RaiseEvent Thread_Completed(Me, Nothing)
Catch ex As Exception
RaiseEvent Thread_Completed(Me, ex)
End Try
End Sub
Private _Thread As System.Threading.Thread
Public Property Thread As System.Threading.Thread Implements Styletronix.Threading.Thread_Manager.IThread.Thread
Get
Return Me._Thread
End Get
Set(value As System.Threading.Thread)
Me._Thread = value
End Set
End Property
Public Event Thread_Completed(sender As Object, Result As Object) Implements Styletronix.Threading.Thread_Manager.IThread.Thread_Completed
Public Event Thread_Log_NewEntry(sender As Object, Caption As String, Message As String, Exception As Object, Status As System.Diagnostics.EventLogEntryType) Implements Styletronix.Threading.Thread_Manager.IThread.Thread_Log_NewEntry
Public Event Thread_Progress_Changed(sender As Object, Progress As Integer, StatusText As String) Implements Styletronix.Threading.Thread_Manager.IThread.Thread_Progress_Changed
'Funktion zum Herunterladen von Dateien von einem Server per HTTP / HTTPs
Private Shared Function DownloadFile(ByVal URL As String, ByVal Benutzer As String, ByVal Kennwort As String) As IO.MemoryStream
Dim wc As New Net.WebClient
wc.Credentials = New System.Net.NetworkCredential(Benutzer, Kennwort)
Dim data As Byte() = wc.DownloadData(URL)
Dim DataStream As New IO.MemoryStream
DataStream.Write(data, 0, data.Length)
Return DataStream
End Function
'Funktion zum Extrahieren von Dateien aus ZIP-Archiv
Private Shared Sub ExtractFile(ByRef DataStream As IO.MemoryStream, ByVal TargetFolder As String)
Dim strmZipInputStream = New ICSharpCode.SharpZipLib.Zip.ZipInputStream(DataStream)
Dim objEntry As ICSharpCode.SharpZipLib.Zip.ZipEntry
objEntry = strmZipInputStream.GetNextEntry()
Do While Not IsNothing(objEntry)
If objEntry.IsFile Then
Dim TargetName = IO.Path.Combine(TargetFolder, objEntry.Name)
Dim Folder = IO.Path.GetDirectoryName(TargetName)
If Not IO.Directory.Exists(Folder) Then IO.Directory.CreateDirectory(Folder)
If IO.File.Exists(TargetName) Then IO.File.Delete(TargetName)
Dim file = New IO.FileStream(TargetName, IO.FileMode.Create)
Dim buff(2048) As Byte
Dim size = strmZipInputStream.Read(buff, 0, buff.Length)
Dim pos As Int64 = 0
Do While size > 0
file.Write(buff, 0, size)
size = strmZipInputStream.Read(buff, 0, buff.Length)
pos += size
Loop
file.Close()
End If
objEntry = strmZipInputStream.GetNextEntry()
Loop
strmZipInputStream.Close()
End Sub
End Class
End Class
End Namespace