CREATE PROCEDURE "DBA"."kp_koond_inf3_all"(in a_form char(7) default 'inf3x_x',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_kulnr integer default 0 )
begin
  delete from gl_kp_kanne;
  -- asutnr - opilane
  -- saajanr - maksja
  case a_form
    -- opilane kp asutnr ja maksja dk saajanr
    when 'inf3c_1' then
      insert into gl_kp_kanne(summa,asutnr,saajanr)
        select sum((2*kp_kanne.sisse-1)*kp_kanne.summa),
               kp_kanne.asutnr as asutnr1,
               dkv.saajanr as saajanr1
          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
                        left outer join "dkv_kanne_arve" as dkv on kp_kanne.arvekuup=dkv.arvekuup and kp_kanne.arvenr=dkv.arvenr and kp_kanne.asutnr=dkv.asutnr and kp_obj.skoop=dkv.skoop and kp_kanne.konto=dkv.djkonto
          where (kp_obj.skoop = id_skoop or id_skoop = 0) and
                (kp_kanne.kuup>=peralg) and(kp_kanne.kuup<=perlop) and
                 kp_kanne.asutnr is not null and
                (asutnr1=a_asutnr or a_asutnr=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
          group by saajanr1,asutnr1;
    -- opilane kp asutnr ja maksja dk saajanr, kui puudub, siis kp saajanr
    when 'inf3c_2' then
      insert into gl_kp_kanne(summa,asutnr,saajanr)
        select sum((2*kp_kanne.sisse-1)*kp_kanne.summa),
               kp_kanne.asutnr as asutnr1,
               if dkv.saajanr is null then kp_kanne.saajanr else dkv.saajanr endif as saajanr1
          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
                        left outer join "dkv_kanne_arve" as dkv on kp_kanne.arvekuup=dkv.arvekuup and kp_kanne.arvenr=dkv.arvenr and kp_kanne.asutnr=dkv.asutnr and kp_obj.skoop=dkv.skoop and kp_kanne.konto=dkv.djkonto
          where (kp_obj.skoop = id_skoop or id_skoop = 0) and
                (kp_kanne.kuup>=peralg) and(kp_kanne.kuup<=perlop) and
                 kp_kanne.asutnr is not null and
                (asutnr1=a_asutnr or a_asutnr=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
          group by saajanr1,asutnr1;
    -- opilane kp asutnr ja maksja kp saajanr, kui puudub, siis dkv saajanr
    when 'inf3c_3' then
      insert into gl_kp_kanne(summa,asutnr,saajanr)
        select sum((2*kp_kanne.sisse-1)*kp_kanne.summa),
               kp_kanne.asutnr as asutnr1,
               if kp_kanne.saajanr is null then dkv.saajanr else kp_kanne.saajanr endif as saajanr1
          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
                        left outer join "dkv_kanne_arve" as dkv on kp_kanne.arvekuup=dkv.arvekuup and kp_kanne.arvenr=dkv.arvenr and kp_kanne.asutnr=dkv.asutnr and kp_obj.skoop=dkv.skoop and kp_kanne.konto=dkv.djkonto
          where (kp_obj.skoop = id_skoop or id_skoop = 0) and
                (kp_kanne.kuup>=peralg) and(kp_kanne.kuup<=perlop) and
                 kp_kanne.asutnr is not null and
                (asutnr1=a_asutnr or a_asutnr=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
          group by saajanr1,asutnr1;
  end case;
end