|
||
BEGIN
DECLARE
--// Prametri Data
DATA_DAL DATE;
DATA_AL DATE;
IdArtSave NUMERIC (10,0);
IdCliSave NUMERIC (10,0);
IdListino NUMERIC (10,0);
IdListinoUtilizzato NUMERIC (10,0);
FlagSconti NUMERIC (10,0);
varPrezzo NUMERIC (15,5);
varImporto NUMERIC (15,4);
varImportoLordo NUMERIC (15,4);
Sc1 NUMERIC (10,2);
Sc2 NUMERIC (10,2);
Sc3 NUMERIC (10,2);
CURSOR curDOC IS
SELECT
T.ID_BOLLETCLI,
T.ID_CLI,
T.ID_CLIFAT,
T.ID_TIPODOC,
T.NBOLLA,
T.DATA_BOLLA,
R.ID_BOLLEDCLI_RIEP,
R.ID_ART,
R.DRAGDROP,
R.QTA,
A.CODICE
FROM
BOLLETCLI T,
BOLLEDCLI_RIEP R,
PARAMETRI_GLOBALI P,
ARTICOLI A
WHERE
T.ID_BOLLETCLI = R.ID_BOLLETCLI
AND
NVL(R.PREZZO,0) = 0
AND
R.ID_ART = A.ID_ARTICOLI
AND
T.DATA_BOLLA BETWEEN DATA_DAL AND DATA_AL
AND
T.ID_TIPODOC = P.NUMBER1
AND
P.SEZIONE = 'DESALUTE VALORIZZA IMPEGNATO'
AND
P.TIPO = 'ID_TIPI_DOC EG'
AND
P.ACTIVE = 1
ORDER BY
T.ID_CLI,
R.ID_ART,
T.ID_BOLLETCLI;
rec_DOC curDOC%ROWTYPE;
--//
CURSOR curCLI IS
SELECT
ID_CLIFOR_2
FROM
LINK_CLIFOR_MULTIDITTA
WHERE
ID_CLIFOR_1 = rec_DOC.ID_CLI
AND
TIPO_CLIFOR = 1;
rec_CLI curCLI%ROWTYPE;
--//
CURSOR curART IS
SELECT
ID_ARTICOLI,
ID_UM
FROM
ARTICOLI@DB2
WHERE
CODICE = rec_DOC.CODICE;
rec_ART curART%ROWTYPE;
CURSOR curVALUTA IS
SELECT
ID_VALUTA1
FROM
DITTE_TESEO@DB2;
rec_VALUTA curVALUTA%ROWTYPE;
BEGIN
--// Seto i parametri
DATA_DAL := #DATADAL ;
DATA_AL := #DATAAL ;
OPEN curVALUTA;
FETCH curVALUTA INTO
rec_VALUTA;
CLOSE curVALUTA;
IdArtSave := 0;
IdCliSave := 0;
OPEN curDOC;
FETCH curDOC INTO
rec_DOC;
WHILE curDOC%FOUND LOOP
IF IdCliSave = rec_DOC.ID_CLI THEN
GOTO TEST_CLI;
END IF;
--// Se cambia il Cliente devo comunque rifare le letture articoli
IdArtSave := 0;
--// Leggo relazione Cliente (Desalute/Eg)
OPEN curCLI;
FETCH curCLI INTO
rec_CLI;
IF NOT (curCLI%FOUND) THEN
rec_CLI.ID_CLIFOR_2 := 0;
END IF;
CLOSE curCLI;
<<TEST_CLI>>
IF NVL(rec_CLI.ID_CLIFOR_2,0) = 0 THEN
INSERT INTO TTV_TEMP
(
NUMBER1,NUMBER2,VCHAR1
)
VALUES
(
rec_DOC.ID_BOLLETCLI,
0,
'Cliente Desalute non relazionato con cliente EG'
);
GOTO NEXT_DOC;
END IF;
IF IdCliSave = rec_DOC.ID_CLI THEN
GOTO TEST_LIST;
END IF;
--// Leggo Listino ditta EG
IdListino := 0;
SELECT FN_LISTINO_CLI@DB2 (rec_CLI.ID_CLIFOR_2,rec_DOC.DATA_BOLLA)
INTO IdListino FROM DUAL;
<<TEST_LIST>>
IF NVL(IdListino,0) = 0 THEN
INSERT INTO TTV_TEMP
(
NUMBER1,NUMBER2,VCHAR1
)
VALUES
(
rec_DOC.ID_BOLLETCLI,
0,
'Impossibile determinare il Listino EG'
);
GOTO NEXT_DOC;
END IF;
IF IdArtSave = rec_DOC.ID_ART THEN
GOTO TEST_ART;
END IF;
--// Leggo ID_ARTICOLI ditta EG
OPEN curART;
FETCH curART INTO
rec_ART;
IF NOT (curART%FOUND) THEN
rec_ART.ID_ARTICOLI := 0;
END IF;
CLOSE curART;
<<TEST_ART>>
IF NVL(rec_ART.ID_ARTICOLI,0) = 0 THEN
INSERT INTO TTV_TEMP
(
NUMBER1,NUMBER2,VCHAR1
)
VALUES
(
rec_DOC.ID_BOLLETCLI,
rec_DOC.ID_ART,
'Articolo Desalute non relazionato con Articolo EG'
);
GOTO NEXT_DOC;
END IF;
IF IdArtSave = rec_DOC.ID_ART AND
IdCliSave = rec_DOC.ID_CLI THEN
GOTO TEST_PREZZO;
END IF;
--// Leggo Prezzo Listino ditta EG
varPrezzo := 0;
BEGIN
SELECT
FN_TO_NUM( SUBSTR( TT.PREZZO,1, INSTR ( TT.PREZZO,';' ) -1 ) )
INTO varPrezzo
FROM
(
SELECT
FN_PREZZO_LISTCLI@DB2 ( IdListino,
rec_VALUTA.ID_VALUTA1,
rec_ART.ID_ARTICOLI,
rec_DOC.QTA,
rec_ART.ID_UM,
rec_DOC.DATA_BOLLA
) PREZZO
FROM DUAL
) TT;
EXCEPTION WHEN NO_DATA_FOUND THEN
varPrezzo := 0;
END;
<<TEST_PREZZO>>
IF NVL(varPrezzo,0) = 0 THEN
INSERT INTO TTV_TEMP
(
NUMBER1,NUMBER2,VCHAR1
)
VALUES
(
rec_DOC.ID_BOLLETCLI,
rec_DOC.ID_ART,
'Impossibile determinare il Prezzo EG'
);
GOTO NEXT_DOC;
END IF;
IF IdArtSave = rec_DOC.ID_ART AND
IdCliSave = rec_DOC.ID_CLI THEN
GOTO REGISTRA;
END IF;
Sc1 := 0;
Sc2 := 0;
Sc3 := 0;
--// Leggo IdListino utilizzato (serve a leggere gli sconti)
IdListinoUtilizzato := 0;
BEGIN
SELECT
FN_TO_NUM( TT.PREZZO )
INTO IdListinoUtilizzato
FROM
(
SELECT
FN_PREZZO_LISTCLI@DB2 ( IdListino,
rec_VALUTA.ID_VALUTA1,
rec_ART.ID_ARTICOLI,
rec_DOC.QTA,
rec_ART.ID_UM,
rec_DOC.DATA_BOLLA,
2
) PREZZO
FROM DUAL
) TT;
EXCEPTION WHEN NO_DATA_FOUND THEN
IdListinoUtilizzato:= 0;
END;
IF NVL(IdListinoUtilizzato,0) = 0 THEN
GOTO REGISTRA;
END IF;
--// Il Listino prevede gli sconti?
SELECT FLAG_SCONTI INTO FlagSconti FROM TIPO_LISTINO@DB2
WHERE ID_TIPO_LISTINO = IdListinoUtilizzato ;
IF NVL(FlagSconti,0) = 1 THEN
GOTO REGISTRA;
END IF;
--// Leggo Sconti da Listino
BEGIN
SELECT min(AL.SCONTO1) SCONTO1,
min(AL.SCONTO2) SCONTO2,
min(AL.SCONTO3) SCONTO3
INTO Sc1, Sc2, Sc3
FROM VALUTA_LISTINO@DB2 VL, ARTICOLI_LISTINO@DB2 AL,
ARTICOLI_LISTINO_DET@DB2 ALD
WHERE VL.ID_TIPO_LISTINO = IdListinoUtilizzato
AND VL.ID_VALUTA = rec_VALUTA.ID_VALUTA1
AND VL.ID_VALUTA_LISTINO = AL.ID_VALUTA_LISTINO
AND AL.ID_ARTICOLI_LISTINO = ALD.ID_ARTICOLI_LISTINO
AND AL.ID_PADRE = rec_ART.ID_ARTICOLI
AND AL.DATA_INIZIO <= rec_DOC.DATA_BOLLA
AND AL.DATA_FINE >= rec_DOC.DATA_BOLLA;
EXCEPTION WHEN NO_DATA_FOUND THEN
Sc1 := 0;
Sc2 := 0;
Sc3 := 0;
END;
<<REGISTRA>>
varImporto := 0;
varImporto := varPrezzo * rec_DOC.QTA;
varImportoLordo := ROUND(varImporto,2);
IF Sc1 > 0 then
varImporto := varImporto - (varImporto * Sc1 / 100);
END IF;
IF Sc2 > 0 then
varImporto := varImporto - (varImporto * Sc2 / 100);
END IF;
IF Sc3 > 0 then
varImporto := varImporto - (varImporto * Sc3 / 100);
END IF;
varImporto := ROUND(varImporto,2);
UPDATE BOLLEDCLI_RIEP SET
IMPORTO = varImporto, IMPORTO_LORDO = varImportoLordo,
PREZZO = varPrezzo, PREZZO_LISTINO = varPrezzo,
SCONTO1 = Sc1, SCONTO2 = Sc2, SCONTO3 = Sc3, DATA_AGG = SYSDATE
WHERE ID_BOLLEDCLI_RIEP = rec_DOC.ID_BOLLEDCLI_RIEP;
UPDATE BOLLEDCLI SET
IMPORTO = varImporto, PREZZO = varPrezzo, DATA_AGG = SYSDATE
WHERE ID_BOLLEDCLI_RIEP = rec_DOC.ID_BOLLEDCLI_RIEP;
UPDATE MAGMOV SET
IMPORTO = varImporto, DATA_AGG = SYSDATE
WHERE ID_BOLLEDCLI_RIEP = rec_DOC.ID_BOLLEDCLI_RIEP;
<<NEXT_DOC>>
IdArtSave := rec_DOC.ID_ART;
IdCliSave := rec_DOC.ID_CLI;
FETCH curDOC INTO
rec_DOC;
END LOOP;
CLOSE curDOC;
END;
END;