YASK#65033 -- Verkoopprijs in een readonly veld bij de opdracht tonen.

svn path=/Customer/trunk/; revision=49093
This commit is contained in:
Arthur Egberink
2020-12-07 14:10:48 +00:00
parent e7933d31af
commit c542c2b0bf

420
YASK/yask.sql Normal file
View File

@@ -0,0 +1,420 @@
--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database
DEFINE thisfile = 'YASK.SQL'
DEFINE dbuser = 'YASK'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL;
WHENEVER SQLERROR CONTINUE;
---------------------------------------
PROMPT &fcltcusttxt
---------------------------------------
SET DEFINE OFF
------ payload begin ------
CREATE OR REPLACE PACKAGE YASK
AS
FUNCTION geen_opslag (p_opdr_key IN NUMBER)
RETURN NUMBER;
FUNCTION bepaal_opslag (p_opdr_key IN NUMBER)
RETURN NUMBER;
FUNCTION bepaal_srtopslag (p_opdr_key IN NUMBER)
RETURN VARCHAR2;
PROCEDURE set_verkoopprijs (p_opdr_key IN NUMBER);
END;
/
CREATE OR REPLACE PACKAGE BODY YASK
AS
FUNCTION geen_opslag (p_opdr_key IN NUMBER)
RETURN NUMBER
AS
v_geen_opslag NUMBER;
BEGIN
SELECT FAC.safe_to_number(ko.mld_kenmerkopdr_waarde)
INTO v_geen_opslag
FROM mld_kenmerkopdr ko
WHERE ko.mld_kenmerk_key = 21 -- Geen opslag
AND ko.mld_opdr_key = p_opdr_key;
RETURN v_geen_opslag;
EXCEPTION WHEN NO_DATA_FOUND
THEN
RETURN 0;
END;
FUNCTION bepaal_opslag (p_opdr_key IN NUMBER)
RETURN NUMBER
AS
v_geen_opslag NUMBER;
v_opslag NUMBER;
BEGIN
v_geen_opslag := YASK.geen_opslag(p_opdr_key);
IF v_geen_opslag = 1 THEN
RETURN 0;
END IF;
SELECT FAC.safe_to_number(alg_onrgoedkenmerk_waarde)
INTO v_opslag
FROM alg_onrgoedkenmerk aogk,
mld_melding m,
mld_opdr o,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd
WHERE 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 aogk.alg_kenmerk_key =
DECODE (sd.ins_srtdiscipline_omschrijving, 'Projecten', 1002,
DECODE (d.ins_discipline_omschrijving, 'Schoonmaak', 1003, 1000))
AND aogk.alg_onrgoed_key = m.mld_alg_locatie_key
AND o.mld_melding_key = m.mld_melding_key
AND o.mld_opdr_key = p_opdr_key;
RETURN v_opslag;
EXCEPTION WHEN NO_DATA_FOUND
THEN
RETURN 0;
END;
FUNCTION bepaal_srtopslag (p_opdr_key IN NUMBER)
RETURN VARCHAR2
AS
v_geen_opslag NUMBER;
v_srtopslag ALG_KENMERK.ALG_KENMERK_OMSCHRIJVING%TYPE;
BEGIN
v_geen_opslag := YASK.geen_opslag(p_opdr_key);
IF v_geen_opslag = 1 THEN
RETURN NULL;
END IF;
SELECT alg_kenmerk_omschrijving
INTO v_srtopslag
FROM alg_onrgoedkenmerk aogk,
alg_kenmerk ak,
mld_melding m,
mld_opdr o,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd
WHERE 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 aogk.alg_kenmerk_key = ak.alg_kenmerk_key
AND aogk.alg_kenmerk_key =
DECODE (sd.ins_srtdiscipline_omschrijving, 'Projecten', 1002,
DECODE (d.ins_discipline_omschrijving, 'Schoonmaak', 1003, 1000))
AND aogk.alg_onrgoed_key = m.mld_alg_locatie_key
AND o.mld_melding_key = m.mld_melding_key
AND o.mld_opdr_key = p_opdr_key;
RETURN v_srtopslag;
EXCEPTION WHEN NO_DATA_FOUND
THEN
RETURN 0;
END;
-- Vul het kenmerk verkoopprijs (key 201) bij de opdracht
PROCEDURE set_verkoopprijs (p_opdr_key IN NUMBER)
AS
v_opdr_kosten NUMBER;
v_verkoopprijs NUMBER;
v_opslag NUMBER;
BEGIN
SELECT mld_opdr_kosten
INTO v_opdr_kosten
FROM mld_opdr o
WHERE mld_opdr_key = p_opdr_key;
v_opslag := YASK.bepaal_opslag(p_opdr_key);
IF v_opslag = 0
THEN
v_verkoopprijs := NULL;
ELSE
v_verkoopprijs := v_opdr_kosten * ((100 + v_opslag) /100);
END IF;
MLD.upsertopdrachtkenmerk (201, p_opdr_key, v_verkoopprijs);
END;
END;
/
-- Rapport voor het doorbelasten van de kosten. Hier wordt ook een opslagperscentage in meegenomen.
-- Als het een project betreft is de vakgroep omschrijving Projecten
-- Als het om schoonmaak gaat heet de vakgroep Schoonmaak
-- En anders is het materiaal of subcontrating. Maar deze hebben hetzelfde tarief.
-- De tarieven staan bij de locatie vermeld in flexvelden.
CREATE OR REPLACE VIEW yask_v_kosten_doorbelasting
AS
SELECT sd.ins_srtdiscipline_prefix || m.mld_melding_key meldingnummer,
m.mld_melding_key,
l.alg_locatie_omschrijving meldinglocatie,
pf.prs_perslid_naam_full melder,
sd.ins_srtdiscipline_omschrijving soortmelding,
d.ins_discipline_omschrijving productgroep,
std.mld_stdmelding_omschrijving subproductgroep,
ksm.prs_kostensoort_oms melding_nen_omschrijving,
ksm.prs_kostensoort_refcode melding_nen_code,
CASE
WHEN m.mld_melding_status = 5 AND m.mld_melding_afgerond = 1
THEN
'Afgerond'
ELSE
ms.mld_statuses_omschrijving
END
meldingstatus,
fs.fac_usrdata_omschr facturatiestatus,
m.mld_melding_datum meldingdatum,
MLD.getmeldingstatusdate (m.mld_melding_key, 5) afgemeld,
m.mld_melding_onderwerp onderwerp,
m.mld_melding_omschrijving vomschrijving,
sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr opdrachtnummer,
ot.mld_typeopdr_omschrijving opdrachttype,
so.mld_statusopdr_omschrijving opdrachtstatus,
o.mld_opdr_omschrijving opdrachtomschrijving,
kso.prs_kostensoort_oms opdracht_nen_omschrijving,
b.prs_bedrijf_naam opdrachtuitvoerende,
o.mld_opdr_kosten opdrachtkosten,
YASK.bepaal_srtopslag(o.mld_opdr_key) soortopslag,
YASK.bepaal_opslag(o.mld_opdr_key) opslag,
o.mld_opdr_kosten * ((100 + YASK.bepaal_opslag(o.mld_opdr_key)) /100) kostenplusopslag,
YASK.geen_opslag(o.mld_opdr_key) geenopslag,
TO_CHAR(ADD_MONTHS(COALESCE(MLD.getmeldingstatusdate (m.mld_melding_key, 6),SYSDATE),-1),'yyyy-mm') boekmaand
FROM prs_v_perslid_fullnames pf,
prs_kostensoort ksm,
mld_statuses ms,
mld_opdr o,
mld_typeopdr ot,
mld_statusopdr so,
prs_bedrijf b,
alg_locatie l,
prs_kostensoort kso,
mld_melding m,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd,
(SELECT mld_melding_key, fac_usrdata_omschr
FROM fac_usrdata ud, mld_kenmerkmelding km
WHERE km.mld_kenmerk_key = 1 -- Facturatiestatus
AND FAC.safe_to_number (mld_kenmerkmelding_waarde) =
ud.fac_usrdata_key) fs
WHERE 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 std.prs_kostensoort_key = ksm.prs_kostensoort_key(+)
AND m.mld_melding_status = ms.mld_statuses_key
AND m.mld_melding_key = fs.mld_melding_key(+)
AND m.mld_melding_key = o.mld_melding_key
AND m.prs_perslid_key = pf.prs_perslid_key
AND m.mld_alg_locatie_key = l.alg_locatie_key
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND o.mld_statusopdr_key = so.mld_statusopdr_key
AND o.mld_uitvoerende_keys = b.prs_bedrijf_key(+)
AND o.prs_kostensoort_key = kso.prs_kostensoort_key(+);
CREATE OR REPLACE VIEW yask_v_export_pro_forma (
result,
result_order
)
AS
SELECT 'meldingnummer;' ||
'meldinglocatie;' ||
'soortmelding;' ||
'productgroep;' ||
'subproductgroep;' ||
'melding_nen_omschrijving;' ||
'melding_nen_code;' ||
'meldingstatus;' ||
'facturatiestatus;' ||
'meldingdatum;' ||
'afgemeld;' ||
'onderwerp;' ||
'vomschrijving;' ||
'opdrachtnummer;' ||
'opdrachttype;' ||
'opdrachtstatus;' ||
'opdrachtomschrijving;' ||
'opdracht_nen_omschrijving;' ||
'opdrachtuitvoerende;' ||
'opdrachtkosten;' ||
'soortopslag;' ||
'opslag;' ||
'kostenplusopslag' ||
'geenopslag' , -1
FROM DUAL
UNION ALL
SELECT meldingnummer || ';' ||
meldinglocatie || ';' ||
melder || ';' ||
soortmelding || ';' ||
productgroep || ';' ||
subproductgroep || ';' ||
melding_nen_omschrijving || ';' ||
melding_nen_code || ';' ||
meldingstatus || ';' ||
facturatiestatus || ';' ||
meldingdatum || ';' ||
afgemeld || ';' ||
onderwerp || ';' ||
'"' || vomschrijving || '"' || ';' ||
opdrachtnummer || ';' ||
opdrachttype || ';' ||
opdrachtstatus || ';' ||
'"' || opdrachtomschrijving || '"' || ';' ||
opdracht_nen_omschrijving || ';' ||
opdrachtuitvoerende || ';' ||
REPLACE(opdrachtkosten, '.', ',') || ';' ||
soortopslag || ';' ||
opslag || ';' ||
REPLACE(kostenplusopslag, '.', ',') || ';' ||
geenopslag, mld_melding_key
FROM yask_v_kosten_doorbelasting
WHERE facturatiestatus = 'Gereed voor facturatie';
-- Procedure om pro-forma factuur klaar te zetten.
CREATE OR REPLACE PROCEDURE yask_select_pro_forma (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2
)
AS
CURSOR c
IS
SELECT mld_melding_key
FROM yask_v_kosten_doorbelasting
WHERE meldingstatus = 'Afgerond'
AND COALESCE(facturatiestatus, 'Onbekend') <> 'Gefactureerd'
GROUP BY mld_melding_key;
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
-- Eerst opruiming
DELETE FROM imp_log
WHERE imp_log_applicatie = p_applname;
FOR rec IN c
LOOP
BEGIN
-- zet de melding op status 'Gereed voor facturatie'
MLD.upsertmeldingkenmerk (1, rec.mld_melding_key, 1); -- Facturatiestatus naar Gereed voor facturatie
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'Fout bij aanmaken pro forma factuur' || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog (p_applname, 'E', rec.mld_melding_key || v_errormsg, '');
COMMIT;
END;
END LOOP;
END;
/
CREATE OR REPLACE PROCEDURE yask_select_pro_forma_verwerk (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2
)
AS
CURSOR c
IS
SELECT mld_melding_key
FROM yask_v_kosten_doorbelasting
WHERE meldingstatus = 'Afgerond'
AND facturatiestatus = 'Gereed voor facturatie'
GROUP BY mld_melding_key;
CURSOR c_opdr (c_melding_key NUMBER)
IS
SELECT mld_opdr_key
FROM mld_opdr
WHERE mld_statusopdr_key = 9 -- Afgerond
AND mld_melding_key = c_melding_key;
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
-- Eerst opruiming
DELETE FROM imp_log
WHERE imp_log_applicatie = p_applname;
FOR rec IN c
LOOP
BEGIN
-- zet de melding op facutratie status 'Gefactureerd'
MLD.upsertmeldingkenmerk (1, rec.mld_melding_key, 2);
-- We gaan eerst alle onderliggende opdrachten op verwerkt zetten.
FOR rec1 IN c_opdr(rec.mld_melding_key)
LOOP
BEGIN
MLD.setopdrachtstatus (rec1.mld_opdr_key, 7, NULL); -- Verwerkt
END;
END LOOP;
MLD.setmeldingstatus (rec.mld_melding_key, 6, NULL, NULL); -- Historie
END;
END LOOP;
END;
/
------ payload end ------
SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 0); END;
/
COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile