ALTER PROCEDURE "DBA"."pv_koond_kaart_kulum"(in a_skoop integer,in a_yksusnr integer,in a_yksuskood char(16),in a_paring integer,in a_id integer,in a_kuup date)
begin
  declare ls_konto char(7);
  declare ls_toot_nr char(20);
  declare ls_a_toot_nr char(20);
  declare ls_vara_nr char(10);
  declare ls_nimi char(100);
  declare ls_yldnimi char(200);
  declare ld_kuup date;
  declare ld_kuup2 date;
  declare ld_ekspl date;
  declare ldc_summa numeric(15,2);
  declare ldc_epk numeric(15,2);
  declare ldc_jpk_1 numeric(15,2);
  declare ldc_jpk_2 numeric(15,2);
  declare ldc_jpk_3 numeric(15,2);
  declare ldc_jpk_4 numeric(15,2);
  declare ldc_jpk_5 numeric(15,2);
  declare ldc_jpk_6 numeric(15,2);
  declare ldc_jpk_7 numeric(15,2);
  declare ldc_jpk_8 numeric(15,2);
  declare ldc_jpk_9 numeric(15,2);
  declare ldc_jpk_10 numeric(15,2);
  declare ldc_jpk_11 numeric(15,2);
  declare ldc_jpk_12 numeric(15,2);
  declare ldc_ytk numeric(15,2);
  declare li_yksusnr integer;
  declare li_objnr integer;
  declare li_objnr2 integer;
  declare li_id integer;
  declare li_id_min integer;
  declare li_yldnimnr integer;
  declare li_a_yldnimnr integer;
  declare ls_info char(250);
  declare li_aasta integer;
  declare li_paring integer;
  declare err_notfound exception for sqlstate value '02000';
  declare c_pv_kanne dynamic scroll cursor for
      select pv_yksus.konto,
             pv_kanne.yksusnr,
             pv_kanne."id",
             pv_kanne."yldnimnr",
             if pv_kanne.toot_nr is null then '' else trim(pv_kanne.toot_nr) endif,
             pv_kanne.vara_nr,
             pv_kanne.nimi,
             if pv_kanne_muuinfo.yldnimi is null or Trim(pv_kanne_muuinfo.yldnimi)='' then pv_kanne.nimi else pv_kanne_muuinfo.yldnimi endif,
             if "pv_kanne"."info" is null then '' else "pv_kanne"."info" endif,
             pv_kanne.kuup,
             pv_kanne.objnr,
             pv_kanne.kuup2,
             pv_kanne.objnr2,
             pv_kanne.ekspl,
             pv_kanne.alg_m,
             pv_epk(pv_kanne."id",years(a_kuup)) as epk,
             pv_kanne.ytk
        from pv_kanne left outer join gl_1 on(pv_kanne.id = gl_1.id) and(pv_kanne.kuup = gl_1.kuup)
                      left outer join pv_yksus on pv_kanne.yksusnr = pv_yksus.yksusnr
                      left outer join pv_kanne_muuinfo on pv_kanne.yldnimnr=pv_kanne_muuinfo."id"
        where((pv_kanne.id = gl_1.id) and(pv_kanne.kuup = gl_1.kuup) or a_paring = 0) and
             (pv_yksus.skoop = a_skoop or a_skoop = 0) and
             (pv_kanne.yksusnr = a_yksusnr or a_yksusnr = 0) and
             Left(pv_yksus.kood,Length(a_yksuskood))=a_yksuskood and
                 (a_id=0 or pv_kanne.id=a_id or (li_a_yldnimnr is not null and pv_kanne.yldnimnr=li_a_yldnimnr) or (Length(ls_a_toot_nr)>0 and pv_kanne.toot_nr=ls_a_toot_nr)) and
             pv_kanne.kuup <= a_kuup
        order by "pv_kanne"."id" asc;
  delete from gl_pv_kaart;
  set li_paring=set_gl_1(a_paring);
  set li_aasta=years(a_kuup);
  set li_a_yldnimnr=null;
  set ls_a_toot_nr='';
  -- kui yks vara
  if a_id > 0 then
    select "pv_kanne"."yldnimnr" into li_a_yldnimnr from pv_kanne where "pv_kanne"."id" = a_id;
    if li_a_yldnimnr is null then
      select Trim("pv_kanne"."toot_nr") into ls_a_toot_nr from pv_kanne where "pv_kanne"."id" = a_id;
      if ls_a_toot_nr is null then
        set ls_a_toot_nr=''
      end if
    end if
  end if;
  open c_pv_kanne;
  pv_kanne_loop: loop
    --  loe pearaamatu kanne
    fetch next c_pv_kanne into ls_konto,li_yksusnr,li_id,li_yldnimnr,ls_toot_nr,ls_vara_nr,ls_nimi,ls_yldnimi,ls_info,ld_kuup,li_objnr,ld_kuup2,li_objnr2,ld_ekspl,ldc_summa,ldc_epk,ldc_ytk;
    if sqlstate = err_notfound then -- kui eof
      leave pv_kanne_loop
    end if;
    set ldc_jpk_1 = pv_jpk(li_id,li_aasta,1,ldc_epk) + (if years(ld_kuup)=li_aasta and ld_kuup<ymd(li_aasta,2,1) then ldc_ytk else 0 endif);
    set ldc_jpk_2 = pv_jpk(li_id,li_aasta,2,ldc_epk) + (if years(ld_kuup)=li_aasta and ld_kuup<ymd(li_aasta,3,1) then ldc_ytk else 0 endif);
    set ldc_jpk_3 = pv_jpk(li_id,li_aasta,3,ldc_epk) + (if years(ld_kuup)=li_aasta and ld_kuup<ymd(li_aasta,4,1) then ldc_ytk else 0 endif);
    set ldc_jpk_4 = pv_jpk(li_id,li_aasta,4,ldc_epk) + (if years(ld_kuup)=li_aasta and ld_kuup<ymd(li_aasta,5,1) then ldc_ytk else 0 endif);
    set ldc_jpk_5 = pv_jpk(li_id,li_aasta,5,ldc_epk) + (if years(ld_kuup)=li_aasta and ld_kuup<ymd(li_aasta,6,1) then ldc_ytk else 0 endif);
    set ldc_jpk_6 = pv_jpk(li_id,li_aasta,6,ldc_epk) + (if years(ld_kuup)=li_aasta and ld_kuup<ymd(li_aasta,7,1) then ldc_ytk else 0 endif);
    set ldc_jpk_7 = pv_jpk(li_id,li_aasta,7,ldc_epk) + (if years(ld_kuup)=li_aasta and ld_kuup<ymd(li_aasta,8,1) then ldc_ytk else 0 endif);
    set ldc_jpk_8 = pv_jpk(li_id,li_aasta,8,ldc_epk) + (if years(ld_kuup)=li_aasta and ld_kuup<ymd(li_aasta,9,1) then ldc_ytk else 0 endif);
    set ldc_jpk_9 = pv_jpk(li_id,li_aasta,9,ldc_epk) + (if years(ld_kuup)=li_aasta and ld_kuup<ymd(li_aasta,10,1) then ldc_ytk else 0 endif);
    set ldc_jpk_10 = pv_jpk(li_id,li_aasta,10,ldc_epk) + (if years(ld_kuup)=li_aasta and ld_kuup<ymd(li_aasta,11,1) then ldc_ytk else 0 endif);
    set ldc_jpk_11 = pv_jpk(li_id,li_aasta,11,ldc_epk) + (if years(ld_kuup)=li_aasta and ld_kuup<ymd(li_aasta,12,1) then ldc_ytk else 0 endif);
    set ldc_jpk_12 = pv_jpk(li_id,li_aasta,12,ldc_epk) + (if years(ld_kuup)=li_aasta and ld_kuup<ymd(li_aasta,13,1) then ldc_ytk else 0 endif);
    insert into gl_pv_kaart("id",id_koond,konto,toot_nr,vara_nr,nimi,nimi_koond,"info",kuup,objnr,kuup2,objnr2,ekspl,alg_m,epk1,yksusnr,jpk_1,jpk_2,jpk_3,jpk_4,jpk_5,jpk_6,jpk_7,jpk_8,jpk_9,jpk_10,jpk_11,jpk_12)
           values(li_id,li_yldnimnr,ls_konto,ls_toot_nr,ls_vara_nr,ls_nimi,ls_yldnimi,ls_info,ld_kuup,li_objnr,ld_kuup2,li_objnr2,ld_ekspl,ldc_summa,ldc_epk,li_yksusnr,ldc_jpk_1,ldc_jpk_2,ldc_jpk_3,ldc_jpk_4,ldc_jpk_5,ldc_jpk_6,ldc_jpk_7,ldc_jpk_8,ldc_jpk_9,ldc_jpk_10,ldc_jpk_11,ldc_jpk_12);
  end loop pv_kanne_loop;
  close c_pv_kanne;
  update gl_pv_kanne set gl_pv_kanne.id_koond=get_pv_min_id(gl_pv_kanne.id) where gl_pv_kanne.id_koond is null
end