Files
Customer/onces/BSSC/BSSC#82588.sql
Arthur Egberink b7c4874735 BSSC#82588 -- contractbeheer facturatie uitstellen eenmalig
svn path=/Customer/; revision=63762
2024-02-29 13:26:23 +00:00

276 lines
14 KiB
MySQL
Raw Blame History

--
-- $Id$
--
-- Korte beschrijving wat het script doet
-- BSSC#82588 contractbeheer facturatie uitstellen eenmalig
--
DEFINE thisfile = 'BSSC#82588'
DEFINE dbuser = '^BSSC'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusterr NEW_VALUE fcltcusterr NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust('&dbuser') AS fcltcusterr FROM DUAL;
WHENEVER SQLERROR CONTINUE;
PROMPT &fcltcusterr
SET DEFINE OFF
------ payload begin ------
CREATE OR REPLACE PROCEDURE bssc_select_fact (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
-- Factureer/bevries verhuurcontractkosten en verwerk=AV alle eventuele correctiemeldingen!
CURSOR c1
IS
SELECT '[' || v.refid || '|' || v.prs_debiteur_naam || '|' || v.regel || '] ' aanduiding,
v.*
FROM bssc_v_fact_actual v
ORDER BY v.prs_bedrijf_key, v.po_nr, v.sortering, v.regel, v.alg_plaatsaanduiding;
-- Verstuur verkoopfactuur naar huurder.
CURSOR c2
IS
SELECT DISTINCT '[' || vf.fin_verkoopfactuur_id || '|' || vf.fin_verkoopfactuur_maand || '|' || vf.prs_debiteur_naam || '] ' aanduiding,
vf.fin_verkoopfactuur_id, vf.fin_verkoopfactuur_maand, vf.prs_debiteur_naam,
vfk.fin_verkoopfactuurkop_key, vfk.fin_verkoopfactuurkop_id,
COALESCE (kl.prs_kenmerklink_waarde, b.prs_bedrijf_email) prs_bedrijf_email
FROM fin_verkoopfactuur vf, fin_verkoopfactuurkop vfk, prs_bedrijf b,
(SELECT * FROM prs_v_aanwezigkenmerklink WHERE prs_kenmerk_key = 1240) kl -- E-mail adres facturatie
WHERE vf.fin_verkoopfactuur_xmlnode = 'contract' AND fin_verkoopfactuur_n1 IS NULL -- Onderscheid ADDD vs. FACT!
AND vf.fin_verkoopfactuurkop_key = vfk.fin_verkoopfactuurkop_key
AND vf.prs_bedrijf_key = b.prs_bedrijf_key
AND b.prs_bedrijf_key = kl.prs_link_key (+)
AND TRUNC (vf.fin_verkoopfactuur_aanmaak) = TRUNC (SYSDATE)
ORDER BY vf.fin_verkoopfactuur_id;
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_holiday NUMBER;
v_fact_count NUMBER;
v_amount_sum NUMBER (10, 2);
v_old_contract_key NUMBER (10);
v_factuur_id VARCHAR2 (30);
v_factkop_id VARCHAR2 (30);
v_verkoopfactuurkop_key NUMBER (10);
v_count NUMBER;
BEGIN
-- Eerst opruiming
DELETE FROM imp_log
WHERE imp_log_applicatie = p_applname;
SELECT COUNT ( * )
INTO v_holiday
FROM mld_vrije_dagen
WHERE TRUNC (mld_vrije_dagen_datum) = TRUNC (SYSDATE - 1);
-- LET OP: FACT-export van verhuurfacturen (= boekingsgangen) draait
-- dagelijks na middernacht (begin van dag) en de verkoop wordt maandelijks
-- alleen in de nacht na 1e werkdag van de maand doorgezet.
-- IF nacht na 1e werkdag van de maand (<28>n<EFBFBD>geen weekend <20>n<EFBFBD>geen vrije dag)!
-- count_work_days (d1,d2) bepaalt het #werkdagen van d1 tot d2 (als d1=d2,
-- dan return 0); daarom bepalen tov. laatste dag van vorige maand!
--IF TO_CHAR (SYSDATE, 'dd') = '16' -- TODO:Weer terug naar nacht na 1e werkdag van de maand!
-- IF FAC.count_work_days (TRUNC (SYSDATE, 'mm') - 1, SYSDATE - 1) = 1 -- Nacht na 1e werkdag van de maand!
-- AND TO_CHAR (SYSDATE - 1, 'd') BETWEEN '2' AND '6'
-- AND v_holiday = 0
--
IF TO_CHAR(SYSDATE, 'dd') = '06'
THEN
v_fact_count := 0;
v_amount_sum := 0;
v_old_contract_key := -1; -- Factuur per contract!
-- Factureer/bevries (huur)contractkosten.
FOR rec IN c1
LOOP
BEGIN
IF rec.refkey != v_old_contract_key
THEN
IF rec.po_nr LIKE 'CHV%'
THEN
SELECT fac_s_user01.NEXTVAL INTO v_count FROM DUAL;
v_factuur_id := '1' || SUBSTR ('000000' || TO_CHAR (v_count), -6);
ELSE
SELECT fac_s_user02.NEXTVAL INTO v_count FROM DUAL;
v_factuur_id := '2' || SUBSTR ('000000' || TO_CHAR (v_count), -6);
END IF;
v_factkop_id := v_factuur_id || '_' || SUBSTR (rec.maand, 1, 4) || '-' || SUBSTR (rec.maand, -2) || '_' || rec.debiteur_nr;
INSERT INTO fin_verkoopfactuurkop (fin_verkoopfactuurkop_id)
VALUES (v_factkop_id)
RETURNING fin_verkoopfactuurkop_key
INTO v_verkoopfactuurkop_key;
COMMIT;
v_old_contract_key := rec.refkey;
END IF;
v_errormsg := 'Fout toevoegen verkoopfactuur';
INSERT INTO fin_verkoopfactuur (fin_verkoopfactuurkop_key,
fin_verkoopfactuur_id,
fin_verkoopfactuur_datum,
fin_verkoopfactuur_omschr,
fin_verkoopfactuur_xmlnode,
fin_verkoopfactuur_refkey,
prs_kostenplaats_key,
prs_kostenplaats_nr,
prs_kostenplaats_omschrijving,
prs_kostenplaatsgrp_oms,
prs_kostensoort_oms,
prs_kostensoort_opmerking,
prs_kostensoort_refcode,
prs_bedrijf_key,
prs_debiteur_naam,
prs_kostensoortgrp_oms,
fin_verkoopfactuur_bedrag,
fin_verkoopfactuur_btw,
fin_btwtabelwaarde_code,
fin_btwtabelwaarde_oms,
fin_btwtabelwaarde_perc,
fin_btwtabelwaarde_verlegd,
fin_verkoopfactuur_maand,
fin_verkoopfactuur_n1,
fin_verkoopfactuur_n2,
fin_verkoopfactuur_n3,
fin_verkoopfactuur_n4,
fin_verkoopfactuur_n5,
fin_verkoopfactuur_c1,
fin_verkoopfactuur_c2,
fin_verkoopfactuur_c3,
fin_verkoopfactuur_c4,
fin_verkoopfactuur_c5,
fin_verkoopfactuur_c6,
fin_verkoopfactuur_c7,
fin_verkoopfactuur_c8,
fin_verkoopfactuur_d1,
fin_verkoopfactuur_d2,
fin_verkoopfactuur_d3,
fin_verkoopfactuur_d4,
fin_verkoopfactuur_d5)
VALUES (v_verkoopfactuurkop_key,
v_factuur_id,
TO_DATE (rec.factuurdatum, 'dd-mm-yyyy'),
rec.po_nr || '/=' || rec.sortering || rec.regel,
'contract',
rec.refkey,
rec.prs_kostenplaats_key,
rec.prs_kostenplaats_nr,
rec.prs_kostenplaats_omschrijving,
rec.prs_kostenplaatsgrp_oms,
rec.grtboekrek,
rec.grtboekrek,
rec.grtboekrek,
rec.prs_bedrijf_key,
rec.prs_debiteur_naam,
NULL,
rec.mndnet,
--rec.mndbtw,
ROUND ((rec.mndnet * rec.fin_btwtabelwaarde_perc) / 100, 2),
rec.fin_btwtabelwaarde_code,
rec.fin_btwtabelwaarde_oms,
rec.fin_btwtabelwaarde_perc,
rec.fin_btwtabelwaarde_verlegd,
rec.maand,
rec.mld_melding_key, -- n1/correctiemelding=NULL
rec.aantal, -- n2/aantal
rec.bedrag, -- n3/bedrag
rec.vvo_toeslag, -- n4/vvo_toeslag
rec.regel_key, -- n5/regel_key
rec.refid, -- c1/contract_id
NULL, -- c2
NULL, -- c3
NULL, -- c4
NULL, -- c5
rec.alg_onroerendgoed_type || rec.alg_onroerendgoed_keys || '=' || rec.alg_plaatsaanduiding, -- c6
rec.debiteur_nr || '=' || rec.beschrijving, -- c7
NULL, -- c8
TO_DATE (rec.vervaldatum, 'dd-mm-yyyy'), -- d1
TO_DATE (rec.mndbegin, 'dd-mm-yyyy'), -- d2
TO_DATE (rec.mndeinde, 'dd-mm-yyyy'), -- d3
TO_DATE (rec.dagbegin, 'dd-mm-yyyy'), -- d4
TO_DATE (rec.dageinde, 'dd-mm-yyyy')); -- d5
COMMIT;
v_fact_count := v_fact_count + 1;
v_amount_sum := v_amount_sum + rec.mndnet;
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.writelog (p_applname, 'E', rec.aanduiding || v_errormsg, 'FACT-freeze');
COMMIT;
END;
END LOOP;
fac.writelog (p_applname, 'S', 'FACT-verkoop/#regels: ' || TO_CHAR (v_fact_count), TO_CHAR (v_amount_sum));
-- Verstuur verkoopfactuur naar huurder.
FOR rec IN c2
LOOP
BEGIN
v_errormsg := 'Fout toevoegen CUST01-noti';
INSERT INTO fac_notificatie (fac_srtnotificatie_key,
fac_notificatie_status,
fac_notificatie_receiver_email,
fac_notificatie_oms,
fac_notificatie_refkey,
fac_notificatie_prioriteit,
fac_notificatie_datum,
fac_notificatie_sender_email,
fac_notificatie_attachments)
VALUES (281, -- CUST01-noti
2, -- Mail
DECODE ( -- To-adres
rec.prs_bedrijf_email,
NULL, 'finance.smartservices@brightlands.com',
rec.prs_bedrijf_email || ';finance.smartservices@brightlands.com'),
'Factuur ' || rec.fin_verkoopfactuur_id || ' ' || rec.fin_verkoopfactuur_maand || ' ' || rec.prs_debiteur_naam,
rec.fin_verkoopfactuurkop_key,
2, -- Prioriteit
TRUNC (SYSDATE) + (7 / 24),
'finance.smartservices@brightlands.com',
'/../../Fplace5i/CUST/BSSC/export/PDF/Backup/' || rec.fin_verkoopfactuurkop_id || '.pdf');
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.writelog (p_applname, 'E', rec.aanduiding || v_errormsg, 'FACT-noti');
COMMIT;
END;
END LOOP;
END IF;
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.writelog (p_applname, 'E', v_errormsg, 'FACT-export afgebroken!');
END;
/
------ payload end ------
SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 1); END;
/
COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile