FSN#22410 fac_functie_key als param is genoeg

svn path=/Customer/trunk/; revision=15165
This commit is contained in:
Jos Groot Lipman
2012-03-12 11:13:34 +00:00
parent 2682b0ce14
commit 643e89c71a

View File

@@ -1,7 +1,7 @@
-- Script containing customer specific configuration sql statements for NFIB
-- (c) 2011 SG|facilitor bv
-- $Revision: 7 $
-- $Modtime: 20-02-12 11:32 $
-- $Revision: 8 $
-- $Modtime: 12-03-12 13:11 $
--
-- Support: +31 53 4800710
@@ -22,7 +22,7 @@ DECLARE
v_fac_profiel_key FAC_PROFIEL.FAC_PROFIEL_KEY%TYPE;
v_mld_adres_key MLD_ADRES.MLD_ADRES_KEY%TYPE;
v_prs_kenmerk_key PRS_KENMERK.PRS_KENMERK_KEY%TYPE;
BEGIN
-- Een stuk Pseudocode als dit standaard in 5.1.3 wordt...?
-- IF get_facsetting('IMPLICIETE_PRS_AFDELING')==1 of iets dergelijks
@@ -30,37 +30,37 @@ BEGIN
IF (:new.prs_bedrijf_intern = 1 AND :new.prs_bedrijf_ingids = 1)
THEN
SELECT PRS_S_PRS_AFDELING_KEY.NEXTVAL into v_prs_afdeling_key FROM DUAL;
INSERT INTO PRS_AFDELING (PRS_BEDRIJF_KEY, PRS_AFDELING_KEY, PRS_AFDELING_NAAM, PRS_AFDELING_OMSCHRIJVING, MLD_ADRES_KEY)
VALUES (:new.prs_bedrijf_key, v_prs_afdeling_key, 'Intern', :new.prs_bedrijf_naam, NULL);
-- Onderstaande nog ff uitcommentarieren.
-- Minimum srtperslid is deelnemer/klant (standaard srt_perslid met key = 1 is initieel aanwezig: Onbekend).
--SELECT MIN(PRS_SRTPERSLID_KEY) into v_prs_srtperslid_key from PRS_SRTPERSLID WHERE PRS_SRTPERSLID_VERWIJDER IS NULL;
--INSERT INTO PRS_PERSLID(PRS_AFDELING_KEY,
-- PRS_SRTPERSLID_KEY,
-- PRS_SRTPERSLID_KEY,
-- PRS_PERSLID_MODULE,
-- PRS_PERSLID_NAAM,
-- PRS_PERSLID_OSLOGIN,
-- PRS_PERSLID_NAAM,
-- PRS_PERSLID_OSLOGIN,
-- PRS_PERSLID_TELEFOONNR,
-- PRS_PERSLID_MOBIEL,
-- PRS_PERSLID_EMAIL
-- )
-- VALUES(v_prs_afdeling_key,
-- v_prs_srtperslid_key,
-- v_prs_srtperslid_key,
-- 'PRS',
-- COALESCE(:new.prs_bedrijf_contact_persoon, :new.prs_bedrijf_naam),
-- COALESCE(SUBSTR(:new.prs_bedrijf_email,1,30),:new.prs_bedrijf_naam),
-- SUBSTR(:new.prs_bedrijf_telefoon,1,15),
-- SUBSTR(:new.prs_bedrijf_telefoon2,1,15),
-- :new.prs_bedrijf_email);
--fac.putsystemnotification( 'Account voor bedrijf: '|| :new.prs_bedrijf_naam || 'is geactiveerd ' || chr(10) ||
-- 'Gebruikersnaam: ' || COALESCE(SUBSTR(:new.prs_bedrijf_email,1,30),:new.prs_bedrijf_naam) || chr(10) ||
-- 'Via menutaak Profiel is het wachtwoord naar wens te wijzigen'
-- , 2);
END IF;
-- END IF;
END;
@@ -86,7 +86,7 @@ BEGIN
AND a.prs_afdeling_verwijder IS NULL
AND UPPER(a.prs_afdeling_omschrijving) = UPPER(:old.prs_bedrijf_naam);
END IF;
-- Het is een intern bedrijf (dus geen leverancier)
IF (:old.prs_bedrijf_ingids is null and :new.prs_bedrijf_ingids = 1)
THEN
@@ -109,10 +109,10 @@ BEGIN
-- De afdeling bestond nog niet, dus een insert...
SELECT PRS_S_PRS_AFDELING_KEY.NEXTVAL into v_prs_afdeling_key FROM DUAL;
INSERT INTO PRS_AFDELING (PRS_BEDRIJF_KEY, PRS_AFDELING_KEY, PRS_AFDELING_NAAM, PRS_AFDELING_OMSCHRIJVING, MLD_ADRES_KEY)
VALUES (:new.prs_bedrijf_key, v_prs_afdeling_key, 'Intern', :new.prs_bedrijf_naam, NULL);
VALUES (:new.prs_bedrijf_key, v_prs_afdeling_key, 'Intern', :new.prs_bedrijf_naam, NULL);
END;
END IF;
IF (:old.prs_bedrijf_ingids = 1 and :new.prs_bedrijf_ingids is null)
THEN
-- Intern bedrijf was klant, en wordt nu geen klant meer (terug naar af, naar prospect...)
@@ -135,7 +135,7 @@ BEGIN
-- Dus indien nog personen bestaan bij afdeling, dan wordt alertbox met melding 'prs_m015' getoond, en kan het vinkje niet worden uitgezet,
-- Of indien er nog lopende contracten bij afdeling bestaan, dan wordt alertbox 'cnt_m022' getoond, en kan het vinkje niet worden uitgezet...
END;
END IF;
END IF;
END IF;
END;
/
@@ -153,15 +153,15 @@ BEGIN
FROM mld_kenmerkmelding km
WHERE mld_kenmerk_key = 61
AND mld_melding_key=p_melding_key;
INSERT INTO prs_bedrijf (prs_bedrijf_naam, prs_bedrijf_intern)
SELECT l_prs_bedrijf_naam, 1 FROM DUAL;
EXCEPTION
WHEN OTHERS
THEN
raise_application_error (-20000, 'Naam van klant/prospect bestaat al.');
END;
/
@@ -291,7 +291,7 @@ product
AS
SELECT p1.prs_bedrijf_naam, c1.ins_discipline_omschrijving, g1.bes_srtgroep_omschrijving, d1.bes_srtdeel_key, d1.bes_srtdeel_nr, d1.bes_srtdeel_omschrijving, d1.bes_srtdeel_eenheid,
ROUND(utl_match.jaro_winkler( d1.bes_srtdeel_omschrijving, pd1.bes_srtprod_omschrijving),2),
COALESCE(pd1.bes_srtprod_nr, 'NEE'), pd1.bes_srtprod_omschrijving
COALESCE(pd1.bes_srtprod_nr, 'NEE'), pd1.bes_srtprod_omschrijving
FROM bes_srtdeel d1, prs_bedrijf p1, bes_srtgroep g1, bes_discipline c1, bes_srtprod pd1
WHERE d1.prs_bedrijf_key = p1.prs_bedrijf_key
AND utl_match.jaro_winkler( UPPER(d1.bes_srtdeel_omschrijving), UPPER(pd1.bes_srtprod_omschrijving)) >= 0.75
@@ -383,10 +383,10 @@ AS
--
--BEGIN
-- fac_update_catalogus(p_import_key, NULL, NULL);
--
--
-- FOR rec IN c_distinct_bedrijven
-- LOOP
-- BEGIN
-- BEGIN
-- nfib_update_catalogus(p_import_key, NULL, rec.prs_bedrijf_key);
-- END;
-- END LOOP;
@@ -395,31 +395,30 @@ AS
CREATE OR REPLACE PROCEDURE nfib_update_catalogus (
p_import_key IN NUMBER,
p_discipline_key IN NUMBER,
p_bedrijf_key IN NUMBER
p_import_key IN NUMBER
)
IS
l_bes_srtprod_key bes_srtprod.bes_srtprod_key%TYPE;
l_bedrijf_key fac_import_app.prs_bedrijf_key%TYPE;
l_maak_new_prod NUMBER;
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
-- Cursor c_prd_naam_eenheid bevat de artikelen van levernacier p_bedrijf_key (zojuist ingelezen) die een match hebben met 1 of meer artikelen van andere leveranciers.
-- Cursor c_prd_naam_eenheid bevat de artikelen van levernacier l_bedrijf_key (zojuist ingelezen) die een match hebben met 1 of meer artikelen van andere leveranciers.
-- De match bestaat uit 100% overeenkomst in naam en eenheid (merk van artikel kent nu (nog) geen eigen kolom, zou nog sterkere match zijn geweest).
CURSOR c_prd_naam_eenheid (
p_bedrijf_key IN NUMBER
)
IS
SELECT
p1.prs_bedrijf_naam leverancier1,
c1.ins_discipline_omschrijving catalogus1,
g1.bes_srtgroep_omschrijving groep1,
SELECT
p1.prs_bedrijf_naam leverancier1,
c1.ins_discipline_omschrijving catalogus1,
g1.bes_srtgroep_omschrijving groep1,
d1.bes_srtdeel_key bes_srtdeel_key1,
d1.bes_srtdeel_nr artikelnr1,
d1.bes_srtdeel_omschrijving omschrijving1,
@@ -458,9 +457,9 @@ IS
AND COALESCE(pr2.bes_srtdeel_prijs_vervaldatum, SYSDATE) >= SYSDATE
AND d1.bes_srtprod_key = pd1.bes_srtprod_key (+)
AND d2.bes_srtprod_key = pd2.bes_srtprod_key (+);
-- Cursor c_art_without_prd bevat de artikelen van leverancier 'p_bedrijf_key' (zojuist ingelezen) die:
-- Cursor c_art_without_prd bevat de artikelen van leverancier 'l_bedrijf_key' (zojuist ingelezen) die:
-- a)geen koppeling hebben met een product
-- b)een match hebben met 1 of meer artikelen van andere leveranciers
-- De match bestaat uit 100% overeenkomst in naam en eenheid (merk van artikel kent nu (nog) geen eigen kolom, zou nog sterkere match zijn geweest).
@@ -483,9 +482,9 @@ IS
AND COALESCE(pr1.bes_srtdeel_prijs_vervaldatum, SYSDATE) >= SYSDATE
AND d1.bes_srtprod_key IS NULL
GROUP BY d1.bes_srtdeel_key;
CURSOR c_art_match_art_without_prod (
p_bes_srtdeel_key IN NUMBER
)
@@ -500,21 +499,26 @@ IS
AND d1.bes_srtdeel_verwijder is null
AND d2.bes_srtdeel_verwijder is null
AND d2.bes_srtprod_key IS NULL;
BEGIN
-- Voor ieder geimporteerd artikel van leverancier 'p_bedrijf_key' dat nog niet gekoppeld is aan product (als die in eerdere imports gekoppeld was, dan nu met rust laten)
FOR rec IN c_matching_art_without_prd (p_bedrijf_key)
SELECT prs_bedrijf_key
INTO l_bedrijf_key
FROM fac_import fi, fac_import_app fia
WHERE fi.fac_import_app_key = fia.fac_import_app_key
AND fac_import_key = p_import_key;
-- Voor ieder geimporteerd artikel van leverancier 'l_bedrijf_key' dat nog niet gekoppeld is aan product (als die in eerdere imports gekoppeld was, dan nu met rust laten)
FOR rec IN c_matching_art_without_prd (l_bedrijf_key)
LOOP
BEGIN
v_aanduiding := '[' || rec.artikelnr || ' - ' || rec.omschrijving || '( ' || rec.eenheid || ') ' || '] ';
v_errormsg := 'Eenduidigheid mist: meerdere artikelen matchen maar hebebn verschillende producten';
-- Artikel is niet gekoppeld aan product, laten we proberen deze te koppelen:
-- Zoek aan product-gekoppelde-artikelen van andere leverancier(s), en knoop hem aan die...
SELECT d2.bes_srtprod_key
INTO l_bes_srtprod_key
FROM bes_srtdeel d1, bes_srtdeel d2
@@ -527,22 +531,22 @@ BEGIN
AND d2.bes_srtdeel_verwijder is null
AND d2.bes_srtprod_key IS NOT NULL
GROUP BY d2.bes_srtprod_key;
-- Hier eenduidig 1 product gevonden die aan de gematch-te artikel(en) zijn gekoppeld.
UPDATE bes_srtdeel d1
SET d1.bes_srtprod_key = l_bes_srtprod_key
WHERE d1.bes_srtdeel_key = rec.bes_srtdeel_key;
EXCEPTION
-- Geen (=0) of meer (>1) producten gevonden..
WHEN NO_DATA_FOUND
THEN
-- Geen artikel die aan product is gekoppeld gevonden, dus dan is gematch-te artikel nog ongekoppeld
-- We gaan dan alle productloze artikelen die matchen alsnog bombaderen tot product-koppeling door 1 product aan te maken en ze allemaal daaraan te koppelen...
-- Default geen product maken, tenzij er een productloos match-artikel bestaat
l_maak_new_prod := 0;
FOR rec2 IN c_art_match_art_without_prod (rec.bes_srtdeel_key)
LOOP
-- Productloos match-artikel bestaat!
@@ -550,7 +554,7 @@ BEGIN
IF l_maak_new_prod = 1
THEN
-- Alleen de 1e keer een product maken...
-- Maar eerst ff checken of toevallig/theoretisch/handmatig toch niet het product al bestaat met dezelfde naam en eenheid, want dan hoef ik die niet aan te maken...
BEGIN
SELECT bes_srtprod_key
@@ -558,9 +562,9 @@ BEGIN
FROM bes_srtprod
WHERE UPPER(bes_srtprod_omschrijving) = UPPER(rec.omschrijving)
AND UPPER(bes_srtprod_eenheid) = UPPER(rec.eenheid);
EXCEPTION
WHEN OTHERS
WHEN OTHERS
THEN
SELECT bes_s_bes_srtprod_key.NEXTVAL
INTO l_bes_srtprod_key
@@ -568,23 +572,23 @@ BEGIN
-- bes_srtgroep_key = 1 (harde key), dit is de default/standaard groep onder de standaard productencatalogus (met key 3): zie nfib003.sql
INSERT INTO bes_srtprod (bes_srtprod_key, bes_srtgroep_key, bes_srtprod_omschrijving, bes_srtprod_eenheid)
SELECT l_bes_srtprod_key, 1, rec.omschrijving, rec.eenheid FROM DUAL;
END;
END IF;
-- Elk productloos artikel nu aan product koppelen
UPDATE bes_srtdeel d1
SET d1.bes_srtprod_key = l_bes_srtprod_key
WHERE d1.bes_srtdeel_key = rec2.bes_srtdeel_key;
END LOOP;
-- En tenslotte het artikel van leverancier p_prs_bedrijf_key zelf nog
UPDATE bes_srtdeel d1
SET d1.bes_srtprod_key = l_bes_srtprod_key
WHERE d1.bes_srtdeel_key = rec.bes_srtdeel_key;
WHEN OTHERS
WHEN OTHERS
THEN
-- Er zijn meerdere artikelen met 100% match, die aan verschillende producten hangen.
-- Vanwege deze arbitriare situatie niet koppelen, maar rapporteren.
@@ -604,7 +608,7 @@ BEGIN
END;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
@@ -626,7 +630,7 @@ END;
BEGIN adm.systrackscript('$Workfile: nfib.sql $', '$Revision: 7 $', 0); END;
BEGIN adm.systrackscript('$Workfile: nfib.sql $', '$Revision: 8 $', 0); END;
/
BEGIN fac.registercustversion('NFIB', 1); END;