diff --git a/.gitignore b/.gitignore deleted file mode 100644 index b105cb4..0000000 --- a/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -node_modules/ -.DS_Store -*.log -.idea/ -.vscode/ -dist/ -build/ -*.pyc -__pycache__/ diff --git a/FILES_MANIFEST.txt b/FILES_MANIFEST.txt deleted file mode 100644 index 646f072..0000000 --- a/FILES_MANIFEST.txt +++ /dev/null @@ -1,37 +0,0 @@ -EON_EMOBILITY_VIRTA (DU2) - File Manifest -========================================== - -Total Files: 23 extracted from uniorg/eon/virta - -META Directory (11 files): - 1. V_CPO_CHARGES.sql - 2. V_CPO_CHARGES_DUPLICATES.sql - 3. V_EMP_TRANSACTIONS.sql - 4. V_EMP_TRANSACTIONS_DUPLICATES.sql - 5. alter_tables.sql - 6. cpo_charges.sql - 7. create_views.sql - 8. emobility.sql - 9. emobility_view_emp_v1_0.sql - 10. emp_transactions.sql - 11. stations.sql - -V1 Directory (5 files): - 12. VirtaAPI.xshttpdest - 13. getcpotrans.xsjs - 14. getemptrans.xsjs - 15. reloadfields.xsjs - 16. testhana.xsjs - -V2 Directory (7 files): - 17. VirtaAPI.xshttpdest - 18. getcpotrans.xsjs - 19. getemptrans.xsjs - 20. getemptrans_old.xsjs - 21. reloadfields.xsjs - 22. setcpotrans.xsjs - 23. setemptrans.xsjs - -Export Date: 2026-07-08 -Source System: HANA XS Repository -Delivery Unit: EON_EMOBILITY_VIRTA diff --git a/README.md b/README.md deleted file mode 100644 index 285f52a..0000000 --- a/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# EON_EMOBILITY_VIRTA Deployment Unit - -This is the EON EMOBILITY VIRTA deployment unit exported from SAP HANA XS repository. - -## Structure - -- `uniorg/eon/virta/meta/` - Database schema and view definitions (SQL) -- `uniorg/eon/virta/v1/` - VIRTA API v1 integration services -- `uniorg/eon/virta/v2/` - VIRTA API v2 integration services - -## Components - -### Meta Schema -- Database table alterations for charging transactions -- View definitions for charge data (EMP and CPO perspectives) -- Schema initialization and migration scripts - -### API Integrations -- VIRTA API HTTP destination configurations -- Transaction data retrieval and management services -- Field reload and data synchronization services - -## File Statistics -- Total files: 23 -- SQL files: 11 (meta/) -- XSJS files: 12 (v1/ and v2/) diff --git a/uniorg/eon/virta/meta/V_CPO_CHARGES.sql b/uniorg/eon/virta/meta/V_CPO_CHARGES.sql index 69484ae..82eaec6 100644 --- a/uniorg/eon/virta/meta/V_CPO_CHARGES.sql +++ b/uniorg/eon/virta/meta/V_CPO_CHARGES.sql @@ -47,19 +47,19 @@ CREATE VIEW "VIRTAPORTAL"."V_CPO_CHARGES" ( "CHECK_METHOD", "CREATE_USER", "UPDATE_USER", "FULLEVSEID_REDUCED" ) AS WITH "CHARGEPOINT_CONTRACTS" AS (SELECT - DISTINCT T1.U_DATA_TEXT AS CHARGEPOINT - FROM "A19753_EON_P01"."@EON_CONTRACT" T0 - INNER JOIN "A19753_EON_P01"."@EON_CONTRACT_PARAM" T1 ON T0."DocEntry" = T1."DocEntry" - WHERE T1.U_COMPONENT = 'CHARGEPOINT' + DISTINCT T1.U_DATA_TEXT AS CHARGEPOINT + FROM "A19753_EON_P01"."@EON_CONTRACT" T0 + INNER JOIN "A19753_EON_P01"."@EON_CONTRACT_PARAM" T1 ON T0."DocEntry" = T1."DocEntry" + WHERE T1.U_COMPONENT = 'CHARGEPOINT' AND T0."Canceled"='N') select - /* CASE WHEN CONTRACT.CHARGEPOINT IS NULL -THEN 'NOCONTACT' -else 'OK' + /* CASE WHEN CONTRACT.CHARGEPOINT IS NULL +THEN 'NOCONTACT' +else 'OK' END as CHECK_CONTRACT_EXISTS, */ CASE WHEN METHOD IN ('rfid', 'onetime', - 'app') -THEN 'OK' WHEN METHOD IN ( 'auth_not_required_ocpp') + 'app') +THEN 'OK' WHEN METHOD IN ( 'auth_not_required_ocpp') AND "RFID" NOT IN ('NOA', 'NOA:', '0', @@ -69,25 +69,25 @@ AND "RFID" NOT IN ('NOA', '00000', '00000000', '00000000000000', - '000' ) -THEN 'OK' -ELSE 'OTHER' + '000' ) +THEN 'OK' +ELSE 'OTHER' END AS CHECK_METHOD , - CASE WHEN WATTHOUR > 120000 -THEN 'INVALID' WHEN WATTHOUR = 0 -THEN 'SMALL' -ELSE 'OK' + CASE WHEN WATTHOUR > 120000 +THEN 'INVALID' WHEN WATTHOUR = 0 +THEN 'SMALL' +ELSE 'OK' END as "CHECK_CONSUMED_WATTHOUR", - CASE WHEN STARTTIME IS NULL -THEN 'NULL' WHEN STARTTIME = STOPTIME -THEN 'EQUAL' WHEN STOPTIME < STARTTIME -THEN 'INVALID' -ELSE 'OK' + CASE WHEN STARTTIME IS NULL +THEN 'NULL' WHEN STARTTIME = STOPTIME +THEN 'EQUAL' WHEN STOPTIME < STARTTIME +THEN 'INVALID' +ELSE 'OK' END AS "CHECK_START_STOP", - CASE WHEN DURATION IS NULL -THEN 'NULL' WHEN DURATION <= 2 -THEN 'SMALL' -ELSE 'OK' + CASE WHEN DURATION IS NULL +THEN 'NULL' WHEN DURATION <= 2 +THEN 'SMALL' +ELSE 'OK' END AS "CHECK_DURATION", "CDRID", "UUID", @@ -133,5 +133,5 @@ END AS "CHECK_DURATION", "EICHRECHTTYPE", "CREATE_USER", "UPDATE_USER", - "FULLEVSEID_REDUCED" + "FULLEVSEID_REDUCED" from "VIRTAPORTAL"."CPO_CHARGES" CHARGES WITH READ ONLY \ No newline at end of file diff --git a/uniorg/eon/virta/meta/V_CPO_CHARGES_DUPLICATES.sql b/uniorg/eon/virta/meta/V_CPO_CHARGES_DUPLICATES.sql index 343b3e9..8da1e6d 100644 --- a/uniorg/eon/virta/meta/V_CPO_CHARGES_DUPLICATES.sql +++ b/uniorg/eon/virta/meta/V_CPO_CHARGES_DUPLICATES.sql @@ -10,10 +10,10 @@ CREATE VIEW "VIRTAPORTAL"."V_CPO_CHARGES_DUPLICATES" ( "UUID", "CREATE_TS", "UPDATE_TS", "RANK" ) AS WITH "CHARGEPOINT_CONTRACTS" AS (SELECT - DISTINCT T1.U_DATA_TEXT AS CHARGEPOINT - FROM "A19753_EON_P01"."@EON_CONTRACT" T0 - INNER JOIN "A19753_EON_P01"."@EON_CONTRACT_PARAM" T1 ON T0."DocEntry" = T1."DocEntry" - WHERE T1.U_COMPONENT = 'CHARGEPOINT' + DISTINCT T1.U_DATA_TEXT AS CHARGEPOINT + FROM "A19753_EON_P01"."@EON_CONTRACT" T0 + INNER JOIN "A19753_EON_P01"."@EON_CONTRACT_PARAM" T1 ON T0."DocEntry" = T1."DocEntry" + WHERE T1.U_COMPONENT = 'CHARGEPOINT' AND T0."Canceled"='N'), "CHARGES_VALID" AS (SELECT UUID, @@ -27,22 +27,22 @@ CREATE VIEW "VIRTAPORTAL"."V_CPO_CHARGES_DUPLICATES" ( "UUID", DURATION, "FREECHARGING", CREATE_TS, - UPDATE_TS - FROM "VIRTAPORTAL"."V_CPO_CHARGES" AS EMPT - WHERE CHECK_CONSUMED_WATTHOUR = 'OK' - AND CHECK_START_STOP = 'OK' - AND CHECK_DURATION = 'OK' - AND UPDATE_TS > '20230101' + UPDATE_TS + FROM "VIRTAPORTAL"."V_CPO_CHARGES" AS EMPT + WHERE CHECK_CONSUMED_WATTHOUR = 'OK' + AND CHECK_START_STOP = 'OK' + AND CHECK_DURATION = 'OK' + AND UPDATE_TS > '20230101' and exists (select - 1 - from "CHARGEPOINT_CONTRACTS" C - where EMPT.FULLEVSEID_REDUCED = C.CHARGEPOINT + 1 + from "CHARGEPOINT_CONTRACTS" C + where EMPT.FULLEVSEID_REDUCED = C.CHARGEPOINT OR EMPT.STATION_ID = C.CHARGEPOINT)), "HAVING_DUPLICATES" AS (SELECT FULLEVSEID, STARTTIME, - COUNT(*) AS DUPLICATES - FROM CHARGES_VALID + COUNT(*) AS DUPLICATES + FROM CHARGES_VALID GROUP BY FULLEVSEID, STARTTIME HAVING COUNT(*) > 1), "DUPLICATE_EMP_TRANSACTIONS_WITH_RANK" AS (SELECT @@ -58,14 +58,14 @@ CREATE VIEW "VIRTAPORTAL"."V_CPO_CHARGES_DUPLICATES" ( "UUID", "V"."CREATE_TS" , "V"."UPDATE_TS" , RANK() OVER ( PARTITION BY FULLEVSEID, - STARTTIME + STARTTIME ORDER BY WATTHOUR DESC, - CDRID DESC ) AS Rank - FROM CHARGES_VALID V + CDRID DESC ) AS Rank + FROM CHARGES_VALID V WHERE EXISTS (SELECT - 1 - FROM HAVING_DUPLICATES D - WHERE D.FULLEVSEID = V.FULLEVSEID + 1 + FROM HAVING_DUPLICATES D + WHERE D.FULLEVSEID = V.FULLEVSEID AND D.STARTTIME = V.STARTTIME )) SELECT "V"."UUID" , "V"."CDRID" , @@ -78,8 +78,8 @@ CREATE VIEW "VIRTAPORTAL"."V_CPO_CHARGES_DUPLICATES" ( "UUID", "V"."FREECHARGING" , "V"."CREATE_TS" , "V"."UPDATE_TS" , - "V"."RANK" -FROM DUPLICATE_EMP_TRANSACTIONS_WITH_RANK V + "V"."RANK" +FROM DUPLICATE_EMP_TRANSACTIONS_WITH_RANK V ORDER BY V.STARTTIME DESC , V.FULLEVSEID, - V.RANK WITH READ ONLY + V.RANK WITH READ ONLY \ No newline at end of file diff --git a/uniorg/eon/virta/meta/V_EMP_TRANSACTIONS.sql b/uniorg/eon/virta/meta/V_EMP_TRANSACTIONS.sql new file mode 100644 index 0000000..3e6fa62 --- /dev/null +++ b/uniorg/eon/virta/meta/V_EMP_TRANSACTIONS.sql @@ -0,0 +1,156 @@ +alter VIEW "VIRTAPORTAL"."V_EMP_TRANSACTIONS" ( "CHECK_CONSUMED_WATTHOUR", + "CHECK_START_STOP", + "CHECK_DURATION", + "CHECK_CONTRACT_EXISTS", + "CHECK_BILLING", + "BILLING_ID", + "DURATION", + "WATTHOUR", + "FREECHARGING", + "KWHNETPRICE", + "MINUTENETPRICE", + "SESSIONNETPRICE", + "TRANSACTIONTYPE", + "PAYMENTTYPE", + "CREATE_TS", + "UPDATE_TS", + "CREATE_USER", + "UPDATE_USER", + "UUID", + "EVSEID", + "STATION_ID", + "FULLEVSEID", + "CUSTOMERID", + "STARTTIME", + "STOPTIME", + "METERSTART", + "METERSTOP", + "PLUGTYPE", + "CREATED", + "RFID", + "STATION_NAME", + "LOCATION_ID", + "LOCATION_ADDRESS", + "LOCATION_CITY", + "LOCATION_TYPE", + "LOCATION_COUNTRY", + "CUSTOMERGROUPID", + "CUSTOMERGROUPNAME", + "ORGANIZATIONID", + "EMPSHARE", + "SIGNEDMETERVALUEBEGIN", + "SIGNEDMETERVALUEEND", + "OPERATORPRICE", + "OPERATORCURRENCY", + "OPERATORID", + "EMPTARIFFID", + "EMPTARIFFNAME", + "NOTES", + "MILEAGE", + "CDRID", + "STATIONUUID", + "STATUS", + "EICHRECHTTYPE", + "KWHGROSSPRICE", + "MINUTEGROSSPRICE", + "SESSIONGROSSPRICE", + "CPOOPERATORID", + "AMOUNT", + "CURRENCY", + "BILLING","FREEMINUTES" ) AS select + -- 28.06.2023 + CASE WHEN WATTHOUR > 120000 +THEN 'INVALID' WHEN WATTHOUR = 0 +THEN 'SMALL' +ELSE 'OK' +END as "CHECK_CONSUMED_WATTHOUR", + CASE WHEN STARTTIME IS NULL +THEN 'NULL' WHEN STARTTIME = STOPTIME +THEN 'EQUAL' WHEN STOPTIME < STARTTIME +THEN 'INVALID' +ELSE 'OK' +END AS "CHECK_START_STOP", + CASE WHEN DURATION IS NULL +THEN 'NULL' WHEN DURATION <= 2 +THEN 'SMALL' +ELSE 'OK' +END AS "CHECK_DURATION", + CASE WHEN C.U_VIRTA_ID IS NULL +OR U_VIRTA_ID = '' +THEN 'NO CONTRACT' --WHEN ET.FULLEVSEID IS NULL THEN 'NULL' + +ELSE 'OK' +END as "CHECK_CONTRACT_EXISTS", + (SELECT + LAST_VALUE(STATUS + order by ID) + FROM "A19753_EON_P01"."EON_CHARGEDATA" CD + WHERE CD.NICE_CDRID = ET.UUID + AND CD.BILLING_MODE = 'EMP' ) as CHECK_BILLING, + (SELECT + MAX(ID ) + FROM "A19753_EON_P01"."EON_CHARGEDATA" CD + WHERE CD.NICE_CDRID = ET.UUID + AND CD.BILLING_MODE = 'EMP' ) as BILLING_ID, + "DURATION", + "WATTHOUR", + "FREECHARGING", + "KWHNETPRICE", + "MINUTENETPRICE", + "SESSIONNETPRICE", + "TRANSACTIONTYPE", + "PAYMENTTYPE", + ET."CREATE_TS", + ET."UPDATE_TS", + ET."CREATE_USER", + ET."UPDATE_USER", + "UUID", + "EVSEID", + "STATION_ID", + "FULLEVSEID", + "CUSTOMERID", + "STARTTIME", + "STOPTIME", + "METERSTART", + "METERSTOP", + "PLUGTYPE", + "CREATED", + "RFID", + "STATION_NAME", + "LOCATION_ID", + "LOCATION_ADDRESS", + "LOCATION_CITY", + "LOCATION_TYPE", + "LOCATION_COUNTRY", + "CUSTOMERGROUPID", + "CUSTOMERGROUPNAME", + "ORGANIZATIONID", + "EMPSHARE", + "SIGNEDMETERVALUEBEGIN", + "SIGNEDMETERVALUEEND", + "OPERATORPRICE", + "OPERATORCURRENCY", + "OPERATORID", + "EMPTARIFFID", + "EMPTARIFFNAME", + "NOTES", + "MILEAGE", + "CDRID", + "STATIONUUID", + ET."STATUS", + "EICHRECHTTYPE", + "KWHGROSSPRICE", + "MINUTEGROSSPRICE", + "SESSIONGROSSPRICE", + "CPOOPERATORID", + "AMOUNT", + "CURRENCY", + "BILLING", + "FREEMINUTES" +from "VIRTAPORTAL"."EMP_TRANSACTIONS" ET +LEFT OUTER JOIN (SELECT + DISTINCT U_VIRTA_ID + FROM "A19753_EON_P01"."@EON_CONTRACT_EVDRV") AS C ON C.U_VIRTA_ID = TO_NVARCHAR(ET."CUSTOMERID") +AND U_VIRTA_ID <> '' +WHERE ET.STARTTIME IS NOT NULL +AND ET.STOPTIME IS NOT NULL WITH READ ONLY \ No newline at end of file diff --git a/uniorg/eon/virta/meta/V_EMP_TRANSACTIONS_DUPLICATES.sql b/uniorg/eon/virta/meta/V_EMP_TRANSACTIONS_DUPLICATES.sql new file mode 100644 index 0000000..7e92b14 --- /dev/null +++ b/uniorg/eon/virta/meta/V_EMP_TRANSACTIONS_DUPLICATES.sql @@ -0,0 +1,96 @@ +CREATE VIEW "VIRTAPORTAL"."V_EMP_TRANSACTIONS_DUPLICATES" ( "UUID", + "CDRID", + "CREATED", + "CUSTOMERID", + "FULLEVSEID", + "STARTTIME", + "STOPTIME", + "WATTHOUR", + "DURATION", + "FREECHARGING", + "CHECK_BILLING", + "TRANSACTIONTYPE", + "CREATE_TS", + "UPDATE_TS", + "RANK" ) AS WITH "EMP_TRANSACTIONS_VALID" AS (SELECT + -- 21.04.2023 + UUID, + CDRID, + CREATED, + CUSTOMERID, + COALESCE(FULLEVSEID, + STATIONUUID) AS FULLEVSEID, + STARTTIME, + STOPTIME , + WATTHOUR, + DURATION, + "FREECHARGING", + IFNULL(CHECK_BILLING, + 'Z') AS CHECK_BILLING, + TRANSACTIONTYPE, + CREATE_TS, + UPDATE_TS + FROM "VIRTAPORTAL"."V_EMP_TRANSACTIONS" AS EMPT + WHERE CHECK_CONTRACT_EXISTS = 'OK' + AND CHECK_CONSUMED_WATTHOUR = 'OK' + AND CHECK_START_STOP = 'OK' + AND CHECK_DURATION = 'OK' + AND UPDATE_TS > '20220101'), + "HAVING_DUPLICATES" AS (SELECT + CUSTOMERID, + FULLEVSEID, + STARTTIME, + COUNT(*) AS DUPLICATES + FROM EMP_TRANSACTIONS_VALID + GROUP BY CUSTOMERID, + FULLEVSEID, + STARTTIME HAVING COUNT(*) > 1), + "DUPLICATE_EMP_TRANSACTIONS_WITH_RANK" AS (SELECT + "V"."UUID" , + "V"."CDRID" , + "V"."CREATED" , + "V"."CUSTOMERID" , + "V"."FULLEVSEID" , + "V"."STARTTIME" , + "V"."STOPTIME" , + "V"."WATTHOUR" , + "V"."DURATION" , + "V"."FREECHARGING" , + IFNULL("V"."CHECK_BILLING", + 'Z') AS CHECK_BILLING, + "V"."TRANSACTIONTYPE" , + "V"."CREATE_TS" , + "V"."UPDATE_TS" , + RANK() OVER ( PARTITION BY CUSTOMERID, + FULLEVSEID, + STARTTIME + ORDER BY CHECK_BILLING, + WATTHOUR DESC, + CDRID DESC ) AS Rank + FROM EMP_TRANSACTIONS_VALID V + WHERE EXISTS (SELECT + 1 + FROM HAVING_DUPLICATES D + WHERE D.FULLEVSEID = V.FULLEVSEID + AND D.STARTTIME = V.STARTTIME + AND D.CUSTOMERID = V.CUSTOMERID)) SELECT + "V"."UUID" , + "V"."CDRID" , + "V"."CREATED" , + "V"."CUSTOMERID" , + "V"."FULLEVSEID" , + "V"."STARTTIME" , + "V"."STOPTIME" , + "V"."WATTHOUR" , + "V"."DURATION" , + "V"."FREECHARGING" , + IFNULL("V"."CHECK_BILLING", + 'Z') AS CHECK_BILLING, + "V"."TRANSACTIONTYPE" , + "V"."CREATE_TS" , + "V"."UPDATE_TS" , + "V"."RANK" +FROM DUPLICATE_EMP_TRANSACTIONS_WITH_RANK V +ORDER BY V.STARTTIME DESC , + V.FULLEVSEID, + V.RANK WITH READ ONLY \ No newline at end of file diff --git a/uniorg/eon/virta/meta/alter_tables.sql b/uniorg/eon/virta/meta/alter_tables.sql index 7dc7743..145e695 100644 --- a/uniorg/eon/virta/meta/alter_tables.sql +++ b/uniorg/eon/virta/meta/alter_tables.sql @@ -11,16 +11,16 @@ ALTER TABLE "VIRTAPORTAL"."EMP_TRANSACTIONS" ADD ("KWHGROSSPRICE" INTEGER CS_INT ALTER TABLE "VIRTAPORTAL"."EMP_TRANSACTIONS" ADD ("MINUTEGROSSPRICE" INTEGER CS_INT); ALTER TABLE "VIRTAPORTAL"."EMP_TRANSACTIONS" ADD ("SESSIONGROSSPRICE" INTEGER CS_INT); -- Mapping von CPOOPERATORID übernehmen -ALTER TABLE "VIRTAPORTAL"."EMP_TRANSACTIONS" ADD ("CPOOPERATORID" NVARCHAR(50)); +ALTER TABLE "VIRTAPORTAL"."EMP_TRANSACTIONS" ADD ("CPOOPERATORID" NVARCHAR(50)); --Neu 26.08.2021 Laden im Ausland Erweiterung -ALTER TABLE "VIRTAPORTAL"."EMP_TRANSACTIONS" ADD ("LOCATION_COUNTRY" NVARCHAR(3)); +ALTER TABLE "VIRTAPORTAL"."EMP_TRANSACTIONS" ADD ("LOCATION_COUNTRY" NVARCHAR(3)); --Neu 20.04.2022 Neue PlausiCheckFelder -ALTER TABLE "VIRTAPORTAL"."EMP_TRANSACTIONS" ADD ("BUSINESSVALIDATIONRESULT" NVARCHAR(100)); -ALTER TABLE "VIRTAPORTAL"."EMP_TRANSACTIONS" ADD ("TECHVALIDATIONRESULT" NVARCHAR(100)); -ALTER TABLE "VIRTAPORTAL"."EMP_TRANSACTIONS" ADD ("NOTBILLABLEREASON" NVARCHAR(200)); +ALTER TABLE "VIRTAPORTAL"."EMP_TRANSACTIONS" ADD ("BUSINESSVALIDATIONRESULT" NVARCHAR(100)); +ALTER TABLE "VIRTAPORTAL"."EMP_TRANSACTIONS" ADD ("TECHVALIDATIONRESULT" NVARCHAR(100)); +ALTER TABLE "VIRTAPORTAL"."EMP_TRANSACTIONS" ADD ("NOTBILLABLEREASON" NVARCHAR(200)); --Neu 05.06.2023 -ALTER TABLE "VIRTAPORTAL"."EMP_TRANSACTIONS" ADD ("FREEMINUTES" INTEGER CS_INT); +ALTER TABLE "VIRTAPORTAL"."EMP_TRANSACTIONS" ADD ("FREEMINUTES" INTEGER CS_INT); ALTER TABLE "VIRTAPORTAL"."CPO_CHARGES" ADD ("KWHNETPRICE" INTEGER CS_INT); @@ -29,7 +29,7 @@ ALTER TABLE "VIRTAPORTAL"."CPO_CHARGES" ADD ("SESSIONNETPRICE" INTEGER CS_INT); -- Schlumpf :o) --04_05_2021 -ALTER TABLE "VIRTAPORTAL"."CPO_CHARGES" ADD ("BUSINESSVALIDATIONRESULT" NVARCHAR(100)); +ALTER TABLE "VIRTAPORTAL"."CPO_CHARGES" ADD ("BUSINESSVALIDATIONRESULT" NVARCHAR(100)); ALTER TABLE "VIRTAPORTAL"."CPO_CHARGES" ADD ("TECHVALIDATIONRESULT" NVARCHAR(100)); ALTER TABLE "VIRTAPORTAL"."CPO_CHARGES" ADD ("NOTBILLABLEREASON" NVARCHAR(200)); @@ -39,5 +39,5 @@ ALTER TABLE "VIRTAPORTAL"."CPO_CHARGES" add ("FULLEVSEID_REDUCED" NVARCHAR(5000 1, 1, ''), - "FULLEVSEID")) -; + "FULLEVSEID")) +; \ No newline at end of file diff --git a/uniorg/eon/virta/meta/cpo_charges.sql b/uniorg/eon/virta/meta/cpo_charges.sql index 58e70de..a824c0b 100644 --- a/uniorg/eon/virta/meta/cpo_charges.sql +++ b/uniorg/eon/virta/meta/cpo_charges.sql @@ -26,15 +26,15 @@ CREATE COLUMN TABLE "VIRTAPORTAL"."CPO_CHARGES"( "FULLEVSEID" NVARCHAR(50), "EVSEID" NVARCHAR(50), "PLUGTYPE" NVARCHAR(50), - "EMPSHARE" INTEGER CS_INT, - "SIGNEDMETERVALUEBEGIN" NVARCHAR(50), - "SIGNEDMETERVALUEEND" NVARCHAR(50), - "FREECHARGING" NVARCHAR(3), - "CONNECTORID" INTEGER CS_INT, - "METERSTART" INTEGER CS_INT, - "METERSTOP" INTEGER CS_INT, - "NOTES" NVARCHAR(500), - "MILEAGE" INTEGER CS_INT, + "EMPSHARE" INTEGER CS_INT, + "SIGNEDMETERVALUEBEGIN" NVARCHAR(50), + "SIGNEDMETERVALUEEND" NVARCHAR(50), + "FREECHARGING" NVARCHAR(3), + "CONNECTORID" INTEGER CS_INT, + "METERSTART" INTEGER CS_INT, + "METERSTOP" INTEGER CS_INT, + "NOTES" NVARCHAR(500), + "MILEAGE" INTEGER CS_INT, "JSONRAW" NCLOB MEMORY THRESHOLD 1000, "CREATE_TS" LONGDATE CS_LONGDATE DEFAULT CURRENT_TIMESTAMP NOT NULL, "UPDATE_TS" LONGDATE CS_LONGDATE NOT NULL, @@ -57,5 +57,5 @@ ALTER TABLE "VIRTAPORTAL"."CPO_CHARGES" ADD ( ); ALTER TABLE "VIRTAPORTAL"."CPO_CHARGES" ALTER ( -"FULLEVSEID_REDUCED" NVARCHAR(5000) AS NULLIF("substr_regex"("FULLEVSEID", '^(.*)(\\*\\d)$', 1, 1, 1, ''), "FULLEVSEID") +"FULLEVSEID_REDUCED" NVARCHAR(5000) AS NULLIF("substr_regex"("FULLEVSEID", '^(.*)(\*\d)$', 1, 1, 1, ''), "FULLEVSEID") ); diff --git a/uniorg/eon/virta/meta/create_views.sql b/uniorg/eon/virta/meta/create_views.sql new file mode 100644 index 0000000..972dc66 --- /dev/null +++ b/uniorg/eon/virta/meta/create_views.sql @@ -0,0 +1,290 @@ +ALTER VIEW "EMOBILITY"."V_CHARGEDATA_EMP" ( "ID", + "CALLID", + "CDRID", + "EVSEID", + "CONTRACTID", + "RFID", + "INSTANCE", + "TOKENTYPE", + "CONSUMEDENERGY", + "OPERATORID", + "OPERATORNAME",a + "OPERATORSUBMANDANT", + "FREECHARGE", + "CHARGEPOINTTYPE", + "MAXSOCKETPOWER", + "ADDRESS", + "ZIP", + "CITY", + "COUNTRY", + "PROVIDERID", + "PROVIDERNAME", + "CHARGINGSTARTTIME", + "CHARGINGSTOPTIME", + "PARKINGSTARTTIME", + "PARKINGSTOPTIME", + "METERSTART", + "METERSTOP", + "TARIFF", + "CURRENCY", + "VAT", + "BILLINGVALUEBRUTTO", + "BILLINGVALUENETTO", + "PARKINGTIMEPRICEBRUTTO", + "PARKINGTIMEPRICENETTO", + "ADITIONALPRICEBRUTTO", + "ADITIONALPRICENETTO", + "KWHNETPRICE", + "MINUTENETPRICE", + "SESSIONNETPRICE", + "EICHRECHTTYPE", + "MILEAGE", + "CREATE_TS", + "UPDATE_TS", + "STATUS", + "BILLING", + "SYSTYPE", + "VIEWVERSION" ) AS select + "UUID", + "UUID", + "UUID", + "FULLEVSEID", + "CUSTOMERID", + UPPER("RFID"), + UPPER("RFID"), + 'RFID', + IFNULL("WATTHOUR", + 0), + 'OPERATORID', + 'OPERATORNAME', + 'true', + CASE "FREECHARGING" WHEN 'yes' +THEN 'true' WHEN 'no' +then 'false' +ELSE '' +END as FREECHARGE, + "PLUGTYPE", + 0, + --'MAXSOCKETPOWER', +"LOCATION_ADDRESS", + '', + --LOCATION ZIP + "LOCATION_CITY", + 'DE', + 'PROVIDERID', + 'PROVIDERNAME', + +left("STARTTIME", + 19), + +left("STOPTIME", + 19), + +left("STARTTIME", + 19), + +left("STOPTIME", + 19), + IFNULL( "METERSTART", + 0), + IFNULL( "METERSTOP", + 0), + 'TARIFF', + "CURRENCY", + 0, + --'VAT', +0, + --'BILLINGVALUEBRUTTO', +0, + --'BILLINGVALUENETTO', +0, + --'PARKINGTIMEPRICEBRUTTO', +0, + --'PARKINGTIMEPRICENETTO', +0, + --'ADITIONALPRICEBRUTTO', +0, + --'ADITIONALPRICENETTO', + "KWHGROSSPRICE" / '1.16', + "MINUTEGROSSPRICE" / '1.16', + "SESSIONGROSSPRICE" / '1.16', + -- "SESSIONGROSSPRICE" , + "EICHRECHTTYPE", + "MILEAGE", + --'B2CPRICING', +--'ASSETOWNERPRICING', +--'CPOPRICING', + /* "STATIONUUID", + "CUSTOMERID", + "STARTTIME", + "STOPTIME", + "DURATION", + "WATTHOUR", + "AMOUNT", + "CURRENCY", + "TRANSACTIONTYPE", + "CREATED", + "RFID", + "STATION", + "CUSTOMERGROUPID", + "CUSTOMERGROUPNAME", + "ORGANIZATIONID", + "PAYMENTTYPE", + "EVSEID", + "PLUGTYPE", + "EMPSHARE", + "SIGNEDMETERVALUEBEGIN", + "SIGNEDMETERVALUEEND", + "OPERATORPRICE", + "OPERATORCURRENCY", + "OPERATORID", + "FREECHARGING", + "EMPTARIFFID", + "EMPTARIFFNAME", + "FULLEVSEID", + "METERSTART", + "METERSTOP", + "NOTES", + "MILEAGE", + */ --"JSONRAW", +"CREATE_TS", + "UPDATE_TS", + "STATUS", + "BILLING", + 'VIRTAPORTAL', + 'V 1.4/10.09.2020' +from "VIRTAPORTAL"."EMP_TRANSACTIONS" +where "TRANSACTIONTYPE" = 'charge' +and "WATTHOUR" > 0 +and "DURATION" > 2; + +DROP VIEW "EMOBILITY"."V_CHARGEDATA_CPO"; +CREATE VIEW "EMOBILITY"."V_CHARGEDATA_CPO" ( "ID", + "CALLID", + "CDRID", + "EVSEID", + "CONTRACTID", + "RFID", + "INSTANCE", + "TOKENTYPE", + "CONSUMEDENERGY", + "OPERATORID", + "OPERATORNAME", + "OPERATORSUBMANDANT", + "FREECHARGE", + "CHARGEPOINTTYPE", + "MAXSOCKETPOWER", + "ADDRESS", + "ZIP", + "CITY", + "COUNTRY", + "PROVIDERID", + "PROVIDERNAME", + "CHARGINGSTARTTIME", + "CHARGINGSTOPTIME", + "PARKINGSTARTTIME", + "PARKINGSTOPTIME", + "METERSTART", + "METERSTOP", + "TARIFF", + "CURRENCY", + "VAT", + "BILLINGVALUEBRUTTO", + "BILLINGVALUENETTO", + "PARKINGTIMEPRICEBRUTTO", + "PARKINGTIMEPRICENETTO", + "ADITIONALPRICEBRUTTO", + "ADITIONALPRICENETTO", + "KWHNETPRICE", +"MINUTENETPRICE", +"SESSIONNETPRICE", + "EICHRECHTTYPE", + "CREATE_TS", + "UPDATE_TS", + "STATUS", + "BILLING", + "SYSTYPE", + "VIEWVERSION") AS select + "CDRID", + IFNULL("UUID", + CDRID), + "CDRID", + "FULLEVSEID", + CASE WHEN "ROAMINGEMPID" > '' +THEN 'ROAMING' +ELSE 'DE-EON-C00000000-0' -- ADHOC + +END as "CONTRACTID", + UPPER("RFID"), + UPPER("RFID"), + 'RFID', + IFNULL("WATTHOUR", + 0), + 'EMPSELLERID', + 'EMPSELLERID', + 'true', + CASE "FREECHARGING" WHEN 'yes' +THEN 'true' WHEN 'no' +then 'false' +ELSE '' +END as FREECHARGE, + "PLUGTYPE", + 0, + --'MAXSOCKETPOWER', +"LOCATION_ADDRESS", + '', + --LOCATION ZIP + "LOCATION_CITY", + 'DE', + 'EMPSELLERID', + 'STRING', + +left("STARTTIME", + 19), + +left("STOPTIME", + 19), + +left("STARTTIME", + 19), + +left("STOPTIME", + 19), + IFNULL( "METERSTART", + 0), + IFNULL( "METERSTOP", + 0), + 'TARIFF', + 'CURRENCY', + 'VAT', + --'BILLINGVALUEBRUTTO', + IFNULL("AMOUNT", + 0)/100, + --'BILLINGVALUENETTO', +0, + --'PARKINGTIMEPRICEBRUTTO', +0, + --'PARKINGTIMEPRICENETTO', +0, + --'ADITIONALPRICEBRUTTO', +0, + --'ADITIONALPRICENETTO', +0, +"KWHNETPRICE", +"MINUTENETPRICE", +"SESSIONNETPRICE", +"EICHRECHTTYPE", + "CREATE_TS", + "UPDATE_TS", + "STATUS", + "BILLING", + 'VIRTAPORTAL', + 'V 1.2/31.07.2020' +from "VIRTAPORTAL"."CPO_CHARGES" --where "TRANSACTIONTYPE" = 'charge' + +where "PLUGTYPE" IS NOT NULL +and "WATTHOUR" > 0 +and "DURATION" > 2; + + + diff --git a/uniorg/eon/virta/meta/emobility.sql b/uniorg/eon/virta/meta/emobility.sql new file mode 100644 index 0000000..7d178ef --- /dev/null +++ b/uniorg/eon/virta/meta/emobility.sql @@ -0,0 +1,269 @@ +--V1.1 08.01.2020 +create schema EMOBILITY; + +ALTER VIEW "EMOBILITY"."V_CHARGEDATA_EMP" ( +--Version:1.0.4 10.01.2020 + "ID", + "CALLID", + "CDRID", + "EVSEID", + "CONTRACTID", + "RFID", + "INSTANCE", + "TOKENTYPE", + "CONSUMEDENERGY", + "OPERATORID", + "OPERATORNAME", + "OPERATORSUBMANDANT", + "FREECHARGE", + "CHARGEPOINTTYPE", + "MAXSOCKETPOWER", + "ADDRESS", + "ZIP", + "CITY", + "COUNTRY", + "PROVIDERID", + "PROVIDERNAME", + "CHARGINGSTARTTIME", + "CHARGINGSTOPTIME", + "PARKINGSTARTTIME", + "PARKINGSTOPTIME", + "METERSTART", + "METERSTOP", + "TARIFF", + "CURRENCY", + "VAT", + "BILLINGVALUEBRUTTO", + "BILLINGVALUENETTO", + "PARKINGTIMEPRICEBRUTTO", + "PARKINGTIMEPRICENETTO", + "ADITIONALPRICEBRUTTO", + "ADITIONALPRICENETTO", + "CREATE_TS", + "UPDATE_TS", + "STATUS", + "BILLING", + "SYSTYPE" ) AS select + "UUID", + "UUID", + "UUID", + "FULLEVSEID", + "CUSTOMERID", + UPPER("RFID"), + UPPER("RFID"), + 'RFID', + IFNULL("WATTHOUR", + 0), + 'OPERATORID', + 'OPERATORNAME', + 'true', + CASE "FREECHARGING" WHEN 'yes' +THEN 'true' WHEN 'no' +then 'false' +ELSE '' +END as FREECHARGE, + "PLUGTYPE", + 0, + --'MAXSOCKETPOWER', +"LOCATION_ADDRESS", + '', + --LOCATION ZIP + "LOCATION_CITY", + 'DE', + 'PROVIDERID', + 'PROVIDERNAME', + +left("STARTTIME", + 19), + +left("STOPTIME", + 19), + +left("STARTTIME", + 19), + +left("STOPTIME", + 19), + IFNULL( "METERSTART", + 0), + IFNULL( "METERSTOP", + 0), + 'TARIFF', + "CURRENCY", + 0, + --'VAT', +0, + --'BILLINGVALUEBRUTTO', +0, + --'BILLINGVALUENETTO', +0, + --'PARKINGTIMEPRICEBRUTTO', +0, + --'PARKINGTIMEPRICENETTO', +0, + --'ADITIONALPRICEBRUTTO', +0, + --'ADITIONALPRICENETTO', +--'B2CPRICING', +--'ASSETOWNERPRICING', +--'CPOPRICING', + /* "STATIONUUID", + "CUSTOMERID", + "STARTTIME", + "STOPTIME", + "DURATION", + "WATTHOUR", + "AMOUNT", + "CURRENCY", + "TRANSACTIONTYPE", + "CREATED", + "RFID", + "STATION", + "CUSTOMERGROUPID", + "CUSTOMERGROUPNAME", + "ORGANIZATIONID", + "PAYMENTTYPE", + "EVSEID", + "PLUGTYPE", + "EMPSHARE", + "SIGNEDMETERVALUEBEGIN", + "SIGNEDMETERVALUEEND", + "OPERATORPRICE", + "OPERATORCURRENCY", + "OPERATORID", + "FREECHARGING", + "EMPTARIFFID", + "EMPTARIFFNAME", + "FULLEVSEID", + "METERSTART", + "METERSTOP", + "NOTES", + "MILEAGE", + */ --"JSONRAW", +"CREATE_TS", + "UPDATE_TS", + "STATUS", + "BILLING", + 'VIRTAPORTAL' +from "VIRTAPORTAL"."EMP_TRANSACTIONS" +where "TRANSACTIONTYPE" = 'charge' +and "WATTHOUR" > 0 +and "DURATION" > 2 +and "PLUGTYPE" IS NOT NULL; + + + + + + +ALTER VIEW "EMOBILITY"."V_CHARGEDATA_CPO" ( +--V1.0.0 10.01.2020 + "ID", + "CALLID", + "CDRID", + "EVSEID", + "CONTRACTID", + "RFID", + "INSTANCE", + "TOKENTYPE", + "CONSUMEDENERGY", + "OPERATORID", + + "OPERATORNAME", + "OPERATORSUBMANDANT", + "FREECHARGE", + "CHARGEPOINTTYPE", + "MAXSOCKETPOWER", + "ADDRESS", + "ZIP", + "CITY", + "COUNTRY", + "PROVIDERID", + + "PROVIDERNAME", + "CHARGINGSTARTTIME", + "CHARGINGSTOPTIME", + "PARKINGSTARTTIME", + "PARKINGSTOPTIME", + "METERSTART", + "METERSTOP", + "TARIFF", + "CURRENCY", + "VAT", + + "BILLINGVALUEBRUTTO", + "BILLINGVALUENETTO", + "PARKINGTIMEPRICEBRUTTO", + "PARKINGTIMEPRICENETTO", + "ADITIONALPRICEBRUTTO", + "ADITIONALPRICENETTO", + + + "CREATE_TS", + "UPDATE_TS", + "STATUS", + "BILLING", + "SYSTYPE" ) AS select + + "CDRID", + "UUID", + "CDRID", + "FULLEVSEID", + "EMPSELLERID", + UPPER("RFID"), + UPPER("RFID"), + 'RFID', + IFNULL("WATTHOUR", 0), + 'EMPSELLERID', + + 'EMPSELLERID', + 'true', + CASE "FREECHARGING" WHEN 'yes' +THEN 'true' WHEN 'no' +then 'false' +ELSE '' +END as FREECHARGE, +"PLUGTYPE", + 0, + --'MAXSOCKETPOWER', +"LOCATION_ADDRESS", + '', + --LOCATION ZIP + "LOCATION_CITY", + 'DE', + 'EMPSELLERID', + + + 'STRING', +left("STARTTIME", 19), +left("STOPTIME", 19), +left("STARTTIME", 19), +left("STOPTIME", 19), + IFNULL( "METERSTART", 0), + IFNULL( "METERSTOP", 0), + 'TARIFF', + 'CURRENCY', + 'VAT', + + --'BILLINGVALUEBRUTTO', +0, + --'BILLINGVALUEBRUTTO', +0, + --'BILLINGVALUENETTO', +0, + --'PARKINGTIMEPRICEBRUTTO', +0, + --'PARKINGTIMEPRICENETTO', +0, + --'ADITIONALPRICEBRUTTO', +0, + + +"CREATE_TS", + "UPDATE_TS", + "STATUS", + "BILLING", + 'VIRTAPORTAL' +from "VIRTAPORTAL"."CPO_CHARGES" +--where "TRANSACTIONTYPE" = 'charge' +where "PLUGTYPE" IS NOT NULL; \ No newline at end of file diff --git a/uniorg/eon/virta/meta/emobility_view_emp_v1_0.sql b/uniorg/eon/virta/meta/emobility_view_emp_v1_0.sql new file mode 100644 index 0000000..3ba9b10 --- /dev/null +++ b/uniorg/eon/virta/meta/emobility_view_emp_v1_0.sql @@ -0,0 +1,188 @@ +--Version 26.08.2020 + + +ALTER VIEW "EMOBILITY"."V_CHARGEDATA_EMP_VIRTAPORTAL" ( "ID", + "CALLID", + "CDRID", + "EVSEID", + "CONTRACTID", + "RFID", + "INSTANCE", + "TOKENTYPE", + "CONSUMEDENERGY", + "OPERATORID", + "OPERATORNAME", + "OPERATORSUBMANDANT", + "FREECHARGE", + "CHARGEPOINTTYPE", + "METERID", + "MAXSOCKETPOWER", + "ADDRESS", + "ZIP", + "CITY", + "COUNTRY", + "PROVIDERID", + "PROVIDERNAME", + "CHARGINGSTARTTIME", + "CHARGINGSTOPTIME", + "PARKINGSTARTTIME", + "PARKINGSTOPTIME", + "METERSTART", + "METERSTOP", + "TARIFF", + "CURRENCY", + "VAT", + "BILLINGVALUEBRUTTO", + "BILLINGVALUENETTO", + "PARKINGTIMEPRICEBRUTTO", + "PARKINGTIMEPRICENETTO", + "ADITIONALPRICEBRUTTO", + "ADITIONALPRICENETTO", + "KWHNETPRICE", + "MINUTENETPRICE", + "SESSIONNETPRICE", + "DURATION", + "EICHRECHTTYPE", + "MILEAGE", + "SUBSCRIPTION_ID", + "CREATE_TS", + "UPDATE_TS", + "STATUS", + "BILLING", + "SYSTYPE", + "VIEWVERSION" ) AS (select + "UUID", + "UUID", + "UUID", + "FULLEVSEID", + TO_NVARCHAR("CUSTOMERID"), + UPPER("RFID"), + UPPER("RFID"), + 'RFID', + IFNULL("WATTHOUR", + 0), + CPOOPERATORID, + 'OPERATORNAME', + 'true', + CASE "FREECHARGING" WHEN 'yes' + THEN 'true' WHEN 'no' + THEN 'false' + ELSE 'false' + END as FREECHARGE, + CASE CPOOPERATORID WHEN 'DE*ION' + THEN 'ION' WHEN 'DE*UFC' + THEN 'UFC' + ELSE IFNULL("PLUGTYPE" , + 'UNKNOWN') + END as "PLUGTYPE", + 'METERID', + 0, + REPLACE(REPLACE("LOCATION_ADDRESS", + '&', + ' '), + ';', + ' '), + '', + --LOCATION ZIP + "LOCATION_CITY", + "LOCATION_COUNTRY", + 'PROVIDERID', + 'PROVIDERNAME', + + left("STARTTIME", + 19), + + left("STOPTIME", + 19), + + left("STARTTIME", + 19), + + left("STOPTIME", + 19), + IFNULL( "METERSTART", + 0), + IFNULL( "METERSTOP", + 0), + 'TARIFF', + "CURRENCY", + 0, + --'VAT', +0, + --'BILLINGVALUEBRUTTO', +0, + --'BILLINGVALUENETTO', +0, + --'PARKINGTIMEPRICEBRUTTO', +0, + --'PARKINGTIMEPRICENETTO', +0, + --'ADITIONALPRICEBRUTTO', +0, + --'ADITIONALPRICENETTO', + "KWHGROSSPRICE" / '119', + -- "MINUTEGROSSPRICE" / '119', + CAST(null as DECIMAL(17, + 3)) as "MINUTENETPRICE", + -- "SESSIONGROSSPRICE" / '119' , + CASE WHEN "SESSIONGROSSPRICE" IS NULL + AND "MINUTEGROSSPRICE" IS NOT NULL + AND "FREECHARGING" = 'yes' + THEN 0.0 WHEN "SESSIONGROSSPRICE" IS NULL + AND "MINUTEGROSSPRICE" IS NOT NULL + AND NOT "FREECHARGING" = 'yes' + THEN 5.0 + ELSE "SESSIONGROSSPRICE" / '119' + END as "SESSIONNETPRICE", + "DURATION" , + "EICHRECHTTYPE", + "MILEAGE", + '', + --'B2CPRICING', +--'ASSETOWNERPRICING', +--'CPOPRICING', + /* "STATIONUUID", + "CUSTOMERID", + "STARTTIME", + "STOPTIME", + "DURATION", + "WATTHOUR", + "AMOUNT", + "CURRENCY", + "TRANSACTIONTYPE", + "CREATED", + "RFID", + "STATION", + "CUSTOMERGROUPID", + "CUSTOMERGROUPNAME", + "ORGANIZATIONID", + "PAYMENTTYPE", + "EVSEID", + "PLUGTYPE", + "EMPSHARE", + "SIGNEDMETERVALUEBEGIN", + "SIGNEDMETERVALUEEND", + "OPERATORPRICE", + "OPERATORCURRENCY", + "OPERATORID", + "FREECHARGING", + "EMPTARIFFID", + "EMPTARIFFNAME", + "FULLEVSEID", + "METERSTART", + "METERSTOP", + "NOTES", + "MILEAGE", + */ --"JSONRAW", +"CREATE_TS", + "UPDATE_TS", + "STATUS", + "BILLING", + 'VIRTAPORTAL', + 'V 2.5/26.8.2021' + from "VIRTAPORTAL"."EMP_TRANSACTIONS" + where "TRANSACTIONTYPE" = 'charge' --and ("PLUGTYPE" is not null OR "CPOOPERATORID" in ('DE*ION','DE*UFC')) + + and "STOPTIME" >= '2020-01-01' + and "WATTHOUR" > 0 + and "DURATION" > 2) \ No newline at end of file diff --git a/uniorg/eon/virta/meta/emp_transactions.sql b/uniorg/eon/virta/meta/emp_transactions.sql index a3ae218..c896d28 100644 --- a/uniorg/eon/virta/meta/emp_transactions.sql +++ b/uniorg/eon/virta/meta/emp_transactions.sql @@ -27,20 +27,20 @@ CREATE COLUMN TABLE "VIRTAPORTAL"."EMP_TRANSACTIONS"( "PAYMENTTYPE" NVARCHAR(50), "EVSEID" NVARCHAR(50), "PLUGTYPE" NVARCHAR(50), - "EMPSHARE" INTEGER CS_INT, - "SIGNEDMETERVALUEBEGIN" NVARCHAR(50), - "SIGNEDMETERVALUEEND" NVARCHAR(50), - "OPERATORPRICE" INTEGER CS_INT, - "OPERATORCURRENCY" NVARCHAR(3), - "OPERATORID" INTEGER CS_INT, - "FREECHARGING" NVARCHAR(3), - "EMPTARIFFID" INTEGER CS_INT, - "EMPTARIFFNAME" NVARCHAR(100), - "FULLEVSEID" NVARCHAR(50), - "METERSTART" INTEGER CS_INT, - "METERSTOP" INTEGER CS_INT, - "NOTES" NVARCHAR(500), - "MILEAGE" INTEGER CS_INT, + "EMPSHARE" INTEGER CS_INT, + "SIGNEDMETERVALUEBEGIN" NVARCHAR(50), + "SIGNEDMETERVALUEEND" NVARCHAR(50), + "OPERATORPRICE" INTEGER CS_INT, + "OPERATORCURRENCY" NVARCHAR(3), + "OPERATORID" INTEGER CS_INT, + "FREECHARGING" NVARCHAR(3), + "EMPTARIFFID" INTEGER CS_INT, + "EMPTARIFFNAME" NVARCHAR(100), + "FULLEVSEID" NVARCHAR(50), + "METERSTART" INTEGER CS_INT, + "METERSTOP" INTEGER CS_INT, + "NOTES" NVARCHAR(500), + "MILEAGE" INTEGER CS_INT, "JSONRAW" NCLOB MEMORY THRESHOLD 1000, "CREATE_TS" LONGDATE CS_LONGDATE DEFAULT CURRENT_TIMESTAMP NOT NULL, "UPDATE_TS" LONGDATE CS_LONGDATE NOT NULL, @@ -65,4 +65,4 @@ ALTER TABLE "VIRTAPORTAL"."EMP_TRANSACTIONS" ADD ( ALTER TABLE "VIRTAPORTAL"."EMP_TRANSACTIONS" ADD ( "UPDATE_USER" NVARCHAR(50) DEFAULT CURRENT_USER NOT NULL -); +); \ No newline at end of file diff --git a/uniorg/eon/virta/v1/getcpotrans.xsjs b/uniorg/eon/virta/v1/getcpotrans.xsjs new file mode 100644 index 0000000..17a696a --- /dev/null +++ b/uniorg/eon/virta/v1/getcpotrans.xsjs @@ -0,0 +1,438 @@ +// Prod API Documentation Url: https://virta-api-admin.api-docs.io/ + +var ParDebug = false; +var Billingrunmode = "EMP"; +var DateFrom = ""; +var DateTo = ""; +var output = {}; +var outMessages = []; +var outErrorMessages = []; +var outMsg = {}; +var outStatus = "success"; +var myDebug = {}; + +var destn_pkg = "uniorg.eon.virta.v1"; +var dest_name = "VirtaAPI"; +var serviceVersion = '1.5'; + +var pageSize = 100; +/*if ($.request.parameters.get("pageSize")) { + pageSize = $.request.parameters.get("pageSize"); +}*/ + +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; +} + +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) { + 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; +} + +function getVirtaToken(ifUsername, ifPassword) { + + try + + { + + var dest = $.net.http.readDestination(destn_pkg, dest_name); + var client = new $.net.http.Client(); + var req = new $.web.WebRequest($.net.http.POST, "/auth"); + req.contentType = "application/json"; + + outMsg = {}; + outMsg.username = ifUsername; + outMsg.password = ifPassword; + + req.setBody(JSON.stringify(outMsg)); + + client.request(req, dest); + + var response = client.getResponse(); + + var b1iResp = response.body.asString(); + var retObj = JSON.parse(b1iResp); + + return retObj.token.toString(); + + } catch (e) { + + $.response.contentType = "text/plain"; + + $.response.setBody(e.message); + + } + +} + +function sleep(seconds) { + var currentTime = new Date().getTime(); + + while (currentTime + seconds * 1000 >= new Date().getTime()) { + } +} + +function getCPOList() { + var mytoken = getVirtaToken("b1_api_user", "qEJPiFLtBHgYR10vkWmqs4"); + + var dest = $.net.http.readDestination(destn_pkg, dest_name); + var client = new $.net.http.Client(); + var req = new $.web.WebRequest($.net.http.GET, "/cpo/charges"); + req.contentType = "application/json"; + req.headers.set("Authorization", "Bearer" + mytoken); + + req.parameters.set("perPage", pageSize.toString()); + req.parameters.set("from", DateFrom); + req.parameters.set("to", DateTo); + var totalCount = 1; + myDebug.Calls = []; + for (var p = 1; p <= Math.ceil(totalCount / pageSize); ++p) { + var debugCall = {}; + debugCall.request = { "page": p }; + req.parameters.set("page", p.toString()); + client.request(req, dest); + + var response = client.getResponse(); + // get all the cookies and headers from the response + var he = []; + for(var c in response.headers) { + he.push(response.headers[c]); + } + debugCall.response = { "headers": he }; + if (response.status === 429) { + // HTTP Status 429 "Too many requests" + var retryAfter = parseInt(response.headers.get('retry-after'), 10) + 1; + if (!(retryAfter > 0)) { + retryAfter = 10; + } + debugCall.waitSeconds = retryAfter; + sleep(retryAfter); + --p; + myDebug.Calls.push(debugCall); + } else if (response.status >= 200 && response.status < 300) { + var virtaBody = response.body.asString(); + totalCount = response.headers.get('X-Total-Count'); + var maxPageSize = Math.ceil(totalCount / pageSize); + debugCall.totalCount = totalCount; + debugCall.pagesCount = maxPageSize; + debugCall.link = response.headers.get('link'); + debugCall.responseLineCount = JSON.parse(virtaBody).length; + myDebug.Calls.push(debugCall); + writeObj2Table(virtaBody); + + } else { + debugCall.responseStatus = response.status; + myDebug.Calls.push(debugCall); + break; + } + } + + //$.response.status = $.net.http.OK; + + //$.response.contentType = "application/json"; + // $.response.setBody(JSON.stringify(b1iResp)); + //$.response.setBody(JSON.stringify(virtaBody)); +} + +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 writeObj2Table(myOBJ) { + //var pdcontent = $.request.body.asString(); + // pdcontent = pdcontent.replace(/\"([^(\")"]+)\":/g,"$1:"); + var transOBJ = JSON.parse(myOBJ); + 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 = + "UPSERT \"VIRTAPORTAL\".\"CPO_CHARGES\" (CDRID,UUID,STATIONUUID,EMPSELLERID,STARTTIME,STOPTIME,DURATION,WATTHOUR,AMOUNT,CURRENCY,METHOD,CREATED,RFID,STATION,STATION_ID,STATION_NAME,LOCATION_ID,LOCATION_ADDRESS,LOCATION_CITY,LOCATION_TYPE,ROAMINGEMPID,EVCOID,ORGANIZATIONID,FULLEVSEID,EVSEID,PLUGTYPE,EMPSHARE,SIGNEDMETERVALUEBEGIN,SIGNEDMETERVALUEEND,FREECHARGING,CONNECTORID,METERSTART,METERSTOP,NOTES,MILEAGE,JSONRAW,UPDATE_TS,EICHRECHTTYPE) values (" + + "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?) WITH PRIMARY KEY"; + // "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.setBatchSize(transOBJ.length); + //$.trace.debug("prepareBatchStatement (" + transOBJ.length.toString() + " rows): " + query); + transOBJ.forEach(function(transRow) { + + if (!isNaN(parseInt(transRow.cdrId))) { + pstmt.setInteger(1, transRow.cdrId); + } else { + pstmt.setNull(1); + } + if (transRow.UUID){ + pstmt.setNString(2, transRow.UUID); + } else { + pstmt.setNull(2); + } + + if (!isNaN(parseInt(transRow.locationId))) { + pstmt.setInteger(3, transRow.locationId); + } else { + pstmt.setNull(3); + } + if (!isNaN(parseInt(transRow.empSellerId))) { + pstmt.setInteger(4, transRow.empSellerId); + } else { + pstmt.setNull(4); + } + + if (transRow.startTime) { + pstmt.setNString(5, transRow.startTime); + } else { + pstmt.setNull(5); + } + if (transRow.stopTime) { + pstmt.setNString(6, transRow.stopTime); + } else { + pstmt.setNull(6); + } + if (!isNaN(parseInt(transRow.duration))) { + pstmt.setInteger(7, transRow.duration); + } else { + pstmt.setNull(7); + } + if (!isNaN(parseInt(transRow.wattHour))) { + pstmt.setInteger(8, transRow.wattHour); + } else { + pstmt.setNull(8); + } + if (!isNaN(parseInt(transRow.amount))) { + pstmt.setInteger(9, transRow.amount); + } else { + pstmt.setNull(9); + } + + pstmt.setNString(10, transRow.currency); + pstmt.setNString(11, transRow.method); + if (transRow.created) { + pstmt.setNString(12, transRow.created); + } else { + pstmt.setNull(12); + } + if (transRow.rfid) { + pstmt.setNString(13, transRow.rfid); + } else { + pstmt.setNull(13); + } + if (transRow.station) { + pstmt.setNClob(14, JSON.stringify(transRow.station)); + pstmt.setNString(15, transRow.station.identity); + pstmt.setNString(16, transRow.station.name); + pstmt.setInteger(17, transRow.station.location.id); + pstmt.setNString(18, transRow.station.location.address); + pstmt.setNString(19, transRow.station.location.city); + pstmt.setNString(20, transRow.station.location.locationType); + } else { + pstmt.setNull(14); + pstmt.setNull(15); + pstmt.setNull(16); + pstmt.setNull(17); + pstmt.setNull(18); + pstmt.setNull(19); + pstmt.setNull(20); + } + + if (transRow.roamingEmpId) { + pstmt.setNString(21, transRow.roamingEmpId); + } else { + pstmt.setNull(21); + } + + pstmt.setNString(22, transRow.evcoId); + pstmt.setInteger(23, transRow.organizationId); + if (transRow.fullEvseId) { + pstmt.setNString(24, transRow.fullEvseId); + } else { + pstmt.setNull(24); + } + if (transRow.evseId) { + pstmt.setNString(25, transRow.evseId.toString()); + } else { + pstmt.setNull(25); + } + + pstmt.setNString(26, transRow.socketType); + if (!isNaN(parseInt(transRow.empShare))) { + pstmt.setInteger(27, transRow.empShare); + } else { + pstmt.setNull(27); + } + if (transRow.signedMeterValueBegin) { + pstmt.setNString(28, transRow.signedMeterValueBegin.substring(0,50)); + } else { + pstmt.setNull(28); + } + if (transRow.signedMeterValueEnd) { + pstmt.setNString(29, transRow.signedMeterValueEnd.substring(0,50)); + } else { + pstmt.setNull(29); + } + + + pstmt.setNString(30, transRow.freeCharging); + if (!isNaN(parseInt(transRow.connectorId))) { + pstmt.setInteger(31, transRow.connectorId); + } else { + pstmt.setNull(31); + } + + + + if (!isNaN(parseInt(transRow.meterStart))) { + pstmt.setInteger(32, transRow.meterStart); + } else { + pstmt.setNull(32); + } + if (!isNaN(parseInt(transRow.meterStop))) { + pstmt.setInteger(33, transRow.meterStop); + } else { + pstmt.setNull(33); + } + + pstmt.setNString(34, JSON.stringify(transRow.notes)); + + if (transRow.notes && transRow.notes.length > 0) { + pstmt.setInteger(35, transRow.notes[0].value); + } else { + pstmt.setNull(35); + } + + //pstmt.setNString(34, "1234"); + + pstmt.setNString(36, JSON.stringify(transRow)); + pstmt.setNString(37, transRow.eichrechtType); + pstmt.addBatch(); + }); + var batchResult = pstmt.executeBatch(); + //$.trace.debug("BatchUpsert Result: " + batchResult.toString()); + pstmt.close(); + conn.commit(); + conn.close(); + + outMsg = {}; + outMsg.method = "insertDB"; + outMsg.status = "success"; + outMessages.push(outMsg); + + } catch (e) { + $.trace.error("InsertDB ExceptionHandler: " + e.toString()); + 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; + } + } +} + +var content = ''; +if ($.request.body) { + content = $.request.body.asString(); +} +ParDebug = $.request.parameters.get('debug') && $.request.parameters.get('debug').toLowerCase() === "true"; + +if ($.request.parameters.get('Billingrunmode') > 0) { + Billingrunmode = $.request.parameters.get('Billingrunmode'); +} +if ($.request.parameters.get('DateFrom')) { + DateFrom = $.request.parameters.get('DateFrom'); +} +if ($.request.parameters.get('DateTo')) { + DateTo = $.request.parameters.get('DateTo'); +} +//doHTTPCallstartBillingrun("FEE","20180101","20180131"); +//getVirtaToken("b1_api_user","E3qq$§U,Q3hD#K2}"); +getCPOList(); +setOutputMessage(); \ No newline at end of file diff --git a/uniorg/eon/virta/v1/getemptrans.xsjs b/uniorg/eon/virta/v1/getemptrans.xsjs new file mode 100644 index 0000000..9ee37c1 --- /dev/null +++ b/uniorg/eon/virta/v1/getemptrans.xsjs @@ -0,0 +1,557 @@ +// Prod API Documentation Url: https://virta-api-admin.api-docs.io/ + +var ParDebug = false; +var Billingrunmode = "EMP"; +var DateFrom = ""; +var DateTo = ""; +var output = {}; +var outMessages = []; +var outErrorMessages = []; +var outMsg = {}; +var outStatus = "success"; +var myDebug = {}; + +var destn_pkg = "uniorg.eon.virta.v1"; +var dest_name = "VirtaAPI"; + +var serviceVersion = '2.2'; +//Last Change Mapping 30.06.2021 TS UO + +var pageSize = 100; +/*if ($.request.parameters.get("pageSize")) { + pageSize = $.request.parameters.get("pageSize"); +}*/ + +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; +} + +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) { + 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; +} + +function getVirtaToken(ifUsername, ifPassword) { + + try + + { + + var dest = $.net.http.readDestination(destn_pkg, dest_name); + var client = new $.net.http.Client(); + var req = new $.web.WebRequest($.net.http.POST, "/auth"); + req.contentType = "application/json"; + + outMsg = {}; + outMsg.username = ifUsername; + outMsg.password = ifPassword; + + req.setBody(JSON.stringify(outMsg)); + + client.request(req, dest); + + var response = client.getResponse(); + + var b1iResp = response.body.asString(); + var retObj = JSON.parse(b1iResp); + + return retObj.token.toString(); + + } catch (e) { + + $.response.contentType = "text/plain"; + + $.response.setBody(e.message); + + } + +} + +function sleep(seconds) { + var currentTime = new Date().getTime(); + + while (currentTime + seconds * 1000 >= new Date().getTime()) {} +} + +function getEMPList() { + var mytoken = getVirtaToken("b1_api_user", "qEJPiFLtBHgYR10vkWmqs4"); + + var dest = $.net.http.readDestination(destn_pkg, dest_name); + var client = new $.net.http.Client(); + var req = new $.web.WebRequest($.net.http.GET, "/emp/transactions"); + req.contentType = "application/json"; + req.headers.set("Authorization", "Bearer" + mytoken); + + req.parameters.set("perPage", pageSize.toString()); + req.parameters.set("from", DateFrom); + req.parameters.set("to", DateTo); + var totalCount = 1; + myDebug.Calls = []; + for (var p = 1; p <= Math.ceil(totalCount / pageSize); ++p) { + var debugCall = {}; + debugCall.request = { + "page": p + }; + req.parameters.set("page", p.toString()); + client.request(req, dest); + + var response = client.getResponse(); + // get all the cookies and headers from the response + var he = []; + for (var c in response.headers) { + he.push(response.headers[c]); + } + debugCall.response = { + "headers": he + }; + if (response.status === 429) { + // HTTP Status 429 "Too many requests" + var retryAfter = parseInt(response.headers.get('retry-after'), 10) + 1; + if (!(retryAfter > 0)) { + retryAfter = 10; + } + debugCall.waitSeconds = retryAfter; + sleep(retryAfter); + --p; + myDebug.Calls.push(debugCall); + } else if (response.status >= 200 && response.status < 300) { + var virtaBody = response.body.asString(); + totalCount = response.headers.get('X-Total-Count'); + var maxPageSize = Math.ceil(totalCount / pageSize); + debugCall.totalCount = totalCount; + debugCall.pagesCount = maxPageSize; + debugCall.link = response.headers.get('link'); + debugCall.responseLineCount = JSON.parse(virtaBody).length; + myDebug.Calls.push(debugCall); + writeObj2Table(virtaBody); + + } else { + debugCall.responseStatus = response.status; + myDebug.Calls.push(debugCall); + break; + } + //debugCall.virtaBody = virtaBody; + // debugCall.header = response.headers.toSting(); + } + + //$.response.status = $.net.http.OK; + + //$.response.contentType = "application/json"; + // $.response.setBody(JSON.stringify(b1iResp)); + //$.response.setBody(JSON.stringify(virtaBody)); +} + +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 writeObj2Table(myOBJ) { + //var pdcontent = $.request.body.asString(); + // pdcontent = pdcontent.replace(/\"([^(\")"]+)\":/g,"$1:"); + var transOBJ = JSON.parse(myOBJ); + 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 = + "UPSERT \"VIRTAPORTAL\".\"EMP_TRANSACTIONS\" (UUID,CDRID,STATIONUUID,CUSTOMERID,STARTTIME,STOPTIME,DURATION,WATTHOUR,AMOUNT,CURRENCY,TRANSACTIONTYPE,CREATED,RFID,STATION,STATION_ID,STATION_NAME,LOCATION_ID,LOCATION_ADDRESS,LOCATION_CITY,LOCATION_TYPE,CUSTOMERGROUPID,CUSTOMERGROUPNAME,ORGANIZATIONID,PAYMENTTYPE,EVSEID,PLUGTYPE,EMPSHARE,SIGNEDMETERVALUEBEGIN,SIGNEDMETERVALUEEND,OPERATORPRICE,OPERATORCURRENCY,OPERATORID,FREECHARGING,EMPTARIFFID,EMPTARIFFNAME,FULLEVSEID,METERSTART,METERSTOP,NOTES,MILEAGE,JSONRAW,UPDATE_TS,EICHRECHTTYPE,KWHNETPRICE,MINUTENETPRICE,SESSIONNETPRICE,CPOOPERATORID,KWHGROSSPRICE,MINUTEGROSSPRICE,SESSIONGROSSPRICE,LOCATION_COUNTRY) values (" + + "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?,?,?,?,?,?,?,?,?) WITH PRIMARY KEY"; + // "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.setBatchSize(transOBJ.length); + //$.trace.debug("prepareBatchStatement (" + transOBJ.length.toString() + " rows): " + query); + transOBJ.forEach(function(transRow) { + if (transRow.uuid) { + pstmt.setNString(1, transRow.uuid); + } else { + pstmt.setNull(1); + } + /* + if (!isNaN(parseInt(transRow.cdrId))) { + pstmt.setInteger(2, transRow.cdrId); + } else { + pstmt.setNull(2); + } + */ + if (transRow.cdrId) { + pstmt.setNString(2, transRow.cdrId.toString()); + } else { + pstmt.setNull(2); + } + if (transRow.stationUuid) { + pstmt.setNString(3, transRow.stationUuid); + } else { + pstmt.setNull(3); + } + + if (!isNaN(parseInt(transRow.customerId))) { + pstmt.setInteger(4, transRow.customerId); + } else { + pstmt.setNull(4); + } + + if (transRow.startTime) { + pstmt.setNString(5, transRow.startTime); + } else { + pstmt.setNull(5); + } + + if (transRow.stopTime) { + pstmt.setNString(6, transRow.stopTime); + } else { + pstmt.setNull(6); + } + if (!isNaN(parseInt(transRow.duration))) { + pstmt.setInteger(7, transRow.duration); + } else { + pstmt.setNull(7); + } + if (!isNaN(parseInt(transRow.wattHour))) { + pstmt.setInteger(8, transRow.wattHour); + } else { + pstmt.setNull(8); + } + if (!isNaN(parseInt(transRow.amount))) { + pstmt.setInteger(9, transRow.amount); + } else { + pstmt.setNull(9); + } + if (transRow.currency) { + pstmt.setNString(10, transRow.currency); + } else { + pstmt.setNull(10); + } + if (transRow.transactionType) { + pstmt.setNString(11, transRow.transactionType); + } else { + pstmt.setNull(11); + } + + if (transRow.created) { + pstmt.setNString(12, transRow.created); + } else { + pstmt.setNull(12); + } + + if (transRow.rfid) { + pstmt.setNString(13, transRow.rfid); + } else { + pstmt.setNull(13); + } + if (transRow.station) { + pstmt.setNClob(14, JSON.stringify(transRow.station)); + pstmt.setNString(15, transRow.station.identity); + if (transRow.station.name) { + pstmt.setNString(16, transRow.station.name); + } else { + pstmt.setNull(16); + } + if (typeof transRow.station.location === "undefined" || !transRow.station.location.id || !transRow.station.location.address || !transRow.station.location.city || !transRow.station.location.locationType || !transRow.station.location.country) { + pstmt.setNull(17); + pstmt.setNull(18); + pstmt.setNull(19); + pstmt.setNull(20); + pstmt.setNull(50); + } else { + pstmt.setInteger(17, transRow.station.location.id); + pstmt.setNString(18, transRow.station.location.address); + pstmt.setNString(19, transRow.station.location.city); + pstmt.setNString(20, transRow.station.location.locationType); + pstmt.setNString(50, transRow.station.location.country); + + } + } else { + pstmt.setNull(14); + pstmt.setNull(15); + pstmt.setNull(16); + pstmt.setNull(17); + pstmt.setNull(18); + pstmt.setNull(19); + pstmt.setNull(20); + pstmt.setNull(50); + } + + pstmt.setInteger(21, transRow.customerGroupId); + if (transRow.customerGroupName) { + pstmt.setNString(22, transRow.customerGroupName); + } else { + pstmt.setNull(22); + } + + if (!isNaN(parseInt(transRow.organizationId))) { + pstmt.setInteger(23, transRow.organizationId); + } else { + pstmt.setNull(23); + } + + if (transRow.paymentType) { + pstmt.setNString(24, transRow.paymentType); + } else { + pstmt.setNull(24); + } + if (transRow.evseId) { + pstmt.setNString(25, transRow.evseId.toString()); + } else { + pstmt.setNull(25); + } + + if (transRow.plugType) { + pstmt.setNString(26, transRow.plugType); + } else { + pstmt.setNull(26); + } + + if (!isNaN(parseInt(transRow.empShare))) { + pstmt.setInteger(27, transRow.empShare); + } else { + pstmt.setNull(27); + } + if (transRow.signedMeterValueBegin) { + pstmt.setNString(28, transRow.signedMeterValueBegin.substring(0, 50)); + } else { + pstmt.setNull(28); + } + if (transRow.signedMeterValueEnd) { + pstmt.setNString(29, transRow.signedMeterValueEnd.substring(0, 50)); + } else { + pstmt.setNull(29); + } + if (!isNaN(parseInt(transRow.operatorPrice))) { + pstmt.setInteger(30, transRow.operatorPrice); + } else { + pstmt.setNull(30); + } + if (transRow.operatorCurrency) { + pstmt.setNString(31, transRow.operatorCurrency); + } else { + pstmt.setNull(31); + } + if (!isNaN(parseInt(transRow.operatorId))) { + pstmt.setInteger(32, transRow.operatorId); + } else { + pstmt.setNull(32); + } + + if (transRow.freeCharging) { + pstmt.setNString(33, transRow.freeCharging); + } else { + pstmt.setNull(33); + } + if (!isNaN(parseInt(transRow.empTariffId))) { + pstmt.setInteger(34, transRow.empTariffId); + } else { + pstmt.setNull(34); + } + if (transRow.empTariffName) { + pstmt.setNString(35, transRow.empTariffName.substring(0, 50)); + } else { + pstmt.setNull(35); + } + if (transRow.fullEvseId) { + pstmt.setNString(36, transRow.fullEvseId.substring(0, 50)); + } else { + pstmt.setNull(36); + } + + if (!isNaN(parseInt(transRow.meterStart))) { + pstmt.setInteger(37, transRow.meterStart); + } else { + pstmt.setNull(37); + } + if (!isNaN(parseInt(transRow.meterStop))) { + pstmt.setInteger(38, transRow.meterStop); + } else { + pstmt.setNull(38); + } + + pstmt.setNString(39, JSON.stringify(transRow.notes)); + + if (transRow.notes && transRow.notes.length > 0) { + pstmt.setInteger(40, transRow.notes[0].value); + } else { + pstmt.setNull(40); + } + + //pstmt.setNString(34, "1234"); + + pstmt.setNString(41, JSON.stringify(transRow)); + + if (transRow.eichrechtType) { + pstmt.setNString(42, transRow.eichrechtType); + } else { + pstmt.setNull(42); + } + + if (!isNaN(parseInt(transRow.empKwhNetPrice))) { + pstmt.setInteger(43, transRow.empKwhNetPrice); + } else { + pstmt.setNull(43); + } + + if (!isNaN(parseInt(transRow.empMinuteNetPrice))) { + pstmt.setInteger(44, transRow.empMinuteNetPrice); + } else { + pstmt.setNull(44); + } + + if (!isNaN(parseInt(transRow.empSessionNetPrice))) { + pstmt.setInteger(45, transRow.empSessionNetPrice); + } else { + pstmt.setNull(45); + } + if (transRow.cpoOperatorId) { + pstmt.setNString(46, transRow.cpoOperatorId); + } else { + pstmt.setNull(46); + } + if (!isNaN(parseInt(transRow.empKwhGrossPrice))) { + pstmt.setInteger(47, transRow.empKwhGrossPrice); + } else { + pstmt.setNull(47); + } + + if (!isNaN(parseInt(transRow.empMinuteGrossPrice))) { + pstmt.setInteger(48, transRow.empMinuteGrossPrice); + } else { + pstmt.setNull(48); + } + + if (!isNaN(parseInt(transRow.empSessionGrossPrice))) { + pstmt.setInteger(49, transRow.empSessionGrossPrice); + } else { + pstmt.setNull(49); + } + pstmt.addBatch(); + }); + var batchResult = pstmt.executeBatch(); + //$.trace.debug("BatchUpsert Result: " + batchResult.toString()); + pstmt.close(); + conn.commit(); + conn.close(); + + outMsg = {}; + outMsg.method = "insertDB"; + outMsg.status = "success"; + outMessages.push(outMsg); + + } catch (e) { + $.trace.error("InsertDB ExceptionHandler: " + e.toString()); + 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; + } + } +} + +var content = ''; +if ($.request.body) { + content = $.request.body.asString(); +} +ParDebug = $.request.parameters.get('debug') && $.request.parameters.get('debug').toLowerCase() === "true"; + +if ($.request.parameters.get('Billingrunmode') > 0) { + Billingrunmode = $.request.parameters.get('Billingrunmode'); +} +if ($.request.parameters.get('DateFrom')) { + DateFrom = $.request.parameters.get('DateFrom'); +} +if ($.request.parameters.get('DateTo')) { + DateTo = $.request.parameters.get('DateTo'); +} +//doHTTPCallstartBillingrun("FEE","20180101","20180131"); +//getVirtaToken("b1_api_user","E3qq$§U,Q3hD#K2}"); +getEMPList(); +setOutputMessage(); \ No newline at end of file diff --git a/uniorg/eon/virta/v1/reloadfields.xsjs b/uniorg/eon/virta/v1/reloadfields.xsjs new file mode 100644 index 0000000..ce8f93c --- /dev/null +++ b/uniorg/eon/virta/v1/reloadfields.xsjs @@ -0,0 +1,216 @@ +var output = {}; +var outMessages = []; +var outMsg = {}; +var outStatus = "success"; +var myDebug = {}; + +var serviceName = "eon.virta.v1.reloadfields.xsjs"; +var serviceVersion = '1.0'; + +var startTS = new Date(); + +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; +} + +function setOutputMessage() { + output.status = outStatus; + output.durationSeconds = Math.floor((new Date() - startTS)/1000); + 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.indexOf(outMsg) === -1) { + outMsg.status = "canceled"; + 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; +} + +function checkParams() { + var isValid = true; + var missingParams = []; + try { + if (!$.request.parameters.get("field")) { + missingParams.push("field"); + isValid = false; + } + } catch (e) { + exceptionHandler(e); + isValid = false; + } + if (!isValid) { + outMsg = {}; + outMsg.method = "checkParams"; + outMsg.status = "error"; + outStatus = "error"; + outMsg.message = "missing mandatory parameters: " + missingParams.join(); + outMessages.push(outMsg); + $.response.status = $.net.http.BAD_REQUEST; + } + return isValid; +} + +function getEmpTransactionData() { + var limit = 1000; + var offset = 0; + outMsg = {}; + outMsg.method = "getEmpTransactionData"; + outMsg.status = "error"; + var resultData = {}; + var resultSet = []; + var conn = $.hdb.getConnection(); + do { + if (debugLevel > 1) { + outMsg.limit = limit; + outMsg.offset = offset; + } + var queryResult = conn.executeQuery( + "select UUID, JSONRAW \ + from VIRTAPORTAL.EMP_TRANSACTIONS \ + where STARTTIME >= '20220101' and JSONRAW is not null \ + order by UUID \ + limit ? offset ?", limit, offset); + var iterator = queryResult.getIterator(); + while (iterator.next()) { + resultSet.push(iterator.value()); + } + offset += limit; + } while (queryResult.length === limit) + conn.close(); + resultData = { + count: resultSet.length, + rows: resultSet + }; + outMsg.status = "success"; + outMsg.result = resultData; + if (debugLevel > 0 || outMsg.status === "error") { + outMessages.push(outMsg); + } + return resultData; +} + +function updateEmpFreeMinutes() { + var empTransData = getEmpTransactionData(); + var completeData = []; + if (empTransData.count > 0) { + completeData = empTransData.rows.map(function(row) { + var parsedData = {}; + var valid = true; + try { + parsedData = JSON.parse(row.JSONRAW); + if (!parsedData.hasOwnProperty('empFreeMinutes')) { + valid = false; + } + } catch (e) { + valid = false; + } + return { + UUID: row.UUID, + FREEMINUTES: parsedData.empFreeMinutes, + valid: valid + }; + }); + } +// myDebug.completeData = completeData; + /*var updateData = completeData.filter(function(row) { + return row.valid; + }).map(function(row) { + return { + UUID: row.UUID, + FREEMINUTES: row.parsedData.empFreeMinutes + }; + });*/ + //myDebug.updateData = updateData; + if (completeData.some(function(row) {return row.valid;})) { + var paramList = completeData.filter(function(row) {return row.valid;}).map(function(row) { + return [row.FREEMINUTES, row.UUID]; + }); + outMsg = {}; + outMsg.method = "updateData"; + outMsg.status = "error"; + var resultData = {}; + var conn = $.hdb.getConnection(); + var statement = "update VIRTAPORTAL.EMP_TRANSACTIONS \ +set FREEMINUTES = ? \ +where UUID = ?"; + if (debugLevel > 1) { + outMsg.statement = statement; + outMsg.paramList = paramList; + } + var affectedRows = conn.executeUpdate(statement, paramList); + conn.commit(); + conn.close(); + resultData = { + count: affectedRows.reduce(function(cur, acc) {return cur + acc;}, 0) + }; + outMsg.status = "success"; + outMsg.result = resultData; + outMessages.push(outMsg); + } +} + +function chooseMode(field) { + switch (field) { + case 'empfreeminutes': + updateEmpFreeMinutes(); + break; + default: + exceptionHandler(new Error("unsupported mode: field=" + field)); + } +} +try { + if (checkParams()) { + chooseMode($.request.parameters.get("field")); + + } +} catch (e) { + exceptionHandler(e); +} +setOutputMessage(); \ No newline at end of file diff --git a/uniorg/eon/virta/v1/testhana.xsjs b/uniorg/eon/virta/v1/testhana.xsjs index 53d0719..ee92d2c 100644 --- a/uniorg/eon/virta/v1/testhana.xsjs +++ b/uniorg/eon/virta/v1/testhana.xsjs @@ -1,4 +1,4 @@ var body = JSON.stringify('Hello e.on!'); $.response.contentType = 'application/json'; $.response.setBody(body); - $.response.status = $.net.http.OK; + $.response.status = $.net.http.OK; \ No newline at end of file diff --git a/uniorg/eon/virta/v2/getcpotrans.xsjs b/uniorg/eon/virta/v2/getcpotrans.xsjs new file mode 100644 index 0000000..00b8cec --- /dev/null +++ b/uniorg/eon/virta/v2/getcpotrans.xsjs @@ -0,0 +1,416 @@ +// Prod API Documentation Url: https://virta-api-admin.api-docs.io/ + +var ParDebug = false; +var Billingrunmode = "EMP"; +var DateFrom = ""; +var DateTo = ""; +var output = {}; +var outMessages = []; +var outErrorMessages = []; +var outMsg = {}; +var outStatus = "success"; +var myDebug = {}; + +var destn_pkg = "uniorg.eon.virta.v1"; +var dest_name = "VirtaAPI"; +var serviceVersion = '1.3'; + +var pageSize = 100; +/*if ($.request.parameters.get("pageSize")) { + pageSize = $.request.parameters.get("pageSize"); +}*/ + +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; +} + +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) { + 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; +} + +function getVirtaToken(ifUsername, ifPassword) { + + try + + { + + var dest = $.net.http.readDestination(destn_pkg, dest_name); + var client = new $.net.http.Client(); + var req = new $.web.WebRequest($.net.http.POST, "/auth"); + req.contentType = "application/json"; + + outMsg = {}; + outMsg.username = ifUsername; + outMsg.password = ifPassword; + + req.setBody(JSON.stringify(outMsg)); + + client.request(req, dest); + + var response = client.getResponse(); + + var b1iResp = response.body.asString(); + var retObj = JSON.parse(b1iResp); + + return retObj.token.toString(); + + } catch (e) { + + $.response.contentType = "text/plain"; + + $.response.setBody(e.message); + + } + +} + +function getCPOList() { + var mytoken = getVirtaToken("b1_api_user", "E3qq$§U,Q3hD#K2}"); + + var dest = $.net.http.readDestination(destn_pkg, dest_name); + var client = new $.net.http.Client(); + var req = new $.web.WebRequest($.net.http.GET, "/cpo/charges"); + req.contentType = "application/json"; + req.headers.set("Authorization", "Bearer" + mytoken); + + req.parameters.set("perPage", pageSize.toString()); + req.parameters.set("from", DateFrom); + req.parameters.set("to", DateTo); + var totalCount = 1; + myDebug.Calls = []; + for (var p = 1; p <= Math.ceil(totalCount / pageSize); ++p) { + var debugCall = {}; + debugCall.request = { "page": p }; + req.parameters.set("page", p.toString()); + client.request(req, dest); + + var response = client.getResponse(); + // get all the cookies and headers from the response + var he = []; + for(var c in response.headers) { + he.push(response.headers[c]); + } + debugCall.response = { "headers": he }; + var virtaBody = response.body.asString(); + totalCount = response.headers.get('X-Total-Count'); + var maxPageSize = Math.ceil(totalCount / pageSize); + debugCall.totalCount = totalCount; + debugCall.pagesCount = maxPageSize; + debugCall.link = response.headers.get('link'); + debugCall.responseLineCount = JSON.parse(virtaBody).length; + //debugCall.virtaBody = virtaBody; + // debugCall.header = response.headers.toSting(); + myDebug.Calls.push(debugCall); + writeObj2Table(virtaBody); + } + + //$.response.status = $.net.http.OK; + + //$.response.contentType = "application/json"; + // $.response.setBody(JSON.stringify(b1iResp)); + //$.response.setBody(JSON.stringify(virtaBody)); +} + +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 writeObj2Table(myOBJ) { + //var pdcontent = $.request.body.asString(); + // pdcontent = pdcontent.replace(/\"([^(\")"]+)\":/g,"$1:"); + var transOBJ = JSON.parse(myOBJ); + 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 = + "UPSERT \"VIRTAPORTAL\".\"CPO_CHARGES\" (CDRID,UUID,STATIONUUID,EMPSELLERID,STARTTIME,STOPTIME,DURATION,WATTHOUR,AMOUNT,CURRENCY,METHOD,CREATED,RFID,STATION,STATION_ID,STATION_NAME,LOCATION_ID,LOCATION_ADDRESS,LOCATION_CITY,LOCATION_TYPE,ROAMINGEMPID,EVCOID,ORGANIZATIONID,FULLEVSEID,EVSEID,PLUGTYPE,EMPSHARE,SIGNEDMETERVALUEBEGIN,SIGNEDMETERVALUEEND,FREECHARGING,CONNECTORID,METERSTART,METERSTOP,NOTES,MILEAGE,JSONRAW,UPDATE_TS,EICHRECHTTYPE) values (" + + "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?) WITH PRIMARY KEY"; + // "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.setBatchSize(transOBJ.length); + //$.trace.debug("prepareBatchStatement (" + transOBJ.length.toString() + " rows): " + query); + transOBJ.forEach(function(transRow) { + + if (!isNaN(parseInt(transRow.cdrId))) { + pstmt.setInteger(1, transRow.cdrId); + } else { + pstmt.setNull(1); + } + if (transRow.UUID){ + pstmt.setNString(2, transRow.UUID); + } else { + pstmt.setNull(2); + } + + if (!isNaN(parseInt(transRow.locationId))) { + pstmt.setInteger(3, transRow.locationId); + } else { + pstmt.setNull(3); + } + if (!isNaN(parseInt(transRow.empSellerId))) { + pstmt.setInteger(4, transRow.empSellerId); + } else { + pstmt.setNull(4); + } + + if (transRow.startTime) { + pstmt.setNString(5, transRow.startTime); + } else { + pstmt.setNull(5); + } + if (transRow.stopTime) { + pstmt.setNString(6, transRow.stopTime); + } else { + pstmt.setNull(6); + } + if (!isNaN(parseInt(transRow.duration))) { + pstmt.setInteger(7, transRow.duration); + } else { + pstmt.setNull(7); + } + if (!isNaN(parseInt(transRow.wattHour))) { + pstmt.setInteger(8, transRow.wattHour); + } else { + pstmt.setNull(8); + } + if (!isNaN(parseInt(transRow.amount))) { + pstmt.setInteger(9, transRow.amount); + } else { + pstmt.setNull(9); + } + + pstmt.setNString(10, transRow.currency); + pstmt.setNString(11, transRow.method); + if (transRow.created) { + pstmt.setNString(12, transRow.created); + } else { + pstmt.setNull(12); + } + if (transRow.rfid) { + pstmt.setNString(13, transRow.rfid); + } else { + pstmt.setNull(13); + } + if (transRow.station) { + pstmt.setNClob(14, JSON.stringify(transRow.station)); + pstmt.setNString(15, transRow.station.identity); + pstmt.setNString(16, transRow.station.name); + pstmt.setInteger(17, transRow.station.location.id); + pstmt.setNString(18, transRow.station.location.address); + pstmt.setNString(19, transRow.station.location.city); + pstmt.setNString(20, transRow.station.location.locationType); + } else { + pstmt.setNull(14); + pstmt.setNull(15); + pstmt.setNull(16); + pstmt.setNull(17); + pstmt.setNull(18); + pstmt.setNull(19); + pstmt.setNull(20); + } + + if (transRow.roamingEmpId) { + pstmt.setNString(21, transRow.roamingEmpId); + } else { + pstmt.setNull(21); + } + + pstmt.setNString(22, transRow.evcoId); + pstmt.setInteger(23, transRow.organizationId); + if (transRow.fullEvseId) { + pstmt.setNString(24, transRow.fullEvseId); + } else { + pstmt.setNull(24); + } + if (transRow.evseId) { + pstmt.setNString(25, transRow.evseId.toString()); + } else { + pstmt.setNull(25); + } + + pstmt.setNString(26, transRow.socketType); + if (!isNaN(parseInt(transRow.empShare))) { + pstmt.setInteger(27, transRow.empShare); + } else { + pstmt.setNull(27); + } + if (transRow.signedMeterValueBegin) { + pstmt.setNString(28, transRow.signedMeterValueBegin); + } else { + pstmt.setNull(28); + } + if (transRow.signedMeterValueEnd) { + pstmt.setNString(29, transRow.signedMeterValueEnd); + } else { + pstmt.setNull(29); + } + + + pstmt.setNString(30, transRow.freeCharging); + if (!isNaN(parseInt(transRow.connectorId))) { + pstmt.setInteger(31, transRow.connectorId); + } else { + pstmt.setNull(31); + } + + + + if (!isNaN(parseInt(transRow.meterStart))) { + pstmt.setInteger(32, transRow.meterStart); + } else { + pstmt.setNull(32); + } + if (!isNaN(parseInt(transRow.meterStop))) { + pstmt.setInteger(33, transRow.meterStop); + } else { + pstmt.setNull(33); + } + + pstmt.setNString(34, JSON.stringify(transRow.notes)); + + if (transRow.notes && transRow.notes.length > 0) { + pstmt.setInteger(35, transRow.notes[0].value); + } else { + pstmt.setNull(35); + } + + //pstmt.setNString(34, "1234"); + + pstmt.setNString(36, JSON.stringify(transRow)); + pstmt.setNString(37, transRow.eichrechtType); + pstmt.addBatch(); + }); + var batchResult = pstmt.executeBatch(); + //$.trace.debug("BatchUpsert Result: " + batchResult.toString()); + pstmt.close(); + conn.commit(); + conn.close(); + + outMsg = {}; + outMsg.method = "insertDB"; + outMsg.status = "success"; + outMessages.push(outMsg); + + } catch (e) { + $.trace.error("InsertDB ExceptionHandler: " + e.toString()); + 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; + } + } +} + +var content = ''; +if ($.request.body) { + content = $.request.body.asString(); +} +ParDebug = $.request.parameters.get('debug') && $.request.parameters.get('debug').toLowerCase() === "true"; + +if ($.request.parameters.get('Billingrunmode') > 0) { + Billingrunmode = $.request.parameters.get('Billingrunmode'); +} +if ($.request.parameters.get('DateFrom')) { + DateFrom = $.request.parameters.get('DateFrom'); +} +if ($.request.parameters.get('DateTo')) { + DateTo = $.request.parameters.get('DateTo'); +} +//doHTTPCallstartBillingrun("FEE","20180101","20180131"); +//getVirtaToken("b1_api_user","E3qq$§U,Q3hD#K2}"); +getCPOList(); +setOutputMessage(); \ No newline at end of file diff --git a/uniorg/eon/virta/v2/getemptrans.xsjs b/uniorg/eon/virta/v2/getemptrans.xsjs new file mode 100644 index 0000000..f6b620a --- /dev/null +++ b/uniorg/eon/virta/v2/getemptrans.xsjs @@ -0,0 +1,492 @@ +// Prod API Documentation Url: https://virta-api-admin.api-docs.io/ + +var ParDebug = false; +var Billingrunmode = "EMP"; +var DateFrom = ""; +var DateTo = ""; +var output = {}; +var outMessages = []; +var outErrorMessages = []; +var outMsg = {}; +var outStatus = "success"; +var myDebug = {}; + +var destn_pkg = "uniorg.eon.virta.v2"; +var dest_name = "VirtaAPI"; +var api_key = "qk2OLoXL3Y2Bqre9IQBdjaTqFUDvOJk888usKRiV"; +var serviceVersion = '1.8'; + +var pageSize = 100; +/*if ($.request.parameters.get("pageSize")) { + pageSize = $.request.parameters.get("pageSize"); +}*/ + +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; +} + +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) { + 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; +} + +function getVirtaToken(ifUsername, ifPassword) { + + try + + { + + var dest = $.net.http.readDestination(destn_pkg, dest_name); + var client = new $.net.http.Client(); + var req = new $.web.WebRequest($.net.http.POST, "/auth"); + req.headers.set("x-api-key", api_key); + req.contentType = "application/json"; + + outMsg = {}; + outMsg.username = ifUsername; + outMsg.password = ifPassword; + + req.setBody(JSON.stringify(outMsg)); + + client.request(req, dest); + + var response = client.getResponse(); + + var b1iResp = response.body.asString(); + var retObj = JSON.parse(b1iResp); + + return retObj.token.toString(); + + } catch (e) { + + $.response.contentType = "text/plain"; + + $.response.setBody(e.message); + + } + +} + +function sleep(seconds) { + var currentTime = new Date().getTime(); + + while (currentTime + seconds * 1000 >= new Date().getTime()) {} +} + +function getEMPList() { + var mytoken = getVirtaToken("b1_api_user", "E3qq$§U,Q3hD#K2}"); + + var dest = $.net.http.readDestination(destn_pkg, dest_name); + var client = new $.net.http.Client(); + var req = new $.web.WebRequest($.net.http.GET, "/emp/transactions"); + req.contentType = "application/json"; + req.headers.set("Authorization", "Bearer" + mytoken); + req.headers.set("x-api-key", api_key); + req.parameters.set("perPage", pageSize.toString()); + req.parameters.set("from", DateFrom); + req.parameters.set("to", DateTo); + var totalCount = 1; + myDebug.Calls = []; + for (var p = 1; p <= Math.ceil(totalCount / pageSize); ++p) { + var debugCall = {}; + debugCall.request = { + "page": p + }; + req.parameters.set("page", p.toString()); + client.request(req, dest); + + var response = client.getResponse(); + // get all the cookies and headers from the response + var he = []; + for (var c in response.headers) { + he.push(response.headers[c]); + } + debugCall.response = { + "headers": he + }; + if (response.status === 429) { + // HTTP Status 429 "Too many requests" + var retryAfter = parseInt(response.headers.get('retry-after'), 10) + 1; + if (!(retryAfter > 0)) { + retryAfter = 10; + } + debugCall.waitSeconds = retryAfter; + sleep(retryAfter); + --p; + myDebug.Calls.push(debugCall); + } else if (response.status >= 200 && response.status < 300) { + var virtaBody = response.body.asString(); + totalCount = response.headers.get('X-Total-Count'); + var maxPageSize = Math.ceil(totalCount / pageSize); + debugCall.totalCount = totalCount; + debugCall.pagesCount = maxPageSize; + debugCall.link = response.headers.get('link'); + debugCall.responseLineCount = JSON.parse(virtaBody).length; + myDebug.Calls.push(debugCall); + writeObj2Table(virtaBody); + + } else { + debugCall.responseStatus = response.status; + myDebug.Calls.push(debugCall); + break; + } + //debugCall.virtaBody = virtaBody; + // debugCall.header = response.headers.toSting(); + } + + //$.response.status = $.net.http.OK; + + //$.response.contentType = "application/json"; + // $.response.setBody(JSON.stringify(b1iResp)); + //$.response.setBody(JSON.stringify(virtaBody)); +} + +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 writeObj2Table(myOBJ) { + //var pdcontent = $.request.body.asString(); + // pdcontent = pdcontent.replace(/\"([^(\")"]+)\":/g,"$1:"); + var transOBJ = JSON.parse(myOBJ); + 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 = + "UPSERT \"VIRTAPORTAL\".\"EMP_TRANSACTIONS\" (UUID,CDRID,STATIONUUID,CUSTOMERID,STARTTIME,STOPTIME,DURATION,WATTHOUR,AMOUNT,CURRENCY,TRANSACTIONTYPE,CREATED,RFID,STATION,STATION_ID,STATION_NAME,LOCATION_ID,LOCATION_ADDRESS,LOCATION_CITY,LOCATION_TYPE,CUSTOMERGROUPID,CUSTOMERGROUPNAME,ORGANIZATIONID,PAYMENTTYPE,EVSEID,PLUGTYPE,EMPSHARE,SIGNEDMETERVALUEBEGIN,SIGNEDMETERVALUEEND,OPERATORPRICE,OPERATORCURRENCY,OPERATORID,FREECHARGING,EMPTARIFFID,EMPTARIFFNAME,FULLEVSEID,METERSTART,METERSTOP,NOTES,MILEAGE,JSONRAW,UPDATE_TS,EICHRECHTTYPE,KWHNETPRICE,MINUTENETPRICE,SESSIONNETPRICE,CPOOPERATORID,KWHGROSSPRICE,MINUTEGROSSPRICE,SESSIONGROSSPRICE,LOCATION_COUNTRY) values (" + + "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?,?,?,?,?,?,?,?,?) WITH PRIMARY KEY"; + // "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.setBatchSize(transOBJ.length); + //$.trace.debug("prepareBatchStatement (" + transOBJ.length.toString() + " rows): " + query); + transOBJ.forEach(function(transRow) { + pstmt.setNString(1, transRow.uuid); + /* + if (!isNaN(parseInt(transRow.cdrId))) { + pstmt.setInteger(2, transRow.cdrId); + } else { + pstmt.setNull(2); + } + */ + if (transRow.cdrId) { + pstmt.setNString(2, transRow.cdrId.toString()); + } else { + pstmt.setNull(2); + } + pstmt.setNString(3, transRow.stationUuid); + pstmt.setInteger(4, transRow.customerId); + pstmt.setNString(5, transRow.startTime); + pstmt.setNString(6, transRow.stopTime); + if (!isNaN(parseInt(transRow.duration))) { + pstmt.setInteger(7, transRow.duration); + } else { + pstmt.setNull(7); + } + if (!isNaN(parseInt(transRow.wattHour))) { + pstmt.setInteger(8, transRow.wattHour); + } else { + pstmt.setNull(8); + } + if (!isNaN(parseInt(transRow.amount))) { + pstmt.setInteger(9, transRow.amount); + } else { + pstmt.setNull(9); + } + + pstmt.setNString(10, transRow.currency); + pstmt.setNString(11, transRow.transactionType); + pstmt.setNString(12, transRow.created); + if (transRow.rfid) { + pstmt.setNString(13, transRow.rfid); + } else { + pstmt.setNull(13); + } + if (transRow.station) { + pstmt.setNClob(14, JSON.stringify(transRow.station)); + pstmt.setNString(15, transRow.station.identity); + if (transRow.station.name) { + pstmt.setNString(16, transRow.station.name); + } else { + pstmt.setNull(16); + } + if (typeof transRow.station.location === "undefined") { + pstmt.setNull(17); + pstmt.setNull(18); + pstmt.setNull(19); + pstmt.setNull(20); + pstmt.setNull(50); + } else { + pstmt.setInteger(17, transRow.station.location.id); + pstmt.setNString(18, transRow.station.location.address); + pstmt.setNString(19, transRow.station.location.city); + pstmt.setNString(20, transRow.station.location.locationType); + pstmt.setNString(50, transRow.station.location.country); + + } + } else { + pstmt.setNull(14); + pstmt.setNull(15); + pstmt.setNull(16); + pstmt.setNull(17); + pstmt.setNull(18); + pstmt.setNull(19); + pstmt.setNull(20); + pstmt.setNull(50); + } + + pstmt.setInteger(21, transRow.customerGroupId); + pstmt.setNString(22, transRow.customerGroupName); + pstmt.setInteger(23, transRow.organizationId); + pstmt.setNString(24, transRow.paymentType); + if (transRow.evseId) { + pstmt.setNString(25, transRow.evseId.toString()); + } else { + pstmt.setNull(25); + } + + if (transRow.plugType) { + pstmt.setNString(26, transRow.plugType); + } else { + pstmt.setNull(26); + } + if (!isNaN(parseInt(transRow.empShare))) { + pstmt.setInteger(27, transRow.empShare); + } else { + pstmt.setNull(27); + } + if (transRow.signedMeterValueBegin) { + pstmt.setNString(28, transRow.signedMeterValueBegin.substring(0, 50)); + } else { + pstmt.setNull(28); + } + if (transRow.signedMeterValueEnd) { + pstmt.setNString(29, transRow.signedMeterValueEnd.substring(0, 50)); + } else { + pstmt.setNull(29); + } + if (!isNaN(parseInt(transRow.operatorPrice))) { + pstmt.setInteger(30, transRow.operatorPrice); + } else { + pstmt.setNull(30); + } + pstmt.setNString(31, transRow.operatorCurrency); + if (!isNaN(parseInt(transRow.operatorId))) { + pstmt.setInteger(32, transRow.operatorId); + } else { + pstmt.setNull(32); + } + + pstmt.setNString(33, transRow.freeCharging); + if (!isNaN(parseInt(transRow.empTariffId))) { + pstmt.setInteger(34, transRow.empTariffId); + } else { + pstmt.setNull(34); + } + if (transRow.empTariffName) { + pstmt.setNString(35, transRow.empTariffName); + } else { + pstmt.setNull(35); + } + if (transRow.fullEvseId) { + pstmt.setNString(36, transRow.fullEvseId); + } else { + pstmt.setNull(36); + } + + if (!isNaN(parseInt(transRow.meterStart))) { + pstmt.setInteger(37, transRow.meterStart); + } else { + pstmt.setNull(37); + } + if (!isNaN(parseInt(transRow.meterStop))) { + pstmt.setInteger(38, transRow.meterStop); + } else { + pstmt.setNull(38); + } + + pstmt.setNString(39, JSON.stringify(transRow.notes)); + + if (transRow.notes && transRow.notes.length > 0) { + pstmt.setInteger(40, transRow.notes[0].value); + } else { + pstmt.setNull(40); + } + + //pstmt.setNString(34, "1234"); + + pstmt.setNString(41, JSON.stringify(transRow)); + pstmt.setNString(42, transRow.eichrechtType); + if (!isNaN(parseInt(transRow.empKwhNetPrice))) { + pstmt.setInteger(43, transRow.empKwhNetPrice); + } else { + pstmt.setNull(43); + } + + if (!isNaN(parseInt(transRow.empMinuteNetPrice))) { + pstmt.setInteger(44, transRow.empMinuteNetPrice); + } else { + pstmt.setNull(44); + } + + if (!isNaN(parseInt(transRow.empSessionNetPrice))) { + pstmt.setInteger(45, transRow.empSessionNetPrice); + } else { + pstmt.setNull(45); + } + if (transRow.cpoOperatorId) { + pstmt.setNString(46, transRow.cpoOperatorId); + } else { + pstmt.setNull(46); + } + if (!isNaN(parseInt(transRow.empKwhGrossPrice))) { + pstmt.setInteger(47, transRow.empKwhGrossPrice); + } else { + pstmt.setNull(47); + } + + if (!isNaN(parseInt(transRow.empMinuteGrossPrice))) { + pstmt.setInteger(48, transRow.empMinuteGrossPrice); + } else { + pstmt.setNull(48); + } + + if (!isNaN(parseInt(transRow.empSessionGrossPrice))) { + pstmt.setInteger(49, transRow.empSessionGrossPrice); + } else { + pstmt.setNull(49); + } + pstmt.addBatch(); + }); + var batchResult = pstmt.executeBatch(); + //$.trace.debug("BatchUpsert Result: " + batchResult.toString()); + pstmt.close(); + conn.commit(); + conn.close(); + + outMsg = {}; + outMsg.method = "insertDB"; + outMsg.status = "success"; + outMessages.push(outMsg); + + } catch (e) { + $.trace.error("InsertDB ExceptionHandler: " + e.toString()); + 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; + } + } +} + +var content = ''; +if ($.request.body) { + content = $.request.body.asString(); +} +ParDebug = $.request.parameters.get('debug') && $.request.parameters.get('debug').toLowerCase() === "true"; + +if ($.request.parameters.get('Billingrunmode') > 0) { + Billingrunmode = $.request.parameters.get('Billingrunmode'); +} +if ($.request.parameters.get('DateFrom')) { + DateFrom = $.request.parameters.get('DateFrom'); +} +if ($.request.parameters.get('DateTo')) { + DateTo = $.request.parameters.get('DateTo'); +} +//doHTTPCallstartBillingrun("FEE","20180101","20180131"); +//getVirtaToken("b1_api_user","E3qq$§U,Q3hD#K2}"); +getEMPList(); +setOutputMessage(); \ No newline at end of file diff --git a/uniorg/eon/virta/v2/getemptrans_old.xsjs b/uniorg/eon/virta/v2/getemptrans_old.xsjs new file mode 100644 index 0000000..37c8ba4 --- /dev/null +++ b/uniorg/eon/virta/v2/getemptrans_old.xsjs @@ -0,0 +1,454 @@ +// Prod API Documentation Url: https://virta-api-admin.api-docs.io/ + +var ParDebug = false; +var Billingrunmode = "EMP"; +var DateFrom = ""; +var DateTo = ""; +var output = {}; +var outMessages = []; +var outErrorMessages = []; +var outMsg = {}; +var outStatus = "success"; +var myDebug = {}; + +var destn_pkg = "uniorg.eon.virta.v2"; +var dest_name = "VirtaAPI"; +var api_key = "qk2OLoXL3Y2Bqre9IQBdjaTqFUDvOJk888usKRiV"; +var serviceVersion = '1.7'; + +var pageSize = 100; +/*if ($.request.parameters.get("pageSize")) { + pageSize = $.request.parameters.get("pageSize"); +}*/ + +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; +} + +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) { + 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; +} + +function getVirtaToken(ifUsername, ifPassword) { + + try + + { + + var dest = $.net.http.readDestination(destn_pkg, dest_name); + var client = new $.net.http.Client(); + var req = new $.web.WebRequest($.net.http.POST, "/auth"); + req.headers.set("x-api-key", api_key); + req.contentType = "application/json"; + + outMsg = {}; + outMsg.username = ifUsername; + outMsg.password = ifPassword; + + req.setBody(JSON.stringify(outMsg)); + + client.request(req, dest); + + var response = client.getResponse(); + + var b1iResp = response.body.asString(); + var retObj = JSON.parse(b1iResp); + + return retObj.token.toString(); + + } catch (e) { + + $.response.contentType = "text/plain"; + + $.response.setBody(e.message); + + } + +} + +function getEMPList() { + try { + var mytoken = getVirtaToken("b1_api_user", "E3qq$§U,Q3hD#K2}"); + + var dest = $.net.http.readDestination(destn_pkg, dest_name); + var client = new $.net.http.Client(); + var req = new $.web.WebRequest($.net.http.GET, "/emp/transactions"); + req.contentType = "application/json"; + req.headers.set("x-api-key", api_key); + req.headers.set("Authorization", "Bearer" + mytoken); + + req.parameters.set("perPage", pageSize.toString()); + req.parameters.set("from", DateFrom); + req.parameters.set("to", DateTo); + var totalCount = 1; + myDebug.Calls = []; + for (var p = 1; p <= Math.ceil(totalCount / pageSize); ++p) { + var debugCall = {}; + debugCall.request = { + "page": p + }; + req.parameters.set("page", p.toString()); + client.request(req, dest); + + var response = client.getResponse(); + // get all the cookies and headers from the response + var he = []; + for (var c in response.headers) { + he.push(response.headers[c]); + } + debugCall.response = { + "headers": he + }; + var virtaBody = response.body.asString(); + totalCount = response.headers.get('X-Total-Count'); + var maxPageSize = Math.ceil(totalCount / pageSize); + debugCall.totalCount = totalCount; + debugCall.pagesCount = maxPageSize; + debugCall.link = response.headers.get('link'); + debugCall.responseLineCount = JSON.parse(virtaBody).length; + debugCall.virtaBody = virtaBody; + debugCall.header = response.headers.toString(); + myDebug.Calls.push(debugCall); + writeObj2Table(virtaBody); + } + + } catch (e) { + exceptionHandler(e); + } + //$.response.status = $.net.http.OK; + + //$.response.contentType = "application/json"; + // $.response.setBody(JSON.stringify(b1iResp)); + //$.response.setBody(JSON.stringify(virtaBody)); +} + +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 writeObj2Table(myOBJ) { + //var pdcontent = $.request.body.asString(); + // pdcontent = pdcontent.replace(/\"([^(\")"]+)\":/g,"$1:"); + var transOBJ = JSON.parse(myOBJ); + 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 = + "UPSERT \"VIRTAPORTAL\".\"EMP_TRANSACTIONS\" (UUID,CDRID,STATIONUUID,CUSTOMERID,STARTTIME,STOPTIME,DURATION,WATTHOUR,AMOUNT,CURRENCY,TRANSACTIONTYPE,CREATED,RFID,STATION,STATION_ID,STATION_NAME,LOCATION_ID,LOCATION_ADDRESS,LOCATION_CITY,LOCATION_TYPE,CUSTOMERGROUPID,CUSTOMERGROUPNAME,ORGANIZATIONID,PAYMENTTYPE,EVSEID,PLUGTYPE,EMPSHARE,SIGNEDMETERVALUEBEGIN,SIGNEDMETERVALUEEND,OPERATORPRICE,OPERATORCURRENCY,OPERATORID,FREECHARGING,EMPTARIFFID,EMPTARIFFNAME,FULLEVSEID,METERSTART,METERSTOP,NOTES,MILEAGE,JSONRAW,UPDATE_TS,EICHRECHTTYPE,KWHNETPRICE,MINUTENETPRICE,SESSIONNETPRICE,CPOOPERATORID) values (" + + "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?,?,?,?,?) WITH PRIMARY KEY"; + // "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.setBatchSize(transOBJ.length); + //$.trace.debug("prepareBatchStatement (" + transOBJ.length.toString() + " rows): " + query); + transOBJ.forEach(function(transRow) { + pstmt.setNString(1, transRow.uuid); + /* + if (!isNaN(parseInt(transRow.cdrId))) { + pstmt.setInteger(2, transRow.cdrId); + } else { + pstmt.setNull(2); + } + */ + if (transRow.cdrId) { + pstmt.setNString(2, transRow.cdrId.toString()); + } else { + pstmt.setNull(2); + } + pstmt.setNString(3, transRow.stationUuid); + pstmt.setInteger(4, transRow.customerId); + pstmt.setNString(5, transRow.startTime); + pstmt.setNString(6, transRow.stopTime); + if (!isNaN(parseInt(transRow.duration))) { + pstmt.setInteger(7, transRow.duration); + } else { + pstmt.setNull(7); + } + if (!isNaN(parseInt(transRow.wattHour))) { + pstmt.setInteger(8, transRow.wattHour); + } else { + pstmt.setNull(8); + } + if (!isNaN(parseInt(transRow.amount))) { + pstmt.setInteger(9, transRow.amount); + } else { + pstmt.setNull(9); + } + + pstmt.setNString(10, transRow.currency); + pstmt.setNString(11, transRow.transactionType); + pstmt.setNString(12, transRow.created); + if (transRow.rfid) { + pstmt.setNString(13, transRow.rfid); + } else { + pstmt.setNull(13); + } + if (transRow.station) { + pstmt.setNClob(14, JSON.stringify(transRow.station)); + pstmt.setNString(15, transRow.station.identity); + if (transRow.station.name) { + pstmt.setNString(16, transRow.station.name); + } else { + pstmt.setNull(16); + } + if (typeof transRow.station.location === "undefined") { + pstmt.setNull(17); + pstmt.setNull(18); + pstmt.setNull(19); + pstmt.setNull(20); + } else { + pstmt.setInteger(17, transRow.station.location.id); + pstmt.setNString(18, transRow.station.location.address); + pstmt.setNString(19, transRow.station.location.city); + pstmt.setNString(20, transRow.station.location.locationType); + + } + } else { + pstmt.setNull(14); + pstmt.setNull(15); + pstmt.setNull(16); + pstmt.setNull(17); + pstmt.setNull(18); + pstmt.setNull(19); + pstmt.setNull(20); + } + + pstmt.setInteger(21, transRow.customerGroupId); + pstmt.setNString(22, transRow.customerGroupName); + pstmt.setInteger(23, transRow.organizationId); + pstmt.setNString(24, transRow.paymentType); + if (transRow.evseId) { + pstmt.setNString(25, transRow.evseId.toString()); + } else { + pstmt.setNull(25); + } + + pstmt.setNString(26, transRow.plugType); + if (!isNaN(parseInt(transRow.empShare))) { + pstmt.setInteger(27, transRow.empShare); + } else { + pstmt.setNull(27); + } + if (transRow.signedMeterValueBegin) { + pstmt.setNString(28, transRow.signedMeterValueBegin); + } else { + pstmt.setNull(28); + } + if (transRow.signedMeterValueEnd) { + pstmt.setNString(29, transRow.signedMeterValueEnd); + } else { + pstmt.setNull(29); + } + if (!isNaN(parseInt(transRow.operatorPrice))) { + pstmt.setInteger(30, transRow.operatorPrice); + } else { + pstmt.setNull(30); + } + pstmt.setNString(31, transRow.operatorCurrency); + if (!isNaN(parseInt(transRow.operatorId))) { + pstmt.setInteger(32, transRow.operatorId); + } else { + pstmt.setNull(32); + } + + pstmt.setNString(33, transRow.freeCharging); + if (!isNaN(parseInt(transRow.empTariffId))) { + pstmt.setInteger(34, transRow.empTariffId); + } else { + pstmt.setNull(34); + } + if (transRow.empTariffName) { + pstmt.setNString(35, transRow.empTariffName); + } else { + pstmt.setNull(35); + } + if (transRow.fullEvseId) { + pstmt.setNString(36, transRow.fullEvseId); + } else { + pstmt.setNull(36); + } + + if (!isNaN(parseInt(transRow.meterStart))) { + pstmt.setInteger(37, transRow.meterStart); + } else { + pstmt.setNull(37); + } + if (!isNaN(parseInt(transRow.meterStop))) { + pstmt.setInteger(38, transRow.meterStop); + } else { + pstmt.setNull(38); + } + + pstmt.setNString(39, JSON.stringify(transRow.notes)); + + if (transRow.notes && transRow.notes.length > 0) { + pstmt.setInteger(40, transRow.notes[0].value); + } else { + pstmt.setNull(40); + } + + //pstmt.setNString(34, "1234"); + + pstmt.setNString(41, JSON.stringify(transRow)); + pstmt.setNString(42, transRow.eichrechtType); + if (!isNaN(parseInt(transRow.empKwhNetPrice))) { + pstmt.setInteger(43, transRow.empKwhNetPrice); + } else { + pstmt.setNull(43); + } + + if (!isNaN(parseInt(transRow.empMinuteNetPrice))) { + pstmt.setInteger(44, transRow.empMinuteNetPrice); + } else { + pstmt.setNull(44); + } + + if (!isNaN(parseInt(transRow.empSessionNetPrice))) { + pstmt.setInteger(45, transRow.empSessionNetPrice); + } else { + pstmt.setNull(45); + } + if (transRow.cpoOperatorId) { + pstmt.setNString(46, transRow.cpoOperatorId); + } else { + pstmt.setNull(46); + } + + pstmt.addBatch(); + }); + var batchResult = pstmt.executeBatch(); + //$.trace.debug("BatchUpsert Result: " + batchResult.toString()); + pstmt.close(); + conn.commit(); + conn.close(); + + outMsg = {}; + outMsg.method = "insertDB"; + outMsg.status = "success"; + outMessages.push(outMsg); + + } catch (e) { + $.trace.error("InsertDB ExceptionHandler: " + e.toString()); + 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; + } + } +} +try{ +var content = ''; +if ($.request.body) { + content = $.request.body.asString(); +} +ParDebug = $.request.parameters.get('debug') && $.request.parameters.get('debug').toLowerCase() === "true"; + +if ($.request.parameters.get('Billingrunmode') > 0) { + Billingrunmode = $.request.parameters.get('Billingrunmode'); +} +if ($.request.parameters.get('DateFrom')) { + DateFrom = $.request.parameters.get('DateFrom'); +} +if ($.request.parameters.get('DateTo')) { + DateTo = $.request.parameters.get('DateTo'); +} +//doHTTPCallstartBillingrun("FEE","20180101","20180131"); +//getVirtaToken("b1_api_user","E3qq$§U,Q3hD#K2}"); +getEMPList(); +setOutputMessage(); + } catch (e) { + exceptionHandler(e); +} \ No newline at end of file diff --git a/uniorg/eon/virta/v2/reloadfields.xsjs b/uniorg/eon/virta/v2/reloadfields.xsjs new file mode 100644 index 0000000..a68d725 --- /dev/null +++ b/uniorg/eon/virta/v2/reloadfields.xsjs @@ -0,0 +1,684 @@ +var output = {}; +var outMessages = []; +var outMsg = {}; +var outStatus = "success"; +var myDebug = {}; + +var serviceName = "eon.virta.v2.reloadfields.xsjs"; +var serviceVersion = '1.4'; + +var startTS = new Date(); + +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; +} + +function setOutputMessage() { + output.status = outStatus; + output.durationSeconds = Math.floor((new Date() - startTS) / 1000); + 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.indexOf(outMsg) === -1) { + outMsg.status = "canceled"; + 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; +} + +function checkParams() { + var isValid = true; + var missingParams = []; + try { + if (!$.request.parameters.get("field")) { + missingParams.push("field"); + isValid = false; + } + if (!$.request.parameters.get("datefrom")) { + missingParams.push("datefrom"); + isValid = false; + } + if (!$.request.parameters.get("dateto")) { + missingParams.push("dateto"); + isValid = false; + } + } catch (e) { + exceptionHandler(e); + isValid = false; + } + if (!isValid) { + outMsg = {}; + outMsg.method = "checkParams"; + outMsg.status = "error"; + outStatus = "error"; + outMsg.message = "missing mandatory parameters: " + missingParams.join(); + outMessages.push(outMsg); + $.response.status = $.net.http.BAD_REQUEST; + } + return isValid; +} + +function getCpoTransactionData() { + var datefrom = $.request.parameters.get("datefrom"); + var dateto = $.request.parameters.get("dateto"); + var limit = 1000; + var offset = 0; + outMsg = {}; + outMsg.method = "getCpoTransactionData"; + outMsg.status = "error"; + var resultData = {}; + var resultSet = []; + var conn = $.hdb.getConnection(); + do { + if (debugLevel > 1) { + outMsg.limit = limit; + outMsg.offset = offset; + } + var queryResult = conn.executeQuery( + "select CDRID, JSONRAW \ + from VIRTAPORTAL.CPO_CHARGES \ + where STARTTIME >= ? and STARTTIME <= ? and JSONRAW is not null \ + order by CDRID \ + limit ? offset ?", + datefrom, dateto, limit, offset); + var iterator = queryResult.getIterator(); + while (iterator.next()) { + resultSet.push(JSON.parse(JSON.stringify(iterator.value()))); + } + offset += limit; + } while (queryResult.length === limit) + conn.close(); + resultData = { + count: resultSet.length, + rows: resultSet + }; + outMsg.status = "success"; + outMsg.result = resultData; + if (debugLevel > 0 || outMsg.status === "error") { + outMessages.push(outMsg); + } + return resultData; +} + +function updateCpoValidationResults() { + var cpoTransData = getCpoTransactionData(); + var completeData = []; + if (cpoTransData.count > 0) { + completeData = cpoTransData.rows.map(function(row) { + var parsedData = {}; + var valid = true; + try { + parsedData = JSON.parse(row.JSONRAW); + if (!parsedData.hasOwnProperty('businessValidationResult') || !parsedData.hasOwnProperty('techValidationResult') || !parsedData.hasOwnProperty('notBillableReason')) { + valid = false; + } + } catch (e) { + valid = false; + } + return { + CDRID: row.CDRID, + BUSINESSVALIDATIONRESULT: parsedData.businessValidationResult, + TECHVALIDATIONRESULT: parsedData.techValidationResult, + NOTBILLABLEREASON: parsedData.notBillableReason, + valid: valid + }; + }); + } + if (completeData.some(function(row) { + return row.valid; + })) { + var paramList = completeData.filter(function(row) { + return row.valid; + }).map(function(row) { + return [row.BUSINESSVALIDATIONRESULT, row.TECHVALIDATIONRESULT, row.NOTBILLABLEREASON, row.CDRID]; + }); + outMsg = {}; + outMsg.method = "updateData"; + outMsg.status = "error"; + var resultData = {}; + var conn = $.hdb.getConnection(); + var statement = "update VIRTAPORTAL.CPO_CHARGES \ +set BUSINESSVALIDATIONRESULT=?,TECHVALIDATIONRESULT=?,NOTBILLABLEREASON=? \ +where CDRID = ?"; + if (debugLevel > 1) { + outMsg.statement = statement; + outMsg.paramList = paramList; + } + var affectedRows = conn.executeUpdate(statement, paramList); + conn.commit(); + conn.close(); + resultData = { + count: affectedRows.reduce(function(cur, acc) { + return cur + acc; + }, 0) + }; + outMsg.status = "success"; + outMsg.result = resultData; + outMessages.push(outMsg); + } +} + +function getEmpTransactionData() { + var datefrom = $.request.parameters.get("datefrom"); + var dateto = $.request.parameters.get("dateto"); + var limit = 1000; + var offset = 0; + outMsg = {}; + outMsg.method = "getEmpTransactionData"; + outMsg.status = "error"; + var resultData = {}; + var resultSet = []; + var conn = $.hdb.getConnection(); + do { + if (debugLevel > 1) { + outMsg.limit = limit; + outMsg.offset = offset; + } + var queryResult = conn.executeQuery( + "select UUID, JSONRAW \ + from VIRTAPORTAL.EMP_TRANSACTIONS \ + where STARTTIME >= ? and STARTTIME <= ? and JSONRAW is not null \ + order by UUID \ + limit ? offset ?", + datefrom, dateto, limit, offset); + var iterator = queryResult.getIterator(); + while (iterator.next()) { + resultSet.push(JSON.parse(JSON.stringify(iterator.value()))); + } + offset += limit; + } while (queryResult.length === limit) + conn.close(); + resultData = { + count: resultSet.length, + rows: resultSet + }; + outMsg.status = "success"; + outMsg.result = resultData; + if (debugLevel > 0 || outMsg.status === "error") { + outMessages.push(outMsg); + } + return resultData; +} + +function updateEmpFreeMinutes() { + var empTransData = getEmpTransactionData(); + var completeData = []; + if (empTransData.count > 0) { + completeData = empTransData.rows.map(function(row) { + var parsedData = {}; + var valid = true; + try { + parsedData = JSON.parse(row.JSONRAW); + if (!parsedData.hasOwnProperty('empFreeMinutes')) { + valid = false; + } + } catch (e) { + valid = false; + } + return { + UUID: row.UUID, + FREEMINUTES: parsedData.empFreeMinutes, + valid: valid + }; + }); + } + // myDebug.completeData = completeData; + /*var updateData = completeData.filter(function(row) { + return row.valid; + }).map(function(row) { + return { + UUID: row.UUID, + FREEMINUTES: row.parsedData.empFreeMinutes + }; + });*/ + //myDebug.updateData = updateData; + if (completeData.some(function(row) { + return row.valid; + })) { + var paramList = completeData.filter(function(row) { + return row.valid; + }).map(function(row) { + return [row.FREEMINUTES, row.UUID]; + }); + outMsg = {}; + outMsg.method = "updateData"; + outMsg.status = "error"; + var resultData = {}; + var conn = $.hdb.getConnection(); + var statement = "update VIRTAPORTAL.EMP_TRANSACTIONS \ +set FREEMINUTES = ? \ +where UUID = ?"; + if (debugLevel > 1) { + outMsg.statement = statement; + outMsg.paramList = paramList; + } + var affectedRows = conn.executeUpdate(statement, paramList); + conn.commit(); + conn.close(); + resultData = { + count: affectedRows.reduce(function(cur, acc) { + return cur + acc; + }, 0) + }; + outMsg.status = "success"; + outMsg.result = resultData; + outMessages.push(outMsg); + } +} + +function updateEmpValidationResults() { + var empTransData = getEmpTransactionData(); + var completeData = []; + if (empTransData.count > 0) { + completeData = empTransData.rows.map(function(row) { + var parsedData = {}; + var valid = true; + try { + parsedData = JSON.parse(row.JSONRAW); + if (!parsedData.hasOwnProperty('businessValidationResult') || !parsedData.hasOwnProperty('techValidationResult') || !parsedData.hasOwnProperty('notBillableReason')) { + valid = false; + } + } catch (e) { + valid = false; + } + return { + UUID: row.UUID, + BUSINESSVALIDATIONRESULT: parsedData.businessValidationResult, + TECHVALIDATIONRESULT: parsedData.techValidationResult, + NOTBILLABLEREASON: parsedData.notBillableReason, + valid: valid + }; + }); + } + if (completeData.some(function(row) { + return row.valid; + })) { + var paramList = completeData.filter(function(row) { + return row.valid; + }).map(function(row) { + return [row.BUSINESSVALIDATIONRESULT, row.TECHVALIDATIONRESULT, row.NOTBILLABLEREASON, row.UUID]; + }); + outMsg = {}; + outMsg.method = "updateData"; + outMsg.status = "error"; + var resultData = {}; + var conn = $.hdb.getConnection(); + var statement = "update VIRTAPORTAL.EMP_TRANSACTIONS \ +set BUSINESSVALIDATIONRESULT=?,TECHVALIDATIONRESULT=?,NOTBILLABLEREASON=? \ +where UUID = ?"; + if (debugLevel > 1) { + outMsg.statement = statement; + outMsg.paramList = paramList; + } + var affectedRows = conn.executeUpdate(statement, paramList); + conn.commit(); + conn.close(); + resultData = { + count: affectedRows.reduce(function(cur, acc) { + return cur + acc; + }, 0) + }; + outMsg.status = "success"; + outMsg.result = resultData; + outMessages.push(outMsg); + } +} + +function checkEmpFreePeriod() { + var empTransData = getEmpTransactionData(); + var completeData = []; + if (empTransData.count > 0) { + completeData = empTransData.rows.map(function(row) { + var parsedData = {}; + var valid = true; + try { + parsedData = JSON.parse(row.JSONRAW); + if (!parsedData.hasOwnProperty('empFreePeriod')) { + valid = false; + } + } catch (e) { + valid = false; + } + return { + UUID: row.UUID, + FREEPERIOD: parsedData.empFreePeriod, + valid: valid + }; + }); + } + // myDebug.completeData = completeData; + /*var updateData = completeData.filter(function(row) { + return row.valid; + }).map(function(row) { + return { + UUID: row.UUID, + FREEMINUTES: row.parsedData.empFreeMinutes + }; + });*/ + //myDebug.updateData = updateData; + var foundData = completeData.filter(function(row) { + return row.valid && row.FREEPERIOD !== null; + }).map(function(row) { + return { + FreePeriod: row.FREEPERIOD, + UUID: row.UUID + }; + }); + outMsg = {}; + outMsg.method = "updateData"; + outMsg.foundData = foundData; + outMsg.status = "success"; + outMessages.push(outMsg); +} + +function getEoperateTransactionData() { + var datefrom = $.request.parameters.get("datefrom"); + var dateto = $.request.parameters.get("dateto"); + var limit = 1000; + var offset = 0; + outMsg = {}; + outMsg.method = "getEoperateTransactionData"; + outMsg.status = "error"; + var resultData = {}; + var resultSet = []; + var conn = $.hdb.getConnection(); + do { + if (debugLevel > 1) { + outMsg.limit = limit; + outMsg.offset = offset; + } + var queryResult = conn.executeQuery( + "select BDR_ID, JSONRAW \ + from EOPERATE.CHARGEDATA \ + where CHARGE_DATA_BEGIN_UTC >= ? and CHARGE_DATA_BEGIN_UTC <= ? and JSONRAW is not null \ + order by BDR_ID \ + limit ? offset ?", + datefrom, dateto, limit, offset); + var iterator = queryResult.getIterator(); + while (iterator.next()) { + resultSet.push(JSON.parse(JSON.stringify(iterator.value()))); + } + offset += limit; + } while (queryResult.length === limit) + conn.close(); + resultData = { + count: resultSet.length, + rows: resultSet + }; + outMsg.status = "success"; + outMsg.result = resultData; + if (debugLevel > 0 || outMsg.status === "error") { + outMessages.push(outMsg); + } + return resultData; +} + +function roundTo(n, digits) { + var negative = false; + if (digits === undefined) { + digits = 0; + } + if (n < 0) { + negative = true; + n = n * -1; + } + var multiplicator = Math.pow(10, digits); + n = parseFloat((n * multiplicator).toFixed(11)); + n = (Math.round(n) / multiplicator).toFixed(digits); + if (negative) { + n = (n * -1).toFixed(digits); + } + return Number(n); +} + +function updateEoperatePricingItems() { + var transData = getEoperateTransactionData(); + + var completeData = []; + + if (transData.count > 0) { + completeData = transData.rows.map(function(row) { + var parsedData = {}; + var valid = false; + var pricingItemsArray = []; + + try { + parsedData = JSON.parse(row.JSONRAW)[0]; + + if (parsedData.hasOwnProperty('PRICING') && parsedData.PRICING.hasOwnProperty('ITEMS')) { + valid = true; + + pricingItemsArray = parsedData.PRICING.ITEMS.filter(function(pricingItem) { + return pricingItem.TYPE === "CUS"; + }); + } + + } catch (e) { + valid = false; + } + return { + BDR_ID: row.BDR_ID, + ITEMS: pricingItemsArray, + valid: valid + }; + }); + } + + myDebug.completeData = completeData; + + if (completeData.some(function(row) { + return row.valid; + })) { + var paramList = completeData.filter(function(row) { + return row.valid; + }).map(function(row) { + /* + "TYPE": "CUS", + "UNIT": "KWH", + "UNIT_PRICE": "0.74710000", + "QUANTITY": "1.97050000", + "NET_AMOUNT": "1.47207941", + "CURRENCY": "EUR" + + */ + var params = []; + + for (let ii = 0; ii < 4; ii++) { + var item = row.ITEMS[ii]; + + if (item) { + params.push(item.TYPE, item.UNIT, roundTo(item.UNIT_PRICE, 4), roundTo(item.QUANTITY, 3), roundTo(item.NET_AMOUNT, 3), item.CURRENCY); + } else { + params.push(null, null, null, null, null, null); + } + } + params.push(row.BDR_ID); + + return params; + }); + + // myDebug.paramList = paramList; + + outMsg = {}; + outMsg.method = "updateData"; + outMsg.status = "error"; + var resultData = {}; + var conn = $.hdb.getConnection(); + + var statement = + "UPDATE EOPERATE.CHARGEDATA SET PRICING_ITEMS_1_TYPE= ?,PRICING_ITEMS_1_UNIT= ?,PRICING_ITEMS_1_UNIT_PRICE= ?,PRICING_ITEMS_1_QUANTITY= ?,PRICING_ITEMS_1_NET_AMOUNT= ?,PRICING_ITEMS_1_CURRENCY= ?,PRICING_ITEMS_2_TYPE= ?,PRICING_ITEMS_2_UNIT= ?,PRICING_ITEMS_2_UNIT_PRICE= ?,PRICING_ITEMS_2_QUANTITY= ?,PRICING_ITEMS_2_NET_AMOUNT= ?,PRICING_ITEMS_2_CURRENCY= ?,PRICING_ITEMS_3_TYPE= ?,PRICING_ITEMS_3_UNIT= ?,PRICING_ITEMS_3_UNIT_PRICE= ?,PRICING_ITEMS_3_QUANTITY= ?,PRICING_ITEMS_3_NET_AMOUNT= ?,PRICING_ITEMS_3_CURRENCY= ?,PRICING_ITEMS_4_TYPE= ?,PRICING_ITEMS_4_UNIT= ?,PRICING_ITEMS_4_UNIT_PRICE= ?,PRICING_ITEMS_4_QUANTITY= ?,PRICING_ITEMS_4_NET_AMOUNT= ?,PRICING_ITEMS_4_CURRENCY= ? where BDR_ID = ?"; + + if (debugLevel > 1) { + outMsg.statement = statement; + outMsg.paramList = paramList; + } + + var affectedRows = conn.executeUpdate(statement, paramList); + conn.commit(); + conn.close(); + + resultData = { + count: affectedRows.reduce(function(cur, acc) { + return cur + acc; + }, 0) + }; + + outMsg.status = "success"; + outMsg.result = resultData; + outMessages.push(outMsg); + + } +} + +function updateEoperateValidationResults() { + var transData = getEoperateTransactionData(); + + var completeData = []; + + if (transData.count > 0) { + completeData = transData.rows.map(function(row) { + var parsedData = {}; + var valid = true; + try { + parsedData = JSON.parse(row.JSONRAW)[0]; + if (!parsedData.hasOwnProperty('BUSINESS_VALIDATION_RESULT') || !parsedData.hasOwnProperty('TECH_VALIDATION_RESULT') || !parsedData.hasOwnProperty('NOT_BILLABLE_REASON')) { + valid = false; + } + } catch (e) { + valid = false; + } + return { + BDR_ID: row.BDR_ID, + BUSINESSVALIDATIONRESULT: parsedData.BUSINESS_VALIDATION_RESULT, + TECHVALIDATIONRESULT: parsedData.TECH_VALIDATION_RESULT, + NOTBILLABLEREASON: parsedData.NOT_BILLABLE_REASON, + valid: valid + }; + }); + } + + myDebug.completeData = completeData; + + if (completeData.some(function(row) { + return row.valid; + })) { + var paramList = completeData.filter(function(row) { + return row.valid; + }).map(function(row) { + return [row.BUSINESSVALIDATIONRESULT, row.TECHVALIDATIONRESULT, row.NOTBILLABLEREASON, row.BDR_ID]; + }); + + // myDebug.paramList = paramList; + + outMsg = {}; + outMsg.method = "updateData"; + outMsg.status = "error"; + var resultData = {}; + var conn = $.hdb.getConnection(); + + var statement = + "UPDATE EOPERATE.CHARGEDATA SET BUSINESSVALIDATIONRESULT=?,TECHVALIDATIONRESULT=?,NOTBILLABLEREASON=? where BDR_ID = ?"; + + if (debugLevel > 1) { + outMsg.statement = statement; + outMsg.paramList = paramList; + } + + var affectedRows = conn.executeUpdate(statement, paramList); + conn.commit(); + conn.close(); + + resultData = { + count: affectedRows.reduce(function(cur, acc) { + return cur + acc; + }, 0) + }; + + outMsg.status = "success"; + outMsg.result = resultData; + outMessages.push(outMsg); + + } +} + +function chooseMode(field) { + switch (field) { + case 'empfreeminutes': + updateEmpFreeMinutes(); + break; + case 'empfreeperiod': + checkEmpFreePeriod(); + break; + case 'empValidationResults': + updateEmpValidationResults(); + break; + case 'cpoValidationResults': + updateCpoValidationResults(); + break; + case 'updateEoperatePricingItems': + updateEoperatePricingItems(); + break; + case 'eoperateValidationResults': + updateEoperateValidationResults(); + break; + default: + exceptionHandler(new Error("unsupported mode: field=" + field)); + } +} + +try { + if (checkParams()) { + chooseMode($.request.parameters.get("field")); + + } +} catch (e) { + exceptionHandler(e); +} +setOutputMessage(); \ No newline at end of file diff --git a/uniorg/eon/virta/v2/setcpotrans.xsjs b/uniorg/eon/virta/v2/setcpotrans.xsjs new file mode 100644 index 0000000..ec743a6 --- /dev/null +++ b/uniorg/eon/virta/v2/setcpotrans.xsjs @@ -0,0 +1,439 @@ +var ParDebug = false; +var output = {}; +var outMessages = []; +var outErrorMessages = []; +var outMsg = {}; +var outStatus = "success"; +var myDebug = {}; + +var serviceVersion = '2.8'; +// 4.5.2023 Validation Felder hinzugefügt +// 22.01.2024 Anpassung zulässige null werte in location TS +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; +} + +function checkCDRID(myCDRID) { + var exists = false; + var conn = $.db.getConnection(); + var pstmt; + var query = "select \"CDRID\" from \"VIRTAPORTAL\".\"CPO_CHARGES\" where CDRID = ?"; + pstmt = conn.prepareStatement(query); + pstmt.setNString(1, myCDRID); + var rs = pstmt.executeQuery(); + if (rs.next()) { + exists = true; + } + rs.close(); + pstmt.close(); + conn.close(); + return exists; +} + +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) { + 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; +} + +function writeObj2Table(transOBJ) { + //var pdcontent = $.request.body.asString(); + // pdcontent = pdcontent.replace(/\"([^(\")"]+)\":/g,"$1:"); + var conn = $.db.getConnection(); + var pstmt; + var query; + var vals = {}; + var data = []; + var isUpdateMode = false; + // var query2; + // var output = {results: [] }; + //var mynextval = getnextval(); + //myDebug.mynextval = mynextval; + try { + var myCDRID = transOBJ[0].cdrId.toString(); + isUpdateMode = checkCDRID(myCDRID); + if (isUpdateMode) { + // "UPDATE \"EOPERATE\".\"CHARGEDATA\" SET BDR_ID = ?,EMAID =? ,UNIQUE_ID = ?, CREATION_DATE_UTC = ?,CHARGEPOINT_ID= ?,CHARGEPOINT_TYPE= ?,CHARGEPOINT_METER_ID= ?,CHARGEPOINT_ADDRESS_COUNTRY= ?,CHARGEPOINT_ADDRESS_POSTALCODE= ?,CHARGEPOINT_ADDRESS_CITY= ?,CHARGEPOINT_ADDRESS_STREET= ?,CHARGEPOINT_OPERATOR_ID= ?,CHARGEPOINT_OPERATOR_NAME= ?,EMOBILITY_PROVIDER_ID= ?,EMOBILITY_PROVIDER_NAME= ?,CHARGE_DATA_AUTHORIZATION_TYPE= ?,CHARGE_DATA_CONSUMPTION_KWH= ?,CHARGE_DATA_BEGIN_UTC= ?,CHARGE_DATA_END_UTC= ?,CHARGE_DATA_TIME_ZONE= ?,CHARGE_DATA_EKA_STATUS= ?,PRICING_ITEMS_1_TYPE= ?,PRICING_ITEMS_1_UNIT= ?,PRICING_ITEMS_1_UNIT_PRICE= ?,PRICING_ITEMS_1_QUANTITY= ?,PRICING_ITEMS_1_NET_AMOUNT= ?,PRICING_ITEMS_1_CURRENCY= ?,PRICING_ITEMS_2_TYPE= ?,PRICING_ITEMS_2_UNIT= ?,PRICING_ITEMS_2_UNIT_PRICE= ?,PRICING_ITEMS_2_QUANTITY= ?,PRICING_ITEMS_2_NET_AMOUNT= ?,PRICING_ITEMS_2_CURRENCY= ?,PRICING_ITEMS_3_TYPE= ?,PRICING_ITEMS_3_UNIT= ?,PRICING_ITEMS_3_UNIT_PRICE= ?,PRICING_ITEMS_3_QUANTITY= ?,PRICING_ITEMS_3_NET_AMOUNT= ?,PRICING_ITEMS_3_CURRENCY= ?,PRICING_ITEMS_4_TYPE= ?,PRICING_ITEMS_4_UNIT= ?,PRICING_ITEMS_4_UNIT_PRICE= ?,PRICING_ITEMS_4_QUANTITY= ?,PRICING_ITEMS_4_NET_AMOUNT= ?,PRICING_ITEMS_4_CURRENCY= ?,SUBSCRIPTION_ID= ?,JSONRAW= ?,UPDATE_TS= CURRENT_TIMESTAMP,UPDATE_USER= CURRENT_USER)"; + query = + "UPDATE \"VIRTAPORTAL\".\"CPO_CHARGES\" SET CDRID=?,UUID=?,STATIONUUID=?,EMPSELLERID=?,STARTTIME=?,STOPTIME=?,DURATION=?,WATTHOUR=?,AMOUNT=?,CURRENCY=?,METHOD=?,CREATED=?,RFID=?,STATION=?,STATION_ID=?,STATION_NAME=?,LOCATION_ID=?,LOCATION_ADDRESS=?,LOCATION_CITY=?,LOCATION_TYPE=?,ROAMINGEMPID=?,EVCOID=?,ORGANIZATIONID=?,FULLEVSEID=?,EVSEID=?,PLUGTYPE=?,EMPSHARE=?,SIGNEDMETERVALUEBEGIN=?,SIGNEDMETERVALUEEND=?,FREECHARGING=?,CONNECTORID=?,METERSTART=?,METERSTOP=?,NOTES=?,MILEAGE=?,JSONRAW=?,EICHRECHTTYPE=?,UPDATE_TS=CURRENT_TIMESTAMP,UPDATE_USER=CURRENT_USER,BUSINESSVALIDATIONRESULT=?,TECHVALIDATIONRESULT=?,NOTBILLABLEREASON=? where CDRID = ?"; + outMsg.method = "Update Data CDRID: " + myCDRID; + } else { + query = + "INSERT INTO \"VIRTAPORTAL\".\"CPO_CHARGES\" (CDRID,UUID,STATIONUUID,EMPSELLERID,STARTTIME,STOPTIME,DURATION,WATTHOUR,AMOUNT,CURRENCY,METHOD,CREATED,RFID,STATION,STATION_ID,STATION_NAME,LOCATION_ID,LOCATION_ADDRESS,LOCATION_CITY,LOCATION_TYPE,ROAMINGEMPID,EVCOID,ORGANIZATIONID,FULLEVSEID,EVSEID,PLUGTYPE,EMPSHARE,SIGNEDMETERVALUEBEGIN,SIGNEDMETERVALUEEND,FREECHARGING,CONNECTORID,METERSTART,METERSTOP,NOTES,MILEAGE,JSONRAW,EICHRECHTTYPE,UPDATE_TS,UPDATE_USER,BUSINESSVALIDATIONRESULT,TECHVALIDATIONRESULT,NOTBILLABLEREASON) values (" + + "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP, CURRENT_USER,?,?,?)"; + outMsg.method = "Insert Data CDRID: " + myCDRID; + } + myDebug.query = query; + // 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 = + // "UPSERT \"VIRTAPORTAL\".\"CPO_CHARGES\" (CDRID,UUID,STATIONUUID,EMPSELLERID,STARTTIME,STOPTIME,DURATION,WATTHOUR,AMOUNT,CURRENCY,METHOD,CREATED,RFID,STATION,STATION_ID,STATION_NAME,LOCATION_ID,LOCATION_ADDRESS,LOCATION_CITY,LOCATION_TYPE,ROAMINGEMPID,EVCOID,ORGANIZATIONID,FULLEVSEID,EVSEID,PLUGTYPE,EMPSHARE,SIGNEDMETERVALUEBEGIN,SIGNEDMETERVALUEEND,FREECHARGING,CONNECTORID,METERSTART,METERSTOP,NOTES,MILEAGE,JSONRAW,EICHRECHTTYPE,UPDATE_TS,UPDATE_USER) values (" + + // "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP, CURRENT_USER) WITH PRIMARY KEY"; + // "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.setBatchSize(transOBJ.length); + //$.trace.debug("prepareBatchStatement (" + transOBJ.length.toString() + " rows): " + query); + transOBJ.forEach(function(transRow) { + + if (!isNaN(parseInt(transRow.cdrId))) { + pstmt.setInteger(1, transRow.cdrId); + } else { + pstmt.setNull(1); + } + if (transRow.UUID){ + pstmt.setNString(2, transRow.UUID); + } else { + pstmt.setNull(2); + } + + if (!isNaN(parseInt(transRow.locationId))) { + pstmt.setInteger(3, transRow.locationId); + } else { + pstmt.setNull(3); + } + if (!isNaN(parseInt(transRow.empSellerId))) { + pstmt.setInteger(4, transRow.empSellerId); + } else { + pstmt.setNull(4); + } + + if (transRow.startTime) { + pstmt.setNString(5, transRow.startTime); + } else { + pstmt.setNull(5); + } + if (transRow.stopTime) { + pstmt.setNString(6, transRow.stopTime); + } else { + pstmt.setNull(6); + } + if (!isNaN(parseInt(transRow.duration))) { + pstmt.setInteger(7, transRow.duration); + } else { + pstmt.setNull(7); + } + if (!isNaN(parseInt(transRow.wattHour))) { + pstmt.setInteger(8, transRow.wattHour); + } else { + pstmt.setNull(8); + } + if (!isNaN(parseInt(transRow.amount))) { + pstmt.setInteger(9, transRow.amount); + } else { + pstmt.setNull(9); + } + + pstmt.setNString(10, transRow.currency); + pstmt.setNString(11, transRow.method); + if (transRow.created) { + pstmt.setNString(12, transRow.created); + } else { + pstmt.setNull(12); + } + if (transRow.rfid) { + pstmt.setNString(13, transRow.rfid); + } else { + pstmt.setNull(13); + } + if (transRow.station) { + pstmt.setNClob(14, JSON.stringify(transRow.station)); + if(transRow.station.identity){ + pstmt.setNString(15, transRow.station.identity); + } else { + pstmt.setNull(15); + } + if(transRow.station.name){ + pstmt.setNString(16, transRow.station.name); + } else { + pstmt.setNull(16); + } + if (!isNaN(parseInt(transRow.station.location.id))) { + pstmt.setInteger(17, transRow.station.location.id); + } else { + pstmt.setNull(17); + } + if(transRow.station.location.address){ + pstmt.setNString(18, transRow.station.location.address); + } else { + pstmt.setNull(18); + } + if(transRow.station.location.city){ + pstmt.setNString(19, transRow.station.location.city); + } else { + pstmt.setNull(19); + } + if (transRow.station.location.locationType){ + pstmt.setNString(20, transRow.station.location.locationType); + } else { + pstmt.setNull(20); + } + } else { + pstmt.setNull(14); + pstmt.setNull(15); + pstmt.setNull(16); + pstmt.setNull(17); + pstmt.setNull(18); + pstmt.setNull(19); + pstmt.setNull(20); + } + + if (transRow.roamingEmpId) { + pstmt.setNString(21, transRow.roamingEmpId); + } else { + pstmt.setNull(21); + } + if(transRow.evcoId){ + pstmt.setNString(22, transRow.evcoId); + } else { + pstmt.setNull(22); + } + pstmt.setInteger(23, transRow.organizationId); + if (transRow.fullEvseId) { + pstmt.setNString(24, transRow.fullEvseId); + } else { + pstmt.setNull(24); + } + if (transRow.evseId) { + pstmt.setNString(25, transRow.evseId.toString()); + } else { + pstmt.setNull(25); + } + + if(transRow.socketType){ + pstmt.setNString(26, transRow.socketType); + } else { + pstmt.setNull(26); + } + if (!isNaN(parseInt(transRow.empShare))) { + pstmt.setInteger(27, transRow.empShare); + } else { + pstmt.setNull(27); + } + if (transRow.signedMeterValueBegin) { + pstmt.setNString(28, transRow.signedMeterValueBegin.substring(0,49)); + } else { + pstmt.setNull(28); + } + if (transRow.signedMeterValueEnd) { + pstmt.setNString(29, transRow.signedMeterValueEnd.substring(0,49)); + } else { + pstmt.setNull(29); + } + + if(transRow.freeCharging){ + pstmt.setNString(30, transRow.freeCharging); + } else { + pstmt.setNull(30); + } + if (!isNaN(parseInt(transRow.connectorId))) { + pstmt.setInteger(31, transRow.connectorId); + } else { + pstmt.setNull(31); + } + + + + if (!isNaN(parseInt(transRow.meterStart))) { + pstmt.setInteger(32, transRow.meterStart); + } else { + pstmt.setNull(32); + } + if (!isNaN(parseInt(transRow.meterStop))) { + pstmt.setInteger(33, transRow.meterStop); + } else { + pstmt.setNull(33); + } + + pstmt.setNString(34, JSON.stringify(transRow.notes)); + + if (transRow.notes && transRow.notes.length > 0) { + pstmt.setInteger(35, transRow.notes[0].value); + } else { + pstmt.setNull(35); + } + + //pstmt.setNString(34, "1234"); + + pstmt.setNString(36, JSON.stringify(transRow)); + + if (transRow.eichrechtType) { + pstmt.setNString(37, transRow.eichrechtType); + } else { + pstmt.setNull(37); + } + + + //04.05.2023 Erweiterung PlausiheckFelder + if (transRow.businessValidationResult) { + pstmt.setNString(38, transRow.businessValidationResult); + } else { + pstmt.setNull(38); + } + + if (transRow.techValidationResult) { + pstmt.setNString(39, transRow.techValidationResult); + } else { + pstmt.setNull(39); + } + + + if (transRow.notBillableReason) { + pstmt.setNString(40, transRow.notBillableReason); + } else { + pstmt.setNull(40); + } + + + if (isUpdateMode) { + pstmt.setNString(41, myCDRID); + } + + + + + pstmt.addBatch(); + }); + var batchResult = pstmt.executeBatch(); + //$.trace.debug("BatchUpsert Result: " + batchResult.toString()); + pstmt.close(); + conn.commit(); + conn.close(); + + outMsg = {}; + outMsg.method = "insertDB"; + outMsg.status = "success"; + outMessages.push(outMsg); + + } catch (e) { + $.trace.error("InsertDB ExceptionHandler: " + e.toString()); + exceptionHandler(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; + }*/ + } +} + +function checkPayload(aCDR) { + var isValid = true; + var reason = ""; + try { + if (Array.isArray(aCDR)) { + aCDR.forEach(function(cdrObj) { + if (!cdrObj.hasOwnProperty('cdrId')) { + isValid = false; + reason = + " (mandatory properties are: cdrId)"; + } + }); + } else { + isValid = false; + reason = " (payload is not an array)"; + } + } catch (e) { + exceptionHandler(e); + isValid = false; + } + if (!isValid) { + outMsg = {}; + outMsg.method = "checkPayload"; + outMsg.status = "error"; + outStatus = "error"; + $.response.status = $.net.http.BAD_REQUEST; + outMsg.message = "invalid payload structure" + reason; + outMessages.push(outMsg); + } + return isValid; +} + +function processData(sObj) { + try { + var cdrData = JSON.parse(sObj); + if (!Array.isArray(cdrData)) { + cdrData = [cdrData]; + } + if (checkPayload(cdrData)) { + writeObj2Table(cdrData); + } + } catch (e) { + exceptionHandler(e); + } +} + +ParDebug = $.request.parameters.get('debug') && $.request.parameters.get('debug').toLowerCase() === "true"; + +var content = ''; +if ($.request.body) { + content = $.request.body.asString(); +} + +processData(content); + +setOutputMessage(); \ No newline at end of file diff --git a/uniorg/eon/virta/v2/setemptrans.xsjs b/uniorg/eon/virta/v2/setemptrans.xsjs new file mode 100644 index 0000000..71d27cb --- /dev/null +++ b/uniorg/eon/virta/v2/setemptrans.xsjs @@ -0,0 +1,533 @@ +var ParDebug = false; +var output = {}; +var outMessages = []; +var outErrorMessages = []; +var outMsg = {}; +var outStatus = "success"; +var myDebug = {}; + +var serviceVersion = '2.8'; + +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; +} + +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) { + 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(); + outMsg.serviceVersion = serviceVersion; + } + 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; +} + +function checkUUID(myUUID) { + var exists = false; + var conn = $.db.getConnection(); + var pstmt; + var query = "select \"UUID\" from \"VIRTAPORTAL\".\"EMP_TRANSACTIONS\" where UUID = ?"; + pstmt = conn.prepareStatement(query); + pstmt.setNString(1, myUUID); + var rs = pstmt.executeQuery(); + if (rs.next()) { + exists = true; + } + rs.close(); + pstmt.close(); + conn.close(); + return exists; +} + +function writeObj2Table(transOBJ) { + //var pdcontent = $.request.body.asString(); + // pdcontent = pdcontent.replace(/\"([^(\")"]+)\":/g,"$1:"); + var conn = $.db.getConnection(); + var pstmt; + var query; + var vals = {}; + var data = []; + var isUpdateMode = false; + // var query2; + // var output = {results: [] }; + //var mynextval = getnextval(); + //myDebug.mynextval = mynextval; + try { + var myUUID = transOBJ[0].uuid.toString(); + isUpdateMode = checkUUID(myUUID); + if (isUpdateMode) { + // "UPDATE \"EOPERATE\".\"CHARGEDATA\" SET BDR_ID = ?,EMAID =? ,UNIQUE_ID = ?, CREATION_DATE_UTC = ?,CHARGEPOINT_ID= ?,CHARGEPOINT_TYPE= ?,CHARGEPOINT_METER_ID= ?,CHARGEPOINT_ADDRESS_COUNTRY= ?,CHARGEPOINT_ADDRESS_POSTALCODE= ?,CHARGEPOINT_ADDRESS_CITY= ?,CHARGEPOINT_ADDRESS_STREET= ?,CHARGEPOINT_OPERATOR_ID= ?,CHARGEPOINT_OPERATOR_NAME= ?,EMOBILITY_PROVIDER_ID= ?,EMOBILITY_PROVIDER_NAME= ?,CHARGE_DATA_AUTHORIZATION_TYPE= ?,CHARGE_DATA_CONSUMPTION_KWH= ?,CHARGE_DATA_BEGIN_UTC= ?,CHARGE_DATA_END_UTC= ?,CHARGE_DATA_TIME_ZONE= ?,CHARGE_DATA_EKA_STATUS= ?,PRICING_ITEMS_1_TYPE= ?,PRICING_ITEMS_1_UNIT= ?,PRICING_ITEMS_1_UNIT_PRICE= ?,PRICING_ITEMS_1_QUANTITY= ?,PRICING_ITEMS_1_NET_AMOUNT= ?,PRICING_ITEMS_1_CURRENCY= ?,PRICING_ITEMS_2_TYPE= ?,PRICING_ITEMS_2_UNIT= ?,PRICING_ITEMS_2_UNIT_PRICE= ?,PRICING_ITEMS_2_QUANTITY= ?,PRICING_ITEMS_2_NET_AMOUNT= ?,PRICING_ITEMS_2_CURRENCY= ?,PRICING_ITEMS_3_TYPE= ?,PRICING_ITEMS_3_UNIT= ?,PRICING_ITEMS_3_UNIT_PRICE= ?,PRICING_ITEMS_3_QUANTITY= ?,PRICING_ITEMS_3_NET_AMOUNT= ?,PRICING_ITEMS_3_CURRENCY= ?,PRICING_ITEMS_4_TYPE= ?,PRICING_ITEMS_4_UNIT= ?,PRICING_ITEMS_4_UNIT_PRICE= ?,PRICING_ITEMS_4_QUANTITY= ?,PRICING_ITEMS_4_NET_AMOUNT= ?,PRICING_ITEMS_4_CURRENCY= ?,SUBSCRIPTION_ID= ?,JSONRAW= ?,UPDATE_TS= CURRENT_TIMESTAMP,UPDATE_USER= CURRENT_USER)"; + query = + "UPDATE \"VIRTAPORTAL\".\"EMP_TRANSACTIONS\" SET UUID=?,CDRID=?,STATIONUUID=?,CUSTOMERID=?,STARTTIME=?,STOPTIME=?,DURATION=?,WATTHOUR=?,AMOUNT=?,CURRENCY=?,TRANSACTIONTYPE=?,CREATED=?,RFID=?,STATION=?,STATION_ID=?,STATION_NAME=?,LOCATION_ID=?,LOCATION_ADDRESS=?,LOCATION_CITY=?,LOCATION_TYPE=?,CUSTOMERGROUPID=?,CUSTOMERGROUPNAME=?,ORGANIZATIONID=?,PAYMENTTYPE=?,EVSEID=?,PLUGTYPE=?,EMPSHARE=?,SIGNEDMETERVALUEBEGIN=?,SIGNEDMETERVALUEEND=?,OPERATORPRICE=?,OPERATORCURRENCY=?,OPERATORID=?,FREECHARGING=?,EMPTARIFFID=?,EMPTARIFFNAME=?,FULLEVSEID=?,METERSTART=?,METERSTOP=?,NOTES=?,MILEAGE=?,JSONRAW=?,EICHRECHTTYPE=?,KWHNETPRICE=?,MINUTENETPRICE=?,SESSIONNETPRICE=?,CPOOPERATORID=?,KWHGROSSPRICE=?,MINUTEGROSSPRICE=?,SESSIONGROSSPRICE=?,LOCATION_COUNTRY=?,BUSINESSVALIDATIONRESULT=?,TECHVALIDATIONRESULT=?,NOTBILLABLEREASON=?,FREEMINUTES=?,UPDATE_TS=CURRENT_TIMESTAMP,UPDATE_USER=CURRENT_USER where UUID = ?"; + outMsg.method = "Update Data UUID: " + myUUID; + } else { + query = + "INSERT INTO \"VIRTAPORTAL\".\"EMP_TRANSACTIONS\" (UUID,CDRID,STATIONUUID,CUSTOMERID,STARTTIME,STOPTIME,DURATION,WATTHOUR,AMOUNT,CURRENCY,TRANSACTIONTYPE,CREATED,RFID,STATION,STATION_ID,STATION_NAME,LOCATION_ID,LOCATION_ADDRESS,LOCATION_CITY,LOCATION_TYPE,CUSTOMERGROUPID,CUSTOMERGROUPNAME,ORGANIZATIONID,PAYMENTTYPE,EVSEID,PLUGTYPE,EMPSHARE,SIGNEDMETERVALUEBEGIN,SIGNEDMETERVALUEEND,OPERATORPRICE,OPERATORCURRENCY,OPERATORID,FREECHARGING,EMPTARIFFID,EMPTARIFFNAME,FULLEVSEID,METERSTART,METERSTOP,NOTES,MILEAGE,JSONRAW,UPDATE_TS,EICHRECHTTYPE,KWHNETPRICE,MINUTENETPRICE,SESSIONNETPRICE,CPOOPERATORID,KWHGROSSPRICE,MINUTEGROSSPRICE,SESSIONGROSSPRICE,LOCATION_COUNTRY,BUSINESSVALIDATIONRESULT,TECHVALIDATIONRESULT,NOTBILLABLEREASON,FREEMINUTES,UPDATE_USER) values (" + + "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_USER)"; + outMsg.method = "Insert Data UUID: " + myUUID; + } + + // 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 = + // "UPSERT \"VIRTAPORTAL\".\"EMP_TRANSACTIONS\" (UUID,CDRID,STATIONUUID,CUSTOMERID,STARTTIME,STOPTIME,DURATION,WATTHOUR,AMOUNT,CURRENCY,TRANSACTIONTYPE,CREATED,RFID,STATION,STATION_ID,STATION_NAME,LOCATION_ID,LOCATION_ADDRESS,LOCATION_CITY,LOCATION_TYPE,CUSTOMERGROUPID,CUSTOMERGROUPNAME,ORGANIZATIONID,PAYMENTTYPE,EVSEID,PLUGTYPE,EMPSHARE,SIGNEDMETERVALUEBEGIN,SIGNEDMETERVALUEEND,OPERATORPRICE,OPERATORCURRENCY,OPERATORID,FREECHARGING,EMPTARIFFID,EMPTARIFFNAME,FULLEVSEID,METERSTART,METERSTOP,NOTES,MILEAGE,JSONRAW,UPDATE_TS,EICHRECHTTYPE,KWHNETPRICE,MINUTENETPRICE,SESSIONNETPRICE,CPOOPERATORID,KWHGROSSPRICE,MINUTEGROSSPRICE,SESSIONGROSSPRICE,LOCATION_COUNTRY) values (" + + // "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?,?,?,?,?,?,?,?,?) WITH PRIMARY KEY"; + // "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.setBatchSize(transOBJ.length); + //$.trace.debug("prepareBatchStatement (" + transOBJ.length.toString() + " rows): " + query); + transOBJ.forEach(function(transRow) { + pstmt.setNString(1, transRow.uuid); + /* + if (!isNaN(parseInt(transRow.cdrId))) { + pstmt.setInteger(2, transRow.cdrId); + } else { + pstmt.setNull(2); + } + */ + if (transRow.cdrId) { + pstmt.setNString(2, transRow.cdrId.toString()); + } else { + pstmt.setNull(2); + } + + if (transRow.stationUuid) { + pstmt.setNString(3, transRow.stationUuid); + } else { + pstmt.setNull(3); + } + + if (!isNaN(parseInt(transRow.customerId))) { + pstmt.setInteger(4, transRow.customerId); + } else { + pstmt.setNull(4); + } + + if (transRow.startTime) { + pstmt.setNString(5, transRow.startTime); + } else { + pstmt.setNull(5); + } + + if (transRow.stopTime) { + pstmt.setNString(6, transRow.stopTime); + } else { + pstmt.setNull(6); + } + + if (!isNaN(parseInt(transRow.duration))) { + pstmt.setInteger(7, transRow.duration); + } else { + pstmt.setNull(7); + } + if (!isNaN(parseInt(transRow.wattHour))) { + pstmt.setInteger(8, transRow.wattHour); + } else { + pstmt.setNull(8); + } + if (!isNaN(parseInt(transRow.amount))) { + pstmt.setInteger(9, transRow.amount); + } else { + pstmt.setNull(9); + } + + if (transRow.currency) { + pstmt.setNString(10, transRow.currency); + } else { + pstmt.setNull(10); + } + + if (transRow.transactionType) { + pstmt.setNString(11, transRow.transactionType); + } else { + pstmt.setNull(11); + } + + if (transRow.created) { + pstmt.setNString(12, transRow.created); + } else { + pstmt.setNull(12); + } + + if (transRow.rfid) { + pstmt.setNString(13, transRow.rfid); + } else { + pstmt.setNull(13); + } + if (transRow.station) { + pstmt.setNClob(14, JSON.stringify(transRow.station)); + pstmt.setNString(15, transRow.station.identity); + if (transRow.station.name) { + pstmt.setNString(16, transRow.station.name.substr(0,100)); + } else { + pstmt.setNull(16); + } + if (typeof transRow.station.location === "undefined") { + pstmt.setNull(17); + pstmt.setNull(18); + pstmt.setNull(19); + pstmt.setNull(20); + pstmt.setNull(50); + } else { + if (!isNaN(parseInt(transRow.station.location.id))) { + pstmt.setInteger(17, transRow.station.location.id); + } else { + pstmt.setNull(17); + } + if (transRow.station.location.address) { + pstmt.setNString(18, transRow.station.location.address); + } else { + pstmt.setNull(18); + } + if (transRow.station.location.city) { + pstmt.setNString(19, transRow.station.location.city); + } else { + pstmt.setNull(19); + } + if (transRow.station.location.locationType) { + pstmt.setNString(20, transRow.station.location.locationType); + } else { + pstmt.setNull(20); + } + if (transRow.station.location.country) { + pstmt.setNString(50, transRow.station.location.country); + } else { + pstmt.setNull(50); + } + } + } else { + pstmt.setNull(14); + pstmt.setNull(15); + pstmt.setNull(16); + pstmt.setNull(17); + pstmt.setNull(18); + pstmt.setNull(19); + pstmt.setNull(20); + pstmt.setNull(50); + } + + pstmt.setInteger(21, transRow.customerGroupId); + if (transRow.customerGroupName) { + pstmt.setNString(22, transRow.customerGroupName); + } else { + pstmt.setNull(22); + } + + if (!isNaN(parseInt(transRow.organizationId))) { + pstmt.setInteger(23, transRow.organizationId); + } else { + pstmt.setNull(23); + } + + if (transRow.paymentType) { + pstmt.setNString(24, transRow.paymentType); + } else { + pstmt.setNull(24); + } + + if (transRow.evseId) { + pstmt.setNString(25, transRow.evseId.toString()); + } else { + pstmt.setNull(25); + } + + if (transRow.plugType) { + pstmt.setNString(26, transRow.plugType); + } else { + pstmt.setNull(26); + } + + if (!isNaN(parseInt(transRow.empShare))) { + pstmt.setInteger(27, transRow.empShare); + } else { + pstmt.setNull(27); + } + + if (transRow.signedMeterValueBegin) { + pstmt.setNString(28, transRow.signedMeterValueBegin.substr(0, 50)); + } else { + pstmt.setNull(28); + } + + if (transRow.signedMeterValueEnd) { + pstmt.setNString(29, transRow.signedMeterValueEnd.substr(0, 50)); + } else { + pstmt.setNull(29); + } + if (!isNaN(parseInt(transRow.operatorPrice))) { + pstmt.setInteger(30, transRow.operatorPrice); + } else { + pstmt.setNull(30); + } + if (transRow.operatorCurrency) { + pstmt.setNString(31, transRow.operatorCurrency); + } else { + pstmt.setNull(31); + } + if (!isNaN(parseInt(transRow.operatorId))) { + pstmt.setInteger(32, transRow.operatorId); + } else { + pstmt.setNull(32); + } + if (transRow.freeCharging) { + pstmt.setNString(33, transRow.freeCharging); + } else { + pstmt.setNull(33); + } + if (!isNaN(parseInt(transRow.empTariffId))) { + pstmt.setInteger(34, transRow.empTariffId); + } else { + pstmt.setNull(34); + } + if (transRow.empTariffName) { + pstmt.setNString(35, transRow.empTariffName); + } else { + pstmt.setNull(35); + } + if (transRow.fullEvseId) { + pstmt.setNString(36, transRow.fullEvseId); + } else { + pstmt.setNull(36); + } + + if (!isNaN(parseInt(transRow.meterStart))) { + pstmt.setInteger(37, transRow.meterStart); + } else { + pstmt.setNull(37); + } + if (!isNaN(parseInt(transRow.meterStop))) { + pstmt.setInteger(38, transRow.meterStop); + } else { + pstmt.setNull(38); + } + + pstmt.setNString(39, JSON.stringify(transRow.notes)); + + if (transRow.notes && transRow.notes.length > 0) { + pstmt.setInteger(40, transRow.notes[0].value); + } else { + pstmt.setNull(40); + } + + //pstmt.setNString(34, "1234"); + + pstmt.setNString(41, JSON.stringify(transRow)); + if (transRow.eichrechtType) { + pstmt.setNString(42, transRow.eichrechtType); + } else { + pstmt.setNull(42); + } + if (!isNaN(parseInt(transRow.empKwhNetPrice))) { + pstmt.setInteger(43, transRow.empKwhNetPrice); + } else { + pstmt.setNull(43); + } + + if (!isNaN(parseInt(transRow.empMinuteNetPrice))) { + pstmt.setInteger(44, transRow.empMinuteNetPrice); + } else { + pstmt.setNull(44); + } + + if (!isNaN(parseInt(transRow.empSessionNetPrice))) { + pstmt.setInteger(45, transRow.empSessionNetPrice); + } else { + pstmt.setNull(45); + } + if (transRow.cpoOperatorId) { + pstmt.setNString(46, transRow.cpoOperatorId); + } else { + pstmt.setNull(46); + } + if (!isNaN(parseInt(transRow.empKwhGrossPrice))) { + pstmt.setInteger(47, transRow.empKwhGrossPrice); + } else { + pstmt.setNull(47); + } + + if (!isNaN(parseInt(transRow.empMinuteGrossPrice))) { + pstmt.setInteger(48, transRow.empMinuteGrossPrice); + } else { + pstmt.setNull(48); + } + + if (!isNaN(parseInt(transRow.empSessionGrossPrice))) { + pstmt.setInteger(49, transRow.empSessionGrossPrice); + } else { + pstmt.setNull(49); + } + + //20.04.2023 Erweiterung PlausiheckFelder + if (transRow.businessValidationResult) { + pstmt.setNString(51, transRow.businessValidationResult); + } else { + pstmt.setNull(51); + } + + if (transRow.techValidationResult) { + pstmt.setNString(52, transRow.techValidationResult); + } else { + pstmt.setNull(52); + } + + if (transRow.notBillableReason) { + pstmt.setNString(53, transRow.notBillableReason); + } else { + pstmt.setNull(53); + } + + if (!isNaN(parseInt(transRow.empFreeMinutes))) { + pstmt.setInteger(54, transRow.empFreeMinutes); + } else { + pstmt.setNull(54); + } + + if (isUpdateMode) { + pstmt.setNString(55, myUUID); + } + + pstmt.addBatch(); + }); + var batchResult = pstmt.executeBatch(); + //$.trace.debug("BatchUpsert Result: " + batchResult.toString()); + pstmt.close(); + conn.commit(); + conn.close(); + + outMsg = {}; + outMsg.method = "insertDB"; + outMsg.status = "success"; + outMessages.push(outMsg); + + } catch (e) { + $.trace.error("InsertDB ExceptionHandler: " + e.toString()); + exceptionHandler(e); + /*outMsg = {}; + outMsg.method = "exceptionHandler"; + outMsg.status = "error"; + outStatus = "error"; + output.status = outStatus; + 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; + }*/ + } +} + +function checkPayload(aCDR) { + var isValid = true; + var reason = ""; + try { + if (Array.isArray(aCDR)) { + aCDR.forEach(function(cdrObj) { + if (!cdrObj.hasOwnProperty('uuid')) { + isValid = false; + reason = + " (mandatory properties are: uuid)"; + } + }); + } else { + isValid = false; + reason = " (payload is not an array)"; + } + } catch (e) { + exceptionHandler(e); + isValid = false; + } + if (!isValid) { + outMsg = {}; + outMsg.method = "checkPayload"; + outMsg.status = "error"; + outStatus = "error"; + $.response.status = $.net.http.BAD_REQUEST; + outMsg.message = "invalid payload structure" + reason; + outMessages.push(outMsg); + } + return isValid; +} + +function processData(sObj) { + try { + var cdrData = JSON.parse(sObj); + if (!Array.isArray(cdrData)) { + cdrData = [cdrData]; + } + if (checkPayload(cdrData)) { + writeObj2Table(cdrData); + } + } catch (e) { + exceptionHandler(e); + } +} + +ParDebug = $.request.parameters.get('debug') && $.request.parameters.get('debug').toLowerCase() === "true"; + +var content = ''; +if ($.request.body) { + content = $.request.body.asString(); +} + +processData(content); + +setOutputMessage(); \ No newline at end of file diff --git a/uniorg/eon/virtaportalui/.che/modules b/uniorg/eon/virtaportalui/.che/modules new file mode 100644 index 0000000..ddd1562 --- /dev/null +++ b/uniorg/eon/virtaportalui/.che/modules @@ -0,0 +1 @@ +BILLINGRUNUI diff --git a/uniorg/eon/virtaportalui/.che/project.json b/uniorg/eon/virtaportalui/.che/project.json new file mode 100644 index 0000000..57dc645 --- /dev/null +++ b/uniorg/eon/virtaportalui/.che/project.json @@ -0,0 +1 @@ +{"type":"mta","builders":{"default":"mtabuilder","configs":{}},"runners":{"configs":{}},"attributes":{"sap.watt.common.setting":["{\"generation\":[{\"templateId\":\"hanatemplates.hanamtaproject\",\"templateVersion\":\"1.0.0\",\"dateTimeStamp\":\"Fri, 08 Nov 2019 12:03:22 GMT\"}],\"translation\":{\"translationDomain\":\"\",\"supportedLanguages\":\"en,fr,de\",\"defaultLanguage\":\"en\",\"defaultI18NPropertyFile\":\"i18n.properties\",\"resourceModelName\":\"i18n\"},\"basevalidator\":{\"services\":{\"json\":\"jsonValidator\",\"xml\":\"xmlValidator\",\"js\":\"jsValidator\"}},\"build\":{\"targetFolder\":\"dist\",\"sourceFolder\":\"webapp\"}}"]},"mixinTypes":[]} \ No newline at end of file diff --git a/uniorg/eon/virtaportalui/.xsaccess b/uniorg/eon/virtaportalui/.xsaccess new file mode 100644 index 0000000..4128656 --- /dev/null +++ b/uniorg/eon/virtaportalui/.xsaccess @@ -0,0 +1,20 @@ +{ + "exposed": true, + "authentication": [{ + "method": "Form" + }], + + "mime_mapping": [{ + "extension": "jpg", + "mimetype": "image/jpeg" + }], + "force_ssl": false, + "enable_etags": true, + "prevent_xsrf": true, + "anonymous_connection": null, + "cors": [{ + "enabled": false + }], + "cache_control": "no-cache, no-store", + "default_file": "index.html" +} \ No newline at end of file diff --git a/uniorg/eon/virtaportalui/b1iwrapper/B1I.xshttpdest b/uniorg/eon/virtaportalui/b1iwrapper/B1I.xshttpdest new file mode 100644 index 0000000..934f592 --- /dev/null +++ b/uniorg/eon/virtaportalui/b1iwrapper/B1I.xshttpdest @@ -0,0 +1,10 @@ +description = "b1i saphanats03 server"; +host = "192.168.50.187"; +port = 8080; +pathPrefix = "/B1iXcellerator/exec/ipo/vP.0010000105.in_HCSX/com.sap.b1i.vplatform.runtime/INB_HT_CALL_SYNC_XPT/INB_HT_CALL_SYNC_XPT.ipo/proc"; +proxyType = none; +proxyHost = "localhost"; +proxyPort = 0; +authType = none; +useSSL = false; +timeout = 0; diff --git a/uniorg/eon/virtaportalui/b1iwrapper/b1i_billingrun_phase1.xsjs b/uniorg/eon/virtaportalui/b1iwrapper/b1i_billingrun_phase1.xsjs new file mode 100644 index 0000000..0f5d387 --- /dev/null +++ b/uniorg/eon/virtaportalui/b1iwrapper/b1i_billingrun_phase1.xsjs @@ -0,0 +1,71 @@ +var ParDebug = false; +var Billingrunmode = "ABC"; +var DateFrom = ""; +var DateTo = ""; +var BillingRunDate = "20190701"; + + +function doHTTPCallstartBillingrun(Billingrunmode,BillingRunDate,DateFrom,DateTo) { + + //http://172.17.12.201:8080/B1iXcellerator/exec/ipo/vP.0010000104.in_HCSX/com.sap.b1i.vplatform.runtime/INB_HT_CALL_SYNC_XPT/INB_HT_CALL_SYNC_XPT.ipo/proc?biu=uni.eon.emob.addcdr&SysId=0010000100&CdrCallId=4aa9b243be184a4abdb4179f375459be + + var destn_pkg = "uniorg.mrssporty.billingrunui.b1iwrapper"; + var dest_name = "B1I"; + + try + + { + + var dest = $.net.http.readDestination(destn_pkg, dest_name); + var client = new $.net.http.Client(); + var req = new $.web.WebRequest($.net.http.GET, ""); + var oSysId = "0010000104"; + // oCdrCallId = "4aa9b243be184a4abdb4179f375459be"; + req.parameters.set("biu", "uni.msp.billing.run"); + //req.parameters.set("msglog", "true"); + req.parameters.set("function", "triggerbillingrun"); + req.parameters.set("SysId", oSysId); + req.parameters.set("Billingrunmode", Billingrunmode); + // req.parameters.set("DateFrom", DateFrom); +// req.parameters.set("DateTo", DateTo); + req.parameters.set("BillingRunDate", BillingRunDate); + + + //, "/httpdest.png"); + + client.request(req, dest); + + var response = client.getResponse(); + + var b1iResp = response.body.asString() + + $.trace.debug("DEBUG Billingmode: " + Billingrunmode ); + + $.response.status = $.net.http.OK; + + $.response.contentType = "text/xml"; + + $.response.setBody(b1iResp); + + } catch (e) { + + $.response.contentType = "text/plain"; + + $.response.setBody(e.message); + + } + +} +if ($.request.parameters.get('Billingrunmode')) { + Billingrunmode = $.request.parameters.get('Billingrunmode'); +} +if ($.request.parameters.get('DateFrom')) { + DateFrom = $.request.parameters.get('DateFrom'); +} +if ($.request.parameters.get('DateTo')) { + DateTo = $.request.parameters.get('DateTo'); +} +if ($.request.parameters.get('BillingRunDate')) { + BillingRunDate = $.request.parameters.get('BillingRunDate'); +} +doHTTPCallstartBillingrun(Billingrunmode,BillingRunDate); \ No newline at end of file diff --git a/uniorg/eon/virtaportalui/mta.yaml b/uniorg/eon/virtaportalui/mta.yaml new file mode 100644 index 0000000..0ac09ff --- /dev/null +++ b/uniorg/eon/virtaportalui/mta.yaml @@ -0,0 +1,11 @@ +ID: UOBILLING +_schema-version: '2.1' +version: 0.0.1 + +modules: + + + - name: BILLINGRUNUI + type: html5 + path: BILLINGRUNUI + diff --git a/uniorg/eon/virtaportalui/package.json b/uniorg/eon/virtaportalui/package.json new file mode 100644 index 0000000..e878fe1 --- /dev/null +++ b/uniorg/eon/virtaportalui/package.json @@ -0,0 +1,12 @@ +{ + "name": "uniorg-approuter", + "engines": { + "node": ">=4.0.0 <9.0.0" + }, + "dependencies": { + "@sap/approuter": "5.13.0" + }, + "scripts": { + "start": "node node_modules/@sap/approuter/approuter.js" + } +} \ No newline at end of file diff --git a/uniorg/eon/virtaportalui/resources/webapp/Component.js b/uniorg/eon/virtaportalui/resources/webapp/Component.js new file mode 100644 index 0000000..6d60dd6 --- /dev/null +++ b/uniorg/eon/virtaportalui/resources/webapp/Component.js @@ -0,0 +1,30 @@ +sap.ui.define([ + "sap/ui/core/UIComponent", + "sap/ui/Device", + "uniorg/eon/virtaportalui/model/models" +], function (UIComponent, Device, models) { + "use strict"; + + return UIComponent.extend("uniorg.eon.virtaportalui.Component", { + + metadata: { + manifest: "json" + }, + + /** + * The component is initialized by UI5 automatically during the startup of the app and calls the init method once. + * @public + * @override + */ + init: function () { + // call the base component's init function + UIComponent.prototype.init.apply(this, arguments); + + // enable routing + this.getRouter().initialize(); + + // set the device model + this.setModel(models.createDeviceModel(), "device"); + } + }); +}); \ No newline at end of file diff --git a/uniorg/eon/virtaportalui/resources/webapp/controller/View1.controller.js b/uniorg/eon/virtaportalui/resources/webapp/controller/View1.controller.js new file mode 100644 index 0000000..754533d --- /dev/null +++ b/uniorg/eon/virtaportalui/resources/webapp/controller/View1.controller.js @@ -0,0 +1,437 @@ +sap.ui.define([ + 'jquery.sap.global', + 'sap/ui/core/Fragment', + 'sap/m/MessageBox', + 'sap/m/MessagePopover', + 'sap/m/MessageItem', + 'sap/m/MessageToast', + 'sap/ui/core/message/Message', + 'sap/ui/core/MessageType', + 'sap/ui/core/Core', + 'sap/ui/core/mvc/Controller', + 'sap/ui/model/json/JSONModel', + 'sap/ui/core/Element' +], function (jQuery,Fragment,MessageBox,MessagePopover, MessageItem, MessageToast, Message, MessageType,Core,Controller,JSONModel,Element) { + "use strict"; + //Version 1.0.1 + var _timeout; + var _myrunid; + var _hostname = window.location.hostname; + var _VersionInfo = '1.0.1'; + + + + return Controller.extend("uniorg.eon.virtaportalui.controller.View1", { + onInit: function () { + var oModel = new JSONModel("./localService/mockdata/FormsModel.json"); + + + this.oView = this.getView(); + this._MessageManager = Core.getMessageManager(); + this.oView.setModel(oModel); + + // this._MessageManager.registerObject(this.oView.byId("formContainer"), true); + this.oView.setModel(this._MessageManager.getMessageModel(),"message"); + + + this.createMessagePopover(); + }, + + convertmydate: function() { + var mm = this.getMonth() + 1; // getMonth() is zero-based + var dd = this.getDate(); + + return [this.getFullYear(), + (mm>9 ? '' : '0') + mm, + (dd>9 ? '' : '0') + dd + ].join(''); +}, + +// start messagepopover + handleMessagePopoverPress: function (oEvent) { + if (!this.oMP) { + this.createMessagePopover(); + } + this.oMP.toggle(oEvent.getSource()); + }, + + createMessagePopover: function () { + var that = this; + + this.oMP = new MessagePopover({ + activeTitlePress: function (oEvent) { + var oItem = oEvent.getParameter("item"), + oPage = that.oView.byId("messageHandlingPage"), + oMessage = oItem.getBindingContext("message").getObject(), + oControl = Element.registry.get(oMessage.getControlId()); + + if (oControl) { + oPage.scrollToElement(oControl.getDomRef(), 200, [0, -100]); + setTimeout(function(){ + oControl.focus(); + }, 300); + } + }, + items: { + path:"message>/", + template: new MessageItem( + { + title: "{message>message}", + subtitle: "{message>additionalText}", + groupName: {parts: [{path: 'message>controlIds'}], formatter: this.getGroupName}, + activeTitle: {parts: [{path: 'message>controlIds'}], formatter: this.isPositionable}, + type: "{message>type}", + description: "{message>message}" + }) + } + }); + + this.oMP._oMessageView.setGroupItems(true); + this.getView().byId("messagePopoverBtn").addDependent(this.oMP); + }, + + getGroupName : function (sControlId) { + // the group name is generated based on the current layout + // and is specific for each use case + var oControl = Element.registry.get(sControlId); + + if (oControl) { + var sFormSubtitle = oControl.getParent().getParent().getTitle().getText(), + sFormTitle = oControl.getParent().getParent().getParent().getTitle(); + + return sFormTitle + ", " + sFormSubtitle; + } + }, + + isPositionable : function (sControlId) { + // Such a hook can be used by the application to determine if a control can be found/reached on the page and navigated to. + return sControlId ? true : true; + }, + + onChange: function (oEvent) { + var oInput = oEvent.getSource(); + + if (oInput.getRequired()) { + this.handleRequiredField(oInput); + } + + if (oInput.getLabels()[0].getText() === "Standard Weekly Hours") { + this.checkInputConstraints(oInput); + } + }, + + handleRequiredField: function (oInput) { + var sTarget = oInput.getBindingContext().getPath() + "/" + oInput.getBindingPath("value"); + + this.removeMessageFromTarget(sTarget); + + if (!oInput.getValue()) { + this._MessageManager.addMessages( + new Message({ + message: "A mandatory field is required", + type: MessageType.Error, + additionalText: oInput.getLabels()[0].getText(), + target: sTarget, + processor: this.getView().getModel() + }) + ); + } + }, + + checkInputConstraints: function (oInput) { + var oBinding = oInput.getBinding("value"), + sValueState = "None", + sTarget = oInput.getBindingContext().getPath() + "/" + oInput.getBindingPath("value"); + + this.removeMessageFromTarget(sTarget); + + try { + oBinding.getType().validateValue(oInput.getValue()); + } catch (oException) { + sValueState = "Warning"; + this._MessageManager.addMessages( + new Message({ + message: "The value should not exceed 40", + type: MessageType.Warning, + additionalText: oInput.getLabels()[0].getText(), + description: "The value of the working hours field should not exceed 40 hours.", + target: sTarget, + processor: this.getView().getModel() + }) + ); + } + + oInput.setValueState(sValueState); + }, + + removeMessageFromTarget: function (sTarget) { + this._MessageManager.getMessageModel().getData().forEach(function(oMessage){ + if (oMessage.target === sTarget) { + this._MessageManager.removeMessages(oMessage); + } + }.bind(this)); + }, + + _generateInvalidUserInput: function () { + var oButton = this.getView().byId("messagePopoverBtn"), + oRequiredNameInput = this.oView.byId("formContainer").getItems()[4].getContent()[2], + oNumericZipInput = this.oView.byId("formContainer").getItems()[5].getContent()[7], + oEmailInput = this.oView.byId("formContainer").getItems()[6].getContent()[13], + iWeeklyHours = this.oView.byId("formContainerEmployment").getItems()[0].getContent()[13]; + + oButton.setVisible(true); + oRequiredNameInput.setValue(undefined); + oNumericZipInput.setValue("AAA"); + oEmailInput.setValue("MariaFontes.com"); + iWeeklyHours.setValue(400); + + this.handleRequiredField(oRequiredNameInput); + this.checkInputConstraints(iWeeklyHours); + + this.oMP.getBinding("items").attachChange(function(oEvent){ + this.oMP._oMessageView.navigateBack(); + }.bind(this)); + + setTimeout(function(){ + this.oMP.openBy(oButton); + }.bind(this), 100); + }, + + +// ende messagpopover + + +closeMyOpenDialog: function (oEvent) { + this._dialog.close(); +}, + + + onOpenDialog: function (oEvent) { + // instantiate dialog + if (!this._dialog) { + this._dialog = sap.ui.xmlfragment("uniorg.eon.virtaportalui.view.BusyDialog", this); + this.getView().addDependent(this._dialog); + } + + // open dialog + jQuery.sap.syncStyleClass("sapUiSizeCompact", this.getView(), this._dialog); + this._dialog.open(); + + // simulate end of operation +/* _timeout = jQuery.sap.delayedCall(3000, this, function () { + this._dialog.close(); + });*/ + }, + + onDialogClosed: function (oEvent) { + jQuery.sap.clearDelayedCall(_timeout); + + if (oEvent.getParameter("cancelPressed")) { + MessageToast.show("The operation has been cancelled"); + } else { + MessageToast.show("The operation has been completed"); + } + }, + +callb1iphase1: function (myMode,myBookingdate,oEvent) { + + var that = this; + var myMode = this.getView().byId("box0").getValue(); + var myDateFrom = this.getView().byId("picker0").getValue(); + var myDateTo = this.getView().byId("picker1").getValue(); + // var myDuedate = this.getView().byId("picker1").getValue(); + console.log("mymode ist:" + myMode); + var today = new Date(); + + var parts = myDateFrom.split('.'); + var parts2 = myDateTo.split('.'); + var PageSize = 200; +// Please pay attention to the month (parts[1]); JavaScript counts months from 0: +// January - 0, February - 1, etc. +//var mynewdate = new Date(parts[0], parts[1] - 1, parts[2]); + myDateFrom = parts[2] + parts[1] + parts[0]; + myDateTo = parts2[2] + parts2[1] + parts2[0]; + //var oInput = oEvent.getSource(); + //var sTarget = oInput.getBindingContext().getPath() + "/" + oInput.getBindingPath("value"); + + var myurl =""; + if (myMode=='EMP') + { + myurl = "https://" + _hostname + ":4300/uniorg/eon/virta/v1/getemptrans.xsjs"; + } + if (myMode=='CPO') + { + myurl = "https://" + _hostname + ":4300/uniorg/eon/virta/v1/getcpotrans.xsjs"; + } + + var responsephase1 =$.ajax({ + type: "GET", + // data: "POST CONTENT DATA", + crossDomain: true, + url: myurl, + data: {'debug' : true, 'pageSize':PageSize,'DateFrom':myDateFrom,'DateTo':myDateTo,'Billingrunmode':myMode}, + contentType: "application/json", + timeout: 3600000, + success: function(result) { + that._dialog.close(); + var bCompact = !!that.getView().$().closest(".sapUiSizeCompact").length; + //var xmlDoc = jQuery.parseXML(responsephase1.responseText); + //console.log(xmlDoc.childNodes[0].childNodes[1].innerHTML); + console.log(responsephase1.responseText); + var retrunid = "xxx"; + var iserror = false; + if (retrunid.toString().length > 40){ + iserror = true; + } + var encodedResponse = responsephase1.responseJSON; + console.log(encodedResponse); + + if (!iserror) + { + sap.m.MessageBox.information("Data Download finished", { + title: "run finished", + id: "messageBoxId1", + details: encodedResponse, + //styleClass: bCompact ? "sapUiSizeCompact" : "", + contentWidth: "1000px" + + }); + that._MessageManager.addMessages( + new Message({ + message: "run finished ID:" + retrunid, + type: MessageType.Information, + additionalText: encodedResponse + // target: sTarget + // processor: mythis.getView().getModel() + }) + ); + + } + else { + sap.m.MessageBox.information("run failure", { + title: "Error at run", + id: "messageBoxId1", + details: encodedResponse, + styleClass: "sapUiSizeCompact", + contentWidth: "1000px" + }); + that._MessageManager.addMessages( + new Message({ + message: "Failure at Http Call", + type: MessageType.Error, + additionalText: encodedResponse + // target: sTarget + // processor: mythis.getView().getModel() + }) + ); + } + return retrunid; + }, + error: function(response) { + that._dialog.close(); +/* var encodedResponse = responsephase1.responseText.replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); + console.log(encodedResponse);*/ + + //var bCompact = !!this.getView().$().closest(".sapUiSizeCompact").length; + // var retrunid = xmlDoc.childNodes[0].childNodes[1].innerHTML; + // this.closeMyOpenDialog; + sap.m.MessageBox.error("Error in HTTP CALL", { + title: "Error in HTTPCALL", + id: "messageBoxId1", + details: response, + styleClass: "sapUiSizeCompact", + contentWidth: "1000px" + }); + + return ""; + } + }); + }, + + + pushthebutton: function (oEvent) { + //This code was generated by the layout editor. + + var myMode = this.getView().byId("box0").getValue(); + var myDateFrom = this.getView().byId("picker0").getValue(); + var myDateTo = this.getView().byId("picker1").getValue(); + // var myDuedate = this.getView().byId("picker1").getValue(); + console.log("mymode ist:" + myMode); + var today = new Date(); + + + // myBookingdate = today.toISOString().substring(0, 10); + var myMode = this.getView().byId("box0").getValue(); + var myBookingdate = this.getView().byId("picker0").getValue(); + // var myDuedate = this.getView().byId("picker1").getValue(); + console.log("mymode ist:" + myMode); + var isError = false; + + +if (myMode.toString().length == 0) +{ + isError = true; + var msgtxt="empty Mode please select a value"; + MessageToast.show(msgtxt); + this._MessageManager.addMessages( + new Message({ + message: msgtxt, + type: MessageType.Error, + additionalText: myMode + // target: sTarget + // processor: mythis.getView().getModel() + }) + ); +} + +if (myDateFrom.toString().length > 0 && myDateTo.toString().length > 0 ){ + + var today = new Date(); + var parts = myDateFrom.split('.'); + var parts2 = myDateTo.split('.'); +// Please pay attention to the month (parts[1]); JavaScript counts months from 0: +// January - 0, February - 1, etc. +//var mynewdate = new Date(parts[0], parts[1] - 1, parts[2]); + myDateFrom = "20" + parts[2] + parts[1] + parts[0]; + myDateTo = "20" + parts2[2] + parts2[1] + parts2[0]; +} +else { + isError= true; + var msgtxt="empty From or To Date please select a value"; + MessageToast.show(msgtxt); + this._MessageManager.addMessages( + new Message({ + message: msgtxt, + type: MessageType.Error, + additionalText: myMode + // target: sTarget + // processor: mythis.getView().getModel() + }) + ); + +} + + +if (!isError) +{ + this.onOpenDialog(oEvent); +var mycrrundid = this.callb1iphase1(myMode,myBookingdate,oEvent); +console.log("Ergebnis functionhttpcall phase1: " + mycrrundid); +} + + + + + + + + + + } + + }); +}); \ No newline at end of file diff --git a/uniorg/eon/virtaportalui/resources/webapp/css/style.css b/uniorg/eon/virtaportalui/resources/webapp/css/style.css new file mode 100644 index 0000000..f280a0e --- /dev/null +++ b/uniorg/eon/virtaportalui/resources/webapp/css/style.css @@ -0,0 +1 @@ +/* Enter your custom styles here */ \ No newline at end of file diff --git a/uniorg/eon/virtaportalui/resources/webapp/i18n/i18n.properties b/uniorg/eon/virtaportalui/resources/webapp/i18n/i18n.properties new file mode 100644 index 0000000..9e2bd15 --- /dev/null +++ b/uniorg/eon/virtaportalui/resources/webapp/i18n/i18n.properties @@ -0,0 +1,4 @@ +title=VIRTA PORTAL INTERFACE +appTitle=VIRTAPORTAL LOADER +appDescription=App Description +VersionInfo=1.0.7 \ No newline at end of file diff --git a/uniorg/eon/virtaportalui/resources/webapp/index.html b/uniorg/eon/virtaportalui/resources/webapp/index.html new file mode 100644 index 0000000..ae186c6 --- /dev/null +++ b/uniorg/eon/virtaportalui/resources/webapp/index.html @@ -0,0 +1,35 @@ + + + + + + + + BILLINGRUNUI + + + + + + + + + + + + \ No newline at end of file diff --git a/uniorg/eon/virtaportalui/resources/webapp/localService/mockdata/FormsModel.json b/uniorg/eon/virtaportalui/resources/webapp/localService/mockdata/FormsModel.json new file mode 100644 index 0000000..ab9004a --- /dev/null +++ b/uniorg/eon/virtaportalui/resources/webapp/localService/mockdata/FormsModel.json @@ -0,0 +1,158 @@ +{ + "forms": [ + { + "name": "Julie Armstrong", + "street": { + "name": "Mainstreet", + "number": 1278 + }, + "zip": { + "code": 12345, + "city": "Maintown" + }, + "country": "Germany", + "email": "Julie.Armstrong@company.com", + "phone": { + "number": "+1 (610) 661-1000", + "time": "12:00" + }, + "website": "n/a" + }, + { + "name": "Denise Smith", + "street": { + "name": "Mainstreet", + "number": 1567 + }, + "zip": { + "code": 12345, + "city": "Maintown" + }, + "country": "Germany", + "email": "Denise.Smith@company.com", + "phone": { + "number": "+1 (610) 661-1000", + "time": "12:00" + }, + "website": "n/a" + }, + { + "name": "Richard Wilson", + "street": { + "name": "Mainstreet", + "number": 2984 + }, + "zip": { + "code": 12345, + "city": "Maintown" + }, + "country": "Germany", + "email": "Richard.Wilson@company.com", + "phone": { + "number": "+1 (610) 661-1000", + "time": "12:00" + }, + "website": "n/a" + }, + { + "name": "Gerd Becker", + "street": { + "name": "Mainstreet", + "number": 3614 + }, + "zip": { + "code": 12345, + "city": "Maintown" + }, + "country": "Germany", + "email": "Gerd.Becker@company.com", + "phone": { + "number": "+1 (610) 661-1000", + "time": "12:00" + }, + "website": "n/a" + }, + { + "name": "John Miller", + "street": { + "name": "Mainstreet", + "number": 1618 + }, + "zip": { + "code": "AAA", + "city": "Maintown" + }, + "country": "Germany", + "email": "John.Miller@company.com", + "phone": { + "number": "+1 (610) 661-1000", + "time": "12:00" + }, + "website": "n/a" + }, + { + "name": "Stefan Bosch", + "street": { + "name": "Mainstreet", + "number": 4864 + }, + "zip": { + "code": 12345, + "city": "Maintown" + }, + "country": "Germany", + "email": "Stefan.Bosch@company.com", + "phone": { + "number": "+1 (610) 661-1000", + "time": "12:00" + }, + "website": "n/a" + }, + { + "name": "Maria Fontes", + "street": { + "name": "Mainstreet", + "number": 4864 + }, + "zip": { + "code": 12345, + "city": "Maintown" + }, + "country": "Germany", + "email": "", + "phone": { + "number": "+1 (610) 661-1000", + "time": "12:00" + }, + "website": "MariaFontescompany.com" + }, + { + "name": "Antonio Ferrari", + "street": { + "name": "Mainstreet", + "number": 2598 + }, + "zip": { + "code": 12345, + "city": "Maintown" + }, + "country": "Germany", + "email": "Antonio.Ferrari@company.com", + "phone": { + "number": "+1 (610) 661-1000", + "time": "12:00" + }, + "website": "n/a" + } + ], + "employment": [ + { + "jobTitle": "Senior UI Developer (UIDEV-SR)", + "payGrade": "Salary Grade 18 (GR-14", + "unit": "ABC", + "class": "Employee", + "fte": 1, + "weeklyHours": 0 + } + ] +} diff --git a/uniorg/eon/virtaportalui/resources/webapp/manifest.json b/uniorg/eon/virtaportalui/resources/webapp/manifest.json new file mode 100644 index 0000000..597b085 --- /dev/null +++ b/uniorg/eon/virtaportalui/resources/webapp/manifest.json @@ -0,0 +1,97 @@ +{ + "_version": "1.5.0", + "sap.app": { + "id": "uniorg.eon.virtaportalui", + "type": "application", + "i18n": "i18n/i18n.properties", + "applicationVersion": { + "version": "1.0.0" + }, + "title": "{{appTitle}}", + "description": "{{appDescription}}", + "sourceTemplate": { + "id": "hanatemplates.basicSAPUI5ApplicationProject", + "version": "0.0.0" + } + }, + + "sap.ui": { + "technology": "UI5", + "icons": { + "icon": "", + "favIcon": "", + "phone": "", + "phone@2": "", + "tablet": "", + "tablet@2": "" + }, + "deviceTypes": { + "desktop": true, + "tablet": true, + "phone": true + }, + "supportedThemes": [ + "sap_hcb", + "sap_bluecrystal" + ] + }, + + "sap.ui5": { + "rootView": { + "viewName": "uniorg.eon.virtaportalui.view.View1", + "type": "XML" + }, + "dependencies": { + "minUI5Version": "1.30.0", + "libs": { + "sap.ui.core": {}, + "sap.m": {}, + "sap.ui.layout": {}, + "sap.ushell": {}, + "sap.collaboration": {}, + "sap.ui.comp": {}, + "sap.uxap": {} + } + }, + "contentDensities": { + "compact": true, + "cozy": true + }, + "models": { + "i18n": { + "type": "sap.ui.model.resource.ResourceModel", + "settings": { + "bundleName": "uniorg.eon.virtaportalui.i18n.i18n" + } + } + }, + "resources": { + "css": [{ + "uri": "css/style.css" + }] + }, + "routing": { + "config": { + "routerClass": "sap.m.routing.Router", + "viewType": "XML", + "async": true, + "viewPath": "uniorg.eon.virtaportalui.view", + "controlAggregation": "pages", + "controlId": "idAppControl" + }, + "routes": [{ + "name": "RouteView1", + "pattern": "RouteView1", + "target": ["TargetView1"] + }], + "targets": { + "TargetView1": { + "viewType": "XML", + "transition": "slide", + "clearAggregation": true, + "viewName": "View1" + } + } + } + } +} \ No newline at end of file diff --git a/uniorg/eon/virtaportalui/resources/webapp/model/models.js b/uniorg/eon/virtaportalui/resources/webapp/model/models.js new file mode 100644 index 0000000..eb4cd7e --- /dev/null +++ b/uniorg/eon/virtaportalui/resources/webapp/model/models.js @@ -0,0 +1,16 @@ +sap.ui.define([ + "sap/ui/model/json/JSONModel", + "sap/ui/Device" +], function (JSONModel, Device) { + "use strict"; + + return { + + createDeviceModel: function () { + var oModel = new JSONModel(Device); + oModel.setDefaultBindingMode("OneWay"); + return oModel; + } + + }; +}); \ No newline at end of file diff --git a/uniorg/eon/virtaportalui/resources/webapp/view/BusyDialog.fragment.xml b/uniorg/eon/virtaportalui/resources/webapp/view/BusyDialog.fragment.xml new file mode 100644 index 0000000..122da78 --- /dev/null +++ b/uniorg/eon/virtaportalui/resources/webapp/view/BusyDialog.fragment.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/uniorg/eon/virtaportalui/resources/webapp/view/MessageBoxInfo.view.xml b/uniorg/eon/virtaportalui/resources/webapp/view/MessageBoxInfo.view.xml new file mode 100644 index 0000000..be80018 --- /dev/null +++ b/uniorg/eon/virtaportalui/resources/webapp/view/MessageBoxInfo.view.xml @@ -0,0 +1,28 @@ + + + +