UWVA#24389 CATALOGUS-import: Functionaliteit igv. artikelen met hetzelfde artikelnummer

svn path=/Database/trunk/; revision=16967
This commit is contained in:
Erik Groener
2013-02-28 10:45:21 +00:00
parent 4d519e92a6
commit 7ed5e0c113
3 changed files with 150 additions and 1 deletions

View File

@@ -142,7 +142,8 @@ CREATE_TABLE(bes_srtdeel,0)
NUMBER(1)
DEFAULT 0,
bes_srtdeel_nr
VARCHAR2(32),
VARCHAR2(32)
NOT_NULL(bes_srtdeel_nr, bes_c_bes_srtdeel_nr),
prs_bedrijf_key
NUMBER(10)
CONSTRAINT bes_r_prs_bedrijf_key3 REFERENCES prs_bedrijf(prs_bedrijf_key),

View File

@@ -1023,6 +1023,14 @@ AS
);
ccount := ccount + 1;
EXCEPTION
WHEN DUP_VAL_ON_INDEX
THEN
v_errormsg := 'Artikelnummer dubbel in importbestand';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
END;
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;

View File

@@ -232,6 +232,146 @@ MENU_INS_AFTER( 'lcl_menu_prs_browser', 'lcl_menu_prs_bedrijf_intern', 2);
/////////////////////////////////////////////////////////////////////////////////////////// FSN#25849
ALTER TABLE prs_perslid ADD prs_perslid_options VARCHAR2(4000);
/////////////////////////////////////////////////////////////////////////////////////////// UWVA#24389
DECLARE
CURSOR c1 IS
SELECT bes_srtdeel_nr,
bes_srtgroep_key,
prs_bedrijf_key,
bes_srtdeel_verwijder,
COUNT ( * )
FROM bes_srtdeel
GROUP BY bes_srtdeel_nr,
bes_srtgroep_key,
prs_bedrijf_key,
bes_srtdeel_verwijder
HAVING COUNT ( * ) > 1;
r1 c1%ROWTYPE;
CURSOR c2( srtdeel_nr VARCHAR2
, srtgroep_key NUMBER
, bedrijf_key NUMBER
, vdatum DATE
) IS
SELECT S.bes_srtdeel_verwijder + NUMTODSINTERVAL(rownum-1,'SECOND') d1
FROM bes_srtdeel S
WHERE ((S.bes_srtdeel_nr = srtdeel_nr) OR (S.bes_srtdeel_nr IS NULL))
AND S.bes_srtgroep_key = srtgroep_key
AND S.prs_bedrijf_key = bedrijf_key
AND S.bes_srtdeel_verwijder = vdatum
FOR UPDATE;
r2 c2%ROWTYPE;
CURSOR c3( srtdeel_nr VARCHAR2
, srtgroep_key NUMBER
, bedrijf_key NUMBER
) IS
SELECT S.bes_srtdeel_key
, (SELECT NVL(MAX(1),0)
FROM bes_bestelling_item B
WHERE B.bes_srtdeel_key = S.bes_srtdeel_key
) besteld
FROM bes_srtdeel S
WHERE ((S.bes_srtdeel_nr = srtdeel_nr) OR (S.bes_srtdeel_nr IS NULL))
AND S.bes_srtgroep_key = srtgroep_key
AND S.prs_bedrijf_key = bedrijf_key
AND S.bes_srtdeel_verwijder IS NULL
ORDER BY besteld DESC, S.bes_srtdeel_aanmaak DESC;
r3 c3%ROWTYPE;
vdate1 date;
vdate2 date;
aantal number;
prfkey number;
BEGIN
/* Niet verwijderde artikelen naar 1 artikelnummer verplaatsen */
OPEN c1;
LOOP
FETCH c1 INTO r1;
EXIT WHEN c1%NOTFOUND;
IF r1.bes_srtdeel_verwijder IS NULL
THEN
DBMS_OUTPUT.put_line ('>Artikelnr: ' || r1.bes_srtdeel_nr);
aantal := 0;
FOR r3 in c3( r1.bes_srtdeel_nr
, r1.bes_srtgroep_key
, r1.prs_bedrijf_key
)
LOOP
IF aantal = 0
THEN
prfkey := r3.bes_srtdeel_key;
DBMS_OUTPUT.put_line (aantal||'# '||r3.bes_srtdeel_key);
ELSE
/* Omhangen van artikel in bestel-item */
DBMS_OUTPUT.put_line (aantal||'# '||r3.bes_srtdeel_key ||'-->'||prfkey);
UPDATE bes_bestelling_item
SET bes_srtdeel_key = prfkey
WHERE bes_srtdeel_key = r3.bes_srtdeel_key;
/* Verwijder het niet meer gebruikte artikel */
DBMS_OUTPUT.put_line ('Verwijder: '||r3.bes_srtdeel_key);
UPDATE bes_srtdeel
SET bes_srtdeel_verwijder = sysdate
WHERE bes_srtdeel_key = r3.bes_srtdeel_key;
END IF;
aantal := aantal + 1;
/* Leeg artikelnr met default vullen */
IF r1.bes_srtdeel_nr is null
THEN
DBMS_OUTPUT.put_line ('Artikelnr vullen:'||'Artikel '||prfkey);
UPDATE bes_srtdeel
SET bes_srtdeel_nr = 'Artikel '||prfkey
WHERE bes_srtdeel_key = r3.bes_srtdeel_key;
END IF;
END LOOP;
END IF;
END LOOP;
CLOSE c1;
/* verwijderdatum artikelen uniek maken */
OPEN c1;
LOOP
FETCH c1 INTO r1;
EXIT WHEN c1%NOTFOUND;
IF r1.bes_srtdeel_verwijder IS NOT NULL
THEN
FOR r2 IN c2( r1.bes_srtdeel_nr
, r1.bes_srtgroep_key
, r1.prs_bedrijf_key
, r1.bes_srtdeel_verwijder
)
LOOP
vdate1 := r2.d1;
vdate2 := r1.bes_srtdeel_verwijder;
DBMS_OUTPUT.put_line ('>Wijzig verwijderdatum: ' ||to_char(vdate2, 'dd-mm-yyyy hh24:mi:ss')
||'-->' ||to_char(vdate1, 'dd-mm-yyyy hh24:mi:ss'));
UPDATE bes_srtdeel
SET bes_srtdeel_verwijder = vdate1
WHERE CURRENT OF c2;
END LOOP;
END IF;
END LOOP;
CLOSE c1;
/* Al verwijderde artikelen zonder artikelnummer voorzien van artikelnr */
UPDATE bes_srtdeel
SET bes_srtdeel_nr = 'Artikel '||bes_srtdeel_key
WHERE bes_srtdeel_nr IS NULL
AND bes_srtdeel_verwijder IS NOT NULL;
END;
/
ALTER TABLE bes_srtdeel MODIFY bes_srtdeel_nr NOT_NULL(bes_srtdeel_nr, bes_c_bes_srtdeel_nr);
CREATE INDEX bes_i_bes_srtdeel2 ON bes_srtdeel(bes_srtdeel_nr);
///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////