FSN#33169 Activiteit: lege verplichte flexvelden met een SQL-default worden nu bij aanmaak berekend

svn path=/Database/trunk/; revision=25565
This commit is contained in:
Peter Feij
2015-07-01 12:22:36 +00:00
parent 729a01e006
commit 13340144e1

View File

@@ -2365,155 +2365,253 @@ CREATE OR REPLACE PACKAGE BODY fac AS
PROCEDURE executeactiviteit (pxmlnode VARCHAR2, pactkey NUMBER)
AS
lkey NUMBER (10);
lkey_m NUMBER (10);
lkey_new NUMBER (10);
luserkey NUMBER (10);
lvolgnr mld_opdr.mld_opdr_bedrijfopdr_volgnr%TYPE;
leinddatum mld_melding.mld_melding_einddatum_std%TYPE;
CURSOR berekendeflex (
mkey IN NUMBER,
stdmkey IN NUMBER)
IS
-- de gedefinieerde verplichte sql-kenmerken die niet ingevuld zijn
SELECT k.mld_kenmerk_key,
REPLACE (k.mld_kenmerk_default, '##SQL##', '') mld_kenmerk_defaultsql
FROM mld_srtkenmerk t,
mld_kenmerk k,
mld_stdmelding s,
mld_discipline d
WHERE s.mld_stdmelding_key = stdmkey
AND s.mld_ins_discipline_key = d.ins_discipline_key
AND ( (k.mld_stdmelding_key = s.mld_stdmelding_key AND k.mld_kenmerk_niveau = 'S')
OR (k.mld_stdmelding_key = s.mld_ins_discipline_key
AND k.mld_kenmerk_niveau = 'D')
OR (k.mld_stdmelding_key = d.ins_srtdiscipline_key
AND k.mld_kenmerk_niveau = 'T'))
AND k.mld_kenmerk_verwijder IS NULL
AND k.mld_srtkenmerk_key = t.mld_srtkenmerk_key
AND k.mld_kenmerk_default LIKE '%##SQL##%'
AND k.mld_kenmerk_verplicht = 1
AND t.mld_srtkenmerk_verwijder IS NULL
AND k.mld_kenmerk_volgnummer <= 900
AND NOT EXISTS
(SELECT ''
FROM mld_kenmerkmelding km
WHERE mld_kenmerkmelding_verwijder IS NULL
AND km.mld_kenmerk_key = k.mld_kenmerk_key
AND mld_melding_key = mkey);
lkey NUMBER (10);
lstdmkey mld_melding.mld_stdmelding_key%TYPE;
lresolveddefault mld_kenmerkmelding.mld_kenmerkmelding_waarde%TYPE;
lkey_m NUMBER (10);
lkey_new NUMBER (10);
luserkey NUMBER (10);
lvolgnr mld_opdr.mld_opdr_bedrijfopdr_volgnr%TYPE;
leinddatum mld_melding.mld_melding_einddatum_std%TYPE;
BEGIN
BEGIN
CASE pxmlnode
WHEN 'melding'
THEN
SELECT MAX (mld_melding_key)
INTO lkey
SELECT mld_melding_key, mld_stdmelding_key
INTO lkey, lstdmkey
FROM mld_melding
WHERE fac_activiteit_key = pactkey;
SELECT mld_s_mld_melding_key.nextval
INTO lkey_new
FROM DUAL;
SELECT mld_s_mld_melding_key.NEXTVAL INTO lkey_new FROM DUAL;
-- TODO: ooit uitvoertijd en accepttijd vers bepalen uit de stdmelding
-- TODO: ooit i18n voor de vaste string
INSERT INTO mld_melding
(mld_melding_key, mld_melding_module, mld_meldbron_key, mld_alg_locatie_key,
mld_alg_onroerendgoed_keys, mld_melding_datum, mld_melding_omschrijving,
mld_melding_opmerking, mld_stdmelding_key, mld_melding_t_uitvoertijd, mld_melding_t_accepttijd,
mld_kosten_klant, mld_melding_document, prs_kostenplaats_key,
prs_perslid_key, mld_adres_key,
mld_workflowstep_key, mld_melding_start_key, mld_melding_ordernr, mld_melding_spoed)
SELECT lkey_new, mld_melding_module, mld_meldbron_key, mld_alg_locatie_key,
mld_alg_onroerendgoed_keys, SYSDATE, mld_melding_omschrijving,
lcl.l('lcl_mld_activity_generated_by')|| pactkey || '. ' || mld_melding_opmerking,
mld_stdmelding_key, mld_melding_t_uitvoertijd, mld_melding_t_accepttijd,
mld_kosten_klant, mld_melding_document, prs_kostenplaats_key, prs_perslid_key,
mld_adres_key, NULL, NULL,
mld_melding_ordernr, mld_melding_spoed
INSERT INTO mld_melding (mld_melding_key,
mld_melding_module,
mld_meldbron_key,
mld_alg_locatie_key,
mld_alg_onroerendgoed_keys,
mld_melding_datum,
mld_melding_omschrijving,
mld_melding_opmerking,
mld_stdmelding_key,
mld_melding_t_uitvoertijd,
mld_melding_t_accepttijd,
mld_kosten_klant,
mld_melding_document,
prs_kostenplaats_key,
prs_perslid_key,
mld_adres_key,
mld_workflowstep_key,
mld_melding_start_key,
mld_melding_ordernr,
mld_melding_spoed)
SELECT lkey_new,
mld_melding_module,
mld_meldbron_key,
mld_alg_locatie_key,
mld_alg_onroerendgoed_keys,
SYSDATE,
mld_melding_omschrijving,
lcl.l ('lcl_mld_activity_generated_by')
|| pactkey
|| '. '
|| mld_melding_opmerking,
mld_stdmelding_key,
mld_melding_t_uitvoertijd,
mld_melding_t_accepttijd,
mld_kosten_klant,
mld_melding_document,
prs_kostenplaats_key,
prs_perslid_key,
mld_adres_key,
NULL,
NULL,
mld_melding_ordernr,
mld_melding_spoed
FROM mld_melding
WHERE mld_melding_key = lkey;
INSERT INTO mld_kenmerkmelding
(mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
-- Alle ingevulde kenmerken gewoon overnemen
INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
SELECT lkey_new, mld_kenmerk_key, mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_melding_key = lkey;
INSERT INTO mld_melding_object
(mld_melding_key, ins_deel_key)
-- En van alle niet-ingevulde verplichte kenmerken de defaultwaarde berekenen als
-- dat een dynamische waarde is. We ondersteunen hier niet de substitutie van
-- ##PRS_PERSLID_KEY##, de melder is nl fixed en een eventueel daarvan afhangende
-- waarde kan dat dan logischerwijs doorgaans ook zijn (versimpeling).
FOR bf IN berekendeflex (lkey, lstdmkey) LOOP
BEGIN
EXECUTE IMMEDIATE (bf.mld_kenmerk_defaultsql) INTO lresolveddefault;
INSERT INTO mld_kenmerkmelding (mld_melding_key,
mld_kenmerk_key,
mld_kenmerkmelding_waarde)
VALUES (lkey_new, bf.mld_kenmerk_key, lresolveddefault);
END;
END LOOP;
INSERT INTO mld_melding_object (mld_melding_key, ins_deel_key)
SELECT lkey_new, ins_deel_key
FROM mld_melding_object
WHERE mld_melding_object_verwijder IS NULL AND mld_melding_key = lkey;
mld.setmeldingstatus(lkey_new, 2,NULL);
-- Eventuele (gewijzigde) objecten zijn nu ook opgeslagen.
-- Nu kunnen pas de definitieve mld_melding.mld_melding_einddatum en mld_melding.mld_melding_einddatum_std bepaald en gezet worden.
leinddatum := mld.geteinddatum (lkey_new);
mld.setmeldingstatus (lkey_new, 2, NULL);
UPDATE mld_melding
SET mld_melding_einddatum = leinddatum,
mld_melding_einddatum_std = leinddatum
WHERE mld_melding_key = lkey_new;
-- Eventuele (gewijzigde) objecten zijn nu ook opgeslagen.
-- Nu kunnen pas de definitieve mld_melding.mld_melding_einddatum en mld_melding.mld_melding_einddatum_std bepaald en gezet worden.
leinddatum := mld.geteinddatum (lkey_new);
UPDATE mld_melding
SET mld_melding_einddatum = leinddatum, mld_melding_einddatum_std = leinddatum
WHERE mld_melding_key = lkey_new;
WHEN 'opdracht'
THEN
SELECT MAX (mld_opdr_key),
MAX (mld_melding_key)
INTO lkey,
lkey_m
SELECT MAX (mld_opdr_key), MAX (mld_melding_key)
INTO lkey, lkey_m
FROM mld_opdr
WHERE fac_activiteit_key = pactkey;
SELECT mld.bepaalopdrmeldingvolgnr (lkey_m)
INTO lvolgnr
FROM DUAL;
SELECT mld.bepaalopdrmeldingvolgnr (lkey_m) INTO lvolgnr FROM DUAL;
SELECT mld_s_mld_opdr_key.nextval
INTO lkey_new
FROM DUAL;
SELECT mld_s_mld_opdr_key.NEXTVAL INTO lkey_new FROM DUAL;
INSERT INTO mld_opdr
(mld_opdr_key, mld_opdr_module, mld_melding_key, mld_uitvoerende_keys, mld_typeopdr_key,
mld_statusopdr_key, mld_standaardopdr_key, mld_opdr_omschrijving, mld_opdr_datumbegin,
mld_opdr_einddatum, mld_opdr_werkzaamheden, mld_opdr_uren, mld_opdr_materiaal, mld_opdr_kosten,
mld_opdr_contactpersoon, mld_opdr_bedrijfopdr_volgnr, mld_opdr_uurloon, prs_perslid_key,
prs_contactpersoon_key, cnt_contract_key, cnt_contract_dienst_key, prs_kostenplaats_key,
mld_opdr_ordernr, mld_opdr_teverzenden)
SELECT lkey_new, mld_opdr_module, mld_melding_key, mld_uitvoerende_keys, mld_typeopdr_key, mld_statusopdr_key,
mld_standaardopdr_key, mld_opdr_omschrijving, SYSDATE, mld_opdr_einddatum,
'Automatisch gegenereerd door activiteit ' || pactkey || '. ' || mld_opdr_werkzaamheden,
mld_opdr_uren, mld_opdr_materiaal, mld_opdr_kosten, mld_opdr_contactpersoon, lvolgnr,
mld_opdr_uurloon, prs_perslid_key, prs_contactpersoon_key, cnt_contract_key,
cnt_contract_dienst_key, prs_kostenplaats_key, mld_opdr_ordernr, mld_opdr_teverzenden
INSERT INTO mld_opdr (mld_opdr_key,
mld_opdr_module,
mld_melding_key,
mld_uitvoerende_keys,
mld_typeopdr_key,
mld_statusopdr_key,
mld_standaardopdr_key,
mld_opdr_omschrijving,
mld_opdr_datumbegin,
mld_opdr_einddatum,
mld_opdr_werkzaamheden,
mld_opdr_uren,
mld_opdr_materiaal,
mld_opdr_kosten,
mld_opdr_contactpersoon,
mld_opdr_bedrijfopdr_volgnr,
mld_opdr_uurloon,
prs_perslid_key,
prs_contactpersoon_key,
cnt_contract_key,
cnt_contract_dienst_key,
prs_kostenplaats_key,
mld_opdr_ordernr,
mld_opdr_teverzenden)
SELECT lkey_new,
mld_opdr_module,
mld_melding_key,
mld_uitvoerende_keys,
mld_typeopdr_key,
mld_statusopdr_key,
mld_standaardopdr_key,
mld_opdr_omschrijving,
SYSDATE,
mld_opdr_einddatum,
'Automatisch gegenereerd door activiteit '
|| pactkey
|| '. '
|| mld_opdr_werkzaamheden,
mld_opdr_uren,
mld_opdr_materiaal,
mld_opdr_kosten,
mld_opdr_contactpersoon,
lvolgnr,
mld_opdr_uurloon,
prs_perslid_key,
prs_contactpersoon_key,
cnt_contract_key,
cnt_contract_dienst_key,
prs_kostenplaats_key,
mld_opdr_ordernr,
mld_opdr_teverzenden
FROM mld_opdr
WHERE mld_opdr_key = lkey;
INSERT INTO mld_kenmerkopdr
(mld_opdr_key, mld_kenmerk_key, mld_kenmerkopdr_waarde)
INSERT INTO mld_kenmerkopdr (mld_opdr_key, mld_kenmerk_key, mld_kenmerkopdr_waarde)
SELECT lkey_new, mld_kenmerk_key, mld_kenmerkopdr_waarde
FROM mld_kenmerkopdr
WHERE mld_kenmerkopdr_verwijder IS NULL AND mld_opdr_key = lkey;
mld.setopdrachtstatus(lkey_new, 2,NULL);
mld.setopdrachtstatus (lkey_new, 2, NULL);
WHEN 'bestelling'
THEN
SELECT MAX (bes_bestelling_key),
MAX (prs_perslid_key)
INTO lkey,
luserkey
SELECT MAX (bes_bestelling_key), MAX (prs_perslid_key)
INTO lkey, luserkey
FROM bes_bestelling
WHERE fac_activiteit_key = pactkey;
SELECT bes_s_bes_bestelling_key.nextval
INTO lkey_new
FROM DUAL;
SELECT bes_s_bes_bestelling_key.NEXTVAL INTO lkey_new FROM DUAL;
-- Bestelling kopi<70>ren.
INSERT INTO bes_bestelling (
bes_bestelling_key,
bes_bestelling_module,
bes_bestelling_status,
bes_bestelling_datum,
prs_perslid_key,
prs_perslid_key_voor,
bes_bestelling_opmerking,
bes_bestelling_ordernr,
bes_bestelling_plaats,
mld_adres_key_lev,
prs_kostenplaats_key,
bes_bestelling_leverdatum,
bes_bestelling_kosten_klant
)
SELECT lkey_new,
bes_bestelling_module,
bes_bestelling_status,
SYSDATE,
prs_perslid_key,
prs_perslid_key_voor,
'Automatisch gegenereerd door activiteit ' || pactkey || '. ' || bes_bestelling_opmerking,
bes_bestelling_ordernr,
bes_bestelling_plaats,
mld_adres_key_lev,
prs_kostenplaats_key,
TRUNC (SYSDATE + (bes_bestelling_leverdatum - bes_bestelling_datum)),
bes_bestelling_kosten_klant
FROM bes_bestelling
WHERE bes_bestelling_key = lkey;
INSERT INTO bes_bestelling (bes_bestelling_key,
bes_bestelling_module,
bes_bestelling_status,
bes_bestelling_datum,
prs_perslid_key,
prs_perslid_key_voor,
bes_bestelling_opmerking,
bes_bestelling_ordernr,
bes_bestelling_plaats,
mld_adres_key_lev,
prs_kostenplaats_key,
bes_bestelling_leverdatum,
bes_bestelling_kosten_klant)
SELECT lkey_new,
bes_bestelling_module,
bes_bestelling_status,
SYSDATE,
prs_perslid_key,
prs_perslid_key_voor,
'Automatisch gegenereerd door activiteit '
|| pactkey
|| '. '
|| bes_bestelling_opmerking,
bes_bestelling_ordernr,
bes_bestelling_plaats,
mld_adres_key_lev,
prs_kostenplaats_key,
TRUNC (SYSDATE + (bes_bestelling_leverdatum - bes_bestelling_datum)),
bes_bestelling_kosten_klant
FROM bes_bestelling
WHERE bes_bestelling_key = lkey;
-- Kenmerken van bestelling kopi<70>ren.
INSERT INTO bes_kenmerkbestell
(bes_bestelling_key, bes_kenmerk_key, bes_kenmerkbestell_waarde)
INSERT INTO bes_kenmerkbestell (bes_bestelling_key, bes_kenmerk_key, bes_kenmerkbestell_waarde)
SELECT lkey_new, bes_kenmerk_key, bes_kenmerkbestell_waarde
FROM bes_kenmerkbestell
WHERE bes_kenmerkbestell_verwijder IS NULL AND bes_bestelling_key = lkey;
@@ -2528,12 +2626,11 @@ CREATE OR REPLACE PACKAGE BODY fac AS
SELECT lkey_new,
bes_bestelling_item_aantal,
bes_bestelling_item_aantalontv,
bes.getsrtdeelprijsinfo(bi.bes_srtdeel_key, SYSDATE, 1),
bes.getsrtdeelprijsinfo(bi.bes_srtdeel_key, SYSDATE, 1),
bes.getsrtdeelprijsinfo (bi.bes_srtdeel_key, SYSDATE, 1),
bes.getsrtdeelprijsinfo (bi.bes_srtdeel_key, SYSDATE, 1),
bi.bes_srtdeel_key
FROM bes_bestelling_item bi, bes_srtdeel isd
WHERE bes_bestelling_key = lkey
AND isd.bes_srtdeel_key = bi.bes_srtdeel_key;
WHERE bes_bestelling_key = lkey AND isd.bes_srtdeel_key = bi.bes_srtdeel_key;
-- Kenmerken van bestelregels kopi<70>ren.
INSERT INTO bes_kenmerkbesteli (bes_bestelling_item_key,
@@ -2545,32 +2642,32 @@ CREATE OR REPLACE PACKAGE BODY fac AS
kbi.bes_kenmerkbesteli_waarde,
SYSDATE
FROM bes_kenmerkbesteli kbi,
(SELECT bi1.bes_bestelling_item_key bes_bestelling_item_key_new,
(SELECT bi1.bes_bestelling_item_key bes_bestelling_item_key_new,
bi.bes_bestelling_item_key,
bi.bes_srtdeel_key
FROM bes_bestelling_item bi, bes_bestelling_item bi1
WHERE bi.bes_bestelling_key = lkey
AND bi1.bes_srtdeel_key = bi.bes_srtdeel_key
AND bi1.bes_bestelling_key = lkey_new) tab1
WHERE bi.bes_bestelling_key = lkey
AND bi1.bes_srtdeel_key = bi.bes_srtdeel_key
AND bi1.bes_bestelling_key = lkey_new) tab1
WHERE kbi.bes_bestelling_item_key = tab1.bes_bestelling_item_key
AND kbi.bes_bestelling_item_key IN (SELECT bes_bestelling_item_key
FROM bes_bestelling_item bi
WHERE bi.bes_bestelling_key = lkey);
AND kbi.bes_bestelling_item_key IN (SELECT bes_bestelling_item_key
FROM bes_bestelling_item bi
WHERE bi.bes_bestelling_key = lkey);
-- Het gaat hier om een geplande actie. Je mag er van uit gaan dat deze goed gekeurd is voordat deze is aangemaakt.
-- Daarom bestellingstatus op 4 zetten (Geaccepteerd) en bestelopdracht automatisch aanmaken.
bes.setbestellingstatus(lkey_new, 4, luserkey); -- Geaccepteerd
bes.makeorders(luserkey, lkey_new); -- bes_makeorders notificeert zelf de leveranciers.
bes.setbestellingstatus (lkey_new, 4, luserkey); -- Geaccepteerd
bes.makeorders (luserkey, lkey_new); -- bes_makeorders notificeert zelf de leveranciers.
END CASE;
EXCEPTION
WHEN OTHERS
THEN
putsystemnotification ( 'Facilitor scheduler: opdracht voor activiteit '
|| pactkey
|| ' kan niet worden aangemaakt: '
|| SQLERRM,
3
);
putsystemnotification (
'Facilitor scheduler: opdracht voor activiteit '
|| pactkey
|| ' kan niet worden aangemaakt: '
|| SQLERRM,
3);
END;
END;