--PACKAGE GestArt CREATE OR REPLACE PACKAGE BODY GestArt AS tSQL varchar2(300); --CORPO DELLA PROCEDURA IsArtPresent PROCEDURE Sp_InsArticolo(CODART_I IN ARTICOLI.CODART%TYPE, DESCRIZIONE_I IN ARTICOLI.DESCRIZIONE%TYPE, UM_I IN ARTICOLI.UM%TYPE, CODSTAT_I IN ARTICOLI.CODSTAT%TYPE, PZCART_I IN ARTICOLI.PZCART%TYPE, PESONETTO_I IN ARTICOLI.PESONETTO%TYPE, IDIVA_I IN ARTICOLI.IDIVA%TYPE, IDSTATO_I IN ARTICOLI.IDSTATOART%TYPE, IDFAMASS_I IN ARTICOLI.IDFAMASS%TYPE) IS V_IfExists BOOLEAN; BEGIN V_IfExists := IsArtPresent(CODART_I); IF V_IfExists = TRUE THEN UPDATE ARTICOLI SET DESCRIZIONE = DESCRIZIONE_I, UM = UM_I, CODSTAT = CODSTAT_I, PZCART = PZCART_I, PESONETTO = PESONETTO_I, IDIVA = IDIVA_I, IDSTATOART = IDSTATO_I, IDFAMASS = IDFAMASS_I WHERE CODART = CODART_I; ELSE INSERT INTO ARTICOLI VALUES(CODART_I,DESCRIZIONE_I,UM_I,CODSTAT_I,PZCART_I, PESONETTO_I,IDIVA_I,IDSTATO_I,SYSDATE,IDFAMASS_I); END IF; END Sp_InsArticolo; --CORPO DELLA FUNZIONE Uf_GetQtaMag FUNCTION Uf_GetQtaMag(CODART_I IN ARTICOLI.CODART%TYPE) RETURN NUMBER AS V_RetVal NUMBER; BEGIN SELECT (ACQUISTATO - RESO - VENDUTO - USCITE - SCADUTI) INTO V_RetVal FROM MOVIMENTI WHERE CODART = CODART_I; RETURN V_RetVal; EXCEPTION WHEN NO_DATA_FOUND THEN RETURN 0; WHEN TOO_MANY_ROWS THEN RAISE_APPLICATION_ERROR (-20001, 'Errore Calcolo Magazzino Articolo ' || CODART_I); RETURN 0; END Uf_GetQtaMag; --CORPO DELLA FUNZIONE Uf_GetVenMese FUNCTION Uf_GetVenMese(CODART_I IN ARTICOLI.CODART%TYPE, MeseRif_I NUMBER, AnnoRif_I NUMBER) RETURN NUMBER AS V_RetVal NUMBER; BEGIN SELECT SUM(VALORE) INTO V_RetVal FROM VW_SCONTRINI WHERE CODART = CODART_I AND EXTRACT(MONTH FROM DATA) = MeseRif_I AND EXTRACT(YEAR FROM DATA) = AnnoRif_I; RETURN V_RetVal; EXCEPTION WHEN OTHERS THEN RETURN 0; END Uf_GetVenMese; --CORPO DELLA FUNZIONE IsArtPresent FUNCTION IsArtPresent(CODART_I IN ARTICOLI.CODART%TYPE) RETURN BOOLEAN IS V_Count_Art number; BEGIN SELECT COUNT(*) INTO V_Count_Art FROM ARTICOLI WHERE CODART = CODART_I; IF (V_Count_Art > 0) THEN RETURN TRUE; ELSE RETURN FALSE; END IF; EXCEPTION WHEN OTHERS THEN RETURN FALSE; END IsArtPresent; --CORPO DELLA PROCEDURA Sp_SelArticolo PROCEDURE Sp_SelArticolo(CODART_I IN ARTICOLI.CODART%TYPE, ARTICOLO_O OUT Info_Articolo) IS BEGIN OPEN ARTICOLO_O FOR SELECT A.CODART, A.DESCRIZIONE, A.UM, A.PZCART, A.CODSTAT, A.PESONETTO, A.IDIVA AS IVA, A.IDSTATOART AS STATO, A.IDFAMASS, TRIM(B.DESCRIZIONE) AS REPARTO, Uf_GetQtaMag(A.CODART) AS QtaMag FROM ARTICOLI A JOIN FAMASSORT B ON A.IDFAMASS = B.ID WHERE CODART = CODART_I; END Sp_SelArticolo; --CORPO DELLA PROCEDURA Sp_SelArticolo PROCEDURE Sp_SelArticolo(Parametro IN ARTICOLI.DESCRIZIONE%TYPE, Tipo IN NUMBER, RECORDSET_P OUT SYS_REFCURSOR) IS BEGIN tSQL := 'SELECT CODART, DESCRIZIONE, UM, PZCART, CODSTAT, PESONETTO, IDIVA AS IVA, IDSTATOART AS STATO, IDFAMASS FROM ARTICOLI '; IF Tipo = 1 THEN --CASO CODART OPEN RECORDSET_P FOR tSQL || ' WHERE CODART = :1' USING PARAMETRO; ELSIF TIPO = 2 THEN --CASO DESCRIZIONE OPEN RECORDSET_P FOR tSQL || ' WHERE DESCRIZIONE LIKE :1' USING PARAMETRO; ELSIF TIPO = 3 THEN --CASE BARCODE OPEN RECORDSET_P FOR tSQL || ' CODART IN (SELECT CODART FROM BARCODE WHERE BARCODE = :1)' USING PARAMETRO; END IF; END Sp_SelArticolo; --CORPO DELLA PROCEDURA Sp_DelArticolo PROCEDURE Sp_DelArticolo(CODART_I IN ARTICOLI.CODART%TYPE) AS BEGIN IF IsArtPresent(CODART_I) THEN DELETE FROM ARTICOLI WHERE CODART = CODART_I; END IF; END; END GestArt;