ALTER PROCEDURE "DBA"."kp_koond_inf3c"(in id_skoop integer,in peralg date,in perlop date, in a_asutnr integer default 0,in a_talnr integer default 0,in a_osaknr integer default 0, in a_valver smallint default 1,in a_kulnr integer default 0 )
begin
  declare li_id integer;
  declare ldc_summa numeric(15,2);
  declare li_asutnr integer;
  declare li_saajanr integer;
  declare ld_arvekuup date;
  declare ls_arvenr char(20);
  declare err_notfound exception for sqlstate value '02000';
  declare c_kp_kanne dynamic scroll cursor for select if kp_kanne.sisse = 1 then if a_valver=4 then kp_kanne.summaeek else kp_kanne.summa endif else -1*(if a_valver=4 then kp_kanne.summaeek else kp_kanne.summa endif) endif,kp_kanne.asutnr,kp_kanne.arvekuup,kp_kanne.arvenr from kp_kanne left outer join kp_obj on kp_kanne.objnr = kp_obj.objnr left outer join tullist on kp_kanne.tulnr = tullist.tulnr where
      (kp_obj.skoop = id_skoop or id_skoop = 0) and(kp_kanne.kuup >= peralg) and(kp_kanne.kuup <= perlop) and kp_kanne.asutnr > 0 and (kp_kanne.asutnr=a_asutnr or a_asutnr=0) and kp_kanne.arvekuup is not null and Length(Trim(kp_kanne.arvenr)) > 0 and (kp_kanne.kulnr=a_kulnr or a_kulnr=0) and (kp_kanne.talnr=a_talnr or a_talnr=0) and (kp_kanne.osaknr=a_osaknr or a_osaknr=0) and tullist.inf3 = 1;
  set li_id=0;
  delete from gl_kp_kanne;
  open c_kp_kanne;
  kp_kanne_loop: loop
    --  loe kassa/panga kanne
    fetch next c_kp_kanne into ldc_summa,li_asutnr,ld_arvekuup,ls_arvenr;
    if sqlstate = err_notfound then -- kui eof
      leave kp_kanne_loop
    end if;
    set li_saajanr=null;
    select first dk_kanne.saajanr into li_saajanr from dk_kanne where dk_kanne.asutnr = li_asutnr and dk_kanne.arvekuup = ld_arvekuup and dk_kanne.arvenr = ls_arvenr;
    if li_saajanr is null then
      set li_saajanr=0
    end if;
    if exists(select 1 from gl_kp_kanne where gl_kp_kanne.asutnr = li_asutnr and gl_kp_kanne.saajanr = li_saajanr) then
      update gl_kp_kanne set gl_kp_kanne.summa = gl_kp_kanne.summa+ldc_summa where gl_kp_kanne.asutnr = li_asutnr and gl_kp_kanne.saajanr = li_saajanr
    else
      set li_id=li_id+1;
      insert into gl_kp_kanne( id,kuup,sisse,objnr,user_code,summa,asutnr,saajanr) values( li_id,perlop,1,0,0,ldc_summa,li_asutnr,li_saajanr)
    end if
  end loop kp_kanne_loop;
  close c_kp_kanne
end