ALTER PROCEDURE "DBA"."kp_tul_kokku"(in id_skoop integer,in peralg date,in perlop date,in a_kp_komb_id integer, in a_skoopkood char(16) default '')
begin
  declare li_veerg1 smallint;
  declare li_veerg2 smallint;
  declare li_veerg3 smallint;
  declare li_sum_meet integer;
  declare li_sum_kul integer;
  declare li_sum_tal integer;
  declare li_sum_art integer;
  declare li_sum_tul integer;
  declare li_sum_object integer;
  declare li_sum_osak integer;
  declare li_sum_subject integer;
  declare li_sum_suund integer;
  declare li_sum_taot integer;
  declare li_tekont smallint;
  declare ld_kuualg date;
  declare ls_mitsir char(100);
  declare li_kaasa integer;
  delete from gl_tulkond;
  delete from gl_ea_kulkond;
  set ld_kuualg=ymd(Years(perlop),Month(perlop),1);
  select tm_rmpt.k_ea_tekont into li_tekont from tm_rmpt where tm_rmpt.id=1;
  if a_kp_komb_id > 0 then
    select kp_komb.tr_veerg1,kp_komb.tr_veerg2,kp_komb.tr_veerg3,kp_komb.tr_sum_kul,kp_komb.tr_sum_tal,kp_komb.tr_sum_art,kp_komb.tr_sum_tul,kp_komb.tr_sum_object,kp_komb.tr_sum_osak,kp_komb.tr_sum_subject,kp_komb.tr_sum_suund,kp_komb.tr_sum_meet,kp_komb.tr_sum_taot,kp_komb.tr_mitsir into li_veerg1,li_veerg2,li_veerg3,li_sum_kul,li_sum_tal,li_sum_art,li_sum_tul,li_sum_object,li_sum_osak,li_sum_subject,li_sum_suund,li_sum_meet,li_sum_taot,ls_mitsir from kp_komb where id = a_kp_komb_id
  else
    set li_veerg1 = 1;
    set li_veerg2 = 1;
    set li_veerg3 = 0
  end if;
  if ls_mitsir is null then
    set ls_mitsir = ''
  end if;
  set ls_mitsir = ';'+trim(ls_mitsir)+';';
  -- eelarve
  if li_veerg1>0 then
    insert into gl_ea_kulkond( meetnr,kulnr,talnr,tulnr,objectnr,osaknr,subjectnr,suundnr,taotnr,col01)
      select ea_kanne.meetnr,ea_kanne.kulnr,ea_kanne.talnr,ea_kanne.tulnr,ea_kanne.objectnr,ea_kanne.osaknr,ea_kanne.subjectnr,ea_kanne.suundnr,ea_kanne.taotnr,
            sum(ea_kanne.summa)
      from ea_kanne left outer join ea_obj on ea_kanne.objnr=ea_obj.objnr left outer join skoobid on ea_obj.skoop=skoobid.skoop
      where (ea_obj.skoop=id_skoop or id_skoop=0) and Left(skoobid.kood,Length(a_skoopkood))=a_skoopkood and (ea_obj.eaobj=1) and(ea_kanne.kuup>=peralg) and(ea_kanne.kuup<=perlop) and(ea_kanne.artnr is null and ea_kanne.tulnr is not null)
      group by ea_kanne.meetnr,ea_kanne.kulnr,ea_kanne.talnr,ea_kanne.tulnr,ea_kanne.objectnr,ea_kanne.osaknr,ea_kanne.subjectnr,ea_kanne.suundnr,ea_kanne.taotnr;
  end if;
  -- kassapohine
  if li_veerg2>0 then
    insert into gl_ea_kulkond( meetnr,kulnr,talnr,tulnr,objectnr,osaknr,subjectnr,suundnr,taotnr,col02,col03)
      select kp_kanne.meetnr,kp_kanne.kulnr,kp_kanne.talnr,kp_kanne.tulnr,kp_kanne.objectnr,kp_kanne.osaknr,kp_kanne.subjectnr,kp_kanne.suundnr,kp_kanne.taotnr,
            sum(if (kp_kanne.sisse = 1) then (kp_kanne.summa) else -1*(kp_kanne.summa) endif),
            sum(if (kp_kanne.kuup>=ld_kuualg) then (if (kp_kanne.sisse=1) then (kp_kanne.summa) else -1*(kp_kanne.summa) endif) else 0 endif)
      from kp_kanne left outer join kp_obj on kp_kanne.objnr=kp_obj.objnr left outer join skoobid on kp_obj.skoop=skoobid.skoop
      where (kp_obj.skoop=id_skoop or id_skoop=0) and Left(skoobid.kood,Length(a_skoopkood))=a_skoopkood and (kp_obj.eaobj=1) and (kp_obj.eelarve=0) and(kp_kanne.kuup>=peralg) and(kp_kanne.kuup<=perlop) and(kp_kanne.artnr is null and kp_kanne.tulnr is not null) and (kp_kanne.konto is null or locate(ls_mitsir,';'+Trim(kp_kanne.konto)+';')=0)
      group by kp_kanne.meetnr,kp_kanne.kulnr,kp_kanne.talnr,kp_kanne.tulnr,kp_kanne.objectnr,kp_kanne.osaknr,kp_kanne.subjectnr,kp_kanne.suundnr,kp_kanne.taotnr;
  end if;
  -- tekkepohine
  if li_veerg3 = 1 then
    if li_tekont=1 then
      insert into gl_ea_kulkond( meetnr,kulnr,talnr,tulnr,objectnr,osaknr,subjectnr,suundnr,taotnr,col04)
        select pr_kanne.meetnr,pr_kanne.kulnr,pr_kanne.talnr,kontlist.tulnr,pr_kanne.objectnr,pr_kanne.osaknr,pr_kanne.subjectnr,pr_kanne.suundnr,pr_kanne.taotnr,
               (-1)*sum(pr_kanne.summa)
        from pr_kanne left outer join kontlist on pr_kanne.deeb=kontlist.konto left outer join skoobid on pr_kanne.skoop=skoobid.skoop
        where (pr_kanne.skoop=id_skoop or id_skoop=0) and Left(skoobid.kood,Length(a_skoopkood))=a_skoopkood and kontlist.kulukonto=1 and kontlist.tulnr is not null and pr_kanne.deeb is not null and pr_kanne.kuup>=peralg and pr_kanne.kuup<=perlop
        group by pr_kanne.meetnr,pr_kanne.kulnr,pr_kanne.talnr,kontlist.tulnr,pr_kanne.objectnr,pr_kanne.osaknr,pr_kanne.subjectnr,pr_kanne.suundnr,pr_kanne.taotnr;
      insert into gl_ea_kulkond( meetnr,kulnr,talnr,tulnr,objectnr,osaknr,subjectnr,suundnr,taotnr,col04)
        select pr_kanne.meetnr,pr_kanne.kulnr,pr_kanne.talnr,kontlist.tulnr,pr_kanne.objectnr,pr_kanne.osaknr,pr_kanne.subjectnr,pr_kanne.suundnr,pr_kanne.taotnr,
               sum(pr_kanne.summa)
        from pr_kanne left outer join kontlist on pr_kanne.kree=kontlist.konto left outer join skoobid on pr_kanne.skoop=skoobid.skoop
        where (pr_kanne.skoop=id_skoop or id_skoop=0) and Left(skoobid.kood,Length(a_skoopkood))=a_skoopkood and kontlist.kulukonto=1 and kontlist.tulnr is not null and pr_kanne.kree is not null and pr_kanne.kuup>=peralg and pr_kanne.kuup<=perlop
        group by pr_kanne.meetnr,pr_kanne.kulnr,pr_kanne.talnr,kontlist.tulnr,pr_kanne.objectnr,pr_kanne.osaknr,pr_kanne.subjectnr,pr_kanne.suundnr,pr_kanne.taotnr;
    else
      insert into gl_ea_kulkond( meetnr,kulnr,talnr,tulnr,objectnr,osaknr,subjectnr,suundnr,taotnr,col04)
        select pr_kanne.meetnr,pr_kanne.kulnr,pr_kanne.talnr,pr_kanne.tulnr,pr_kanne.objectnr,pr_kanne.osaknr,pr_kanne.subjectnr,pr_kanne.suundnr,pr_kanne.taotnr,
               (-1)*sum(pr_kanne.summa)
        from pr_kanne left outer join kontlist on pr_kanne.deeb = kontlist.konto left outer join skoobid on pr_kanne.skoop=skoobid.skoop
        where (pr_kanne.skoop=id_skoop or id_skoop=0) and Left(skoobid.kood,Length(a_skoopkood))=a_skoopkood and kontlist.kulukonto=1 and pr_kanne.artnr is null and pr_kanne.tulnr is not null and pr_kanne.deeb is not null and pr_kanne.kuup>=peralg and pr_kanne.kuup<=perlop
        group by pr_kanne.meetnr,pr_kanne.kulnr,pr_kanne.talnr,pr_kanne.tulnr,pr_kanne.objectnr,pr_kanne.osaknr,pr_kanne.subjectnr,pr_kanne.suundnr,pr_kanne.taotnr;
      insert into gl_ea_kulkond( meetnr,kulnr,talnr,tulnr,objectnr,osaknr,subjectnr,suundnr,taotnr,col04)
        select pr_kanne.meetnr,pr_kanne.kulnr,pr_kanne.talnr,pr_kanne.tulnr,pr_kanne.objectnr,pr_kanne.osaknr,pr_kanne.subjectnr,pr_kanne.suundnr,pr_kanne.taotnr,
               sum(pr_kanne.summa)
        from pr_kanne left outer join kontlist on pr_kanne.kree = kontlist.konto left outer join skoobid on pr_kanne.skoop=skoobid.skoop
        where (pr_kanne.skoop=id_skoop or id_skoop=0) and Left(skoobid.kood,Length(a_skoopkood))=a_skoopkood and kontlist.kulukonto=1 and pr_kanne.artnr is null and pr_kanne.tulnr is not null and pr_kanne.kree is not null and pr_kanne.kuup>=peralg and pr_kanne.kuup<=perlop
        group by pr_kanne.meetnr,pr_kanne.kulnr,pr_kanne.talnr,pr_kanne.tulnr,pr_kanne.objectnr,pr_kanne.osaknr,pr_kanne.subjectnr,pr_kanne.suundnr,pr_kanne.taotnr;
    end if
  end if;
  -- nullimine
  update gl_ea_kulkond set meetnr=if meetnr is null then 0 else meetnr endif,kulnr=if kulnr is null then 0 else kulnr endif,talnr=if talnr is null then 0 else talnr endif,tulnr=if tulnr is null then 0 else tulnr endif,objectnr=if objectnr is null then 0 else objectnr endif,osaknr=if osaknr is null then 0 else osaknr endif,subjectnr=if subjectnr is null then 0 else subjectnr endif,suundnr=if suundnr is null then 0 else suundnr endif,taotnr=if taotnr is null then 0 else taotnr endif;
  -- kokku
  insert into gl_tulkond( meetnr,kulnr,talnr,tulnr,objectnr,osaknr,subjectnr,suundnr,taotnr,easum,summa,kuusum,tsum)
    select gl_ea_kulkond.meetnr,gl_ea_kulkond.kulnr,gl_ea_kulkond.talnr,gl_ea_kulkond.tulnr,gl_ea_kulkond.objectnr,gl_ea_kulkond.osaknr,gl_ea_kulkond.subjectnr,gl_ea_kulkond.suundnr,gl_ea_kulkond.taotnr,
           sum(col01),sum(col02),sum(col03),sum(col04)
    from gl_ea_kulkond
    group by gl_ea_kulkond.meetnr,gl_ea_kulkond.kulnr,gl_ea_kulkond.talnr,gl_ea_kulkond.tulnr,gl_ea_kulkond.objectnr,gl_ea_kulkond.osaknr,gl_ea_kulkond.subjectnr,gl_ea_kulkond.suundnr,gl_ea_kulkond.taotnr;
  -- summeeritakse skeemid
  if li_sum_meet > 0 then
    select if kaasa=1 then 1 else 0 endif into li_kaasa from kp_sksum where sksumnr=li_sum_meet;
    if li_kaasa=1 then
      delete from gl_tulkond from gl_tulkond left outer join kp_sksum_mark on kp_sksum_mark.sksumnr=li_sum_meet and gl_tulkond.meetnr=kp_sksum_mark.xxxnr where kp_sksum_mark.xxxnr is null
    else
      select count() into li_kaasa from kp_sksum_mark where sksumnr=li_sum_meet;
      if li_kaasa is null then
        set li_kaasa=0
      end if;
      if li_kaasa=0 then
        delete from gl_tulkond where gl_tulkond.meetnr>0
      else
        delete from gl_tulkond from gl_tulkond left outer join kp_sksum_mark on kp_sksum_mark.sksumnr=li_sum_meet and gl_tulkond.meetnr=kp_sksum_mark.xxxnr where kp_sksum_mark.xxxnr is not null
      end if;
    end if;
  end if;
  if li_sum_kul > 0 then
    select if kaasa=1 then 1 else 0 endif into li_kaasa from kp_sksum where sksumnr=li_sum_kul;
    if li_kaasa=1 then
      delete from gl_tulkond from gl_tulkond left outer join kp_sksum_mark on kp_sksum_mark.sksumnr=li_sum_kul and gl_tulkond.kulnr=kp_sksum_mark.xxxnr where kp_sksum_mark.xxxnr is null
    else
      select count() into li_kaasa from kp_sksum_mark where sksumnr=li_sum_kul;
      if li_kaasa is null then
        set li_kaasa=0
      end if;
      if li_kaasa=0 then
        delete from gl_tulkond where gl_tulkond.kulnr>0
      else
        delete from gl_tulkond from gl_tulkond left outer join kp_sksum_mark on kp_sksum_mark.sksumnr=li_sum_kul and gl_tulkond.kulnr=kp_sksum_mark.xxxnr where kp_sksum_mark.xxxnr is not null
      end if;
    end if;
  end if;
  if li_sum_tal > 0 then
    select if kaasa=1 then 1 else 0 endif into li_kaasa from kp_sksum where sksumnr=li_sum_tal;
    if li_kaasa=1 then
      delete from gl_tulkond from gl_tulkond left outer join kp_sksum_mark on kp_sksum_mark.sksumnr=li_sum_tal and gl_tulkond.talnr=kp_sksum_mark.xxxnr where kp_sksum_mark.xxxnr is null
    else
      select count() into li_kaasa from kp_sksum_mark where sksumnr=li_sum_tal;
      if li_kaasa is null then
        set li_kaasa=0
      end if;
      if li_kaasa=0 then
        delete from gl_tulkond where gl_tulkond.talnr>0
      else
        delete from gl_tulkond from gl_tulkond left outer join kp_sksum_mark on kp_sksum_mark.sksumnr=li_sum_tal and gl_tulkond.talnr=kp_sksum_mark.xxxnr where kp_sksum_mark.xxxnr is not null
      end if;
    end if;
  end if;
  if li_sum_tul > 0 then
    select if kaasa=1 then 1 else 0 endif into li_kaasa from kp_sksum where sksumnr=li_sum_tul;
    if li_kaasa=1 then
      delete from gl_tulkond from gl_tulkond left outer join kp_sksum_mark on kp_sksum_mark.sksumnr=li_sum_tul and gl_tulkond.tulnr=kp_sksum_mark.xxxnr where kp_sksum_mark.xxxnr is null
    else
      select count() into li_kaasa from kp_sksum_mark where sksumnr=li_sum_tul;
      if li_kaasa is null then
        set li_kaasa=0
      end if;
      if li_kaasa=0 then
        delete from gl_tulkond where gl_tulkond.tulnr>0
      else
        delete from gl_tulkond from gl_tulkond left outer join kp_sksum_mark on kp_sksum_mark.sksumnr=li_sum_tul and gl_tulkond.tulnr=kp_sksum_mark.xxxnr where kp_sksum_mark.xxxnr is not null
      end if;
    end if;
  end if;
  if li_sum_object > 0 then
    select if kaasa=1 then 1 else 0 endif into li_kaasa from kp_sksum where sksumnr=li_sum_object;
    if li_kaasa=1 then
      delete from gl_tulkond from gl_tulkond left outer join kp_sksum_mark on kp_sksum_mark.sksumnr=li_sum_object and gl_tulkond.objectnr=kp_sksum_mark.xxxnr where kp_sksum_mark.xxxnr is null
    else
      select count() into li_kaasa from kp_sksum_mark where sksumnr=li_sum_object;
      if li_kaasa is null then
        set li_kaasa=0
      end if;
      if li_kaasa=0 then
        delete from gl_tulkond where gl_tulkond.objectnr>0
      else
        delete from gl_tulkond from gl_tulkond left outer join kp_sksum_mark on kp_sksum_mark.sksumnr=li_sum_object and gl_tulkond.objectnr=kp_sksum_mark.xxxnr where kp_sksum_mark.xxxnr is not null
      end if;
    end if;
  end if;
  if li_sum_osak > 0 then
    select if kaasa=1 then 1 else 0 endif into li_kaasa from kp_sksum where sksumnr=li_sum_osak;
    if li_kaasa=1 then
      delete from gl_tulkond from gl_tulkond left outer join kp_sksum_mark on kp_sksum_mark.sksumnr=li_sum_osak and gl_tulkond.osaknr=kp_sksum_mark.xxxnr where kp_sksum_mark.xxxnr is null
    else
      select count() into li_kaasa from kp_sksum_mark where sksumnr=li_sum_osak;
      if li_kaasa is null then
        set li_kaasa=0
      end if;
      if li_kaasa=0 then
        delete from gl_tulkond where gl_tulkond.osaknr>0
      else
        delete from gl_tulkond from gl_tulkond left outer join kp_sksum_mark on kp_sksum_mark.sksumnr=li_sum_osak and gl_tulkond.osaknr=kp_sksum_mark.xxxnr where kp_sksum_mark.xxxnr is not null
      end if;
    end if;
  end if;
  if li_sum_subject > 0 then
    select if kaasa=1 then 1 else 0 endif into li_kaasa from kp_sksum where sksumnr=li_sum_subject;
    if li_kaasa=1 then
      delete from gl_tulkond from gl_tulkond left outer join kp_sksum_mark on kp_sksum_mark.sksumnr=li_sum_subject and gl_tulkond.subjectnr=kp_sksum_mark.xxxnr where kp_sksum_mark.xxxnr is null
    else
      select count() into li_kaasa from kp_sksum_mark where sksumnr=li_sum_subject;
      if li_kaasa is null then
        set li_kaasa=0
      end if;
      if li_kaasa=0 then
        delete from gl_tulkond where gl_tulkond.subjectnr>0
      else
        delete from gl_tulkond from gl_tulkond left outer join kp_sksum_mark on kp_sksum_mark.sksumnr=li_sum_subject and gl_tulkond.subjectnr=kp_sksum_mark.xxxnr where kp_sksum_mark.xxxnr is not null
      end if;
    end if;
  end if;
  if li_sum_suund > 0 then
    select if kaasa=1 then 1 else 0 endif into li_kaasa from kp_sksum where sksumnr=li_sum_suund;
    if li_kaasa=1 then
      delete from gl_tulkond from gl_tulkond left outer join kp_sksum_mark on kp_sksum_mark.sksumnr=li_sum_suund and gl_tulkond.suundnr=kp_sksum_mark.xxxnr where kp_sksum_mark.xxxnr is null
    else
      select count() into li_kaasa from kp_sksum_mark where sksumnr=li_sum_suund;
      if li_kaasa is null then
        set li_kaasa=0
      end if;
      if li_kaasa=0 then
        delete from gl_tulkond where gl_tulkond.suundnr>0
      else
        delete from gl_tulkond from gl_tulkond left outer join kp_sksum_mark on kp_sksum_mark.sksumnr=li_sum_suund and gl_tulkond.suundnr=kp_sksum_mark.xxxnr where kp_sksum_mark.xxxnr is not null
      end if;
    end if;
  end if;
  if li_sum_taot > 0 then
    select if kaasa=1 then 1 else 0 endif into li_kaasa from kp_sksum where sksumnr=li_sum_taot;
    if li_kaasa=1 then
      delete from gl_tulkond from gl_tulkond left outer join kp_sksum_mark on kp_sksum_mark.sksumnr=li_sum_taot and gl_tulkond.taotnr=kp_sksum_mark.xxxnr where kp_sksum_mark.xxxnr is null
    else
      select count() into li_kaasa from kp_sksum_mark where sksumnr=li_sum_taot;
      if li_kaasa is null then
        set li_kaasa=0
      end if;
      if li_kaasa=0 then
        delete from gl_tulkond where gl_tulkond.taotnr>0
      else
        delete from gl_tulkond from gl_tulkond left outer join kp_sksum_mark on kp_sksum_mark.sksumnr=li_sum_taot and gl_tulkond.taotnr=kp_sksum_mark.xxxnr where kp_sksum_mark.xxxnr is not null
      end if;
    end if;
  end if;
end