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; // 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; 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; 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; 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 var prodComponentsAG = getProductComponents(productCode, "AG"); 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 var prodComponentsTP_DISCOUNT_MONTH = getProductComponents(productCode, "TP_DISCOUNT_MONTH"); 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 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 = {}; 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 = {}; 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; 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); } } 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; //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()); 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 (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 = 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"; 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; 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; } 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"; } 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); } 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"; var bpoutput = copybplib.copyBP(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; 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, outMsg.status, 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; } 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); } */