CREATE OR REPLACE PACKAGE AABS_DG_WRITE_PSR is
     procedure InsParc(atto_ammi in number);
end AABS_DG_WRITE_PSR;
/


CREATE OR REPLACE PACKAGE BODY AABS_DG_WRITE_PSR is
    codOrpa constant number:= modificare; -- da modificare a seconda dell'OP
procedure InsParc(atto_ammi in number) is

    conta_apag number;
    conta_colt_appe number;
    cParc AABSPARC_PSR_COL;
    cApag AABSPARC_COL;
    idParcella number;
    IdInvio number;
	

begin

    
    cParc:= AABS_DG_READ_PSR.getParcPsrIns(atto_ammi);
    cApag := AABS_DG_READ_PSR.getParcDettPsrIns(atto_ammi);
    select AABS_DG_INVIO.nextval into IdInvio from dual;
    -- check oggetti non vuoti
    begin

        if cParc.count = 0 then
            raise_application_error(-20001, 'Errore inserimento domanda: atto '||atto_ammi||' nessuna parcella da inserire.');
        end if;

        if cApag.count = 0 then
            raise_application_error(-20002, 'Errore inserimento domanda: atto '||atto_ammi||' nessun appezzamento da inserire.');
        end if;
    end;

    -- check domanda : esiste un dettaglio per ogni parcella
    begin

        select count(*) into conta_apag 
        from table(cParc) a 
        where not exists (select 1 from table(cApag) b where  a.ID_PARC=b.ID_PARC);

        if conta_apag>0 then
            raise_application_error(-20003, 'Errore inserimento domanda: atto '||atto_ammi||' parcelle senza appezzamenti.');
        end if;
    end;

    for i in 1..cParc.count loop

        select AABSPARC_SEQ.nextval into idParcella from dual;

        --dbms_output.put_line('parcella = '||cParc(i).id_parc);
        begin

          insert into
          AABSPARCPSR_TAB (          
          ID_ORPA,
          ID_INVIO,
          CAMPAGNA,
          CUAA,
          ID_ATTO_AMMI,
          ID_SCHEDA,
          ID_PARC,
          ID_INTE,
          SUPER_PARC ,
          SHAPE,
          PRG_PARC,
          DATA_INS) 
          values(codOrpa,
                 IdInvio,
                 cParc(i).CAMPAGNA,
                 cParc(i).CUAA,
                 cParc(i).ID_ATTO_AMMI,
                 cParc(i).ID_SCHEDA,
                 cParc(i).ID_PARC,
                 cParc(i).ID_INTE,
                 cParc(i).SUPERFICIE,
                 SDO_UTIL.TO_WKTGEOMETRY(cParc(i).SHAPE) ,
                 idParcella,
                 sysdate
                 );

        exception when dup_val_on_index then
          raise_application_error(-20004, 'Non è possibile sincronizzare un atto già sincronizzata');
        end ;



        insert into AABSAPAGPSR_TAB(ID_INVIO,
                                  ID_ATTO_AMMI ,
                                 ID_PARC ,
                                 COD_COLT,
                                 ID_ORPA,
                                 prg_parc,
                                 DATA_INS)
          select
          IdInvio,
          ID_ATTO_AMMI,
          ID_PARC,
          COD_COLT,
          codOrpa ,
          idParcella,
          sysdate
          from table(cApag) 
          where id_parc=cParc(i).ID_PARC;
    end loop;


exception when others then
    raise_application_error(-20000, 'Errore inserimento sincronizzazione domanda:'||sqlerrm);
end InsParc;
end AABS_DG_WRITE_PSR;
/

CREATE PUBLIC SYNONYM AABS_DG_WRITE_PSR FOR AABS_DG_WRITE_PSR;
/
