STCH#51457 -- Strukton koppeling voor Sitech

svn path=/Customer/trunk/; revision=36812
This commit is contained in:
Robin Stoker
2018-02-01 14:42:06 +00:00
parent 03d7fb8c0a
commit fabfe9c0c1

View File

@@ -16,70 +16,533 @@ SET DEFINE OFF
------ payload begin ------
CREATE OR REPLACE VIEW stch_v_rap_opdrkosten
(
PO_NUMMER,
OPDRACHTNR,
KOSTENPLAATS,
BEDRAG,
UITVOERENDE,
OPDRACHT_AFGEMELD
)
AS
SELECT cn.cnt_contract_nummer,
sd.ins_srtdiscipline_prefix
|| TO_CHAR (m.mld_melding_key)
|| '/'
|| mo.mld_opdr_bedrijfopdr_volgnr,
pk.prs_kostenplaats_omschrijving,
mo.mld_opdr_kosten,
pb.prs_bedrijf_naam,
mld.getopdrachtstatusdate (mo.mld_opdr_key, 6)
FROM mld_opdr mo,
cnt_contract cn,
mld_melding m,
ins_srtdiscipline sd,
mld_stdmelding s,
mld_discipline md,
prs_kostenplaats pk,
prs_bedrijf pb
WHERE mo.cnt_contract_key = cn.cnt_contract_key
AND m.mld_melding_key = mo.mld_melding_key(+)
AND s.mld_stdmelding_key = m.mld_stdmelding_key
AND md.ins_discipline_key = s.mld_ins_discipline_key
AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key
AND mo.prs_kostenplaats_key = pk.prs_kostenplaats_key
AND mo.mld_uitvoerende_keys = pb.prs_bedrijf_key
AND mo.mld_statusopdr_key = 6
AND mld.getopdrachtstatusdate (mo.mld_opdr_key, 6) > sysdate - 7;
--CREATE OR REPLACE VIEW stch_v_rap_opdrkosten
--(
-- PO_NUMMER,
-- -- PO_ITEMNR,
-- BEDRAG,
-- KOSTENPLAATS,
-- OPDRACHTNR,
-- OPDRACHT_AFGEMELD
--)
--AS
-- SELECT cn.cnt_contract_nummer,
-- -- PO itemnr
-- mo.mld_opdr_kosten,
-- pk.prs_kostenplaats_omschrijving,
-- sd.ins_srtdiscipline_prefix
-- || TO_CHAR (m.mld_melding_key)
-- || '/'
-- || mo.mld_opdr_bedrijfopdr_volgnr,
-- mld.getopdrachtstatusdate (mo.mld_opdr_key, 6)
-- FROM mld_opdr mo,
-- cnt_contract cn,
-- mld_melding m,
-- ins_srtdiscipline sd,
-- mld_stdmelding s,
-- mld_discipline md,
-- prs_kostenplaats pk,
-- prs_bedrijf pb
-- WHERE mo.cnt_contract_key = cn.cnt_contract_key
-- AND m.mld_melding_key = mo.mld_melding_key(+)
-- AND s.mld_stdmelding_key = m.mld_stdmelding_key
-- AND md.ins_discipline_key = s.mld_ins_discipline_key
-- AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key
-- AND mo.prs_kostenplaats_key = pk.prs_kostenplaats_key
-- AND mo.mld_uitvoerende_keys = pb.prs_bedrijf_key
-- AND mo.mld_statusopdr_key = 6
-- AND mld.getopdrachtstatusdate (mo.mld_opdr_key, 6) > sysdate - 7;
--
--CREATE OR REPLACE VIEW stch_v_export_sap
--(
-- result,
-- result_order
--)
--AS
-- SELECT '"PO Nummer"'
-- || ';"opdrachtnummer"'
-- || ';"kostenplaats"'
-- || ';"bedrag"'
-- || ';"uitvoerende"',
-- 0
-- FROM DUAL
-- UNION ALL
-- SELECT '"'
-- || po_nummer
-- || '";"'
-- || opdrachtnr
-- || '";"'
-- || kostenplaats
-- || '";"'
-- || bedrag
-- || '";"'
-- || uitvoerende
-- || '"',
-- 1
-- FROM stch_v_rap_opdrkosten;
CREATE OR REPLACE VIEW stch_v_export_sap
-- Strukton koppeling (uit AAXX.sql, nu naar STCH)
CREATE OR REPLACE PROCEDURE stch_import_opdrstat_strukton (
p_import_key IN NUMBER)
AS
c_delim VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (4000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (1200);
v_dummy VARCHAR2 (200);
header_is_valid NUMBER := 0;
v_count NUMBER;
v_count_tot NUMBER (10) := 0;
v_count_import NUMBER (10) := 0;
v_ongeldig NUMBER (1) := 0;
-- De importvelden
v_mld_opdr_opmerking VARCHAR2 (4000);
v_mld_opdr_key NUMBER (10);
v_mld_opdr_key_tekst VARCHAR2 (100);
v_extern_nummer VARCHAR2 (100);
v_status NUMBER (10);
v_status_tekst VARCHAR2 (100);
v_status_code VARCHAR2 (100);
v_datumtijd DATE;
v_datumtijd_tekst VARCHAR2 (100);
v_opmerking VARCHAR2 (3000);
-- Overige velden:
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
DELETE FROM aaxx_imp_opdrstat_strukton;
COMMIT;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := 0;
fac.imp_getfield (v_newline, c_delim, v_mld_opdr_key_tekst);
fac.imp_getfield (v_newline, c_delim, v_extern_nummer);
fac.imp_getfield (v_newline, c_delim, v_status_code); -- typeID
fac.imp_getfield (v_newline, c_delim, v_datumtijd_tekst);
fac.imp_getfield (v_newline, c_delim, v_status_tekst);
fac.imp_getfield (v_newline, c_delim, v_opmerking);
v_opmerking := substr(v_opmerking, 1, 1000);
-- verwijder de markering voor cr/lf die we zelf in de stylesheet toegevoegd hebben.
v_opmerking := replace(v_opmerking, '@@',CHR (13));
v_aanduiding :=
'['
|| v_extern_nummer
|| '|'
|| v_mld_opdr_key_tekst
|| '|'
|| v_status_tekst
|| '|'
|| v_opmerking
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (TRIM (v_mld_opdr_key_tekst)) = 'REFERENCEID'
AND UPPER (TRIM (v_extern_nummer)) = 'SERVICEREQUESTID'
AND UPPER (TRIM (v_status_code)) = 'TYPEID'
AND UPPER (TRIM (v_datumtijd_tekst)) = 'DATETIME'
AND UPPER (TRIM (v_opmerking)) = 'REMARKS'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Fout inlezen mld_opdr_key [' || v_aanduiding || ']';
v_mld_opdr_key := TRIM (v_mld_opdr_key);
BEGIN
SELECT o.mld_opdr_key, o.mld_opdr_opmerking
INTO v_mld_opdr_key, v_mld_opdr_opmerking
FROM mld_opdr o, mld_melding m, ins_tab_discipline d, ins_srtdiscipline sd, mld_stdmelding std
WHERE o.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr = v_mld_opdr_key_tekst;
EXCEPTION WHEN NO_DATA_FOUND THEN
BEGIN
fac.imp_writelog (p_import_key, 'W', 'Opdracht kan niet gevonden worden. [' || v_aanduiding || ']', '');
-- kijk nu of de opdracht gevonden kan worden a.d.h.v het Struktonnummer
SELECT o.mld_opdr_key, o.mld_opdr_opmerking
INTO v_mld_opdr_key, v_mld_opdr_opmerking
FROM mld_opdr o, mld_kenmerkopdr ko, mld_kenmerk k
WHERE o.mld_opdr_key = ko.mld_opdr_key
AND ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 35
AND ko.mld_kenmerkopdr_waarde = v_extern_nummer;
EXCEPTION WHEN OTHERS THEN
v_ongeldig := 1;
v_errormsg := 'Opdracht kan niet gevonden worden (intern/externnr). [' || v_aanduiding || ']';
v_mld_opdr_key := NULL;
END;
END;
IF v_ongeldig = 0
THEN
v_errormsg :=
'Fout bij bepalen status [' || v_aanduiding || ']';
CASE
WHEN v_status_code = '5'
THEN
v_status := 5; -- uitgegeven
WHEN v_status_code = '10'
THEN
v_status := 8; -- geaccepteerd
WHEN v_status_code = '20' -- monteur gereed
THEN
v_status := 6; -- afgemeld
WHEN v_status_code = '25' -- specialist gereed
THEN
v_status := 6; -- afgemeld
WHEN v_status_code = '30' -- technisch gereed
THEN
v_status := 6; -- afgemeld
-- For future use
-- WHEN v_status_code = '40' -- uitgeprijst
-- THEN
-- v_status := 6; -- afgemeld
WHEN v_status_code = '70'
THEN
v_status := 1; -- geannuleerd
WHEN v_status_code = '80'
THEN
v_status := 1; -- afgewezen
ELSE
v_status := NULL;
v_ongeldig := 1; -- nog te bezien.
END CASE;
END IF;
-- Lees alle veldwaarden
IF v_ongeldig = 0
THEN
v_errormsg :=
'Fout bij converteren datumtijd [' || v_aanduiding || ']';
IF INSTR (v_datumtijd_tekst, '.') > 0
THEN
v_datumtijd :=
fac.safe_to_date (
REPLACE (
SUBSTR (v_datumtijd_tekst,
1,
INSTR (v_datumtijd_tekst, '.') - 1),
'T',
' '),
'yyyy-mm-dd hh24:mi:ss');
ELSE
v_datumtijd := fac.safe_to_date(v_datumtijd_tekst, 'yyyy-mm-dd hh24:mi:ss');
END IF;
IF v_datumtijd = NULL
THEN
v_ongeldig := 0;
END IF;
END IF;
IF v_ongeldig = 0
THEN
v_errormsg :=
'Fout bij aanvullen opmerking [' || v_aanduiding || ']';
-- controleer of de opmerking niet leeg is en of dezelfde opmerking al bij een eerdere statusovergang
-- gemeld is.
IF v_opmerking IS NOT NULL AND INSTR(COALESCE(v_mld_opdr_opmerking, 'QueQuLeQue'), v_opmerking) = 0
THEN
v_opmerking :=
'['
|| v_datumtijd_tekst
|| '] - '
|| v_status_tekst
|| CHR (13)
|| CHR (10)
|| v_opmerking;
ELSE
v_opmerking :=
'[' || v_datumtijd_tekst || '] - ' || v_status_tekst;
END IF;
END IF;
-- Insert geformatteerde import record
IF (v_ongeldig = 0)
THEN
BEGIN
v_errormsg :=
'Fout toevoegen opdracht status ['
|| v_aanduiding
|| ']';
INSERT INTO aaxx_imp_opdrstat_strukton (mld_opdr_key,
extern_nummer,
status,
datumtijd,
opmerking)
VALUES (v_mld_opdr_key,
v_extern_nummer,
v_status,
v_datumtijd,
v_opmerking);
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || v_errormsg,
'Fout bij toevoegen regel aan importtabel aaxx_imp_opdr_status_strukton.');
END;
ELSE
IF v_status_code <> '40' AND v_status_code <> '45'
THEN
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'');
END IF;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := SUBSTR(
v_errormsg
|| 'ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')', 1, 490);
fac.imp_writelog (p_import_key,
'E',
SUBSTR(v_aanduiding, 1, 500) || ' - ' || v_errormsg,
'Inleesproces opdrachtstatusberichten afgebroken!');
END;
/
CREATE OR REPLACE PROCEDURE stch_update_opdrstat_strukton (p_import_key IN NUMBER)
AS
-- Cursor loopt - in volgorde! - over alle ingelezen opdrachtstatusberichten.
CURSOR c1
IS
SELECT mld_opdr_key,
extern_nummer,
datumtijd,
status,
opmerking
FROM aaxx_imp_opdrstat_strukton
ORDER BY 1, 3;
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count NUMBER (10);
v_mld_key NUMBER (10) := 0;
v_opdr_key NUMBER (10) := 0;
v_opdr_status NUMBER (10) := 0;
v_user_key NUMBER (10) := 0;
v_mld_typeopdr_key NUMBER (10);
v_mld_kenmerk_key NUMBER (10);
v_mld_kenmerkopdr_key NUMBER (10);
v_mld_srtkenmerk_key NUMBER (10);
BEGIN
-- Loop door alle geimporteerde opdrachtstatusberichten en verwerk deze.
v_count_tot := 0;
-- Stel de key in van het srtkenmerk 'Ref. Nr. Leverancier'. Hier wordt
-- het nummer dat Strukton aan de call gegeven heeft geregistreerd.
v_mld_srtkenmerk_key := 123;
v_user_key := 10; -- Strukton user
FOR rec IN c1
LOOP
BEGIN
v_aanduiding :=
'['
|| rec.mld_opdr_key
|| '|'
|| SUBSTR (rec.opmerking, 1, 100)
|| '] ';
v_count_tot := v_count_tot + 1;
v_count := 0;
-- Key van melding/opdracht bepalen en externnr bij opdracht opslaan.
IF (rec.mld_opdr_key IS NOT NULL)
THEN
v_errormsg := 'Fout bij bepalen opdracht.';
SELECT mld_melding_key, mld_opdr_key, mld_statusopdr_key, mld_typeopdr_key
INTO v_mld_key, v_opdr_key, v_opdr_status, v_mld_typeopdr_key
FROM mld_opdr
WHERE mld_opdr_key = rec.mld_opdr_key;
v_errormsg := 'Fout bij bepalen kenmerk extern nummer.';
SELECT k.mld_kenmerk_key
INTO v_mld_kenmerk_key
FROM mld_kenmerk k
WHERE k.mld_srtkenmerk_key = v_mld_srtkenmerk_key
AND k.mld_typeopdr_key = v_mld_typeopdr_key;
v_errormsg := 'Fout bij bepalen kenmerkopdracht extern nummer.';
SELECT max(ko.mld_kenmerkopdr_key)
INTO v_mld_kenmerkopdr_key
FROM mld_kenmerkopdr ko
WHERE ko.mld_opdr_key = v_opdr_key
AND v_mld_kenmerk_key = ko.mld_kenmerk_key;
v_errormsg := 'Fout bij aanpassen extern nummer.';
IF v_mld_kenmerkopdr_key IS NULL THEN
-- kenmerk toevoegen
INSERT INTO mld_kenmerkopdr (mld_kenmerk_key, mld_opdr_key, mld_kenmerkopdr_waarde)
VALUES (v_mld_kenmerk_key, v_opdr_key, rec.extern_nummer);
ELSE
-- kenmerk aanpassen
UPDATE mld_kenmerkopdr SET mld_kenmerkopdr_waarde = rec.extern_nummer WHERE mld_kenmerkopdr_key = v_mld_kenmerkopdr_key;
END IF;
v_errormsg := 'Fout bij bijwerken opdracht-opmerking.';
v_count := LENGTH (rec.opmerking) + 5; -- Beetje speling qua lengte!
UPDATE mld_opdr
SET mld_opdr_opmerking =
DECODE (
mld_opdr_opmerking,
NULL,
rec.opmerking,
rec.opmerking
|| CHR (13)
|| CHR (10)
|| SUBSTR (mld_opdr_opmerking, 1, (4000 - v_count)))
WHERE mld_opdr_key = v_opdr_key;
IF v_opdr_status <> rec.status
THEN
IF rec.status = 8 AND v_opdr_status = 5
THEN
-- Accepteer opdracht als de opdracht uitgegeven was
MLD.setopdrachtstatus (v_opdr_key, 8, v_user_key); -- Facilitor
ELSIF rec.status = 6 AND v_opdr_status = 5
THEN
-- Meld de opdracht af als deze uitgegeven was
MLD.setopdrachtstatus (v_opdr_key, 8, v_user_key); -- Facilitor, eerst accepteren
MLD.setopdrachtstatus (v_opdr_key, 6, v_user_key); -- Facilitor
ELSIF rec.status = 6 AND v_opdr_status = 8
THEN
-- Meld de opdracht af als deze geaccepteerd was
MLD.setopdrachtstatus (v_opdr_key, 6, v_user_key); -- Facilitor
ELSIF rec.status = 1 AND v_opdr_status = 5
THEN
-- Opdracht is afgewezen op het moment dat de opdracht nog niet geaccepteerd is.
MLD.setopdrachtstatus (v_opdr_key, 1, v_user_key); -- Facilitor
MLD.updatemeldingstatusAV (v_mld_key, 0, v_user_key, 0);
ELSIF rec.status = 1 AND v_opdr_status = 8
THEN
-- Opdracht is afgewezen op het moment dat de opdracht al geaccepteerd is.
MLD.setopdrachtstatus (v_opdr_key, 1, v_user_key); -- Facilitor
MLD.updatemeldingstatusAV (v_mld_key, 0, v_user_key, 0);
END IF;
IF rec.status = 6 AND v_opdr_status <> 6
THEN
v_errormsg := 'Fout bij statusaanpassing melding.';
-- Sinds AADO#30922 wordt de melding niet meer automatisch afgemeld.
MLD.updatemeldingstatusAV (v_mld_key, 0, v_user_key, 0);
END IF;
END IF;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Fout bij verwerken opdrachtstatusbericht.');
END;
END LOOP;
COMMIT;
END;
/
-- Rapportage voor login
CREATE OR REPLACE VIEW STCH_V_RAP_NOLOGIN
(
result,
result_order
VOORNAAM,
ACHTERNAAM,
EMAIL,
LAATSTE_LOGIN
)
AS
SELECT '"PO Nummer"'
|| ';"opdrachtnummer"'
|| ';"kostenplaats"'
|| ';"bedrag"'
|| ';"uitvoerende"',
0
FROM DUAL
UNION ALL
SELECT '"'
|| po_nummer
|| '";"'
|| opdrachtnr
|| '";"'
|| kostenplaats
|| '";"'
|| bedrag
|| '";"'
|| uitvoerende
|| '"',
1
FROM stch_v_rap_opdrkosten;
SELECT pa.prs_perslid_voornaam,
pa.prs_perslid_naam,
pa.prs_perslid_email,
pa.prs_perslid_login
FROM prs_v_aanwezigperslid pa, prs_perslid p
WHERE pa.prs_perslid_login < SYSDATE - 30
AND p.prs_perslid_key = pa.prs_perslid_key
AND pa.prs_perslid_naam NOT LIKE '%INACTIEF%'
AND p.prs_perslid_verwijder IS NULL;
------ payload end ------