CREATE PROCEDURE "DBA"."pa_kp_kan_erisood"( in a_skoopkood char(16), in a_skoop integer, in a_t_akuu numeric(2), in a_t_aasta numeric(4), in a_user_code integer default 32767 )
BEGIN
  declare ld_peralg date;
  declare ld_perlop date;
  declare ll_id integer;
  declare ll_lisanr integer;
  declare ll_yksusnr integer;
  declare ldc_summa numeric(15,2);
  declare ls_info char(200);
  declare ll_asutnr integer;
  declare ll_meetnr integer;
  declare ll_kulnr integer;
  declare ll_talnr integer;
  declare ll_artnr integer;
  declare ll_tulnr integer;
  declare ll_objectnr integer;
  declare ll_osaknr integer;
  declare ll_subjectnr integer;
  declare ll_suundnr integer;
  declare ll_taotnr integer;
  declare ll_alliknr integer;
  declare ll_ravonr integer;
  declare li_tatk_skoop smallint;
  declare err_notfound exception for sqlstate value '02000';
  declare c_update dynamic scroll cursor for select "id",lisanr,yksusnr,summa+summa_orig,"info",asutnr,meetnr,kulnr,talnr,tulnr,artnr,objectnr,osaknr,subjectnr,suundnr,taotnr,alliknr,ravonr from gl_pa_erisood_update where summa<>0;
  delete from gl_pa_erisood;
  delete from gl_pa_erisood_import;
  delete from gl_pa_erisood_update;
  set ld_peralg=ymd(a_t_aasta,a_t_akuu,1);
  set ld_perlop=get_perlop(ld_peralg);
  select pa_konfm.yld_tatk_skoop into li_tatk_skoop from pa_konfm where pa_konfm."id"=1;
  insert into gl_pa_erisood(tulnud,lisanr,yksusnr,t_akuu,t_aasta,a_akuu,a_aasta,v_akuu,v_aasta,a_apaev,a_lpaev,summa,"info",asutnr,arvekuup,arvenr,meetnr,kulnr,talnr,artnr,tulnr,objectnr,osaknr,subjectnr,suundnr,taotnr,alliknr,ravonr,user_code)
    select 'Kassa/pank',kp_kanne.lisanr,
           existid_pa_yksus_erisood(kp_obj.skoop),
           a_t_akuu,a_t_aasta,a_t_akuu,a_t_aasta,a_t_akuu,a_t_aasta,day(ld_peralg),day(ld_perlop),
           sum(summa),
           if (kp_kanne.arvenr is not null and Length(kp_kanne.arvenr)>0) then 'Arve nr.'+trim(kp_kanne.arvenr)+' '+convert(char(20),kp_kanne.arvekuup,104) else Trim(kp_alus.nimi+' '+kp_kanne."info") endif as kp_info,
           kp_kanne.asutnr,kp_kanne.arvekuup,kp_kanne.arvenr,
           kp_kanne.meetnr,kp_kanne.kulnr,kp_kanne.talnr,kp_kanne.artnr,kp_kanne.tulnr,kp_kanne.objectnr,kp_kanne.osaknr,kp_kanne.subjectnr,kp_kanne.suundnr,kp_kanne.taotnr,kp_kanne.alliknr,kp_kanne.ravonr,
           a_user_code
      from kp_kanne left outer join kp_obj on kp_kanne.objnr=kp_obj.objnr left outer join kp_alus on kp_kanne.alusnr=kp_alus.alusnr left outer join skoobid on kp_obj.skoop=skoobid.skoop
      where (li_tatk_skoop=0 or kp_obj.skoop=a_skoop) and Left(skoobid.kood,Length(a_skoopkood))=a_skoopkood and kp_kanne.lisanr>0 and kp_kanne.kuup>=ld_peralg and kp_kanne.kuup<=ld_perlop
      group by kp_kanne.lisanr,kp_obj.skoop,kp_info,kp_kanne.asutnr,kp_kanne.arvekuup,kp_kanne.arvenr,kp_kanne.meetnr,kp_kanne.kulnr,kp_kanne.talnr,kp_kanne.artnr,kp_kanne.tulnr,kp_kanne.objectnr,kp_kanne.osaknr,kp_kanne.subjectnr,kp_kanne.suundnr,kp_kanne.taotnr,kp_kanne.alliknr,kp_kanne.ravonr;
  insert into gl_pa_erisood_import("id",lisanr,yksusnr,summa,summa_orig,"info",asutnr,meetnr,kulnr,talnr,tulnr,artnr,objectnr,osaknr,subjectnr,suundnr,taotnr,alliknr,ravonr)
    select "id",pa_erisood.lisanr,pa_erisood.yksusnr,(-1)*pa_erisood.summa,pa_erisood.summa,pa_erisood."info",pa_erisood.asutnr,pa_erisood.meetnr,pa_erisood.kulnr,pa_erisood.talnr,pa_erisood.tulnr,pa_erisood.artnr,pa_erisood.objectnr,pa_erisood.osaknr,pa_erisood.subjectnr,pa_erisood.suundnr,pa_erisood.taotnr,pa_erisood.alliknr,pa_erisood.ravonr
      from pa_erisood left outer join pa_yksus on pa_erisood.yksusnr=pa_yksus.yksusnr left outer join skoobid on pa_yksus.skoop=skoobid.skoop
      where (li_tatk_skoop=0 or pa_yksus.skoop=a_skoop) and Left(skoobid.kood,Length(a_skoopkood))=a_skoopkood and pa_erisood.t_akuu=a_t_akuu and pa_erisood.t_aasta=a_t_aasta and pa_erisood.tulnud='Kassa/pank';
  insert into gl_pa_erisood_import("id",lisanr,yksusnr,summa,summa_orig,"info",asutnr,meetnr,kulnr,talnr,tulnr,artnr,objectnr,osaknr,subjectnr,suundnr,taotnr,alliknr,ravonr)
    select 0,lisanr,yksusnr,summa,0,"info",asutnr,meetnr,kulnr,talnr,tulnr,artnr,objectnr,osaknr,subjectnr,suundnr,taotnr,alliknr,ravonr
      from gl_pa_erisood;
  insert into gl_pa_erisood_update("id",lisanr,yksusnr,summa,summa_orig,"info",asutnr,meetnr,kulnr,talnr,tulnr,artnr,objectnr,osaknr,subjectnr,suundnr,taotnr,alliknr,ravonr)
    select max("id"),lisanr,yksusnr,sum(summa),sum(summa_orig),"info",asutnr,meetnr,kulnr,talnr,tulnr,artnr,objectnr,osaknr,subjectnr,suundnr,taotnr,alliknr,ravonr
      from gl_pa_erisood_import
      group by lisanr,yksusnr,"info",asutnr,meetnr,kulnr,talnr,tulnr,artnr,objectnr,osaknr,subjectnr,suundnr,taotnr,alliknr,ravonr;
  open c_update;
  gl_update: loop
    fetch next c_update into ll_id,ll_lisanr,ll_yksusnr,ldc_summa,ls_info,ll_asutnr,ll_meetnr,ll_kulnr,ll_talnr,ll_tulnr,ll_artnr,ll_objectnr,ll_osaknr,ll_subjectnr,ll_suundnr,ll_taotnr,ll_alliknr,ll_ravonr;
    if sqlstate = err_notfound then -- kui eof
      leave gl_update
    end if;
    if ll_id=0 then
      insert into pa_erisood(tulnud,lisanr,yksusnr,t_akuu,t_aasta,a_akuu,a_aasta,v_akuu,v_aasta,a_apaev,a_lpaev,summa,"info",meetnr,kulnr,talnr,artnr,tulnr,objectnr,osaknr,subjectnr,suundnr,taotnr,alliknr,ravonr,asutnr,user_code)
        values ('Kassa/pank',ll_lisanr,ll_yksusnr,a_t_akuu,a_t_aasta,a_t_akuu,a_t_aasta,a_t_akuu,a_t_aasta,day(ld_peralg),day(ld_perlop),ldc_summa,ls_info,ll_meetnr,ll_kulnr,ll_talnr,ll_artnr,ll_tulnr,ll_objectnr,ll_osaknr,ll_subjectnr,ll_suundnr,ll_taotnr,ll_alliknr,ll_ravonr,ll_asutnr,a_user_code)
    else
      if ldc_summa=0 then
        delete from pa_erisood where "id"=ll_id and a_aasta=a_t_aasta
      else
        update pa_erisood set lisanr=ll_lisanr,yksusnr=ll_yksusnr,summa=ldc_summa,"info"=ls_info,asutnr=ll_asutnr,meetnr=ll_meetnr,kulnr=ll_kulnr,talnr=ll_talnr,tulnr=ll_tulnr,artnr=ll_artnr,objectnr=ll_objectnr,osaknr=ll_osaknr,subjectnr=ll_subjectnr,suundnr=ll_suundnr,taotnr=ll_taotnr,alliknr=ll_alliknr,ravonr=ll_ravonr where "id"=ll_id and a_aasta=a_t_aasta
      end if
    end if
  end loop gl_update;
  close c_update;
END