ALTER FUNCTION "dba"."pa_puhkused_max"(in a_skoop integer,in a_yksusnr integer,in a_lepnr integer,in a_tas_s integer,in a_algol char(2),in a_tgraaf_akuup date,in a_tgraaf_lkuup date,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_user_code integer)
RETURNS char(2)
begin
  declare ls_algol char(2);
  declare li_akuu numeric(2);
  declare li_aasta numeric(4);
  declare ld_kups date;
  declare ld_akuup date;
  declare ld_lkuup date;
  declare ld_kuup1 date;
  declare ld_kuup2 date;
  declare ld_puhk_akuup date;
  declare ldc_sum_kuupalk numeric(15,2);
  declare ldc_sum_keskmine numeric(15,2);
  declare ldc_sum1 numeric(15,2);
  declare ldc_par1 numeric(15,3);
  declare ldc_par2 numeric(15,3);
  declare ldc_par3 numeric(15,3);
  declare ldc_par4 numeric(15,3);
  declare err_notfound exception for sqlstate value '02000';
  declare c_keskpuhk dynamic scroll cursor for select sum("gl_pa_tasu"."summa") from "gl_pa_tasu" where "gl_pa_tasu"."lepnr" = a_lepnr group by "gl_pa_tasu"."vtas_s", "gl_pa_tasu"."vparyldnr" order by "gl_pa_tasu"."vtas_s" ASC, "gl_pa_tasu"."vparyldnr" ASC;
  declare c_paryld_puhk dynamic scroll cursor for
	select "pa_paryld"."summa1", if ld_akuup<"pa_paryld"."akuup" then "pa_paryld"."akuup" else ld_akuup endif, if COALESCE("pa_paryld"."lkuup","pa_isik"."kuup2") is null or COALESCE("pa_paryld"."lkuup","pa_isik"."kuup2")>ld_lkuup then ld_lkuup else COALESCE("pa_paryld"."lkuup","pa_isik"."kuup2") endif as pa_paryld_lkuup
	  from "pa_paryld"  left outer join "pa_taslist" ON "pa_paryld"."tas_s"="pa_taslist"."tas_s" LEFT OUTER JOIN "pa_isik" ON "pa_paryld"."lepnr"="pa_isik"."lepnr" AND "pa_paryld"."yksusnr"="pa_isik"."yksusnr"
	  where "pa_paryld"."lepnr"=a_lepnr AND "pa_paryld"."yksusnr"=a_yksusnr AND "pa_taslist"."algol"='2a' AND "pa_taslist"."puhk"=1 AND "pa_paryld"."summa1">0 AND "pa_paryld"."akuup"<=ld_lkuup AND pa_paryld_lkuup>=ld_akuup
	  order by "pa_paryld"."summa1" desc;


  set ldc_sum_kuupalk=0;
  set ldc_sum_keskmine=0;
  set ld_akuup=ymd(a_a_aasta,a_a_akuu,1);
  set ld_lkuup=get_perlop(ld_akuup);
  set ldc_par3=get_tp_arv_per(ld_akuup,ld_lkuup);
  if a_tgraaf_akuup>ld_akuup then
    set ld_akuup=a_tgraaf_akuup
  end if;
  if a_tgraaf_lkuup<ld_lkuup then
    set ld_lkuup=a_tgraaf_lkuup
  end if;
  set ld_puhk_akuup=get_puhk_akuup(a_tgraaf_akuup);
  set ld_puhk_akuup=get_tp_enne_kuup(ld_puhk_akuup,2);
  set li_akuu=month(ld_puhk_akuup);
  set li_aasta=years(ld_puhk_akuup);

  
-- kuupalk
  set ls_algol='1b';
  if ldc_par3>0 and ld_lkuup>=ld_akuup then
    open c_paryld_puhk;
    paryld_puhk_loop: loop
      fetch next c_paryld_puhk into ldc_par4,ld_kuup1,ld_kuup2;
      if sqlstate = err_notfound then
        leave paryld_puhk_loop
      end if;
      if ldc_par4<>0 and ld_kuup2>=ld_kuup1 then
        set ldc_par1=get_tp_arv_per(ld_kuup1,ld_kuup2);
        if ldc_par1>0 then
          set ldc_par2 = Round(ldc_par4/ldc_par3,3);
          if ldc_par1=ldc_par3 then
            set ldc_sum1 = Round(ldc_par4,2);
          else
            set ldc_sum1=Ceiling(((ldc_par4/ldc_par3)*ldc_par1)*100)/100
          end if;
          set ldc_sum_kuupalk=ldc_sum_kuupalk+ldc_sum1
        end if;
      end if;
    end loop paryld_puhk_loop;
    close c_paryld_puhk
  end if;


-- keskmine
  set ls_algol='1i';
  call pa_keskpuhk(a_lepnr, a_yksusnr, li_akuu, li_aasta, ls_algol, a_user_code);
  select sum(paevi) into ldc_par3 from gl_pa_tasu;
  if ldc_par3>0 then
    set ld_kups=ld_akuup;
    set ld_kuup2=cast('1900-01-01' as date);
    kuu_loop: while ld_kups <= ld_lkuup loop
      if pa_gl_peat(ld_kups)=1 then
        set ld_kuup1=ld_kups;
        set li_akuu = month(ld_kups);
        set li_aasta = years(ld_kups);
        per_loop: while ld_kups<=ld_lkuup and month(ld_kups)=li_akuu and pa_gl_peat(ld_kups)=1 loop
          set ld_kuup2=ld_kups;
          set ld_kups=Days(ld_kups,1)
        end loop per_loop;
        if ld_kuup2>=ld_kuup1 then
          open c_keskpuhk;
          keskpuhk_loop: loop
            fetch next c_keskpuhk into ldc_par4;
            if sqlstate = err_notfound then
              leave keskpuhk_loop
            end if;
            if ldc_par4<>0 then
              set ldc_par1=get_kp_arv_per(ld_kuup1,ld_kuup2);
              if ldc_par1>0 then
                set ldc_par2 = Round(ldc_par4/ldc_par3,3);
                set ldc_sum1 = Round((ldc_par4/ldc_par3)*ldc_par1,2);
                set ldc_sum_keskmine=ldc_sum_keskmine+ldc_sum1
              end if;
            end if;
          end loop keskpuhk_loop;
          close c_keskpuhk
        end if;
      else
        set ld_kups=Days(ld_kups,1)
      end if;
    end loop kuu_loop;
  end if;


-- vordlus
  set ls_algol=a_algol;
  if ldc_sum_kuupalk>ldc_sum_keskmine and ls_algol='1i' then
    set ls_algol='1b'
  end if;
  if ldc_sum_keskmine>ldc_sum_kuupalk and ls_algol='1b' then
    set ls_algol='1i'
  end if;

  Return ls_algol;
end