ALTER PROCEDURE "dba"."kp_koond_inf3_all"(in a_form char(8) default 'kp_inf3x',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
  declare ld_kuup date;
  declare ll_count integer;
  declare li_aasta integer;
  declare li_piir integer;
  delete from gl_kp_kanne;
  -- asutnr - opilane
  -- saajanr - maksja
  case a_form
    -- opilane kp asutnr ja maksja kp saajanr, kui puudub, siis kp asutnr
    when 'kp_inf3a' 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 kp_kanne.asutnr 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
          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 saajanr1=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 dk saajanr ja maksja kp asutnr
    when 'kp_inf3b' then
      insert into gl_kp_kanne(summa,asutnr,saajanr)
        select sum((2*kp_kanne.sisse-1)*kp_kanne.summa),
               dkv.saajanr as asutnr1,
               kp_kanne.asutnr 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 saajanr1=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 dk saajanr ja maksja kp saajanr, kui puudub kp asutnr
    when 'kp_inf3d' then
      insert into gl_kp_kanne(summa,asutnr,saajanr)
        select sum((2*kp_kanne.sisse-1)*kp_kanne.summa),
               dkv.saajanr as asutnr1,
               if kp_kanne.saajanr is null then kp_kanne.asutnr 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 saajanr1=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
    when 'kp_inf3c' 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 saajanr1=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 'kp_inf3i' 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 saajanr1=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 'kp_inf3j' 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 saajanr1=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 ls saaja ja maksja kp saajanr, kui puudub, siis kp asutnr
    when 'kp_inf3e' then
      insert into gl_kp_kanne(summa,asutnr,saajanr)
        select sum((2*kp_kanne.sisse-1)*kp_kanne.summa),
               ls_laps.saajanr as asutnr1,
               if kp_kanne.saajanr is null then kp_kanne.asutnr 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 ls_maksud on kp_kanne.id_maks = ls_maksud.id
                        left outer join ls_laps on ls_maksud.lapsnr=ls_laps.lapsnr
          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
                (asutnr1=a_asutnr or saajanr1=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 ls saajanr
    when 'kp_inf3f' 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 ls_laps.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 ls_maksud on kp_kanne.id_maks = ls_maksud.id
                        left outer join ls_laps on ls_maksud.lapsnr=ls_laps.lapsnr
          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
                (asutnr1=a_asutnr or saajanr1=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 ls saajanr ja maksja ls asutnr
    when 'kp_inf3g' then
      insert into gl_kp_kanne(summa,asutnr,saajanr)
        select sum((2*kp_kanne.sisse-1)*kp_kanne.summa),
               ls_laps.saajanr as asutnr1,
               ls_laps.asutnr 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 ls_maksud on kp_kanne.id_maks = ls_maksud."id"
                        left outer join ls_laps on ls_maksud.lapsnr=ls_laps.lapsnr
          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
                (asutnr1=a_asutnr or saajanr1=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 ls asutnr ja maksja ls saajanr
    when 'kp_inf3h' then
      insert into gl_kp_kanne(summa,asutnr,saajanr)
        select sum((2*kp_kanne.sisse-1)*kp_kanne.summa),
               ls_laps.asutnr as asutnr1,
               ls_laps.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 ls_maksud on kp_kanne.id_maks = ls_maksud.id
                        left outer join ls_laps on ls_maksud.lapsnr=ls_laps.lapsnr
          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
                (asutnr1=a_asutnr or saajanr1=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;
  -- erandite kustutamine
  select inf3_tpkood into li_piir from kp_konfm where id=1;
  if li_piir = 1 then
    -- kui opilase TP kood erineb 800699
    delete gl_kp_kanne from gl_kp_kanne left outer join asulist on gl_kp_kanne.asutnr=asulist.asutnr left outer join partlist on asulist.partnr=partlist.partnr where asulist.partnr is not null and left(partlist.part,6)<>'800699';
    -- kui maksja TP kood erineb 800699
    delete gl_kp_kanne from gl_kp_kanne left outer join asulist on gl_kp_kanne.saajanr=asulist.asutnr left outer join partlist on asulist.partnr=partlist.partnr where asulist.partnr is not null and left(partlist.part,6)<>'800699';
    -- opilane on vanem kui 18 perioodi lõpu kuupäeval
  end if;
  set li_aasta=years(perlop);
  select inf3_vanusepiir into li_piir from kp_konfm where id=1;
  delete gl_kp_kanne from gl_kp_kanne where li_aasta-years(get_kuup_from_iskood(get_asulist_reg_nr(gl_kp_kanne.asutnr)))>li_piir and gl_kp_kanne.asutnr<>gl_kp_kanne.saajanr;
end