Imports System.IO Module ArdisTextMapper Private bestandsNaam As String Private writer As System.IO.StreamWriter = Nothing Public Sub stopArdisTextOpslag() If writer IsNot Nothing Then writer.Close() End If writer = Nothing bestandsNaam = Nothing End Sub Private Sub startNieuweArdisDataOpslag(pathNaarMap As String) LogBestandTextMapper.writeToFile("ArdisText", "Starten van nieuwe dataopslag van text bestand") Dim regDate As Date = Date.Now() Dim datum As String = regDate.ToString("yyyy-MM-dd") Dim uren As String = regDate.ToString("HH-mm-ss") bestandsNaam &= datum & "_" & uren & ".txt" Try Dim fullPath As String = Path.Combine(pathNaarMap, bestandsNaam) System.IO.File.WriteAllText(fullPath, "") writer = My.Computer.FileSystem.OpenTextFileWriter(fullPath, True) 'header (wordt genegeerd door ardis) writer.WriteLine("Rol" & vbTab & "Aantal" & vbTab & "PlaatMateriaal" & vbTab & "Barcode" & vbTab & "LadeSequentieNr" & vbTab & "DossierCode" & vbTab & "ExtraInfo" & vbTab & "Lengte" & vbTab & "Breedte" & vbTab & "Dikte" & vbTab & "Kleur" & vbTab & "Decor" & vbTab & "EtiketLijn1" & vbTab & "EtiketLijn2" & vbTab & "EtiketLijn3" & vbTab & "EtiketInfo" & vbTab & "EtiketLijn4" & vbTab & "Rework" & vbTab & "Kar" & vbTab & "Banding" & vbTab & "KamerfreesTrayId" & vbTab & "KamerfreesSlotNr") LogBestandTextMapper.writeToFile("ArdisText", "Starten van nieuwe dataopslag van text bestand", True) Catch ex As Exception Throw New Exception("Ardis text bestand kon niet worden aangemaakt " & ex.Message) End Try End Sub Public Sub opslaan(type As ItemType, ardisdata As ArdisData, Optional trayNummer As String = "", Optional slotNummer As String = "") Dim typeNaam As String = EnumMapper.geefArdisTextBijItemType(type) LogBestandTextMapper.writeToFile("ArdisText", "Starten opslag " & typeNaam & " met ardisData") bestandsNaam = "ImportFile_" & typeNaam & "_" If writer Is Nothing Then startNieuweArdisDataOpslag(Configs.ardisPathTextFile()) End If opslaan(ardisdata, trayNummer, slotNummer) LogBestandTextMapper.writeToFile("ArdisText", "Starten opslag " & typeNaam & " met ardisData", True) End Sub 'opslaan van de sifonladen die verwerkt gaan worden voor ze verwerkt zijn Public Sub opslaanSifonLadeVoorVerwerking(ardisdata As ArdisData, bestandsNaamSifon As String) LogBestandTextMapper.writeToFile("ArdisText", "Starten opslag sifon lade voor verwerking met barcode: " & ardisdata.PartCalc) bestandsNaam = bestandsNaamSifon.Replace(".txt", "") & "_Verwerkt_Sifon_" If writer Is Nothing Then startNieuweArdisDataOpslag(Configs.sifonLadeGeefVerplaatsFolderPath) End If opslaan(ardisdata, "", "") LogBestandTextMapper.writeToFile("ArdisText", "Starten opslag sifon lade voor verwerking met barcode: " & ardisdata.PartCalc, True) End Sub 'opslaan van de spoelbakLaden die verwerkt gaan worden voor ze verwerkt zijn Public Sub opslaanSpoelbakLadeVoorVerwerking(ardisdata As ArdisData, bestandsNaamSpoelbak As String) LogBestandTextMapper.writeToFile("ArdisText", "Starten opslag spoelbak lade voor verwerking met barcode: " & ardisdata.PartCalc) bestandsNaam = bestandsNaamSpoelbak.Replace(".txt", "") & "_Verwerkte_Spoelbak_" If writer Is Nothing Then startNieuweArdisDataOpslag(Configs.spoelbakLadeGeefVerplaatsFolderPath) End If opslaan(ardisdata, "", "") LogBestandTextMapper.writeToFile("ArdisText", "Starten opslag spoelbak lade voor verwerking met barcode: " & ardisdata.PartCalc, True) End Sub 'opslaan van de laden die niet voldeden aan de dossiercoden en dus niet verwerkt zijn geweest Public Sub opslaanNietVerwerkteSpecialLaden(lijnen As List(Of String), bestandsNaamSpecial As String) LogBestandTextMapper.writeToFile("ArdisText", "Opslaan niet verwerkte special laden") Dim nieuweBestandsNaam = "" Dim indexVanUitgelezenInfo As Integer = bestandsNaamSpecial.IndexOf("_Uitgelezen_") If indexVanUitgelezenInfo > 0 Then Dim aantalKeerUitgelezen As Integer = bestandsNaamSpecial.Substring(bestandsNaamSpecial.LastIndexOf("_") + 1).Replace(".txt", "") nieuweBestandsNaam = bestandsNaamSpecial.Remove(bestandsNaamSpecial.LastIndexOf("_") + 1) & (aantalKeerUitgelezen + 1) & ".txt" Else nieuweBestandsNaam = bestandsNaamSpecial.Replace(".txt", "") & "_Uitgelezen_1" & ".txt" End If Dim fullPath As String = Path.Combine(Configs.geefPathArdisSpecialFolder, nieuweBestandsNaam) writer = My.Computer.FileSystem.OpenTextFileWriter(fullPath, True) Try For Each lijn As String In lijnen writer.WriteLine(lijn) Next LogBestandTextMapper.writeToFile("ArdisText", "Opslaan niet verwerkte special laden", True) Catch ex As Exception Throw New Exception("Fout bij wegschrijven niet verwerkte special laden" & ex.Message) End Try End Sub Public Sub verwijderSpecialLadenBestand(bestandsNaamSpecial As String) Dim padNaarBestand As String = Configs.geefPathArdisSpecialFolder Dim fullPath As String = Path.Combine(padNaarBestand, bestandsNaamSpecial) Try File.Delete(fullPath) Catch ex As ReadOnlyException Throw New Exception("Het special laden bestand " & bestandsNaamSpecial & " is readonly") Catch ex As PathTooLongException Throw New Exception("Het path naar het special laden bestand " & bestandsNaamSpecial & " is te lang") Catch ex As IOException Throw New Exception("Het special laden bestand " & bestandsNaamSpecial & " is niet bereikbaar") End Try End Sub Private Sub opslaan(ByVal ardisdata As ArdisData, trayNummer As String, slotNummer As String) LogBestandTextMapper.writeToFile("ArdisText", " - Starten opslag van ardisData " & If(trayNummer.Equals(""), "", "met traynummer, slotnummer: " & trayNummer & "," & slotNummer)) ardisdata.updateKommasNaarPunten() Try writer.Write(ardisdata.PartRef & vbTab) 'rol/onderdeel writer.Write(ardisdata.PartQty & vbTab) 'aantal writer.Write(ardisdata.PartMat & vbTab) 'plaatmateriaal writer.Write(ardisdata.PartCalc & vbTab) 'barcode writer.Write(ardisdata.PartRemark2 & vbTab) 'ladesequenty writer.Write(ardisdata.PartRemark & vbTab) 'dossiercode writer.Write(ardisdata.PartExt09 & vbTab) 'extrainfo writer.Write(CStr(ardisdata.PartL).Replace(",", ".") & vbTab) 'lengte writer.Write(CStr(ardisdata.PartW).Replace(",", ".") & vbTab) 'breedte writer.Write(CStr(ardisdata.PartExt06).Replace(",", ".") & vbTab) 'dikte writer.Write(ardisdata.PartExt07 & vbTab) 'kleur writer.Write(ardisdata.PartExt08 & vbTab) 'decor writer.Write(ardisdata.PartExt01 & vbTab) 'etiketlijn1 writer.Write(ardisdata.PartExt02 & vbTab) 'etiketlijn2 writer.Write(ardisdata.PartExt03 & vbTab) 'etiketlijn3 writer.Write(ardisdata.PartExt05 & vbTab) 'etiketinfo writer.Write(ardisdata.PartExt04 & vbTab) 'etiketlijn4 writer.Write(ardisdata.PartRemark3 & vbTab) 'rework writer.Write(ardisdata.PartGroup & vbTab) 'kar writer.Write(ardisdata.PartLevel & vbTab) 'banding writer.Write(trayNummer & vbTab) 'KamerfreesTrayId writer.Write(slotNummer) 'KamerfreesSlotNr writer.WriteLine() LogBestandTextMapper.writeToFile("ArdisText", " - Starten opslag van ardisData " & If(trayNummer.Equals(""), "", "met traynummer, slotnummer: " & trayNummer & "," & slotNummer), True) Catch ex As Exception Throw New Exception("Ardis data kon niet worden opgeslagen" & ex.Message) End Try End Sub Public Function geefSpecialLadenMetDossierCode(dossierCode As String) As SpecialLadenOnderdelen LogBestandTextMapper.writeToFile("ArdisText", "Opvragen sifonLade met dossierCode: " & dossierCode) Dim specialLaden As SpecialLadenOnderdelen = opvragenSpecialLadenOnderdelen(dossierCode, True) LogBestandTextMapper.writeToFile("ArdisText", "Opvragen sifonLade met dossierCode: " & dossierCode, True) Return specialLaden End Function Function geefSpecialLadenMetBatchnummer(batchnummer As String) As SpecialLadenOnderdelen LogBestandTextMapper.writeToFile("ArdisText", "Opvragen sifonLade met batchnummer: " & batchnummer) Dim specialLaden As SpecialLadenOnderdelen = opvragenSpecialLadenOnderdelen(batchnummer, False) LogBestandTextMapper.writeToFile("ArdisText", "Opvragen sifonLade met batchnummer: " & batchnummer, True) Return specialLaden End Function Private Function opvragenSpecialLadenOnderdelen(code As String, isLadeCode As Boolean) Dim specialLaden As SpecialLadenOnderdelen For Each tekstBestandPath As String In Directory.GetFiles(Configs.geefPathArdisSpecialFolder) Dim allText As String = My.Computer.FileSystem.ReadAllText(tekstBestandPath) allText = allText.Trim 'alle lijnen van 1 bestand Dim lijnen As String() = allText.Split(New String() {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries) 'een special laden object maken gevuld met de opgehaalde waarden specialLaden = vulSpecialLade(lijnen, code, isLadeCode) specialLaden.bestandsNaam = tekstBestandPath.Substring(tekstBestandPath.LastIndexOf("\") + 1) 'controleren of dit de lade(n) bevat die we willen Dim bevatCode As Boolean If isLadeCode Then bevatCode = specialLaden.bevatDossierCode(code) Else bevatCode = specialLaden.bevatBatchnummer(code) End If If bevatCode Then Return specialLaden End If Next Throw New Exception("Gelieve een geldige code in te voeren") End Function Private Function vulSpecialLade(lijnen() As String, code As String, isLadeCode As Boolean) As SpecialLadenOnderdelen Dim nieuweSpecialLaden As New SpecialLadenOnderdelen Dim velden() As String Dim ardisData As ArdisData For Each lijn As String In lijnen 'alle velden scheiden velden = lijn.Split(New String() {vbTab}, StringSplitOptions.None) 'alleen als er wel degelijk ardisdata in het bestand staat het opslaan If velden.Count > 15 Then 'kijken of we een dossiercode moeten controleren of batchnummer Dim isGeldig As Boolean If isLadeCode Then isGeldig = velden(5).Equals(code) Else isGeldig = velden(18).Contains(code) End If 'kijken of de lade de dossiercode bevat If isGeldig Then 'kijken wat voor rol de lijn heeft (aka onderdeel: zijkantplaat, rug,...) ardisData = maakArdisData(velden) Select Case ardisData.PartRef Case "ZijkantPlaat" nieuweSpecialLaden.voegZijkantToe(ardisData) Case "Rug" nieuweSpecialLaden.voegRugToe(ardisData) Case "Bodem" nieuweSpecialLaden.voegBodemToe(ardisData) Case "Front" nieuweSpecialLaden.voegFrontToe(ardisData) End Select Else If Not lijn.Equals("") Then nieuweSpecialLaden.voegLijnAndereLadeToe(lijn) End If End If End If Next Return nieuweSpecialLaden End Function Private Function maakArdisData(velden As String()) As ArdisData Dim ardisData As New ArdisData ardisData.PartRef = velden(0) 'rol ardisData.PartQty = velden(1) 'aantal ardisData.PartMat = velden(2) 'plaatmateriaal ardisData.PartCalc = velden(3) 'barcode ardisData.PartRemark2 = velden(4) 'ladesequentyNR ardisData.PartRemark = velden(5) 'dossiercode ardisData.PartExt09 = velden(6) 'extrainfo ardisData.PartL = velden(7) 'lengte ardisData.PartW = velden(8) 'breedte ardisData.PartExt06 = velden(9) 'dikte ardisData.PartExt07 = velden(10) 'kleur ardisData.PartExt08 = velden(11) 'decor ardisData.PartExt01 = velden(12) 'etiketlijn1 ardisData.PartExt02 = velden(13) 'etiketlijn2 ardisData.PartExt03 = velden(14) 'etiketlijn3 ardisData.PartExt05 = velden(15) 'etiketinfo ardisData.PartExt04 = velden(16) 'etiketlijn4 ardisData.PartRemark3 = velden(17) 'rework ardisData.PartGroup = velden(18) 'kar ardisData.PartLevel = velden(19) 'banding If velden.Length > 20 Then ardisData.KamerfreesTrayId = velden(20) ardisData.KamerfreesSlotNr = velden(21) Else ardisData.KamerfreesTrayId = String.Empty ardisData.KamerfreesSlotNr = String.Empty End If Return (ardisData) End Function End Module