ALTER PROCEDURE "DBA"."pa_tasjaotus"(in a_id_yksus integer,in a_skoop integer,in a_palgaleht integer,in a_pl_aasta integer,in a_t_akuu numeric(2),in a_t_aasta numeric(4),in a_a_akuu numeric(2),in a_a_aasta numeric(4),in a_v_akuu numeric(2),in a_v_aasta numeric(4),in a_kulnr integer,in a_talnr integer,in a_tulnr integer,in a_objectnr integer,in a_osaknr integer,in a_suundnr integer,in a_statnr integer, in a_t_paev integer, in a_valver smallint default 1, in a_skoopkood char(16) default '')
begin
  declare ldc_summa numeric(15,2);
  declare ldc_par1 numeric(15,2);
  declare ldc_tulumaks numeric(15,2);
  declare ldc_tvtkmaks numeric(15,2);
  declare ldc_pensmaks numeric(15,2);
  declare ldc_tatkmaks numeric(15,2);
  declare ldc_sotsmaks numeric(15,2);
  declare ldc_tulumaks1 numeric(15,2);
  declare ldc_pensmaks1 numeric(15,2);
  declare ldc_tatkmaks1 numeric(15,2);
  declare ldc_sotsmaks1 numeric(15,2);
  declare li_tas_s integer;
  declare li_id_koht integer;
  declare li_sisse smallint;
  declare ls_algol char(2);
  declare ls_nimi char(50);
  declare ls_ptk char(16);
  declare li_ptk integer;
  declare ls_talosa char(16);
  declare li_talosa integer;
  declare ls_osa char(16);
  declare li_osa integer;
  declare ls_object char(16);
  declare li_object integer;
  declare ls_osak char(16);
  declare li_osak integer;
  declare ls_suund char(16);
  declare li_suund integer;
  declare ls_stat char(16);
  declare li_stat integer;
  declare err_notfound exception for sqlstate value '02000';
  declare c_pa_tasu insensitive cursor for
    select pa_taslist.tas_s,pa_taslist.nimi,pa_taslist.sisse,pa_taslist.algol,if a_valver=4 then pa_tasu.summaeek else pa_tasu.summa endif,if a_valver=4 then pa_tasu.par1eek else pa_tasu.par1 endif,if a_valver=4 then pa_tasu.tulumakseek else pa_tasu.tulumaks endif,if a_valver=4 then pa_tasu.tvtkmakseek else pa_tasu.tvtkmaks endif,if a_valver=4 then pa_tasu.pensmakseek else pa_tasu.pensmaks endif,if a_valver=4 then pa_tasu.tatkmakseek else pa_tasu.tatkmaks endif,if a_valver=4 then pa_tasu.sotsmakseek else pa_tasu.sotsmaks endif,(if pa_taslist.tulu = 1 then if a_valver=4 then pa_tasu.summaeek else pa_tasu.summa endif else 0 endif),(if pa_taslist.pens = 1 then if a_valver=4 then pa_tasu.summaeek else pa_tasu.summa endif else 0 endif),(if pa_taslist.tk > 0 then if a_valver=4 then pa_tasu.summaeek else pa_tasu.summa endif else 0 endif),(if pa_taslist.smrk = 1 then if a_valver=4 then pa_tasu.summaeek else pa_tasu.summa endif else 0 endif),pa_leping.id_koht
    from pa_tasu left outer join pa_leping on pa_tasu.lepnr=pa_leping.lepnr left outer join pa_plnr on pa_tasu.v_aasta=pa_plnr.v_aasta and pa_tasu.palgaleht=pa_plnr.palgaleht left outer join pa_taslist on pa_tasu.tas_s = pa_taslist.tas_s left outer join pa_yksus on pa_tasu.yksusnr = pa_yksus.yksusnr left outer join kullist on pa_yksus.kulnr = kullist.kulnr left outer join tallist on pa_yksus.talnr = tallist.talnr left outer join tullist on pa_yksus.tulnr = tullist.tulnr left outer join objlist on pa_yksus.objectnr = objlist.objectnr left outer join osaklist on pa_yksus.osaknr = osaklist.osaknr left outer join suundlist on pa_yksus.suundnr = suundlist.suundnr left outer join statlist on pa_yksus.statnr = statlist.statnr left outer join skoobid on pa_yksus.skoop=skoobid.skoop where
      (pa_tasu.yksusnr = a_id_yksus or a_id_yksus = 0) and(pa_yksus.skoop = a_skoop or a_skoop = 0) and Left(skoobid.kood,Length(a_skoopkood))=a_skoopkood and((pa_tasu.palgaleht = a_palgaleht and pa_tasu.v_aasta = a_pl_aasta) or a_palgaleht = 0) and(pa_plnr.t_paev = a_t_paev or a_t_paev = 0) and(pa_tasu.t_akuu = a_t_akuu or a_t_akuu = 0) and(pa_tasu.t_aasta = a_t_aasta or a_t_aasta = 2001) and(pa_tasu.a_akuu = a_a_akuu or a_a_akuu = 0) and(pa_tasu.a_aasta = a_a_aasta or a_a_aasta = 2001) and(pa_tasu.v_akuu = a_v_akuu or a_v_akuu = 0) and(pa_tasu.v_aasta = a_v_aasta or a_v_aasta = 2001) and("Left"(kullist.ptk,li_ptk) = ls_ptk or a_kulnr = 0) and("Left"(tallist.osa,li_talosa) = ls_talosa or a_talnr = 0) and("Left"(tullist.osa,li_osa) = ls_osa or a_tulnr = 0) and("Left"(objlist.object,li_object) = ls_object or a_objectnr = 0) and("Left"(osaklist.osak,li_osak) = ls_osak or a_osaknr = 0) and("Left"(suundlist.suund,li_suund) = ls_suund or a_suundnr = 0) and("Left"(statlist.stat,li_stat) = ls_stat or a_statnr = 0);
  delete from gl_tr_tabel;
  insert into gl_tr_tabel( sisse,id,kood,nimi,adeeb,akree,deeb,kree,sdeeb,skree,ldeeb,lkree) values( 1,-1,'',' Tulumaks',0,0,0,0,0,0,0,0) ;
  insert into gl_tr_tabel( sisse,id,kood,nimi,adeeb,akree,deeb,kree,sdeeb,skree,ldeeb,lkree) values( 1,-6,'',' Tulumaks alimentidelt',0,0,0,0,0,0,0,0) ;
  insert into gl_tr_tabel( sisse,id,kood,nimi,adeeb,akree,deeb,kree,sdeeb,skree,ldeeb,lkree) values( 1,-2,'',' Töövõtja töötuskindlustus',0,0,0,0,0,0,0,0) ;
  insert into gl_tr_tabel( sisse,id,kood,nimi,adeeb,akree,deeb,kree,sdeeb,skree,ldeeb,lkree) values( 1,-3,'',' Kogumispension',0,0,0,0,0,0,0,0) ;
  insert into gl_tr_tabel( sisse,id,kood,nimi,adeeb,akree,deeb,kree,sdeeb,skree,ldeeb,lkree) values( 2,-7,'',' Kassasse tasumiseks',0,0,0,0,0,0,0,0) ;
  insert into gl_tr_tabel( sisse,id,kood,nimi,adeeb,akree,deeb,kree,sdeeb,skree,ldeeb,lkree) values( 3,-4,'',' Tööandja töötuskindlustus',0,0,0,0,0,0,0,0) ;
  insert into gl_tr_tabel( sisse,id,kood,nimi,adeeb,akree,deeb,kree,sdeeb,skree,ldeeb,lkree) values( 3,-5,'',' Sotsiaalmaks',0,0,0,0,0,0,0,0) ;
  if a_kulnr > 0 then
    select trim(kullist.ptk) into ls_ptk from kullist where kullist.kulnr = a_kulnr;
    set li_ptk=Length(ls_ptk);
    if li_ptk is null or li_ptk = 0 then
      set a_kulnr=0
    end if
  end if;
  if a_talnr > 0 then
    select trim(tallist.osa) into ls_talosa from tallist where tallist.talnr = a_talnr;
    set li_talosa=Length(ls_talosa);
    if li_talosa is null or li_talosa = 0 then
      set a_talnr=0
    end if
  end if;
  if a_tulnr > 0 then
    select trim(tullist.osa) into ls_osa from tullist where tullist.tulnr = a_tulnr;
    set li_osa=Length(ls_osa);
    if li_osa is null or li_osa = 0 then
      set a_tulnr=0
    end if
  end if;
  if a_objectnr > 0 then
    select trim(objlist.object) into ls_object from objlist where objlist.objectnr = a_objectnr;
    set li_object=Length(ls_object);
    if li_object is null or li_object = 0 then
      set a_objectnr=0
    end if
  end if;
  if a_osaknr > 0 then
    select trim(osaklist.osak) into ls_osak from osaklist where osaklist.osaknr = a_osaknr;
    set li_osak=Length(ls_osak);
    if li_osak is null or li_osak = 0 then
      set a_osaknr=0
    end if
  end if;
  if a_suundnr > 0 then
    select trim(suundlist.suund) into ls_suund from suundlist where suundlist.suundnr = a_suundnr;
    set li_suund=Length(ls_suund);
    if li_suund is null or li_suund = 0 then
      set a_suundnr=0
    end if
  end if;
  if a_statnr > 0 then
    select trim(statlist.stat) into ls_stat from statlist where statlist.statnr = a_statnr;
    set li_stat=Length(ls_stat);
    if li_stat is null or li_stat = 0 then
      set a_statnr=0
    end if
  end if;
  open c_pa_tasu;
  pa_tasu_loop: loop
    --  loe kanne
    fetch next c_pa_tasu into li_tas_s,ls_nimi,li_sisse,ls_algol,ldc_summa,ldc_par1,ldc_tulumaks,ldc_tvtkmaks,ldc_pensmaks,ldc_tatkmaks,ldc_sotsmaks,ldc_tulumaks1,ldc_pensmaks1,ldc_tatkmaks1,ldc_sotsmaks1,li_id_koht;
    if sqlstate = err_notfound then -- kui eof
      leave pa_tasu_loop
    end if;
    if ldc_par1 is null then
      set ldc_par1=0
    end if;
    if ldc_tulumaks1 is null then
      set ldc_tulumaks1=0
    end if;
    if ldc_pensmaks1 is null then
      set ldc_pensmaks1=0
    end if;
    if ldc_tatkmaks1 is null then
      set ldc_tatkmaks1=0
    end if;
    if ldc_sotsmaks1 is null then
      set ldc_sotsmaks1=0
    end if;
    -- kas ei eksisteeri koondis
    if not exists(select 1 from gl_tr_tabel where gl_tr_tabel.id = li_tas_s) then
      insert into gl_tr_tabel( sisse,id,kood,nimi,adeeb,akree,deeb,kree,sdeeb,skree,ldeeb,lkree) values( li_sisse,li_tas_s,'',ls_nimi,0,0,0,0,0,0,0,0) 
    end if;
    -- summeerimine
    update gl_tr_tabel set deeb = deeb+ldc_summa,adeeb = adeeb+(if li_id_koht = 1 then ldc_summa else 0 endif),akree = akree+(if li_id_koht = 2 then ldc_summa else 0 endif),ldeeb = ldeeb+(if li_id_koht = 3 then ldc_summa else 0 endif),lkree = lkree+(if li_id_koht = 4 then ldc_summa else 0 endif) where gl_tr_tabel.id = li_tas_s;
    if li_sisse = 0 then
      update gl_tr_tabel set deeb = deeb+ldc_tulumaks,kree = kree+ldc_tulumaks1,adeeb = adeeb+(if li_id_koht = 1 then ldc_tulumaks else 0 endif),akree = akree+(if li_id_koht = 2 then ldc_tulumaks else 0 endif),ldeeb = ldeeb+(if li_id_koht = 3 then ldc_tulumaks else 0 endif),lkree = lkree+(if li_id_koht = 4 then ldc_tulumaks else 0 endif) where gl_tr_tabel.id = -1;
      update gl_tr_tabel set deeb = deeb+ldc_tvtkmaks,adeeb = adeeb+(if li_id_koht = 1 then ldc_tvtkmaks else 0 endif),akree = akree+(if li_id_koht = 2 then ldc_tvtkmaks else 0 endif),ldeeb = ldeeb+(if li_id_koht = 3 then ldc_tvtkmaks else 0 endif),lkree = lkree+(if li_id_koht = 4 then ldc_tvtkmaks else 0 endif) where gl_tr_tabel.id = -2;
      update gl_tr_tabel set deeb = deeb+ldc_pensmaks,kree = kree+ldc_pensmaks1,adeeb = adeeb+(if li_id_koht = 1 then ldc_pensmaks else 0 endif),akree = akree+(if li_id_koht = 2 then ldc_pensmaks else 0 endif),ldeeb = ldeeb+(if li_id_koht = 3 then ldc_pensmaks else 0 endif),lkree = lkree+(if li_id_koht = 4 then ldc_pensmaks else 0 endif) where gl_tr_tabel.id = -3;
      update gl_tr_tabel set deeb = deeb+ldc_tatkmaks,kree = kree+ldc_tatkmaks1,adeeb = adeeb+(if li_id_koht = 1 then ldc_tatkmaks else 0 endif),akree = akree+(if li_id_koht = 2 then ldc_tatkmaks else 0 endif),ldeeb = ldeeb+(if li_id_koht = 3 then ldc_tatkmaks else 0 endif),lkree = lkree+(if li_id_koht = 4 then ldc_tatkmaks else 0 endif) where gl_tr_tabel.id = -4;
      update gl_tr_tabel set deeb = deeb+ldc_sotsmaks,kree = kree+ldc_sotsmaks1,adeeb = adeeb+(if li_id_koht = 1 then ldc_sotsmaks else 0 endif),akree = akree+(if li_id_koht = 2 then ldc_sotsmaks else 0 endif),ldeeb = ldeeb+(if li_id_koht = 3 then ldc_sotsmaks else 0 endif),lkree = lkree+(if li_id_koht = 4 then ldc_sotsmaks else 0 endif) where gl_tr_tabel.id = -5;
      update gl_tr_tabel set deeb = deeb+ldc_summa,adeeb = adeeb+(if li_id_koht = 1 then ldc_summa else 0 endif),akree = akree+(if li_id_koht = 2 then ldc_summa else 0 endif),ldeeb = ldeeb+(if li_id_koht = 3 then ldc_summa else 0 endif),lkree = lkree+(if li_id_koht = 4 then ldc_summa else 0 endif) where gl_tr_tabel.id = -7;
      update gl_tr_tabel set deeb = deeb-ldc_tulumaks,adeeb = adeeb-(if li_id_koht = 1 then ldc_tulumaks else 0 endif),akree = akree-(if li_id_koht = 2 then ldc_tulumaks else 0 endif),ldeeb = ldeeb-(if li_id_koht = 3 then ldc_tulumaks else 0 endif),lkree = lkree-(if li_id_koht = 4 then ldc_tulumaks else 0 endif) where gl_tr_tabel.id = -7;
      update gl_tr_tabel set deeb = deeb-ldc_tvtkmaks,adeeb = adeeb-(if li_id_koht = 1 then ldc_tvtkmaks else 0 endif),akree = akree-(if li_id_koht = 2 then ldc_tvtkmaks else 0 endif),ldeeb = ldeeb-(if li_id_koht = 3 then ldc_tvtkmaks else 0 endif),lkree = lkree-(if li_id_koht = 4 then ldc_tvtkmaks else 0 endif) where gl_tr_tabel.id = -7;
      update gl_tr_tabel set deeb = deeb-ldc_pensmaks,adeeb = adeeb-(if li_id_koht = 1 then ldc_pensmaks else 0 endif),akree = akree-(if li_id_koht = 2 then ldc_pensmaks else 0 endif),ldeeb = ldeeb-(if li_id_koht = 3 then ldc_pensmaks else 0 endif),lkree = lkree-(if li_id_koht = 4 then ldc_pensmaks else 0 endif) where gl_tr_tabel.id = -7
    else
      update gl_tr_tabel set deeb = deeb-ldc_tulumaks,kree = kree-ldc_tulumaks1,adeeb = adeeb-(if li_id_koht = 1 then ldc_tulumaks else 0 endif),akree = akree-(if li_id_koht = 2 then ldc_tulumaks else 0 endif),ldeeb = ldeeb-(if li_id_koht = 3 then ldc_tulumaks else 0 endif),lkree = lkree-(if li_id_koht = 4 then ldc_tulumaks else 0 endif) where gl_tr_tabel.id = -1;
      update gl_tr_tabel set deeb = deeb-ldc_tvtkmaks,adeeb = adeeb-(if li_id_koht = 1 then ldc_tvtkmaks else 0 endif),akree = akree-(if li_id_koht = 2 then ldc_tvtkmaks else 0 endif),ldeeb = ldeeb-(if li_id_koht = 3 then ldc_tvtkmaks else 0 endif),lkree = lkree-(if li_id_koht = 4 then ldc_tvtkmaks else 0 endif) where gl_tr_tabel.id = -2;
      update gl_tr_tabel set deeb = deeb-ldc_pensmaks,kree = kree-ldc_pensmaks1,adeeb = adeeb-(if li_id_koht = 1 then ldc_pensmaks else 0 endif),akree = akree-(if li_id_koht = 2 then ldc_pensmaks else 0 endif),ldeeb = ldeeb-(if li_id_koht = 3 then ldc_pensmaks else 0 endif),lkree = lkree-(if li_id_koht = 4 then ldc_pensmaks else 0 endif) where gl_tr_tabel.id = -3;
      update gl_tr_tabel set deeb = deeb-ldc_tatkmaks,kree = kree-ldc_tatkmaks1,adeeb = adeeb-(if li_id_koht = 1 then ldc_tatkmaks else 0 endif),akree = akree-(if li_id_koht = 2 then ldc_tatkmaks else 0 endif),ldeeb = ldeeb-(if li_id_koht = 3 then ldc_tatkmaks else 0 endif),lkree = lkree-(if li_id_koht = 4 then ldc_tatkmaks else 0 endif) where gl_tr_tabel.id = -4;
      update gl_tr_tabel set deeb = deeb-ldc_sotsmaks,kree = kree-ldc_sotsmaks1,adeeb = adeeb-(if li_id_koht = 1 then ldc_sotsmaks else 0 endif),akree = akree-(if li_id_koht = 2 then ldc_sotsmaks else 0 endif),ldeeb = ldeeb-(if li_id_koht = 3 then ldc_sotsmaks else 0 endif),lkree = lkree-(if li_id_koht = 4 then ldc_sotsmaks else 0 endif) where gl_tr_tabel.id = -5;
      update gl_tr_tabel set deeb = deeb-ldc_summa,adeeb = adeeb-(if li_id_koht = 1 then ldc_summa else 0 endif),akree = akree-(if li_id_koht = 2 then ldc_summa else 0 endif),ldeeb = ldeeb-(if li_id_koht = 3 then ldc_summa else 0 endif),lkree = lkree-(if li_id_koht = 4 then ldc_summa else 0 endif) where gl_tr_tabel.id = -7;
      update gl_tr_tabel set deeb = deeb+ldc_tulumaks,adeeb = adeeb+(if li_id_koht = 1 then ldc_tulumaks else 0 endif),akree = akree+(if li_id_koht = 2 then ldc_tulumaks else 0 endif),ldeeb = ldeeb+(if li_id_koht = 3 then ldc_tulumaks else 0 endif),lkree = lkree+(if li_id_koht = 4 then ldc_tulumaks else 0 endif) where gl_tr_tabel.id = -7;
      update gl_tr_tabel set deeb = deeb+ldc_tvtkmaks,adeeb = adeeb+(if li_id_koht = 1 then ldc_tvtkmaks else 0 endif),akree = akree+(if li_id_koht = 2 then ldc_tvtkmaks else 0 endif),ldeeb = ldeeb+(if li_id_koht = 3 then ldc_tvtkmaks else 0 endif),lkree = lkree+(if li_id_koht = 4 then ldc_tvtkmaks else 0 endif) where gl_tr_tabel.id = -7;
      update gl_tr_tabel set deeb = deeb+ldc_pensmaks,adeeb = adeeb+(if li_id_koht = 1 then ldc_pensmaks else 0 endif),akree = akree+(if li_id_koht = 2 then ldc_pensmaks else 0 endif),ldeeb = ldeeb+(if li_id_koht = 3 then ldc_pensmaks else 0 endif),lkree = lkree+(if li_id_koht = 4 then ldc_pensmaks else 0 endif) where gl_tr_tabel.id = -7
    end if;
    if ls_algol = '6a' then
      update gl_tr_tabel set deeb = deeb+ldc_par1,kree = kree+ldc_summa where gl_tr_tabel.id = -6
    end if
  end loop pa_tasu_loop;
  close c_pa_tasu;
  delete from gl_tr_tabel where gl_tr_tabel.deeb = 0
end