
SET TERM ^ ;

CREATE PROCEDURE PREVISIONE_PROD_CANALI_TOT (
    DALLADATA Timestamp,
    ALLADATA Timestamp )
RETURNS (
    GIORNO Timestamp,
    PRESENZE Integer,
    CAMERE Integer,
    PRODUZIONE Numeric(10,2),
    CANALE Varchar(24),
    OCCUPAZIONE Integer )
AS
DECLARE VARIABLE codice_pren INTEGER;
DECLARE VARIABLE tariffa NUMERIC(10,2);
DECLARE VARIABLE old_codice_pren INTEGER; 
DECLARE VARIABLE id_canale INTEGER;
DECLARE VARIABLE id_segmento INTEGER;
DECLARE VARIABLE tot_camere INTEGER;
DECLARE VARIABLE temp_presenze INTEGER;
declare VARIABLE temp_produzione NUMERIC(10,2);
DECLARE VARIABLE temp_camere INTEGER;
BEGIN
  select WGHAZIENDA.CAMERE from WGHAZIENDA into :tot_camere;
  for select wghcanseg.CODICE,WGHCANSEG.DESCRIZIONE from WGHCANSEG where WGHCANSEG.T='C' into :id_canale,:canale        
    do
    BEGIN
    camere=0;
    produzione=0;
    presenze=0;
    for select CONTEGGIA_GIORNI.DATA_GIORNO from CONTEGGIA_GIORNI(:DALLADATA,:ALLADATA)  into :giorno
    do 
    BEGIN
        select COALESCE(sum(wghpren.ADULTI+wghpren.BAMBINI),0) from wghpren 
            where WGHPREN.arrivo<=:GIORNO and WGHPREN.PARTENZA>:GIORNO and wghpren.CANALE_V=:id_canale into :temp_presenze;
        select COALESCE(sum(case when (WGHPRENCAM.QTA is null) then 1 else WGHPRENCAM.QTA END),0) 
            from WGHPRENCAM inner join WGHPREN on WGHPRENCAM.CODPREN=WGHPREN.CODICE 
            where WGHPREN.arrivo<=:GIORNO and WGHPREN.PARTENZA>:GIORNO and wghpren.CANALE_V=:id_canale into :temp_camere;
        temp_produzione=0;
        codice_pren=0;
        old_codice_pren=0;
        for select WGHPRENTAR.CODPREN,COALESCE(WGHPRENTAR.TARIFFA,0) from WGHPRENTAR inner join WGHPREN on WGHPRENTAR.CODPREN=WGHPREN.CODICE
            where WGHPREN.ARRIVO<=:GIORNO and WGHPREN.PARTENZA>:GIORNO and WGHPRENTAR.DAL<=:GIORNO and wghpren.CANALE_V=:id_canale
            order by 1,WGHPRENTAR.DAL DESC into :codice_pren,:tariffa
            do
            BEGIN
            if(codice_pren<>old_codice_pren) then 
                BEGIN
                old_codice_pren=codice_pren;
                temp_produzione=temp_produzione+tariffa;
                END
            END
        /*occupazione=CAST(camere as numeric(3,2))/tot_camere*100;*/
        produzione=produzione+temp_produzione;
        camere=camere+temp_camere;
        presenze=presenze+temp_presenze;
    END
    occupazione=cast(camere as float)/cast(tot_camere*(alladata-dalladata) as FLOAT)*100;
    SUSPEND;
    
    END
END^
SET TERM ; ^

GRANT EXECUTE
 ON PROCEDURE PREVISIONE_PROD_CANALI_TOT TO  SYSDBA;

