ALTER PROCEDURE "DBA"."pa_lipik_koond"(in a_palgaleht integer,in a_v_aasta numeric(4),in a_lepnr integer)
begin
  declare ldc_summa numeric(15,2);
  declare ldc_tulumaks numeric(15,2);
  declare ldc_tvtkmaks numeric(15,2);
  declare ldc_pensmaks numeric(15,2);
  declare ldc_sotsmaks numeric(15,2);
  declare ldc_tatkmaks numeric(15,2);
  declare ldc_maksuvaba numeric(15,2);
  declare li_lepnr integer;
  declare li_sisse smallint;
  declare ls_algol char(2);
  declare ls_nimi char(50);
  declare li_skoop integer;
  declare ls_u_masut char(50);
  declare ll_yksusnr integer;
  declare ls_yksusnimi char(50);
  declare ls_v_per char(20);
  declare ls_t_per char(20);
  declare err_notfound exception for sqlstate value '02000';
  declare c_pa_tasu dynamic scroll cursor for
    select pa_tasu.lepnr,get_asulist_nimi(pa_leping.asutnr),pa_taslist.sisse,pa_taslist.algol,pa_tasu.summa,pa_tasu.tulumaks,pa_tasu.tvtkmaks,pa_tasu.pensmaks,pa_tasu.sotsmaks,pa_tasu.tatkmaks,pa_tasu.maksuvaba,get_kuu(pa_tasu.v_akuu)+' '+convert(char(4),pa_tasu.v_aasta)
      from pa_tasu left outer join pa_taslist on pa_tasu.tas_s = pa_taslist.tas_s left outer join pa_leping on pa_tasu.lepnr = pa_leping.lepnr where
      pa_tasu.palgaleht = a_palgaleht and pa_tasu.v_aasta = a_v_aasta and(pa_tasu.lepnr = a_lepnr or a_lepnr = 0);
  delete from gl_tr_lipik;
  select convert(char(2),pa_plnr.t_paev)+'.'+get_kuu(pa_plnr.t_akuu)+' '+convert(char(4),pa_plnr.t_aasta),pa_plnr.skoop,pa_plnr.yksusnr,pa_yksus.nimi into ls_t_per,li_skoop,ll_yksusnr,ls_yksusnimi from pa_plnr left outer join pa_yksus on pa_plnr.yksusnr = pa_yksus.yksusnr where pa_plnr.palgaleht = a_palgaleht and pa_plnr.v_aasta = a_v_aasta;
  select get_u_masut(li_skoop) into ls_u_masut from dummy;
  open c_pa_tasu;
  pa_tasu_loop: loop
    --  loe kanne
    fetch next c_pa_tasu into li_lepnr,ls_nimi,li_sisse,ls_algol,ldc_summa,ldc_tulumaks,ldc_tvtkmaks,ldc_pensmaks,ldc_sotsmaks,ldc_tatkmaks,ldc_maksuvaba,ls_v_per;
    if sqlstate = err_notfound then -- kui eof
      leave pa_tasu_loop
    end if;
    -- kas ei eksisteeri koondis
    if not exists(select 1 from gl_tr_lipik where gl_tr_lipik.lepnr = li_lepnr) then
      insert into gl_tr_lipik( u_masut,v_akuu,v_aasta,palgaleht,lepnr,nimi,arvestatud,kinnip,tulumaks,tvtkmaks,pensmaks,sotsmaks,tatkmaks,maksuvaba,volgu,saada,panka,v_per,t_per,yksusnr,yksusnimi)
        values( ls_u_masut,0,a_v_aasta,a_palgaleht,li_lepnr,ls_nimi,0,0,0,0,0,0,0,0,0,0,0,ls_v_per,ls_t_per,ll_yksusnr,ls_yksusnimi) 
    end if;
    -- summeerimine
    if li_sisse = 0 then
      update gl_tr_lipik set arvestatud = arvestatud+ldc_summa,tulumaks = tulumaks+ldc_tulumaks,tvtkmaks = tvtkmaks+ldc_tvtkmaks,pensmaks = pensmaks+ldc_pensmaks,sotsmaks = sotsmaks+ldc_sotsmaks,tatkmaks = tatkmaks+ldc_tatkmaks,maksuvaba=maksuvaba+ldc_maksuvaba where gl_tr_lipik.lepnr = li_lepnr
    else
      update gl_tr_lipik set kinnip = kinnip+ldc_summa, panka=panka+(if ls_algol='8o' then ldc_summa else 0 endif) ,tulumaks = tulumaks-ldc_tulumaks,tvtkmaks = tvtkmaks-ldc_tvtkmaks,pensmaks = pensmaks-ldc_pensmaks,sotsmaks = sotsmaks-ldc_sotsmaks,tatkmaks = tatkmaks-ldc_tatkmaks,maksuvaba=maksuvaba-ldc_maksuvaba where gl_tr_lipik.lepnr = li_lepnr
    end if
  end loop pa_tasu_loop;
  close c_pa_tasu;
  update gl_tr_lipik set kinnip = kinnip+tulumaks+tvtkmaks+pensmaks;
  update gl_tr_lipik set saada = arvestatud-kinnip
end