ALTER PROCEDURE "DBA"."dk_koond1_saaja"(in id_skoop integer,in id_obj integer,in id_paring integer,in peralg date,in perlop date)
begin
  declare li_paring integer;
  declare li_asutnr integer;
  declare li_old_asutnr integer;
  declare li_saajanr integer;
  declare ldc_adeeb numeric(15,2);
  declare ldc_akree numeric(15,2);
  declare ldc_deeb numeric(15,2);
  declare ldc_kree numeric(15,2);
  declare ldc_ajaak numeric(15,2);
  declare ldc_jaak numeric(15,2);
  declare ls_dk_kontod char(5000);
  declare err_notfound exception for sqlstate value '02000';
  declare c_koond dynamic scroll cursor for
    select "asutnr","saajanr",adeeb,akree,deeb,kree
      from gl_dk_koond
      order by asutnr asc,saajanr asc;
  delete from gl_dk_koond;
  delete from gl_pr_koond;
  delete from gl_dk_kanne;
  if id_obj > 0 then
    select dk_obj.skoop into id_skoop from dk_obj where dk_obj.objnr = id_obj
  end if;
  -- arveldused
  set li_paring=set_gl_1(id_paring);
  insert into gl_pr_koond( konto,asutnr,saajanr,adeeb,akree,deeb,kree) 
    select '1',dk_kanne.asutnr,if dk_kanne.saajanr is null then 0 else dk_kanne.saajanr endif,sum(if dk_kanne.sisse = 1 and dk_kanne.kuup < peralg then dk_kanne.summa+dk_kanne.summa2 else 0 endif),sum(if dk_kanne.sisse = 0 and dk_kanne.kuup < peralg then dk_kanne.summa+dk_kanne.summa2 else 0 endif),sum(if dk_kanne.sisse = 1 and dk_kanne.kuup >= peralg then dk_kanne.summa+dk_kanne.summa2 else 0 endif),sum(if dk_kanne.sisse = 0 and dk_kanne.kuup >= peralg then dk_kanne.summa+dk_kanne.summa2 else 0 endif) from
      dk_kanne left outer join gl_1 on(dk_kanne.id = gl_1.id) and(dk_kanne.kuup = gl_1.kuup) key left outer join dk_obj 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 dk_kanne.asutnr > 0 and dk_kanne.kuup <= perlop
      group by dk_kanne.asutnr,dk_kanne.saajanr;
  insert into gl_dk_kanne(arvekuup,arvenr,asutnr,saajanr) select distinct dk_kanne.arvekuup,dk_kanne.arvenr,dk_kanne.asutnr,dk_kanne.saajanr from dk_kanne left outer join gl_1 on(dk_kanne.id=gl_1.id) and(dk_kanne.kuup=gl_1.kuup) key left outer join dk_obj 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 dk_kanne.asutnr > 0;
  -- kassa/pank
  set ls_dk_kontod=get_dk_kontod_koond(id_skoop,id_obj);
  set li_paring=set_gl_1_conv_dk_kp(id_paring);
  insert into gl_pr_koond( konto,asutnr,adeeb,akree,deeb,kree) 
    select '2',
           kp_kanne.asutnr,
           sum(if kp_kanne.sisse = 0 and kp_kanne.kuup < peralg then kp_kanne.summa else 0 endif),
           sum(if kp_kanne.sisse = 1 and kp_kanne.kuup < peralg then kp_kanne.summa else 0 endif),
           sum(if kp_kanne.sisse = 0 and kp_kanne.kuup >= peralg then kp_kanne.summa else 0 endif),
           sum(if kp_kanne.sisse = 1 and kp_kanne.kuup >= peralg then kp_kanne.summa else 0 endif)
      from kp_kanne left outer join gl_1 on(kp_kanne.id = gl_1.id) and(kp_kanne.kuup = gl_1.kuup)
                    left outer join kp_obj on kp_kanne.objnr = kp_obj.objnr
      where ((kp_kanne.id = gl_1.id) and(kp_kanne.kuup = gl_1.kuup) or id_paring = 0) and
            locate(ls_dk_kontod,';'+"Left"(kp_kanne.konto+Space(7),7)+';') > 0 and
            (kp_obj.skoop = id_skoop or id_skoop = 0) and
            kp_kanne.asutnr > 0 and
            kp_kanne.kuup <= perlop
      group by kp_kanne.asutnr;
  -- koond
  insert into gl_dk_koond( asutnr,saajanr,adeeb,akree,deeb,kree) 
    select gl_pr_koond.asutnr,gl_pr_koond.saajanr,sum(gl_pr_koond.adeeb),sum(gl_pr_koond.akree),sum(gl_pr_koond.deeb),sum(gl_pr_koond.kree) from
      gl_pr_koond group by gl_pr_koond.asutnr,gl_pr_koond.saajanr;
  -- ettemaksude ymberjagamine
  set li_old_asutnr=0;
  open c_koond;
  -- tsykkel yle koondi asutuste ja saajate kaupa
  koond_loop: loop
    fetch next c_koond into li_asutnr,li_saajanr,ldc_adeeb,ldc_akree,ldc_deeb,ldc_kree;
    if sqlstate = err_notfound then -- kui eof
      leave koond_loop
    end if;
    -- kui asutus teist korda e. koos saajaga rida
    if li_asutnr=li_old_asutnr then
      -- kontroll, et ikka on saajaga rida
      if li_saajanr>0 then
        -- kaive
        if ldc_jaak<0 then -- kui ettemaks on kreeditis (ostjad)
          -- kui on volg
          if ldc_deeb-ldc_kree>0 then
            if abs(ldc_jaak)<ldc_deeb-ldc_kree then -- kui jaak on väiksem, kui volg
              update gl_dk_koond set kree=kree+ldc_jaak where asutnr=li_asutnr and saajanr=0;
              update gl_dk_koond set kree=kree-ldc_jaak where asutnr=li_asutnr and saajanr=li_saajanr;
              set ldc_jaak=0
            else -- kui jaak on suurem, kui volg
              update gl_dk_koond set kree=kree-(ldc_deeb-ldc_kree) where asutnr=li_asutnr and saajanr=0;
              update gl_dk_koond set kree=kree+(ldc_deeb-ldc_kree) where asutnr=li_asutnr and saajanr=li_saajanr;
              set ldc_jaak=ldc_jaak+(ldc_deeb-ldc_kree)
            end if;
          end if;
        else -- kui ettemaks on deebetis (hankijad)
          if ldc_deeb-ldc_kree<0 then
            if abs(ldc_jaak)<ldc_kree-ldc_deeb then
              update gl_dk_koond set deeb=deeb-ldc_jaak where asutnr=li_asutnr and saajanr=0;
              update gl_dk_koond set deeb=deeb+ldc_jaak where asutnr=li_asutnr and saajanr=li_saajanr;
              set ldc_jaak=0
            else
              update gl_dk_koond set deeb=deeb+(ldc_deeb-ldc_kree) where asutnr=li_asutnr and saajanr=0;
              update gl_dk_koond set deeb=deeb-(ldc_deeb-ldc_kree) where asutnr=li_asutnr and saajanr=li_saajanr;
              set ldc_jaak=ldc_jaak+(ldc_deeb-ldc_kree)
            end if;
          end if;
        end if;
        -- algjaak
        if ldc_ajaak<0 then
          if ldc_adeeb-ldc_akree>0 then
            if abs(ldc_ajaak)<ldc_adeeb-ldc_akree then
              update gl_dk_koond set akree=akree+ldc_ajaak where asutnr=li_asutnr and saajanr=0;
              update gl_dk_koond set akree=akree-ldc_ajaak where asutnr=li_asutnr and saajanr=li_saajanr;
              set ldc_ajaak=0
            else
              update gl_dk_koond set akree=akree-(ldc_adeeb-ldc_akree) where asutnr=li_asutnr and saajanr=0;
              update gl_dk_koond set akree=akree+(ldc_adeeb-ldc_akree) where asutnr=li_asutnr and saajanr=li_saajanr;
              set ldc_ajaak=ldc_ajaak+(ldc_adeeb-ldc_akree)
            end if;
          end if;
        else
          if ldc_adeeb-ldc_akree<0 then
            if abs(ldc_ajaak)<ldc_akree-ldc_adeeb then
              update gl_dk_koond set adeeb=adeeb-ldc_ajaak where asutnr=li_asutnr and saajanr=0;
              update gl_dk_koond set adeeb=adeeb+ldc_ajaak where asutnr=li_asutnr and saajanr=li_saajanr;
              set ldc_ajaak=0
            else
              update gl_dk_koond set adeeb=adeeb+(ldc_adeeb-ldc_akree) where asutnr=li_asutnr and saajanr=0;
              update gl_dk_koond set adeeb=adeeb-(ldc_adeeb-ldc_akree) where asutnr=li_asutnr and saajanr=li_saajanr;
              set ldc_ajaak=ldc_ajaak+(ldc_adeeb-ldc_akree)
            end if;
          end if;
        end if;
      end if;
    else
      set li_old_asutnr=li_asutnr;
      set ldc_ajaak=0;
      set ldc_jaak=0;
      if li_saajanr=0 then
        set ldc_ajaak=ldc_adeeb-ldc_akree;
        set ldc_jaak=ldc_deeb-ldc_kree;
      end if
    end if;
  end loop koond_loop;
  close c_koond;
  -- loppjaagid
  update gl_dk_koond set adeeb = adeeb-akree,akree = akree-adeeb;
  update gl_dk_koond set adeeb = 0 where gl_dk_koond.adeeb < 0;
  update gl_dk_koond set akree = 0 where gl_dk_koond.akree < 0;
  update gl_dk_koond set ldeeb = adeeb-akree+deeb-kree,lkree = akree-adeeb+kree-deeb;
  update gl_dk_koond set ldeeb = 0 where gl_dk_koond.ldeeb < 0;
  update gl_dk_koond set lkree = 0 where gl_dk_koond.lkree < 0;
  delete from gl_dk_koond where adeeb = 0 and akree = 0 and deeb = 0 and kree = 0;
end