-- AGGIORNAMENTO DIRETTO SENZA PASSARE PER LE TABELLE PRINCIPALI
-- PER LE RICHIESTE PRECEDENTI AL <DATA> QUANDO ANCORA NON ESISTEVANO I VIRTUALI
UPDATE dbcgo_donor_pp dpp            
SET dpp.codice_operatore_don_eff = dpp.CODICE_OPERATORE_DONATING,
    dpp.codice_operatore_rec_eff = dpp.CODICE_OPERATORE_RECIPIENT
WHERE data_transizione_stato < TO_DATE('01012009','ddmmyyyy');
COMMIT;

UPDATE dbcgo_recipient_pp rpp        
SET rpp.codice_operatore_don_eff = rpp.CODICE_OPERATORE_DONATING,
    rpp.codice_operatore_rec_eff = rpp.CODICE_OPERATORE_RECIPIENT
WHERE data_transizione_stato < TO_DATE('01012009','ddmmyyyy');
COMMIT;

UPDATE dbcgo_porting_pp ppp
SET ppp.codice_operatore_don_eff = ppp.CODICE_OPERATORE_DONATING,
    ppp.codice_operatore_rec_eff = ppp.CODICE_OPERATORE_RECIPIENT
WHERE data_transizione_stato < TO_DATE('01012009','ddmmyyyy');
COMMIT;


-- AGGIORNAMENTO DEI DATI PER LE RICHIESTE PRESENTI SU DBCGO
UPDATE dbcgo_donor_pp dpp
SET (dpp.codice_operatore_don_eff, dpp.codice_operatore_rec_eff) = 
  ( SELECT NVL(CODICE_OPERATORE_V_DONOR,CODICE_OPERATORE_DONATING), NVL(CODICE_OPERATORE_V_RECIPIENT,CODICE_OPERATORE_RECIPIENT) 
    FROM dbcgo_gestione_richiesta WHERE id_richiesta = dpp.id_richiesta)
WHERE codice_operatore_don_eff IS NULL;
COMMIT;

UPDATE dbcgo_recipient_pp rpp
SET (rpp.codice_operatore_don_eff, rpp.codice_operatore_rec_eff) = 
  ( SELECT NVL(CODICE_OPERATORE_V_DONOR,CODICE_OPERATORE_DONATING), NVL(CODICE_OPERATORE_V_RECIPIENT,CODICE_OPERATORE_RECIPIENT) 
    FROM dbcgo_gestione_richiesta_rec WHERE id_richiesta = rpp.id_richiesta)
WHERE codice_operatore_don_eff IS NULL;
COMMIT;


-- AGGIORNAMENTO DEI DATI PER LE RICHIESTE NON PRESENTI SU DBCGO
--
-- ESTRAZIONE DELLE INFORMAZIONI DALLE TABELLE ON-LINE di DBC
UPDATE dbcgo_donor_pp dpp
SET (dpp.codice_operatore_don_eff, dpp.codice_operatore_rec_eff) = 
  ( SELECT codice_operatore_don_eff, codice_operatore_rec_eff  
    FROM mnp_gestione_richiesta@mnp 
    WHERE id_richiesta = dpp.id_richiesta)
WHERE codice_operatore_don_eff IS NULL;
COMMIT;

UPDATE dbcgo_recipient_pp rpp
SET (rpp.codice_operatore_don_eff, rpp.codice_operatore_rec_eff) = 
  ( SELECT codice_operatore_don_eff, codice_operatore_rec_eff
    FROM mnp_gestione_richiesta_rec@mnp WHERE id_richiesta = rpp.id_richiesta)
WHERE codice_operatore_don_eff IS NULL;
COMMIT;

UPDATE dbcgo_porting_pp ppp
SET (ppp.codice_operatore_don_eff, ppp.codice_operatore_rec_eff) = 
  ( SELECT codice_operatore_don_eff, codice_operatore_rec_eff
    FROM mnp_gestione_richiesta_porting@mnp WHERE id_richiesta = ppp.id_richiesta)  
WHERE codice_operatore_don_eff IS NULL;
COMMIT;
--
--

--
-- AGGIORNAMENTO DELLE RICHIESTE CHE NON HANNO AVUTO NESSUNA CORRISPONDENZA
-- DALLE PRECEDENTI UPDATE, DOVREBBERO AGGIORNARE ZERO RECORD
UPDATE dbcgo_donor_pp dpp            
SET dpp.codice_operatore_don_eff = dpp.CODICE_OPERATORE_DONATING,
    dpp.codice_operatore_rec_eff = dpp.CODICE_OPERATORE_RECIPIENT
WHERE codice_operatore_don_eff IS NULL;
COMMIT;

UPDATE dbcgo_recipient_pp rpp        
SET rpp.codice_operatore_don_eff = rpp.CODICE_OPERATORE_DONATING,
    rpp.codice_operatore_rec_eff = rpp.CODICE_OPERATORE_RECIPIENT
WHERE codice_operatore_don_eff IS NULL;
COMMIT;

UPDATE dbcgo_porting_pp ppp
SET ppp.codice_operatore_don_eff = ppp.CODICE_OPERATORE_DONATING,
    ppp.codice_operatore_rec_eff = ppp.CODICE_OPERATORE_RECIPIENT
WHERE codice_operatore_don_eff IS NULL;
COMMIT;


-- aggiornamento tabella centrale
UPDATE dbcgo_pp pp
SET (codice_operatore_donating, codice_operatore_recipient) =
  ( SELECT NVL(pp_vw.codice_operatore_don_eff, pp_vw.CODICE_OPERATORE_DONATING), NVL(pp_vw.codice_operatore_rec_eff, pp_vw.CODICE_OPERATORE_RECIPIENT)
    FROM DBCGO_PP_VIEW pp_vw
    WHERE pp.id_richiesta = pp_vw.id_richiesta
      AND pp.processo = pp_vw.processo
      AND (pp.codice_operatore_donating <> pp_vw.codice_operatore_don_eff OR pp.codice_operatore_recipient  <> pp_vw.codice_operatore_rec_eff))
WHERE (id_richiesta, processo) IN
  ( SELECT id_richiesta, processo
    FROM DBCGO_PP_VIEW pp_vw
    WHERE pp.id_richiesta = pp_vw.id_richiesta
      AND pp.processo = pp_vw.processo
      AND (pp.codice_operatore_donating <> pp_vw.codice_operatore_don_eff OR pp.codice_operatore_recipient  <> pp_vw.codice_operatore_rec_eff));

COMMIT;
