SET TERM ^ ;
EXECUTE BLOCK AS BEGIN
if (exists(select 1 from RDB$PROCEDURES where rdb$Procedure_name = 'CALCOLA_PRESUNTOTPRENCONTO')) then 
execute statement 'drop procedure CALCOLA_PRESUNTOTPRENCONTO;';
END^
COMMIT^
CREATE PROCEDURE CALCOLA_PRESUNTOTPRENCONTO (
    CODICE Integer,
    TIPO Char(1) )
RETURNS (
    TOTALE Numeric(10,2) )
AS
DECLARE VARIABLE GIORNI  INTEGER;
DECLARE VARIABLE giorni_temp INTEGER;
DECLARE VARIABLE DATA_DAL_OLD TIMESTAMP;
DECLARE VARIABLE TARIFFA NUMERIC(10,2);
DECLARE VARIABLE DATA_DAL TIMESTAMP;
DECLARE VARIABLE ARRIVO TIMESTAMP;
BEGIN
    if(tipo='C') then 
        BEGIN
        TOTALE=0;
        select cast(partenza-arrivo as INTEGER), partenza,arrivo from WGHCONTO where codice=:CODICE
            into :GIORNI, :DATA_DAL_OLD,:ARRIVO;
        for select tariffa,dal from wghprentar where codpren=:CODICE and tipo='C'
            order by dal DESC
            into :tariffa,:DATA_DAL
            do
            BEGIN
            giorni_temp=CAST((data_dal-arrivo) as INTEGER);
            TOTALE=TOTALE+(tariffa*(giorni-giorni_temp));
            giorni_temp=CAST((data_dal_old-data_dal) as INTEGER);
            giorni=giorni-giorni_temp;
            data_dal_old=data_dal;
            END
        END
    
    if(tipo='P') THEN
        BEGIN
        TOTALE=0;
        select cast(partenza-arrivo as INTEGER), partenza,arrivo from WGHPREN where codice=:CODICE
            into :GIORNI, :DATA_DAL_OLD,:ARRIVO;
        for select tariffa,dal from wghprentar where codpren=:CODICE and tipo is NULL
            order by dal DESC
            into :tariffa,:DATA_DAL
            do
            BEGIN
            giorni_temp=CAST((data_dal-arrivo) as INTEGER);
            TOTALE=TOTALE+(tariffa*(giorni-giorni_temp));
            giorni_temp=CAST((data_dal_old-data_dal) as INTEGER);
            giorni=giorni-giorni_temp;
            data_dal_old=data_dal;
            END
        END
    SUSPEND;
END^
SET TERM ; ^

GRANT EXECUTE
 ON PROCEDURE CALCOLA_PRESUNTOTPRENCONTO TO  SYSDBA;

