From 3bc9952f6dfce3995ca4496c699f3726cb28985b Mon Sep 17 00:00:00 2001 From: Arthur Egberink Date: Tue, 26 Sep 2023 07:09:00 +0000 Subject: [PATCH] DLLG#79179 -- Aanpassing koppeling met Brivo. svn path=/Customer/trunk/; revision=61890 --- DLLG/DLLG.sql | 154 +++++++------------------------------------------- 1 file changed, 21 insertions(+), 133 deletions(-) diff --git a/DLLG/DLLG.sql b/DLLG/DLLG.sql index 9a7f78ea9..26ffd9003 100644 --- a/DLLG/DLLG.sql +++ b/DLLG/DLLG.sql @@ -329,125 +329,14 @@ AS p_facility_code VARCHAR2) RETURN VARCHAR2 AS - v_card_bin VARCHAR2 (100); - v_facility_bin VARCHAR2 (100); - v_card_hex VARCHAR2 (100); - v_facility_hex VARCHAR2 (100); - v_bin VARCHAR2 (100); - v_bin_str VARCHAR2 (100); - v_result VARCHAR2 (100); - v_length NUMBER; - v_count NUMBER; - v_bit VARCHAR2 (1); - v_dec NUMBER; - - FUNCTION OneHex2Bin (p_hex VARCHAR2) - RETURN VARCHAR2 - AS - v_result VARCHAR2 (10); - BEGIN - IF p_hex = '0' - THEN - v_result := '0000'; - ELSIF p_hex = '1' - THEN - v_result := '0001'; - ELSIF p_hex = '2' - THEN - v_result := '0010'; - ELSIF p_hex = '3' - THEN - v_result := '0011'; - ELSIF p_hex = '4' - THEN - v_result := '0100'; - ELSIF p_hex = '5' - THEN - v_result := '0101'; - ELSIF p_hex = '6' - THEN - v_result := '0110'; - ELSIF p_hex = '7' - THEN - v_result := '0111'; - ELSIF p_hex = '8' - THEN - v_result := '1000'; - ELSIF p_hex = '9' - THEN - v_result := '1001'; - ELSIF p_hex = 'A' - THEN - v_result := '1010'; - ELSIF p_hex = 'B' - THEN - v_result := '1011'; - ELSIF p_hex = 'C' - THEN - v_result := '1100'; - ELSIF p_hex = 'D' - THEN - v_result := '1101'; - ELSIF p_hex = 'E' - THEN - v_result := '1110'; - ELSIF p_hex = 'F' - THEN - v_result := '1111'; - END IF; - - RETURN v_result; - END; + v_result VARCHAR2(10); BEGIN - v_card_hex := p_card_number; - - -- transform the hex card data into a binary string - FOR v_index IN 1 .. 4 - LOOP - v_card_bin := - v_card_bin || OneHex2Bin (SUBSTR (v_card_hex, 1, 1)); - v_card_hex := SUBSTR (v_card_hex, 2, 4); - END LOOP; - - -- add the parity bit - --v_card_bin := set_parity (v_card_bin, 'after', 1); - - -- transform the hex facility data into a binary string - v_facility_hex := p_facility_code; - - FOR v_index IN 1 .. 2 - LOOP - v_facility_bin := - v_facility_bin || OneHex2Bin (SUBSTR (v_facility_hex, 1, 1)); - v_facility_hex := SUBSTR (v_facility_hex, 2, 4); - END LOOP; - - -- add the parity bit - -- v_facility_bin := set_parity (v_facility_bin, 'before', 0); - - -- combine the facility data and the card data - v_bin := v_facility_bin || v_card_bin; - -- the first 12 bits have an even leading parity bit - -- the last 12 bits have a trailing odd parity bit - -- bij de decimale uitvoering doen we geen parity - --v_bin := set_parity (SUBSTR(v_bin, 1,12), 'before', 0) || set_parity (SUBSTR(v_bin, 13,12), 'after', 1); - - -- and convert the binary string into hex - v_dec := 0; - v_count := 0; - WHILE v_bin IS NOT NULL - LOOP - v_bit := SUBSTR(v_bin, LENGTH(v_bin), 1); - IF v_bit = 1 - THEN - v_dec := v_dec + POWER(2,v_count); - END IF; - v_bin := SUBSTR(v_bin, 1, LENGTH(v_bin)-1); - v_count := v_count + 1; - END LOOP; - - RETURN v_dec; + v_result := to_number (p_facility_code || p_card_number, 'XXXXXX'); + RETURN v_result; + EXCEPTION WHEN OTHERS + THEN + RETURN NULL; END; PROCEDURE update_bezoeker (p_bezkey IN NUMBER) @@ -597,36 +486,35 @@ AS p_bezkey, '123'); + -- Vul het flexveld hex code met de hex waarde die gescant moet worden. + -- We gebruiken hiervoor 'The Standard 26-Bit Format' + FLX.setflex ( + 'BEZ', + v_hex_code_key, + p_bezkey, + DLLG.get_hex_card_data ( + LPAD (TRIM (TO_CHAR (v_code, 'XXXXXX')), 4, '0'), + LPAD (TRIM (TO_CHAR (123, 'XXXXXX')), 2, '0'))); - -- Vanaf 1 oktober 2023 gaan we de decimale code gebruiken ipv de hex code (DLLG#79179) - IF UPPER(v_bedrijf) LIKE '%FORTEZZA%' + -- Vanaf 4 oktober 2023 gaan we de nieuwe decimale code gebruiken (DLLG#79179) + -- Dat is de decimale + IF v_date > TO_DATE('20231004', 'yyyymmdd') THEN FLX.setflex ( 'BEZ', - v_hex_code_key, + v_dec_code_key, p_bezkey, DLLG.get_dec_card_data ( LPAD (TRIM (TO_CHAR (v_code, 'XXXXXX')), 4, '0'), LPAD (TRIM (TO_CHAR (123, 'XXXXXX')), 2, '0'))); - ELSE - -- Vul het flexveld hex code met de hex waarde die gescant moet worden. - -- We gebruiken hiervoor 'The Standard 26-Bit Format' FLX.setflex ( 'BEZ', - v_hex_code_key, + v_dec_code_key, p_bezkey, - DLLG.get_hex_card_data ( - LPAD (TRIM (TO_CHAR (v_code, 'XXXXXX')), 4, '0'), - LPAD (TRIM (TO_CHAR (123, 'XXXXXX')), 2, '0'))); + '123' || LPAD(TRIM(v_code), 5, '0')); END IF; - FLX.setflex ( - 'BEZ', - v_dec_code_key, - p_bezkey, - '123' || LPAD(TRIM(v_code), 5, '0')); - END; PROCEDURE set_bezoeker_syncdate (p_bezkey IN NUMBER,