ALTER PROCEDURE "dba"."dk_reg_koond"( in id_skoop integer,in id_obj integer,in id_paring integer,in peralg date,in perlop date,in a_dk_per smallint,in a_valver smallint default 1)
BEGIN
  declare li_id integer;
  declare ll_id integer;
  declare li_sisse smallint;
  declare li_spank smallint;
  declare ld_kuup date;
  declare ls_doknr char(20);
  declare ld_arvekuup date;
  declare ls_arvenr char(20);
  declare ldc_summa numeric(15,2);
  declare ldc_summa2 numeric(15,2);
  declare ldc_summa3 numeric(15,2);
  declare ll_asutnr integer;
  declare ll_skoop integer;
  declare ls_nimi char(101);
  declare ls_saajanimi char(101);
  declare ls_koksaajanimi char(505);
  declare ls_info char(400);
  declare ls_kokinfo char(1000);
  declare li_paring integer;
  declare err_notfound exception for sqlstate value '02000';
  declare c_dk_kanne dynamic scroll cursor for select dk_kanne.sisse,if dk_obj.spank is null then 0 else dk_obj.spank endif,if a_dk_per = 0 then dk_kanne.kuup else dk_kanne.arvekuup endif,if a_dk_per = 0 then dk_kanne.doknr else dk_kanne.arvenr endif,if dk_kanne.arvekuup is null then dk_kanne.kuup else dk_kanne.arvekuup endif,if dk_kanne.arvenr is null then '' else dk_kanne.arvenr endif,dk_kanne.summa,dk_kanne.summa2,if dk_kanne.summa3 is null then 0 else dk_kanne.summa3 endif,dk_kanne.asutnr,get_asulist_nimi(dk_kanne.asutnr),get_asulist_nimi(dk_kanne.saajanr), Trim(dk_alus.nimi+' '+dk_kanne.info),dk_obj.skoop from
      dk_kanne left outer join gl_1 on(dk_kanne.id = gl_1.id) and(dk_kanne.kuup = gl_1.kuup) left outer join dk_obj on dk_kanne.objnr=dk_obj.objnr left outer join dk_alus on dk_kanne.alusnr = dk_alus.alusnr where
      ((dk_kanne.id = gl_1.id) and(dk_kanne.kuup = gl_1.kuup) or id_paring = 0) and(dk_kanne.objnr = id_obj or id_obj = 0) and(dk_obj.skoop = id_skoop or id_skoop = 0) and if a_dk_per=0 then dk_kanne.kuup else dk_kanne.arvekuup endif >= peralg and if a_dk_per=0 then dk_kanne.kuup else dk_kanne.arvekuup endif <= perlop;
  delete from gl_tr_mk;
  set li_paring=set_gl_1(id_paring);
  set li_id=0;
  open c_dk_kanne;
  dk_kanne_loop: loop
    --  loe arvelduste kanne
    fetch next c_dk_kanne into li_sisse,li_spank,ld_kuup,ls_doknr,ld_arvekuup,ls_arvenr,ldc_summa,ldc_summa2,ldc_summa3,ll_asutnr,ls_nimi,ls_saajanimi,ls_info,ll_skoop;
    if sqlstate = err_notfound then -- kui eof
      leave dk_kanne_loop
    end if;
    if li_spank = 1 and li_sisse = 1 then
      set li_sisse=0;
      set ldc_summa=(-1)*ldc_summa;
      set ldc_summa2=(-1)*ldc_summa2;
      set ldc_summa3=(-1)*ldc_summa3
    end if;
    if li_spank = 0 and li_sisse = 0 then
      set li_sisse=1;
      set ldc_summa=(-1)*ldc_summa;
      set ldc_summa2=(-1)*ldc_summa2;
      set ldc_summa3=(-1)*ldc_summa3
    end if;
    set ll_id=0;
    select "id" into ll_id from gl_tr_mk where gl_tr_mk.sisse = li_sisse and gl_tr_mk.dkuup = ld_kuup and gl_tr_mk.doknr = ls_doknr and gl_tr_mk.darvekuup = ld_arvekuup and gl_tr_mk.arvenr = ls_arvenr and gl_tr_mk.asutnr = ll_asutnr;
    if ll_id > 0 then
      select gl_tr_mk.info,gl_tr_mk.saajanimi into ls_kokinfo,ls_koksaajanimi from gl_tr_mk where gl_tr_mk.id = ll_id;
      if Length(ls_info) > 0 then
        if locate(ls_kokinfo,ls_info,1) = 0 then
          set ls_kokinfo=Left(Trim(ls_kokinfo+' '+ls_info),250)
        end if
      end if;
      if Length(ls_saajanimi) > 0 then
        if locate(ls_koksaajanimi,ls_saajanimi,1) = 0 then
          if Length(ls_koksaajanimi) > 0 then
            set ls_koksaajanimi=ls_koksaajanimi+';'
          end if;
          set ls_koksaajanimi=Left(Trim(ls_koksaajanimi+' '+ls_saajanimi),200)
        end if
      end if;
      update gl_tr_mk set summa=summa+ldc_summa, summa2=summa2+ldc_summa2, summa3=summa3+ldc_summa3, saajanimi=Left(ls_koksaajanimi,200), "info"=Left(ls_kokinfo,250) where "id"=ll_id
    else
       set li_id=li_id+1;
       insert into gl_tr_mk( id,sisse,dkuup,doknr,darvekuup,arvenr,summa,summa2,summa3,asutnr,nimi,saajanimi,info,skoop) values( li_id,li_sisse,ld_kuup,ls_doknr,ld_arvekuup,ls_arvenr,ldc_summa,ldc_summa2,ldc_summa3,ll_asutnr,left(ls_nimi,101),left(ls_saajanimi,200),left(ls_info,250),ll_skoop) 
    end if;
  end loop dk_kanne_loop;
  close c_dk_kanne;
END