ALTER PROCEDURE "dba"."kp_dk_laekumine"( in a_arvekuup date default null, in a_arvenr char(20) default null, in a_asutnr integer default null, in a_skoop integer default 0 )
BEGIN
  declare li_id integer;
  declare ldc_summa numeric(15,2);
  declare ld_arvekuup date;
  declare ls_arvenr char(20);
  declare li_asutnr integer;
  declare ls_info char(200);
  declare ls_konto char(7);
  declare li_meetnr integer;
  declare li_kulnr integer;
  declare li_talnr integer;
  declare li_artnr integer;
  declare li_tulnr integer;
  declare li_objectnr integer;
  declare li_osaknr integer;
  declare li_subjectnr integer;
  declare li_suundnr integer;
  declare li_taotnr integer;
  declare li_alliknr integer;
  declare li_ravonr integer;
  declare li_id_maks integer;
  declare li_lisanr integer;
  declare li_imp_alusnr smallint;
  declare li_imp_meetnr smallint;
  declare li_imp_kulnr smallint;
  declare li_imp_talnr smallint;
  declare li_imp_artnr smallint;
  declare li_imp_tulnr smallint;
  declare li_imp_objectnr smallint;
  declare li_imp_osaknr smallint;
  declare li_imp_subjectnr smallint;
  declare li_imp_suundnr smallint;
  declare li_imp_taotnr smallint;
  declare li_imp_alliknr smallint;
  declare li_imp_ravonr smallint;
  declare li_imp_id_maks smallint;
  declare li_kb_tulnr integer;
  declare ld_ataskuup date;
  declare ls_dk_kontod char(7000);
  select skoobid.kp_dk_laekuup,skoobid.kp_dk_laekimp_alusnr,skoobid.kp_dk_laekimp_meetnr,skoobid.kp_dk_laekimp_kulnr,skoobid.kp_dk_laekimp_talnr,skoobid.kp_dk_laekimp_tulnr,skoobid.kp_dk_laekimp_artnr,skoobid.kp_dk_laekimp_objectnr,skoobid.kp_dk_laekimp_osaknr,skoobid.kp_dk_laekimp_subjectnr,skoobid.kp_dk_laekimp_suundnr,skoobid.kp_dk_laekimp_taotnr,skoobid.kp_dk_laekimp_alliknr,skoobid.kp_dk_laekimp_ravonr,skoobid.kp_dk_laekimp_id_maks
    into ld_ataskuup,li_imp_alusnr,li_imp_meetnr,li_imp_kulnr,li_imp_talnr,li_imp_tulnr,li_imp_artnr,li_imp_objectnr,li_imp_osaknr,li_imp_subjectnr,li_imp_suundnr,li_imp_taotnr,li_imp_alliknr,li_imp_ravonr,li_imp_id_maks
    from skoobid where skoobid.skoop=a_skoop;
  set ls_dk_kontod = get_dk_kontod_spank(a_skoop,0,0,1);
  delete from gl_kp_kanne;
  if a_arvekuup is not null or a_arvenr is not null or a_asutnr is not null then
    insert into gl_kp_kanne (summa,summa2,arvekuup,arvenr,asutnr,"info",taskuup,konto,meetnr,kulnr,talnr,artnr,tulnr,objectnr,osaknr,subjectnr,suundnr,taotnr,alliknr,ravonr,id_maks,lisanr)
      select sum((2*dk_kanne.sisse-1)*(if kblist.tulnr is null then dk_kanne.summa+dk_kanne.summa2 else dk_kanne.summa endif)),
             0,
             if dk_kanne.crekuup is null or dk_kanne.crenr is null then dk_kanne.arvekuup else dk_kanne.crekuup endif as dk_arvekuup,
             if dk_kanne.crekuup is null or dk_kanne.crenr is null then dk_kanne.arvenr else dk_kanne.crenr endif as dk_arvenr,
             dk_kanne.asutnr,
             if li_imp_alusnr=0 then '' else Left(Trim(dk_alus.nimi+' '+dk_kanne."info"),200) endif as dk_info,
             Min(dk_kanne.taskuup),
             dk_obj.djkonto,
             if dk_kanne.meetnr is null or li_imp_meetnr=0 then null else dk_kanne.meetnr endif as dk_meetnr,
             if dk_kanne.kulnr is null or li_imp_kulnr=0 then null else dk_kanne.kulnr endif as dk_kulnr,
             if dk_kanne.talnr is null or li_imp_talnr=0 then null else dk_kanne.talnr endif as dk_talnr,
             if dk_kanne.artnr is null or li_imp_artnr=0 then null else dk_kanne.artnr endif as dk_artnr,
             if dk_kanne.tulnr is null or li_imp_tulnr=0 then null else dk_kanne.tulnr endif as dk_tulnr,
             if dk_kanne.objectnr is null or li_imp_objectnr=0 then null else dk_kanne.objectnr endif as dk_objectnr,
             if dk_kanne.osaknr is null or li_imp_osaknr=0 then null else dk_kanne.osaknr endif as dk_osaknr,
             if dk_kanne.subjectnr is null or li_imp_subjectnr=0 then null else dk_kanne.subjectnr endif as dk_subjectnr,
             if dk_kanne.suundnr is null or li_imp_suundnr=0 then null else dk_kanne.suundnr endif as dk_suundnr,
             if dk_kanne.taotnr is null or li_imp_taotnr=0 then null else dk_kanne.taotnr endif as dk_taotnr,
             if dk_kanne.alliknr is null or li_imp_alliknr=0 then null else dk_kanne.alliknr endif as dk_alliknr,
             if dk_kanne.ravonr is null or li_imp_ravonr=0 then null else dk_kanne.ravonr endif as dk_ravonr,
             if dk_kanne.id_maks is null or li_imp_id_maks=0 then null else dk_kanne.id_maks endif as dk_id_maks,
             if dk_kanne.lisanr is null then null else dk_kanne.lisanr endif as dk_lisanr
        from dk_kanne left outer join dk_obj on dk_kanne.objnr=dk_obj.objnr left outer join dk_alus on dk_kanne.alusnr=dk_alus.alusnr key left outer join kblist
        where dk_arvekuup>=ld_ataskuup and
             (dk_arvekuup=a_arvekuup or a_arvekuup is null) and
             (dk_arvenr=a_arvenr or a_arvenr is null) and
             (dk_kanne.asutnr=a_asutnr or a_asutnr is null) and
              dk_arvekuup is not null and
              dk_arvenr is not null and
              dk_kanne.asutnr is not null and
              dk_obj.skoop=a_skoop and
              dk_obj.djkonto is not null and
              dk_obj.spank=0 and
              dk_obj.mke=1
        group by dk_arvekuup,dk_arvenr,dk_kanne.asutnr,dk_obj.djkonto,dk_info,dk_meetnr,dk_kulnr,dk_talnr,dk_artnr,dk_tulnr,dk_objectnr,dk_osaknr,dk_subjectnr,dk_suundnr,dk_taotnr,dk_alliknr,dk_ravonr,dk_id_maks,dk_lisanr;
-- kaibemaks eraldi rida, kui kaibemaksu maarale on valitud tululiik
    insert into gl_kp_kanne (summa,summa2,arvekuup,arvenr,asutnr,"info",taskuup,konto,meetnr,kulnr,talnr,artnr,tulnr,objectnr,osaknr,subjectnr,suundnr,taotnr,alliknr,ravonr,id_maks,lisanr)
      select sum((2*dk_kanne.sisse-1)*(dk_kanne.summa2)),
             0,
             if dk_kanne.crekuup is null or dk_kanne.crenr is null then dk_kanne.arvekuup else dk_kanne.crekuup endif as dk_arvekuup,
             if dk_kanne.crekuup is null or dk_kanne.crenr is null then dk_kanne.arvenr else dk_kanne.crenr endif as dk_arvenr,
             dk_kanne.asutnr,
             if li_imp_alusnr=0 then '' else Left(Trim(dk_alus.nimi+' '+dk_kanne."info"),200) endif as dk_info,
             Min(dk_kanne.taskuup),
             dk_obj.djkonto,
             if dk_kanne.meetnr is null or li_imp_meetnr=0 then null else dk_kanne.meetnr endif as dk_meetnr,
             if dk_kanne.kulnr is null or li_imp_kulnr=0 then null else dk_kanne.kulnr endif as dk_kulnr,
             if dk_kanne.talnr is null or li_imp_talnr=0 then null else dk_kanne.talnr endif as dk_talnr,
             if dk_kanne.artnr is null or li_imp_artnr=0 then null else dk_kanne.artnr endif as dk_artnr,
             if kblist.tulnr is null or li_imp_tulnr=0 then null else kblist.tulnr endif as dk_tulnr,
             if dk_kanne.objectnr is null or li_imp_objectnr=0 then null else dk_kanne.objectnr endif as dk_objectnr,
             if dk_kanne.osaknr is null or li_imp_osaknr=0 then null else dk_kanne.osaknr endif as dk_osaknr,
             if dk_kanne.subjectnr is null or li_imp_subjectnr=0 then null else dk_kanne.subjectnr endif as dk_subjectnr,
             if dk_kanne.suundnr is null or li_imp_suundnr=0 then null else dk_kanne.suundnr endif as dk_suundnr,
             if dk_kanne.taotnr is null or li_imp_taotnr=0 then null else dk_kanne.taotnr endif as dk_taotnr,
             if dk_kanne.alliknr is null or li_imp_alliknr=0 then null else dk_kanne.alliknr endif as dk_alliknr,
             if dk_kanne.ravonr is null or li_imp_ravonr=0 then null else dk_kanne.ravonr endif as dk_ravonr,
             if dk_kanne.id_maks is null or li_imp_id_maks=0 then null else dk_kanne.id_maks endif as dk_id_maks,
             if dk_kanne.lisanr is null then null else dk_kanne.lisanr endif as dk_lisanr
        from dk_kanne left outer join dk_obj on dk_kanne.objnr=dk_obj.objnr left outer join dk_alus on dk_kanne.alusnr=dk_alus.alusnr key left outer join kblist
        where dk_arvekuup>=ld_ataskuup and
             (dk_arvekuup=a_arvekuup or a_arvekuup is null) and
             (dk_arvenr=a_arvenr or a_arvenr is null) and
             (dk_kanne.asutnr=a_asutnr or a_asutnr is null) and
              dk_arvekuup is not null and
              dk_arvenr is not null and
              dk_kanne.asutnr is not null and
              kblist.tulnr is not null and
              dk_kanne.summa2 <> 0 and
              dk_obj.skoop=a_skoop and
              dk_obj.djkonto is not null and
              dk_obj.spank=0 and
              dk_obj.mke=1
        group by dk_arvekuup,dk_arvenr,dk_kanne.asutnr,dk_obj.djkonto,dk_info,dk_meetnr,dk_kulnr,dk_talnr,dk_artnr,dk_tulnr,dk_objectnr,dk_osaknr,dk_subjectnr,dk_suundnr,dk_taotnr,dk_alliknr,dk_ravonr,dk_id_maks,dk_lisanr;
    -- kassa/pank
    insert into gl_kp_kanne (summa,summa2,arvekuup,arvenr,asutnr,"info",konto,meetnr,kulnr,talnr,artnr,tulnr,objectnr,osaknr,subjectnr,suundnr,taotnr,alliknr,ravonr,id_maks,lisanr)
      select 0,
            sum((2*kp_kanne.sisse-1)*kp_kanne.summa),
            if kp_kanne.arvekuup is null then ymd(2000,1,1) else kp_kanne.arvekuup endif as kp_arvekuup,
            if kp_kanne.arvenr is null then '' else kp_kanne.arvenr endif as kp_arvenr,
            kp_kanne.asutnr,
            if kp_kanne."info" is null or li_imp_alusnr=0 then '' else kp_kanne."info" endif as kp_info,
            kp_kanne.konto,
            if kp_kanne.meetnr is null or li_imp_meetnr=0 then null else kp_kanne.meetnr endif as kp_meetnr,
            if kp_kanne.kulnr is null or li_imp_kulnr=0 then null else kp_kanne.kulnr endif as kp_kulnr,
            if kp_kanne.talnr is null or li_imp_talnr=0 then null else kp_kanne.talnr endif as kp_talnr,
            if kp_kanne.artnr is null or li_imp_artnr=0 then null else kp_kanne.artnr endif as kp_artnr,
            if kp_kanne.tulnr is null or li_imp_tulnr=0 then null else kp_kanne.tulnr endif as kp_tulnr,
            if kp_kanne.objectnr is null or li_imp_objectnr=0 then null else kp_kanne.objectnr endif as kp_objectnr,
            if kp_kanne.osaknr is null or li_imp_osaknr=0 then null else kp_kanne.osaknr endif as kp_osaknr,
            if kp_kanne.subjectnr is null or li_imp_subjectnr=0 then null else kp_kanne.subjectnr endif as kp_subjectnr,
            if kp_kanne.suundnr is null or li_imp_suundnr=0 then null else kp_kanne.suundnr endif as kp_suundnr,
            if kp_kanne.taotnr is null or li_imp_taotnr=0 then null else kp_kanne.taotnr endif as kp_taotnr,
            if kp_kanne.alliknr is null or li_imp_alliknr=0 then null else kp_kanne.alliknr endif as kp_alliknr,
            if kp_kanne.ravonr is null or li_imp_ravonr=0 then null else kp_kanne.ravonr endif as kp_ravonr,
            if kp_kanne.id_maks is null or li_imp_id_maks=0 then null else kp_kanne.id_maks endif as kp_id_maks,
            if kp_kanne.lisanr is null then null else kp_kanne.lisanr endif as kp_lisanr
      from kp_kanne left outer join kp_obj on kp_kanne.objnr=kp_obj.objnr
      where kp_arvekuup>=ld_ataskuup and
           (kp_arvekuup=a_arvekuup or a_arvekuup is null) and
           (kp_arvenr=a_arvenr or a_arvenr is null) and
           (kp_kanne.asutnr=a_asutnr or a_asutnr is null) and
            kp_kanne.asutnr is not null and
            kp_obj.skoop=a_skoop and
            locate(ls_dk_kontod,';'+"Left"(kp_kanne.konto+Space(7),7)+';')>0
        group by kp_arvekuup,kp_arvenr,kp_kanne.asutnr,kp_info,kp_kanne.konto,kp_meetnr,kp_kulnr,kp_talnr,kp_artnr,kp_tulnr,kp_objectnr,kp_osaknr,kp_subjectnr,kp_suundnr,kp_taotnr,kp_alliknr,kp_ravonr,kp_id_maks,kp_lisanr;
    -- summeri yks arve yheks reaks
    delete from gl_dk_arvetas2007;
    insert into gl_dk_arvetas2007(asutnr,arvekuup,arvenr,konto,arvesumma,makssumma)
      select gl_kp_kanne.asutnr,gl_kp_kanne.arvekuup,gl_kp_kanne.arvenr,gl_kp_kanne.konto,sum(gl_kp_kanne.summa),sum(gl_kp_kanne.summa2)
        from gl_kp_kanne
        group by gl_kp_kanne.asutnr,gl_kp_kanne.arvekuup,gl_kp_kanne.arvenr,gl_kp_kanne.konto;
    -- kustuta null arved
    delete gl_dk_arvetas2007 from gl_dk_arvetas2007 where gl_dk_arvetas2007.arvesumma=gl_dk_arvetas2007.makssumma;
    -- summeeri sarnased kanded
    delete from gl_dk_kanne;
    insert into gl_dk_kanne (summa,summa2,arvekuup,arvenr,asutnr,taskuup,"info",konto,meetnr,kulnr,talnr,artnr,tulnr,objectnr,osaknr,subjectnr,suundnr,taotnr,alliknr,ravonr,id_maks,lisanr)
      select sum(gl_kp_kanne.summa),
             sum(gl_kp_kanne.summa2),
             gl_kp_kanne.arvekuup,
             gl_kp_kanne.arvenr,
             gl_kp_kanne.asutnr,
             max(gl_kp_kanne.arvekuup),
             gl_kp_kanne."info",
             gl_kp_kanne.konto,
             gl_kp_kanne.meetnr,
             gl_kp_kanne.kulnr,
             gl_kp_kanne.talnr,
             gl_kp_kanne.artnr,
             gl_kp_kanne.tulnr,
             gl_kp_kanne.objectnr,
             gl_kp_kanne.osaknr,
             gl_kp_kanne.subjectnr,
             gl_kp_kanne.suundnr,
             gl_kp_kanne.taotnr,
             gl_kp_kanne.alliknr,
             gl_kp_kanne.ravonr,
             gl_kp_kanne.id_maks,
             gl_kp_kanne.lisanr
        from gl_kp_kanne left outer join gl_dk_arvetas2007 on gl_kp_kanne.arvekuup=gl_dk_arvetas2007.arvekuup and gl_kp_kanne.arvenr=gl_dk_arvetas2007.arvenr and gl_kp_kanne.asutnr=gl_dk_arvetas2007.asutnr and gl_kp_kanne.konto=gl_dk_arvetas2007.konto
        where gl_dk_arvetas2007.asutnr is not NULL
        group by gl_kp_kanne.arvekuup,gl_kp_kanne.arvenr,gl_kp_kanne.asutnr,gl_kp_kanne."info",gl_kp_kanne.konto,gl_kp_kanne.meetnr,gl_kp_kanne.kulnr,gl_kp_kanne.talnr,gl_kp_kanne.artnr,gl_kp_kanne.tulnr,gl_kp_kanne.objectnr,gl_kp_kanne.osaknr,gl_kp_kanne.subjectnr,gl_kp_kanne.suundnr,gl_kp_kanne.taotnr,gl_kp_kanne.alliknr,gl_kp_kanne.ravonr,gl_kp_kanne.id_maks,gl_kp_kanne.lisanr;
    -- kustuta null read
    delete gl_dk_kanne from gl_dk_kanne where gl_dk_kanne.summa=gl_dk_kanne.summa2;
    delete from gl_kp_kanne;
  end if
END