Files
Customer/onces/DVON/DVON#88086.sql
Maarten van der Heide 436cddb528 DJIN#88086 Once/Bulkschoning open bestellingen (voor 1-1-2024)
svn path=/Customer/; revision=68665
2025-04-04 12:38:35 +00:00

130 lines
4.8 KiB
SQL

--
-- $Id$
--
-- Customer specific once-script DJIN#88086.sql.
DEFINE thisfile = 'DJIN#88086.sql'
DEFINE dbuser = '^FMD'
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 ------
SET SERVEROUTPUT ON size 1000000;
DECLARE
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER;
BEGIN
v_count := 0;
-- Cursor over alle open bestelopdracht-items aangemaakt voor 01-01-2024
-- en gemarkeerd als 'Wachten op leverancier'; deze worden op 0 gesteld (of
-- naar zover deelgeleverd) en op geleverd gezet!
FOR rc
IN (SELECT DISTINCT bo.bes_bestelopdr_key
FROM bes_bestelopdr bo,
bes_bestelopdr_item boi,
bes_bestelling_item bi,
bes_bestelling b
WHERE bo.bes_bestelopdr_status = 4 -- In bestelling
AND bo.bes_bestelopdr_flag = 3 -- Wachten op leverancier
AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key
AND bi.bes_bestelling_key = b.bes_bestelling_key
AND b.bes_bestelling_datum < TO_DATE ('01-01-2024', 'dd-mm-yyyy'))
LOOP
BEGIN
v_errormsg := 'Leveren bestelopdr ' || TO_CHAR (rc.bes_bestelopdr_key);
-- Verlaag wat besteld is naar wat deelgeleverd is (als er niets is
-- deelgeleverd, dan wordt de bestelopdracht dus op 0 gesteld).
UPDATE bes_bestelopdr_item
SET bes_bestelopdr_item_aantal = COALESCE (bes_bestelopdr_item_aantalontv, 0)
WHERE bes_bestelopdr_key = rc.bes_bestelopdr_key;
bes.updatebestelopdrstatus (rc.bes_bestelopdr_key, NULL);
v_count := v_count + 1;
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 || ')';
DBMS_OUTPUT.PUT_LINE ('W: ' || v_errormsg);
COMMIT;
END;
END LOOP;
DBMS_OUTPUT.PUT_LINE ('S: ' || TO_CHAR (v_count) || ' bestelopdrachten geleverd (besteld=ontvangen)');
COMMIT;
v_count := 0;
-- Cursor loopt over alle bestelling-items met status 'Besteld' waarvan
-- de bijbehorende bestelopdracht-items zijn geleverd; deze worden dan ook
-- gesloten!
FOR rc
IN (SELECT DISTINCT b.bes_bestelling_key
FROM bes_bestelling b
WHERE b.bes_bestelling_status = 5 -- Besteld
AND NOT EXISTS -- Geen onderliggende bestelopdracht(en) niet op Geleverd, dus alles Geleverd (aantalontv = aantal)!
(SELECT 1
FROM bes_bestelling_item bi,
bes_bestelopdr_item boi,
bes_bestelopdr bo
WHERE bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND bo.bes_bestelopdr_status != 6 -- Geleverd
AND bi.bes_bestelling_key = b.bes_bestelling_key))
LOOP
BEGIN
v_errormsg := 'Leveren bestelling ' || TO_CHAR (rc.bes_bestelling_key);
-- Sluit alle aanvraagregels af die nu geheel geleverd zijn.
--UPDATE bes_bestelling_item
-- SET bes_bestelling_item_aantalontv = bes_bestelling_item_aantal
-- WHERE bes_bestelling_key = rc.bes_bestelling_key;
bes.updatebestellingstatus (rc.bes_bestelling_key, NULL);
v_count := v_count + 1;
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 || ')';
DBMS_OUTPUT.PUT_LINE ('W: ' || v_errormsg);
COMMIT;
END;
END LOOP;
DBMS_OUTPUT.PUT_LINE ('S: ' || TO_CHAR (v_count) || ' bestellingen geleverd (aantallen ongewijzigd)');
COMMIT;
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