CREATE PROCEDURE "DBA"."dk_koond1_asutarvetas"(inout id_skoop integer,in id_obj integer,in id_paring integer,in perlop date)
begin
  declare li_paring integer;
  declare ls_dk_kontod char(5000);
  declare li_koef smallint;
  delete from gl_dk_arvetas;
  delete from gl_dk_arvetas2007;
  set li_koef=1;
  if id_obj > 0 then
    select dk_obj.skoop, if dk_obj.spank=1 then -1 else 1 endif into id_skoop,li_koef from dk_obj where dk_obj.objnr = id_obj
  end if;
  -- arveldused
  set li_paring=set_gl_1(id_paring);
  insert into gl_dk_arvetas( asutnr,arvenr,arvekuup,taskuup,maksnr,arvesumma) 
      select dk_kanne.asutnr,
             if (dk_kanne.crekuup is null or dk_kanne.crenr is null) then if dk_kanne.arvenr is null then '' else dk_kanne.arvenr endif else dk_kanne.crenr endif as dk_kanne_arvenr,
             if (dk_kanne.crekuup is null or dk_kanne.crenr is null) then (if dk_kanne.arvekuup is null then dk_kanne.kuup else dk_kanne.arvekuup endif) else dk_kanne.crekuup endif as dk_kanne_arvekuup,
             if dk_kanne.taskuup is null then dk_kanne_arvekuup else dk_kanne.taskuup endif as dk_kanne_taskuup,
             max(dk_kanne.doknr),
             sum(if dk_kanne.sisse = 1 then li_koef*(dk_kanne.summa+dk_kanne.summa2) else (-1)*li_koef*(dk_kanne.summa+dk_kanne.summa2) 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_arvekuup,dk_kanne_arvenr,dk_kanne_taskuup;
  -- tasumise tahtajad
  insert into gl_dk_arvetas2007(asutnr,arvenr,arvekuup,taskuup)
      select gl_dk_arvetas.asutnr,
             gl_dk_arvetas.arvenr,
             gl_dk_arvetas.arvekuup,
             gl_dk_arvetas.taskuup
        from gl_dk_arvetas;
  -- 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_dk_arvetas( asutnr,arvenr,arvekuup,taskuup,makssumma)
      select kp_kanne.asutnr,
             kp_kanne.arvenr,
             kp_kanne.arvekuup,
             kp_kanne.taskuup,
             sum(if kp_kanne.sisse = 1 then li_koef*kp_kanne.summa else (-1)*li_koef*kp_kanne.summa 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,kp_kanne.arvekuup,kp_kanne.arvenr,kp_kanne.taskuup;
  -- tasumise tahtajad
  update gl_dk_arvetas as aaa left outer join gl_dk_arvetas2007 as bbb on aaa.asutnr=bbb.asutnr and aaa.arvenr=bbb.arvenr and aaa.arvekuup=bbb.arvekuup set aaa.taskuup=bbb.taskuup where aaa.taskuup is null;
  -- koond
  delete from gl_dk_arvetas2007;
  insert into gl_dk_arvetas2007( asutnr,arvenr,arvekuup,taskuup,doknr,arvesumma,makssumma) 
    select gl_dk_arvetas.asutnr,gl_dk_arvetas.arvenr,gl_dk_arvetas.arvekuup,gl_dk_arvetas.taskuup,max(gl_dk_arvetas.maksnr),sum(gl_dk_arvetas.arvesumma),sum(gl_dk_arvetas.makssumma)
      from gl_dk_arvetas
      group by gl_dk_arvetas.asutnr,gl_dk_arvetas.arvenr,gl_dk_arvetas.arvekuup,gl_dk_arvetas.taskuup;
  -- loppjaagid
  update gl_dk_arvetas2007 set arvesumma=0 where arvesumma is null;
  update gl_dk_arvetas2007 set makssumma=0 where makssumma is null;
  delete from gl_dk_arvetas2007 where arvesumma-makssumma = 0
end