From 926dd739c0401c290d7728b7126ceb69fc78a165 Mon Sep 17 00:00:00 2001 From: Thorsten Schmitz Date: Wed, 8 Jul 2026 23:03:56 +0200 Subject: [PATCH] Export EON_CRM_BP DU: packages uniorg.eon.crm.bp, uniorg.eon.crm.bp.metadata, uniorg.eon.crm.bp.v1 --- .../bp/metadata/CREATE_BANK_SEARCH_TABLES.sql | 124 ++ .../crm/bp/metadata/CREATE_UO_CRM_DATA_BP.sql | 38 + uniorg/eon/crm/bp/v1/duplicate-bp.xsjs | 171 +++ uniorg/eon/crm/bp/v1/post-bp.xsjs | 1320 +++++++++++++++++ 4 files changed, 1653 insertions(+) create mode 100644 uniorg/eon/crm/bp/metadata/CREATE_BANK_SEARCH_TABLES.sql create mode 100644 uniorg/eon/crm/bp/metadata/CREATE_UO_CRM_DATA_BP.sql create mode 100644 uniorg/eon/crm/bp/v1/duplicate-bp.xsjs create mode 100644 uniorg/eon/crm/bp/v1/post-bp.xsjs diff --git a/uniorg/eon/crm/bp/metadata/CREATE_BANK_SEARCH_TABLES.sql b/uniorg/eon/crm/bp/metadata/CREATE_BANK_SEARCH_TABLES.sql new file mode 100644 index 0000000..1d2925e --- /dev/null +++ b/uniorg/eon/crm/bp/metadata/CREATE_BANK_SEARCH_TABLES.sql @@ -0,0 +1,124 @@ +CREATE COLUMN TABLE "INTEGRATION_DATA"."BANKS" ("COUNTRYCODE" VARCHAR(3) NOT NULL , + "BANKCODE" VARCHAR(20), + "BANKNAME" VARCHAR(100), + "SWIFTNO" VARCHAR(20), + "CITY" VARCHAR(100)) UNLOAD PRIORITY 5 AUTO MERGE ; + +/* BANKS_SCHEMA */ +DROP TABLE "INTEGRATION_DATA"."BANKS_SCHEMA"; + +create column table "INTEGRATION_DATA"."BANKS_SCHEMA"( "COUNTRY" VARCHAR (3) null, + "LENGTH" SMALLINT null, + "START" SMALLINT null, + "FULLLENGHTH" SMALLINT null); + + +truncate table "INTEGRATION_DATA"."BANKS_SCHEMA" ; +insert into "INTEGRATION_DATA"."BANKS_SCHEMA" values('GB',6,9,22); +insert into "INTEGRATION_DATA"."BANKS_SCHEMA" values('DE',8,5,22); +insert into "INTEGRATION_DATA"."BANKS_SCHEMA" values('AT',5,5,20); +insert into "INTEGRATION_DATA"."BANKS_SCHEMA" values('FR',10,5,27); + +insert into "INTEGRATION_DATA"."BANKS_SCHEMA" values('IT',10,6,27); +insert into "INTEGRATION_DATA"."BANKS_SCHEMA" values('CH',5,5,21); +insert into "INTEGRATION_DATA"."BANKS_SCHEMA" values('DK',5,4,18); +insert into "INTEGRATION_DATA"."BANKS_SCHEMA" values('NL',4,5, 18); +insert into "INTEGRATION_DATA"."BANKS_SCHEMA" values('BE',3,5,16); +insert into "INTEGRATION_DATA"."BANKS_SCHEMA" values('LU',4,5,20); +insert into "INTEGRATION_DATA"."BANKS_SCHEMA" values('CZ',4,5,24); +insert into "INTEGRATION_DATA"."BANKS_SCHEMA" values('SE',4,5,24); + +insert into "INTEGRATION_DATA"."BANKS_SCHEMA" values('PL',8,5,28); + +insert into "INTEGRATION_DATA"."BANKS_SCHEMA" values('LT',5,5,20); + + + +ALTER FUNCTION "INTEGRATION_DATA".EON_BP_GETBANKDETAILS (IBAN NVARCHAR(100)) +RETURNS TABLE +( + IBAN NVARCHAR(100), + COUNTRY NVARCHAR(2), + BANKCODE NVARCHAR(10), + BANKNAME NVARCHAR(250), + SWIFTNO NVARCHAR(100), + ACCOUNT NVARCHAR(100) +) +LANGUAGE SQLSCRIPT +SQL SECURITY INVOKER + +AS +BEGIN + -- USING SQLSCRIPT_PRINT as LIB; + + DECLARE IBAN_BANKCODE VARCHAR(10) ; + DECLARE IBAN_COUNTRY VARCHAR(2) ; + DECLARE STARTPARAM SMALLINT = 1; + DECLARE LENGTHPARAM SMALLINT = 1; + DECLARE BANKNAMEPARAM NVARCHAR(250); + DECLARE SWIFTNOPARAM NVARCHAR(100) = ''; + DECLARE ACCOUNT_PARAM NVARCHAR(100); + + IBAN := REPLACE(:IBAN,' ',''); + IBAN_COUNTRY := SUBSTRING (:IBAN, 1, 2); + + SELECT "START" into STARTPARAM DEFAULT 1 FROM "INTEGRATION_DATA"."BANKS_SCHEMA" WHERE COUNTRY = :IBAN_COUNTRY; + SELECT "LENGTH" into LENGTHPARAM DEFAULT 1 FROM "INTEGRATION_DATA"."BANKS_SCHEMA" WHERE COUNTRY = :IBAN_COUNTRY; + + IBAN_BANKCODE := SUBSTRING (:IBAN, :STARTPARAM, :LENGTHPARAM); + ACCOUNT_PARAM := SUBSTRING(:IBAN, :STARTPARAM + :LENGTHPARAM); + + SELECT TOP 1 "BANKNAME" into BANKNAMEPARAM DEFAULT '' + FROM "INTEGRATION_DATA"."BANKS" + WHERE COUNTRYCODE = :IBAN_COUNTRY AND BANKCODE = :IBAN_BANKCODE + ORDER BY SWIFTNO DESC ; + + + SELECT TOP 1 "SWIFTNO" into SWIFTNOPARAM DEFAULT '' + FROM "INTEGRATION_DATA"."BANKS" + WHERE COUNTRYCODE = :IBAN_COUNTRY AND BANKCODE = :IBAN_BANKCODE + ORDER BY SWIFTNO DESC ; + + + + RETURN + SELECT :IBAN as IBAN, :IBAN_COUNTRY as COUNTRY, :IBAN_BANKCODE AS BANKCODE, LEFT(:BANKNAMEPARAM, 250) as BANKNAME, :SWIFTNOPARAM as SWIFTNO, + :ACCOUNT_PARAM as ACCOUNT + FROM DUMMY; + + + +END; + + + + +/* +--SELECT * FROM "INTEGRATION_DATA".EON_BP_GETBANKDETAILS('GB19 REVO 00997000245823'); + +-- select * FROM "A19753_EON_P01".ODSC WHERE "CountryCod" = 'AT'-- "BankCode" = '60000'; + +SELECT * FROM "INTEGRATION_DATA".EON_BP_GETBANKDETAILS('AT026000000001349870'); + +https://de.wikipedia.org/wiki/Internationale_Bankkontonummer#IBAN-Struktur_in_verschiedenen_L%C3%A4ndern + +Depp bbbb bbbb kkkk kkkk kk +Osterreich ATpp bbbb bkkk kkkk kkkk +Schweiz CHpp bbbb bkkk kkkk kkkk k +Danemark DKpp bbbb kkkk kkkk kK +Niederlande NLpp bbbb kkkk kkkk kk +Belgien BEpp bbbk kkkk kkKK +Italien ITpp Kbbb bbss sssk kkkk kkkk kkk +Luxemburg LUpp bbbk kkkk kkkk kkkk +Tschechien CZpp bbbb kkkk kkkk kkkk kkkk +Polen PLpp bbbs sssK kkkk kkkk kkkk kkkk +Schweden SEpp bbbk kkkk kkkk kkkk kkkK +Frankreich FRpp bbbb bsss sskk kkkk kkkk kKK + +LT Litauen 20 LTpp bbbb bkkk kkkk kkkk + + +Vereinigtes Konigreich (GB) GBpp bbbb ssss sskk kkkk kk + + +*/ diff --git a/uniorg/eon/crm/bp/metadata/CREATE_UO_CRM_DATA_BP.sql b/uniorg/eon/crm/bp/metadata/CREATE_UO_CRM_DATA_BP.sql new file mode 100644 index 0000000..cb0d5f6 --- /dev/null +++ b/uniorg/eon/crm/bp/metadata/CREATE_UO_CRM_DATA_BP.sql @@ -0,0 +1,38 @@ + +CREATE SCHEMA NICEPORTAL; + +CREATE SEQUENCE "NICEPORTAL"."SEQ_CRMBP_ID"; +CREATE SEQUENCE "NICEPORTAL"."SEQ_MAND_ID"; + +--DROP TABLE "NICEPORTAL"."UO_CRM_DATA_BP"; + +CREATE COLUMN TABLE "NICEPORTAL"."UO_CRM_DATA_BP" ("ID" BIGINT CS_FIXED NOT NULL , + "ID_MSD" VARCHAR(50) NOT NULL , + "ID_CRM" VARCHAR(30) NOT NULL , + "TYPE" VARCHAR(1) NOT NULL , + "BPGROUP" VARCHAR(10) NOT NULL , + "SALUTATION" VARCHAR(20), + "TITLE" VARCHAR(20), + "NAME" VARCHAR(50) NOT NULL , + "SURNAME" VARCHAR(50), + "PHONE" VARCHAR(30), + "MOBILE_PHONE" VARCHAR(30), + "EMAIL" VARCHAR(100), + "ADDRESS_JSON" NCLOB MEMORY THRESHOLD 1000, + "IBAN" VARCHAR(40), + "BIC" VARCHAR(10), + "SEPA_MANDATE_ID" VARCHAR(30), + "SIGNATURE_DATE" VARCHAR(30), + "ACCOUNT_OWNER" VARCHAR(50), + "STREET" VARCHAR(50), + "STREET_NO" VARCHAR(10), + "ZIP_CODE" VARCHAR(10), + "CITY" VARCHAR(30), + "JSONRAW" NCLOB MEMORY THRESHOLD 1000, + "B1_CARDCODE" VARCHAR(50), + "RESPONSE_STATUS" VARCHAR(50), + "RESPONSE_MESSAGE" NCLOB MEMORY THRESHOLD 1000, + "CREATE_TS" LONGDATE CS_LONGDATE DEFAULT CURRENT_TIMESTAMP NOT NULL , + "UPDATE_TS" LONGDATE CS_LONGDATE NOT NULL , + "ERROR_MESSAGE" VARCHAR(500), + PRIMARY KEY ("ID")) UNLOAD PRIORITY 5 AUTO MERGE; diff --git a/uniorg/eon/crm/bp/v1/duplicate-bp.xsjs b/uniorg/eon/crm/bp/v1/duplicate-bp.xsjs new file mode 100644 index 0000000..f311dca --- /dev/null +++ b/uniorg/eon/crm/bp/v1/duplicate-bp.xsjs @@ -0,0 +1,171 @@ +var slib = $.import("uniorg.ServiceLayer", "B1SLLogic"); +var slfwlib = $.import("uniorg.ServiceLayer", "B1SLFramework"); +var datetimelib = $.import("uniorg.libs", "datetime"); +var logginglib = $.import("uniorg.libs", "uologging"); +var slDest = $.import("uniorg.destinations", "uodestlib"); +var bpmaplib = $.import("uniorg.eon.libs", "bpmapping"); +var copybplib = $.import("uniorg.eon.libs", "copybp"); + +var ParDebug = false; +var mCardCode = ""; +var output = {}; +var outMessages = []; +var outMsg = {}; +var outStatus = "success"; +var myDebug = {}; +var UserName = slDest.uniorg_eon_bp_v1_UserName; +var UserPass = slDest.uniorg_eon_bp_v1_UserPass; +var UserComp = slDest.uniorg_eon_bp_v1_UserComp; +var service_version = '1.1'; + +function setOutputMessage() { + + $.response.contentType = "application/json"; + $.response.setBody(JSON.stringify(output)); + $.response.status = $.net.http.OK; +} + +function pad(number) { + var r = String(number); + if (r.length === 1) { + r = '0' + r; + } + return r; +} + +function convertToISODate(dateString) { + try { + //var options = { year: 'numeric', month: '2-digit', day: '2-digit' }; + var d = new Date(dateString); + if (!isNaN(d)) { + //var convDate = d.toLocaleDateString('de-DE', options); + var convDate = d.getFullYear() + '-' + pad(d.getMonth() + 1) + '-' + pad(d.getDate()); + return convDate; + } else { + return dateString; + } + + } catch (err) { + return (err); + } +} + + + +function getnextvalsepaid() { + var conn = $.db.getConnection(); + var pstmt; + var query = "select lpad(\"NICEPORTAL\".\"SEQ_MAND_ID\".NEXTVAL ,10,'0') from dummy"; + pstmt = conn.prepareStatement(query); + var rs = pstmt.executeQuery(); + if (!rs.next()) { + outMsg = {}; + outMsg.method = "getnexval from sequence error"; + outMsg.status = "error"; + // outMsg.message = e.message; + outMessages.push(outMsg); + } else { + return rs.getString(1); + } + rs.close(); + pstmt.close(); + conn.close(); +} + + + +function mockbuildBPObj() { + var bpObj = {}; + bpObj.Series = series_b2b; + bpObj.CompanyPrivate = "I"; // JbpObj.type.toString(); + bpObj.CardName = 'Burgmueller'; + //bpObj.CardType = 'C'; + //bpObj.GroupCode = 100; // JbpObj.group.toString(); + //bpObj.Phone1 = JbpObj.phone.toString(); + //bpObj.Cellular = JbpObj.mobile_phone.toString(); + //bpObj.EmailAddress = JbpObj.email.toString(); + bpObj.U_EON_ID_CRM = 'BP777888999'; + bpObj.U_EON_ASSU = 'N'; + return bpObj; +} + + + +function copyBPlib() { + + var output = copybplib.copyBP(ParDebug,mCardCode); + +// outMessages.push(outMsg); +// output.Messages = outMessages; + + //output.debug = myDebug; + /* var vals = {}; + var data = []; + $.trace.debug("DEBUG body.Get: " + JSON.stringify(myDebug)); + vals.messages = outMessages; + //setBPCardCode(mynextval,retUpsertBP.CardCode); + //vals.RespnUPSERJ = JSON.stringify(retUpsertBP); + if (ParDebug) { + vals.debug = output; + } + //vals.mode = JSON.stringify(retUpsertBP.mode); + data.push(vals);*/ + var okbody = JSON.stringify(output); + //var body = JSON.stringify(test); + $.response.contentType = 'application/json'; + $.response.setBody(okbody); + $.response.status = $.net.http.OK; + + //setOutputMessage(); + //return 0; + +} + + + +function getnextval() { + var conn = $.db.getConnection(); + var pstmt; + var query = "select \"NICEPORTAL\".\"SEQ_CRMBP_ID\".NEXTVAL from dummy"; + pstmt = conn.prepareStatement(query); + var rs = pstmt.executeQuery(); + if (!rs.next()) { + outMsg = {}; + outMsg.method = "getnexval from sequence error"; + outMsg.status = "error"; + // outMsg.message = e.message; + outMessages.push(outMsg); + } else { + return rs.getString(1); + } + rs.close(); + pstmt.close(); + conn.close(); +} + +function setBPCardCode(tableid, bpcardcode) { + var conn = $.db.getConnection(); + var pstmt; + var query = "update \"NICEPORTAL\".\"UO_CRM_DATA_BP\" set B1_CARDCODE = '" + bpcardcode + "' where ID =" + tableid; + pstmt = conn.prepareStatement(query); + // pstmt.setString(1,bpcardcode); + // pstmt.setString(2,tableid); + var rs = pstmt.executeUpdate(); + myDebug.UpdateQuery = query; + + pstmt.close(); + conn.commit(); + conn.close(); + +} + +//testmain(); + +// begin org + +//var content = $.request.body.asString(); +ParDebug = $.request.parameters.get('debug') && $.request.parameters.get('debug').toLowerCase() === "true"; +mCardCode = $.request.parameters.get('cardcode'); +copyBPlib(); +//PutBPDataInTable(); +//ende org diff --git a/uniorg/eon/crm/bp/v1/post-bp.xsjs b/uniorg/eon/crm/bp/v1/post-bp.xsjs new file mode 100644 index 0000000..0a3835f --- /dev/null +++ b/uniorg/eon/crm/bp/v1/post-bp.xsjs @@ -0,0 +1,1320 @@ +//Letzte Änderung 08.12.2020 (v6.3) Achtung nun Adressmapping über CRM ID +//Letzte Änderung 11.01.2021 v6.4 Implementier duplicatebp für BFV Verträge +// 07.02.2022 Anpassung IT IBAN +// 16.02.2022 IBAN Update nur noch wenn IBAN in Payload vorhanden +// 01.06.2022 Language Code Implementierung +// 19.09.2022 Adress2 Mapping +// 18.10.2022 Versandart wird Pflichtfeld in der GP SST (CBU) +// https://jira.eon.com/browse/EMPEPI1-124 +// 18.11.2022 8.2 CBU Banken aus IBAN ableiten +// https://jira.eon.com/browse/EMPEPI1-130 +// 24.01.2023 CBU: Existenz einer E-Mail-Adresse bei Versandart M prüfen +// https://jira.eon.com/browse/EMPEPI1-130 +// 29.06.2023 https://jira.eon.com/browse/EMPEPI1-281 Prüfung ob Lieferant exisitiert und Update BP -L +// 03.11.2023 Bugfix copybp -L (TS) +// 09.11.2023 fix B2B Adress BuildingFloorRoom +// 25.01.2024 CSV Versandart soll nicht überschrieben werden -> Entfernt am 17.11.2025 +// 23.07.2024 BUS-7580 Anpassung Einzugsermächtigung auch auf tNO +// 13.11.2024 BUS-9352 Anpassung Zahlungsbedingung +// 28.11.2024 Beim GP muss der Firmenname > 50 Zeichen angepasst werden, das alles >50Zeichen künfitg in Firmenname 2 statt Adresszeile 3 +// 14.03.2025 BUS-11342 SwiftNo/BIC im Update BankAccounts ergänzt +// 23.05.2025 BUS-12158 Erweiterung der Geschäftspartner-API um Parameter f. Buyer/Seller/Leitweg-ID +// 03.06.2025 BUS-12296 New Endpoint URLs for CRM interfaces +// 21.07.2025 Signature Date Pflichtangabe bei SEPA Mandat +// 03.09.2025 PFT-337 GP-API liefert BT-18 Geschäftszeichen für BiMA (Object ID) +// 11.11.2025 PFT-728 Umstellung ShippingType Validierung von OUTPUT_RULES auf SPOOL_TYPES +// 01.12.2025 PFT-931 [BIMA] Anpassung der GP-API zum Empfang mehrere Adressen per Request +// 29.05.2026 PFT-1845 Austausch U_EON_RECACC_PAY und U_EON_RECACC_REC + +var slib = $.import("uniorg.ServiceLayer", "B1SLLogic"); +var slDest = $.import("uniorg.destinations", "uodestlib"); +var bpbl = $.import("uniorg.eon.libs", "bp_businesslogic"); +var copybplib = $.import("uniorg.eon.libs", "copybp"); + +var ParDebug = false; +var output = {}; +var outMessages = []; +var outErrorMessages = []; +var outMsg = {}; +var outStatus = "success"; +var myDebug = {}; +var UserName = slDest.uniorg_eon_nice_v1_UserName; +var UserPass = slDest.uniorg_eon_nice_v1_UserPass; +var UserComp = slDest.uniorg_eon_nice_v1_UserComp; +var series_b2c = 68; +var series_b2b = 69; +var series_b2m = 70; +var groupcode_b2c = 100; +var groupcode_b2b = 102; +var groupcode_b2m = 103; +var cmpprivate_b2c = "cPrivate"; +var cmpprivate_b2b = "cCompany"; +var cmpprivate_b2m = "cCompany"; +var use_iban = false; +var service_version = '10.3'; + +function setOutputMessage() { + + $.response.contentType = "application/json"; + $.response.setBody(JSON.stringify(output)); + $.response.status = $.net.http.OK; +} + +function pad(number) { + var r = String(number); + if (r.length === 1) { + r = '0' + r; + } + return r; +} + +function convertToISODate(dateString) { + try { + //var options = { year: 'numeric', month: '2-digit', day: '2-digit' }; + var d = new Date(dateString); + if (!isNaN(d)) { + //var convDate = d.toLocaleDateString('de-DE', options); + var convDate = d.getFullYear() + '-' + pad(d.getMonth() + 1) + '-' + pad(d.getDate()); + return convDate; + } else { + return dateString; + } + + } catch (err) { + return (err); + } +} + +function checkSupplierExist(cardcode) { + + var suppcardcode = cardcode + '-L'; + var conn = $.db.getConnection(); + var pstmt; + var exists = false; + //var query = "SELECT T0.\"U_EON_RECACC_REC\" FROM \"A19753_P01_TEST03\".\"@EON_PGN\" T0 WHERE T0.\"Code\" = ?"; + //vendeor var query = "SELECT T0.\"U_EON_RECACC_REC\" FROM \"XXREPXX\".\"@EON_PGN\" T0 WHERE T0.\"Code\" = ?"; + var query = "SELECT T0.\"CardCode\" FROM \"XXREPXX\".\"OCRD\" T0 WHERE T0.\"CardCode\" = ?"; + query = query.replace(/XXREPXX/g, UserComp); + pstmt = conn.prepareStatement(query); + + pstmt.setString(1, suppcardcode); + + var rs = pstmt.executeQuery(); + exists = rs.next(); + + rs.close(); + pstmt.close(); + conn.close(); + return exists; +} + +function getCustRECACC(custpgnr) { + var conn = $.db.getConnection(); + var pstmt; + //var query = "SELECT T0.\"U_EON_RECACC_REC\" FROM \"A19753_P01_TEST03\".\"@EON_PGN\" T0 WHERE T0.\"Code\" = ?"; + //vendeor var query = "SELECT T0.\"U_EON_RECACC_REC\" FROM \"XXREPXX\".\"@EON_PGN\" T0 WHERE T0.\"Code\" = ?"; + var query = "SELECT T0.\"U_EON_RECACC_REC\" FROM \"XXREPXX\".\"@EON_PGN\" T0 WHERE T0.\"Code\" = ?"; + query = query.replace(/XXREPXX/g, UserComp); + pstmt = conn.prepareStatement(query); + + pstmt.setString(1, custpgnr); + + var rs = pstmt.executeQuery(); + if (!rs.next()) { + // outMsg = {}; + // outMsg.method = "getnexval from sequence error"; + // outMsg.status = "error"; + // outMsg.message = e.message; + //outMessages.push(outMsg); + } else { + return rs.getString(1); + } + rs.close(); + pstmt.close(); + conn.close(); +} + +function getLanguageCode(ISOCODE) { + var conn = $.db.getConnection(); + var pstmt; + //var query = "SELECT T0.\"U_EON_RECACC_REC\" FROM \"A19753_P01_TEST03\".\"@EON_PGN\" T0 WHERE T0.\"Code\" = ?"; + //vendeor var query = "SELECT T0.\"U_EON_RECACC_REC\" FROM \"XXREPXX\".\"@EON_PGN\" T0 WHERE T0.\"Code\" = ?"; + var query = 'SELECT T0."Code" FROM "XXREPXX".OLNG T0 WHERE upper(T0."ShortName") = upper(?)'; + query = query.replace(/XXREPXX/g, UserComp); + pstmt = conn.prepareStatement(query); + + pstmt.setString(1, ISOCODE); + + var rs = pstmt.executeQuery(); + if (!rs.next()) { + // outMsg = {}; + // outMsg.method = "getnexval from sequence error"; + // outMsg.status = "error"; + // outMsg.message = e.message; + //outMessages.push(outMsg); + } else { + return rs.getString(1); + } + rs.close(); + pstmt.close(); + conn.close(); +} + +function getPaymentTerm(PaymentName) { + var conn = $.db.getConnection(); + var pstmt; + //var query = "SELECT T0.\"U_EON_RECACC_REC\" FROM \"A19753_P01_TEST03\".\"@EON_PGN\" T0 WHERE T0.\"Code\" = ?"; + //vendeor var query = "SELECT T0.\"U_EON_RECACC_REC\" FROM \"XXREPXX\".\"@EON_PGN\" T0 WHERE T0.\"Code\" = ?"; + var query = 'SELECT T0."GroupNum" FROM "XXREPXX".OCTG T0 WHERE upper(T0."PymntGroup") = upper(?)'; + query = query.replace(/XXREPXX/g, UserComp); + pstmt = conn.prepareStatement(query); + + pstmt.setString(1, PaymentName); + + var rs = pstmt.executeQuery(); + if (!rs.next()) { + throw new Error(PaymentName + " not found in SAP B1 Payment Terms(OCTG)."); + } else { + return rs.getInteger(1); + } + rs.close(); + pstmt.close(); + conn.close(); +} + +function splitcardname(mycardname) { + var mycardnamenew = []; + if (mycardname.length > 50) { + var mycardname1 = mycardname.substring(0, 50); + var mylastindex1 = mycardname1.lastIndexOf(' '); + var mylastindex2 = mycardname1.lastIndexOf('-'); + var mylastindex3 = mycardname1.lastIndexOf('&'); + var mylastindex = Math.max(mylastindex1, mylastindex2, mylastindex3); + mycardname1 = mycardname.substring(0, mylastindex); + var mycardname2 = mycardname.substring(mylastindex + 1, 100); + mycardnamenew.push(mycardname1); + mycardnamenew.push(mycardname2); + } else { + mycardnamenew.push(mycardname); + mycardnamenew.push(""); + } + return mycardnamenew; +} + +function convertAdrType(adrtype) { + switch (adrtype) { + case '1': + case 'S': + return 'bo_ShipTo'; + case '2': + case '3': + case 'B': + return 'bo_BillTo'; + default: + return 'bo_BillTo'; + } +} + +function getnextvalsepaid() { + var conn = $.db.getConnection(); + var pstmt; + var query = "select lpad(\"NICEPORTAL\".\"SEQ_MAND_ID\".NEXTVAL ,10,'0') from dummy"; + pstmt = conn.prepareStatement(query); + var rs = pstmt.executeQuery(); + if (!rs.next()) { + outMsg = {}; + outMsg.method = "getnexval from sequence error"; + outMsg.status = "error"; + // outMsg.message = e.message; + outMessages.push(outMsg); + } else { + return rs.getString(1); + } + rs.close(); + pstmt.close(); + conn.close(); +} + +function parseIBAN(iban) { + + var conn = $.hdb.getConnection(); + try { + var myCountry = iban.substring(0, 2); + var rs1 = conn.executeQuery('SELECT COUNT(\'A\') as COUNT_COUNTRY FROM "INTEGRATION_DATA".BANKS_SCHEMA WHERE COUNTRY = ? ; ', myCountry); + + if (rs1[0].COUNT_COUNTRY == 0) { + throw new Error(myCountry + " IBAN currently not supported."); + } + + var rs2 = conn.executeQuery('SELECT FULLLENGHTH FROM "INTEGRATION_DATA".BANKS_SCHEMA WHERE COUNTRY = ? ; ', myCountry); + + if (rs2[0].FULLLENGHTH !== iban.length) { + throw new Error(myCountry + " IBAN length invalid."); + } + + var rs = conn.executeQuery('SELECT * FROM "INTEGRATION_DATA".EON_BP_GETBANKDETAILS(?); ', iban); + + var bankDetails = { + BankCountry: rs[0].COUNTRY, + BankCode: rs[0].BANKCODE, + AccountNo: rs[0].ACCOUNT, + SwiftNo: rs[0].SWIFTNO, + BankName: rs[0].BANKNAME + }; + + return bankDetails; + + } catch (error) { + outMsg = {}; + outMsg.method = "parseIBAN"; + outMsg.status = "error"; + outMsg.message = error.message; + outMessages.push(outMsg); + outStatus = "error"; + return false; + } finally { + conn.close(); + } + + // throw new Error(myCountry + " IBAN currently not supported.") + + /* + var myCountry = iban.substring(0, 2); + switch (myCountry) { + case 'DE': + return { + BankCountry: myCountry, + BankCode: iban.substring(4, 12), + AccountNo: iban.substring(12, 23) + }; + case 'IT': + return { + BankCountry: myCountry, + BankCode: iban.substring(5, 10), + Branch: iban.substring(10, 15), + AccountNo: iban.substring(15, 27) + }; + default: + throw new Error(myCountry + " IBAN currently not supported.") + } + */ +} + +function checkShippingType(_shippingType, _schema) { + + var conn = $.hdb.getConnection(); + try { + conn.executeUpdate("SET SCHEMA \"" + _schema + "\""); + var rs = conn.executeQuery('SELECT "Code" FROM "@UO_SPOOL_TYPES" WHERE "Code"=? ', _shippingType); + + myDebug.checkShippingType = rs; + + return rs.length > 0; + + } catch (error) { + outMsg = {}; + outMsg.method = "checkShippingType"; + outMsg.status = "error"; + outMsg.message = error.message; + outMessages.push(outMsg); + return false; + } finally { + conn.close(); + } + +} + +function checkShippingTypeMail(_email) { + if (_email !== undefined) { + + if (_email.length === 0) { + outMsg = {}; + outMsg.method = "checkShippingTypeMail"; + outMsg.status = "error"; + outMsg.message = "E-mail address is missing but shipping type is Mail."; + outMessages.push(outMsg); + + outStatus = "error"; + + } + } else { + outMsg = {}; + outMsg.method = "checkShippingTypeMail"; + outMsg.status = "error"; + outMsg.message = "E-mail address is missing but shipping type is Mail."; + outMessages.push(outMsg); + outStatus = "error"; + } + +} + +function createBankIfMissing(iban, SESSIONID, NODEID) { + outMsg = {}; + outMsg.method = "checkBank"; + outMsg.status = "error"; + if (iban) { + var bankDetails = parseIBAN(iban); + + if (bankDetails === false) { + return; + } + var conn = $.hdb.getConnection(); + conn.executeUpdate("SET SCHEMA \"" + UserComp + "\""); + var rs = conn.executeQuery('SELECT "AbsEntry" FROM ODSC WHERE "BankCode"=? AND "CountryCod"=?', bankDetails.BankCode, bankDetails.BankCountry); + myDebug.queryBankResult = rs; + if (rs.length === 0) { + outMsg.status = "success"; + outMsg.message = "not exists"; + outMessages.push(outMsg); + + outMsg = {}; + outMsg.method = "createBank"; + var bankObj = { + "BankCode": bankDetails.BankCode, + "CountryCode": bankDetails.BankCountry, + "BankName": bankDetails.BankName, + "SwiftNo": bankDetails.SwiftNo + }; + myDebug.createBankObj = bankObj; + var responseCreate = slib.postDynamicEntity("Banks", JSON.stringify(bankObj), SESSIONID, NODEID); + outMsg.statuscode = responseCreate.status; + myDebug.responseBankCreate = JSON.parse(responseCreate.body.asString()); + if (responseCreate.status >= 200 && responseCreate.status < 300) { + outMsg.status = "success"; + outMessages.push(outMsg); + } else { + outMsg.status = "error"; + //outMsg.message = myDebug.responseBankCreate; + outStatus = "error"; + var slError = myDebug.responseBankCreate.error; + if (slError && slError.hasOwnProperty("code") && slError.message && slError.message.value) { + outMsg.message = slError.message.value + " (Code: " + slError.code.toString() + ")"; + } else { + outMsg.message = JSON.stringify(myDebug.responseBankCreate); + } + outMsg.response = myDebug.responseBankCreate; + outErrorMessages.push(outMsg); + } + } else { + outMsg.status = "success"; + outMsg.message = "exists"; + outMessages.push(outMsg); + + } + conn.close(); + } else { + outMsg.status = "error"; + outStatus = "error"; + outMsg.message = "IBAN is missing"; + outMessages.push(outMsg); + } +} + +function buildBPObj(JbpObj, SBOOBJ) { + var myseries = ''; + var mygroupcode = ''; + var mycardname = ''; + var mycmpprivate = ''; + var mybpcontactname = ''; + var defaultBillToAddressIdx = JbpObj.addresses.findIndex(function(adr) { return adr.type === "3" && adr.standard === "yes";}); + switch (JbpObj.group) { + case 'B2C': + mycardname = JbpObj.name.toString().trim() + ' ' + JbpObj.surname.toString().trim(); + mybpcontactname = JbpObj.name.toString().trim() + ' ' + JbpObj.surname.toString().trim(); + myseries = series_b2c; + mygroupcode = groupcode_b2c; + mycmpprivate = cmpprivate_b2c; + break; + case 'B2B': + //mycardname = JbpObj.name.toString(); + mycardname = defaultBillToAddressIdx === -1 ? JbpObj.addresses[0].address.toString() : JbpObj.addresses[defaultBillToAddressIdx].address.toString(); + mybpcontactname = JbpObj.name.toString().trim() + ' ' + JbpObj.surname.toString().trim(); + myseries = series_b2b; + mygroupcode = groupcode_b2b; + mycmpprivate = cmpprivate_b2b; + break; + case 'B2M': + //mycardname = JbpObj.name.toString(); + mycardname = defaultBillToAddressIdx === -1 ? JbpObj.addresses[0].address.toString() : JbpObj.addresses[defaultBillToAddressIdx].address.toString(); + mybpcontactname = JbpObj.name.toString().trim() + ' ' + JbpObj.surname.toString().trim(); + myseries = series_b2m; + mygroupcode = groupcode_b2m; + mycmpprivate = cmpprivate_b2m; + break; + default: + mycardname = JbpObj.name.toString().trim() + ' ' + JbpObj.surname.toString().trim(); + mybpcontactname = JbpObj.name.toString().trim() + ' ' + JbpObj.surname.toString().trim(); + myseries = series_b2c; + mygroupcode = groupcode_b2c; + mycmpprivate = cmpprivate_b2c; + } + + //var myaddress23 = splitcardname(mycardname); + + var bpObj = {}; + bpObj.Series = myseries; + bpObj.CompanyPrivate = mycmpprivate; // JbpObj.type.toString(); + bpObj.CardName = mycardname; + bpObj.CardType = 'C'; + bpObj.GroupCode = mygroupcode; // JbpObj.group.toString(); + bpObj.Phone1 = JbpObj.phone.toString(); + bpObj.Cellular = JbpObj.mobile_phone.toString(); + // To Do: Language Übersetzen + bpObj.LanguageCode = getLanguageCode(JbpObj.language_code.toString()); + if (JbpObj.vatid) { + bpObj.FederalTaxID = JbpObj.vatid.toString(); + } + if (JbpObj.bank_account.sepa_mandate.toString() === 'Ja') { + bpObj.PayTermsGrpCode = 13; + } + else if (JbpObj.payment_term) + { + bpObj.PayTermsGrpCode = getPaymentTerm(JbpObj.payment_term); + } + + bpObj.EmailAddress = JbpObj.email.toString(); + bpObj.U_EON_ID_CRM = JbpObj.id_crm.toString(); + bpObj.U_EON_ID_CRM_INTERNAL = JbpObj.id_msd.toString(); + + if (JbpObj.shipping_type) { + bpObj.U_UO_OUTPUT_VSARTAR = JbpObj.shipping_type.toString(); + } + + if (!JbpObj.pgnr) { + bpObj.U_EON_ASSU = 'N'; + bpObj.Affiliate = 'tNO'; + } + + if (JbpObj.pgnr) { + bpObj.U_EON_PGN = JbpObj.pgnr.toString(); + bpObj.DebitorAccount = getCustRECACC(JbpObj.pgnr.toString()); + bpObj.U_EON_ASSU = 'Y'; + bpObj.Affiliate = 'tYES'; + } + + if (JbpObj.res_prop === true) { + bpObj.U_EON_WVB = 'Y'; + } + + if (JbpObj.res_prop === false) { + bpObj.U_EON_WVB = 'N'; + } + + bpObj.U_UO_EDI_BUYER_ID = JbpObj.e_invoice_buyerid; + bpObj.U_UO_EDI_SELLER_ID = JbpObj.e_invoice_sellerid; + bpObj.U_UO_EDI_ROUTING_ID = JbpObj.e_invoice_routingid; + bpObj.U_UO_EDI_OBJECT_ID = JbpObj.e_invoice_objectid; + + bpObj.BPAddresses = []; + // bpObj.BPAddresses[0].AddressName = 'test'; + for (var g in SBOOBJ.BPAddresses) { + + for (var h in JbpObj.addresses) { + var mybpAdresses = {}; + // mybpAdresses.g = g; + // mybpAdresses.h = h; + var myaddressbpname = JbpObj.addresses[h].street.toString() + ' ' + JbpObj.addresses[h].street_no.toString(); + //var myaddressbpname = JbpObj.addresses[h].addressid.toString(); + mybpAdresses.AddressName = SBOOBJ.BPAddresses[g].AddressName; + mybpAdresses.AddressType = SBOOBJ.BPAddresses[g].AddressType; + mybpAdresses.BPCode = SBOOBJ.BPAddresses[g].BPCode; + mybpAdresses.RowNum = SBOOBJ.BPAddresses[g].RowNum; + if (SBOOBJ.BPAddresses[g].U_EON_EXT_ID === JbpObj.addresses[h].addressid.toString() && SBOOBJ.BPAddresses[g].AddressType === + convertAdrType(JbpObj.addresses[ + h].type)) { + + //mybpAdresses.AddressName = JbpObj.addresses[h].address.toString(); + mybpAdresses.AddressName = myaddressbpname; + mybpAdresses.Street = JbpObj.addresses[h].street.toString(); + //mybpAdresses.Block = 'test'; + mybpAdresses.ZipCode = JbpObj.addresses[h].zip_code.toString(); + mybpAdresses.City = JbpObj.addresses[h].city.toString(); + //mybpAdresses.County = 'test'; + mybpAdresses.Country = JbpObj.addresses[h].country.toString(); + if (JbpObj.addresses[h].standard === 'yes') { + if (convertAdrType(JbpObj.addresses[h].type) === 'bo_BillTo') { + bpObj.BilltoDefault = myaddressbpname; + } + if (convertAdrType(JbpObj.addresses[h].type) === 'bo_ShipTo') { + bpObj.ShipToDefault = myaddressbpname; + } + } + + //mybpAdresses.State = 'test'; + //mybpAdresses.FederalTaxID = 'test'; + //mybpAdresses.TaxCode = 'test'; + //mybpAdresses.BuildingFloorRoom = 'test'; + /* + if (JbpObj.addresses[h].type === 'B') { + mybpAdresses.AddressType = 'bo_BillTo'; + } else { + mybpAdresses.AddressType = 'bo_ShipTo'; + } + */ + if (JbpObj.group === 'B2B' || JbpObj.group === 'B2M') { + var mybpaddress23 = splitcardname(JbpObj.addresses[h].address.toString()); + //mybpAdresses.AddressName2 = mycardname; + mybpAdresses.AddressName2 = mybpaddress23[0]; + //mybpAdresses.AddressName3 = myaddress23[1]; + mybpAdresses.U_CompanyName2 = mybpaddress23[1]; + } + if (JbpObj.addresses[h].address2) { + mybpAdresses.BuildingFloorRoom = JbpObj.addresses[h].address2.toString(); + } + if (JbpObj.addresses[h].address3) { + mybpAdresses.AddressName3 = JbpObj.addresses[h].address3.toString(); + } + // if (JbpObj.addresses[h].address2) { + // mybpAdresses.AddressName2 = JbpObj.addresses[h].address2.toString(); + // } + + //mybpAdresses.TypeOfAddress = 'test'; + mybpAdresses.StreetNo = JbpObj.addresses[h].street_no.toString(); + mybpAdresses.U_EON_EXT_ID = JbpObj.addresses[h].addressid.toString(); + break; + } + } + //mybpAdresses.BPCode = 'test'; + //mybpAdresses.RowNum = 'test'; + //mybpAdresses.GlobalLocationNumber = 'test'; + //mybpAdresses.Nationality = 'test'; + //mybpAdresses.TaxOffice = 'test'; + bpObj.BPAddresses.push(mybpAdresses); + + } + + //Suche ob Objekte vorhanden, wenn nicht ergänzen + + for (var h in JbpObj.addresses) { + var myfound = false; + var myaddbpAdresses = {}; + var myaddbpname = JbpObj.addresses[h].street.toString() + ' ' + JbpObj.addresses[h].street_no.toString(); + + for (var g in SBOOBJ.BPAddresses) { + if (SBOOBJ.BPAddresses[g].U_EON_EXT_ID === JbpObj.addresses[h].addressid.toString() && SBOOBJ.BPAddresses[g].AddressType === + convertAdrType(JbpObj.addresses[h].type)) { + myfound = true; + } + } + + if (myfound === false) { + myaddbpAdresses.AddressName = myaddbpname; //JbpObj.addresses[h].address.toString(); + myaddbpAdresses.Street = JbpObj.addresses[h].street.toString(); + //myaddbpAdresses.Block = 'test'; + myaddbpAdresses.ZipCode = JbpObj.addresses[h].zip_code.toString(); + myaddbpAdresses.City = JbpObj.addresses[h].city.toString(); + //myaddbpAdresses.County = 'test'; + myaddbpAdresses.Country = JbpObj.addresses[h].country.toString(); + //myaddbpAdresses.State = 'test'; + //myaddbpAdresses.FederalTaxID = 'test'; + //myaddbpAdresses.TaxCode = 'test'; + //myaddbpAdresses.BuildingFloorRoom = 'test'; + if (JbpObj.addresses[h].standard === 'yes') { + if (convertAdrType(JbpObj.addresses[h].type) === 'bo_BillTo') { + bpObj.BilltoDefault = myaddbpname; + } + if (convertAdrType(JbpObj.addresses[h].type) === 'bo_ShipTo') { + bpObj.ShipToDefault = myaddbpname; + } + } + + myaddbpAdresses.AddressType = convertAdrType(JbpObj.addresses[h].type); + if (JbpObj.group === 'B2B' || JbpObj.group === 'B2M') { + var myaddbpaddress23 = splitcardname(JbpObj.addresses[h].address.toString()); + //myaddbpAdresses.AddressName2 = mycardname; + myaddbpAdresses.AddressName2 = myaddbpaddress23[0]; + //myaddbpAdresses.AddressName3 = myaddress23[1]; + myaddbpAdresses.U_CompanyName2 = myaddbpaddress23[1]; + } + if (JbpObj.addresses[h].address2) { + myaddbpAdresses.BuildingFloorRoom = JbpObj.addresses[h].address2.toString(); + } + if (JbpObj.addresses[h].address3) { + myaddbpAdresses.AddressName3 = JbpObj.addresses[h].address3.toString(); + } + //myaddbpAdresses.TypeOfAddress = 'test'; + myaddbpAdresses.StreetNo = JbpObj.addresses[h].street_no.toString(); + myaddbpAdresses.U_EON_EXT_ID = JbpObj.addresses[h].addressid.toString(); + + bpObj.BPAddresses.push(myaddbpAdresses); + + } + } + + // var myaddbpAdresses = {}; + // //for (var i in bpObj.BPAddresses) { + // var myfound = false; + // for (var j in JbpObj.addresses) { + // // console.log("i=" + i + "Name:" + bpObj.BPAddresses[i].AddressName); + // console.log("j=" + j + "Name:" + JbpObj.addresses[j].address); + // console.log(bpObj.BPAddresses.(Addressname, 0, JbpObj.addresses[j].address)); + // // if (bpObj.BPAddresses[i].AddressName == JbpObj.addresses[j].address) { + // if (bpObj.BPAddresses.indexOf(JbpObj.addresses[j].address) > 0) { + // console.log("FOUND"); + // myfound = true; + // //((myaddbpAdresses.found = myfound; + // //myaddbpAdresses.i = i; + // //myaddbpAdresses.j = j; + + // //bpObj.BPAddresses.push(myaddbpAdresses); + // } + // else { + // myfound = false + // console.log("NOT FOUND"); + //// myaddbpAdresses.found = myfound; + // //bpObj.BPAddresses.push(myaddbpAdresses); + // } + // } + // //} + + bpObj.ContactEmployees = []; + var myfoundCP = false; + for (var cpB1 in SBOOBJ.ContactEmployees) { + var mybpContactEmployees = {}; + mybpContactEmployees.Name = SBOOBJ.ContactEmployees[cpB1].Name; + mybpContactEmployees.CardCode = SBOOBJ.ContactEmployees[cpB1].CardCode; + mybpContactEmployees.InternalCode = SBOOBJ.ContactEmployees[cpB1].InternalCode; + if (SBOOBJ.ContactEmployees[cpB1].Name == mybpcontactname) { + mybpContactEmployees.FirstName = JbpObj.name.toString().trim(); + mybpContactEmployees.LastName = JbpObj.surname.toString().trim(); + mybpContactEmployees.Title = JbpObj.title.toString(); + mybpContactEmployees.U_EON_SALUTATION = JbpObj.salutation.toString(); + bpObj.ContactPerson = mybpcontactname; + myfoundCP = true; + } + bpObj.ContactEmployees.push(mybpContactEmployees); + } + if (myfoundCP == false) { + mybpContactEmployees = {}; + mybpContactEmployees.Name = mybpcontactname; //mycardname; + mybpContactEmployees.FirstName = JbpObj.name.toString().trim(); + mybpContactEmployees.LastName = JbpObj.surname.toString().trim(); + mybpContactEmployees.Title = JbpObj.title.toString(); + mybpContactEmployees.U_EON_SALUTATION = JbpObj.salutation.toString(); + bpObj.ContactPerson = mybpcontactname; + bpObj.ContactEmployees.push(mybpContactEmployees); + } + + bpObj.BPBankAccounts = []; + var myfoundBank = false; + var myIBAN = JbpObj.bank_account.iban.toString().replace(/ /g, ''); + if (myIBAN !== '') { + use_iban = true; + } else { + use_iban = false; + } + + if (use_iban) { + + var bankDetails = parseIBAN(myIBAN); + + if (bankDetails === false) {; + } else { + + var myCountry = bankDetails.BankCountry; + var myBankCode = bankDetails.BankCode; + var myAccountNo = bankDetails.AccountNo; + var mySwiftNo = bankDetails.SwiftNo; + var mySignatureDate = convertToISODate(JbpObj.bank_account.signature_date); + for (var ba in SBOOBJ.BPBankAccounts) { + var myBPBankAccounts = {}; + myBPBankAccounts.BPCode = SBOOBJ.BPBankAccounts[ba].BPCode; + myBPBankAccounts.InternalKey = SBOOBJ.BPBankAccounts[ba].InternalKey; + myBPBankAccounts.Country = SBOOBJ.BPBankAccounts[ba].Country; + myBPBankAccounts.BankCode = SBOOBJ.BPBankAccounts[ba].BankCode; + myBPBankAccounts.AccountNo = SBOOBJ.BPBankAccounts[ba].AccountNo; + myBPBankAccounts.IBAN = SBOOBJ.BPBankAccounts[ba].IBAN; + myBPBankAccounts.MandateID = SBOOBJ.BPBankAccounts[ba].MandateID; + myBPBankAccounts.SEPASeqType = SBOOBJ.BPBankAccounts[ba].SEPASeqType; + if (SBOOBJ.BPBankAccounts[ba].IBAN.replace(/ /g, '') === myIBAN) { + myfoundBank = true; + if (JbpObj.bank_account.bic.toString() !== '') { + myBPBankAccounts.BICSwiftCode = JbpObj.bank_account.bic.toString(); + } + else if (mySwiftNo.toString() !== '') + { + myBPBankAccounts.BICSwiftCode = mySwiftNo.toString(); + } + + myBPBankAccounts.Country = myCountry; + myBPBankAccounts.BankCode = myBankCode; + myBPBankAccounts.AccountNo = myAccountNo; + myBPBankAccounts.AccountName = JbpObj.bank_account.account_owner.toString(); + myBPBankAccounts.Street = JbpObj.bank_account.street.toString() + " " + JbpObj.bank_account.street_no.toString(); + myBPBankAccounts.ZipCode = JbpObj.bank_account.zip_code.toString(); + myBPBankAccounts.City = JbpObj.bank_account.city.toString(); + // myBPBankAccounts.MandateID = JbpObj.bank_account.sepa_mandate_id.toString(); + myBPBankAccounts.SignatureDate = mySignatureDate; + if (JbpObj.bank_account.sepa_mandate.toString() == 'Ja') { + if (!mySignatureDate) { + throw new Error("SEPA mandate without signature date is not allowed."); + } + if (SBOOBJ.BPBankAccounts[ba].MandateID == null) //|| SBOOBJ.BPBankAccounts[ba].MandateID.substring(0,10) > JbpObj.id_crm ) + { + myBPBankAccounts.MandateID = JbpObj.id_crm + getnextvalsepaid(); + } + bpObj.CollectionAuthorization = 'tYES'; + } + //22.07.2024 BUS-7580 + if (JbpObj.bank_account.sepa_mandate.toString() == 'Nein') { + bpObj.CollectionAuthorization = 'tNO'; + } + } + bpObj.BankCountry = myCountry; + bpObj.DefaultBankCode = myBankCode; + bpObj.DefaultAccount = myAccountNo; + bpObj.BPBankAccounts.push(myBPBankAccounts); + } + + if (myfoundBank === false) { + myBPBankAccounts = {}; + myBPBankAccounts.IBAN = myIBAN; + myBPBankAccounts.Country = myCountry; + myBPBankAccounts.BankCode = myBankCode; + myBPBankAccounts.AccountNo = myAccountNo; + if (JbpObj.bank_account.bic.toString() !== '') { + myBPBankAccounts.BICSwiftCode = JbpObj.bank_account.bic.toString(); + } + myBPBankAccounts.AccountName = JbpObj.bank_account.account_owner.toString(); + myBPBankAccounts.Street = JbpObj.bank_account.street.toString() + " " + JbpObj.bank_account.street_no.toString(); + myBPBankAccounts.ZipCode = JbpObj.bank_account.zip_code.toString(); + myBPBankAccounts.City = JbpObj.bank_account.city.toString(); + // myBPBankAccounts.MandateID = JbpObj.bank_account.sepa_mandate_id.toString(); + myBPBankAccounts.SignatureDate = mySignatureDate; + + if (JbpObj.bank_account.sepa_mandate.toString() == 'Ja') { + if (!mySignatureDate) { + throw new Error("SEPA mandate without signature date is not allowed."); + } + // myBPBankAccounts.MandateID = SBOOBJ.BPBankAccounts[ba].MandateID.substring(0,10); + // if (SBOOBJ.BPBankAccounts[ba].MandateID.IsNullOrEmpty ) //|| SBOOBJ.BPBankAccounts[ba].MandateID.substring(0,10) > JbpObj.id_crm + //{ + myBPBankAccounts.MandateID = JbpObj.id_crm + getnextvalsepaid(); + bpObj.CollectionAuthorization = 'tYES'; + myBPBankAccounts.SEPASeqType = 'sstFRST'; + //} + } + //23.07.2024 BUS-7580 + if (JbpObj.bank_account.sepa_mandate.toString() == 'Nein') { + bpObj.CollectionAuthorization = 'tNO'; + } + bpObj.BankCountry = myCountry; + bpObj.DefaultBankCode = myBankCode; + bpObj.DefaultAccount = myAccountNo; + bpObj.BPBankAccounts.push(myBPBankAccounts); + } + } + } + + return bpObj; +} + +function mockbuildBPObj() { + var bpObj = {}; + bpObj.Series = series_b2b; + bpObj.CompanyPrivate = "I"; // JbpObj.type.toString(); + bpObj.CardName = 'Burgmueller'; + //bpObj.CardType = 'C'; + //bpObj.GroupCode = 100; // JbpObj.group.toString(); + //bpObj.Phone1 = JbpObj.phone.toString(); + //bpObj.Cellular = JbpObj.mobile_phone.toString(); + //bpObj.EmailAddress = JbpObj.email.toString(); + bpObj.U_EON_ID_CRM = 'BP777888999'; + bpObj.U_EON_ASSU = 'N'; + return bpObj; +} + +function upsBP(searchparam, JbpObj) { + + var SESSIONID = ""; + var NODEID = ""; + + // SL credentials + var loginInfo = {}; + loginInfo.UserName = UserName; + loginInfo.Password = UserPass; + loginInfo.CompanyDB = UserComp; + + var slError; + + // SL LOGIN + var response = slib.SLLogin(JSON.stringify(loginInfo), null, null); + + // B1SESSION and ROUTEID cookies returned by Login + for (var j in response.cookies) { + if (response.cookies[j].name == "B1SESSION") { + SESSIONID = response.cookies[j].value; + output.SessionID = SESSIONID; + } else if (response.cookies[j].name == "ROUTEID") { + NODEID = response.cookies[j].value; + output.NodeID = NODEID; + } + } + output.loginInfo = loginInfo; + // output.loginResponse = JSON.parse(response.body.asString()); + var loginResponse; + try { + loginResponse = JSON.parse(response.body.asString()); + } catch (e) { + loginResponse = response.body.asString(); + } + output.loginResponse = loginResponse; + if (response.status !== 200) { + outMsg = {}; + outMsg.method = "login"; + outMsg.status = "error"; + //outMsg.message = output.loginResponse; + slError = loginResponse.error; + if (slError && slError.hasOwnProperty("code") && slError.message && slError.message.value) { + outMsg.message = slError.message.value + " (Code: " + slError.code.toString() + ")"; + } else { + outMsg.message = JSON.stringify(loginResponse); + } + outMsg.response = loginResponse; + outMessages.push(outMsg); + outStatus = "error"; + } + + if (JbpObj.vatid) { + var checkmyvatid = bpbl.checkvatid(JbpObj.vatid, JbpObj.vatid.substring(0, 2).toUpperCase(), UserComp); + if (checkmyvatid != "true") { + outMsg = {}; + outMsg.method = "checkVATID"; + outMsg.status = "error"; + outMsg.message = checkmyvatid; + outStatus = "error"; + outMessages.push(outMsg); + } + } + + // CBU 18.10.2022 Prüfung Versandart + if (JbpObj.shipping_type) { + var checkShippingTypeResult = checkShippingType(JbpObj.shipping_type, UserComp); + + if (!checkShippingTypeResult) { + outMsg = {}; + outMsg.method = "shipping_type"; + outMsg.status = "error"; + outMsg.message = "Shippingtype not valid: " + JbpObj.shipping_type; + outStatus = "error"; + outMessages.push(outMsg); + } else { + + // CBU 24.01.2023 + if (JbpObj.shipping_type === "M") { + checkShippingTypeMail(JbpObj.email); + } + } + + } else { + outMsg = {}; + outMsg.method = "shipping_type"; + outMsg.status = "error"; + outMsg.message = "Shipping Type missing"; + outStatus = "error"; + outMessages.push(outMsg); + } + + /* +CBU 25.11.2022 + if (outStatus !== "error") { + if (JbpObj.bank_account.iban.toString().replace(/ /g, '') !== '') { + createBankIfMissing(JbpObj.bank_account.iban.toString().replace(/ /g, ''), SESSIONID, NODEID); + } + } +*/ + if (outStatus !== "error") { + + outMsg = {}; + outMsg.method = "checkExists"; + //Add BP + //response = slib.createBusinessPartner(BPObject, SESSIONID,NODEID); + var responseGet = slib.getBusinessPartner(searchparam, SESSIONID, NODEID); + //var logoutresponse = slib.SLLogout(JSON.stringify(loginInfo), null, null); + //Parse response body + + // Removes metadata + //delete body["odata.metadata"]; + + var bodyGet; + try { + bodyGet = JSON.parse(responseGet.body.asString()); + } catch (e) { + bodyGet = response.responseGet.asString(); + } + myDebug.statusGet = responseGet.status; + myDebug.responseGet = bodyGet; + outMsg.statuscode = responseGet.status; + if (responseGet.status >= 200 && responseGet.status < 300) { + outMsg.status = "success"; + outMsg.message = "exists"; + } else if (responseGet.status === 404) { + outMsg.status = "success"; + outMsg.message = "not exists"; + } else { + outMsg.status = "error"; + //outMsg.message = bodyGet; + slError = bodyGet.error; + if (slError && slError.hasOwnProperty("code") && slError.message && slError.message.value) { + outMsg.message = slError.message.value + " (Code: " + slError.code.toString() + ")"; + } else { + outMsg.message = JSON.stringify(bodyGet); + } + outMsg.response = bodyGet; + outStatus = "error"; + } + outMessages.push(outMsg); + + var CardCode = ""; + var bodyGetFull = {}; + if (bodyGet.value[0]) { + CardCode = bodyGet.value[0].CardCode; + + outMsg = {}; + outMsg.method = "get"; + + var responseGetFull = slib.getBusinessPartnerFull(CardCode, SESSIONID, NODEID); + myDebug.statusGetFull = responseGetFull.status; + bodyGetFull = JSON.parse(responseGetFull.body.asString()); + myDebug.responseGetFull = bodyGetFull; + outMsg.statuscode = responseGetFull.status; + if (responseGetFull.status >= 200 && responseGetFull.status < 300) { + outMsg.status = "success"; + } else { + outMsg.status = "error"; + //outMsg.message = bodyGetFull; + slError = bodyGetFull.error; + if (slError && slError.hasOwnProperty("code") && slError.message && slError.message.value) { + outMsg.message = slError.message.value + " (Code: " + slError.code.toString() + ")"; + } else { + outMsg.message = JSON.stringify(bodyGetFull); + } + outMsg.response = bodyGetFull; + outStatus = "error"; + } + outMessages.push(outMsg); + } + + // CBU 25.11.2022 + if (outStatus !== "error") { + if (JbpObj.bank_account.iban.toString().replace(/ /g, '') !== '') { + createBankIfMissing(JbpObj.bank_account.iban.toString().replace(/ /g, ''), SESSIONID, NODEID); + } + } + + if (outStatus !== "error") { + + var consBPObject = buildBPObj(JbpObj, bodyGetFull); + myDebug.BPObj = consBPObject; + + if (CardCode !== "") { + output.method = "updateBP"; + var responseUpdate = slib.updateBusinessPartner(CardCode, JSON.stringify(consBPObject), SESSIONID, NODEID); + outMsg = {}; + outMsg.method = "update"; + myDebug.statusUpdate = responseUpdate.status; + outMsg.statuscode = responseUpdate.status; + if (responseUpdate.status >= 200 && responseUpdate.status < 300) { + myDebug.Updatemessage = "Update sucessfull"; + outMsg.status = "success"; + } else { + myDebug.message = "Update error occured"; + outMsg.status = "error"; + if (responseUpdate.body) { + myDebug.responseUpdate = JSON.parse(responseUpdate.body.asString()); + //outMsg.message = myDebug.responseUpdate; + slError = myDebug.responseUpdate.error; + if (slError && slError.hasOwnProperty("code") && slError.message && slError.message.value) { + outMsg.message = slError.message.value + " (Code: " + slError.code.toString() + ")"; + } else { + outMsg.message = JSON.stringify(myDebug.responseUpdate); + } + outMsg.response = myDebug.responseUpdate; + outErrorMessages.push(outMsg); + } + } + outMessages.push(outMsg); + if (outStatus !== "error" && checkSupplierExist(CardCode)) { + outMsg.method = "copyBP"; + outMsg.paramCardCode = CardCode; + var bpoutput = copybplib.copyBP(ParDebug, CardCode); + outMsg.result = bpoutput; + outMessages.push(outMsg); + } + + } else { + output.method = "createBP"; + outMsg = {}; + outMsg.method = "create"; + var responseCreate = slib.createBusinessPartner(JSON.stringify(consBPObject), SESSIONID, NODEID); + myDebug.statusCreate = responseCreate.status; + outMsg.statuscode = responseCreate.status; + myDebug.responseCreate = JSON.parse(responseCreate.body.asString()); + if (responseCreate.status >= 200 && responseCreate.status < 300) { + myDebug.Createmessage = "Create sucessfull"; + outMsg.status = "success"; + var createJbpObj = JSON.parse(responseCreate.body.asString()); + CardCode = createJbpObj.CardCode; + } else { + myDebug.Createmessage = "Create error occured"; + output.errorCreatestatus = myDebug.Createmessage; + outMsg.status = "error"; + //outMsg.message = myDebug.responseCreate; + outStatus = "error"; + slError = myDebug.responseCreate.error; + if (slError && slError.hasOwnProperty("code") && slError.message && slError.message.value) { + outMsg.message = slError.message.value + " (Code: " + slError.code.toString() + ")"; + } else { + outMsg.message = JSON.stringify(myDebug.responseCreate); + } + outMsg.response = myDebug.responseCreate; + outErrorMessages.push(outMsg); + } + outMessages.push(outMsg); + } + + } + output.CardCode = CardCode; + //output.CardName = body.CardName; + + slib.SLLogout(SESSIONID, NODEID); + } + output.debug = myDebug; + $.trace.debug("DEBUG body.Get: " + JSON.stringify(myDebug)); + return output; + //setOutputMessage(); + //return 0; + +} + +function getnextval() { + var conn = $.db.getConnection(); + var pstmt; + var query = "select \"NICEPORTAL\".\"SEQ_CRMBP_ID\".NEXTVAL from dummy"; + pstmt = conn.prepareStatement(query); + var rs = pstmt.executeQuery(); + if (!rs.next()) { + outMsg = {}; + outMsg.method = "getnexval from sequence error"; + outMsg.status = "error"; + // outMsg.message = e.message; + outMessages.push(outMsg); + } else { + return rs.getString(1); + } + rs.close(); + pstmt.close(); + conn.close(); +} + +function setBPCardCode(tableid, bpcardcode) { + var conn = $.db.getConnection(); + var pstmt; + var query = "update \"NICEPORTAL\".\"UO_CRM_DATA_BP\" set B1_CARDCODE = '" + bpcardcode + "', UPDATE_TS = CURRENT_TIMESTAMP where ID =" + + tableid; + pstmt = conn.prepareStatement(query); + // pstmt.setString(1,bpcardcode); + // pstmt.setString(2,tableid); + var rs = pstmt.executeUpdate(); + myDebug.UpdateQuery = query; + + pstmt.close(); + conn.commit(); + conn.close(); + +} + +function setRESPONSE(tableid, respstatus, respmessage, errormessage) { + var conn = $.db.getConnection(); + var pstmt; + var query = "update \"NICEPORTAL\".\"UO_CRM_DATA_BP\" set RESPONSE_STATUS = ? , RESPONSE_MESSAGE =?, ERROR_MESSAGE=? where ID =" + tableid; + pstmt = conn.prepareStatement(query); + pstmt.setString(1, respstatus.toString()); + pstmt.setString(2, respmessage.toString()); + pstmt.setString(3, errormessage.toString()); + var rs = pstmt.executeUpdate(); + myDebug.UpdateQuery = query; + + pstmt.close(); + conn.commit(); + conn.close(); + +} + +function PutBPDataInTable() { + var pdcontent = $.request.body.asString(); + // pdcontent = pdcontent.replace(/\"([^(\")\"]+)\":/g,"$1:"); + var JbpObj = JSON.parse(pdcontent); + var conn = $.db.getConnection(); + var pstmt; + var query; + var vals = {}; + var data = []; + // var query2; + // var output = {results: [] }; + var mynextval = getnextval(); + myDebug.mynextval = mynextval; + try { + + // query = "INSERT INTO \"NICEPORTAL\".\"UO_CRM_DATA_BP\" (ID,ID_MSD,TYPE,GROUP,SALUTATION,TITLE,NAME,SURNAME,PHONE,MOBILE_PHONE,EMAIL,ADDRESS_JSON,IBAN,BIC,SEPA_MANDATE_ID,SIGNATURE_DATE,ACCOUNT_OWNER,STREET,STREET_NO,ZIP_CODE,CITY,JSONRAW,CREATE_TS,UPDATE_TS) values (\"NICEPORTAL\".\"SEQ_CRMBP_ID\".NEXTVAL,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)"; + query = + "INSERT INTO \"NICEPORTAL\".\"UO_CRM_DATA_BP\" (ID,ID_MSD,ID_CRM,TYPE,BPGROUP,SALUTATION,TITLE,NAME,SURNAME,PHONE,MOBILE_PHONE,EMAIL,ADDRESS_JSON,IBAN,BIC,SEPA_MANDATE_ID,SIGNATURE_DATE,ACCOUNT_OWNER,STREET,STREET_NO,ZIP_CODE,CITY,JSONRAW,CREATE_TS,UPDATE_TS) values (" + + mynextval + ",?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)"; + // "INSERT INTO \"NICEPORTAL\".\"UO_CRM_DATA_BP\" (ID,ID_MSD,ID_CRM,TYPE,BPGROUP,SALUTATION,TITLE,NAME,SURNAME,PHONE,MOBILE_PHONE,EMAIL,ADDRESS_JSON,IBAN,BIC,SEPA_MANDATE_ID,SIGNATURE_DATE,ACCOUNT_OWNER,STREET,STREET_NO,ZIP_CODE,CITY,JSONRAW,CREATE_TS,UPDATE_TS) values (\"NICEPORTAL\".\"SEQ_CRMBP_ID\".NEXTVAL,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)"; + + pstmt = conn.prepareStatement(query); + pstmt.setString(1, JbpObj.id_msd.toString()); + pstmt.setString(2, JbpObj.id_crm.toString()); + pstmt.setString(3, JbpObj.type.toString()); + pstmt.setString(4, JbpObj.group.toString()); + pstmt.setString(5, JbpObj.salutation.toString()); + pstmt.setString(6, JbpObj.title.toString()); + pstmt.setString(7, JbpObj.name.toString()); + pstmt.setString(8, JbpObj.surname.toString()); + pstmt.setString(9, JbpObj.phone.toString()); + pstmt.setString(10, JbpObj.mobile_phone.toString()); + pstmt.setString(11, JbpObj.email.toString()); + pstmt.setString(12, JSON.stringify(JbpObj.addresses)); + pstmt.setString(13, JbpObj.bank_account.iban.toString()); + pstmt.setString(14, JbpObj.bank_account.bic.toString()); + pstmt.setString(15, JbpObj.bank_account.sepa_mandate_id.toString()); + pstmt.setString(16, JbpObj.bank_account.signature_date.toString()); + pstmt.setString(17, JbpObj.bank_account.account_owner.toString()); + pstmt.setString(18, JbpObj.bank_account.street.toString()); + pstmt.setString(19, JbpObj.bank_account.street_no.toString()); + pstmt.setString(20, JbpObj.bank_account.zip_code.toString()); + pstmt.setString(21, JbpObj.bank_account.city.toString()); + pstmt.setString(22, JSON.stringify(JbpObj)); + + var rs = pstmt.executeUpdate(); + pstmt.close(); + conn.commit(); + conn.close(); + + outMsg = {}; + outMsg.method = "insertDB"; + outMsg.status = "success"; + outMessages.push(outMsg); + + var searchparam = {}; + searchparam.key = "U_EON_ID_CRM_INTERNAL"; + searchparam.value = JbpObj.id_msd.toString(); + + //var bpObj = buildBPObj(JbpObj); + + var retUpsertBP = upsBP(searchparam, JbpObj); + //var retUpsertBP = upsBP(searchparam, JSON.stringify(bpObj),JbpObj); + //var retUpsertBP = upsertBP(searchparam, JSON.stringify(bpObj)); + //var retUpsertBP = addBP(JSON.stringify(bpObj)); + + } catch (e) { + // push last outMsg if missing + if (outMsg.method && outMessages.indexOf(outMsg) === -1) { + outMsg.status = "canceled"; + outMessages.push(outMsg); + } + outMsg = {}; + outMsg.method = "exceptionHandler"; + outMsg.status = "error"; + outMsg.message = e.toString(); + if (ParDebug) { + outMsg.exceptionInfo = {}; + outMsg.exceptionInfo.name = e.name; + outMsg.exceptionInfo.message = e.message; + outMsg.exceptionInfo.fileName = e.fileName; + outMsg.exceptionInfo.lineNumber = e.lineNumber; + outMsg.exceptionInfo.columnNumber = e.columnNumber; + outMsg.exceptionInfo.stack = e.stack; + //outMsg.exceptionInfo.source = e.toSource(); + } + outMessages.push(outMsg); + + vals.status = 'error'; + //vals.description = e.message; + vals.messages = outMessages; + + if (ParDebug) { + vals.debug = {}; + vals.debug.statement = query; + vals.debugInfo = myDebug; + } + + // vals.group = JbpObj.group.toString(); + // vals.bpobjekt = JSON.stringify(JbpObj); + // vals.SLBPObj = JSON.stringify(bpObj); + // vals.ResponsUPSER = JSON.stringify(retUpsertBP); + // vals.CardCode = retUpsertBP.CardCode; + //vals.mode = JSON.stringify(retUpsertBP.mode); + data.push(vals); + var errbody = JSON.stringify(data); + setRESPONSE(mynextval, outMsg.status, errbody, outErrorMessages); + $.response.contentType = 'application/json'; + $.response.setBody(errbody); + //$.response.status = $.net.http.INTERNAL_SERVER_ERROR; + // auch bei Fehler HTTP Status 200, da der Response im CRM sonst evtl. nicht sauber verarbeitet wird + $.response.status = $.net.http.OK; + return; + } + vals.status = outStatus; + //vals.description = 'Data accepted and proceeded'; + vals.id_crm = JbpObj.id_crm.toString(); + vals.id_msd = JbpObj.id_msd.toString(); + vals.id_b1 = retUpsertBP.CardCode; + vals.CardCode = retUpsertBP.CardCode; + vals.messages = outMessages; + setBPCardCode(mynextval, retUpsertBP.CardCode); + + //vals.RespnUPSERJ = JSON.stringify(retUpsertBP); + if (ParDebug) { + vals.debug = retUpsertBP; + } + //vals.mode = JSON.stringify(retUpsertBP.mode); + data.push(vals); + var okbody = JSON.stringify(data); + setRESPONSE(mynextval, outMsg.status, okbody, JSON.stringify(outErrorMessages)); + //var body = JSON.stringify(test); + $.response.contentType = 'application/json'; + $.response.setBody(okbody); + $.response.status = $.net.http.OK; +} + +function testmain() { + + var searchparam = {}; + searchparam.key = "U_EON_ID_CRM"; + searchparam.value = 'BP777888999x'; + + var bpObj = mockbuildBPObj(); + + var retUpsertBP = upsBP(searchparam, JSON.stringify(bpObj)); + + // setOutputMessage(); +} + +//testmain(); + +// begin org + +var content = $.request.body.asString(); +ParDebug = $.request.parameters.get('debug') && $.request.parameters.get('debug').toLowerCase() === "true"; + +PutBPDataInTable(); +//ende org + +//SlLogin(); + +/*var req = 0; +req = $.request.parameters.get('crmid'); + +if (!req){ + output.error = "Invalid BP Request - " + req; + $.response.status = $.net.http.OK; + $.response.contentType = "application/json"; + $.response.setBody(JSON.stringify(output)); +}else{ + + //addBP(JSON.stringify(bpObj)); + //updBP(JSON.stringify(bpObj)); + //GetOrders(req); +} +*/ \ No newline at end of file