LOGC#65847 -- SAP projecten importeren in Facilitor

svn path=/Customer/trunk/; revision=49846
This commit is contained in:
Arthur Egberink
2021-02-15 18:19:31 +00:00
parent 8c0d72bed3
commit 847cd6b841

View File

@@ -683,6 +683,468 @@ AS
and a.prs_afdeling_parentkey = a1.prs_afdeling_key(+)
AND datum > TO_DATE ('20200101', 'yyyymmdd');
CREATE OR REPLACE PROCEDURE logc_import_projecten (p_import_key IN NUMBER)
IS
c_delim VARCHAR2 (1) := ';';
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200) := '';
header_is_valid NUMBER := 0;
v_count_tot NUMBER (10) := 0;
v_count_import NUMBER (10) := 0;
v_ongeldig NUMBER (1);
v_field VARCHAR2 (100);
v_index NUMBER (2);
v_maxdate DATE;
v_mindate DATE;
-- De importvelden:
v_KlantOmschrijving VARCHAR2 (100);
v_WBSelement VARCHAR2 (100);
v_Projectsoort VARCHAR2 (100);
v_Omschrijving VARCHAR2 (100);
v_Status VARCHAR2 (100);
v_Debiteur VARCHAR2 (100);
v_PlanWorktime VARCHAR2 (100);
v_ActualWorktime VARCHAR2 (100);
v_ActualWorkCosts VARCHAR2 (100);
v_PlanWorkCosts VARCHAR2 (100);
v_InvoiceReceived VARCHAR2 (100);
v_InvoicePosted VARCHAR2 (100);
v_ProjektManagerLogin VARCHAR2 (100);
v_SalesPersonNr VARCHAR2 (100);
v_NameSalesPerson VARCHAR2 (100);
v_prs_kostenplaats_key NUMBER (10);
v_budgethouder_key NUMBER (10);
v_kostenplaats_key NUMBER (10);
v_kostenplaatsgrp_key NUMBER (10);
CURSOR c1 IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout bij opvragen importregel';
v_aanduiding := '';
v_ongeldig := 0;
IF v_newline LIKE ';;;;;;%'
THEN
NULL; -- Lege regels slaan we over
ELSE
-- Lees alle veldwaarden
fac.imp_getfield_nr (v_newline,
c_delim,
2,
v_KlantOmschrijving);
fac.imp_getfield_nr (v_newline,
c_delim,
3,
v_WBSelement);
fac.imp_getfield_nr (v_newline,
c_delim,
4,
v_Projectsoort);
fac.imp_getfield_nr (v_newline,
c_delim,
5,
v_Omschrijving);
fac.imp_getfield_nr (v_newline,
c_delim,
6,
v_Status);
fac.imp_getfield_nr (v_newline,
c_delim,
7,
v_Debiteur);
fac.imp_getfield_nr (v_newline,
c_delim,
10,
v_PlanWorktime);
fac.imp_getfield_nr (v_newline,
c_delim,
11,
v_ActualWorktime);
fac.imp_getfield_nr (v_newline,
c_delim,
12,
v_ActualWorkCosts);
fac.imp_getfield_nr (v_newline,
c_delim,
13,
v_PlanWorkCosts);
fac.imp_getfield_nr (v_newline,
c_delim,
14,
v_InvoiceReceived);
fac.imp_getfield_nr (v_newline,
c_delim,
15,
v_InvoicePosted);
fac.imp_getfield_nr (v_newline,
c_delim,
16,
v_ProjektManagerLogin);
fac.imp_getfield_nr (v_newline,
c_delim,
17,
v_SalesPersonNr);
fac.imp_getfield_nr (v_newline,
c_delim,
18,
v_NameSalesPerson);
IF (header_is_valid = 0)
THEN
IF UPPER (v_KlantOmschrijving) = 'OMSCHRIJVING'
AND UPPER (v_WBSelement) = 'WBS-ELEMENT'
AND UPPER (v_Projectsoort) = 'PROJECTSOORT'
AND UPPER (v_Omschrijving) = 'OMSCHRIJVING'
AND UPPER (v_Status) = 'STATUS'
AND UPPER (v_Debiteur) = 'DEBITEUR'
AND UPPER (v_PlanWorktime) = 'PLAN WORKTIME'
AND UPPER (v_ActualWorktime) = 'ACTUAL WORKTIME'
AND UPPER (v_ActualWorkCosts) = 'ACTUAL WORK COSTS'
AND UPPER (v_PlanWorkCosts) = 'PLAN WORK COSTS'
AND UPPER (v_InvoiceReceived) = 'INVOICE RECEIVED'
AND UPPER (v_InvoicePosted) = 'INVOICE POSTED'
AND UPPER (v_ProjektManagerLogin) = 'PROJEKTLEITER'
AND UPPER (v_SalesPersonNr) = 'SALES PERSON'
AND UPPER (v_NameSalesPerson) = 'NAME SALES REPRESEN'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
v_aanduiding := v_WBSelement || ' - ';
-- We gaan duizendtal tekens verwijderen en vervolgens de komma als scheidingsteken vervangen
-- door een punt
v_PlanWorktime := REPLACE(REPLACE(v_PlanWorktime, '.'), ',', '.');
v_ActualWorktime := REPLACE(REPLACE(v_ActualWorktime, '.'), ',', '.');
v_ActualWorkCosts := REPLACE(REPLACE(v_ActualWorkCosts, '.'), ',', '.');
v_PlanWorkCosts := REPLACE(REPLACE(v_PlanWorkCosts, '.'), ',', '.');
v_InvoiceReceived := REPLACE(REPLACE(v_InvoiceReceived, '.'), ',', '.');
v_InvoicePosted := REPLACE(REPLACE(v_InvoicePosted, '.'), ',', '.');
-- Controleer alle veldwaarden
--
v_errormsg := 'Projectsoort ongeldig ' || v_Projectsoort;
IF v_Projectsoort NOT IN ('WF', 'DA')
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
ELSIF v_Projectsoort IS NULL
THEN
v_ongeldig := 1;
ELSE
BEGIN
SELECT prs_kostenplaatsgrp_key
INTO v_kostenplaatsgrp_key
FROM prs_kostenplaatsgrp
WHERE prs_kostenplaatsgrp_nr =
DECODE (v_Projectsoort,
'WF', 'F',
'DA', 'N');
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END;
END IF;
IF v_Status <> 'R'
THEN
v_ongeldig := 1;
END IF;
v_errormsg :=
'v_PlanWorktime ongeldig ' || v_PlanWorktime;
IF FAC.safe_to_number (v_PlanWorktime) IS NULL
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
v_errormsg :=
'v_ActualWorktime ongeldig ' || v_ActualWorktime;
IF FAC.safe_to_number (v_ActualWorktime) IS NULL
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
v_errormsg :=
'v_ActualWorkCosts ongeldig ' || v_ActualWorkCosts;
IF FAC.safe_to_number (v_ActualWorkCosts) IS NULL
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
v_errormsg :=
'v_PlanWorkCosts ongeldig ' || v_PlanWorkCosts;
IF FAC.safe_to_number (v_PlanWorkCosts) IS NULL
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
v_errormsg :=
'v_InvoiceReceived ongeldig ' || v_InvoiceReceived;
IF FAC.safe_to_number (v_InvoiceReceived) IS NULL
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
v_errormsg :=
'v_InvoicePosted ongeldig ' || v_InvoicePosted;
IF FAC.safe_to_number (v_InvoicePosted) IS NULL
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
v_errormsg :=
'v_ProjektManagerLogin ongeldig '
|| v_ProjektManagerLogin;
BEGIN
SELECT prs_perslid_key
INTO v_budgethouder_key
FROM prs_perslid
WHERE prs_perslid_oslogin = v_ProjektManagerLogin;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_ongeldig := 1;
END;
-- We gaan eerst de kostenplaats aanpassen
IF v_ongeldig = 0
THEN
BEGIN
v_errormsg :=
'Kijken of de kostenplaats al bestaat';
BEGIN
SELECT prs_kostenplaats_key
INTO v_kostenplaats_key
FROM prs_kostenplaats
WHERE prs_kostenplaats_nr = v_WBSelement;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
INSERT INTO prs_kostenplaats (
prs_kostenplaats_nr,
prs_kostenplaats_omschrijving,
prs_kostenplaatsgrp_key,
prs_kostenplaats_module)
VALUES (
SUBSTR (v_WBSelement, 1, 30),
SUBSTR (v_Omschrijving, 1, 60),
v_kostenplaatsgrp_key,
'PRS')
RETURNING prs_kostenplaats_key
INTO v_kostenplaats_key;
END;
BEGIN
SELECT prs_kostenplaats_key
INTO v_kostenplaats_key
FROM logc_imp_projecten
WHERE prs_kostenplaats_key = v_kostenplaats_key;
EXCEPTION WHEN NO_DATA_FOUND
THEN
INSERT INTO logc_imp_projecten (
prs_kostenplaats_key)
VALUES (v_kostenplaats_key);
END;
UPDATE prs_kostenplaats
SET prs_kostenplaats_omschrijving =
SUBSTR (v_Omschrijving, 1, 60),
prs_kostenplaatsgrp_key =
v_kostenplaatsgrp_key,
prs_kostenplaats_module = 'PRS',
prs_kostenplaats_eind = NULL,
prs_perslid_key = v_budgethouder_key
WHERE prs_kostenplaats_key = v_kostenplaats_key;
UPDATE logc_imp_projecten
SET KlantOmschrijving =
SUBSTR (v_KlantOmschrijving, 1, 100),
WBSelement = SUBSTR (v_WBSelement, 1, 30),
Projectsoort =
SUBSTR (v_Projectsoort, 1, 2),
Omschrijving =
SUBSTR (v_Omschrijving, 1, 100),
Status = SUBSTR (v_Status, 1, 1),
Debiteur = SUBSTR (v_Debiteur, 1, 10),
PlanWorktime =
FAC.safe_to_number (v_PlanWorktime),
ActualWorktime =
FAC.safe_to_number (v_ActualWorktime),
ActualWorkCosts =
FAC.safe_to_number (v_ActualWorkCosts),
PlanWorkCosts =
FAC.safe_to_number (v_PlanWorkCosts),
InvoiceReceived =
FAC.safe_to_number (v_InvoiceReceived),
InvoicePosted =
FAC.safe_to_number (v_InvoicePosted),
ProjektManagerLogin =
SUBSTR (v_ProjektManagerLogin, 1, 10),
SalesPersonNr =
SUBSTR (v_SalesPersonNr, 1, 10),
NameSalesPerson =
SUBSTR (v_NameSalesPerson, 1, 40),
fac_import_key = p_import_key
WHERE prs_kostenplaats_key = v_kostenplaats_key;
COMMIT;
END;
END IF;
END IF;
END IF;
END;
END LOOP;
UPDATE prs_kostenplaats
SET prs_kostenplaats_eind = SYSDATE
WHERE prs_kostenplaats_key NOT IN (SELECT prs_kostenplaats_key
FROM logc_imp_projecten
WHERE fac_import_key = p_import_key)
AND prs_kostenplaatsgrp_key IN (22, 23) -- Nacalculatie, Fixed budget
AND prs_kostenplaats_eind IS NULL;
IF header_is_valid = 0
THEN
fac.imp_writelog (
p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!'
|| '('
|| v_KlantOmschrijving
|| '-'
|| v_WBSelement
|| '-'
|| v_Projectsoort
|| '-'
|| v_Omschrijving
|| '-'
|| v_Status
|| '-'
|| v_Debiteur
|| '-'
|| v_ActualWorktime
|| '-'
|| v_ActualWorkCosts
|| '-'
|| v_PlanWorkCosts
|| '-'
|| v_InvoiceReceived
|| '-'
|| v_InvoicePosted
|| '-'
|| v_ProjektManagerLogin
|| '-'
|| v_SalesPersonNr
|| '-'
|| v_NameSalesPerson
|| ')');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inleesproces projecten afgebroken!');
END logc_import_projecten;
/
CREATE OR REPLACE VIEW logc_v_rap_projecten
AS
SELECT prs_kostenplaats_nr,
prs_kostenplaats_omschrijving,
prs_kostenplaats_begin,
prs_kostenplaats_eind,
prs_kostenplaatsgrp_oms,
klantomschrijving,
debiteur,
planworktime,
actualworktime,
planworktime - actualworktime remainingworktime,
planworkcosts,
actualworkcosts,
planworkcosts - actualworkcosts remainingworkcosts,
invoiceposted,
invoicereceived,
prs_perslid_naam_full projectmanager,
namesalesperson salesconctact,
i.fac_import_datum_gelezen syncdate
FROM prs_kostenplaats k,
prs_kostenplaatsgrp kg,
logc_imp_projecten p,
fac_import i,
prs_v_perslid_fullnames_all pf
WHERE k.prs_kostenplaats_key = p.prs_kostenplaats_key
AND k.prs_kostenplaatsgrp_key = kg.prs_kostenplaatsgrp_key
AND p.fac_import_key = i.fac_import_key(+)
AND k.prs_perslid_key = pf.prs_perslid_key(+);
-- View voor standaard kwartaalrapportage aan klanten (zie ticket 57657)
CREATE OR REPLACE VIEW logc_v_rap_klantoverzicht_mld
(