Manuale Teseo

Valorizzazione impegnato (query)

Nascondi pannello di navigazione

Valorizzazione impegnato (query)

Argomento precedente Prossimo argomento Nessuna directory per questo argomento Nessuna espansione tesuale in questo argomento  

Valorizzazione impegnato (query)

Argomento precedente Prossimo argomento Topic directory requires JavaScript JavaScriptrichiesto per espandere il testo JavaScript richiesto per la funzione di stampa Inviaci un feedback su questo argomento!  

Valorizzazione impegnato (query)

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;