ALTER PROCEDURE "dba"."dk_koond_kmd"(in a_skoop integer,in a_perlop date, in a_skoopkood char(16) default '')
BEGIN
  declare ld_peralg date;
  declare ld_perlop date;
  declare ld_kuup date;
  declare ldc_summa numeric(15,2);
  declare ldc_sum1 numeric(15,2);
  declare li_arv53 integer;
  declare li_arv54 integer;
  declare li_carv53 integer;
  declare li_carv54 integer;
  declare err_notfound exception for sqlstate value '02000';
  declare c_auto insensitive cursor for select kbautolist.arv53,kbautolist.arv54,kbautolist.kuup from kbautolist left outer join skoobid on kbautolist.skoop=skoobid.skoop where (kbautolist.skoop=a_skoop or kbautolist.skoop=0 or a_skoop=0) and Left(skoobid.kood,Length(a_skoopkood))=a_skoopkood order by kbautolist.kuup asc;
  delete gl_dk_kanne;
  delete gl_pa_stat;
  set ld_peralg=get_peralg(a_perlop);
  set ld_perlop=get_perlop(a_perlop);
-- kanded, mis jaavad skoopi
  insert into gl_dk_kanne(objnr,kbnr,summa,summa2)
    select dk_obj.spank,dk_kanne.kbnr,sum(if dk_kanne.sisse=dk_obj.spank then -1*dk_kanne.summa else dk_kanne.summa endif),sum(if dk_kanne.sisse=dk_obj.spank then -1*(dk_kanne.summa2+if dk_kanne.summa4 is null then 0 else dk_kanne.summa4 endif) else dk_kanne.summa2+if dk_kanne.summa4 is null then 0 else dk_kanne.summa4 endif endif)
      from dk_kanne left outer join dk_obj on dk_kanne.objnr=dk_obj.objnr
                    left outer join kblist on dk_kanne.kbnr=kblist.kbnr
                    left outer join skoobid on dk_obj.skoop=skoobid.skoop
      where (dk_obj.skoop=a_skoop or a_skoop=0) and Left(skoobid.kood,Length(a_skoopkood))=a_skoopkood and
            (dk_kanne.kuup>=ld_peralg and dk_kanne.kuup<=ld_perlop) and
            (dk_kanne.kbnr is not null) and kblist.deklar=1
      group by dk_obj.spank,dk_kanne.kbnr;
  insert into gl_pa_stat(kood,nimi,v1,v2)
    select '1','24% määraga maksustatavad toimingud ja tehingud',sum(gl_dk_kanne.summa),24
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (kblist.protsent=24 or kblist.protsent4=24) and
            ((gl_dk_kanne.objnr=0 and (charindex(';1;', ';'+Trim(kblist.k_kmdrida)+';')>0 or charindex(';1.', ';'+Trim(kblist.k_kmdrida)+';')>0)) or
            (gl_dk_kanne.objnr=1 and (charindex(';1;', ';'+Trim(kblist.d_kmdrida)+';')>0 or charindex(';1.', ';'+Trim(kblist.d_kmdrida)+';')>0)));
  insert into gl_pa_stat(kood,nimi,v1,v2)
    select '1.2','22% määraga maksustatavad toimingud ja tehingud',sum(gl_dk_kanne.summa),22
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (kblist.protsent=22 or kblist.protsent4=22) and
            ((gl_dk_kanne.objnr=0 and (charindex(';1;', ';'+Trim(kblist.k_kmdrida)+';')>0 or charindex(';1.', ';'+Trim(kblist.k_kmdrida)+';')>0)) or
            (gl_dk_kanne.objnr=1 and (charindex(';1;', ';'+Trim(kblist.d_kmdrida)+';')>0 or charindex(';1.', ';'+Trim(kblist.d_kmdrida)+';')>0)));
  insert into gl_pa_stat(kood,nimi,v1,v2)
    select '1.1','20% määraga maksustatavad toimingud ja tehingud',sum(gl_dk_kanne.summa),20
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (kblist.protsent=20 or kblist.protsent4=20) and
            ((gl_dk_kanne.objnr=0 and (charindex(';1;', ';'+Trim(kblist.k_kmdrida)+';')>0 or charindex(';1.', ';'+Trim(kblist.k_kmdrida)+';')>0)) or
            (gl_dk_kanne.objnr=1 and (charindex(';1;', ';'+Trim(kblist.d_kmdrida)+';')>0 or charindex(';1.', ';'+Trim(kblist.d_kmdrida)+';')>0)));
  insert into gl_pa_stat(kood,nimi,v1,v2)
    select '2','9% määraga maksustatavad toimingud ja tehingud',sum(gl_dk_kanne.summa),9
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=0 and charindex(';2;', ';'+Trim(kblist.k_kmdrida)+';')>0) or
            (gl_dk_kanne.objnr=1 and charindex(';2;', ';'+Trim(kblist.d_kmdrida)+';')>0);
  insert into gl_pa_stat(kood,nimi,v1,v2)
    select '2.1','5% määraga maksustatavad toimingud ja tehingud',sum(gl_dk_kanne.summa),5
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=0 and charindex(';2.1;', ';'+Trim(kblist.k_kmdrida)+';')>0) or
            (gl_dk_kanne.objnr=1 and charindex(';2.1;', ';'+Trim(kblist.d_kmdrida)+';')>0);
  insert into gl_pa_stat(kood,nimi,v1,v2)
    select '2.2','13% määraga maksustatavad toimingud ja tehingud',sum(gl_dk_kanne.summa),13
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=0 and charindex(';2.2;', ';'+Trim(kblist.k_kmdrida)+';')>0) or
            (gl_dk_kanne.objnr=1 and charindex(';2.2;', ';'+Trim(kblist.d_kmdrida)+';')>0);
  insert into gl_pa_stat(kood,nimi,v1)
    select '3','0% määraga maksustatavad toimingud ja tehingud',sum(gl_dk_kanne.summa)
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=0 and (charindex(';3;', ';'+Trim(kblist.k_kmdrida)+';')>0 or charindex(';3.', ';'+Trim(kblist.k_kmdrida)+';')>0)) or
            (gl_dk_kanne.objnr=1 and (charindex(';3;', ';'+Trim(kblist.d_kmdrida)+';')>0 or charindex(';3.', ';'+Trim(kblist.d_kmdrida)+';')>0));
  insert into gl_pa_stat(kood,nimi,v1)
    select '3.1','1) sh ühendusesisene käive ja teise liikmesriigi maksukohuslasele osutatud teenuste käive kokku, sh',sum(gl_dk_kanne.summa)
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=0 and (charindex(';3.1;', ';'+Trim(kblist.k_kmdrida)+';')>0 or charindex(';3.1.', ';'+Trim(kblist.k_kmdrida)+';')>0)) or
            (gl_dk_kanne.objnr=1 and (charindex(';3.1;', ';'+Trim(kblist.d_kmdrida)+';')>0 or charindex(';3.1.', ';'+Trim(kblist.d_kmdrida)+';')>0));
  insert into gl_pa_stat(kood,nimi,v1)
    select '3.1.1','sh kauba ühendusesisene käive',sum(gl_dk_kanne.summa)
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=0 and charindex(';3.1.1;', ';'+Trim(kblist.k_kmdrida)+';')>0) or
            (gl_dk_kanne.objnr=1 and charindex(';3.1.1;', ';'+Trim(kblist.d_kmdrida)+';')>0);
  insert into gl_pa_stat(kood,nimi,v1)
    select '3.2','2) sh kauba eksport, sh',sum(gl_dk_kanne.summa)
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=0 and (charindex(';3.2;', ';'+Trim(kblist.k_kmdrida)+';')>0 or charindex(';3.2.', ';'+Trim(kblist.k_kmdrida)+';')>0)) or
            (gl_dk_kanne.objnr=1 and (charindex(';3.2;', ';'+Trim(kblist.d_kmdrida)+';')>0 or charindex(';3.2.', ';'+Trim(kblist.d_kmdrida)+';')>0));
  insert into gl_pa_stat(kood,nimi,v1)
    select '3.2.1','sh käibemaksuga müük reisijale',sum(gl_dk_kanne.summa)
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=0 and charindex(';3.2.1;', ';'+Trim(kblist.k_kmdrida)+';')>0) or
            (gl_dk_kanne.objnr=1 and charindex(';3.2.1;', ';'+Trim(kblist.d_kmdrida)+';')>0);
  insert into gl_pa_stat(kood,nimi,v1)
    select '','Käibemaks kokku (summeeritud)',sum(gl_dk_kanne.summa2)
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=0 and charindex(';4;', ';'+Trim(kblist.k_kmdrida)+';')>0) or
            (gl_dk_kanne.objnr=1 and charindex(';4;', ';'+Trim(kblist.d_kmdrida)+';')>0);
  set ldc_summa=0;
  set ldc_sum1=0;
  select sum(v1 * v2 / 100) into ldc_sum1 from gl_pa_stat where kood='1';
  if ldc_sum1<>0 then
    set ldc_summa=ldc_summa+ldc_sum1;
  end if;
  set ldc_sum1=0;
  select sum(v1 * v2 / 100) into ldc_sum1 from gl_pa_stat where kood='1.2';
  if ldc_sum1<>0 then
    set ldc_summa=ldc_summa+ldc_sum1;
  end if;
  set ldc_sum1=0;
  select sum(v1 * v2 / 100) into ldc_sum1 from gl_pa_stat where kood='1.1';
  if ldc_sum1<>0 then
    set ldc_summa=ldc_summa+ldc_sum1;
  end if;
  set ldc_sum1=0;
  select sum(v1 * v2 / 100) into ldc_sum1 from gl_pa_stat where kood='2';
  if ldc_sum1<>0 then
    set ldc_summa=ldc_summa+ldc_sum1;
  end if;
  set ldc_sum1=0;
  select sum(v1 * v2 / 100) into ldc_sum1 from gl_pa_stat where kood='2.1';
  if ldc_sum1<>0 then
    set ldc_summa=ldc_summa+ldc_sum1;
  end if;
  set ldc_sum1=0;
  select sum(v1 * v2 / 100) into ldc_sum1 from gl_pa_stat where kood='2.2';
  if ldc_sum1<>0 then
    set ldc_summa=ldc_summa+ldc_sum1;
  end if;
  -- aegunud select sum(v1 * v2 / 100) into ldc_summa from gl_pa_stat where kood in ('1','1.1','2','2.1','2.2');
  insert into gl_pa_stat(kood,nimi,v1) values ('4','Käibemaks kokku (arvutatud)',ldc_summa);
  insert into gl_pa_stat(kood,nimi,v1)
    select '4.1','Impordilt tasumisele kuuluv käibemaks',sum(gl_dk_kanne.summa2)
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=0 and charindex(';4.1;', ';'+Trim(kblist.k_kmdrida)+';')>0) or
            (gl_dk_kanne.objnr=1 and charindex(';4.1;', ';'+Trim(kblist.d_kmdrida)+';')>0);
  insert into gl_pa_stat(kood,nimi,v1)
    select '5','Kokku sisendkäibemaksu summa',sum(if (kblist.proportsioon is null or kblist.proportsioon=0) then gl_dk_kanne.summa2 else gl_dk_kanne.summa2-Round((kblist.proportsioon*gl_dk_kanne.summa2)/100,2) endif)
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=1 and (charindex(';5;', ';'+Trim(kblist.d_kmdrida)+';')>0 or charindex(';5.', ';'+Trim(kblist.d_kmdrida)+';')>0)) or
            (gl_dk_kanne.objnr=0 and (charindex(';5;', ';'+Trim(kblist.k_kmdrida)+';')>0 or charindex(';5.', ';'+Trim(kblist.k_kmdrida)+';')>0));
  insert into gl_pa_stat(kood,nimi,v1)
    select '5.1','sh impordilt tasutud käibemaks',sum(if (kblist.proportsioon is null or kblist.proportsioon=0) then gl_dk_kanne.summa2 else gl_dk_kanne.summa2-Round((kblist.proportsioon*gl_dk_kanne.summa2)/100,2) endif)
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=1 and charindex(';5.1;', ';'+Trim(kblist.d_kmdrida)+';')>0) or
            (gl_dk_kanne.objnr=0 and charindex(';5.1;', ';'+Trim(kblist.k_kmdrida)+';')>0);
  insert into gl_pa_stat(kood,nimi,v1)
    select '5.2','sh põhivara soetamiselt tasutud käibemaks',sum(if (kblist.proportsioon is null or kblist.proportsioon=0) then gl_dk_kanne.summa2 else gl_dk_kanne.summa2-Round((kblist.proportsioon*gl_dk_kanne.summa2)/100,2) endif)
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=1 and charindex(';5.2;', ';'+Trim(kblist.d_kmdrida)+';')>0) or
            (gl_dk_kanne.objnr=0 and charindex(';5.2;', ';'+Trim(kblist.k_kmdrida)+';')>0);
  insert into gl_pa_stat(kood,nimi,v1)
    select '5.3','sh ettevõtluses (100%) kasutatava sõiduauto ',sum(if (kblist.proportsioon is null or kblist.proportsioon=0) then gl_dk_kanne.summa2 else gl_dk_kanne.summa2-Round((kblist.proportsioon*gl_dk_kanne.summa2)/100,2) endif)
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=1 and charindex(';5.3;', ';'+Trim(kblist.d_kmdrida)+';')>0) or
            (gl_dk_kanne.objnr=0 and charindex(';5.3;', ';'+Trim(kblist.k_kmdrida)+';')>0);
  insert into gl_pa_stat(kood,nimi,v1)
    select '5.4','sh osaliselt ettevõtluses kasutatava sõiduauto ',sum(if (kblist.proportsioon is null or kblist.proportsioon=0) then gl_dk_kanne.summa2 else gl_dk_kanne.summa2-Round((kblist.proportsioon*gl_dk_kanne.summa2)/100,2) endif)
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=1 and charindex(';5.4;', ';'+Trim(kblist.d_kmdrida)+';')>0) or
            (gl_dk_kanne.objnr=0 and charindex(';5.4;', ';'+Trim(kblist.k_kmdrida)+';')>0);
  insert into gl_pa_stat(kood,nimi,v1)
    select '6','Kauba ühendusesisene soetamine ja teise liikmesriigi maksukohustuslaselt saadud teenused kokku',sum(gl_dk_kanne.summa)
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=1 and (charindex(';6;', ';'+Trim(kblist.d_kmdrida)+';')>0 or charindex(';6.', ';'+Trim(kblist.d_kmdrida)+';')>0)) or
            (gl_dk_kanne.objnr=0 and (charindex(';6;', ';'+Trim(kblist.k_kmdrida)+';')>0 or charindex(';6.', ';'+Trim(kblist.k_kmdrida)+';')>0));
  insert into gl_pa_stat(kood,nimi,v1)
    select '6.1','sh kauba ühendusesisene soetamine',sum(gl_dk_kanne.summa)
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=1 and charindex(';6.1;', ';'+Trim(kblist.d_kmdrida)+';')>0) or
            (gl_dk_kanne.objnr=0 and charindex(';6.1;', ';'+Trim(kblist.k_kmdrida)+';')>0);
  insert into gl_pa_stat(kood,nimi,v1)
    select '7','Muu kauba soetamine ja teenuse saamine, mida maksustatakse käibemaksuga',sum(gl_dk_kanne.summa)
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=0 and (charindex(';7;', ';'+Trim(kblist.k_kmdrida)+';')>0 or charindex(';7.', ';'+Trim(kblist.k_kmdrida)+';')>0)) or
            (gl_dk_kanne.objnr=1 and (charindex(';7;', ';'+Trim(kblist.d_kmdrida)+';')>0 or charindex(';7.', ';'+Trim(kblist.d_kmdrida)+';')>0));
  insert into gl_pa_stat(kood,nimi,v1)
    select '7.1','sh erikorra alusel maksustatava kinnisasja, metallijäätmete jms. soetamine',sum(gl_dk_kanne.summa)
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=0 and charindex(';7.1;', ';'+Trim(kblist.k_kmdrida)+';')>0) or
            (gl_dk_kanne.objnr=1 and charindex(';7.1;', ';'+Trim(kblist.d_kmdrida)+';')>0);
  insert into gl_pa_stat(kood,nimi,v1)
    select '8','Maksuvaba käive',sum(gl_dk_kanne.summa)
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=0 and charindex(';8;', ';'+Trim(kblist.k_kmdrida)+';')>0) or
            (gl_dk_kanne.objnr=1 and charindex(';8;', ';'+Trim(kblist.d_kmdrida)+';')>0);
  insert into gl_pa_stat(kood,nimi,v1)
    select '9','erikorra alusel maksustatava kinnisasja, metallijäätmete jms. käive ning teises liikmesriigis paigaldatava kauba väärtus',sum(gl_dk_kanne.summa)
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=0 and charindex(';9;', ';'+Trim(kblist.k_kmdrida)+';')>0) or
            (gl_dk_kanne.objnr=1 and charindex(';9;', ';'+Trim(kblist.d_kmdrida)+';')>0);
  insert into gl_pa_stat(kood,nimi,v1)
    select '10','Täpsustused +',sum(gl_dk_kanne.summa2)
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=0 and charindex(';10;', ';'+Trim(kblist.k_kmdrida)+';')>0) or
            (gl_dk_kanne.objnr=1 and charindex(';10;', ';'+Trim(kblist.d_kmdrida)+';')>0);
  insert into gl_pa_stat(kood,nimi,v1)
    select '11','Täpsustused -',sum(gl_dk_kanne.summa2)
      from gl_dk_kanne left outer join kblist on gl_dk_kanne.kbnr=kblist.kbnr
      where (gl_dk_kanne.objnr=1 and charindex(';11;', ';'+Trim(kblist.d_kmdrida)+';')>0) or
            (gl_dk_kanne.objnr=0 and charindex(';11;', ';'+Trim(kblist.k_kmdrida)+';')>0);
  set ldc_summa = 0;
  select v1 into ldc_sum1 from gl_pa_stat where kood='4';
  if ldc_sum1 <> 0 then
    set ldc_summa=ldc_summa+ldc_sum1;
  end if;
  select v1 into ldc_sum1 from gl_pa_stat where kood='4.1';
  if ldc_sum1 <> 0 then
    set ldc_summa=ldc_summa+ldc_sum1;
  end if;
  select v1 into ldc_sum1 from gl_pa_stat where kood='5';
  if ldc_sum1 <> 0 then
    set ldc_summa=ldc_summa-ldc_sum1;
  end if;
  select v1 into ldc_sum1 from gl_pa_stat where kood='10';
  if ldc_sum1 <> 0 then
    set ldc_summa=ldc_summa+ldc_sum1;
  end if;
  select v1 into ldc_sum1 from gl_pa_stat where kood='11';
  if ldc_sum1 <> 0 then
    set ldc_summa=ldc_summa-ldc_sum1;
  end if;
  if ldc_summa > 0 then
    insert into gl_pa_stat(kood,nimi,v1) values ('12','Tasumisele kuuluv käibemaks',ldc_summa);
  else
    insert into gl_pa_stat(kood,nimi,v1) values ('13','Enammakstud käibemaks',abs(ldc_summa));
  end if;
  open c_auto;
  auto_loop: loop
    --  loe kanne
    fetch next c_auto into li_carv53,li_carv54,ld_kuup;
    if sqlstate = err_notfound then -- kui eof
      leave auto_loop
    end if;
    if ld_kuup > ld_perlop then -- kui eof
      leave auto_loop
    end if;
    set li_arv53=li_carv53;
    set li_arv54=li_carv54;
  end loop auto_loop;
  close c_auto;
  update gl_pa_stat set v3=li_arv53 where kood='5.3';
  update gl_pa_stat set v3=li_arv54 where kood='5.4';
  update gl_pa_stat set v1=0 where v1 is null;
  update gl_pa_stat set v3=0 where v3 is null;
  delete from gl_pa_stat where v1=0 and v3=0;
END