set serveroutput on size 10000
spool bonifica_cessazione_fase2.log

declare 
  -- Local variables here
  v_result number;
  v_id_richiesta mnp_gestione_richiesta_cess.id_richiesta%type;
  v_data mnp_gestione_richiesta_cess.dataricezionerichiesta%type;
  v_processo char(1);
begin

  for r_cess in 
  ( select *
    from mnp_gestione_richiesta_cess t
    where t.stato in (91,96,99)
  )
  loop
    -- verifica dell'ultimo processo legato al MSISDN da cessare
    v_result := f_trova_ultimo_processo(r_cess.msisdn, v_id_richiesta, v_data, v_processo);
    
    -- aggiornamento dello stato ad ANNULLATA
    if v_result = 0 and v_data > r_cess.dataricezionerichiesta then
      -- inserimento nello storico
      insert INTO MNP_STORICO_CESS (ID_PROG,NOME_FILE,DATA_I_O,STATO_DA,STATO_A, TIPO_FILE,I_O,DATA_LAVORAZIONE,ID_RICHIESTA)
      select SEQ_MNP_STORICO_CESS.nextval,'bonifica',sysdate,r_cess.stato,7,7,1,TRUNC(SYSDATE),ID_RICHIESTA
      from MNP_GESTIONE_RICHIESTA_CESS where id_richiesta = r_cess.id_richiesta;

      update mnp_gestione_richiesta_cess t
      set t.stato = 7
      where t.id_richiesta = r_cess.id_richiesta;

      dbms_output.put_line('Aggiornato lo stato ad ANNULATA per la richiesta '|| r_cess.id_richiesta);
    
    elsif v_result > 0 then
      dbms_output.put_line('Errore nella verifica dell''ultimo processo per la richiesta '||r_cess.id_richiesta);
    end if;
  
  end loop; 
  
end;
/

commit;

spool off