diff --git a/uniorg/eon/nice/v1/meta/CREATE_BANK_SEARCH_TABLES.sql b/uniorg/eon/nice/v1/meta/CREATE_BANK_SEARCH_TABLES.sql new file mode 100644 index 0000000..3c1fe7c --- /dev/null +++ b/uniorg/eon/nice/v1/meta/CREATE_BANK_SEARCH_TABLES.sql @@ -0,0 +1,99 @@ +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; + + + + diff --git a/uniorg/eon/nice/v1/meta/UO_DOCUMENTS_RAWCALL.sql b/uniorg/eon/nice/v1/meta/UO_DOCUMENTS_RAWCALL.sql new file mode 100644 index 0000000..5f9d5b9 --- /dev/null +++ b/uniorg/eon/nice/v1/meta/UO_DOCUMENTS_RAWCALL.sql @@ -0,0 +1,9 @@ +CREATE COLUMN TABLE "INTEGRATION_DATA"."UO_DOCUMENTS_RAWCALL" ("ID" BIGINT CS_FIXED NOT NULL , + "DOCTYPE" VARCHAR(50), + "XSINTERFACE" VARCHAR(50), + "JSONRAW" NCLOB MEMORY THRESHOLD 1000, + "B1_PK" VARCHAR(50), + "B1_OBJ" NCLOB MEMORY THRESHOLD 1000, + "CREATE_TS" LONGDATE CS_LONGDATE DEFAULT CURRENT_TIMESTAMP NOT NULL , + "UPDATE_TS" LONGDATE CS_LONGDATE NOT NULL , + PRIMARY KEY ("ID")) UNLOAD PRIORITY 5 AUTO MERGE \ No newline at end of file diff --git a/uniorg/eon/nice/v1/meta/altertables.sql b/uniorg/eon/nice/v1/meta/altertables.sql new file mode 100644 index 0000000..2d1c3a8 --- /dev/null +++ b/uniorg/eon/nice/v1/meta/altertables.sql @@ -0,0 +1,2 @@ +ALTER TABLE "NICEPORTAL"."UO_CRM_DATA_CONTRACTS" ADD ("RESPONSE_STATUS" VARCHAR(50)); +ALTER TABLE "NICEPORTAL"."UO_CRM_DATA_CONTRACTS" ADD ("RESPONSE_MESSAGE" NCLOB MEMORY THRESHOLD 1000); \ No newline at end of file diff --git a/uniorg/eon/nice/v1/meta/createTablesNICE.sql b/uniorg/eon/nice/v1/meta/createTablesNICE.sql new file mode 100644 index 0000000..8b967c6 --- /dev/null +++ b/uniorg/eon/nice/v1/meta/createTablesNICE.sql @@ -0,0 +1,71 @@ + +CREATE SCHEMA NICEPORTAL; +CREATE COLUMN TABLE "NICEPORTAL"."UO_CRM_DATA_CONTRACTS" ("ID" BIGINT CS_FIXED NOT NULL , + "ID_MSD" VARCHAR(50) NOT NULL , + "ID_CRM" VARCHAR(30) NOT NULL , + "JSONRAW" NCLOB MEMORY THRESHOLD 1000, + "B1_CODE" VARCHAR(50), + "CREATE_TS" LONGDATE CS_LONGDATE DEFAULT CURRENT_TIMESTAMP NOT NULL , + "UPDATE_TS" LONGDATE CS_LONGDATE NOT NULL , + PRIMARY KEY ("ID")) UNLOAD PRIORITY 5 AUTO MERGE; + + + +CREATE SEQUENCE "NICEPORTAL"."SEQ_CONTRACT_ID"; +CREATE SEQUENCE "NICEPORTAL"."SEQ_CRMBP_ID"; +CREATE SEQUENCE "NICEPORTAL"."SEQ_MAND_ID"; +CREATE SEQUENCE "NICEPORTAL"."SEQ_TRANSACTIONDATA_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,"ERROR_MESSAGE" VARCHAR(500), "CREATE_TS" LONGDATE CS_LONGDATE DEFAULT CURRENT_TIMESTAMP NOT NULL , "UPDATE_TS" LONGDATE CS_LONGDATE NOT NULL , PRIMARY KEY ("ID")) UNLOAD PRIORITY 5 AUTO MERGE +; +--DROP TABLE "NICEPORTAL"."CHARGEDATA"; +CREATE COLUMN TABLE "NICEPORTAL"."CHARGEDATA" ("ID" BIGINT CS_FIXED NOT NULL , + "CALLID" NVARCHAR(50) NOT NULL UNIQUE, + "CDRID" NVARCHAR(50) NOT NULL , + "EVSEID" NVARCHAR(50), + "CONTRACTID" NVARCHAR(50), + "INSTANCE" NVARCHAR(200), + "TOKENTYPE" NVARCHAR(50), + "CONSUMEDENERGY" DECIMAL(17,3) CS_FIXED, + "OPERATORID" NVARCHAR(50), + "OPERATORNAME" NVARCHAR(50), + "OPERATORSUBMANDANT" NVARCHAR(50), + "FREECHARGE" NVARCHAR(50), + "CHARGEPOINTTYPE" NVARCHAR(50), + "MAXSOCKETPOWER" DECIMAL(17,3) CS_FIXED, + "ADDRESS" NVARCHAR(50), + "ZIP" NVARCHAR(50), + "CITY" NVARCHAR(50), + "COUNTRY" NVARCHAR(50), + "PROVIDERID" NVARCHAR(200), + "PROVIDERNAME" NVARCHAR(50), + "CHARGINGSTARTTIME" NVARCHAR(50), + "CHARGINGSTOPTIME" NVARCHAR(50), + "PARKINGSTARTTIME" NVARCHAR(50), + "PARKINGSTOPTIME" NVARCHAR(50), + "METERSTART" DECIMAL(17,3) CS_FIXED, + "METERSTOP" DECIMAL(17,3) CS_FIXED, + "TARIFF" NVARCHAR(50), + "CURRENCY" NVARCHAR(3), + "VAT" DECIMAL(17,3) CS_FIXED, + "BILLINGVALUEBRUTTO" DECIMAL(17, + 3) CS_FIXED, + "BILLINGVALUENETTO" DECIMAL(17, + 3) CS_FIXED, + "PARKINGTIMEPRICEBRUTTO" DECIMAL(17, + 3) CS_FIXED, + "PARKINGTIMEPRICENETTO" DECIMAL(17, + 3) CS_FIXED, + "ADITIONALPRICEBRUTTO" DECIMAL(17, + 3) CS_FIXED, + "ADITIONALPRICENETTO" DECIMAL(17, + 3) CS_FIXED, + "B2CPRICING" NCLOB MEMORY THRESHOLD 1000, + "ASSETOWNERPRICING" NCLOB MEMORY THRESHOLD 1000, + "CPOPRICING" NCLOB MEMORY THRESHOLD 1000, + "JSONRAW" NCLOB MEMORY THRESHOLD 1000, + "CREATE_TS" LONGDATE CS_LONGDATE DEFAULT CURRENT_TIMESTAMP NOT NULL , + "UPDATE_TS" LONGDATE CS_LONGDATE NOT NULL , + PRIMARY KEY ("ID")) UNLOAD PRIORITY 5 AUTO MERGE \ No newline at end of file diff --git a/uniorg/eon/nice/v1/setbp.xsjs b/uniorg/eon/nice/v1/setbp.xsjs new file mode 100644 index 0000000..a5b3a94 --- /dev/null +++ b/uniorg/eon/nice/v1/setbp.xsjs @@ -0,0 +1,867 @@ +var slib = $.import("uniorg.ServiceLayer", "B1SLLogic"); +var slDest = $.import("uniorg.destinations", "uodestlib"); +var bpbl = $.import("uniorg.eon.libs", "bp_businesslogic"); + +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 service_version = '6.2'; + +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 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_PAY\" 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 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 buildBPObj(JbpObj, SBOOBJ) { + var myseries = ''; + var mygroupcode = ''; + var mycardname = ''; + var mycmpprivate = ''; + var mybpcontactname = ''; + switch (JbpObj.group) { + case 'B2C': + mycardname = JbpObj.name.toString() + ' ' + JbpObj.surname.toString(); + mybpcontactname = JbpObj.name.toString() + ' ' + JbpObj.surname.toString(); + myseries = series_b2c; + mygroupcode = groupcode_b2c; + mycmpprivate = cmpprivate_b2c; + break; + case 'B2B': + //mycardname = JbpObj.name.toString(); + mycardname = JbpObj.addresses[0].address.toString(); + mybpcontactname = JbpObj.name.toString() + ' ' + JbpObj.surname.toString(); + myseries = series_b2b; + mygroupcode = groupcode_b2b; + mycmpprivate = cmpprivate_b2b; + break; + case 'B2M': + //mycardname = JbpObj.name.toString(); + mycardname = JbpObj.addresses[0].address.toString(); + mybpcontactname = JbpObj.name.toString() + ' ' + JbpObj.surname.toString(); + myseries = series_b2m; + mygroupcode = groupcode_b2m; + mycmpprivate = cmpprivate_b2m; + break; + default: + mycardname = JbpObj.name.toString() + ' ' + JbpObj.surname.toString(); + mybpcontactname = JbpObj.name.toString() + ' ' + JbpObj.surname.toString(); + 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(); + if (JbpObj.vatid) { + bpObj.FederalTaxID = JbpObj.vatid.toString(); + } + if (JbpObj.bank_account.sepa_mandate.toString() == 'Ja') { + bpObj.PayTermsGrpCode = 13; + } + 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.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(); + + 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].AddressName === myaddressbpname && SBOOBJ.BPAddresses[g].AddressType === convertAdrType(JbpObj.addresses[ + h].type)) { + + //mybpAdresses.AddressName = JbpObj.addresses[h].address.toString(); + 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 = 'ja') { + 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') { + //mybpAdresses.AddressName2 = mycardname; + mybpAdresses.AddressName2 = myaddress23[0]; + mybpAdresses.AddressName3 = myaddress23[1]; + } + if (JbpObj.addresses[h].address3) { + mybpAdresses.AddressName3 = JbpObj.addresses[h].address3.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 nichzt 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].AddressName === myaddbpname && 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 = 'ja') { + 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') { + //myaddbpAdresses.AddressName2 = mycardname; + myaddbpAdresses.AddressName2 = myaddress23[0]; + myaddbpAdresses.AddressName3 = myaddress23[1]; + } + 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(); + mybpContactEmployees.LastName = JbpObj.surname.toString(); + 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(); + mybpContactEmployees.LastName = JbpObj.surname.toString(); + 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, ''); + var myCountry = myIBAN.substring(0, 2); + var myBankCode = myIBAN.substring(4, 12); + var myAccountNo = myIBAN.substring(12, 23); + 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; + if (SBOOBJ.BPBankAccounts[ba].IBAN.replace(/ /g, '') === myIBAN) { + myfoundBank = true; + 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 (SBOOBJ.BPBankAccounts[ba].MandateID == null) //|| SBOOBJ.BPBankAccounts[ba].MandateID.substring(0,10) > JbpObj.id_crm ) + { + myBPBankAccounts.MandateID = JbpObj.id_crm + getnextvalsepaid(); + } + bpObj.CollectionAuthorization = 'tYES'; + } + + } + 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') { + // 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'; + //} + } + 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; + + // 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()); + try { + output.loginResponse = JSON.parse(response.body.asString()); + } catch (e) { + output.loginResponse = response.body.asString(); + } + if (response.status !== 200) { + outMsg = {}; + outMsg.method = "login"; + outMsg.status = "error"; + outMsg.message = output.loginResponse; + outMessages.push(outMsg); + outStatus = "error"; + } + + if (JbpObj.vatid) { + var checkmyvatid = bpbl.checkvatid(JbpObj.vatid, JbpObj.addresses[0].country.toUpperCase(), UserComp) + if (checkmyvatid != "true") { + outMsg = {}; + outMsg.method = "checkVATID"; + outMsg.status = "error"; + outMsg.message = checkmyvatid; + outStatus = "error"; + outMessages.push(outMsg); + } + } + + 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 = JSON.parse(responseGet.body.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; + 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; + outStatus = "error"; + } + outMessages.push(outMsg); + } + + 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; + outErrorMessages.push(outMsg); + } + outStatus = "error"; + } + 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"; + 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) { + 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.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; + 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{\n \n //addBP(JSON.stringify(bpObj));\n //updBP(JSON.stringify(bpObj));\n //GetOrders(req); \n}\n*/ \ No newline at end of file diff --git a/uniorg/eon/nice/v1/setbpv1_0.xsjs b/uniorg/eon/nice/v1/setbpv1_0.xsjs new file mode 100644 index 0000000..2218602 --- /dev/null +++ b/uniorg/eon/nice/v1/setbpv1_0.xsjs @@ -0,0 +1,1270 @@ +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 service_version = '6.2'; + +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 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_PAY\" 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), + BankBranch: 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 + "\""); + // TODO: Umstellen auf "@UO_SPOOL_TYPES" + var rs = conn.executeQuery('SELECT "Code" FROM "@UO_OUTPUT_RULES" 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 = ''; + 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 = JbpObj.addresses[0].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 = JbpObj.addresses[0].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 && !(SBOOBJ.U_UO_OUTPUT_VSARTAR && SBOOBJ.U_UO_OUTPUT_VSARTAR in ['CSV'])) { + 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.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') { + //mybpAdresses.AddressName2 = mycardname; + mybpAdresses.AddressName2 = myaddress23[0]; + //mybpAdresses.AddressName3 = myaddress23[1]; + mybpAdresses.U_CompanyName2 = myaddress23[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; + } + } + } + + //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') { + //myaddbpAdresses.AddressName2 = mycardname; + myaddbpAdresses.AddressName2 = myaddress23[0]; + //myaddbpAdresses.AddressName3 = myaddress23[1]; + myaddbpAdresses.U_CompanyName2 = myaddress23[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 (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') { + // 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); + } + outStatus = "error"; + } + 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 checkSupplierExist(cardcode) { + + var suppcardcode = cardcode + '-L'; + 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.\"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 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{\n \n //addBP(JSON.stringify(bpObj));\n //updBP(JSON.stringify(bpObj));\n //GetOrders(req); \n}\n*/ \ No newline at end of file diff --git a/uniorg/eon/nice/v1/setcontract.xsjs b/uniorg/eon/nice/v1/setcontract.xsjs new file mode 100644 index 0000000..71294b7 --- /dev/null +++ b/uniorg/eon/nice/v1/setcontract.xsjs @@ -0,0 +1,1320 @@ +var slib = $.import("uniorg.ServiceLayer", "B1SLLogic"); +var slDest = $.import("uniorg.destinations", "uodestlib"); +var copybplib = $.import("uniorg.eon.libs", "copybp"); +var dateTimeLib = $.import("uniorg.libs", "datetime"); + +var ParDebug = false; +var ParRecallIdList = ""; +var ParRecallMode = false; +var outMessages = []; +var outMsg = {}; +var outStatus = "success"; +var globalDebug = {}; +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 ContractUDOID = "EON_CONTR"; + +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 service_version = '5.2'; +// 03.11.2020 U_ORDER_ID (262) +// last changes: 31.03.2020 eoperate Felder +// Mapping Verträge 19.05.2020 +// Mapping evdriver undefined 12.08.2020 +//17.08.2020 Parameter können nun auch ohne evdriver gesnedet werden. +//16.09.2020 Erweiterung Aktivierungsgebühr +//Mazda 6 monatige RabattGebühr +//19.01.2021 duplicatebp lib Implementierung bei BFV Verträgen +//06.10.2021 GP_DISCOUNT_MONTH +//22.11.2021 Factor für BFV Verträge in Price Kollektion implementiert +//29.11.2022 EMPEPI1-145: Erweiterung Contract SST/ Prüfung alte Projektnummern +//23.06.2023 EMPEPI1-277: Validierungsprüfung BV ohne Chargepoint Parameter / Paramater ohne valid_from +//18.09.2023 EMPEPI1-316: zeitl. Abgrenzung für AG Flag +//15.12.2023 EMPEPI1-327: Fehlerbehandlung bei leerem valid_from in prices +//05.03.2024 EMPEPI1-347: BMW: PO-No. Zeitscheibensystem +//19.07.2024 BUS-7346: Error message for contract transmission to B1 +//19.07.2024 BUS-7579: BMW-CCA-Abrechnung eoperate_valid_to < eoperate_valid_from +//01.08.2024 Implementierung Rechnungsadresse +//13.12.2024 BUS-9963: Bestellnummern am E.ON-Vertrag "einfach" überschreiben +//11.02.2025 BUS-10922: RFID_CARD ohne Text1 und Text2 ablehnen + +var debugLevel = 0; +switch ($.request.parameters.get("debug")) { + case "true": + case "yes": + case "1": + debugLevel = 1; + break; + case "full": + case "2": + debugLevel = 2; + break; +} + +if (debugLevel > 1) { + globalDebug.requestParams = $.request.parameters; +} + +/*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 getProductId(prodID) { + /* switch (prodID) { + case "E.ON Drive Business ohne Grundgebühr": + prodID='E.ON Drive Business Comfort'; + break; + + case "LT_E.ON Drive ElectricFleet E.ON Konzern Ladetarif": + prodID='LT_E.ON DRIVE ELECTRICFLEET E.ON KONZERN LADETARIF'; + break; + + case "LT_E.ON Drive ElectricFleet Ladetarif": + prodID='E.ON DRIVE ELECTRICFLEET LADETARIF'; + break; + + case "BMW Group Corporate Charging CCA Ladetarif": + prodID='BMW GROUP CORPORATE CHARGING CCA LADETARIF'; + break; + case "LT_BMW Group Corporate Charging MA Ladetarif": + prodID='BMW GROUP CORPORATE CHARGING MA LADETARIF'; + break; + + default: + prodID = prodID; + }*/ + var conn = $.db.getConnection(); + var pstmt; + var query = + "SELECT MIN(T1.\"Code\") as \"Code\", T0.\"U_BILLING_MODE\" FROM \"XXREPXX\".\"@EON_PRODUCT\" T0 INNER JOIN \"XXREPXX\".\"@EON_PRODUCT_PARAM\" T1 ON T0.\"Code\"=T1.\"Code\" " + + "WHERE T1.U_COMPONENT = \'CRM_PRODUCT_ID\' AND UPPER(T1.\"U_ITEM\") = UPPER('" + + prodID + "') GROUP BY T0.\"U_BILLING_MODE\""; + query = query.replace(/XXREPXX/g, UserComp); + pstmt = conn.prepareStatement(query); + //pstmt.setString(1, prodID); + var rs = pstmt.executeQuery(); + if (!rs.next()) { + outMsg = {}; + outMsg.method = "getProductId"; + outMsg.message = "wrong ProductID - not exists in Table Product Param. ProductID: " + prodID; + if (debugLevel > 0) { + outMsg.message += " / Query: " + query; + } + outMsg.status = "error"; + outStatus = "error"; + // outMsg.message = e.message; + outMessages.push(outMsg); + } else { + var prodList = []; + do { + prodList.push({ + Code: rs.getNString(1), + BillingMode: rs.getString(2) + }); + } while (rs.next()); + return prodList; + } + rs.close(); + pstmt.close(); + conn.close(); +} + +function getProductComponents(prodCode, component) { + var prodComponents = []; + var conn = $.db.getConnection(); + var pstmt; + var query = + "SELECT \"LineId\", \"U_COMPONENT\", \"U_DESCRIPTION\", \"U_RULE\", \"U_ITEM\", \"U_VALID_FROM\", \"U_VALID_TO\", \"U_DATA_TEXT\", \"U_DATA_NUMERIC\", \"U_DATA_TEXT2\", \"U_DATA_NUMERIC2\" FROM \"XXREPXX\".\"@EON_PRODUCT_PARAM\" WHERE \"Code\"= ? AND \"U_COMPONENT\" = ?"; + query = query.replace(/XXREPXX/g, UserComp); + pstmt = conn.prepareStatement(query); + pstmt.setNString(1, prodCode); + pstmt.setNString(2, component); + globalDebug.getProductComponents = { + query: query, + prodCode: prodCode, + component: component + }; + var rs = pstmt.executeQuery(); + while (rs.next()) { + prodComponents.push({ + LineId: rs.getInteger(1), + U_COMPONENT: rs.getNString(2), + U_DESCRIPTION: rs.getNString(3), + U_RULE: rs.getNString(4), + U_ITEM: rs.getNString(5), + U_VALID_FROM: rs.getDate(6), + U_VALID_TO: rs.getDate(7), + U_DATA_TEXT: rs.getNString(8), + U_DATA_NUMERIC: rs.getInteger(9), + U_DATA_TEXT2: rs.getNString(10), + U_DATA_NUMERIC2: rs.getInteger(11) + }); + } + rs.close(); + pstmt.close(); + conn.close(); + return prodComponents; +} + +function getCardcodebyCRMID(mycrmid) { + var conn = $.db.getConnection(); + try { + var pstmt; + //var query = "select CARDCODE from TEST.OCRD WHERE U_EON_CRM_ID = " + crmid; + var query = "SELECT T0.\"CardCode\" FROM " + UserComp + ".\"OCRD\" T0 WHERE T0.\"CardType\" = 'C' AND T0.\"U_EON_ID_CRM\" = '" + mycrmid + + "'"; + pstmt = conn.prepareStatement(query); + var rs = pstmt.executeQuery(); + if (!rs.next()) { + outMsg = {}; + outMsg.method = "getCardCodebyCRMID"; + outMsg.message = "not found. CRM ID: " + mycrmid; + if (debugLevel > 0) { + outMsg.message += " / Query: " + query; + } + outMsg.status = "error"; + outStatus = "error"; + // outMsg.message = e.message; + outMessages.push(outMsg); + } else { + return rs.getString(1); + } + rs.close(); + pstmt.close(); + } catch (e) { + $.trace.error(e.message); + outMsg = {}; + outMsg.method = "getCardCodebyCRMID"; + outMsg.message = "getcardcodebycrmid error: " + query; + outMsg.status = "error"; + // outMsg.message = e.message; + outMessages.push(outMsg); + throw e; + } finally { + conn.close(); + } + throw new Error("not found. CRM ID: " + mycrmid); +} + +function validateProject(project) { + const today = new Date(); + const oldProjectsNotAllowedFrom = new Date('2022-12-06T00:00:00+01:00'); + if (project && project.startsWith('80') && today >= oldProjectsNotAllowedFrom) { + throw new Error("Old project numbers starting with '80' are not allowed anymore"); + } +} + +function validatePayload(payload) { + if (payload.hasOwnProperty("product") && payload.product.startsWith('BV_')) { + // chargepoint compoment mandatory for BV contracts + if (!(payload.hasOwnProperty("parameters") && payload.parameters instanceof Array && payload.parameters.some(function(p) { + return p.component === 'CHARGEPOINT'; + }))) { + throw new Error("Chargepoint is missing"); + } + } +} + +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 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 buildContractObj(InObj, SBOOBJ, billingMode) { + var isAO = billingMode === 'AO'; + var isCreateMode = Object.keys(SBOOBJ).length === 0; + + var UDOObj = {}; + UDOObj.U_VALID_FROM = isAO ? InObj.implementation_date : InObj.begin_date; + UDOObj.U_VALID_TO = InObj.end_date; + UDOObj.U_EXT_ID_CRM = InObj.contract_id; + UDOObj.U_EXT_ID_PREBILLING = InObj.c_id; + UDOObj.U_PROJECT = InObj.project; + UDOObj.U_ORDER_ID = InObj.orderid; + + var productCode = getProductId(InObj.product).find(function(p) { + return p.BillingMode === billingMode; + }).Code; + UDOObj.U_PRODUCT = productCode; + if (InObj.product_customer_name) { + UDOObj.U_ORDER_ID = InObj.product_customer_name; + } + if (isAO) { + UDOObj.U_CUSTOMER = getCardcodebyCRMID(InObj.bp_crm) + '-L'; + /*} else if (InObj.ev_drivers != undefined) { + if (InObj.ev_drivers[0].parameters[0].component === "RFID_CARD") { + UDOObj.U_CUSTOMER = getCardcodebyCRMID(InObj.bp_crm); + }*/ + } else { + UDOObj.U_CUSTOMER = getCardcodebyCRMID(InObj.bp_crm); + } + + UDOObj.U_SIGNATURE_DATE = (InObj.signature_date === null) ? SBOOBJ.U_SIGNATURE_DATE : InObj.signature_date; + + UDOObj.U_BillToAddress2 = InObj.invoice_address && InObj.invoice_address.person ? splitcardname(InObj.invoice_address.person.company_name)[0] : ''; + UDOObj.U_CompanyName2B = InObj.invoice_address && InObj.invoice_address.person ? splitcardname(InObj.invoice_address.person.company_name)[1].substring(0,50) : ''; + UDOObj.U_BillToBuilding = InObj.invoice_address && InObj.invoice_address.person ? InObj.invoice_address.person.street_addon : ''; + UDOObj.U_BillToAddress3 = InObj.invoice_address && InObj.invoice_address.person ? InObj.invoice_address.person.salutation + ' ' + InObj.invoice_address.person.name : ''; + UDOObj.U_BillToStreet = InObj.invoice_address && InObj.invoice_address.address ? InObj.invoice_address.address.street_name : ''; + UDOObj.U_BillToStreetNo = InObj.invoice_address && InObj.invoice_address.address ? InObj.invoice_address.address.housenumber : ''; + UDOObj.U_BillToZipCode = InObj.invoice_address && InObj.invoice_address.address ? InObj.invoice_address.address.postalcode : ''; + UDOObj.U_BillToCity = InObj.invoice_address && InObj.invoice_address.address ? InObj.invoice_address.address.city : ''; + UDOObj.U_BillToCountry = InObj.invoice_address && InObj.invoice_address.address ? InObj.invoice_address.address.country : ''; + + // get special product components + var prodComponentsAG = getProductComponents(productCode, "AG").filter(function(comp) { + var beginDate = dateTimeLib.convertToISODate(InObj.begin_date); + return comp.U_VALID_FROM === null || dateTimeLib.convertToISODate(comp.U_VALID_FROM) <= beginDate && comp.U_VALID_TO === null || + dateTimeLib.convertToISODate(comp.U_VALID_TO) >= beginDate; + }); + var prodComponentsGP_DISCOUNT_MONTH = getProductComponents(productCode, "GP_DISCOUNT_MONTH"); + var prodComponentsTP_DISCOUNT_MONTH = getProductComponents(productCode, "TP_DISCOUNT_MONTH"); + var prodComponentsBFV_BILLING = getProductComponents(productCode, "BFV_BILLING"); + var prodComponentsINITIAL_BILLING_BLOCK = getProductComponents(productCode, "INITIAL_BILLING_BLOCK"); + + prodComponentsINITIAL_BILLING_BLOCK.forEach(function(pc) { + if (pc.U_RULE === "Flag" && pc.U_DATA_TEXT && pc.U_DATA_TEXT.length <= 2 && isCreateMode) { + UDOObj.U_BILLING_BLOCK = pc.U_DATA_TEXT; + } + }); + + // Price Collection + + UDOObj.EON_CONTRACT_PRICECollection = []; + + for (var g in SBOOBJ.EON_CONTRACT_PRICECollection) { + var myPrice = {}; + // copy existing + myPrice = SBOOBJ.EON_CONTRACT_PRICECollection[g]; + + for (var h in InObj.prices) { + + if (SBOOBJ.EON_CONTRACT_PRICECollection[g].U_ITEM === InObj.prices[h].item) { + if (!InObj.prices[h].valid_from) { + throw new Error("Prices: valid_from is missing"); + } + myPrice.U_VALID_FROM = (InObj.prices[h].valid_from === null) ? SBOOBJ.EON_CONTRACT_PRICECollection[g].U_VALID_FROM : InObj.prices[h].valid_from; + myPrice.U_VALID_TO = (InObj.prices[h].valid_to === null) ? SBOOBJ.EON_CONTRACT_PRICECollection[g].U_VALID_TO : InObj.prices[h].valid_to; + myPrice.U_PRICE = (InObj.prices[h].price === null) ? SBOOBJ.EON_CONTRACT_PRICECollection[g].U_PRICE : InObj.prices[h].price; + myPrice.U_FACTOR = (InObj.prices[h].price === null) ? SBOOBJ.EON_CONTRACT_PRICECollection[g].U_FACTOR : InObj.prices[h].factor; + break; + } + } + UDOObj.EON_CONTRACT_PRICECollection.push(myPrice); + + } + + // Sonderpreise für Rabattmonate + prodComponentsGP_DISCOUNT_MONTH.concat(prodComponentsTP_DISCOUNT_MONTH).forEach(function(pc) { + if (SBOOBJ.EON_CONTRACT_PRICECollection === undefined || SBOOBJ.EON_CONTRACT_PRICECollection.findIndex(function(x) { + return x.U_ITEM === pc.U_ITEM; + }) === -1) { + var connection = $.hdb.getConnection(); + var validToDate = connection.executeQuery('SELECT ADD_MONTHS(?,?) FROM DUMMY', InObj.begin_date, pc.U_DATA_NUMERIC)[0][0]; + connection.close(); + UDOObj.EON_CONTRACT_PRICECollection.push({ + U_ITEM: pc.U_ITEM, + U_VALID_FROM: InObj.begin_date, + U_VALID_TO: validToDate, + U_PRICE: parseFloat(pc.U_DATA_TEXT2.replace(/,/g, '.')) + }); + } + }); + + // Sonderpreise für kostenfreie Monate BFV BFV_BILLING + if (InObj.costfree_months && InObj.costfree_months > 0) { + prodComponentsBFV_BILLING.forEach(function(pc) { + var connection = $.hdb.getConnection(); + var validToDate = connection.executeQuery('SELECT ADD_MONTHS_LAST(LAST_DAY(ADD_DAYS(?, -1)), ?) FROM DUMMY', InObj.begin_date, InObj.costfree_months)[ + 0][0]; + connection.close(); + // update existing special price entry, if existing + UDOObj.EON_CONTRACT_PRICECollection.filter(function(x) { + return Boolean(x.U_ITEM) && x.U_ITEM === pc.U_ITEM && x.U_PRICE === 0.0; + }).forEach(function(pcUpdate) { + pcUpdate.U_VALID_FROM = InObj.begin_date; + pcUpdate.U_VALID_TO = dateTimeLib.convertToISODate(validToDate); + }); + // add new special price entry + if (UDOObj.EON_CONTRACT_PRICECollection.findIndex(function(x) { + return x.U_ITEM === pc.U_ITEM; + }) === -1) { + UDOObj.EON_CONTRACT_PRICECollection.push({ + U_ITEM: pc.U_ITEM, + U_VALID_FROM: InObj.begin_date, + U_VALID_TO: dateTimeLib.convertToISODate(validToDate), + U_PRICE: 0.0 + }); + } + }); + } + // bestehenden Sonderpreis entfernen, falls kostenfreie Monate auf 0 geändert werden + if (InObj.hasOwnProperty('costfree_months') && InObj.costfree_months === 0 && UDOObj.EON_CONTRACT_PRICECollection.length > 0) { + prodComponentsBFV_BILLING.forEach(function(pc) { + for (var x = UDOObj.EON_CONTRACT_PRICECollection.length - 1; x >= 0; x--) { + if (Boolean(UDOObj.EON_CONTRACT_PRICECollection[x].U_ITEM) && UDOObj.EON_CONTRACT_PRICECollection[x].U_ITEM === pc.U_ITEM && UDOObj.EON_CONTRACT_PRICECollection[ + x].U_PRICE === 0.0) { + UDOObj.EON_CONTRACT_PRICECollection.splice(x, 1); + } + } + }); + } + + //Suche ob Objekte vorhanden wenn nicht ergänzen + + for (var h in InObj.prices) { + var myfound = false; + for (var g in SBOOBJ.EON_CONTRACT_PRICECollection) { + if (SBOOBJ.EON_CONTRACT_PRICECollection[g].U_ITEM === InObj.prices[h].item) { + myfound = true; + } + } + + if (myfound === false) { + var myPrice = {}; + + if (!InObj.prices[h].valid_from) { + throw new Error("Prices: valid_from is missing"); + } + + myPrice.U_VALID_FROM = InObj.prices[h].valid_from; + myPrice.U_VALID_TO = InObj.prices[h].valid_to; + myPrice.U_PRICE = InObj.prices[h].price; + myPrice.U_ITEM = InObj.prices[h].item; + myPrice.U_FACTOR = InObj.prices[h].factor; + + UDOObj.EON_CONTRACT_PRICECollection.push(myPrice); + } + } + + //EV Drivers neu 4.2.2019 + // EVDRIVERS Collection + + UDOObj.EON_CONTRACT_EVDRVCollection = []; + + for (var g in SBOOBJ.EON_CONTRACT_EVDRVCollection) { + var myEVDRV = {}; + // copy existing + myEVDRV = SBOOBJ.EON_CONTRACT_EVDRVCollection[g]; + + for (var h in InObj.ev_drivers) { + + if (myEVDRV.U_EV_DRIVERID === InObj.ev_drivers[h].ev_driverid) { + // UDOObj.U_EXT_ID_PREBILLING = InObj.ev_drivers[h].c_id; + myEVDRV.U_EV_DRIVER = InObj.ev_drivers[h].ev_driver; + myEVDRV.U_NICE_ID = InObj.ev_drivers[h].c_id; + myEVDRV.U_FIRSTNAME = (InObj.ev_drivers[h].firstname === null) ? myEVDRV.U_FIRSTNAME : InObj.ev_drivers[h].firstname; + myEVDRV.U_LASTNAME = (InObj.ev_drivers[h].lastname === null) ? myEVDRV.U_LASTNAME : InObj.ev_drivers[h].lastname; + // myParam.U_EMAIL = (InObj.ev_drivers[h].email === null) ? myEVDRV.U_EMAIL : InObj.ev_drivers[h].email; + myEVDRV.U_LICENSE_PLATE = (InObj.ev_drivers[h].license_plate === null) ? myEVDRV.U_LICENSE_PLATE : InObj.ev_drivers[h].license_plate; + myEVDRV.U_VIRTA_ID = (InObj.ev_drivers[h].virta_id === null) ? myEVDRV.U_VIRTA_ID : InObj.ev_drivers[h].virta_id; + myEVDRV.U_VIRTA_VALID_FROM = (InObj.ev_drivers[h].virta_valid_from === null) ? myEVDRV.U_VIRTA_VALID_FROM : InObj.ev_drivers[h].virta_valid_from; + myEVDRV.U_VIRTA_VALID_TO = (InObj.ev_drivers[h].virta_valid_to === null) ? myEVDRV.U_VIRTA_VALID_TO : InObj.ev_drivers[h].virta_valid_to; + + myEVDRV.U_NICE_VALID_FROM = (InObj.ev_drivers[h].nice_valid_from === null) ? myEVDRV.U_NICE_VALID_FROM : InObj.ev_drivers[h].nice_valid_from; + myEVDRV.U_NICE_VALID_TO = (InObj.ev_drivers[h].nice_valid_to === null) ? myEVDRV.U_NICE_VALID_TO : InObj.ev_drivers[h].nice_valid_to; + //neu 31.03.2020 eoperate Felder + myEVDRV.U_EOPERATE_ID = (InObj.ev_drivers[h].eoperate_ID === null) ? myEVDRV.U_EOPERATE_ID : InObj.ev_drivers[h].eoperate_ID; + myEVDRV.U_EOPERATE_VALID_FROM = (InObj.ev_drivers[h].eoperate_valid_from === null) ? myEVDRV.U_EOPERATE_VALID_FROM : InObj.ev_drivers[h] + .eoperate_valid_from; + myEVDRV.U_EOPERATE_VALID_TO = (InObj.ev_drivers[h].eoperate_valid_to === null) ? myEVDRV.U_EOPERATE_VALID_TO : + InObj.ev_drivers[h].eoperate_valid_to >= InObj.ev_drivers[h].eoperate_valid_from ? InObj.ev_drivers[h].eoperate_valid_to : null; + + break; + } + } + + UDOObj.EON_CONTRACT_EVDRVCollection.push(myEVDRV); + + } + + //Suche ob Objekte vorhanden wenn nicht ergänzen + + for (var h in InObj.ev_drivers) { + var myfound = false; + for (var g in SBOOBJ.EON_CONTRACT_EVDRVCollection) { + if (SBOOBJ.EON_CONTRACT_EVDRVCollection[g].U_EV_DRIVERID === InObj.ev_drivers[h].ev_driverid) { + myfound = true; + } + } + + if (myfound === false) { + var myEVDRV = {}; + // UDOObj.U_EXT_ID_PREBILLING = InObj.ev_drivers[h].c_id; + myEVDRV.U_EV_DRIVER = InObj.ev_drivers[h].ev_driver; + myEVDRV.U_NICE_ID = InObj.ev_drivers[h].c_id; + myEVDRV.U_EV_DRIVERID = InObj.ev_drivers[h].ev_driverid; + myEVDRV.U_FIRSTNAME = InObj.ev_drivers[h].firstname; + myEVDRV.U_LASTNAME = InObj.ev_drivers[h].lastname; + // myParam.U_EMAIL = InObj.ev_drivers[h].email; + myEVDRV.U_LICENSE_PLATE = InObj.ev_drivers[h].license_plate; + myEVDRV.U_VIRTA_ID = InObj.ev_drivers[h].virta_id; + myEVDRV.U_VIRTA_VALID_TO = InObj.ev_drivers[h].virta_valid_to; + myEVDRV.U_VIRTA_VALID_FROM = InObj.ev_drivers[h].virta_valid_from; + myEVDRV.U_NICE_VALID_FROM = InObj.ev_drivers[h].nice_valid_from; + myEVDRV.U_NICE_VALID_TO = InObj.ev_drivers[h].nice_valid_to; + //neu 31.03.2020 eoperate Felder + myEVDRV.U_EOPERATE_ID = InObj.ev_drivers[h].eoperate_ID; + myEVDRV.U_EOPERATE_VALID_FROM = InObj.ev_drivers[h].eoperate_valid_from; + myEVDRV.U_EOPERATE_VALID_TO = InObj.ev_drivers[h].eoperate_valid_to >= InObj.ev_drivers[h].eoperate_valid_from ? InObj.ev_drivers[h].eoperate_valid_to : null; + + UDOObj.EON_CONTRACT_EVDRVCollection.push(myEVDRV); + } + + } + + // Param Collection + + UDOObj.EON_CONTRACT_PARAMCollection = []; + + //LOOP durch existierende Parameter + loopParamsB1: for (var i in SBOOBJ.EON_CONTRACT_PARAMCollection) { + var myParam2 = {}; + // copy existing + myParam2 = SBOOBJ.EON_CONTRACT_PARAMCollection[i]; + // Abgleich mit Parameters aus ev_drivers.parameters + loopEVDriversInObj: for (var h in InObj.ev_drivers) { + loopParamsInObj: for (var j in InObj.ev_drivers[h].parameters) { + if (myParam2.U_DATA_TEXT === InObj.ev_drivers[h].parameters[j].text1) { + //myParam.DocEntry=SBOOBJ.EON_CONTRACT_PARAMCollection[g].DocEntry; + //myParam.LineId=SBOOBJ.EON_CONTRACT_PARAMCollection[g].LineId; + //myParam.VisOrder=SBOOBJ.EON_CONTRACT_PARAMCollection[g].VisOrder; + //myParam.Object=SBOOBJ.EON_CONTRACT_PARAMCollection[g].Object; + myParam2.U_COMPONENT = (InObj.ev_drivers[h].parameters[j].component === null) ? myParam2.U_COMPONENT : + InObj.ev_drivers[h].parameters[j].component; + //myParam.U_DESCRIPTION=SBOOBJ.EON_CONTRACT_PARAMCollection[g].U_DESCRIPTION; + //myParam.U_RULE=SBOOBJ.EON_CONTRACT_PARAMCollection[g].U_RULE; + myParam2.U_DATA_TEXT = (InObj.ev_drivers[h].parameters[j].text1 === null) ? myParam2.U_DATA_TEXT : + InObj.ev_drivers[h].parameters[j].text1; + myParam2.U_DATA_NUMERIC = (InObj.ev_drivers[h].parameters[j].numeric1 === null) ? myParam2.U_DATA_NUMERIC : + InObj.ev_drivers[h].parameters[j].numeric1; + myParam2.U_DATA_TEXT2 = (InObj.ev_drivers[h].parameters[j].text2 === null) ? myParam2.U_DATA_TEXT2 : + InObj.ev_drivers[h].parameters[j].text2; + myParam2.U_DATE_NUMERIC2 = (InObj.ev_drivers[h].parameters[j].numeric2 === null) ? myParam2.U_DATE_NUMERIC2 : + InObj.ev_drivers[h].parameters[j].numeric2; + myParam2.U_VALID_FROM = (InObj.ev_drivers[h].parameters[j].valid_from === null) ? myParam2.U_VALID_FROM : + InObj.ev_drivers[h].parameters[j].valid_from; + myParam2.U_VALID_TO = (InObj.ev_drivers[h].parameters[j].valid_to === null) ? myParam2.U_VALID_TO : + InObj.ev_drivers[h].parameters[j].valid_to; + //myParam.U_ITEM=SBOOBJ.EON_CONTRACT_PARAMCollection[g].U_ITEM; + myParam2.U_DATA_TEXT3 = (InObj.ev_drivers[h].ev_driverid === null) ? myParam2.U_DATA_TEXT3 : InObj.ev_drivers[h].ev_driverid; + break loopEVDriversInObj; + } + } + } + // Abgleich mit Parametern aus Kopfebene + for (var j in InObj.parameters) { + if (myParam2.U_DATA_TEXT === InObj.parameters[j].text1) { + myParam2.U_COMPONENT = (InObj.parameters[j].component === null) ? myParam2.U_COMPONENT : + InObj.parameters[j].component; + myParam2.U_RULE = "data"; + //myParam.U_DESCRIPTION=SBOOBJ.EON_CONTRACT_PARAMCollection[g].U_DESCRIPTION; + //myParam.U_RULE=SBOOBJ.EON_CONTRACT_PARAMCollection[g].U_RULE; + myParam2.U_DATA_TEXT = (InObj.parameters[j].text1 === null) ? myParam2.U_DATA_TEXT : + InObj.parameters[j].text1; + myParam2.U_DATA_NUMERIC = (InObj.parameters[j].numeric1 === null) ? myParam2.U_DATA_NUMERIC : + InObj.parameters[j].numeric1; + myParam2.U_DATA_TEXT2 = (InObj.parameters[j].text2 === null) ? myParam2.U_DATA_TEXT2 : + InObj.parameters[j].text2; + myParam2.U_DATA_NUMERIC2 = (InObj.parameters[j].numeric2 === null) ? myParam2.U_DATA_NUMERIC2 : + InObj.parameters[j].numeric2; + myParam2.U_VALID_FROM = (InObj.parameters[j].valid_from === null) ? myParam2.U_VALID_FROM : + InObj.parameters[j].valid_from; + myParam2.U_VALID_TO = (InObj.parameters[j].valid_to === null) ? myParam2.U_VALID_TO : + InObj.parameters[j].valid_to; + if (InObj.parameters[j].valid_to && !InObj.parameters[j].valid_from) { + throw new Error("Parameter with valid_to but without valid_from is not allowed"); + } + myParam2.U_DATA_PRICE1 = (InObj.parameters[j].price1 === null) ? myParam2.U_DATA_PRICE1 : + InObj.parameters[j].price1; + //myParam.U_ITEM=SBOOBJ.EON_CONTRACT_PARAMCollection[g].U_ITEM; + myParam2.U_DATA_TEXT3 = (InObj.parameters[j].text3 === null) ? myParam2.U_DATA_TEXT3 : + InObj.parameters[j].text3; + } + } + UDOObj.EON_CONTRACT_PARAMCollection.push(myParam2); + } + + // neue Aktivierungsgebühr hinzufügen + if (prodComponentsAG.length > 0 && (SBOOBJ.EON_CONTRACT_PARAMCollection === undefined || SBOOBJ.EON_CONTRACT_PARAMCollection.findIndex( + function(x) { + return x.U_COMPONENT === "AG"; + }) === -1)) { + UDOObj.EON_CONTRACT_PARAMCollection.push({ + U_COMPONENT: prodComponentsAG[0].U_COMPONENT, + U_DESCRIPTION: prodComponentsAG[0].U_DESCRIPTION, + U_RULE: "const1", + U_ITEM: prodComponentsAG[0].U_ITEM, + U_VALID_FROM: InObj.begin_date, + U_VALID_TO: InObj.begin_date + }); + } + + // neue Rabattmonate hinzufügen + prodComponentsTP_DISCOUNT_MONTH.forEach(function(pc) { + if (SBOOBJ.EON_CONTRACT_PARAMCollection === undefined || SBOOBJ.EON_CONTRACT_PARAMCollection.findIndex(function(x) { + return x.U_COMPONENT === pc.U_DATA_TEXT; + }) === -1) { + var connection = $.hdb.getConnection(); + var validToDate = connection.executeQuery('SELECT ADD_MONTHS(?,?) FROM DUMMY', InObj.begin_date, pc.U_DATA_NUMERIC)[0][0]; + connection.close(); + UDOObj.EON_CONTRACT_PARAMCollection.push({ + U_COMPONENT: pc.U_DATA_TEXT, + U_DESCRIPTION: pc.U_DESCRIPTION, + U_RULE: "QxP", + U_ITEM: pc.U_ITEM, + U_VALID_FROM: InObj.begin_date, + U_VALID_TO: validToDate + }); + } + }); + + // neue Grundpreis Rabattmonate hinzufügen + prodComponentsGP_DISCOUNT_MONTH.forEach(function(pc) { + if (SBOOBJ.EON_CONTRACT_PARAMCollection === undefined || SBOOBJ.EON_CONTRACT_PARAMCollection.findIndex(function(x) { + return x.U_COMPONENT === pc.U_DATA_TEXT; + }) === -1) { + var connection = $.hdb.getConnection(); + var validToDate = connection.executeQuery('SELECT ADD_MONTHS(?,?) FROM DUMMY', InObj.begin_date, pc.U_DATA_NUMERIC)[0][0]; + connection.close(); + UDOObj.EON_CONTRACT_PARAMCollection.push({ + U_COMPONENT: pc.U_DATA_TEXT, + U_DESCRIPTION: pc.U_DESCRIPTION, + U_RULE: "const", + U_ITEM: pc.U_ITEM, + U_VALID_FROM: InObj.begin_date, + U_VALID_TO: validToDate + }); + } + }); + + // neue Parameter aus ev_drivers.parameters hinzufügen + for (var h in InObj.ev_drivers) { + for (var k in InObj.ev_drivers[h].parameters) { + var myfound2 = false; + for (var l in SBOOBJ.EON_CONTRACT_PARAMCollection) { + if (SBOOBJ.EON_CONTRACT_PARAMCollection[l].U_DATA_TEXT === InObj.ev_drivers[h].parameters[k].text1) { + myfound2 = true; + } + } + + if (myfound2 === false) { + var myParam3 = {}; + + if (InObj.ev_drivers[h].parameters[k].component === 'RFID_CARD' && !InObj.ev_drivers[h].parameters[k].text1 && !InObj.ev_drivers[h].parameters[k].text2) { + throw new Error("Parameter RFID_CARD with empty text1 and text2 is not allowed"); + } + myParam3.U_COMPONENT = InObj.ev_drivers[h].parameters[k].component; + //myParam.U_DESCRIPTION=""; + myParam3.U_RULE = "data"; + myParam3.U_DATA_TEXT = InObj.ev_drivers[h].parameters[k].text1; + myParam3.U_DATA_NUMERIC = InObj.ev_drivers[h].parameters[k].numeric1; + myParam3.U_DATA_TEXT2 = InObj.ev_drivers[h].parameters[k].text2; + myParam3.U_DATE_NUMERIC2 = InObj.ev_drivers[h].parameters[k].numeric2; + myParam3.U_VALID_FROM = InObj.ev_drivers[h].parameters[k].valid_from; + myParam3.U_VALID_TO = InObj.ev_drivers[h].parameters[k].valid_to; + myParam3.U_DATA_TEXT3 = InObj.ev_drivers[h].ev_driverid; + //myParam.U_ITEM=""; + + UDOObj.EON_CONTRACT_PARAMCollection.push(myParam3); + } + } + } + // neue Parameter aus Kopfebene hinzufügen + for (var k in InObj.parameters) { + var myfound3 = false; + for (var l in SBOOBJ.EON_CONTRACT_PARAMCollection) { + if (SBOOBJ.EON_CONTRACT_PARAMCollection[l].U_DATA_TEXT === InObj.parameters[k].text1) { + myfound3 = true; + } + } + if (myfound3 === false) { + var myParam4 = {}; + if (InObj.parameters[k].component === 'RFID_CARD' && !InObj.parameters[k].text1 && !InObj.parameters[k].text2) { + throw new Error("Parameter RFID_CARD with empty text1 and text2 is not allowed"); + } + myParam4.U_COMPONENT = InObj.parameters[k].component; + //myParam.U_DESCRIPTION=""; + myParam4.U_RULE = "data"; + myParam4.U_DATA_TEXT = InObj.parameters[k].text1; + myParam4.U_DATA_NUMERIC = InObj.parameters[k].numeric1; + myParam4.U_DATA_TEXT2 = InObj.parameters[k].text2; + myParam4.U_DATE_NUMERIC2 = InObj.parameters[k].numeric2; + myParam4.U_VALID_FROM = InObj.parameters[k].valid_from; + myParam4.U_VALID_TO = InObj.parameters[k].valid_to; + if (InObj.parameters[k].valid_to && !InObj.parameters[k].valid_from) { + throw new Error("Parameter with valid_to but without valid_from is not allowed"); + } + myParam4.U_DATA_PRICE1 = InObj.parameters[k].price1; + myParam4.U_DATA_TEXT3 = InObj.parameters[k].text3; + //myParam.U_ITEM=""; + UDOObj.EON_CONTRACT_PARAMCollection.push(myParam4); + } + } + + // PO Numbers + var POCollection = []; + if (InObj.po_numbers) { + if (SBOOBJ.EON_CONTRACT_POCollection) { + // update existing PO numbers, but discard old entries that are not included in new request + POCollection = SBOOBJ.EON_CONTRACT_POCollection.filter(function(sboPO) { + return InObj.po_numbers.some(function(inPO) { + return inPO.id === sboPO.U_ID; + }); + }).map(function(po) { + var matchedPO = InObj.po_numbers.find(function(inPO) { + return inPO.id === po.U_ID; + }); + return { + DocEntry: po.DocEntry, + LineId: po.LineId, + U_ID: po.U_ID, + U_PO_NUMBER: matchedPO.po_number, + U_VALID_FROM: matchedPO.valid_from, + U_VALID_TO: matchedPO.valid_to + }; + }); + } + // add new PO Numbers + var newPOLines = InObj.po_numbers.filter(function(inPO) { + return isCreateMode || !SBOOBJ.EON_CONTRACT_POCollection.some(function(po) { + return inPO.id === po.U_ID; + }); + }).map(function(newPO) { + return { + U_ID: newPO.id, + U_PO_NUMBER: newPO.po_number, + U_VALID_FROM: newPO.valid_from, + U_VALID_TO: newPO.valid_to + }; + }); + POCollection = POCollection.concat(newPOLines); + } + UDOObj.EON_CONTRACT_POCollection = POCollection; + return UDOObj; +} + +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 upsContract(searchparam, InObj, billingMode) { + + var output = {}; + var myDebug = { + billingMode: billingMode, + searchparam: searchparam + }; + var SESSIONID = ""; + var NODEID = ""; + + // SL credentials + var loginInfo = {}; + loginInfo.UserName = UserName; + loginInfo.Password = UserPass; + loginInfo.CompanyDB = UserComp; + + var slError; + + //getProductId(InObj.product); + if (outStatus !== "error") { + // 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; + } + } + if (ParDebug) { + //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 (outStatus !== "error") { + + outMsg = {}; + if (ParRecallMode) { + outMsg.id = globalDebug.mynextval; + } + outMsg.method = "check " + ContractUDOID + " Exists"; + //Add BP + //response = slib.createBusinessPartner(BPObject, SESSIONID,NODEID); + //var responseGet = slib.getBusinessPartner(searchparam, SESSIONID, NODEID); + var responseGet = slib.getDocUDO(ContractUDOID, searchparam, SESSIONID, NODEID); + //var logoutresponse = slib.SLLogout(JSON.stringify(loginInfo), null, null); + //Parse response body + + // Removes metadata + //delete body["odata.metadata"]; + + var DocEntry = 0; + var bodyGetFull = {}; + + 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"; + if (bodyGet.value[0]) { + DocEntry = bodyGet.value[0].DocEntry; + bodyGetFull = bodyGet.value[0]; + outMsg.message = "exists"; + } else { + outMsg.message = "not 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); + + /* if (DocEntry > 0) { + outMsg = {}; + outMsg.method = "get"; + outMsg.status = "success"; + outMsg.message = bodyGetFull; + outMessages.push(outMsg); + }*/ + + /* var Code = ""; + var bodyGetFull = {}; + if (bodyGet.value[0]) { + //Code = 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; + outStatus = "error"; + } + outMessages.push(outMsg); + }*/ + + if (outStatus !== "error") { + + var consContractObject = buildContractObj(InObj, bodyGetFull, billingMode); + myDebug.ContractObj = consContractObject; + + if (DocEntry > 0) { + output.method = "update"; + var responseUpdate = slib.updateDocUDO(ContractUDOID, DocEntry, JSON.stringify(consContractObject), SESSIONID, NODEID); + outMsg = {}; + if (ParRecallMode) { + outMsg.id = globalDebug.mynextval; + } + 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; + } + outStatus = "error"; + } + outMessages.push(outMsg); + + } else { + + outMsg = {}; + if (ParRecallMode) { + outMsg.id = globalDebug.mynextval; + } + outMsg.method = "create"; + var responseCreate = slib.createDocUDO(ContractUDOID, JSON.stringify(consContractObject), 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 createUDOObj = JSON.parse(responseCreate.body.asString()); + DocEntry = createUDOObj.DocEntry; + } 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; + } + outMessages.push(outMsg); + } + + } + output.DocEntry = DocEntry; + + 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_CONTRACT_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_CONTRACTS\" 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(); + globalDebug.UpdateQuery = query; + + pstmt.close(); + conn.commit(); + conn.close(); + +} + +function setRESPONSE(tableid, respstatus, respmessage) { + var conn = $.db.getConnection(); + var pstmt; + var query = + "update \"NICEPORTAL\".\"UO_CRM_DATA_CONTRACTS\" set RESPONSE_STATUS = ? , RESPONSE_MESSAGE =?, UPDATE_TS = CURRENT_TIMESTAMP where ID =" + + tableid; + pstmt = conn.prepareStatement(query); + pstmt.setString(1, respstatus.toString()); + pstmt.setString(2, respmessage.toString()); + + var rs = pstmt.executeUpdate(); + globalDebug.UpdateQuery = query; + + pstmt.close(); + conn.commit(); + conn.close(); + +} + +function PutBPDataInTable(recalljsonRaw, id) { + var mynextval; + + var pdcontent = "" + if (ParRecallMode) { + pdcontent = recalljsonRaw; + mynextval = id; + globalDebug.mynextval = mynextval; + } else { + mynextval = getnextval(); + globalDebug.mynextval = mynextval; + 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: [] }; + + try { + + if (!ParRecallMode) { + // 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_CONTRACTS\" (ID,ID_MSD,ID_CRM,JSONRAW,B1_CODE,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.contract_id.toString()); + pstmt.setString(2, JbpObj.bp_crm.toString()); + pstmt.setString(3, JSON.stringify(JbpObj)); + pstmt.setString(4, getCardcodebyCRMID(JbpObj.bp_crm)); + var rs = pstmt.executeUpdate(); + pstmt.close(); + conn.commit(); + conn.close(); + + outMsg = {}; + outMsg.method = "insertDB"; + outMsg.status = "success"; + outMessages.push(outMsg); + } + validatePayload(JbpObj); + validateProject(JbpObj.project); + var cardCode = getCardcodebyCRMID(JbpObj.bp_crm); + if (cardCode) { + var productList = getProductId(JbpObj.product); + var retUpsertContract = []; + if (productList) { + productList.forEach(function(p) { + if (p.BillingMode === 'AO') { + outMsg = {}; + if (ParRecallMode) { + outMsg.id = globalDebug.mynextval; + } + outMsg.method = "copyBP"; + outMsg.paramCardCode = cardCode; + var bpoutput = copybplib.copyBP(ParDebug, cardCode); + outMsg.result = bpoutput; + outMessages.push(outMsg); + + var searchparam2 = {}; + searchparam2.key = "U_CUSTOMER eq '" + cardCode + "-L' and " + "U_EXT_ID_CRM"; + searchparam2.value = JbpObj.contract_id.toString(); + retUpsertContract.push(upsContract(searchparam2, JbpObj, p.BillingMode)); + } else { + var searchparam1 = {}; + searchparam1.key = "U_CUSTOMER eq '" + cardCode + "' and " + "U_EXT_ID_CRM"; + searchparam1.value = JbpObj.contract_id.toString(); + retUpsertContract.push(upsContract(searchparam1, JbpObj, p.BillingMode)); + } + }); + } + } + //var retUpsertBP = upsBP(searchparam, JSON.stringify(bpObj),JbpObj); + //var retUpsertBP = upsertBP(searchparam, JSON.stringify(bpObj)); + //var retUpsertBP = addBP(JSON.stringify(bpObj)); + + } catch (e) { + $.trace.error(e.message); + outMsg = {}; + if (ParRecallMode) { + outMsg.id = globalDebug.mynextval; + } + outMsg.method = "exceptionHandler"; + outMsg.status = "error"; + outMsg.message = e.message; + if (debugLevel > 0) { + 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; + } + if (debugLevel > 0) { + vals.debugInfos = globalDebug; + } + + // 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); + + $.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; + setRESPONSE(mynextval, outStatus, errbody); + 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) { + if (debugLevel > 0) { + vals.debugInfos = globalDebug; + } + vals.debug = { + productList: productList, + upsert: retUpsertContract + }; + } + //vals.mode = JSON.stringify(retUpsertBP.mode); + data.push(vals); + var okbody = JSON.stringify(data); + //var body = JSON.stringify(test); + setRESPONSE(mynextval, outStatus, okbody); + $.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(); +} + +function recallJSONRAW(idList) { + + var vals = {}; + var data = []; + var conn = $.db.getConnection(); + var pstmt; + var query = "SELECT \"JSONRAW\",\"ID\" FROM \"NICEPORTAL\".\"UO_CRM_DATA_CONTRACTS\" WHERE ID IN ( " + idList + ")"; + pstmt = conn.prepareStatement(query); + //pstmt.setString(1, prodID); + var rs = pstmt.executeQuery(); + if (!rs.next()) { + outMsg = {}; + outMsg.method = "recallJSONRAW"; + outMsg.message = "Empty ID List Parameter: " + idList; + if (debugLevel > 0) { + outMsg.message += " / Query: " + query; + } + outMsg.status = "error"; + outStatus = "error"; + // outMsg.message = e.message; + outMessages.push(outMsg); + + vals.status = 'error'; + //vals.description = e.message; + vals.messages = outMessages; + + if (ParDebug) { + vals.debug = {}; + vals.debug.statement = query; + } + if (debugLevel > 0) { + vals.debugInfos = globalDebug; + } + data.push(vals); + var errbody = JSON.stringify(data); + $.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; + } else { + do { + PutBPDataInTable(rs.getNString(1), rs.getInteger(2)); + } while (rs.next()); + } + + // } + rs.close(); + pstmt.close(); + conn.close(); +} + +//testmain(); + +// begin org + +ParDebug = $.request.parameters.get('debug') && $.request.parameters.get('debug').toLowerCase() === "true"; +ParRecallIdList = $.request.parameters.get('recallidlist'); +if (ParRecallIdList) { + ParRecallMode = true; + recallJSONRAW(ParRecallIdList); +} else { + var content = $.request.body.asString(); + 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); +} +*/ diff --git a/uniorg/eon/nice/v1/setcontracthistory.xsjs b/uniorg/eon/nice/v1/setcontracthistory.xsjs new file mode 100644 index 0000000..8db5d5a --- /dev/null +++ b/uniorg/eon/nice/v1/setcontracthistory.xsjs @@ -0,0 +1,286 @@ +var slLib = $.import("uniorg.ServiceLayer", "B1SLLogic"); +var slDest = $.import("uniorg.destinations", "uodestlib"); +var datetimelib = $.import("uniorg.libs", "datetime"); + +var outMessages = []; +var output = {}; +var outMsg = {}; +var outStatus = "success"; +var myDebug = {}; +var SESSIONID = ""; +var NODEID = ""; +var slLoggedIn = false; +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 ContractUDOID = "EON_CONTR"; + +var service_version = '1.0'; + +var debugLevel = 0; +switch ($.request.parameters.get("debug")) { + case "true": + case "yes": + case "1": + debugLevel = 1; + break; + case "full": + case "2": + debugLevel = 2; + break; +} + +if (debugLevel > 1) { + myDebug.requestParams = $.request.parameters; +} + +function setOutputMessage() { + output.status = outStatus; + if (debugLevel > 0) { + output.debugInfos = myDebug; + } + output.messages = outMessages; + $.response.contentType = "application/json"; + $.response.setBody(JSON.stringify(output)); + $.response.status = $.net.http.OK; +} + +function exceptionHandler(ex) { + if (outMsg.method) { + outMessages.push(outMsg); + } + outMsg = {}; + outMsg.method = "exceptionHandler"; + outMsg.status = "error"; + outMsg.message = ex.toString(); + if (debugLevel > 0) { + outMsg.exceptionInfo = {}; + outMsg.exceptionInfo.name = ex.name; + outMsg.exceptionInfo.message = ex.message; + outMsg.exceptionInfo.fileName = ex.fileName; + outMsg.exceptionInfo.lineNumber = ex.lineNumber; + outMsg.exceptionInfo.columnNumber = ex.columnNumber; + outMsg.exceptionInfo.stack = ex.stack; + //outMsg.exceptionInfo.source = ex.toSource(); + } + outMessages.push(outMsg); + outStatus = "error"; + output.status = outStatus; + if (debugLevel > 0) { + output.debugInfos = myDebug; + } + output.messages = outMessages; + + var errbody = JSON.stringify(output); + $.response.contentType = 'application/json'; + $.response.setBody(errbody); + $.response.status = $.net.http.INTERNAL_SERVER_ERROR; + + try { + if (slLoggedIn) { + slLib.SLLogout(SESSIONID, NODEID); + } + } catch (e) { + + } +} + +function slLogin() { + var loginResult = false; + var loginInfo = {}; + loginInfo.UserName = UserName; + loginInfo.Password = UserPass; + loginInfo.CompanyDB = UserComp; + + // SL LOGIN + var response = slLib.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; + } + } + + var loginResponse; + try { + loginResponse = JSON.parse(response.body.asString()); + } catch (e) { + loginResponse = response.body.asString(); + } + + if (debugLevel > 1) { + myDebug.loginInfo = loginInfo; + } + myDebug.loginResponse = loginResponse; + if (response.status === 200) { + loginResult = true; + } else { + outMsg = {}; + outMsg.method = "login"; + outMsg.status = "error"; + outMsg.message = loginResponse; + outMessages.push(outMsg); + outStatus = "error"; + } + return loginResult; +} + +function getViewData() { + var rsMsg = {}; + var conn = $.db.getConnection(); + var pstmt; + var query = + 'SELECT "DocEntry", "ObjType", "DocNum", U_EON_CONTRACT, U_EON_PERIOD_FROM, U_EON_PERIOD_TO, "DocDate", "DocTotal" from A19753_EON_P01.V_UO_LOST_CONTRACT_HISTORY_RECORDS'; + pstmt = conn.prepareStatement(query); + var rs = pstmt.executeQuery(); + var rsmd = rs.getMetaData(); + var colCount = rsmd.getColumnCount(); + var rc = 0; + var rows = []; + while (rs.next()) { + var row = {}; + rc++; + for (var c = 1; c <= colCount; c++) { + var colName = rsmd.getColumnName(c); + var colType = rsmd.getColumnTypeName(c); + switch (colType) { + case 'TINYINT': + case 'SMALLINT': + case 'INT': + case 'INTEGER': + case 'BIGINT': + row[colName] = rs.getInteger(c); + break; + case 'DECIMAL': + row[colName] = rs.getDecimal(c); + break; + case 'REAL': + case 'DOUBLE': + case 'FLOAT': + row[colName] = rs.getDouble(c); + break; + case 'NVARCHAR': + case 'NCHAR': + case 'SHORTTEXT': + row[colName] = rs.getNString(c); + break; + case 'VARCHAR': + case 'CHAR': + row[colName] = rs.getString(c); + break; + case 'BINARY': + case 'VARBINARY': + row[colName] = rs.getBString(c); + break; + case 'DATE': + row[colName] = rs.getDate(c); + break; + case 'TIME': + row[colName] = rs.getTime(c); + break; + case 'TIMESTAMP': + row[colName] = rs.getTimestamp(c); + break; + case 'CLOB': + row[colName] = rs.getClob(c); + break; + case 'NCLOB': + case 'TEXT': + row[colName] = rs.getNClob(c); + break; + case 'BLOB': + row[colName] = rs.getBlob(c); + break; + case 'SECONDDATE': + row[colName] = rs.getSeconddate(c); + break; + } + } + rows.push(row); + } + rsMsg.rowCount = rc; + rsMsg.rows = rows; + rs.close(); + pstmt.close(); + conn.close(); + return rsMsg; +} + +function repairContractHistory() { + var docData = getViewData(); + myDebug.docData = docData; + var startTS = new Date(); + if (docData.rowCount === 0) { + outMsg = {}; + outMsg.method = "updateContract"; + outMsg.result = "nothing to do"; + outMessages.push(outMsg); + } else { + slLogin(); + + outMsg = {}; + outMsg.method = "updateContract"; + outMsg.results = []; + + docData.rows.forEach(function(row) { + var result = {}; + var slContractObj = { + EON_CONTRACT_BILLCollection: [ + { + U_PERIOD_FROM: datetimelib.convertToISODate(row.U_EON_PERIOD_FROM), + U_PERIOD_TO: datetimelib.convertToISODate(row.U_EON_PERIOD_TO), + U_DOCDATE: datetimelib.convertToISODate(row.DocDate), + U_DOCTOTAL: row.DocTotal, + U_OBJTYPE: row.ObjType, + U_DOCENTRY: row.DocEntry, + U_DOCNUM: row.DocNum + } + ] + }; + result.slContractObj = slContractObj; + var responseContract = slLib.patchDynamicEntity('EON_CONTR', row.U_EON_CONTRACT, JSON.stringify(slContractObj), SESSIONID, NODEID, + false); + if (responseContract.status >= 200 && responseContract.status < 300) { + result.status = 'success'; + } else { + result.success = 'failure'; + outStatus = 'error'; + if (responseContract.body) { + try { + result.slResponse = JSON.parse(responseContract.body.asString()); + } catch (e) { + result.slResponse = responseContract.body.asString(); + } + } else { + result.slResponse = responseContract; + } + } + + outMsg.results.push(result); + }); + output.durationMilliseconds = new Date() - startTS; + outMessages.push(outMsg); + + try { + if (slLoggedIn) { + slLib.SLLogout(SESSIONID, NODEID); + } + } catch (e) {} + } +} + +//testmain(); + +// begin org +try { + repairContractHistory(); +} catch (e) { + exceptionHandler(e); +} +setOutputMessage(); +//ende org \ No newline at end of file diff --git a/uniorg/eon/nice/v1/setcontractremoveprices.xsjs b/uniorg/eon/nice/v1/setcontractremoveprices.xsjs new file mode 100644 index 0000000..356e407 --- /dev/null +++ b/uniorg/eon/nice/v1/setcontractremoveprices.xsjs @@ -0,0 +1,437 @@ +var slib = $.import("uniorg.ServiceLayer", "B1SLLogic"); +var slDest = $.import("uniorg.destinations", "uodestlib"); +var copybplib = $.import("uniorg.eon.libs", "copybp"); + +var ParDebug = false; +var ParRecallIdList = ""; +var ParRecallMode = false; +var outMessages = []; +var outMsg = {}; +var outStatus = "success"; +var globalDebug = {}; +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 ContractUDOID = "EON_CONTR"; + +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 service_version = '3.4'; +// 03.11.2020 U_ORDER_ID (262) +// last changes: 31.03.2020 eoperate Felder +// Mapping Verträge 19.05.2020 +// Mapping evdriver undefined 12.08.2020 +//17.08.2020 Parameter können nun auch ohne evdriver gesnedet werden. +//16.09.2020 Erweiterung Aktivierungsgebühr +//Mazda 6 monatige RabattGebühr +//19.01.2021 duplicatebp lib Implementierung bei BFV Verträgen + +//logininfo auskommentiert + +var debugLevel = 0; +switch ($.request.parameters.get("debug")) { + case "true": + case "yes": + case "1": + debugLevel = 1; + break; + case "full": + case "2": + debugLevel = 2; + break; +} + +if (debugLevel > 1) { + globalDebug.requestParams = $.request.parameters; +} + +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 getProductId(prodID) { + /* switch (prodID) { + case "E.ON Drive Business ohne Grundgebühr": + prodID='E.ON Drive Business Comfort'; + break; + + case "LT_E.ON Drive ElectricFleet E.ON Konzern Ladetarif": + prodID='LT_E.ON DRIVE ELECTRICFLEET E.ON KONZERN LADETARIF'; + break; + + case "LT_E.ON Drive ElectricFleet Ladetarif": + prodID='E.ON DRIVE ELECTRICFLEET LADETARIF'; + break; + + case "BMW Group Corporate Charging CCA Ladetarif": + prodID='BMW GROUP CORPORATE CHARGING CCA LADETARIF'; + break; + case "LT_BMW Group Corporate Charging MA Ladetarif": + prodID='BMW GROUP CORPORATE CHARGING MA LADETARIF'; + break; + + default: + prodID = prodID; + }*/ + var conn = $.db.getConnection(); + var pstmt; + var query = + "SELECT MIN(T1.\"Code\") as \"Code\", T0.\"U_BILLING_MODE\" FROM \"XXREPXX\".\"@EON_PRODUCT\" T0 INNER JOIN \"XXREPXX\".\"@EON_PRODUCT_PARAM\" T1 ON T0.\"Code\"=T1.\"Code\" " + + "WHERE T1.U_COMPONENT = 'CRM_PRODUCT_ID' AND UPPER(T1.\"U_ITEM\") = UPPER('" + + prodID + "') GROUP BY T0.\"U_BILLING_MODE\""; + query = query.replace(/XXREPXX/g, UserComp); + pstmt = conn.prepareStatement(query); + //pstmt.setString(1, prodID); + var rs = pstmt.executeQuery(); + if (!rs.next()) { + outMsg = {}; + outMsg.method = "getProductId"; + outMsg.message = "wrong ProductID - not exists in Table Product Param. ProductID: " + prodID; + if (debugLevel > 0) { + outMsg.message += " / Query: " + query; + } + outMsg.status = "error"; + outStatus = "error"; + // outMsg.message = e.message; + outMessages.push(outMsg); + } else { + var prodList = []; + do { + prodList.push({ + Code: rs.getNString(1), + BillingMode: rs.getString(2) + }); + } while (rs.next()); + return prodList; + } + rs.close(); + pstmt.close(); + conn.close(); +} + +function getProductComponents(prodCode, component) { + var prodComponents = []; + var conn = $.db.getConnection(); + var pstmt; + var query = + "SELECT \"LineId\", \"U_COMPONENT\", \"U_DESCRIPTION\", \"U_RULE\", \"U_ITEM\", \"U_VALID_FROM\", \"U_VALID_TO\", \"U_DATA_TEXT\", \"U_DATA_NUMERIC\", \"U_DATA_TEXT2\", \"U_DATA_NUMERIC2\" FROM \"XXREPXX\".\"@EON_PRODUCT_PARAM\" WHERE \"Code\"= ? AND \"U_COMPONENT\" = ?"; + query = query.replace(/XXREPXX/g, UserComp); + pstmt = conn.prepareStatement(query); + pstmt.setNString(1, prodCode); + pstmt.setNString(2, component); + globalDebug.getProductComponents = { + query: query, + prodCode: prodCode, + component: component + }; + var rs = pstmt.executeQuery(); + while (rs.next()) { + prodComponents.push({ + LineId: rs.getInteger(1), + U_COMPONENT: rs.getNString(2), + U_DESCRIPTION: rs.getNString(3), + U_RULE: rs.getNString(4), + U_ITEM: rs.getNString(5), + U_VALID_FROM: rs.getDate(6), + U_VALID_TO: rs.getDate(7), + U_DATA_TEXT: rs.getNString(8), + U_DATA_NUMERIC: rs.getInteger(9), + U_DATA_TEXT2: rs.getNString(10), + U_DATA_NUMERIC2: rs.getInteger(11) + }); + } + rs.close(); + pstmt.close(); + conn.close(); + return prodComponents; +} + +function getCardcodebyCRMID(mycrmid) { + var conn = $.db.getConnection(); + try { + var pstmt; + //var query = "select CARDCODE from TEST.OCRD WHERE U_EON_CRM_ID = " + crmid; + var query = "SELECT T0.\"CardCode\" FROM " + UserComp + ".\"OCRD\" T0 WHERE T0.\"CardType\" = 'C' AND T0.\"U_EON_ID_CRM\" = '" + mycrmid + + "'"; + pstmt = conn.prepareStatement(query); + var rs = pstmt.executeQuery(); + if (!rs.next()) { + outMsg = {}; + outMsg.method = "getCardCodebyCRMID"; + outMsg.message = "not found. CRM ID: " + mycrmid; + if (debugLevel > 0) { + outMsg.message += " / Query: " + query; + } + outMsg.status = "error"; + outStatus = "error"; + // outMsg.message = e.message; + outMessages.push(outMsg); + } else { + return rs.getString(1); + } + rs.close(); + pstmt.close(); + } catch (e) { + $.trace.error(e.message); + outMsg = {}; + outMsg.method = "getCardCodebyCRMID"; + outMsg.message = "getcardcodebycrmid error: " + query; + outMsg.status = "error"; + // outMsg.message = e.message; + outMessages.push(outMsg); + throw e; + } finally { + conn.close(); + } +} + +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 buildContractObj(InObj, SBOOBJ, billingMode) { + var isAO = billingMode === 'AO'; + + var UDOObj = {}; + UDOObj.U_VALID_FROM = isAO ? InObj.implementation_date : InObj.begin_date; + UDOObj.U_VALID_TO = InObj.end_date; + UDOObj.U_EXT_ID_CRM = InObj.contract_id; + UDOObj.U_EXT_ID_PREBILLING = InObj.c_id; + UDOObj.U_PROJECT = InObj.project; + UDOObj.U_ORDER_ID = InObj.orderid; + + var productCode = getProductId(InObj.product).find(function(p) { + return p.BillingMode === billingMode; + }).Code; + UDOObj.U_PRODUCT = productCode; + if (InObj.product_customer_name) { + UDOObj.U_ORDER_ID = InObj.product_customer_name; + } + if (isAO) { + UDOObj.U_CUSTOMER = getCardcodebyCRMID(InObj.bp_crm) + '-L'; + /*} else if (InObj.ev_drivers != undefined) { + if (InObj.ev_drivers[0].parameters[0].component === "RFID_CARD") { + UDOObj.U_CUSTOMER = getCardcodebyCRMID(InObj.bp_crm); + }*/ + } else { + UDOObj.U_CUSTOMER = getCardcodebyCRMID(InObj.bp_crm); + } + + UDOObj.U_SIGNATURE_DATE = (InObj.signature_date === null) ? SBOOBJ.U_SIGNATURE_DATE : InObj.signature_date; + + // Price Collection + + UDOObj.EON_CONTRACT_PRICECollection = []; + + for (var g in SBOOBJ.EON_CONTRACT_PRICECollection) { + var myPrice = {}; + // copy existing + myPrice = SBOOBJ.EON_CONTRACT_PRICECollection[g]; + + for (var h in InObj.prices) { + + if (SBOOBJ.EON_CONTRACT_PRICECollection[g].U_ITEM === InObj.prices[h].item) { + myPrice.U_VALID_FROM = (InObj.prices[h].valid_from === null) ? SBOOBJ.EON_CONTRACT_PRICECollection[g].U_VALID_FROM : InObj.prices[h].valid_from; + myPrice.U_VALID_TO = (InObj.prices[h].valid_to === null) ? SBOOBJ.EON_CONTRACT_PRICECollection[g].U_VALID_TO : InObj.prices[h].valid_to; + myPrice.U_PRICE = (InObj.prices[h].price === null) ? SBOOBJ.EON_CONTRACT_PRICECollection[g].U_PRICE : InObj.prices[h].price; + break; + } + } + UDOObj.EON_CONTRACT_PRICECollection.push(myPrice); + + } + + var prodComponentsTP_DISCOUNT_MONTH = getProductComponents(productCode, "TP_DISCOUNT_MONTH"); + prodComponentsTP_DISCOUNT_MONTH.forEach(function(pc) { + if (SBOOBJ.EON_CONTRACT_PRICECollection === undefined || SBOOBJ.EON_CONTRACT_PRICECollection.findIndex(function(x) { + return x.U_ITEM === pc.U_ITEM; + }) === -1) { + var connection = $.hdb.getConnection(); + var validToDate = connection.executeQuery('SELECT ADD_MONTHS(?,?) FROM DUMMY', InObj.begin_date, pc.U_DATA_NUMERIC)[0][0]; + connection.close(); + UDOObj.EON_CONTRACT_PRICECollection.push({ + U_ITEM: pc.U_ITEM, + U_VALID_FROM: InObj.begin_date, + U_VALID_TO: validToDate, + U_PRICE: parseFloat(pc.U_DATA_TEXT2.replace(/,/g, '.')) + }); + } + }); + + //Suche ob Objekte vorhanden wenn nicht ergänzen + + for (var h in InObj.prices) { + var myfound = false; + for (var g in SBOOBJ.EON_CONTRACT_PRICECollection) { + if (SBOOBJ.EON_CONTRACT_PRICECollection[g].U_ITEM === InObj.prices[h].item) { + myfound = true; + } + } + + if (myfound === false) { + var myPrice = {}; + + myPrice.U_VALID_FROM = InObj.prices[h].valid_from; + myPrice.U_VALID_TO = InObj.prices[h].valid_to; + myPrice.U_PRICE = InObj.prices[h].price; + myPrice.U_ITEM = InObj.prices[h].item; + + UDOObj.EON_CONTRACT_PRICECollection.push(myPrice); + } + } + + // REMOVE PRICES SONDERFUNKTION: + UDOObj.EON_CONTRACT_PRICECollection = []; + + //EV Drivers neu 4.2.2019 + // EVDRIVERS Collection + + UDOObj.EON_CONTRACT_EVDRVCollection = []; + + for (var g in SBOOBJ.EON_CONTRACT_EVDRVCollection) { + var myEVDRV = {}; + // copy existing + myEVDRV = SBOOBJ.EON_CONTRACT_EVDRVCollection[g]; + + for (var h in InObj.ev_drivers) { + + if (myEVDRV.U_EV_DRIVERID === InObj.ev_drivers[h].ev_driverid) { + UDOObj.U_EXT_ID_PREBILLING = InObj.ev_drivers[h].c_id; + myEVDRV.U_EV_DRIVER = InObj.ev_drivers[h].ev_driver; + myEVDRV.U_NICE_ID = InObj.ev_drivers[h].c_id; + myEVDRV.U_FIRSTNAME = (InObj.ev_drivers[h].firstname === null) ? myEVDRV.U_FIRSTNAME : InObj.ev_drivers[h].firstname; + myEVDRV.U_LASTNAME = (InObj.ev_drivers[h].lastname === null) ? myEVDRV.U_LASTNAME : InObj.ev_drivers[h].lastname; + // myEVDRV.U_EMAIL = (InObj.ev_drivers[h].email === null) ? myEVDRV.U_EMAIL : InObj.ev_drivers[h].email; + myEVDRV.U_LICENSE_PLATE = (InObj.ev_drivers[h].license_plate === null) ? myEVDRV.U_LICENSE_PLATE : InObj.ev_drivers[h].license_plate; + myEVDRV.U_VIRTA_ID = (InObj.ev_drivers[h].virta_id === null) ? myEVDRV.U_VIRTA_ID : InObj.ev_drivers[h].virta_id; + myEVDRV.U_VIRTA_VALID_FROM = (InObj.ev_drivers[h].virta_valid_from === null) ? myEVDRV.U_VIRTA_VALID_FROM : InObj.ev_drivers[h].virta_valid_from; + myEVDRV.U_VIRTA_VALID_TO = (InObj.ev_drivers[h].virta_valid_to === null) ? myEVDRV.U_VIRTA_VALID_TO : InObj.ev_drivers[h].virta_valid_to; + + myEVDRV.U_NICE_VALID_FROM = (InObj.ev_drivers[h].nice_valid_from === null) ? myEVDRV.U_NICE_VALID_FROM : InObj.ev_drivers[h].nice_valid_from; + myEVDRV.U_NICE_VALID_TO = (InObj.ev_drivers[h].nice_valid_to === null) ? myEVDRV.U_NICE_VALID_TO : InObj.ev_drivers[h].nice_valid_to; + //neu 31.03.2020 eoperate Felder + myEVDRV.U_EOPERATE_ID = (InObj.ev_drivers[h].eoperate_ID === null) ? myEVDRV.U_EOPERATE_ID : InObj.ev_drivers[h].eoperate_ID; + myEVDRV.U_EOPERATE_VALID_FROM = (InObj.ev_drivers[h].eoperate_valid_from === null) ? myEVDRV.U_EOPERATE_VALID_FROM : InObj.ev_drivers[h] + .eoperate_valid_from; + myEVDRV.U_EOPERATE_VALID_TO = (InObj.ev_drivers[h].eoperate_valid_to === null) ? myEVDRV.U_EOPERATE_VALID_TO : InObj.ev_drivers[h].eoperate_valid_to; + + break; + } + } + + UDOObj.EON_CONTRACT_EVDRVCollection.push(myEVDRV); + + } + + //Suche ob Objekte vorhanden wenn nicht ergänzen + + for (var h in InObj.ev_drivers) { + var myfound = false; + for (var g in SBOOBJ.EON_CONTRACT_EVDRVCollection) { + if (SBOOBJ.EON_CONTRACT_EVDRVCollection[g].U_EV_DRIVERID === InObj.ev_drivers[h].ev_driverid) { + myfound = true; + } + } + + if (myfound === false) { + var myEVDRV = {}; + UDOObj.U_EXT_ID_PREBILLING = InObj.ev_drivers[h].c_id; + myEVDRV.U_EV_DRIVER = InObj.ev_drivers[h].ev_driver; + myEVDRV.U_NICE_ID = InObj.ev_drivers[h].c_id; + myEVDRV.U_EV_DRIVERID = InObj.ev_drivers[h].ev_driverid; + myEVDRV.U_FIRSTNAME = InObj.ev_drivers[h].firstname; + myEVDRV.U_LASTNAME = InObj.ev_drivers[h].lastname; + // myEVDRV.U_EMAIL = InObj.ev_drivers[h].email; + myEVDRV.U_LICENSE_PLATE = InObj.ev_drivers[h].license_plate; + myEVDRV.U_VIRTA_ID = InObj.ev_drivers[h].virta_id; + myEVDRV.U_VIRTA_VALID_TO = InObj.ev_drivers[h].virta_valid_to; + myEVDRV.U_VIRTA_VALID_FROM = InObj.ev_drivers[h].virta_valid_from; + myEVDRV.U_NICE_VALID_FROM = InObj.ev_drivers[h].nice_valid_from; + myEVDRV.U_NICE_VALID_TO = InObj.ev_drivers[h].nice_valid_to; + //neu 31.03.2020 eoperate Felder + myEVDRV.U_EOPERATE_ID = InObj.ev_drivers[h].eoperate_ID; + myEVDRV.U_EOPERATE_VALID_FROM = InObj.ev_drivers[h].eoperate_valid_from; + myEVDRV.U_EOPERATE_VALID_TO = InObj.ev_drivers[h].eoperate_valid_to; + + UDOObj.EON_CONTRACT_EVDRVCollection.push(myEVDRV); + } + + } + + // Param Collection + + UDOObj.EON_CONTRACT_PARAMCollection = []; + + return UDOObj; +} + +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; +} + +//testmain(); + +// begin org + +var content = $.request.body.asString(); + +setOutputMessage(); +//ende org + +//SlLogin(); \ No newline at end of file diff --git a/uniorg/eon/nice/v1/setinvoice.xsjs b/uniorg/eon/nice/v1/setinvoice.xsjs new file mode 100644 index 0000000..821f199 --- /dev/null +++ b/uniorg/eon/nice/v1/setinvoice.xsjs @@ -0,0 +1,202 @@ +// Changelog +// 2022-11-23: EMPEPI1-141: Ablehnung von Rechnungen im Entwurfsmodus ab 25.11.2022 +// EMPEPI1-148: eMobility PEPI Anpassung des Mappings API-Einmalabrechnung +// 2023-01-18: EMPEPI1-193: Korrektur aperiodische Buchungen +// 2023-02-22: EMPEPI1-157: Zeilenerweiterung per SST auf Rechnung +// 2023-03-07: EMPEPI1-230: Anpassungen der Schnittstellen-Fehlermeldungen +// 2023-08-07: EMPEPI1-273: Anpassungen Invoice Adresse +// 2023-11-29: EMPEPI1-329: Struktur Haupt-/Zusatzartikel +// 2023-12-07: EMPEPI1-341: Korrektur Adressmapping +// 2024-09-13: BUS-6987: Feld Firmenname auf 50 Zeichen begrenzt, führt zu inkonsitenten Rechnungsadressen +// 2025-04-15: BUS-11743: Feld Comments begrenzen auf 254 Zeichen +// 2025-05-19: BUS-12136: Erweiterung CRM Invoice Schnittstelle für rechnungsbegleitende Unterlagen +var slib = $.import("uniorg.ServiceLayer", "B1SLLogic"); +var datetimelib = $.import("uniorg.libs", "datetime"); +var logginglib = $.import("uniorg.libs", "uologging"); +var slDest = $.import("uniorg.destinations", "uodestlib"); +var slfwlib = $.import("uniorg.ServiceLayer", "B1SLFramework"); + +var serviceName = "nice.v1.setinvoice.xsjs"; +var serviceVersion = '3.2'; + +var output = {}; +var outMessages = []; +var outMsg = {}; +var outStatus = "success"; +var myDebug = {}; + +var companyid = 0; +var UserName = ''; +var UserPass = ''; +var UserComp = ''; + +var SESSIONID = ""; +var NODEID = ""; +var slLoggedIn = false; +var logTableId = 0; +var logDocEntry = -1; + +var objecttype = "13"; + +var debugLevel = 0; +switch ($.request.parameters.get("debug")) { + case "true": + case "yes": + case "1": + debugLevel = 1; + break; + case "full": + case "2": + debugLevel = 2; + break; +} + +if (debugLevel > 0) { + output.requestParams = $.request.parameters; +} + +var draftMode = true; + +function updateLogEntry(id, docEntry, b1Obj) { + var conn = $.hdb.getConnection(); + try { + conn.executeUpdate( + "UPDATE \"INTEGRATION_DATA\".\"UO_DOCUMENTS_RAWCALL\" SET \"B1_PK\" = ?, \"B1_OBJ\" = ?, \"UPDATE_TS\" = CURRENT_TIMESTAMP WHERE \"ID\" = ?", + docEntry, b1Obj, id); + conn.commit(); + } catch (e) { + exceptionHandler(e); + return; + } +} + +function setOutputMessage() { + output.status = outStatus; + if (debugLevel > 0) { + output.debugInfos = myDebug; + } + output.messages = outMessages; + $.response.contentType = "application/json"; + $.response.setBody(JSON.stringify(output)); + $.response.status = $.net.http.OK; +} + +function exceptionHandler(ex) { + if (outMsg.method) { + outMessages.push(outMsg); + } + outMsg = {}; + outMsg.method = "exceptionHandler"; + outMsg.status = "error"; + outMsg.message = ex.toString(); + if (debugLevel > 0) { + outMsg.exceptionInfo = {}; + outMsg.exceptionInfo.name = ex.name; + outMsg.exceptionInfo.message = ex.message; + outMsg.exceptionInfo.fileName = ex.fileName; + outMsg.exceptionInfo.lineNumber = ex.lineNumber; + outMsg.exceptionInfo.columnNumber = ex.columnNumber; + outMsg.exceptionInfo.stack = ex.stack; + //outMsg.exceptionInfo.source = ex.toSource(); + } + outMessages.push(outMsg); + outStatus = "error"; + output.status = outStatus; + if (debugLevel > 0) { + output.debugInfos = myDebug; + } + output.messages = outMessages; + + var errbody = JSON.stringify(output); + $.response.contentType = 'application/json'; + $.response.setBody(errbody); + //$.response.status = $.net.http.INTERNAL_SERVER_ERROR; + // Workaround, weil CRM scheinbar Probleme mit anderen Statuscodes hat + $.response.status = $.net.http.OK; + + try { + if (slLoggedIn) { + slib.SLLogout(SESSIONID, NODEID); + } + } catch (e) { + + } +} + +function setConnectionParams(sfcall) { + var jsonSFCall = JSON.parse(sfcall); + + var idValue = "A19753_EON_P01"; + var idFieldname = 'SYS_NAME'; + var CompanyConfig = slDest.getCompanyCfg(idValue, idFieldname); + UserComp = CompanyConfig.COMPANYNAME; + UserName = CompanyConfig.USERNAME; + UserPass = slDest.readSecureStore(CompanyConfig.ID); + if (debugLevel > 1) { + myDebug.connectionParams = CompanyConfig; + } + myDebug.idValue = idValue; + myDebug.idFieldname = idFieldname; + if (CompanyConfig.COMPANYNAME === undefined) { + outMsg = {}; + outMsg.method = "getCompany"; + outStatus = "error"; + outMsg.status = "error"; + outMsg.message = "ERPInstanceName is invalid for this endpoint"; + outMessages.push(outMsg); + } + + myDebug.CompanyName = UserComp; +} + +function slLogin() { + var loginResult = false; + var loginInfo = {}; + loginInfo.UserName = UserName; + loginInfo.Password = UserPass; + loginInfo.CompanyDB = UserComp; + + // 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; + } + } + + var loginResponse; + try { + loginResponse = JSON.parse(response.body.asString()); + } catch (e) { + loginResponse = response.body.asString(); + } + + if (debugLevel > 1) { + myDebug.loginInfo = loginInfo; + } + myDebug.loginResponse = loginResponse; + if (response.status === 200) { + loginResult = true; + } else { + outMsg = {}; + outMsg.method = "login"; + outMsg.status = "error"; + var slError = myDebug.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(myDebug.loginResponse); + } + outMsg.response = myDebug.loginResponse; + //outMsg.message = loginResponse; + outMessages.push(outMsg); + outStatus = "error"; + } + return loginResult; +} \ No newline at end of file