Correct export of Delivery Unit EON_EMOBILITY_VIRTA (42 files, replaces incomplete initial export)

This commit is contained in:
Thorsten Schmitz
2026-07-09 02:05:30 +02:00
parent dafd956626
commit 3348c5d03b
42 changed files with 6303 additions and 157 deletions
+26 -26
View File
@@ -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
@@ -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
@@ -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
@@ -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
+9 -9
View File
@@ -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"))
;
+10 -10
View File
@@ -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")
);
+290
View File
@@ -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;
+269
View File
@@ -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;
@@ -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)
+15 -15
View File
@@ -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
);
);
+438
View File
@@ -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();
+557
View File
@@ -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();
+216
View File
@@ -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();
+1 -1
View File
@@ -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;
+416
View File
@@ -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();
+492
View File
@@ -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();
+454
View File
@@ -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);
}
+684
View File
@@ -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();
+439
View File
@@ -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();
+533
View File
@@ -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();