' CompleteOrder() ' ---------------------------------------------------------------------------- ' Schließt die Prüfung ab und erstellt einen Lieferschein ' ' Returns: CompleteOrder : Boolean ' ---------------------------------------------------------------------------- ' Copyright (c) 2021 by Digital Data GmbH ' ' Digital Data GmbH • Ludwig-Rinn-Strasse 16 • D-35452 Heuchelheim ' Tel.: 0641/202360 • E-Mail: info-flow(at)digitaldata.works ' ---------------------------------------------------------------------------- ' Creation Date / Author: 01.09.2021 / JJ ' Version Date / Editor: 04.05.2021 / MP ' Version Number: 3.0.0.3 Function CompleteOrder() Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID) Set Conn = CWLStart.CurrentCompany.Connection Set Grid = mywin.Controls.Item(GRID_ID).Grid If MACRO_ARTICLE_COUNTER > 0 Then Dim MacroArticleReseted : MacroArticleReseted = False CheckMacroArticlesComplete() For MacroArrayIndex = 0 To Ubound(MACRO_ARTICLE_LIST, 2) If (MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_COMPLETE, MacroArrayIndex) = False) AND _ (MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_SCAN_FLAG, MacroArrayIndex) = True) Then questionText = "Der Package-Artikel [" & MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_NUMBER, MacroArrayIndex) & "] ist unvollständig!" & vbNewLine & vbNewLine Answer = MsgBox(questionText & "Soll das gesamte Package zurückgesetzt werden?", vbYesno + vbQuestion, DEFAULT_TITLE) If Answer = vbYes Then ResetValuesByMacroLineNumber MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_LINE_NUMBER, MacroArrayIndex) MacroArticleReseted = True Else CompletedPackages = Cint(InputBox("Wieviele Package-Artikel von insgesamt [" & MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_AMOUNT_REMAINING, MacroArrayIndex) & "] werden damit ausgeliefert?", "Anzahl fertige Packages", "0")) MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_AMOUNT_COMPLETED, MacroArrayIndex) = CompletedPackages End If End If If (MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_COMPLETE, MacroArrayIndex) = True) Then MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_AMOUNT_COMPLETED, MacroArrayIndex) = MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_AMOUNT_REMAINING, MacroArrayIndex) End If Next If MacroArticleReseted = True Then Answer = MsgBox("Einer oder mehrere Package-Artikel wurden zurückgesetzt. Soll die Lieferscheinerstellung abgebrochen werden?", vbYesno + vbQuestion, DEFAULT_TITLE) If Answer = vbYes Then CompleteOrder = False Exit Function End If End If ' Übertrage Macro-Daten zurück ins Grid TransferMacroData() End If ' Übertrage die Grid-Daten zurück in die Order-Datenstruktur TransferGridData() ' Eine letzte Möglichkeit die Auftragsdaten zu tunen UpdateOrderDataBeforeDelNote() Dim OrderId, AccountSQL, MandatorId, RunningNumber If DEBUG_ON = True Then AddDebugLine "Completing order.. " & vbNewline ShowDebugBox "CompleteOrder" End If OrderId = mywin.Controls.Item(ORDER_INPUT).ScreenContents AccountSQL = "SELECT DISTINCT c021 FROM t025 (NOLOCK) WHERE c044 = '" & OrderId & "' " & SQLQuery_OrderWhere Set AccountResult = Connection.Select(AccountSQL) If DEBUG_ON = True Then AddDebugLine "Querying for CustomerAccountId.. " & vbNewline AddDebugLine "Result Columns: " & AccountResult AddDebugLine "Result Rows: " & AccountResult.RowCount AddDebugLine "SQL: " & AccountSQL ShowDebugBox "CompleteOrder" End If MandatorId = AccountResult.Value("c021") RunningNumber = RUNNING_NUMBER_PREFIX & OrderId BelegKey = Cstr(DateDiff("s", "01/01/1970 00:00:00", Now)) ' ===================== KOPFDATEN ===================== Dim Request, URL, XML Dim NowObject : NowObject = Now Dim DateString : DateString = Year(NowObject) & "-" & GetLeftPad(Month(NowObject)) & "-" & GetLeftPad(Day(NowObject)) Dim TimeString : TimeString = GetLeftPad(Hour(NowObject)) & ":" & GetLeftPad(Minute(NowObject)) & ":" & GetLeftPad(Second(NowObject)) Dim UserNumber : UserNumber = Cwlstart.Currentuser.Number Dim ComputerName : ComputerName = GetWindowsEnvironment("COMPUTERNAME") ' === WEB SERVICES ======================= XML = "" XML = XML & "" XML = XML & "" XML = XML & "<__VORLAGE__T025>" XML = XML & "" & BelegKey & "" XML = XML & "" & MandatorId & "" XML = XML & "" & RunningNumber & "" XML = XML & "" & OrderId & "" XML = XML & "" & DateString & "" XML = XML & "" & UserNumber & "" XML = XML & "" & DateString & " " & TimeString & "" XML = XML & "" & ComputerName & "" XML = XML & "" & PACKTISCH_VERSION & "" XML = XML & "" ' === EXIM TABELLE ======================= HeadSQL = "INSERT INTO " & SQLDB_for_EXIM & "." & SQLHeadTB_for_EXIM & " " HeadSQL = HeadSQL & "(BELEGKEY, Kontonummer, Laufnummer, Auftragsnummer, Belegdatum) " HeadSQL = HeadSQL & "VALUES("& BelegKey &", '"& MandatorId &"', '"& RunningNumber &"', '"& OrderId &"', GETDATE())" HeadResult = Conn.ExecuteSQL(HeadSQL) If DEBUG_ON = True Then AddDebugLine "Inserting Head Data" & vbNewline AddDebugLine "Result: " & HeadResult AddDebugLine "SQL: " & HeadSQL ShowDebugBox "CompleteOrder" End If ' ===================== ENDE KOPFDATEN ===================== ' ============================ MITTEDATEN ============================ Dim ArticleNumber, AmountScanned, SerialNumber, StorageLocation, LineNumber For OrderArrayIndex = 0 To Ubound(ORDER_ARTICLE_DATA, 2): Do IsSerialNumberArticle = Cint(ORDER_ARTICLE_DATA(INDEX_IS_SERIAL_NUMBER, OrderArrayIndex)) ArticleNumber = ORDER_ARTICLE_DATA(INDEX_ARTICLE_NUMBER, OrderArrayIndex) SerialNumber = ORDER_ARTICLE_DATA(INDEX_SERIAL_NUMBER, OrderArrayIndex) AmountScanned = CInt(ORDER_ARTICLE_DATA(INDEX_AMOUNT_SCANNED, OrderArrayIndex)) LineNumber = CInt(ORDER_ARTICLE_DATA(INDEX_LINE_NUMBER, OrderArrayIndex)) DataType = CInt(ORDER_ARTICLE_DATA(INDEX_DATA_TYPE, OrderArrayIndex)) VKPreisEinzel = Replace(ORDER_ARTICLE_DATA(INDEX_PRICE_VK_EINZEL, OrderArrayIndex), ",", ".") If DEBUG_ON = True Then AddDebugLine "Processing Article: " & ArticleNumber AddDebugLine "SerialNumber: " & SerialNumber AddDebugLine "LineNumber: " & LineNumber AddDebugLine "DataType: " & DataType ShowDebugBox "CompleteOrder" End If ' Text-Artikel werden nicht übergeben If DataType = 3 Then Exit Do End If If PRINT_DOCUMENT_AFTER_COMPLETION = True Then StorageLocation = GetWinLineStorageLocation(ArticleNumber, SerialNumber, IsSerialNumberArticle) InternalArticleNumber = GetWinLineInternalProductNumber(ArticleNumber, SerialNumber) Else StorageLocation = 0 InternalArticleNumber = 0 End If ' === EXIM TABELLE ======================= MidSQL = "INSERT INTO " & SQLDB_for_EXIM & "." & SQLMiddleTB_for_EXIM & " " MidSQL = MidSQL & "(BELEGKEY, Artikelnummer, Hauptartikelnummer, Zeilennummer, Datentyp, Mengegeliefert, ChargeIdentnummer, Lagerort, Einzelpreis) " MidSQL = MidSQL & "VALUES (" & BelegKey & ", '" & ArticleNumber & "', '" & ArticleNumber & "', " If IsSerialNumberArticle = 1 Then MidSQL = MidSQL & LineNumber Else MidSQL = MidSQL & " NULL" End If MidSQL = MidSQL & ", '1', " & AmountScanned & ", '" & SerialNumber & "', " & StorageLocation& ", " & VKPreisEinzel & ")" MidResult = Conn.ExecuteSQL(MidSQL) ' === WEB SERVICES ======================= MidXML = "" MidXML = MidXML & "<__VORLAGE__T026>" MidXML = MidXML & "" & BelegKey & "" MidXML = MidXML & "" & InternalArticleNumber & "" MidXML = MidXML & "" & ArticleNumber & "" MidXML = MidXML & "" & LineNumber & "" MidXML = MidXML & "" & "1" & "" MidXML = MidXML & "" & AmountScanned & "" MidXML = MidXML & "" & SerialNumber & "" MidXML = MidXML & "" & StorageLocation & "" MidXML = MidXML & "" & VKPreisEinzel & "" MidXML = MidXML & "" If DEBUG_ON = True Then AddDebugLine "Inserting Middle Data" & vbNewline AddDebugLine "For Article " & ArticleNumber AddDebugLine "And Amount " & AmountScanned AddDebugLine "Result: " & MidResult & vbNewline AddDebugLine "SQL: " & MidSQL & vbNewline AddDebugLine "XML: " & MidXML ShowDebugBox "CompleteOrder" End If XML = XML & MidXML Loop While False: Next XML = XML & "" XML = Replace(XML, "__VORLAGE__", WEB_VORLAGE) XML = Replace(XML, "__TYPE__", WEB_TYPE) XML = Replace(XML, "__PRINT__", WEB_PRINT) XML = Replace(XML, "__OPTION__", WEB_OPTION) URL = "http://__SERVER__/ewlservice/import?User=__USER__&Password=__PASSWORD__&Company=__COMPANY__&Type=30&Vorlage=__VORLAGE__&Actioncode=__ACTIONCODE__&byref=0&Data=__DATA__" URL = Replace(URL, "__SERVER__", WEB_SERVER) URL = Replace(URL, "__USER__", WEB_USER) URL = Replace(URL, "__PASSWORD__", WEB_PASS) URL = Replace(URL, "__COMPANY__", WEB_COMPANY) URL = Replace(URL, "__VORLAGE__", WEB_VORLAGE) URL = Replace(URL, "__ACTIONCODE__", WEB_ACTIONCODE) URL = Replace(URL, "__DATA__", XML) If DEBUG_ON = True Then AddDebugLine "Sending Request to WebServices.." AddDebugLine "URL: " & URL AddDebugLine "WEB_PRINT: " & WEB_PRINT AddDebugLine "WEB_OPTION: " & WEB_OPTION ShowDebugBox "CompleteOrder" End If ' ======================= ENDE MITTEDATEN ======================= If PRINT_DOCUMENT_AFTER_COMPLETION = True Then ' ===================== HTTP REQUEST ===================== Set Request = CreateObject("MSXML2.XMLHTTP") Request.Open "POST", URL, False Request.Send Response = Request.ResponseText Status = Request.Status If DEBUG_ON = True Then AddDebugLine "Response from WebServices!" AddDebugLine "Status: " & Status AddDebugLine "Body: " & Response ShowDebugBox "CompleteOrder" End If ' =================== ENDE HTTP REQUEST ================== Error = False Message = "" If Status = 200 Then If TestIsWebserviceResponseSuccessful(Response) = True Then Message = "Lieferschein wurde übertragen!" Else Error = True Message = "Lieferschein wurde nicht übertragen! Fehlerdetails: " & vbNewline & vbNewline & Response End If Else Error = True Message = "Fehler beim Zugriff auf Webservices aufgetreten!" & vbNewline & vbNewline & "Status: " & Status End If If Error = False Then MsgBox Message, vbInformation, DEFAULT_TITLE CompleteOrder = True Else MsgBox Message, vbExclamation, DEFAULT_TITLE & " - Fehler bei Abschluss" CompleteOrder = False End If Else CompleteOrder = True End If End Function