diff --git a/onces/DVON/DVON#88086.sql b/onces/DVON/DVON#88086.sql new file mode 100644 index 000000000..c34d124b6 --- /dev/null +++ b/onces/DVON/DVON#88086.sql @@ -0,0 +1,129 @@ +-- +-- $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