diff --git a/SDL/My Project/AssemblyInfo.vb b/SDL/My Project/AssemblyInfo.vb index e0e53ffb..5edcb0c8 100644 --- a/SDL/My Project/AssemblyInfo.vb +++ b/SDL/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' übernehmen, indem Sie "*" eingeben: ' - - + + diff --git a/SDL/buchhaltung/usrCntlBH.vb b/SDL/buchhaltung/usrCntlBH.vb index 6f4e98cb..72714ebd 100644 --- a/SDL/buchhaltung/usrCntlBH.vb +++ b/SDL/buchhaltung/usrCntlBH.vb @@ -884,7 +884,7 @@ Public Class usrCntlBH AND op_debitor.i_personenkonto >= @KundeVon AND op_debitor.i_personenkonto <= @KundeBis AND op_debitor.d_zahlung >= @ZahlungVon AND op_debitor.d_zahlung <= @ZahlungBis AND DATEDIFF(DAY, DATEADD(DAY, (isnull(dbo.fibu_zahlziel.si_ntage,0) + ISNULL(tblKundenErweitert.kde_abwToleranzTage," & toleranztage & ")), op_debitor.d_rechnung), op_debitor.d_zahlung) > 0 - AND LEFT(op_debitor.c_bemerkung, 4) IN (SELECT CAST(FilialenNr AS VARCHAR(4)) FROM " & VERAG_PROG_ALLGEMEIN.cAllgemein.FMZOLL_SERVER & ".[VERAG].[dbo].[dbo].Filialen WHERE FilialenNr between 1000 and 9999) + AND LEFT(op_debitor.c_bemerkung, 4) IN (SELECT CAST(FilialenNr AS VARCHAR(4)) FROM " & VERAG_PROG_ALLGEMEIN.cAllgemein.FMZOLL_SERVER & ".[VERAG].[dbo].Filialen WHERE FilialenNr between 1000 and 9999) ORDER BY op_debitor.i_personenkonto, op_debitor.c_urbelegid desc, op_debitor.d_rechnung, ISNULL(op_debitor.OWNFIELD_Belegdatum, '01.01.2000')" diff --git a/SDL/kunden/usrCntlIDSPreise.vb b/SDL/kunden/usrCntlIDSPreise.vb index e319c0e6..e4da9192 100644 --- a/SDL/kunden/usrCntlIDSPreise.vb +++ b/SDL/kunden/usrCntlIDSPreise.vb @@ -796,8 +796,10 @@ Public Class usrCntlIDSPreise For Each r In dt.Rows + Dim preis As String = r(4).ToString().Replace(",", ".") + If SQL.doSQL("INSERT INTO [tbl_IDS_Rechenwerte] ([OutletCountryCode],[OutletCode],[CustomerCode],[ProductTypeCode],[Rechenwert],[Kz],[Zeitstempel],[Sachbearbeiter],[KategorieNr]) - VALUES ('" & r(0) & "','" & r(1) & "','" & newRWKunde & "','" & r(3) & "','" & r(4) & "','" & r(5) & "','" & Now() & "','" & VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME & "','" & r(8) & "')", "FMZOLL") Then counter += 1 + VALUES ('" & r(0) & "','" & r(1) & "','" & newRWKunde & "','" & r(3) & "'," & preis & ",'" & r(5) & "','" & Now() & "','" & VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME & "','" & r(8) & "')", "FMZOLL") Then counter += 1 Next diff --git a/VERAG_PROG_ALLGEMEIN/Schnittstellen/MSE/cMSEAPI.vb b/VERAG_PROG_ALLGEMEIN/Schnittstellen/MSE/cMSEAPI.vb index fb63efdb..ac234dae 100644 --- a/VERAG_PROG_ALLGEMEIN/Schnittstellen/MSE/cMSEAPI.vb +++ b/VERAG_PROG_ALLGEMEIN/Schnittstellen/MSE/cMSEAPI.vb @@ -1,7 +1,9 @@ Imports System.Data.SqlClient +Imports System.IO Imports System.Net Imports System.Reflection Imports System.Web.Configuration +Imports io.konik.zugferd Imports javax Public Class cMSEAPI @@ -14,10 +16,17 @@ Public Class cMSEAPI Dim apiSettingsloaded As Boolean = False Dim test As Boolean = False Dim PDFRECHNUNGENPFAD As String = "" + Public PDFRECHNUNGENPFAD_VERARBEITUNG As String = "" + Public PDFRECHNUNGENPFAD_VERARBEITUNG_ZIEL As String = "" Public ANLAGEN Public ARCHIV + Sub New() + + End Sub + + Sub New(program As String) VERAG_PROG_ALLGEMEIN.cChilkat_Helper.UnlockCilkat() API = SQL.loadDgvBySql("SELECT top(1) * FROM tblAPIEinstellungen WHERE api_program='" & program & "' and api_productive ='" & IIf(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, "0", "1") & "'", "ADMIN") @@ -33,6 +42,8 @@ Public Class cMSEAPI rest.VerboseLogging = False End If + PDFRECHNUNGENPFAD_VERARBEITUNG_ZIEL = Me.GET_PARAM_ByName("PDFRECHNUNGEN_VERARBEITUNG_ZIEL-PFAD", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM) + PDFRECHNUNGENPFAD_VERARBEITUNG = Me.GET_PARAM_ByName("PDFRECHNUNGEN_VERARBEITUNG-PFAD", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM) PDFRECHNUNGENPFAD = Me.GET_PARAM_ByName("PDFRECHNUNGEN-PFAD", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM) ANLAGEN = Me.GET_PARAM_ByName("ANLAGEN", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM) ARCHIV = Me.GET_PARAM_ByName("ARCHIV", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM) @@ -41,6 +52,8 @@ Public Class cMSEAPI End Sub + + Shared Function GET_PARAM_ByName(tcParam_name, TESTSYSTEM) As String Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL Return SQL.getValueTxtBySql("SELECT TOP 1 [Param_value] FROM [tblPartnersystem_Paramter] WHERE Param_system='MSE' AND [Param_name]='" & tcParam_name & "' AND Param_testsystem = " & IIf(TESTSYSTEM, 1, 0), , , SQL.GetNewOpenConnectionFMZOLL_SYSTEM(TESTSYSTEM)) @@ -1078,7 +1091,7 @@ Public Class cMSEAPI For Each r As DataRow In dt.Rows If r("url") <> "" AndAlso r("name") <> "" AndAlso r("name").contains("VAT") Then 'only VAT-Invoices - Dim inv As New cMSEInvoices(r("name"), r("invoice_id")) + Dim inv As New cMSEInvoices(r("name"), CInt(r("invoice_id"))) If inv.daId Is Nothing Then 'verhindert unnötige Downloads Dim filepath = VERAG_PROG_ALLGEMEIN.cFormularManager.getPDFViaSpirePDF_FromURLStream(r("url"), r("name"), PDFRECHNUNGENPFAD, False) If filepath <> "" AndAlso uploadToDs Then @@ -1102,6 +1115,182 @@ Public Class cMSEAPI End Function + Function isleernothing(s) As Object + If s Is DBNull.Value Then Return Nothing + If s.ToString.Trim = "" Then Return Nothing + Return s.trim + End Function + + + Public Function readAndSaveMSE(objFileRead As StreamReader, fi As FileInfo, cnt As Integer) As Boolean + + + Dim lngRecordCount As Long = 0 + + objFileRead.DiscardBufferedData() + objFileRead.BaseStream.Seek(0, System.IO.SeekOrigin.Begin) + + Dim counTrans As Integer = 0 + Dim savedTrans As Integer = 0 + Dim MDMEinarb As New cMDMEinarbeitung("MSE", Now()) + + + Do While (objFileRead.Peek() > -1) + Dim currentRow As String() + currentRow = objFileRead.ReadLine().Split(";") + + lngRecordCount = lngRecordCount + 1 + + If lngRecordCount = 1 Then + If Not (isleernothing((currentRow(0))) = "Controller ID") Then + Return False + End If + + Else + Try + + + Dim invoiceID As Integer = 0 + Dim invoiceDate As String + Dim customerID As Integer = 0 + Dim total_amount_euro As Double = 0 + Dim total_vat_amount_euro As Double = 0 + + ' InvoiceID + If Not IsDBNull(currentRow(2)) Then + Integer.TryParse(currentRow(2).ToString(), invoiceID) + End If + + ' InvoiceDate + If Not IsDBNull(currentRow(3)) Then + invoiceDate = currentRow(3).ToString() + End If + + ' CustomerID + If Not IsDBNull(currentRow(4)) Then + Integer.TryParse(currentRow(4).ToString(), customerID) + End If + + ' Amounts + If Not IsDBNull(currentRow(37)) Then + Double.TryParse(currentRow(37).ToString(), total_amount_euro) + End If + + If Not IsDBNull(currentRow(36)) Then + Double.TryParse(currentRow(36).ToString(), total_vat_amount_euro) + End If + + + Dim inv As New cMSEInvoices(invoiceID, invoiceDate, customerID) + + If lngRecordCount = 2 Then + MDMEinarb.invoicedate = invoiceDate + End If + + If inv.hasEntry Then + inv.total_amount_euro += total_amount_euro + inv.total_vat_amount_euro += total_vat_amount_euro + Else + inv.total_amount_euro = total_amount_euro + inv.total_vat_amount_euro = total_vat_amount_euro + End If + inv.name = "TEMP" + inv.msts_vat_number = -1 + inv.alternativeImport = True + inv.SAVEBYCUSTOMERIDDATE() + + Console.WriteLine("MSE: " & isleernothing((currentRow(1))) & " - " & lngRecordCount & " - " & isleernothing((currentRow(10)))) + + + + + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + + End If + + Loop + cnt = CInt(lngRecordCount) + MDMEinarb.ds_total += cnt - 1 + MDMEinarb.ds_count += counTrans + MDMEinarb.import_date = Now() + MDMEinarb.importfilename = fi.Name + + If MDMEinarb.ds_total = MDMEinarb.ds_count Then + MDMEinarb.completed = True + MDMEinarb.completed_date = Now() + End If + + MDMEinarb.SAVE() + objFileRead.Close() + Return True + + + + End Function + + + + Public Function importInvoicesPDF_alternative(dateiname As String, uploadToDs As Boolean) As String 'if the API do not return any invoices, we get the invoices via Filetransfer! + Try + + 'Aufbau Dateiname -> Rechnungsdatum_Kundennummer_ + Dim isVat As Boolean = False + Dim nameString = checkNullStr(dateiname) + Dim nameWithoutExt As String = System.IO.Path.GetFileNameWithoutExtension(nameString) + Dim parts() As String = nameWithoutExt.Split("_"c) + + + Dim invoiceDate As Date = Date.MinValue + + Dim customerNo As Integer = 0 + Dim invoiceNo As Integer = 0 + Dim country As String = "" + + If parts.Length >= 2 Then + + Date.TryParse(parts(0).ToString(), invoiceDate) + Integer.TryParse(parts(1).ToString(), customerNo) + End If + + ' Optional invoice number + If parts.Length >= 3 Then + Integer.TryParse(parts(2).ToString(), invoiceNo) + End If + 'country + If parts.Length >= 4 Then + If parts(3).Length = 2 Then + country = parts(3) + End If + End If + + If parts.Contains("VAT") Then + isVat = True + End If + + If isVat Then + + Dim inv As New cMSEInvoices(invoiceDate, customerNo, invoiceNo, country) + inv.name = nameString + If Not inv.archiv AndAlso isVat Then inv.SAVEBYCountry() 'bereits archiverte REchnungen nicht überschreiben!!!! + + If inv.daId Is Nothing AndAlso uploadToDs AndAlso isVat Then + + Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("MDM", "MDM_DATEN", "MSE", Now.Year, Now.ToString("yyyyMMdd"), dateiname) + DS.uploadDataToDATENSERVER(PDFRECHNUNGENPFAD_VERARBEITUNG & "\" & dateiname,,,,,, True) + SQL.doSQL("Update [tblMSEInvoices] SET [daId]='" & DS.da_id & "' where [name] = '" & dateiname & "'", "FMZOLL") + End If + End If + + + Catch ex As WebException + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + + End Function + + Public Sub saveTransactions(num As Integer, dt As DataTable, transactions As Chilkat.JsonArray, receiver As Integer, ByRef savedTrans As Integer, Optional ignorePurchaseDate As Boolean = False, Optional onlyBilledTransactions As Boolean = True) Dim j As Integer = 0 @@ -1494,6 +1683,7 @@ Public Class cMSEInvoices Property archiv As Boolean = False Property archiviertDatum As Object = Nothing Property UStVAn_ID As Object = Nothing + Property alternativeImport As Boolean = False Public hasEntry = False @@ -1503,11 +1693,31 @@ Public Class cMSEInvoices End Sub - Sub New(name, invoice_id) + Sub New(name As String, invoice_id As Integer) Me.name = name Me.invoice_id = invoice_id LOAD() End Sub + + + Sub New(invoice_id As Integer, invoice_date As String, customer_number As Integer) + Me.invoice_id = invoice_id + Me.invoice_date = invoice_date + Me.customer_number = customer_number + LOADBYCUSTOMERIDETC() + End Sub + + ' Dim inv As New cMSEInvoices(invoiceDate, customerNo, invoiceNo, country) + + Sub New(invoice_date As String, customer_number As Integer, invoice_nr As Integer, country As String) + Me.country = country + Me.invoice_date = invoice_date + Me.customer_number = customer_number + Me.invoice_nr = invoice_nr + LOADBYCOUNTRY() + End Sub + + Function getParameterList() As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("name", name)) @@ -1524,6 +1734,7 @@ Public Class cMSEInvoices list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("archiviertDatum", archiviertDatum)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("invoice_nr", invoice_nr)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("UStVAn_ID", UStVAn_ID)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("alternativeImport", alternativeImport)) Return list End Function @@ -1542,11 +1753,38 @@ Public Class cMSEInvoices Return SQL.doSQLVarList(sqlstr, "FMZOLL", , list) End Function + 'Dim inv As New cMSEInvoices(invoiceID, invoiceDate, customerID) + Public Function SAVEBYCUSTOMERIDDATE() As Boolean + Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() + + Dim sqlstr = " BEGIN TRAN IF EXISTS(SELECT * FROM tblMSEInvoices WHERE invoice_date=@invoice_date AND invoice_id = @invoice_id AND customer_number = @customer_number) " & + " BEGIN " & getUpdateCmdBYCustomeridDate() & " END " & + " Else " & + " BEGIN " & getInsertCmd() & " END " & + " commit tran " + + Return SQL.doSQLVarList(sqlstr, "FMZOLL", , list) + End Function + + + Public Function SAVEBYCountry() As Boolean + Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() + + Dim sqlstr = " BEGIN TRAN IF EXISTS(SELECT * FROM tblMSEInvoices WHERE invoice_date=@invoice_date AND invoice_id = @invoice_id AND customer_number = @customer_number) " & + " BEGIN " & getUpdateCmdBYCustomeridDateCountry() & " END " & + " Else " & + " BEGIN " & getInsertCmd() & " END " & + " commit tran " + + Return SQL.doSQLVarList(sqlstr, "FMZOLL", , list) + End Function + + Public Sub LOAD() Try hasEntry = False Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL() - Using cmd As New SqlCommand("SELECT * FROM tblMSEInvoices WHERE name=@name AND invoice_id = @invoice_id", conn) + Using cmd As New SqlCommand("SELECT * FROM tblMSEInvoices WHERE invoice_date=@invoice_date AND invoice_id = @invoice_id", conn) cmd.Parameters.AddWithValue("@name", name) cmd.Parameters.AddWithValue("@invoice_id", invoice_id) Dim dr = cmd.ExecuteReader() @@ -1572,6 +1810,71 @@ Public Class cMSEInvoices End Sub + Public Sub LOADBYCUSTOMERIDETC() + Try + hasEntry = False + Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL() + Using cmd As New SqlCommand("SELECT * FROM tblMSEInvoices WHERE customer_number=@customer_number AND invoice_id = @invoice_id AND invoice_date = @invoice_date", conn) + cmd.Parameters.AddWithValue("@customer_number", customer_number) + cmd.Parameters.AddWithValue("@invoice_id", invoice_id) + cmd.Parameters.AddWithValue("@invoice_date", invoice_date) + Dim dr = cmd.ExecuteReader() + If dr.Read Then + For Each li In getParameterList() + Dim propInfo As PropertyInfo = Me.GetType.GetProperty(li.Scalarvariable) + + If dr.Item(li.Text) Is DBNull.Value Then + propInfo.SetValue(Me, Nothing) + Else + propInfo.SetValue(Me, dr.Item(li.Text)) + End If + + Next + hasEntry = True + End If + dr.Close() + End Using + End Using + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + End Sub + + + Public Sub LOADBYCOUNTRY() + Try + hasEntry = False + Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL() + Using cmd As New SqlCommand("SELECT * FROM tblMSEInvoices WHERE customer_number=@customer_number AND country = @country AND invoice_date = @invoice_date AND invoice_nr = @invoice_nr", conn) + cmd.Parameters.AddWithValue("@customer_number", customer_number) + cmd.Parameters.AddWithValue("@country", country) + cmd.Parameters.AddWithValue("@invoice_date", invoice_date) + cmd.Parameters.AddWithValue("@invoice_nr", invoice_nr) + Dim dr = cmd.ExecuteReader() + If dr.Read Then + For Each li In getParameterList() + Dim propInfo As PropertyInfo = Me.GetType.GetProperty(li.Scalarvariable) + + If dr.Item(li.Text) Is DBNull.Value Then + propInfo.SetValue(Me, Nothing) + Else + propInfo.SetValue(Me, dr.Item(li.Text)) + End If + + Next + hasEntry = True + End If + dr.Close() + End Using + End Using + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + End Sub + + + + Public Function getUpdateCmd() As String Try @@ -1592,6 +1895,47 @@ Public Class cMSEInvoices Return "" End Function + 'Dim inv As New cMSEInvoices(invoiceID, invoiceDate, customerID) + + Public Function getUpdateCmdBYCustomeridDateCountry() As String + Try + Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() + + Dim str As String = "" + For Each i In list + If Not i.isPrimaryParam Then + str &= "[" & i.Text & "] = @" & i.Scalarvariable & "," '.Replace("-", "").Replace(" ", "") & "," + End If + Next + str = str.Substring(0, str.Length - 1) 'wg. ',' + Return (" UPDATE tblMSEInvoices SET " & str & " WHERE customer_number=@customer_number AND country = @country AND invoice_date = @invoice_date AND invoice_nr = @invoice_nr ") + + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + Return "" + End Function + + + Public Function getUpdateCmdBYCustomeridDate() As String + Try + Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() + + Dim str As String = "" + For Each i In list + If Not i.isPrimaryParam Then + str &= "[" & i.Text & "] = @" & i.Scalarvariable & "," '.Replace("-", "").Replace(" ", "") & "," + End If + Next + str = str.Substring(0, str.Length - 1) 'wg. ',' + Return (" UPDATE tblMSEInvoices SET " & str & " WHERE invoice_date=@invoice_date AND invoice_id = @invoice_id AND customer_number = @customer_number ") + + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + Return "" + End Function + Public Function getInsertCmd() As String Try