/*
This is a 2018 version of the apflora schema https://github.com/barbalex/apf2/tree/master/sql/apflora - latest version likely has differing contents

We use it to test our metadata generation because it contains a good amount of db objects.

Custom roles and privileges where removed.

postgrest-with-postgresql-14 -f test/io/big_schema.sql psql

Has 12 functions:

select count(*)  from information_schema.routines where specific_schema = 'apflora';
 count
-------
    12

Has 45 tables:

select count(*)  from information_schema.tables where table_schema = 'apflora' and table_type = 'BASE TABLE';
 count
-------
    45
(1 row)

Has 281 views:

select count(*)  from information_schema.views where table_schema = 'apflora';
 count
-------
   281
(1 row)

Has 45 pkcols where none of them is a composite primary key:

with pkcols as (
  select kcu.table_schema,
         kcu.table_name,
         tco.constraint_name,
         array_agg(kcu.column_name order by kcu.ordinal_position) as key_columns
  from information_schema.table_constraints tco
  join information_schema.key_column_usage kcu
       on kcu.constraint_name = tco.constraint_name
       and kcu.constraint_schema = tco.constraint_schema
       and kcu.constraint_name = tco.constraint_name
  where tco.constraint_type = 'PRIMARY KEY' and kcu.table_schema = 'apflora'
  group by kcu.table_schema, kcu.table_name, tco.constraint_name
)
select count(*) from pkcols
where array_length(key_columns, 1) > 1;
 count
-------
     0
(1 row)

Has 50 foreign key relationships:

with fk_rel as (
  select ns1.nspname as table_schema,
             tab.relname as table_name,
             ns2.nspname as foreign_table_schema,
             other.relname as foreign_table_name,
             conname     as constraint_name,
             column_info.cols as columns
  from pg_constraint,
  lateral (
    select array_agg(row(cols.attname, refs.attname) order by cols.attnum) as cols
    from ( select unnest(conkey) as col, unnest(confkey) as ref) k,
    lateral (select * from pg_attribute where attrelid = conrelid and attnum = col) as cols,
    lateral (select * from pg_attribute where attrelid = confrelid and attnum = ref) as refs) as column_info,
  lateral (select * from pg_namespace where pg_namespace.oid = connamespace) as ns1,
  lateral (select * from pg_class where pg_class.oid = conrelid) as tab,
  lateral (select * from pg_class where pg_class.oid = confrelid) as other,
  lateral (select * from pg_namespace where pg_namespace.oid = other.relnamespace) as ns2
  where contype = 'f' and conparentid = 0
)
select count(*) from fk_rel;

 count
-------
    50
(1 row)
*/

SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET row_security = off;


CREATE SCHEMA apflora;

CREATE SCHEMA auth;

CREATE SCHEMA request;


CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;



COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';



CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA public;



COMMENT ON EXTENSION pgcrypto IS 'cryptographic functions';



CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA public;



COMMENT ON EXTENSION "uuid-ossp" IS 'generate universally unique identifiers (UUIDs)';



CREATE TYPE apflora.qk_pop_ohne_popber AS (
	proj_id uuid,
	ap_id uuid,
	hw text,
	url text[],
	text text[]
);




CREATE TYPE apflora.qk_pop_ohne_popmassnber AS (
	proj_id uuid,
	ap_id uuid,
	hw text,
	url text[],
	text text[]
);




CREATE TYPE apflora.qk_tpop_ohne_massnber AS (
	proj_id uuid,
	ap_id uuid,
	hw text,
	url text[],
	text text[]
);




CREATE TYPE apflora.qk_tpop_ohne_tpopber AS (
	proj_id uuid,
	ap_id uuid,
	hw text,
	url text[],
	text text[]
);




CREATE TYPE auth.jwt_token AS (
	token text
);




CREATE FUNCTION apflora.ap_insert_add_apart() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
BEGIN
  INSERT INTO
    apflora.apart (ap_id, art_id)
  VALUES (NEW.id, NEW.art_id);
  RETURN NEW;
END;
$$;




CREATE FUNCTION apflora.ap_insert_add_idealbiotop() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
BEGIN
  INSERT INTO
    apflora.idealbiotop (ap_id)
  VALUES (NEW.id);
  RETURN NEW;
END;
$$;




CREATE FUNCTION apflora.correct_vornach_beginnap_stati(apid uuid) RETURNS void
    LANGUAGE plpgsql SECURITY DEFINER
    AS $_$
 BEGIN


   UPDATE apflora.tpop
   WHERE id IN (
     SELECT
       tpop.id
     FROM
       apflora.tpop
       INNER JOIN apflora.pop
       ON apflora.tpop.pop_id = apflora.pop.id
         INNER JOIN apflora.ap
         ON apflora.pop.ap_id = apflora.ap.id
     WHERE
       AND apflora.ap.start_jahr IS NULL
       AND apflora.ap.id = $1
   );

   UPDATE apflora.pop
   WHERE id IN (
     SELECT
       pop.id
     FROM
       apflora.pop
         INNER JOIN apflora.ap
         ON apflora.pop.ap_id = apflora.ap.id
     WHERE
       AND apflora.ap.start_jahr IS NULL
       AND apflora.ap.id = $1
   );

   UPDATE apflora.tpop
   WHERE id IN (
     SELECT
       tpop.id
     FROM
       apflora.tpop
       INNER JOIN apflora.pop
       ON apflora.tpop.pop_id = apflora.pop.id
         INNER JOIN apflora.ap
         ON apflora.pop.ap_id = apflora.ap.id
     WHERE
       AND apflora.ap.start_jahr <= apflora.tpop.bekannt_seit
       AND apflora.ap.id = $1
   );

   UPDATE apflora.pop
   WHERE id IN (
     SELECT
       pop.id
     FROM
       apflora.pop
         INNER JOIN apflora.ap
         ON apflora.pop.ap_id = apflora.ap.id
     WHERE
       AND apflora.ap.start_jahr <= apflora.pop.bekannt_seit
       AND apflora.ap.id = $1
   );

   UPDATE apflora.tpop
   WHERE id IN (
     SELECT
       tpop.id
     FROM
       apflora.tpop
       INNER JOIN apflora.pop
       ON apflora.tpop.pop_id = apflora.pop.id
         INNER JOIN apflora.ap
         ON apflora.pop.ap_id = apflora.ap.id
     WHERE
       AND apflora.ap.start_jahr > apflora.tpop.bekannt_seit
       AND apflora.ap.id = $1
   );

   UPDATE apflora.pop
   WHERE id IN (
     SELECT
       pop.id
     FROM
       apflora.pop
         INNER JOIN apflora.ap
         ON apflora.pop.ap_id = apflora.ap.id
     WHERE
       AND apflora.ap.start_jahr > apflora.pop.bekannt_seit
       AND apflora.ap.id = $1
   );

   UPDATE apflora.tpop
   WHERE id IN (
     SELECT
       tpop.id
     FROM
       apflora.tpop
       INNER JOIN apflora.pop
       ON apflora.tpop.pop_id = apflora.pop.id
         INNER JOIN apflora.ap
         ON apflora.pop.ap_id = apflora.ap.id
     WHERE
       AND apflora.ap.start_jahr IS NULL
       AND apflora.ap.id = $1
   );

   UPDATE apflora.pop
   WHERE id IN (
     SELECT
       pop.id
     FROM
       apflora.pop
         INNER JOIN apflora.ap
         ON apflora.pop.ap_id = apflora.ap.id
     WHERE
       AND apflora.ap.start_jahr IS NULL
       AND apflora.ap.id = $1
   );

   UPDATE apflora.tpop
   WHERE id IN (
     SELECT
       tpop.id
     FROM
       apflora.tpop
       INNER JOIN apflora.pop
       ON apflora.tpop.pop_id = apflora.pop.id
         INNER JOIN apflora.ap
         ON apflora.pop.ap_id = apflora.ap.id
     WHERE
       AND apflora.ap.start_jahr <= apflora.tpop.bekannt_seit
       AND apflora.ap.id = $1
   );

   UPDATE apflora.pop
   WHERE id IN (
     SELECT
       pop.id
     FROM
       apflora.pop
         INNER JOIN apflora.ap
         ON apflora.pop.ap_id = apflora.ap.id
     WHERE
       AND apflora.ap.start_jahr <= apflora.pop.bekannt_seit
       AND apflora.ap.id = $1
   );

   UPDATE apflora.tpop
   WHERE id IN (
     SELECT
       tpop.id
     FROM
       apflora.tpop
       INNER JOIN apflora.pop
       ON apflora.tpop.pop_id = apflora.pop.id
         INNER JOIN apflora.ap
         ON apflora.pop.ap_id = apflora.ap.id
     WHERE
       AND apflora.ap.start_jahr > apflora.tpop.bekannt_seit
       AND apflora.ap.id = $1
   );

   UPDATE apflora.pop
   WHERE id IN (
     SELECT
       pop.id
     FROM
       apflora.pop
         INNER JOIN apflora.ap
         ON apflora.pop.ap_id = apflora.ap.id
     WHERE
       AND apflora.ap.start_jahr > apflora.pop.bekannt_seit
       AND apflora.ap.id = $1
   );

 END;
 $_$;




CREATE FUNCTION apflora.login(username text, pass text) RETURNS auth.jwt_token
    LANGUAGE plpgsql
    AS $_$
declare
  _role name;
  result auth.jwt_token;
begin
  select auth.user_role($1, $2) into _role;
  if _role is null then
    raise invalid_password using message = 'invalid user or password';
  end if;

  select auth.sign(
      row_to_json(r), current_setting('app.jwt_secret')
    ) as token
    from (
      select _role as role,
      $1 as username,
      extract(epoch from now())::integer + 60*60*24*30 as exp
    ) r
    into result;
  return result;
end;
$_$;




CREATE FUNCTION apflora.pop_max_one_massnber_per_year() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    IF
      (
        NEW.jahr > 0
        AND NEW.jahr IN
          (
            SELECT
              jahr
            FROM
              apflora.popmassnber
            WHERE
              pop_id = NEW.pop_id
              AND id <> NEW.id
          )
      )
    THEN
      RAISE EXCEPTION 'Pro Population und Jahr darf maximal ein Massnahmenbericht erfasst werden';
    END IF;
    RETURN NEW;
  END;
$$;




CREATE FUNCTION apflora.pop_max_one_popber_per_year() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    IF
      (
        NEW.jahr > 0
        AND NEW.jahr IN
          (
            SELECT
              jahr
            FROM
              apflora.popber
            WHERE
              pop_id = NEW.pop_id
              AND id <> NEW.id
          )
      )
    THEN
      RAISE EXCEPTION 'Pro Population und Jahr darf maximal ein Populationsbericht erfasst werden';
    END IF;
    RETURN NEW;
  END;
$$;




CREATE FUNCTION apflora.qk_pop_ohne_popber(apid uuid, berichtjahr integer) RETURNS SETOF apflora.qk_pop_ohne_popber
    LANGUAGE sql STABLE
    AS $_$
  SELECT DISTINCT
    apflora.ap.proj_id,
    apflora.pop.ap_id,
    'Population mit angesiedelten Teilpopulationen (vor dem Berichtjahr), die (im Berichtjahr) kontrolliert wurden, aber ohne Populations-Bericht (im Berichtjahr):' AS hw,
    ARRAY['Projekte', '4635372c-431c-11e8-bb30-e77f6cdd35a6' , 'Aktionspläne', apflora.ap.id, 'Populationen', apflora.pop.id]::text[] AS "url",
    ARRAY[concat('Population (Nr.): ', apflora.pop.nr)]::text[] AS text
  FROM
    apflora.ap
    INNER JOIN
      apflora.pop
      ON apflora.pop.ap_id = apflora.ap.id
  WHERE
    apflora.pop.id IN (
      SELECT
        apflora.tpop.pop_id
      FROM
        apflora.tpop
      WHERE
        apflora.tpop.apber_relevant = 1
      GROUP BY
        apflora.tpop.pop_id
    )
    AND apflora.pop.id IN (
      SELECT DISTINCT
        apflora.tpop.pop_id
      FROM
        apflora.tpop
      WHERE
        apflora.tpop.id IN (
          SELECT DISTINCT
          apflora.tpopmassn.tpop_id
          FROM
            apflora.tpopmassn
          WHERE
            apflora.tpopmassn.typ in (1, 2, 3)
            AND apflora.tpopmassn.jahr < $2
        )
        AND apflora.tpop.id IN (
          SELECT DISTINCT
            apflora.tpopkontr.tpop_id
          FROM
            apflora.tpopkontr
          WHERE
            apflora.tpopkontr.typ NOT IN ('Zwischenziel', 'Ziel')
            AND apflora.tpopkontr.jahr = $2
        )
    )
    AND apflora.pop.id NOT IN (
      SELECT DISTINCT
        apflora.popber.pop_id
      FROM
        apflora.popber
      WHERE
        apflora.popber.jahr = $2
    )
    AND apflora.pop.ap_id = $1
  $_$;




CREATE FUNCTION apflora.qk_pop_ohne_popmassnber(apid uuid, berichtjahr integer) RETURNS SETOF apflora.qk_pop_ohne_popmassnber
    LANGUAGE sql STABLE
    AS $_$
  SELECT DISTINCT
    apflora.ap.proj_id,
    apflora.pop.ap_id,
    'Population mit angesiedelten Teilpopulationen (vor dem Berichtjahr), die (im Berichtjahr) kontrolliert wurden, aber ohne Massnahmen-Bericht (im Berichtjahr):' AS hw,
    ARRAY['Projekte', '4635372c-431c-11e8-bb30-e77f6cdd35a6' , 'Aktionspläne', apflora.ap.id, 'Populationen', apflora.pop.id]::text[] AS "url",
    ARRAY[concat('Population (Nr.): ', apflora.pop.nr)]::text[] AS text
  FROM
    apflora.ap
    INNER JOIN
      apflora.pop
      ON apflora.pop.ap_id = apflora.ap.id
  WHERE
    apflora.pop.id IN (
      SELECT
        apflora.tpop.pop_id
      FROM
        apflora.tpop
      WHERE
        apflora.tpop.apber_relevant = 1
      GROUP BY
        apflora.tpop.pop_id
    )
    AND apflora.pop.id IN (
      SELECT DISTINCT
        apflora.tpop.pop_id
      FROM
        apflora.tpop
      WHERE
        apflora.tpop.id IN (
          SELECT DISTINCT
            apflora.tpopmassn.tpop_id
          FROM
            apflora.tpopmassn
          WHERE
            apflora.tpopmassn.typ IN (1, 2, 3)
            AND apflora.tpopmassn.jahr < $2
        )
        AND apflora.tpop.id IN (
          SELECT DISTINCT
            apflora.tpopkontr.tpop_id
          FROM
            apflora.tpopkontr
          WHERE
            apflora.tpopkontr.typ NOT IN ('Zwischenziel', 'Ziel')
            AND apflora.tpopkontr.jahr = $2
        )
    )
    AND apflora.pop.id NOT IN (
      SELECT DISTINCT
        apflora.popmassnber.pop_id
      FROM
        apflora.popmassnber
      WHERE
        apflora.popmassnber.jahr = $2
    )
    AND apflora.pop.ap_id = $1
  $_$;




CREATE FUNCTION apflora.qk_tpop_ohne_massnber(apid uuid, berichtjahr integer) RETURNS SETOF apflora.qk_tpop_ohne_massnber
    LANGUAGE sql STABLE
    AS $_$
  SELECT DISTINCT
    '4635372c-431c-11e8-bb30-e77f6cdd35a6'::uuid AS proj_id,
    apflora.pop.ap_id,
    'Teilpopulation mit Ansiedlung (vor dem Berichtjahr) und Kontrolle (im Berichtjahr) aber ohne Massnahmen-Bericht (im Berichtjahr):' AS hw,
    ARRAY['Projekte', '4635372c-431c-11e8-bb30-e77f6cdd35a6' , 'Aktionspläne', apflora.pop.ap_id, 'Populationen', apflora.pop.id, 'Teil-Populationen', apflora.tpop.id]::text[] AS "url",
    ARRAY[concat('Population (Nr.): ', apflora.pop.nr), concat('Teil-Population (Nr.): ', apflora.tpop.nr)]::text[] AS text
  FROM
    apflora.pop
    INNER JOIN
      apflora.tpop
      ON apflora.pop.id = apflora.tpop.pop_id
  WHERE
    apflora.tpop.apber_relevant = 1
    AND apflora.tpop.id IN (
      SELECT DISTINCT
        apflora.tpopmassn.tpop_id
      FROM
        apflora.tpopmassn
      WHERE
        apflora.tpopmassn.typ IN (1, 2, 3)
        AND apflora.tpopmassn.jahr < $2
    )
    AND apflora.tpop.id IN (
      SELECT DISTINCT
        apflora.tpopkontr.tpop_id
      FROM
        apflora.tpopkontr
      WHERE
        apflora.tpopkontr.typ NOT IN ('Zwischenziel', 'Ziel')
        AND apflora.tpopkontr.jahr = $2
    )
    AND apflora.tpop.id NOT IN (
      SELECT DISTINCT
        apflora.tpopmassnber.tpop_id
      FROM
        apflora.tpopmassnber
      WHERE
        apflora.tpopmassnber.jahr = $2
    )
    AND apflora.pop.ap_id = $1
  $_$;




CREATE FUNCTION apflora.qk_tpop_ohne_tpopber(apid uuid, berichtjahr integer) RETURNS SETOF apflora.qk_tpop_ohne_tpopber
    LANGUAGE sql STABLE
    AS $_$
  SELECT DISTINCT
    apflora.ap.proj_id,
    apflora.pop.ap_id,
    'Teilpopulation mit Kontrolle (im Berichtjahr) aber ohne Teilpopulations-Bericht (im Berichtjahr):' AS hw,
    ARRAY['Projekte', '4635372c-431c-11e8-bb30-e77f6cdd35a6' , 'Aktionspläne', apflora.ap.id, 'Populationen', apflora.pop.id, 'Teil-Populationen', apflora.tpop.id]::text[] AS "url",
    ARRAY[concat('Population (Nr.): ', apflora.pop.nr), concat('Teil-Population (Nr.): ', apflora.tpop.nr)]::text[] AS text
  FROM
    apflora.ap
    INNER JOIN
      apflora.pop
      INNER JOIN
        apflora.tpop
        ON apflora.pop.id = apflora.tpop.pop_id
    ON apflora.pop.ap_id = apflora.ap.id
  WHERE
    apflora.tpop.apber_relevant = 1
    AND apflora.tpop.id IN (
      SELECT DISTINCT
        apflora.tpopkontr.tpop_id
      FROM
        apflora.tpopkontr
      WHERE
        apflora.tpopkontr.typ NOT IN ('Zwischenziel', 'Ziel')
        AND apflora.tpopkontr.jahr = $2
    )
    AND apflora.tpop.id NOT IN (
      SELECT DISTINCT
        apflora.tpopber.tpop_id
      FROM
        apflora.tpopber
      WHERE
        apflora.tpopber.jahr = $2
    )
    AND apflora.pop.ap_id = $1
  $_$;




CREATE FUNCTION apflora.tpop_max_one_massnber_per_year() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    IF
      (
        NEW.jahr > 0
        AND NEW.jahr IN
          (
            SELECT
              jahr
            FROM
              apflora.tpopmassnber
            WHERE
              tpop_id = NEW.tpop_id
              AND id <> NEW.id
          )
      )
    THEN
      RAISE EXCEPTION  'Pro Teilpopulation und Jahr darf maximal ein Massnahmenbericht erfasst werden';
    END IF;
    RETURN NEW;
  END;
$$;




CREATE FUNCTION apflora.tpop_max_one_tpopber_per_year() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    IF
      (
        NEW.jahr > 0
        AND NEW.jahr IN
        (
          SELECT
            jahr
          FROM
            apflora.tpopber
          WHERE
            tpop_id = NEW.tpop_id
            AND id <> NEW.id
        )
      )
    THEN
      RAISE EXCEPTION 'Pro Teilpopulation und Jahr darf maximal ein Teilpopulationsbericht erfasst werden';
    END IF;
    RETURN NEW;
  END;
$$;




CREATE FUNCTION auth.algorithm_sign(signables text, secret text, algorithm text) RETURNS text
    LANGUAGE sql
    AS $$
WITH
  alg AS (
    SELECT CASE
      WHEN algorithm = 'HS256' THEN 'sha256'
      WHEN algorithm = 'HS384' THEN 'sha384'
      WHEN algorithm = 'HS512' THEN 'sha512'
SELECT auth.url_encode(hmac(signables, secret, alg.id)) FROM alg;
$$;




CREATE FUNCTION auth.check_role_exists() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
begin
  if not exists (select 1 from pg_roles as r where r.rolname = new.role) then
    raise foreign_key_violation using message =
      'unknown database role: ' || new.role;
    return null;
  end if;
  return new;
end
$$;




CREATE FUNCTION auth.encrypt_pass() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
begin
  if tg_op = 'INSERT' or new.pass <> old.pass then
    new.pass = crypt(new.pass, gen_salt('bf'));
  end if;
  return new;
end
$$;




CREATE FUNCTION auth.sign(payload json, secret text, algorithm text DEFAULT 'HS256'::text) RETURNS text
    LANGUAGE sql
    AS $$
WITH
  header AS (
    SELECT auth.url_encode(convert_to('{"alg":"' || algorithm || '","typ":"JWT"}', 'utf8')) AS data
    ),
  payload AS (
    SELECT auth.url_encode(convert_to(payload::text, 'utf8')) AS data
    ),
  signables AS (
    SELECT header.data || '.' || payload.data AS data FROM header, payload
    )
SELECT
    signables.data || '.' ||
    auth.algorithm_sign(signables.data, secret, algorithm) FROM signables;
$$;




CREATE FUNCTION auth.url_decode(data text) RETURNS bytea
    LANGUAGE sql
    AS $$
WITH t AS (SELECT translate(data, '-_', '+/') AS trans),
    SELECT decode(
        t.trans ||
        CASE WHEN rem.remainder > 0
           THEN repeat('=', (4 - rem.remainder))
           ELSE '' END,
    'base64') FROM t, rem;
$$;




CREATE FUNCTION auth.url_encode(data bytea) RETURNS text
    LANGUAGE sql
    AS $$
    SELECT translate(encode(data, 'base64'), E'+/=\n', '-_');
$$;




CREATE FUNCTION auth.user_role(username text, pass text) RETURNS name
    LANGUAGE plpgsql
    AS $_$
begin
  return (
  select role from apflora.user
   where apflora.user.name = $1
     and apflora.user.pass = crypt($2, apflora.user.pass)
  );
end;
$_$;




CREATE FUNCTION auth.verify(token text, secret text, algorithm text DEFAULT 'HS256'::text) RETURNS TABLE(header json, payload json, valid boolean)
    LANGUAGE sql
    AS $$
  SELECT
    convert_from(auth.url_decode(r[1]), 'utf8')::json AS header,
    convert_from(auth.url_decode(r[2]), 'utf8')::json AS payload,
    r[3] = auth.algorithm_sign(r[1] || '.' || r[2], secret, algorithm) AS valid
  FROM regexp_split_to_array(token, '\.') r;
$$;



CREATE FUNCTION public.adresse_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.ap_bearbstand_werte_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.ap_erfbeurtkrit_werte_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.ap_erfkrit_werte_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.ap_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.ap_umsetzung_werte_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.apber_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.apberuebersicht_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.assozart_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.beob_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.beob_zuordnung_set_quelleid_on_insert() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    IF
      length(NEW."NO_NOTE") > 10
    THEN
      NEW."QuelleId" = '1';
    ELSE
      NEW."QuelleId" = '2';
    END IF;
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.beobzuordnung_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.ber_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.current_user_name() RETURNS text
    LANGUAGE sql STABLE SECURITY DEFINER
    AS $$
  select nullif(current_setting('jwt.claims.username', true), '')::text;
$$;




CREATE FUNCTION public.dsql2(i_text text) RETURNS integer
    LANGUAGE plpgsql
    AS $$
Declare
  v_val int;
BEGIN
  execute i_text into v_val;
  return v_val;
END;
$$;




COMMENT ON FUNCTION public.dsql2(i_text text) IS 'get number of rows per table';



CREATE FUNCTION public.erfkrit_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.idealbiotop_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.pop_entwicklung_werte_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW."MutWer" = current_setting('request.jwt.claim.username', true);
    NEW."MutWann" = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.pop_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.pop_status_werte_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.popber_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.popmassnber_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.projekt_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.tabelle_delete_notify() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
BEGIN
  PERFORM pg_notify('tabelle_update', json_build_object('table', TG_TABLE_NAME, 'type', TG_OP, 'row', row_to_json(OLD))::text);
  RETURN OLD;
END;
$$;




CREATE FUNCTION public.tabelle_insert_notify() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
BEGIN
  PERFORM pg_notify('tabelle_update', json_build_object('table', TG_TABLE_NAME, 'type', TG_OP, 'row', row_to_json(NEW))::text);
  RETURN NEW;
END;
$$;




CREATE FUNCTION public.tabelle_update_notify() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
BEGIN
  PERFORM pg_notify('tabelle_update', json_build_object('table', TG_TABLE_NAME, 'type', TG_OP, 'row', row_to_json(NEW))::text);
  RETURN NEW;
END;
$$;




CREATE FUNCTION public.tpop_apberrelevant_werte_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.tpop_entwicklung_werte_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.tpop_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.tpopber_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.tpopkontr_idbiotuebereinst_werte_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.tpopkontr_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.tpopkontr_typ_werte_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.tpopkontrzaehl_einheit_werte_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.tpopkontrzaehl_methode_werte_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.tpopkontrzaehl_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.tpopmassn_erfbeurt_werte_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.tpopmassn_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.tpopmassn_typ_werte_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.tpopmassnber_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.ziel_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.ziel_typ_werte_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION public.zielber_on_update_set_mut() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
  BEGIN
    NEW.changed_by = current_setting('request.jwt.claim.username', true);
    NEW.changed = NOW();
    RETURN NEW;
  END;
$$;




CREATE FUNCTION request.cookie(c text) RETURNS text
    LANGUAGE sql STABLE
    AS $$
    select request.env_var('request.cookie.' || c);
$$;




CREATE FUNCTION request.env_var(v text) RETURNS text
    LANGUAGE sql STABLE
    AS $$
    select current_setting(v, true);
$$;




CREATE FUNCTION request.header(h text) RETURNS text
    LANGUAGE sql STABLE
    AS $$
    select request.env_var('request.header.' || h);
$$;




CREATE FUNCTION request.jwt_claim(c text) RETURNS text
    LANGUAGE sql STABLE
    AS $$
    select request.env_var('request.jwt.claim.' || c);
$$;




CREATE FUNCTION request.user_name() RETURNS text
    LANGUAGE sql STABLE
    AS $$
    select case request.jwt_claim('username')
    when '' then ''
    else request.jwt_claim('username')::text
 end
$$;




CREATE FUNCTION request.user_role() RETURNS text
    LANGUAGE sql STABLE
    AS $$
    select request.jwt_claim('role')::text;
$$;



SET default_tablespace = '';

SET default_with_oids = false;


CREATE TABLE apflora._variable (
    "KonstId" integer NOT NULL,
    apber_jahr smallint,
    "ApArtId" integer
);




COMMENT ON COLUMN apflora._variable.apber_jahr IS 'Von Access aus ein Berichtsjahr wählen, um die Erstellung des Jahresberichts zu beschleunigen';



COMMENT ON COLUMN apflora._variable."ApArtId" IS 'Von Access aus eine Art wählen, um views zu beschleunigen';



CREATE SEQUENCE apflora."_variable_KonstId_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora."_variable_KonstId_seq" OWNED BY apflora._variable."KonstId";



CREATE TABLE apflora.adresse (
    id_old integer,
    name text,
    adresse text,
    telefon text,
    email text,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    evab_id_person uuid,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    freiw_erfko boolean DEFAULT false,
    evab_nachname character varying(50) DEFAULT NULL::character varying,
    evab_vorname character varying(50) DEFAULT NULL::character varying,
    evab_ort character varying(50) DEFAULT NULL::character varying
);




COMMENT ON COLUMN apflora.adresse.id_old IS 'Frühere id';



COMMENT ON COLUMN apflora.adresse.name IS 'Vor- und Nachname';



COMMENT ON COLUMN apflora.adresse.adresse IS 'Strasse, PLZ und Ort';



COMMENT ON COLUMN apflora.adresse.telefon IS 'Telefonnummer';



COMMENT ON COLUMN apflora.adresse.email IS 'Email';



COMMENT ON COLUMN apflora.adresse.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.adresse.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.adresse.evab_id_person IS 'Personen werden in EvAB separat und mit eigener ID erfasst. Daher muss die passende Person hier gewählt werden';



COMMENT ON COLUMN apflora.adresse.id IS 'Primärschlüssel';



COMMENT ON COLUMN apflora.adresse.freiw_erfko IS 'Ist die Person freiwillige(r) Kontrolleur(in)';



CREATE SEQUENCE apflora."adresse_AdrId_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora."adresse_AdrId_seq" OWNED BY apflora.adresse.id_old;



CREATE TABLE apflora.ae_eigenschaften (
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    taxid integer,
    familie character varying(100) DEFAULT NULL::character varying,
    artname character varying(100) DEFAULT NULL::character varying,
    namedeutsch character varying(100) DEFAULT NULL::character varying,
    status character varying(47) DEFAULT NULL::character varying,
    artwert smallint,
    kefkontrolljahr smallint,
    fnsjahresartjahr smallint,
    kefart boolean DEFAULT false
);




COMMENT ON COLUMN apflora.ae_eigenschaften.id IS 'Primärschlüssel';



CREATE TABLE apflora.ae_lrdelarze (
    sort integer NOT NULL,
    label character varying(50) DEFAULT NULL::character varying,
    einheit character varying(255) DEFAULT NULL::character varying,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL
);




COMMENT ON COLUMN apflora.ae_lrdelarze.sort IS 'Primärschlüssel der Tabelle ArtenDb_LR';



COMMENT ON COLUMN apflora.ae_lrdelarze.id IS 'Primärschlüssel';



CREATE TABLE apflora.ap (
    id_old integer,
    bearbeitung integer,
    start_jahr smallint,
    umsetzung integer,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    art_id uuid,
    bearbeiter uuid,
    proj_id uuid
);




COMMENT ON COLUMN apflora.ap.id_old IS 'Frühere id. = SISF2-Nr';



COMMENT ON COLUMN apflora.ap.bearbeitung IS 'In welchem Bearbeitungsstand befindet sich der AP?';



COMMENT ON COLUMN apflora.ap.start_jahr IS 'Wann wurde mit der Umsetzung des Aktionsplans begonnen?';



COMMENT ON COLUMN apflora.ap.umsetzung IS 'In welchem Umsetzungsstand befindet sich der AP?';



COMMENT ON COLUMN apflora.ap.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.ap.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.ap.id IS 'Primärschlüssel';



COMMENT ON COLUMN apflora.ap.art_id IS 'Namensgebende Art. Unter ihrem Namen bzw. Nummer werden Kontrollen an InfoFlora geliefert';



COMMENT ON COLUMN apflora.ap.bearbeiter IS 'Zugehöriger Bearbeiter. Fremdschlüssel aus der Tabelle "adresse"';



COMMENT ON COLUMN apflora.ap.proj_id IS 'Zugehöriger Aktionsplan. Fremdschlüssel aus der Tabelle "projekt"';



CREATE SEQUENCE apflora."ap_ApArtId_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora."ap_ApArtId_seq" OWNED BY apflora.ap.id_old;



CREATE TABLE apflora.ap_bearbstand_werte (
    code integer,
    text character varying(50) DEFAULT NULL::character varying,
    sort smallint,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true) NOT NULL,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL
);




COMMENT ON COLUMN apflora.ap_bearbstand_werte.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.ap_bearbstand_werte.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.ap_bearbstand_werte.id IS 'Primärschlüssel';



CREATE TABLE apflora.ap_erfbeurtkrit_werte (
    code integer,
    text character varying(50) DEFAULT NULL::character varying,
    sort smallint,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true) NOT NULL,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL
);




COMMENT ON COLUMN apflora.ap_erfbeurtkrit_werte.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.ap_erfbeurtkrit_werte.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.ap_erfbeurtkrit_werte.id IS 'Primärschlüssel';



CREATE TABLE apflora.ap_erfkrit_werte (
    code integer,
    text character varying(50) DEFAULT NULL::character varying,
    sort smallint,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true) NOT NULL,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL
);




COMMENT ON COLUMN apflora.ap_erfkrit_werte.text IS 'Wie werden die durchgefuehrten Massnahmen beurteilt?';



COMMENT ON COLUMN apflora.ap_erfkrit_werte.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.ap_erfkrit_werte.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.ap_erfkrit_werte.id IS 'Primärschlüssel';



CREATE TABLE apflora.ap_umsetzung_werte (
    code integer,
    text character varying(50) DEFAULT NULL::character varying,
    sort smallint,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true) NOT NULL,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL
);




COMMENT ON COLUMN apflora.ap_umsetzung_werte.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.ap_umsetzung_werte.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.ap_umsetzung_werte.id IS 'Primärschlüssel';



CREATE TABLE apflora.apart (
    id_old integer,
    changed date,
    changed_by character varying(20) DEFAULT NULL::character varying,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    ap_id uuid,
    art_id uuid
);




COMMENT ON COLUMN apflora.apart.id_old IS 'frühere id';



COMMENT ON COLUMN apflora.apart.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.apart.changed_by IS 'Wer hat den Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.apart.id IS 'Primärschlüssel';



COMMENT ON COLUMN apflora.apart.ap_id IS 'Zugehöriger Aktionsplan. Fremdschlüssel aus der Tabelle "ap"';



CREATE TABLE apflora.apber (
    id_old integer,
    jahr smallint,
    situation text,
    vergleich_vorjahr_gesamtziel text,
    beurteilung integer,
    veraenderung_zum_vorjahr character varying(2) DEFAULT NULL::character varying,
    apber_analyse text,
    konsequenzen_umsetzung text,
    konsequenzen_erfolgskontrolle text,
    biotope_neue text,
    biotope_optimieren text,
    massnahmen_optimieren text,
    wirkung_auf_art text,
    datum date,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    massnahmen_ap_bearb text,
    massnahmen_planung_vs_ausfuehrung text,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    ap_id uuid,
    bearbeiter uuid
);




COMMENT ON COLUMN apflora.apber.id_old IS 'frühere id';



COMMENT ON COLUMN apflora.apber.jahr IS 'Für welches Jahr gilt der Bericht?';



COMMENT ON COLUMN apflora.apber.situation IS 'Beschreibung der Situation im Berichtjahr. Seit 2017 nicht mehr verwendet: Früher wurden hier die Massnahmen aufgelistet';



COMMENT ON COLUMN apflora.apber.vergleich_vorjahr_gesamtziel IS 'Vergleich zu Vorjahr und Ausblick auf das Gesamtziel';



COMMENT ON COLUMN apflora.apber.beurteilung IS 'Beurteilung des Erfolgs des Aktionsplans bisher';



COMMENT ON COLUMN apflora.apber.veraenderung_zum_vorjahr IS 'Veränderung gegenüber dem Vorjahr: plus heisst aufgestiegen, minus heisst abgestiegen';



COMMENT ON COLUMN apflora.apber.apber_analyse IS 'Was sind die Ursachen fuer die beobachtete Entwicklung?';



COMMENT ON COLUMN apflora.apber.konsequenzen_umsetzung IS 'Konsequenzen für die Umsetzung';



COMMENT ON COLUMN apflora.apber.konsequenzen_erfolgskontrolle IS 'Konsequenzen für die Erfolgskontrolle';



COMMENT ON COLUMN apflora.apber.biotope_neue IS 'Bemerkungen zum Aussagebereich A: Grundmengen und getroffene Massnahmen';



COMMENT ON COLUMN apflora.apber.biotope_optimieren IS 'Bemerkungen zum Aussagebereich B: Bestandeskontrolle';



COMMENT ON COLUMN apflora.apber.massnahmen_optimieren IS 'Bemerkungen zum Aussagebereich C: Zwischenbilanz zur Wirkung von Massnahmen';



COMMENT ON COLUMN apflora.apber.wirkung_auf_art IS 'Bemerkungen zum Aussagebereich D: Einschätzung der Wirkung des AP insgesamt pro Art';



COMMENT ON COLUMN apflora.apber.datum IS 'Datum der Nachführung';



COMMENT ON COLUMN apflora.apber.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.apber.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.apber.massnahmen_ap_bearb IS 'Bemerkungen zum Aussagebereich C: Weitere Aktivitäten der Aktionsplan-Verantwortlichen';



COMMENT ON COLUMN apflora.apber.massnahmen_planung_vs_ausfuehrung IS 'Bemerkungen zum Aussagebereich C: Vergleich Ausführung/Planung';



COMMENT ON COLUMN apflora.apber.id IS 'Primärschlüssel';



COMMENT ON COLUMN apflora.apber.ap_id IS 'Zugehöriger Aktionsplan. Fremdschlüssel aus der Tabelle "ap"';



COMMENT ON COLUMN apflora.apber.bearbeiter IS 'Zugehöriger Bearbeiter. Fremdschlüssel aus der Tabelle "adresse"';



CREATE SEQUENCE apflora."apber_JBerId_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora."apber_JBerId_seq" OWNED BY apflora.apber.id_old;



CREATE TABLE apflora.apberuebersicht (
    jahr smallint,
    bemerkungen text,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    id_old integer,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    proj_id uuid
);




COMMENT ON COLUMN apflora.apberuebersicht.jahr IS 'Berichtsjahr. Zusammen mit proj_id eindeutig';



COMMENT ON COLUMN apflora.apberuebersicht.bemerkungen IS 'Bemerkungen zur Artübersicht';



COMMENT ON COLUMN apflora.apberuebersicht.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.apberuebersicht.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.apberuebersicht.id_old IS 'frühere id';



COMMENT ON COLUMN apflora.apberuebersicht.id IS 'Primärschlüssel';



COMMENT ON COLUMN apflora.apberuebersicht.proj_id IS 'Zugehöriger Aktionsplan. Fremdschlüssel aus der Tabelle "projekt"';



CREATE SEQUENCE apflora.apberuebersicht_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora.apberuebersicht_id_seq OWNED BY apflora.apberuebersicht.id_old;



CREATE TABLE apflora.assozart (
    id_old integer,
    bemerkungen text,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    ae_id uuid,
    ap_id uuid
);




COMMENT ON COLUMN apflora.assozart.id_old IS 'frühere id';



COMMENT ON COLUMN apflora.assozart.bemerkungen IS 'Bemerkungen zur Assoziation';



COMMENT ON COLUMN apflora.assozart.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.assozart.changed_by IS 'Wer hat den Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.assozart.id IS 'Primärschlüssel';



COMMENT ON COLUMN apflora.assozart.ap_id IS 'Zugehöriger Aktionsplan. Fremdschlüssel aus der Tabelle "ap"';



CREATE SEQUENCE apflora."assozart_AaId_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora."assozart_AaId_seq" OWNED BY apflora.assozart.id_old;



CREATE TABLE apflora.beob (
    id_old integer,
    id_field character varying(38) DEFAULT NULL::character varying,
    art_id_old integer,
    datum date,
    autor character varying(100) DEFAULT NULL::character varying,
    x integer,
    y integer,
    data jsonb,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    art_id uuid,
    tpop_id uuid,
    nicht_zuordnen boolean DEFAULT false,
    bemerkungen text,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    quelle_id uuid
);




COMMENT ON COLUMN apflora.beob.id_old IS 'Frühere id';



COMMENT ON COLUMN apflora.beob.art_id_old IS 'Frühere Art id (=SISF2-Nr)';



COMMENT ON COLUMN apflora.beob.id IS 'Primärschlüssel';



COMMENT ON COLUMN apflora.beob.tpop_id IS 'Dieser Teilpopulation wurde die Beobachtung zugeordnet. Fremdschlüssel aus der Tabelle "tpop"';



COMMENT ON COLUMN apflora.beob.nicht_zuordnen IS 'Wird ja gesetzt, wenn eine Beobachtung keiner Teilpopulation zugeordnet werden kann. Sollte im Bemerkungsfeld begründet werden. In der Regel ist die Artbestimmung zweifelhaft. Oder die Beobachtung ist nicht (genau genug) lokalisierbar';



COMMENT ON COLUMN apflora.beob.bemerkungen IS 'Bemerkungen zur Zuordnung';



COMMENT ON COLUMN apflora.beob.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.beob.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.beob.quelle_id IS 'Zugehörige Beobachtungs-Quelle. Fremdschlüssel aus der Tabelle "beob_quelle_werte"';



CREATE SEQUENCE apflora.beob_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora.beob_id_seq OWNED BY apflora.beob.id_old;



CREATE TABLE apflora.beob_quelle_werte (
    id_old integer,
    name character varying(255) DEFAULT NULL::character varying,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL
);




CREATE SEQUENCE apflora."beobart_BeobArtId_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora."beobart_BeobArtId_seq" OWNED BY apflora.apart.id_old;



CREATE TABLE apflora.ber (
    id_old integer,
    autor character varying(150) DEFAULT NULL::character varying,
    jahr smallint,
    titel text,
    url text,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    ap_id uuid
);




COMMENT ON COLUMN apflora.ber.id_old IS 'Primärschlüssel der Tabelle "ber"';



COMMENT ON COLUMN apflora.ber.autor IS 'Autor des Berichts';



COMMENT ON COLUMN apflora.ber.jahr IS 'Jahr der Publikation';



COMMENT ON COLUMN apflora.ber.titel IS 'Titel des Berichts';



COMMENT ON COLUMN apflora.ber.url IS 'Link zum Bericht';



COMMENT ON COLUMN apflora.ber.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.ber.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.ber.id IS 'Primärschlüssel';



COMMENT ON COLUMN apflora.ber.ap_id IS 'Zugehöriger Aktionsplan. Fremdschlüssel aus der Tabelle "ap"';



CREATE SEQUENCE apflora."ber_BerId_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora."ber_BerId_seq" OWNED BY apflora.ber.id_old;



CREATE TABLE apflora.erfkrit (
    id_old integer,
    erfolg integer,
    kriterien text,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    ap_id uuid
);




COMMENT ON COLUMN apflora.erfkrit.id_old IS 'frühere id';



COMMENT ON COLUMN apflora.erfkrit.erfolg IS 'Wie gut werden die Ziele erreicht? Auswahl aus der Tabelle "ap_erfkrit_werte"';



COMMENT ON COLUMN apflora.erfkrit.kriterien IS 'Beschreibung der Kriterien für den Erfolg';



COMMENT ON COLUMN apflora.erfkrit.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.erfkrit.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.erfkrit.id IS 'Primärschlüssel';



COMMENT ON COLUMN apflora.erfkrit.ap_id IS 'Zugehöriger Aktionsplan. Fremdschlüssel aus der Tabelle "ap"';



CREATE SEQUENCE apflora."erfkrit_ErfkritId_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora."erfkrit_ErfkritId_seq" OWNED BY apflora.erfkrit.id_old;



CREATE TABLE apflora.evab_typologie (
    "TYPO" character varying(9) NOT NULL,
    "LEBENSRAUM" character varying(100),
    "Alliance" character varying(100)
);




CREATE TABLE apflora.gemeinde (
    name character varying(50) DEFAULT NULL::character varying,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL
);




CREATE TABLE apflora.idealbiotop (
    erstelldatum date,
    hoehenlage text,
    region text,
    exposition text,
    besonnung text,
    hangneigung text,
    boden_typ text,
    boden_kalkgehalt text,
    boden_durchlaessigkeit text,
    boden_humus text,
    boden_naehrstoffgehalt text,
    wasserhaushalt text,
    konkurrenz text,
    moosschicht text,
    krautschicht text,
    strauchschicht text,
    baumschicht text,
    bemerkungen text,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    ap_id uuid
);




COMMENT ON COLUMN apflora.idealbiotop.erstelldatum IS 'Erstelldatum';



COMMENT ON COLUMN apflora.idealbiotop.hoehenlage IS 'Höhenlage';



COMMENT ON COLUMN apflora.idealbiotop.region IS 'Region';



COMMENT ON COLUMN apflora.idealbiotop.exposition IS 'Exposition';



COMMENT ON COLUMN apflora.idealbiotop.besonnung IS 'Besonnung';



COMMENT ON COLUMN apflora.idealbiotop.hangneigung IS 'Hangneigung';



COMMENT ON COLUMN apflora.idealbiotop.boden_typ IS 'Bodentyp';



COMMENT ON COLUMN apflora.idealbiotop.boden_kalkgehalt IS 'Kalkgehalt im Boden';



COMMENT ON COLUMN apflora.idealbiotop.boden_durchlaessigkeit IS 'Bodendurchlässigkeit';



COMMENT ON COLUMN apflora.idealbiotop.boden_humus IS 'Bodenhumusgehalt';



COMMENT ON COLUMN apflora.idealbiotop.boden_naehrstoffgehalt IS 'Bodennährstoffgehalt';



COMMENT ON COLUMN apflora.idealbiotop.wasserhaushalt IS 'Wasserhaushalt';



COMMENT ON COLUMN apflora.idealbiotop.konkurrenz IS 'Konkurrenz';



COMMENT ON COLUMN apflora.idealbiotop.moosschicht IS 'Moosschicht';



COMMENT ON COLUMN apflora.idealbiotop.krautschicht IS 'Krautschicht';



COMMENT ON COLUMN apflora.idealbiotop.strauchschicht IS 'Strauchschicht';



COMMENT ON COLUMN apflora.idealbiotop.baumschicht IS 'Baumschicht';



COMMENT ON COLUMN apflora.idealbiotop.bemerkungen IS 'Bemerkungen';



COMMENT ON COLUMN apflora.idealbiotop.changed IS 'Wann wurde der Datensatz zuletzt verändert?';



COMMENT ON COLUMN apflora.idealbiotop.changed_by IS 'Wer hat den Datensatz zuletzt verändert?';



COMMENT ON COLUMN apflora.idealbiotop.id IS 'Primärschlüssel';



COMMENT ON COLUMN apflora.idealbiotop.ap_id IS 'Zugehöriger Aktionsplan. Fremdschlüssel aus der Tabelle "ap"';



CREATE TABLE apflora.message (
    id_old integer,
    message text NOT NULL,
    "time" timestamp without time zone DEFAULT now() NOT NULL,
    active boolean DEFAULT true NOT NULL,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL
);




COMMENT ON COLUMN apflora.message.message IS 'Nachricht an die Benutzer';



CREATE SEQUENCE apflora.message_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora.message_id_seq OWNED BY apflora.message.id_old;



CREATE TABLE apflora.pop (
    id_old integer,
    nr integer,
    name character varying(150) DEFAULT NULL::character varying,
    status integer,
    status_unklar_begruendung text,
    bekannt_seit smallint,
    x integer,
    y integer,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    ap_id uuid,
    status_unklar boolean DEFAULT false,
    CONSTRAINT zulaessige_x_koordinate CHECK (((x IS NULL) OR ((x > 2485071) AND (x < 2828516)))),
    CONSTRAINT zulaessige_y_koordinate CHECK (((y IS NULL) OR ((y > 1075346) AND (y < 1299942))))
);




COMMENT ON COLUMN apflora.pop.id_old IS 'frühere id';



COMMENT ON COLUMN apflora.pop.nr IS 'Nummer der Population';



COMMENT ON COLUMN apflora.pop.name IS 'Bezeichnung der Population';



COMMENT ON COLUMN apflora.pop.status IS 'Herkunft der Population: autochthon oder angesiedelt? Auswahl aus der Tabelle "pop_status_werte"';



COMMENT ON COLUMN apflora.pop.status_unklar_begruendung IS 'Begründung, wieso die Herkunft unklar ist';



COMMENT ON COLUMN apflora.pop.bekannt_seit IS 'Seit wann ist die Population bekannt?';



COMMENT ON COLUMN apflora.pop.x IS 'Wird in der Regel von einer Teilpopulation übernommen';



COMMENT ON COLUMN apflora.pop.y IS 'Wird in der Regel von einer Teilpopulation übernommen';



COMMENT ON COLUMN apflora.pop.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.pop.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.pop.id IS 'Primärschlüssel der Tabelle "pop"';



COMMENT ON COLUMN apflora.pop.ap_id IS 'Zugehöriger Aktionsplan. Fremdschlüssel aus der Tabelle "ap"';



COMMENT ON COLUMN apflora.pop.status_unklar IS 'true = die Herkunft der Population ist unklar';



CREATE SEQUENCE apflora."pop_PopId_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora."pop_PopId_seq" OWNED BY apflora.pop.id_old;



CREATE TABLE apflora.pop_status_werte (
    code integer,
    text character varying(60) DEFAULT NULL::character varying,
    sort smallint,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL
);




COMMENT ON COLUMN apflora.pop_status_werte.text IS 'Beschreibung der Herkunft';



COMMENT ON COLUMN apflora.pop_status_werte.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.pop_status_werte.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.pop_status_werte.id IS 'Primärschlüssel';



CREATE TABLE apflora.popber (
    id_old integer,
    jahr smallint,
    entwicklung integer,
    bemerkungen text,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    pop_id uuid
);




COMMENT ON COLUMN apflora.popber.id_old IS 'frühere id';



COMMENT ON COLUMN apflora.popber.jahr IS 'Für welches Jahr gilt der Bericht?';



COMMENT ON COLUMN apflora.popber.entwicklung IS 'Beurteilung der Populationsentwicklung: Auswahl aus Tabelle "tpop_entwicklung_werte"';



COMMENT ON COLUMN apflora.popber.bemerkungen IS 'Bemerkungen zur Beurteilung';



COMMENT ON COLUMN apflora.popber.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.popber.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.popber.id IS 'Primärschlüssel';



COMMENT ON COLUMN apflora.popber.pop_id IS 'Zugehörige Population. Fremdschlüssel aus der Tabelle "pop"';



CREATE SEQUENCE apflora."popber_PopBerId_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora."popber_PopBerId_seq" OWNED BY apflora.popber.id_old;



CREATE TABLE apflora.popmassnber (
    id_old integer,
    jahr smallint,
    beurteilung integer,
    bemerkungen text,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    pop_id uuid
);




COMMENT ON COLUMN apflora.popmassnber.id_old IS 'frühere id';



COMMENT ON COLUMN apflora.popmassnber.jahr IS 'Für welches Jahr gilt der Bericht?';



COMMENT ON COLUMN apflora.popmassnber.beurteilung IS 'Wie wird die Wirkung aller im Rahmen des AP durchgeführten Massnahmen beurteilt?';



COMMENT ON COLUMN apflora.popmassnber.bemerkungen IS 'Bemerkungen zur Beurteilung';



COMMENT ON COLUMN apflora.popmassnber.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.popmassnber.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.popmassnber.id IS 'Primärschlüssel';



COMMENT ON COLUMN apflora.popmassnber.pop_id IS 'Zugehörige Population. Fremdschlüssel aus der Tabelle "pop"';



CREATE SEQUENCE apflora."popmassnber_PopMassnBerId_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora."popmassnber_PopMassnBerId_seq" OWNED BY apflora.popmassnber.id_old;



CREATE TABLE apflora.projekt (
    id_old integer,
    name character varying(150) DEFAULT NULL::character varying,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL
);




COMMENT ON COLUMN apflora.projekt.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.projekt.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



CREATE SEQUENCE apflora."projekt_ProjId_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora."projekt_ProjId_seq" OWNED BY apflora.projekt.id_old;



CREATE TABLE apflora.tpop (
    id_old integer,
    nr integer,
    gemeinde text,
    flurname text,
    x integer,
    y integer,
    radius smallint,
    hoehe smallint,
    exposition character varying(50) DEFAULT NULL::character varying,
    klima character varying(50) DEFAULT NULL::character varying,
    neigung character varying(50) DEFAULT NULL::character varying,
    beschreibung text,
    kataster_nr text,
    status integer,
    status_unklar_grund text,
    apber_relevant integer,
    bekannt_seit smallint,
    eigentuemer text,
    kontakt text,
    nutzungszone text,
    bewirtschafter text,
    bewirtschaftung text,
    bemerkungen text,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    pop_id uuid,
    status_unklar boolean DEFAULT false,
    CONSTRAINT zulaessige_x_koordinate CHECK (((x IS NULL) OR ((x > 2485071) AND (x < 2828516)))),
    CONSTRAINT zulaessige_y_koordinate CHECK (((y IS NULL) OR ((y > 1075346) AND (y < 1299942))))
);




COMMENT ON COLUMN apflora.tpop.id_old IS 'frühere id';



COMMENT ON COLUMN apflora.tpop.nr IS 'Nummer der Teilpopulation';



COMMENT ON COLUMN apflora.tpop.gemeinde IS 'Gemeinde';



COMMENT ON COLUMN apflora.tpop.flurname IS 'Flurname';



COMMENT ON COLUMN apflora.tpop.x IS 'X-Koordinate';



COMMENT ON COLUMN apflora.tpop.y IS 'Y-Koordinate';



COMMENT ON COLUMN apflora.tpop.radius IS 'Radius der Teilpopulation (m)';



COMMENT ON COLUMN apflora.tpop.hoehe IS 'Höhe über Meer (m)';



COMMENT ON COLUMN apflora.tpop.exposition IS 'Exposition / Besonnung des Standorts';



COMMENT ON COLUMN apflora.tpop.klima IS 'Klima des Standorts';



COMMENT ON COLUMN apflora.tpop.neigung IS 'Hangneigung des Standorts';



COMMENT ON COLUMN apflora.tpop.beschreibung IS 'Beschreibung der Fläche';



COMMENT ON COLUMN apflora.tpop.kataster_nr IS 'Kataster-Nummer';



COMMENT ON COLUMN apflora.tpop.status IS 'Herkunft der Teilpopulation. Auswahl aus Tabelle "pop_status_werte"';



COMMENT ON COLUMN apflora.tpop.status_unklar_grund IS 'Wieso ist der Status unklar?';



COMMENT ON COLUMN apflora.tpop.apber_relevant IS 'Ist die Teilpopulation für den AP-Bericht relevant? Auswahl aus der Tabelle "tpop_apberrelevant_werte"';



COMMENT ON COLUMN apflora.tpop.bekannt_seit IS 'Seit wann ist die Teilpopulation bekannt?';



COMMENT ON COLUMN apflora.tpop.eigentuemer IS 'EigentümerIn';



COMMENT ON COLUMN apflora.tpop.kontakt IS 'Kontaktperson vor Ort';



COMMENT ON COLUMN apflora.tpop.nutzungszone IS 'Nutzungszone';



COMMENT ON COLUMN apflora.tpop.bewirtschafter IS 'Wer bewirtschaftet die Fläche?';



COMMENT ON COLUMN apflora.tpop.bewirtschaftung IS 'Wie wird die Fläche bewirtschaftet?';



COMMENT ON COLUMN apflora.tpop.bemerkungen IS 'Bemerkungen zur Teilpopulation';



COMMENT ON COLUMN apflora.tpop.changed IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpop.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpop.id IS 'Primärschlüssel';



COMMENT ON COLUMN apflora.tpop.pop_id IS 'Zugehörige Population. Fremdschlüssel aus der Tabelle "pop"';



COMMENT ON COLUMN apflora.tpop.status_unklar IS 'Ist der Status der Teilpopulation unklar? (es bestehen keine glaubwuerdigen Beboachtungen)';



CREATE SEQUENCE apflora."tpop_TPopId_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora."tpop_TPopId_seq" OWNED BY apflora.tpop.id_old;



CREATE TABLE apflora.tpop_apberrelevant_werte (
    code integer,
    text text,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true) NOT NULL,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL
);




COMMENT ON COLUMN apflora.tpop_apberrelevant_werte.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpop_apberrelevant_werte.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpop_apberrelevant_werte.id IS 'Primärschlüssel';



CREATE TABLE apflora.tpop_entwicklung_werte (
    code integer,
    text character varying(50) DEFAULT NULL::character varying,
    sort smallint,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true) NOT NULL,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL
);




COMMENT ON COLUMN apflora.tpop_entwicklung_werte.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpop_entwicklung_werte.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpop_entwicklung_werte.id IS 'Primärschlüssel';



CREATE TABLE apflora.tpopber (
    id_old integer,
    jahr smallint,
    entwicklung integer,
    bemerkungen text,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    tpop_id uuid
);




COMMENT ON COLUMN apflora.tpopber.id_old IS 'frühere id';



COMMENT ON COLUMN apflora.tpopber.jahr IS 'Für welches Jahr gilt der Bericht?';



COMMENT ON COLUMN apflora.tpopber.entwicklung IS 'Beurteilung der Populationsentwicklung: Auswahl aus Tabelle "tpop_entwicklung_werte"';



COMMENT ON COLUMN apflora.tpopber.bemerkungen IS 'Bemerkungen zur Beurteilung';



COMMENT ON COLUMN apflora.tpopber.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopber.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopber.tpop_id IS 'Zugehörige Teilpopulation. Fremdschlüssel der Tabelle "tpop"';



CREATE SEQUENCE apflora."tpopber_TPopBerId_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora."tpopber_TPopBerId_seq" OWNED BY apflora.tpopber.id_old;



CREATE TABLE apflora.tpopkontr (
    id_old integer,
    typ character varying(50) DEFAULT NULL::character varying,
    datum date,
    jahr smallint,
    jungpflanzen_anzahl integer,
    vitalitaet text,
    ueberlebensrate smallint,
    entwicklung integer,
    ursachen text,
    erfolgsbeurteilung text,
    umsetzung_aendern text,
    kontrolle_aendern text,
    bemerkungen text,
    lr_delarze text,
    flaeche integer,
    lr_umgebung_delarze text,
    vegetationstyp character varying(100) DEFAULT NULL::character varying,
    konkurrenz character varying(100) DEFAULT NULL::character varying,
    moosschicht character varying(100) DEFAULT NULL::character varying,
    krautschicht character varying(100) DEFAULT NULL::character varying,
    strauchschicht text,
    baumschicht character varying(100) DEFAULT NULL::character varying,
    boden_typ text,
    boden_kalkgehalt character varying(100) DEFAULT NULL::character varying,
    boden_durchlaessigkeit character varying(100) DEFAULT NULL::character varying,
    boden_humus character varying(100) DEFAULT NULL::character varying,
    boden_naehrstoffgehalt character varying(100) DEFAULT NULL::character varying,
    boden_abtrag text,
    wasserhaushalt text,
    idealbiotop_uebereinstimmung integer,
    handlungsbedarf text,
    flaeche_ueberprueft integer,
    deckung_vegetation smallint,
    deckung_nackter_boden smallint,
    deckung_ap_art smallint,
    vegetationshoehe_maximum smallint,
    vegetationshoehe_mittel smallint,
    gefaehrdung text,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    zeit_id uuid DEFAULT public.uuid_generate_v1mc(),
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    tpop_id uuid,
    bearbeiter uuid,
    plan_vorhanden boolean DEFAULT false,
    jungpflanzen_vorhanden boolean
);




COMMENT ON COLUMN apflora.tpopkontr.id_old IS 'frühere id';



COMMENT ON COLUMN apflora.tpopkontr.typ IS 'Typ der Kontrolle. Auswahl aus Tabelle "tpopkontr_typ_werte"';



COMMENT ON COLUMN apflora.tpopkontr.datum IS 'Wann wurde kontrolliert?';



COMMENT ON COLUMN apflora.tpopkontr.jahr IS 'In welchem Jahr wurde kontrolliert? Für welches Jahr gilt die Beschreibung?';



COMMENT ON COLUMN apflora.tpopkontr.jungpflanzen_anzahl IS 'Anzahl Jungpflanzen';



COMMENT ON COLUMN apflora.tpopkontr.vitalitaet IS 'Vitalität der Pflanzen';



COMMENT ON COLUMN apflora.tpopkontr.ueberlebensrate IS 'Überlebensrate in Prozent';



COMMENT ON COLUMN apflora.tpopkontr.entwicklung IS 'Entwicklung des Bestandes. Auswahl aus Tabelle "tpop_entwicklung_werte"';



COMMENT ON COLUMN apflora.tpopkontr.ursachen IS 'Ursachen der Entwicklung';



COMMENT ON COLUMN apflora.tpopkontr.erfolgsbeurteilung IS 'Erfolgsbeurteilung';



COMMENT ON COLUMN apflora.tpopkontr.umsetzung_aendern IS 'Vorschlag für Änderung der Umsetzung';



COMMENT ON COLUMN apflora.tpopkontr.kontrolle_aendern IS 'Vorschlag für Änderung der Erfolgskontrolle';



COMMENT ON COLUMN apflora.tpopkontr.bemerkungen IS 'Bemerkungen zur Erfolgskontrolle';



COMMENT ON COLUMN apflora.tpopkontr.lr_delarze IS 'Lebensraumtyp nach Delarze';



COMMENT ON COLUMN apflora.tpopkontr.flaeche IS 'Fläche der Teilpopulation';



COMMENT ON COLUMN apflora.tpopkontr.lr_umgebung_delarze IS 'Lebensraumtyp der direkt angrenzenden Umgebung (nach Delarze)';



COMMENT ON COLUMN apflora.tpopkontr.vegetationstyp IS 'Vegetationstyp';



COMMENT ON COLUMN apflora.tpopkontr.konkurrenz IS 'Konkurrenz';



COMMENT ON COLUMN apflora.tpopkontr.moosschicht IS 'Moosschicht';



COMMENT ON COLUMN apflora.tpopkontr.krautschicht IS 'Krautschicht';



COMMENT ON COLUMN apflora.tpopkontr.strauchschicht IS 'Strauchschicht, ehemals Verbuschung (%)';



COMMENT ON COLUMN apflora.tpopkontr.baumschicht IS 'Baumschicht';



COMMENT ON COLUMN apflora.tpopkontr.boden_typ IS 'Bodentyp';



COMMENT ON COLUMN apflora.tpopkontr.boden_kalkgehalt IS 'Kalkgehalt des Bodens';



COMMENT ON COLUMN apflora.tpopkontr.boden_durchlaessigkeit IS 'Durchlässigkeit des Bodens';



COMMENT ON COLUMN apflora.tpopkontr.boden_humus IS 'Humusgehalt des Bodens';



COMMENT ON COLUMN apflora.tpopkontr.boden_naehrstoffgehalt IS 'Nährstoffgehalt des Bodens';



COMMENT ON COLUMN apflora.tpopkontr.boden_abtrag IS 'Oberbodenabtrag';



COMMENT ON COLUMN apflora.tpopkontr.wasserhaushalt IS 'Wasserhaushalt';



COMMENT ON COLUMN apflora.tpopkontr.idealbiotop_uebereinstimmung IS 'Übereinstimmung mit dem Idealbiotop';



COMMENT ON COLUMN apflora.tpopkontr.handlungsbedarf IS 'Handlungsbedarf bezüglich Biotop';



COMMENT ON COLUMN apflora.tpopkontr.flaeche_ueberprueft IS 'Überprüfte Fläche in m2. Nur für Freiwilligen-Erfolgskontrolle';



COMMENT ON COLUMN apflora.tpopkontr.deckung_vegetation IS 'Von Pflanzen, Streu oder Moos bedeckter Boden (%). Nur für Freiwilligen-Erfolgskontrolle. Nur bis 2012 erfasst.';



COMMENT ON COLUMN apflora.tpopkontr.deckung_nackter_boden IS 'Flächenanteil nackter Boden (%). Nur für Freiwilligen-Erfolgskontrolle';



COMMENT ON COLUMN apflora.tpopkontr.deckung_ap_art IS 'Flächenanteil der überprüften Pflanzenart (%). Nur für Freiwilligen-Erfolgskontrolle';



COMMENT ON COLUMN apflora.tpopkontr.vegetationshoehe_maximum IS 'Maximale Vegetationshöhe in cm. Nur für Freiwilligen-Erfolgskontrolle';



COMMENT ON COLUMN apflora.tpopkontr.vegetationshoehe_mittel IS 'Mittlere Vegetationshöhe in cm. Nur für Freiwilligen-Erfolgskontrolle';



COMMENT ON COLUMN apflora.tpopkontr.gefaehrdung IS 'Gefährdung. Nur für Freiwilligen-Erfolgskontrolle';



COMMENT ON COLUMN apflora.tpopkontr.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopkontr.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopkontr.zeit_id IS 'GUID für den Export von Zeiten in EvAB';



COMMENT ON COLUMN apflora.tpopkontr.id IS 'Primärschlüssel. Wird u.a. verwendet für die Identifikation der Beobachtung im nationalen Beobachtungs-Daten-Kreislauf';



COMMENT ON COLUMN apflora.tpopkontr.tpop_id IS 'Zugehörige Teilpopulation. Fremdschlüssel der Tabelle "tpop"';



COMMENT ON COLUMN apflora.tpopkontr.bearbeiter IS 'Zugehöriger Bearbeiter. Fremdschlüssel aus der Tabelle "adresse"';



COMMENT ON COLUMN apflora.tpopkontr.plan_vorhanden IS 'Fläche / Wuchsort auf Plan eingezeichnet? Nur für Freiwilligen-Erfolgskontrolle';



COMMENT ON COLUMN apflora.tpopkontr.jungpflanzen_vorhanden IS 'Gibt es neben alten Pflanzen auch junge? Nur für Freiwilligen-Erfolgskontrolle';



CREATE SEQUENCE apflora."tpopkontr_TPopKontrId_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora."tpopkontr_TPopKontrId_seq" OWNED BY apflora.tpopkontr.id_old;



CREATE TABLE apflora.tpopkontr_idbiotuebereinst_werte (
    code integer,
    text character varying(50) DEFAULT NULL::character varying,
    sort smallint,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true) NOT NULL,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL
);




COMMENT ON COLUMN apflora.tpopkontr_idbiotuebereinst_werte.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopkontr_idbiotuebereinst_werte.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopkontr_idbiotuebereinst_werte.id IS 'Primärschlüssel';



CREATE TABLE apflora.tpopkontr_typ_werte (
    code integer,
    text character varying(50) DEFAULT NULL::character varying,
    sort smallint,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true) NOT NULL,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL
);




COMMENT ON COLUMN apflora.tpopkontr_typ_werte.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopkontr_typ_werte.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopkontr_typ_werte.id IS 'Primärschlüssel';



CREATE TABLE apflora.tpopkontrzaehl (
    id_old integer,
    anzahl integer,
    einheit integer,
    methode integer,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    tpopkontr_id uuid
);




COMMENT ON COLUMN apflora.tpopkontrzaehl.id_old IS 'frühere id';



COMMENT ON COLUMN apflora.tpopkontrzaehl.anzahl IS 'Anzahl Zaehleinheiten';



COMMENT ON COLUMN apflora.tpopkontrzaehl.einheit IS 'Verwendete Zaehleinheit. Auswahl aus Tabelle "tpopkontrzaehl_einheit_werte"';



COMMENT ON COLUMN apflora.tpopkontrzaehl.methode IS 'Verwendete Methodik. Auswahl aus Tabelle "tpopkontrzaehl_methode_werte"';



COMMENT ON COLUMN apflora.tpopkontrzaehl.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopkontrzaehl.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



CREATE SEQUENCE apflora."tpopkontrzaehl_TPopKontrZaehlId_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora."tpopkontrzaehl_TPopKontrZaehlId_seq" OWNED BY apflora.tpopkontrzaehl.id_old;



CREATE TABLE apflora.tpopkontrzaehl_einheit_werte (
    code integer,
    text character varying(50) DEFAULT NULL::character varying,
    sort smallint,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true) NOT NULL,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL
);




COMMENT ON COLUMN apflora.tpopkontrzaehl_einheit_werte.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopkontrzaehl_einheit_werte.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopkontrzaehl_einheit_werte.id IS 'Primärschlüssel';



CREATE TABLE apflora.tpopkontrzaehl_methode_werte (
    code integer,
    text character varying(50) DEFAULT NULL::character varying,
    sort smallint,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true) NOT NULL,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL
);




COMMENT ON COLUMN apflora.tpopkontrzaehl_methode_werte.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopkontrzaehl_methode_werte.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopkontrzaehl_methode_werte.id IS 'Primärschlüssel';



CREATE TABLE apflora.tpopmassn (
    id_old integer,
    typ integer,
    beschreibung text,
    jahr smallint,
    datum date,
    bemerkungen text,
    plan_bezeichnung text,
    flaeche integer,
    markierung text,
    anz_triebe integer,
    anz_pflanzen integer,
    anz_pflanzstellen integer,
    wirtspflanze text,
    herkunft_pop text,
    sammeldatum character varying(50) DEFAULT NULL::character varying,
    form text,
    pflanzanordnung text,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    tpop_id uuid,
    bearbeiter uuid,
    plan_vorhanden boolean DEFAULT false
);




COMMENT ON COLUMN apflora.tpopmassn.id_old IS 'frühere id';



COMMENT ON COLUMN apflora.tpopmassn.typ IS 'Typ der Massnahme. Auswahl aus Tabelle "tpopmassn_typ_werte"';



COMMENT ON COLUMN apflora.tpopmassn.beschreibung IS 'Was wurde gemacht? V.a. für Typ "Spezial"';



COMMENT ON COLUMN apflora.tpopmassn.jahr IS 'Jahr, in dem die Massnahme durchgeführt wurde';



COMMENT ON COLUMN apflora.tpopmassn.datum IS 'Datum, an dem die Massnahme durchgeführt wurde';



COMMENT ON COLUMN apflora.tpopmassn.bemerkungen IS 'Bemerkungen zur Massnahme';



COMMENT ON COLUMN apflora.tpopmassn.plan_bezeichnung IS 'Bezeichnung auf dem Plan';



COMMENT ON COLUMN apflora.tpopmassn.flaeche IS 'Fläche der Massnahme bzw. Teilpopulation (m2)';



COMMENT ON COLUMN apflora.tpopmassn.markierung IS 'Markierung der Massnahme bzw. Teilpopulation';



COMMENT ON COLUMN apflora.tpopmassn.anz_triebe IS 'Anzahl angesiedelte Triebe';



COMMENT ON COLUMN apflora.tpopmassn.anz_pflanzen IS 'Anzahl angesiedelte Pflanzen';



COMMENT ON COLUMN apflora.tpopmassn.anz_pflanzstellen IS 'Anzahl Töpfe/Pflanzstellen';



COMMENT ON COLUMN apflora.tpopmassn.wirtspflanze IS 'Wirtspflanze';



COMMENT ON COLUMN apflora.tpopmassn.herkunft_pop IS 'Aus welcher Population stammt das Pflanzenmaterial?';



COMMENT ON COLUMN apflora.tpopmassn.sammeldatum IS 'Datum, an dem die angesiedelten Pflanzen gesammelt wurden';



COMMENT ON COLUMN apflora.tpopmassn.form IS 'Form, Grösse der Ansiedlung';



COMMENT ON COLUMN apflora.tpopmassn.pflanzanordnung IS 'Anordnung der Pflanzung';



COMMENT ON COLUMN apflora.tpopmassn.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopmassn.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopmassn.tpop_id IS 'Zugehörige Teilpopulation. Fremdschlüssel der Tabelle "tpop"';



COMMENT ON COLUMN apflora.tpopmassn.bearbeiter IS 'Zugehöriger Bearbeiter. Fremdschlüssel aus der Tabelle "adresse"';



COMMENT ON COLUMN apflora.tpopmassn.plan_vorhanden IS 'Existiert ein Plan?';



CREATE SEQUENCE apflora."tpopmassn_TPopMassnId_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora."tpopmassn_TPopMassnId_seq" OWNED BY apflora.tpopmassn.id_old;



CREATE TABLE apflora.tpopmassn_erfbeurt_werte (
    code integer,
    text character varying(50) DEFAULT NULL::character varying,
    sort smallint,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true) NOT NULL,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL
);




COMMENT ON COLUMN apflora.tpopmassn_erfbeurt_werte.text IS 'Wie werden die durchgefuehrten Massnahmen beurteilt?';



COMMENT ON COLUMN apflora.tpopmassn_erfbeurt_werte.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopmassn_erfbeurt_werte.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopmassn_erfbeurt_werte.id IS 'Primärschlüssel';



CREATE TABLE apflora.tpopmassn_typ_werte (
    code integer,
    text character varying(50) DEFAULT NULL::character varying,
    sort smallint,
    ansiedlung smallint NOT NULL,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true) NOT NULL,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL
);




COMMENT ON COLUMN apflora.tpopmassn_typ_werte.ansiedlung IS 'Handelt es sich um eine Ansiedlung?';



COMMENT ON COLUMN apflora.tpopmassn_typ_werte.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopmassn_typ_werte.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopmassn_typ_werte.id IS 'Primärschlüssel';



CREATE TABLE apflora.tpopmassnber (
    id_old integer,
    jahr smallint,
    beurteilung integer,
    bemerkungen text,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    tpop_id uuid
);




COMMENT ON COLUMN apflora.tpopmassnber.id_old IS 'frühere id';



COMMENT ON COLUMN apflora.tpopmassnber.jahr IS 'Jahr, für den der Bericht gilt';



COMMENT ON COLUMN apflora.tpopmassnber.beurteilung IS 'Beurteilung des Erfolgs. Auswahl aus Tabelle "tpopmassn_erfbeurt_werte"';



COMMENT ON COLUMN apflora.tpopmassnber.bemerkungen IS 'Bemerkungen zur Beurteilung';



COMMENT ON COLUMN apflora.tpopmassnber.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopmassnber.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.tpopmassnber.tpop_id IS 'Zugehörige Teilpopulation. Fremdschlüssel der Tabelle "tpop"';



CREATE SEQUENCE apflora."tpopmassnber_TPopMassnBerId_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora."tpopmassnber_TPopMassnBerId_seq" OWNED BY apflora.tpopmassnber.id_old;



CREATE TABLE apflora."user" (
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    name text,
    email text,
    role name,
    pass text,
    CONSTRAINT proper_email CHECK ((email ~* '^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+[.][A-Za-z]+$'::text)),
    CONSTRAINT user_pass_check CHECK ((length(pass) > 5)),
    CONSTRAINT user_role_check CHECK ((length((role)::text) < 512))
);




CREATE TABLE apflora.usermessage (
    user_name character varying(30) NOT NULL,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    message_id uuid
);




COMMENT ON COLUMN apflora.usermessage.message_id IS 'Zugehörige Nachricht. Fremdschlüssel aus der Tabelle "message"';



CREATE TABLE apflora.ziel (
    id_old integer,
    typ integer,
    jahr smallint DEFAULT 1 NOT NULL,
    bezeichnung text,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    ap_id uuid
);




COMMENT ON COLUMN apflora.ziel.id_old IS 'frühere id';



COMMENT ON COLUMN apflora.ziel.typ IS 'Typ des Ziels. Z.B. Zwischenziel, Gesamtziel. Auswahl aus Tabelle "ziel_typ_werte"';



COMMENT ON COLUMN apflora.ziel.jahr IS 'In welchem Jahr soll das Ziel erreicht werden?';



COMMENT ON COLUMN apflora.ziel.bezeichnung IS 'Textliche Beschreibung des Ziels';



COMMENT ON COLUMN apflora.ziel.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.ziel.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.ziel.id IS 'Primärschlüssel';



COMMENT ON COLUMN apflora.ziel.ap_id IS 'Zugehöriger Aktionsplan. Fremdschlüssel aus der Tabelle "ap"';



CREATE TABLE apflora.ziel_typ_werte (
    code integer,
    text character varying(50) DEFAULT NULL::character varying,
    sort smallint,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true) NOT NULL,
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL
);




COMMENT ON COLUMN apflora.ziel_typ_werte.text IS 'Beschreibung des Ziels';



COMMENT ON COLUMN apflora.ziel_typ_werte.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.ziel_typ_werte.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.ziel_typ_werte.id IS 'Primärschlüssel';



CREATE VIEW apflora.v_abper_ziel AS
 SELECT ziel.id_old,
    ziel.typ,
    ziel.jahr,
    ziel.bezeichnung,
    ziel.changed,
    ziel.changed_by,
    ziel.id,
    ziel.ap_id,
    ziel_typ_werte.text AS typ_decodiert
   FROM (apflora._variable
     JOIN (apflora.ziel
     JOIN apflora.ziel_typ_werte ON ((ziel.typ = ziel_typ_werte.code))) ON ((_variable.apber_jahr = ziel.jahr)))
  WHERE (ziel.typ = ANY (ARRAY[1, 2, 1170775556]))
  ORDER BY ziel_typ_werte.sort, ziel.bezeichnung;




CREATE VIEW apflora.v_ap AS
 SELECT ap.id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS bearbeitung,
    ap.start_jahr,
    ap_umsetzung_werte.text AS umsetzung,
    adresse.name AS bearbeiter,
    ap.changed,
    ap.changed_by
   FROM ((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.adresse ON ((ap.bearbeiter = adresse.id)))
  ORDER BY ae_eigenschaften.artname;




CREATE VIEW apflora.v_ap_anzkontr AS
 SELECT ap.id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS bearbeitung,
    ap.start_jahr,
    ap_umsetzung_werte.text AS umsetzung,
    count(tpopkontr.id) AS anzahl_kontrollen
   FROM ((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     LEFT JOIN ((apflora.pop
     LEFT JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     LEFT JOIN apflora.tpopkontr ON ((tpop.id = tpopkontr.tpop_id))) ON ((ap.id = pop.ap_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
  GROUP BY ap.id, ae_eigenschaften.artname, ap_bearbstand_werte.text, ap.start_jahr, ap_umsetzung_werte.text
  ORDER BY ae_eigenschaften.artname;




CREATE VIEW apflora.v_ap_anzkontrinjahr AS
 SELECT ap.id,
    ae_eigenschaften.artname,
    tpopkontr.id AS tpopkontr_id,
    tpopkontr.jahr AS tpopkontr_jahr
   FROM ((apflora.ap
     JOIN apflora.ae_eigenschaften ON ((ap.art_id = ae_eigenschaften.id)))
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN apflora.tpopkontr ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3))
  GROUP BY ap.id, ae_eigenschaften.artname, tpopkontr.id, tpopkontr.jahr;




CREATE VIEW apflora.v_ap_anzmassn AS
 SELECT ap.id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS bearbeitung,
    ap.start_jahr,
    ap_umsetzung_werte.text AS umsetzung,
    count(tpopmassn.id) AS anzahl_massnahmen
   FROM ((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     LEFT JOIN ((apflora.pop
     LEFT JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     LEFT JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id))) ON ((ap.id = pop.ap_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
  GROUP BY ap.id, ae_eigenschaften.artname, ap_bearbstand_werte.text, ap.start_jahr, ap_umsetzung_werte.text
  ORDER BY ae_eigenschaften.artname;




CREATE VIEW apflora.v_ap_anzmassnprojahr0 AS
 SELECT ap.id,
    tpopmassn.jahr,
    count(tpopmassn.id) AS "AnzahlvonTPopMassnId"
   FROM (apflora.ap
     JOIN ((apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3) AND (tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY ap.id, tpopmassn.jahr
 HAVING (tpopmassn.jahr IS NOT NULL)
  ORDER BY ap.id, tpopmassn.jahr;




CREATE VIEW apflora.v_massn_jahre AS
 SELECT tpopmassn.jahr
   FROM apflora.tpopmassn
  GROUP BY tpopmassn.jahr
 HAVING ((tpopmassn.jahr >= 1900) AND (tpopmassn.jahr <= 2100))
  ORDER BY tpopmassn.jahr;




CREATE VIEW apflora.v_ap_massnjahre AS
 SELECT ap.id,
    v_massn_jahre.jahr
   FROM apflora.ap,
    apflora.v_massn_jahre
  WHERE (ap.bearbeitung < 4)
  ORDER BY ap.id, v_massn_jahre.jahr;




CREATE VIEW apflora.v_ap_anzmassnprojahr AS
 SELECT v_ap_massnjahre.id,
    v_ap_massnjahre.jahr,
    COALESCE(v_ap_anzmassnprojahr0."AnzahlvonTPopMassnId", (0)::bigint) AS anzahl_massnahmen
   FROM (apflora.v_ap_massnjahre
     LEFT JOIN apflora.v_ap_anzmassnprojahr0 ON (((v_ap_massnjahre.jahr = v_ap_anzmassnprojahr0.jahr) AND (v_ap_massnjahre.id = v_ap_anzmassnprojahr0.id))))
  ORDER BY v_ap_massnjahre.id, v_ap_massnjahre.jahr;




CREATE VIEW apflora.v_ap_anzmassnbisjahr AS
 SELECT v_ap_massnjahre.id,
    v_ap_massnjahre.jahr,
    sum(v_ap_anzmassnprojahr.anzahl_massnahmen) AS anzahl_massnahmen
   FROM (apflora.v_ap_massnjahre
     JOIN apflora.v_ap_anzmassnprojahr ON ((v_ap_massnjahre.id = v_ap_anzmassnprojahr.id)))
  WHERE (v_ap_anzmassnprojahr.jahr <= v_ap_massnjahre.jahr)
  GROUP BY v_ap_massnjahre.id, v_ap_massnjahre.jahr
  ORDER BY v_ap_massnjahre.id, v_ap_massnjahre.jahr;




CREATE VIEW apflora.v_ap_apberrelevant AS
 SELECT ap.id
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY ap.id;




CREATE VIEW apflora.v_ap_apberundmassn AS
 SELECT ap.id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS bearbeitung,
    ap.start_jahr,
    ap_umsetzung_werte.text AS umsetzung,
    adresse.name AS bearbeiter,
    ae_eigenschaften.artwert,
    v_ap_anzmassnprojahr.jahr AS massn_jahr,
    v_ap_anzmassnprojahr.anzahl_massnahmen AS massn_anzahl,
    v_ap_anzmassnbisjahr.anzahl_massnahmen AS massn_anzahl_bisher,
        CASE
            WHEN (apber.jahr > 0) THEN 'ja'::text
            ELSE 'nein'::text
        END AS bericht_erstellt
   FROM (apflora.ae_eigenschaften
     JOIN ((((apflora.ap
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.adresse ON ((ap.bearbeiter = adresse.id)))
     JOIN (apflora.v_ap_anzmassnprojahr
     JOIN (apflora.v_ap_anzmassnbisjahr
     LEFT JOIN apflora.apber ON (((v_ap_anzmassnbisjahr.jahr = apber.jahr) AND (v_ap_anzmassnbisjahr.id = apber.ap_id)))) ON (((v_ap_anzmassnprojahr.jahr = v_ap_anzmassnbisjahr.jahr) AND (v_ap_anzmassnprojahr.id = v_ap_anzmassnbisjahr.id)))) ON ((ap.id = v_ap_anzmassnprojahr.id))) ON ((ae_eigenschaften.id = ap.art_id)))
  ORDER BY ae_eigenschaften.artname, v_ap_anzmassnprojahr.jahr;




CREATE VIEW apflora.v_ap_mitmassninjahr0 AS
 SELECT ae_eigenschaften.artname,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    tpop.nr AS tpop_nr,
    tpop.gemeinde AS tpop_gemeinde,
    tpop.flurname AS tpop_flurname,
    tpopmassn.jahr,
    tpopmassn_typ_werte.text AS typ,
    tpopmassn.beschreibung,
    tpopmassn.datum,
    adresse.name AS bearbeiter,
    tpopmassn.bemerkungen,
    tpopmassn.plan_vorhanden,
    tpopmassn.plan_bezeichnung,
    tpopmassn.flaeche,
    tpopmassn.markierung,
    tpopmassn.anz_triebe,
    tpopmassn.anz_pflanzen,
    tpopmassn.anz_pflanzstellen,
    tpopmassn.wirtspflanze,
    tpopmassn.herkunft_pop,
    tpopmassn.sammeldatum,
    tpopmassn.form,
    tpopmassn.pflanzanordnung
   FROM ((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN ((apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN ((apflora.tpopmassn
     JOIN apflora.tpopmassn_typ_werte ON ((tpopmassn.typ = tpopmassn_typ_werte.code)))
     LEFT JOIN apflora.adresse ON ((tpopmassn.bearbeiter = adresse.id))) ON ((tpop.id = tpopmassn.tpop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3))
  ORDER BY ae_eigenschaften.artname, pop.nr, pop.name, tpop.nr, tpop.gemeinde, tpop.flurname;




CREATE VIEW apflora.v_ap_ohnepop AS
 SELECT ap.id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS bearbeitung,
    ap.start_jahr,
    ap_umsetzung_werte.text AS umsetzung,
    adresse.name AS bearbeiter,
    pop.id AS pop_id
   FROM (((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.adresse ON ((ap.bearbeiter = adresse.id)))
     LEFT JOIN apflora.pop ON ((ap.id = pop.ap_id)))
  WHERE (pop.id IS NULL)
  ORDER BY ae_eigenschaften.artname;




CREATE VIEW apflora.v_ap_tpopmassnjahr0 AS
 SELECT ap.id,
    ae_eigenschaften.artname,
    tpopmassn.id AS tpopmassn_id,
    tpopmassn.jahr AS tpopmassn_jahr
   FROM ((apflora.ap
     JOIN apflora.ae_eigenschaften ON ((ap.art_id = ae_eigenschaften.id)))
     JOIN ((apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3))
  GROUP BY ap.id, ae_eigenschaften.artname, tpopmassn.id, tpopmassn.jahr;




CREATE VIEW apflora.v_apbeob AS
 SELECT beob.id_old,
    beob.id_field,
    beob.art_id_old,
    beob.datum,
    beob.autor,
    beob.x,
    beob.y,
    beob.data,
    beob.id,
    beob.art_id,
    beob.tpop_id,
    beob.nicht_zuordnen,
    beob.bemerkungen,
    beob.changed,
    beob.changed_by,
    beob.quelle_id,
    apart.ap_id,
    beob_quelle_werte.name AS quelle
   FROM ((apflora.beob
     JOIN apflora.apart ON ((apart.art_id = beob.art_id)))
     JOIN apflora.beob_quelle_werte ON ((beob_quelle_werte.id = beob.quelle_id)))
  ORDER BY beob.datum DESC;




CREATE VIEW apflora.v_apber AS
 SELECT ae_eigenschaften.artname,
    apber.id_old,
    apber.jahr,
    apber.situation,
    apber.vergleich_vorjahr_gesamtziel,
    apber.beurteilung,
    apber.veraenderung_zum_vorjahr,
    apber.apber_analyse,
    apber.konsequenzen_umsetzung,
    apber.konsequenzen_erfolgskontrolle,
    apber.biotope_neue,
    apber.biotope_optimieren,
    apber.massnahmen_optimieren,
    apber.wirkung_auf_art,
    apber.datum,
    apber.changed,
    apber.changed_by,
    apber.massnahmen_ap_bearb,
    apber.massnahmen_planung_vs_ausfuehrung,
    apber.id,
    apber.ap_id,
    apber.bearbeiter,
    ap_erfkrit_werte.text AS beurteilung_decodiert,
    adresse.name AS bearbeiter_decodiert
   FROM ((apflora.ap
     JOIN apflora.ae_eigenschaften ON ((ap.art_id = ae_eigenschaften.id)))
     JOIN ((apflora.apber
     LEFT JOIN apflora.ap_erfkrit_werte ON ((apber.beurteilung = ap_erfkrit_werte.code)))
     LEFT JOIN apflora.adresse ON ((apber.bearbeiter = adresse.id))) ON ((ap.id = apber.ap_id)))
  ORDER BY ae_eigenschaften.artname;




CREATE VIEW apflora.v_apber_a10lpop AS
 SELECT pop.ap_id,
    pop.id
   FROM (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE (pop.status = 300)
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_a10ltpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE (tpop.status = 300)
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_a2lpop AS
 SELECT pop.ap_id,
    pop.id
   FROM (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((pop.status = 100) AND (tpop.apber_relevant = 1))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_a2ltpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((pop.status <> 300) AND (tpop.status = 100) AND (tpop.apber_relevant = 1))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_a3lpop AS
 SELECT pop.ap_id,
    pop.id
   FROM ((apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN apflora.ap ON ((pop.ap_id = ap.id)))
  WHERE ((pop.status = ANY (ARRAY[200, 210])) AND (tpop.apber_relevant = 1) AND ((pop.bekannt_seit < ap.start_jahr) OR (pop.bekannt_seit IS NULL) OR (ap.start_jahr IS NULL)))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_a3ltpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((pop.ap_id = ap.id)))
  WHERE ((pop.status <> 300) AND (tpop.status = ANY (ARRAY[200, 210])) AND (tpop.apber_relevant = 1) AND ((tpop.bekannt_seit < ap.start_jahr) OR (tpop.bekannt_seit IS NULL) OR (ap.start_jahr IS NULL)))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_a4lpop AS
 SELECT pop.ap_id,
    pop.id
   FROM ((apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN apflora.ap ON ((pop.ap_id = ap.id)))
  WHERE ((pop.status = ANY (ARRAY[200, 210])) AND (tpop.apber_relevant = 1) AND (pop.bekannt_seit >= ap.start_jahr))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_a4ltpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((pop.ap_id = ap.id)))
  WHERE ((pop.status <> 300) AND (tpop.status = ANY (ARRAY[200, 210])) AND (tpop.apber_relevant = 1) AND (tpop.bekannt_seit >= ap.start_jahr))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_a5lpop AS
 SELECT pop.ap_id,
    pop.id
   FROM (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((pop.status = 201) AND (tpop.apber_relevant = 1))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_a5ltpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((tpop.status = 201) AND (tpop.apber_relevant = 1))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_a8lpop AS
 SELECT pop.ap_id,
    pop.id
   FROM ((apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN apflora.ap ON ((pop.ap_id = ap.id)))
  WHERE (((pop.status = 101) OR ((pop.status = 211) AND ((pop.bekannt_seit < ap.start_jahr) OR (pop.bekannt_seit IS NULL) OR (ap.start_jahr IS NULL)))) AND (tpop.apber_relevant = 1))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_a8ltpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM ((apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN apflora.ap ON ((pop.ap_id = ap.id)))
  WHERE ((pop.status <> 300) AND ((tpop.status = 101) OR ((tpop.status = 211) AND ((tpop.bekannt_seit < ap.start_jahr) OR (tpop.bekannt_seit IS NULL) OR (ap.start_jahr IS NULL)))) AND (tpop.apber_relevant = 1))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_a9lpop AS
 SELECT pop.ap_id,
    pop.id
   FROM ((apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN apflora.ap ON ((pop.ap_id = ap.id)))
  WHERE ((pop.status = ANY (ARRAY[202, 211])) AND (tpop.apber_relevant = 1) AND (pop.bekannt_seit >= ap.start_jahr))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_a9ltpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM ((apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN apflora.ap ON ((pop.ap_id = ap.id)))
  WHERE ((pop.status <> 300) AND (tpop.status = ANY (ARRAY[202, 211])) AND (tpop.apber_relevant = 1) AND (tpop.bekannt_seit >= ap.start_jahr))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_b1lpop AS
 SELECT pop.ap_id,
    pop.id
   FROM ((apflora.pop
     JOIN (apflora.popber
     JOIN apflora._variable ON ((popber.jahr = _variable.apber_jahr))) ON ((pop.id = popber.pop_id)))
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_b1ltpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.pop
     JOIN (apflora.tpop
     JOIN (apflora.tpopber
     JOIN apflora._variable ON ((tpopber.jahr = _variable.apber_jahr))) ON ((tpop.id = tpopber.tpop_id))) ON ((pop.id = tpop.pop_id)))
  WHERE ((tpop.apber_relevant = 1) AND (pop.status <> 300) AND (tpop.status <> 300))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_b1rpop AS
 SELECT pop.ap_id,
    pop.id
   FROM apflora._variable,
    ((apflora.pop
     JOIN apflora.popber ON ((pop.id = popber.pop_id)))
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((tpop.apber_relevant = 1) AND (pop.status <> 300) AND (popber.jahr <= _variable.apber_jahr) AND (popber.entwicklung = ANY (ARRAY[1, 2, 3, 4, 8])))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_b1rtpop AS
 SELECT pop.ap_id,
    tpopber.tpop_id
   FROM apflora._variable,
    (apflora.pop
     JOIN (apflora.tpop
     JOIN apflora.tpopber ON ((tpop.id = tpopber.tpop_id))) ON ((pop.id = tpop.pop_id)))
  WHERE ((tpop.apber_relevant = 1) AND (pop.status <> 300) AND (tpop.status <> 300) AND (tpopber.jahr <= _variable.apber_jahr) AND (tpopber.entwicklung = ANY (ARRAY[1, 2, 3, 4, 8])))
  GROUP BY pop.ap_id, tpopber.tpop_id;




CREATE VIEW apflora.v_apber_b2lpop AS
 SELECT pop.ap_id,
    pop.id
   FROM ((apflora.pop
     JOIN (apflora.popber
     JOIN apflora._variable ON ((popber.jahr = _variable.apber_jahr))) ON ((pop.id = popber.pop_id)))
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((popber.entwicklung = 3) AND (tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_b2ltpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.pop
     JOIN (apflora.tpop
     JOIN (apflora.tpopber
     JOIN apflora._variable ON ((tpopber.jahr = _variable.apber_jahr))) ON ((tpop.id = tpopber.tpop_id))) ON ((pop.id = tpop.pop_id)))
  WHERE ((tpopber.entwicklung = 3) AND (tpop.apber_relevant = 1) AND (pop.status <> 300) AND (tpop.status <> 300))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_pop_letzterpopber0 AS
 SELECT pop.ap_id,
    pop.id,
    popber.jahr
   FROM apflora._variable,
    ((apflora.pop
     JOIN apflora.popber ON ((pop.id = popber.pop_id)))
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((popber.jahr <= _variable.apber_jahr) AND (tpop.apber_relevant = 1) AND (pop.status <> 300));




CREATE VIEW apflora.v_pop_letzterpopber AS
 SELECT v_pop_letzterpopber0.ap_id,
    v_pop_letzterpopber0.id,
    max(v_pop_letzterpopber0.jahr) AS jahr
   FROM apflora.v_pop_letzterpopber0
  GROUP BY v_pop_letzterpopber0.ap_id, v_pop_letzterpopber0.id;




CREATE VIEW apflora.v_apber_b2rpop AS
 SELECT pop.ap_id,
    pop.id
   FROM (((apflora.v_pop_letzterpopber
     JOIN apflora.pop ON ((v_pop_letzterpopber.ap_id = pop.ap_id)))
     JOIN apflora.popber ON (((pop.id = popber.pop_id) AND (v_pop_letzterpopber.id = popber.pop_id) AND (v_pop_letzterpopber.jahr = popber.jahr))))
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((popber.entwicklung = 3) AND (tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_tpop_letztertpopber0 AS
 SELECT pop.ap_id,
    tpop.id,
    tpopber.jahr AS tpopber_jahr
   FROM apflora._variable,
    (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN apflora.tpopber ON ((tpop.id = tpopber.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpopber.jahr <= _variable.apber_jahr) AND (tpop.apber_relevant = 1) AND (pop.status <> 300));




CREATE VIEW apflora.v_tpop_letztertpopber AS
 SELECT v_tpop_letztertpopber0.ap_id,
    v_tpop_letztertpopber0.id,
    max(v_tpop_letztertpopber0.tpopber_jahr) AS jahr
   FROM apflora.v_tpop_letztertpopber0
  GROUP BY v_tpop_letztertpopber0.ap_id, v_tpop_letztertpopber0.id;




CREATE VIEW apflora.v_apber_b2rtpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.tpop
     JOIN (apflora.tpopber
     JOIN (apflora.pop
     JOIN apflora.v_tpop_letztertpopber ON ((pop.ap_id = v_tpop_letztertpopber.ap_id))) ON (((tpopber.tpop_id = v_tpop_letztertpopber.id) AND (tpopber.jahr = v_tpop_letztertpopber.jahr)))) ON (((tpop.pop_id = pop.id) AND (tpop.id = tpopber.tpop_id))))
  WHERE ((tpopber.entwicklung = 3) AND (tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_b3lpop AS
 SELECT pop.ap_id,
    pop.id
   FROM ((apflora.pop
     JOIN (apflora.popber
     JOIN apflora._variable ON ((popber.jahr = _variable.apber_jahr))) ON ((pop.id = popber.pop_id)))
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((popber.entwicklung = 2) AND (tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_b3ltpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.pop
     JOIN (apflora.tpop
     JOIN (apflora.tpopber
     JOIN apflora._variable ON ((tpopber.jahr = _variable.apber_jahr))) ON ((tpop.id = tpopber.tpop_id))) ON ((pop.id = tpop.pop_id)))
  WHERE ((tpopber.entwicklung = 2) AND (tpop.apber_relevant = 1) AND (pop.status <> 300) AND (tpop.status <> 300))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_b3rpop AS
 SELECT pop.ap_id,
    pop.id
   FROM (((apflora.v_pop_letzterpopber
     JOIN apflora.pop ON ((v_pop_letzterpopber.ap_id = pop.ap_id)))
     JOIN apflora.popber ON (((pop.id = popber.pop_id) AND (v_pop_letzterpopber.id = popber.pop_id) AND (v_pop_letzterpopber.jahr = popber.jahr))))
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((popber.entwicklung = 2) AND (tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_b3rtpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.tpop
     JOIN (apflora.tpopber
     JOIN (apflora.pop
     JOIN apflora.v_tpop_letztertpopber ON ((pop.ap_id = v_tpop_letztertpopber.ap_id))) ON (((tpopber.tpop_id = v_tpop_letztertpopber.id) AND (tpopber.jahr = v_tpop_letztertpopber.jahr)))) ON (((tpop.pop_id = pop.id) AND (tpop.id = tpopber.tpop_id))))
  WHERE ((tpopber.entwicklung = 2) AND (tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_b4lpop AS
 SELECT pop.ap_id,
    pop.id
   FROM ((apflora.pop
     JOIN (apflora.popber
     JOIN apflora._variable ON ((popber.jahr = _variable.apber_jahr))) ON ((pop.id = popber.pop_id)))
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((popber.entwicklung = 1) AND (tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_b4ltpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.pop
     JOIN (apflora.tpop
     JOIN (apflora.tpopber
     JOIN apflora._variable ON ((tpopber.jahr = _variable.apber_jahr))) ON ((tpop.id = tpopber.tpop_id))) ON ((pop.id = tpop.pop_id)))
  WHERE ((tpopber.entwicklung = 1) AND (tpop.apber_relevant = 1) AND (pop.status <> 300) AND (tpop.status <> 300))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_b4rpop AS
 SELECT pop.ap_id,
    pop.id
   FROM (((apflora.v_pop_letzterpopber
     JOIN apflora.pop ON ((v_pop_letzterpopber.ap_id = pop.ap_id)))
     JOIN apflora.popber ON (((pop.id = popber.pop_id) AND (v_pop_letzterpopber.id = popber.pop_id) AND (v_pop_letzterpopber.jahr = popber.jahr))))
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((popber.entwicklung = 1) AND (tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_b4rtpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.tpop
     JOIN (apflora.tpopber
     JOIN (apflora.pop
     JOIN apflora.v_tpop_letztertpopber ON ((pop.ap_id = v_tpop_letztertpopber.ap_id))) ON (((tpopber.tpop_id = v_tpop_letztertpopber.id) AND (tpopber.jahr = v_tpop_letztertpopber.jahr)))) ON (((tpop.pop_id = pop.id) AND (tpop.id = tpopber.tpop_id))))
  WHERE ((tpopber.entwicklung = 1) AND (tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_b5lpop AS
 SELECT pop.ap_id,
    pop.id
   FROM ((apflora.pop
     JOIN (apflora.popber
     JOIN apflora._variable ON ((popber.jahr = _variable.apber_jahr))) ON ((pop.id = popber.pop_id)))
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((popber.entwicklung = 4) AND (tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_b5ltpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.pop
     JOIN (apflora.tpop
     JOIN (apflora.tpopber
     JOIN apflora._variable ON ((tpopber.jahr = _variable.apber_jahr))) ON ((tpop.id = tpopber.tpop_id))) ON ((pop.id = tpop.pop_id)))
  WHERE ((tpopber.entwicklung = 4) AND (tpop.apber_relevant = 1) AND (pop.status <> 300) AND (tpop.status <> 300))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_b5rpop AS
 SELECT pop.ap_id,
    pop.id
   FROM (((apflora.v_pop_letzterpopber
     JOIN apflora.pop ON ((v_pop_letzterpopber.ap_id = pop.ap_id)))
     JOIN apflora.popber ON (((pop.id = popber.pop_id) AND (v_pop_letzterpopber.id = popber.pop_id) AND (v_pop_letzterpopber.jahr = popber.jahr))))
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE (((popber.entwicklung = 4) OR (popber.entwicklung = 9)) AND (tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_b5rtpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.tpop
     JOIN (apflora.tpopber
     JOIN (apflora.pop
     JOIN apflora.v_tpop_letztertpopber ON ((pop.ap_id = v_tpop_letztertpopber.ap_id))) ON (((tpopber.tpop_id = v_tpop_letztertpopber.id) AND (tpopber.jahr = v_tpop_letztertpopber.jahr)))) ON (((tpop.pop_id = pop.id) AND (tpop.id = tpopber.tpop_id))))
  WHERE ((tpopber.entwicklung = 4) AND (tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_b6lpop AS
 SELECT pop.ap_id,
    pop.id
   FROM ((apflora.pop
     JOIN (apflora.popber
     JOIN apflora._variable ON ((popber.jahr = _variable.apber_jahr))) ON ((pop.id = popber.pop_id)))
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((popber.entwicklung = 8) AND (tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_b6ltpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.pop
     JOIN (apflora.tpop
     JOIN (apflora.tpopber
     JOIN apflora._variable ON ((tpopber.jahr = _variable.apber_jahr))) ON ((tpop.id = tpopber.tpop_id))) ON ((pop.id = tpop.pop_id)))
  WHERE ((tpopber.entwicklung = 8) AND (tpop.apber_relevant = 1) AND (pop.status <> 300) AND (tpop.status <> 300))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_b6rpop AS
 SELECT pop.ap_id,
    pop.id
   FROM (((apflora.v_pop_letzterpopber
     JOIN apflora.pop ON ((v_pop_letzterpopber.ap_id = pop.ap_id)))
     JOIN apflora.popber ON (((pop.id = popber.pop_id) AND (v_pop_letzterpopber.id = popber.pop_id) AND (v_pop_letzterpopber.jahr = popber.jahr))))
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((popber.entwicklung = 8) AND (tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_b6rtpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.tpop
     JOIN (apflora.tpopber
     JOIN (apflora.pop
     JOIN apflora.v_tpop_letztertpopber ON ((pop.ap_id = v_tpop_letztertpopber.ap_id))) ON (((tpopber.tpop_id = v_tpop_letztertpopber.id) AND (tpopber.jahr = v_tpop_letztertpopber.jahr)))) ON (((tpop.pop_id = pop.id) AND (tpop.id = tpopber.tpop_id))))
  WHERE ((tpopber.entwicklung = 8) AND (tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_b7lpop AS
 SELECT pop.ap_id,
    pop.id
   FROM (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_b7ltpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((tpop.apber_relevant = 1) AND (pop.status <> 300) AND (tpop.status <> 300))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_c1lpop AS
 SELECT pop.ap_id,
    pop.id
   FROM ((apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN (apflora.tpopmassn
     JOIN apflora._variable ON ((tpopmassn.jahr = _variable.apber_jahr))) ON ((tpop.id = tpopmassn.tpop_id)))
  WHERE ((tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_c1ltpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (((apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id)))
     JOIN apflora._variable ON ((tpopmassn.jahr = _variable.apber_jahr)))
  WHERE ((tpop.apber_relevant = 1) AND (pop.status <> 300) AND (tpop.status <> 300))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_c1rpop AS
 SELECT pop.ap_id,
    pop.id
   FROM apflora._variable,
    ((apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id)))
  WHERE ((tpopmassn.jahr <= _variable.apber_jahr) AND (tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_c1rtpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM apflora._variable,
    ((apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id)))
  WHERE ((tpopmassn.jahr <= _variable.apber_jahr) AND (tpop.apber_relevant = 1) AND (pop.status <> 300) AND (tpop.status <> 300))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_pop_letztermassnber0 AS
 SELECT pop.ap_id,
    pop.id,
    popmassnber.jahr
   FROM apflora._variable,
    (((apflora.pop
     JOIN apflora.popmassnber ON ((pop.id = popmassnber.pop_id)))
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id)))
  WHERE ((popmassnber.jahr <= _variable.apber_jahr) AND (tpop.apber_relevant = 1) AND (tpopmassn.jahr <= _variable.apber_jahr) AND (pop.status <> 300));




CREATE VIEW apflora.v_pop_letztermassnber AS
 SELECT v_pop_letztermassnber0.ap_id,
    v_pop_letztermassnber0.id,
    max(v_pop_letztermassnber0.jahr) AS jahr
   FROM apflora.v_pop_letztermassnber0
  GROUP BY v_pop_letztermassnber0.ap_id, v_pop_letztermassnber0.id;




CREATE VIEW apflora.v_apber_c3rpop AS
 SELECT pop.ap_id,
    pop.id
   FROM ((apflora.v_pop_letztermassnber
     JOIN apflora.pop ON ((v_pop_letztermassnber.ap_id = pop.ap_id)))
     JOIN apflora.popmassnber ON (((pop.id = popmassnber.pop_id) AND (v_pop_letztermassnber.jahr = popmassnber.jahr) AND (v_pop_letztermassnber.id = popmassnber.pop_id))))
  WHERE (popmassnber.beurteilung = 1)
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_tpop_letztermassnber0 AS
 SELECT pop.ap_id,
    tpop.id,
    tpopmassnber.jahr
   FROM apflora._variable,
    (((apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN apflora.tpopmassnber ON ((tpop.id = tpopmassnber.tpop_id)))
     JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id)))
  WHERE ((tpopmassnber.jahr <= _variable.apber_jahr) AND (tpop.apber_relevant = 1) AND (tpopmassn.jahr <= _variable.apber_jahr) AND (pop.status <> 300) AND ((tpopmassnber.beurteilung >= 1) AND (tpopmassnber.beurteilung <= 5)));




CREATE VIEW apflora.v_tpop_letztermassnber AS
 SELECT v_tpop_letztermassnber0.ap_id,
    v_tpop_letztermassnber0.id,
    max(v_tpop_letztermassnber0.jahr) AS jahr
   FROM apflora.v_tpop_letztermassnber0
  GROUP BY v_tpop_letztermassnber0.ap_id, v_tpop_letztermassnber0.id;




CREATE VIEW apflora.v_apber_c3rtpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.pop
     JOIN ((apflora.v_tpop_letztermassnber
     JOIN apflora.tpopmassnber ON (((v_tpop_letztermassnber.id = tpopmassnber.tpop_id) AND (v_tpop_letztermassnber.jahr = tpopmassnber.jahr))))
     JOIN apflora.tpop ON ((tpopmassnber.tpop_id = tpop.id))) ON ((pop.id = tpop.pop_id)))
  WHERE (tpopmassnber.beurteilung = 1)
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_c4rpop AS
 SELECT pop.ap_id,
    pop.id
   FROM ((apflora.v_pop_letztermassnber
     JOIN apflora.pop ON ((v_pop_letztermassnber.ap_id = pop.ap_id)))
     JOIN apflora.popmassnber ON (((pop.id = popmassnber.pop_id) AND (v_pop_letztermassnber.jahr = popmassnber.jahr) AND (v_pop_letztermassnber.id = popmassnber.pop_id))))
  WHERE (popmassnber.beurteilung = 2)
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_c4rtpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.pop
     JOIN ((apflora.v_tpop_letztermassnber
     JOIN apflora.tpopmassnber ON (((v_tpop_letztermassnber.id = tpopmassnber.tpop_id) AND (v_tpop_letztermassnber.jahr = tpopmassnber.jahr))))
     JOIN apflora.tpop ON ((tpopmassnber.tpop_id = tpop.id))) ON ((pop.id = tpop.pop_id)))
  WHERE (tpopmassnber.beurteilung = 2)
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_c5rpop AS
 SELECT pop.ap_id,
    pop.id
   FROM ((apflora.v_pop_letztermassnber
     JOIN apflora.pop ON ((v_pop_letztermassnber.ap_id = pop.ap_id)))
     JOIN apflora.popmassnber ON (((pop.id = popmassnber.pop_id) AND (v_pop_letztermassnber.jahr = popmassnber.jahr) AND (v_pop_letztermassnber.id = popmassnber.pop_id))))
  WHERE (popmassnber.beurteilung = 3)
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_c5rtpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.pop
     JOIN ((apflora.v_tpop_letztermassnber
     JOIN apflora.tpopmassnber ON (((v_tpop_letztermassnber.id = tpopmassnber.tpop_id) AND (v_tpop_letztermassnber.jahr = tpopmassnber.jahr))))
     JOIN apflora.tpop ON ((tpopmassnber.tpop_id = tpop.id))) ON ((pop.id = tpop.pop_id)))
  WHERE (tpopmassnber.beurteilung = 3)
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_c6rpop AS
 SELECT pop.ap_id,
    pop.id
   FROM ((apflora.v_pop_letztermassnber
     JOIN apflora.pop ON ((v_pop_letztermassnber.ap_id = pop.ap_id)))
     JOIN apflora.popmassnber ON (((pop.id = popmassnber.pop_id) AND (v_pop_letztermassnber.id = popmassnber.pop_id) AND (v_pop_letztermassnber.jahr = popmassnber.jahr))))
  WHERE (popmassnber.beurteilung = 4)
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_c6rtpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.pop
     JOIN ((apflora.v_tpop_letztermassnber
     JOIN apflora.tpopmassnber ON (((v_tpop_letztermassnber.id = tpopmassnber.tpop_id) AND (v_tpop_letztermassnber.jahr = tpopmassnber.jahr))))
     JOIN apflora.tpop ON ((tpopmassnber.tpop_id = tpop.id))) ON ((pop.id = tpop.pop_id)))
  WHERE (tpopmassnber.beurteilung = 4)
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_apber_c7rpop AS
 SELECT pop.ap_id,
    pop.id
   FROM ((apflora.v_pop_letztermassnber
     JOIN apflora.pop ON ((v_pop_letztermassnber.ap_id = pop.ap_id)))
     JOIN apflora.popmassnber ON (((pop.id = popmassnber.pop_id) AND (v_pop_letztermassnber.id = popmassnber.pop_id) AND (v_pop_letztermassnber.jahr = popmassnber.jahr))))
  WHERE (popmassnber.beurteilung = 5)
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apber_c7rtpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.pop
     JOIN ((apflora.v_tpop_letztermassnber
     JOIN apflora.tpopmassnber ON (((v_tpop_letztermassnber.id = tpopmassnber.tpop_id) AND (v_tpop_letztermassnber.jahr = tpopmassnber.jahr))))
     JOIN apflora.tpop ON ((tpopmassnber.tpop_id = tpop.id))) ON ((pop.id = tpop.pop_id)))
  WHERE (tpopmassnber.beurteilung = 5)
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_erstemassnproap AS
 SELECT ap.id AS ap_id,
    min(tpopmassn.jahr) AS jahr
   FROM (((apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id)))
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id)))
  GROUP BY ap.id;




CREATE VIEW apflora.v_apber_injahr AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    apber.id,
    concat(adresse.name, ', ', adresse.adresse) AS bearbeiter,
    apberuebersicht.jahr AS apberuebersicht_jahr,
    apberuebersicht.bemerkungen,
    v_erstemassnproap.jahr AS jahr_erste_massnahme
   FROM ((apflora.ae_eigenschaften
     JOIN (apflora.ap
     LEFT JOIN apflora.v_erstemassnproap ON ((ap.id = v_erstemassnproap.ap_id))) ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN (((apflora.apber
     LEFT JOIN apflora.adresse ON ((apber.bearbeiter = adresse.id)))
     LEFT JOIN apflora.apberuebersicht ON ((apber.jahr = apberuebersicht.jahr)))
     JOIN apflora._variable ON ((apber.jahr = _variable.apber_jahr))) ON ((ap.id = apber.ap_id)))
  WHERE (ap.bearbeitung < 4)
  ORDER BY ae_eigenschaften.artname;




CREATE VIEW apflora.v_apber_pop_uebersicht AS
 SELECT ap.id,
    ae_eigenschaften.artname AS "Art",
    ( SELECT count(*) AS count
           FROM apflora.pop pop_1
          WHERE ((pop_1.ap_id = ae_eigenschaften.id) AND (pop_1.status = 100) AND (pop_1.id IN ( SELECT DISTINCT tpop.pop_id
                   FROM apflora.tpop
                  WHERE (tpop.apber_relevant = 1))))) AS "aktuellUrspruenglich",
    ( SELECT count(*) AS count
           FROM apflora.pop pop_1
          WHERE ((pop_1.ap_id = ae_eigenschaften.id) AND (pop_1.status = ANY (ARRAY[200, 210])) AND (pop_1.id IN ( SELECT DISTINCT tpop.pop_id
                   FROM apflora.tpop
                  WHERE (tpop.apber_relevant = 1))))) AS "aktuellAngesiedelt",
    ( SELECT count(*) AS count
           FROM apflora.pop pop_1
          WHERE ((pop_1.ap_id = ae_eigenschaften.id) AND (pop_1.status = ANY (ARRAY[100, 200, 210])) AND (pop_1.id IN ( SELECT DISTINCT tpop.pop_id
                   FROM apflora.tpop
                  WHERE (tpop.apber_relevant = 1))))) AS aktuell
   FROM (apflora.ae_eigenschaften
     JOIN (apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id))) ON ((ae_eigenschaften.id = ap.art_id)))
  WHERE ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3))
  GROUP BY ap.id, ae_eigenschaften.id, ae_eigenschaften.artname
  ORDER BY ae_eigenschaften.artname;




CREATE VIEW apflora.v_apber_uebe AS
 SELECT apber.id_old,
    apber.jahr,
    apber.situation,
    apber.vergleich_vorjahr_gesamtziel,
    apber.beurteilung,
    apber.veraenderung_zum_vorjahr,
    apber.apber_analyse,
    apber.konsequenzen_umsetzung,
    apber.konsequenzen_erfolgskontrolle,
    apber.biotope_neue,
    apber.biotope_optimieren,
    apber.massnahmen_optimieren,
    apber.wirkung_auf_art,
    apber.datum,
    apber.changed,
    apber.changed_by,
    apber.massnahmen_ap_bearb,
    apber.massnahmen_planung_vs_ausfuehrung,
    apber.id,
    apber.ap_id,
    apber.bearbeiter,
    ae_eigenschaften.artname,
    v_ap_anzmassnbisjahr.anzahl_massnahmen
   FROM (apflora._variable "tblKonstanten_1"
     JOIN ((apflora.ae_eigenschaften
     JOIN (apflora.ap
     JOIN apflora.v_ap_apberrelevant ON ((ap.id = v_ap_apberrelevant.id))) ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN (apflora._variable
     JOIN (apflora.apber
     JOIN apflora.v_ap_anzmassnbisjahr ON ((apber.ap_id = v_ap_anzmassnbisjahr.id))) ON ((_variable.apber_jahr = apber.jahr))) ON ((ap.id = apber.ap_id))) ON (("tblKonstanten_1".apber_jahr = v_ap_anzmassnbisjahr.jahr)))
  WHERE ((v_ap_anzmassnbisjahr.anzahl_massnahmen > (0)::numeric) AND (apber.beurteilung = 1) AND ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3)))
  ORDER BY ae_eigenschaften.artname;




CREATE VIEW apflora.v_apber_uebe_apid AS
 SELECT ap.id
   FROM (apflora._variable "tblKonstanten_1"
     JOIN ((apflora.ae_eigenschaften
     JOIN (apflora.ap
     JOIN apflora.v_ap_apberrelevant ON ((ap.id = v_ap_apberrelevant.id))) ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN (apflora._variable
     JOIN (apflora.apber
     JOIN apflora.v_ap_anzmassnbisjahr ON ((apber.ap_id = v_ap_anzmassnbisjahr.id))) ON ((_variable.apber_jahr = apber.jahr))) ON ((ap.id = apber.ap_id))) ON (("tblKonstanten_1".apber_jahr = v_ap_anzmassnbisjahr.jahr)))
  WHERE ((v_ap_anzmassnbisjahr.anzahl_massnahmen > (0)::numeric) AND (apber.beurteilung = 1) AND ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3)));




CREATE VIEW apflora.v_apber_uebkm AS
 SELECT ae_eigenschaften.artname,
        CASE
            WHEN (ae_eigenschaften.kefart = true) THEN 'Ja'::text
            ELSE ''::text
        END AS "FnsKefArt2",
        CASE
            WHEN (round((((_variable.apber_jahr - ae_eigenschaften.kefkontrolljahr) / 4))::numeric, 0) = (((_variable.apber_jahr - ae_eigenschaften.kefkontrolljahr) / 4))::numeric) THEN 'Ja'::text
            ELSE ''::text
        END AS "FnsKefKontrJahr2"
   FROM ((apflora.ae_eigenschaften
     JOIN ((apflora.v_ap_anzmassnbisjahr "vApAnzMassnBisJahr_1"
     JOIN apflora.ap ON (("vApAnzMassnBisJahr_1".id = ap.id)))
     JOIN apflora.v_ap_apberrelevant ON ((ap.id = v_ap_apberrelevant.id))) ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN (apflora.apber
     JOIN apflora._variable ON ((apber.jahr = _variable.apber_jahr))) ON (((_variable.apber_jahr = "vApAnzMassnBisJahr_1".jahr) AND (ap.id = apber.ap_id))))
  WHERE ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3) AND ("vApAnzMassnBisJahr_1".anzahl_massnahmen = '0'::numeric))
  ORDER BY ae_eigenschaften.artname;




CREATE VIEW apflora.v_apber_uebma AS
 SELECT ae_eigenschaften.artname,
    v_ap_anzmassnbisjahr.anzahl_massnahmen
   FROM (apflora._variable
     JOIN ((apflora.ae_eigenschaften
     JOIN (apflora.ap
     JOIN apflora.v_ap_apberrelevant ON ((ap.id = v_ap_apberrelevant.id))) ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN apflora.v_ap_anzmassnbisjahr ON ((ap.id = v_ap_anzmassnbisjahr.id))) ON ((_variable.apber_jahr = v_ap_anzmassnbisjahr.jahr)))
  WHERE ((v_ap_anzmassnbisjahr.anzahl_massnahmen > (0)::numeric) AND ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3)))
  ORDER BY ae_eigenschaften.artname;




CREATE VIEW apflora.v_apber_uebma_apid AS
 SELECT ap.id
   FROM (apflora._variable
     JOIN ((apflora.ae_eigenschaften
     JOIN (apflora.ap
     JOIN apflora.v_ap_apberrelevant ON ((ap.id = v_ap_apberrelevant.id))) ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN apflora.v_ap_anzmassnbisjahr ON ((ap.id = v_ap_anzmassnbisjahr.id))) ON ((_variable.apber_jahr = v_ap_anzmassnbisjahr.jahr)))
  WHERE ((v_ap_anzmassnbisjahr.anzahl_massnahmen > (0)::numeric) AND ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3)));




CREATE VIEW apflora.v_apber_uebme AS
 SELECT apber.id_old,
    apber.jahr,
    apber.situation,
    apber.vergleich_vorjahr_gesamtziel,
    apber.beurteilung,
    apber.veraenderung_zum_vorjahr,
    apber.apber_analyse,
    apber.konsequenzen_umsetzung,
    apber.konsequenzen_erfolgskontrolle,
    apber.biotope_neue,
    apber.biotope_optimieren,
    apber.massnahmen_optimieren,
    apber.wirkung_auf_art,
    apber.datum,
    apber.changed,
    apber.changed_by,
    apber.massnahmen_ap_bearb,
    apber.massnahmen_planung_vs_ausfuehrung,
    apber.id,
    apber.ap_id,
    apber.bearbeiter,
    ae_eigenschaften.artname
   FROM (apflora._variable "tblKonstanten_1"
     JOIN ((apflora.ae_eigenschaften
     JOIN (apflora.ap
     JOIN apflora.v_ap_apberrelevant ON ((ap.id = v_ap_apberrelevant.id))) ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN ((apflora.apber
     JOIN apflora.v_ap_anzmassnbisjahr ON ((apber.ap_id = v_ap_anzmassnbisjahr.id)))
     JOIN apflora._variable ON ((apber.jahr = _variable.apber_jahr))) ON ((ap.id = apber.ap_id))) ON (("tblKonstanten_1".apber_jahr = v_ap_anzmassnbisjahr.jahr)))
  WHERE ((apber.beurteilung = 5) AND (v_ap_anzmassnbisjahr.anzahl_massnahmen > (0)::numeric) AND ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3)))
  ORDER BY ae_eigenschaften.artname;




CREATE VIEW apflora.v_apber_uebme_apid AS
 SELECT ap.id
   FROM (apflora._variable "tblKonstanten_1"
     JOIN ((apflora.ae_eigenschaften
     JOIN (apflora.ap
     JOIN apflora.v_ap_apberrelevant ON ((ap.id = v_ap_apberrelevant.id))) ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN ((apflora.apber
     JOIN apflora.v_ap_anzmassnbisjahr ON ((apber.ap_id = v_ap_anzmassnbisjahr.id)))
     JOIN apflora._variable ON ((apber.jahr = _variable.apber_jahr))) ON ((ap.id = apber.ap_id))) ON (("tblKonstanten_1".apber_jahr = v_ap_anzmassnbisjahr.jahr)))
  WHERE ((apber.beurteilung = 5) AND (v_ap_anzmassnbisjahr.anzahl_massnahmen > (0)::numeric) AND ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3)));




CREATE VIEW apflora.v_apber_uebne_apid AS
 SELECT ap.id
   FROM (apflora._variable "tblKonstanten_1"
     JOIN ((apflora.ae_eigenschaften
     JOIN (apflora.ap
     JOIN apflora.v_ap_apberrelevant ON ((ap.id = v_ap_apberrelevant.id))) ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN ((apflora.apber
     JOIN apflora.v_ap_anzmassnbisjahr ON ((apber.ap_id = v_ap_anzmassnbisjahr.id)))
     JOIN apflora._variable ON ((apber.jahr = _variable.apber_jahr))) ON ((ap.id = apber.ap_id))) ON (("tblKonstanten_1".apber_jahr = v_ap_anzmassnbisjahr.jahr)))
  WHERE ((apber.beurteilung = 3) AND ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3)) AND (v_ap_anzmassnbisjahr.anzahl_massnahmen > (0)::numeric));




CREATE VIEW apflora.v_apber_uebse_apid AS
 SELECT ap.id
   FROM (apflora._variable "tblKonstanten_1"
     JOIN ((apflora.ae_eigenschaften
     JOIN (apflora.ap
     JOIN apflora.v_ap_apberrelevant ON ((ap.id = v_ap_apberrelevant.id))) ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN ((apflora.apber
     JOIN apflora.v_ap_anzmassnbisjahr ON ((apber.ap_id = v_ap_anzmassnbisjahr.id)))
     JOIN apflora._variable ON ((apber.jahr = _variable.apber_jahr))) ON ((ap.id = apber.ap_id))) ON (("tblKonstanten_1".apber_jahr = v_ap_anzmassnbisjahr.jahr)))
  WHERE ((apber.beurteilung = 4) AND (v_ap_anzmassnbisjahr.anzahl_massnahmen > (0)::numeric) AND ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3)));




CREATE VIEW apflora.v_apber_uebun_apid AS
 SELECT ap.id
   FROM (apflora._variable "tblKonstanten_1"
     JOIN ((apflora.ae_eigenschaften
     JOIN (apflora.ap
     JOIN apflora.v_ap_apberrelevant ON ((ap.id = v_ap_apberrelevant.id))) ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN ((apflora.apber
     JOIN apflora.v_ap_anzmassnbisjahr ON ((apber.ap_id = v_ap_anzmassnbisjahr.id)))
     JOIN apflora._variable ON ((apber.jahr = _variable.apber_jahr))) ON ((ap.id = apber.ap_id))) ON (("tblKonstanten_1".apber_jahr = v_ap_anzmassnbisjahr.jahr)))
  WHERE ((apber.beurteilung = 1168274204) AND (v_ap_anzmassnbisjahr.anzahl_massnahmen > (0)::numeric) AND ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3)));




CREATE VIEW apflora.v_apber_uebwe_apid AS
 SELECT ap.id
   FROM (apflora._variable "tblKonstanten_1"
     JOIN ((apflora.ae_eigenschaften
     JOIN (apflora.ap
     JOIN apflora.v_ap_apberrelevant ON ((ap.id = v_ap_apberrelevant.id))) ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN ((apflora.apber
     JOIN apflora.v_ap_anzmassnbisjahr ON ((apber.ap_id = v_ap_anzmassnbisjahr.id)))
     JOIN apflora._variable ON ((apber.jahr = _variable.apber_jahr))) ON ((ap.id = apber.ap_id))) ON (("tblKonstanten_1".apber_jahr = v_ap_anzmassnbisjahr.jahr)))
  WHERE ((apber.beurteilung = 6) AND (v_ap_anzmassnbisjahr.anzahl_massnahmen > (0)::numeric) AND ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3)));




CREATE VIEW apflora.v_apber_uebnb AS
 SELECT ap.id,
    ae_eigenschaften.artname
   FROM (apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
  WHERE ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3) AND (NOT (ap.id IN ( SELECT v_apber_uebse_apid.id
           FROM apflora.v_apber_uebse_apid))) AND (NOT (ap.id IN ( SELECT v_apber_uebe_apid.id
           FROM apflora.v_apber_uebe_apid))) AND (NOT (ap.id IN ( SELECT v_apber_uebme_apid.id
           FROM apflora.v_apber_uebme_apid))) AND (NOT (ap.id IN ( SELECT v_apber_uebwe_apid.id
           FROM apflora.v_apber_uebwe_apid))) AND (NOT (ap.id IN ( SELECT v_apber_uebne_apid.id
           FROM apflora.v_apber_uebne_apid))) AND (NOT (ap.id IN ( SELECT v_apber_uebun_apid.id
           FROM apflora.v_apber_uebun_apid))) AND (ap.id IN ( SELECT v_apber_uebma_apid.id
           FROM apflora.v_apber_uebma_apid)))
  ORDER BY ae_eigenschaften.artname;




CREATE VIEW apflora.v_apber_uebnb00 AS
 SELECT ap.id,
    apber.jahr
   FROM (apflora._variable "tblKonstanten_1"
     JOIN (((apflora.ap
     JOIN apflora.v_ap_anzmassnbisjahr ON ((ap.id = v_ap_anzmassnbisjahr.id)))
     JOIN apflora.v_ap_apberrelevant ON ((ap.id = v_ap_apberrelevant.id)))
     JOIN (apflora.apber
     JOIN apflora._variable ON ((apber.jahr = _variable.apber_jahr))) ON ((ap.id = apber.ap_id))) ON (("tblKonstanten_1".apber_jahr = v_ap_anzmassnbisjahr.jahr)))
  WHERE ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3) AND (apber.beurteilung IS NULL));




CREATE VIEW apflora.v_apber_uebnb000 AS
 SELECT ap.id,
    apber.jahr
   FROM ((((apflora.ap
     JOIN apflora.v_ap_anzmassnbisjahr ON ((ap.id = v_ap_anzmassnbisjahr.id)))
     JOIN apflora.v_ap_apberrelevant ON ((ap.id = v_ap_apberrelevant.id)))
     LEFT JOIN apflora.apber ON ((ap.id = apber.ap_id)))
     JOIN apflora._variable ON ((v_ap_anzmassnbisjahr.jahr = _variable.apber_jahr)))
  WHERE ((apber.ap_id IS NULL) AND ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3)));




CREATE VIEW apflora.v_apber_uebnb0 AS
 SELECT v_apber_uebnb000.id,
    v_apber_uebnb000.jahr
   FROM apflora.v_apber_uebnb000
UNION
 SELECT v_apber_uebnb00.id,
    v_apber_uebnb00.jahr
   FROM apflora.v_apber_uebnb00;




CREATE VIEW apflora.v_apber_uebne AS
 SELECT apber.id_old,
    apber.jahr,
    apber.situation,
    apber.vergleich_vorjahr_gesamtziel,
    apber.beurteilung,
    apber.veraenderung_zum_vorjahr,
    apber.apber_analyse,
    apber.konsequenzen_umsetzung,
    apber.konsequenzen_erfolgskontrolle,
    apber.biotope_neue,
    apber.biotope_optimieren,
    apber.massnahmen_optimieren,
    apber.wirkung_auf_art,
    apber.datum,
    apber.changed,
    apber.changed_by,
    apber.massnahmen_ap_bearb,
    apber.massnahmen_planung_vs_ausfuehrung,
    apber.id,
    apber.ap_id,
    apber.bearbeiter,
    ae_eigenschaften.artname
   FROM (apflora._variable "tblKonstanten_1"
     JOIN ((apflora.ae_eigenschaften
     JOIN (apflora.ap
     JOIN apflora.v_ap_apberrelevant ON ((ap.id = v_ap_apberrelevant.id))) ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN ((apflora.apber
     JOIN apflora.v_ap_anzmassnbisjahr ON ((apber.ap_id = v_ap_anzmassnbisjahr.id)))
     JOIN apflora._variable ON ((apber.jahr = _variable.apber_jahr))) ON ((ap.id = apber.ap_id))) ON (("tblKonstanten_1".apber_jahr = v_ap_anzmassnbisjahr.jahr)))
  WHERE ((apber.beurteilung = 3) AND ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3)) AND (v_ap_anzmassnbisjahr.anzahl_massnahmen > (0)::numeric))
  ORDER BY ae_eigenschaften.artname;




CREATE VIEW apflora.v_apber_uebse AS
 SELECT apber.id_old,
    apber.jahr,
    apber.situation,
    apber.vergleich_vorjahr_gesamtziel,
    apber.beurteilung,
    apber.veraenderung_zum_vorjahr,
    apber.apber_analyse,
    apber.konsequenzen_umsetzung,
    apber.konsequenzen_erfolgskontrolle,
    apber.biotope_neue,
    apber.biotope_optimieren,
    apber.massnahmen_optimieren,
    apber.wirkung_auf_art,
    apber.datum,
    apber.changed,
    apber.changed_by,
    apber.massnahmen_ap_bearb,
    apber.massnahmen_planung_vs_ausfuehrung,
    apber.id,
    apber.ap_id,
    apber.bearbeiter,
    ae_eigenschaften.artname
   FROM (apflora._variable "tblKonstanten_1"
     JOIN ((apflora.ae_eigenschaften
     JOIN (apflora.ap
     JOIN apflora.v_ap_apberrelevant ON ((ap.id = v_ap_apberrelevant.id))) ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN ((apflora.apber
     JOIN apflora.v_ap_anzmassnbisjahr ON ((apber.ap_id = v_ap_anzmassnbisjahr.id)))
     JOIN apflora._variable ON ((apber.jahr = _variable.apber_jahr))) ON ((ap.id = apber.ap_id))) ON (("tblKonstanten_1".apber_jahr = v_ap_anzmassnbisjahr.jahr)))
  WHERE ((apber.beurteilung = 4) AND (v_ap_anzmassnbisjahr.anzahl_massnahmen > (0)::numeric) AND ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3)))
  ORDER BY ae_eigenschaften.artname;




CREATE VIEW apflora.v_apber_uebun AS
 SELECT apber.id_old,
    apber.jahr,
    apber.situation,
    apber.vergleich_vorjahr_gesamtziel,
    apber.beurteilung,
    apber.veraenderung_zum_vorjahr,
    apber.apber_analyse,
    apber.konsequenzen_umsetzung,
    apber.konsequenzen_erfolgskontrolle,
    apber.biotope_neue,
    apber.biotope_optimieren,
    apber.massnahmen_optimieren,
    apber.wirkung_auf_art,
    apber.datum,
    apber.changed,
    apber.changed_by,
    apber.massnahmen_ap_bearb,
    apber.massnahmen_planung_vs_ausfuehrung,
    apber.id,
    apber.ap_id,
    apber.bearbeiter,
    ae_eigenschaften.artname
   FROM (apflora._variable "tblKonstanten_1"
     JOIN ((apflora.ae_eigenschaften
     JOIN (apflora.ap
     JOIN apflora.v_ap_apberrelevant ON ((ap.id = v_ap_apberrelevant.id))) ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN ((apflora.apber
     JOIN apflora.v_ap_anzmassnbisjahr ON ((apber.ap_id = v_ap_anzmassnbisjahr.id)))
     JOIN apflora._variable ON ((apber.jahr = _variable.apber_jahr))) ON ((ap.id = apber.ap_id))) ON (("tblKonstanten_1".apber_jahr = v_ap_anzmassnbisjahr.jahr)))
  WHERE ((apber.beurteilung = 1168274204) AND (v_ap_anzmassnbisjahr.anzahl_massnahmen > (0)::numeric) AND ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3)))
  ORDER BY ae_eigenschaften.artname;




CREATE VIEW apflora.v_apber_uebwe AS
 SELECT apber.id_old,
    apber.jahr,
    apber.situation,
    apber.vergleich_vorjahr_gesamtziel,
    apber.beurteilung,
    apber.veraenderung_zum_vorjahr,
    apber.apber_analyse,
    apber.konsequenzen_umsetzung,
    apber.konsequenzen_erfolgskontrolle,
    apber.biotope_neue,
    apber.biotope_optimieren,
    apber.massnahmen_optimieren,
    apber.wirkung_auf_art,
    apber.datum,
    apber.changed,
    apber.changed_by,
    apber.massnahmen_ap_bearb,
    apber.massnahmen_planung_vs_ausfuehrung,
    apber.id,
    apber.ap_id,
    apber.bearbeiter,
    ae_eigenschaften.artname
   FROM (apflora._variable "tblKonstanten_1"
     JOIN ((apflora.ae_eigenschaften
     JOIN (apflora.ap
     JOIN apflora.v_ap_apberrelevant ON ((ap.id = v_ap_apberrelevant.id))) ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN ((apflora.apber
     JOIN apflora.v_ap_anzmassnbisjahr ON ((apber.ap_id = v_ap_anzmassnbisjahr.id)))
     JOIN apflora._variable ON ((apber.jahr = _variable.apber_jahr))) ON ((ap.id = apber.ap_id))) ON (("tblKonstanten_1".apber_jahr = v_ap_anzmassnbisjahr.jahr)))
  WHERE ((apber.beurteilung = 6) AND (v_ap_anzmassnbisjahr.anzahl_massnahmen > (0)::numeric) AND ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3)))
  ORDER BY ae_eigenschaften.artname;




CREATE VIEW apflora.v_apber_uet01 AS
 SELECT ap.id,
    ae_eigenschaften.artname,
        CASE
            WHEN (NOT (ap.id IN ( SELECT v_apber_uebma_apid.id
               FROM apflora.v_apber_uebma_apid))) THEN 1
            ELSE 0
        END AS "keineMassnahmen",
        CASE
            WHEN (ae_eigenschaften.kefart = true) THEN 1
            ELSE 0
        END AS "FnsKefArt",
        CASE
            WHEN (round((((_variable.apber_jahr - ae_eigenschaften.kefkontrolljahr) / 4))::numeric, 0) = (((_variable.apber_jahr - ae_eigenschaften.kefkontrolljahr) / 4))::numeric) THEN 1
            ELSE 0
        END AS "FnsKefKontrJahr"
   FROM (apflora.ae_eigenschaften
     JOIN ((apflora.ap
     JOIN (apflora.v_ap_anzmassnbisjahr
     JOIN apflora._variable ON ((v_ap_anzmassnbisjahr.jahr = _variable.apber_jahr))) ON ((ap.id = v_ap_anzmassnbisjahr.id)))
     JOIN apflora.v_ap_apberrelevant ON ((ap.id = v_ap_apberrelevant.id))) ON ((ae_eigenschaften.id = ap.art_id)))
  WHERE ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3))
  ORDER BY ae_eigenschaften.artname;




CREATE VIEW apflora.v_apber_uet_veraengegenvorjahr AS
 SELECT ap.id,
    apber.veraenderung_zum_vorjahr,
    apber.jahr
   FROM (apflora.ap
     LEFT JOIN apflora.apber ON ((ap.id = apber.ap_id)))
  WHERE ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3) AND ((apber.jahr IN ( SELECT _variable.apber_jahr
           FROM apflora._variable)) OR (apber.jahr IS NULL)));




CREATE TABLE apflora.zielber (
    id_old integer,
    jahr smallint,
    erreichung text,
    bemerkungen text,
    changed date DEFAULT now(),
    changed_by character varying(20) DEFAULT current_setting('request.jwt.claim.username'::text, true),
    id uuid DEFAULT public.uuid_generate_v1mc() NOT NULL,
    ziel_id uuid
);




COMMENT ON COLUMN apflora.zielber.id_old IS 'frühere id';



COMMENT ON COLUMN apflora.zielber.jahr IS 'Für welches Jahr gilt der Bericht?';



COMMENT ON COLUMN apflora.zielber.erreichung IS 'Beurteilung der Zielerreichung';



COMMENT ON COLUMN apflora.zielber.bemerkungen IS 'Bemerkungen zur Zielerreichung';



COMMENT ON COLUMN apflora.zielber.changed IS 'Wann wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.zielber.changed_by IS 'Von wem wurde der Datensatz zuletzt geändert?';



COMMENT ON COLUMN apflora.zielber.id IS 'Primärschlüssel';



COMMENT ON COLUMN apflora.zielber.ziel_id IS 'Zugehöriges Ziel. Fremdschlüssel aus der Tabelle "ziel"';



CREATE VIEW apflora.v_apber_zielber AS
 SELECT zielber.id_old,
    zielber.jahr,
    zielber.erreichung,
    zielber.bemerkungen,
    zielber.changed,
    zielber.changed_by,
    zielber.id,
    zielber.ziel_id
   FROM (apflora.zielber
     JOIN apflora._variable ON ((zielber.jahr = _variable.apber_jahr)));




CREATE VIEW apflora.v_apbera1lpop AS
 SELECT pop.ap_id,
    pop.id
   FROM (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, pop.id;




CREATE VIEW apflora.v_apbera1ltpop AS
 SELECT pop.ap_id,
    tpop.id
   FROM (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((tpop.apber_relevant = 1) AND (pop.status IS NOT NULL) AND (pop.status <> 300) AND (tpop.status <> 300) AND (tpop.status IS NOT NULL))
  GROUP BY pop.ap_id, tpop.id;




CREATE VIEW apflora.v_assozart AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    adresse.name AS ap_bearbeiter,
    assozart.id,
    "ArtenDb_Arteigenschaften_1".artname AS artname_assoziiert,
    assozart.bemerkungen,
    assozart.changed,
    assozart.changed_by
   FROM (apflora.ae_eigenschaften "ArtenDb_Arteigenschaften_1"
     RIGHT JOIN (((((apflora.ae_eigenschaften
     RIGHT JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.adresse ON ((ap.bearbeiter = adresse.id)))
     RIGHT JOIN apflora.assozart ON ((ap.id = assozart.ap_id))) ON (("ArtenDb_Arteigenschaften_1".id = assozart.ae_id)))
  ORDER BY ae_eigenschaften.artname;




CREATE VIEW apflora.v_auswapbearbmassninjahr0 AS
 SELECT adresse.name AS bearbeiter,
    ae_eigenschaften.artname,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    tpop.nr AS tpop_nr,
    tpop.gemeinde AS tpop_gemeinde,
    tpop.flurname AS tpop_flurname,
    tpopmassn.jahr,
    tpopmassn_typ_werte.text AS typ,
    tpopmassn.beschreibung,
    tpopmassn.datum,
    tpopmassn.bemerkungen,
    tpopmassn.plan_vorhanden,
    tpopmassn.plan_bezeichnung,
    tpopmassn.flaeche,
    tpopmassn.markierung,
    tpopmassn.anz_triebe,
    tpopmassn.anz_pflanzen,
    tpopmassn.anz_pflanzstellen,
    tpopmassn.wirtspflanze,
    tpopmassn.herkunft_pop,
    tpopmassn.sammeldatum,
    tpopmassn.form,
    tpopmassn.pflanzanordnung
   FROM ((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN ((apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN ((apflora.tpopmassn
     LEFT JOIN apflora.adresse ON ((tpopmassn.bearbeiter = adresse.id)))
     JOIN apflora.tpopmassn_typ_werte ON ((tpopmassn.typ = tpopmassn_typ_werte.code))) ON ((tpop.id = tpopmassn.tpop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3))
  ORDER BY adresse.name, ae_eigenschaften.artname, pop.nr, pop.name, tpop.nr, tpop.gemeinde, tpop.flurname;




CREATE VIEW apflora.v_beob AS
 SELECT beob.id,
    beob_quelle_werte.name AS quelle,
    beob.id_field,
    (beob.data ->> (( SELECT beob_1.id_field
           FROM apflora.beob beob_1
          WHERE (beob_1.id = beob2.id)))::text) AS "OriginalId",
    beob.art_id,
    ae_eigenschaften.artname AS "Artname",
    pop.id AS pop_id,
    pop.nr AS pop_nr,
    tpop.id AS tpop_id,
    tpop.nr AS tpop_nr,
    beob.x,
    beob.y,
        CASE
            WHEN ((beob.x > 0) AND (tpop.x > 0) AND (beob.y > 0) AND (tpop.y > 0)) THEN round(sqrt((power(((beob.x - tpop.x))::double precision, (2)::double precision) + power(((beob.y - tpop.y))::double precision, (2)::double precision))))
            ELSE NULL::double precision
        END AS distanz_zur_teilpopulation,
    beob.datum,
    beob.autor,
    beob.nicht_zuordnen,
    beob.bemerkungen,
    beob.changed,
    beob.changed_by
   FROM (((((apflora.beob
     JOIN apflora.beob beob2 ON ((beob2.id = beob.id)))
     JOIN (apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ap.art_id = ae_eigenschaften.id))) ON ((beob.art_id = ae_eigenschaften.id)))
     JOIN apflora.beob_quelle_werte ON ((beob.quelle_id = beob_quelle_werte.id)))
     LEFT JOIN apflora.tpop ON ((tpop.id = beob.tpop_id)))
     LEFT JOIN apflora.pop ON ((pop.id = tpop.pop_id)))
  WHERE (ae_eigenschaften.taxid > 150)
  ORDER BY ae_eigenschaften.artname, pop.nr, tpop.nr, beob.datum DESC;




CREATE VIEW apflora.v_beob__mit_data AS
 SELECT beob.id,
    beob_quelle_werte.name AS quelle,
    beob.id_field,
    (beob.data ->> (( SELECT beob_1.id_field
           FROM apflora.beob beob_1
          WHERE (beob_1.id = beob2.id)))::text) AS "OriginalId",
    beob.art_id,
    ae_eigenschaften.artname AS "Artname",
    pop.id AS pop_id,
    pop.nr AS pop_nr,
    tpop.id AS tpop_id,
    tpop.nr AS tpop_nr,
    beob.x,
    beob.y,
        CASE
            WHEN ((beob.x > 0) AND (tpop.x > 0) AND (beob.y > 0) AND (tpop.y > 0)) THEN round(sqrt((power(((beob.x - tpop.x))::double precision, (2)::double precision) + power(((beob.y - tpop.y))::double precision, (2)::double precision))))
            ELSE NULL::double precision
        END AS "Distanz zur Teilpopulation (m)",
    beob.datum,
    beob.autor,
    beob.nicht_zuordnen,
    beob.bemerkungen,
    beob.changed,
    beob.changed_by,
    beob.data AS "Originaldaten"
   FROM (((((apflora.beob
     JOIN apflora.beob beob2 ON ((beob2.id = beob.id)))
     JOIN (apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ap.art_id = ae_eigenschaften.id))) ON ((beob.art_id = ae_eigenschaften.id)))
     JOIN apflora.beob_quelle_werte ON ((beob.quelle_id = beob_quelle_werte.id)))
     LEFT JOIN apflora.tpop ON ((tpop.id = beob.tpop_id)))
     LEFT JOIN apflora.pop ON ((pop.id = tpop.pop_id)))
  WHERE (ae_eigenschaften.taxid > 150)
  ORDER BY ae_eigenschaften.artname, pop.nr, tpop.nr, beob.datum DESC;




CREATE VIEW apflora.v_ber AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    adresse.name AS ap_bearbeiter,
    ber.id,
    ber.autor,
    ber.jahr,
    ber.titel,
    ber.url,
    ber.changed,
    ber.changed_by
   FROM (((((apflora.ae_eigenschaften
     RIGHT JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.adresse ON ((ap.bearbeiter = adresse.id)))
     RIGHT JOIN apflora.ber ON ((ap.id = ber.ap_id)))
  ORDER BY ae_eigenschaften.artname;




CREATE VIEW apflora.v_bertpopfuerangezeigteap0 AS
 SELECT ap.id AS ap_id,
    pop.id AS pop_id,
    tpop.id AS tpop_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    pop_status_werte.text AS pop_status,
    pop.bekannt_seit,
    tpop.nr AS tpop_nr,
    tpop.gemeinde AS tpop_gemeinde,
    tpop.flurname AS tpop_flurname,
    tpop.x AS tpop_x,
    tpop.y AS tpop_y,
    tpop.bekannt_seit AS tpop_bekannt_seit,
    pop_status_werte_2.text AS tpop_status,
    tpop.apber_relevant
   FROM (((((apflora.ae_eigenschaften
     JOIN ((apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id)))
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ae_eigenschaften.id = ap.art_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     LEFT JOIN apflora.pop_status_werte pop_status_werte_2 ON ((tpop.status = pop_status_werte_2.code)));




CREATE VIEW apflora.v_datenstruktur AS
 SELECT tables.table_schema AS "Tabelle: Schema",
    tables.table_name AS "Tabelle: Name",
    public.dsql2((((('select count(*) from "'::text || (tables.table_schema)::text) || '"."'::text) || (tables.table_name)::text) || '"'::text)) AS "Tabelle: Anzahl Datensaetze",
    columns.column_name AS "Feld: Name",
    columns.column_default AS "Feld: Standardwert",
    columns.data_type AS "Feld: Datentyp",
    columns.is_nullable AS "Feld: Nullwerte"
   FROM (information_schema.tables
     JOIN information_schema.columns ON ((((tables.table_name)::text = (columns.table_name)::text) AND ((tables.table_schema)::text = (columns.table_schema)::text))))
  WHERE ((tables.table_schema)::text = 'apflora'::text)
  ORDER BY tables.table_schema, tables.table_name, columns.column_name;




CREATE VIEW apflora.v_erfkrit AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    adresse.name AS ap_bearbeiter,
    erfkrit.id,
    ap_erfkrit_werte.text AS beurteilung,
    erfkrit.kriterien,
    erfkrit.changed,
    erfkrit.changed_by
   FROM ((((((apflora.ae_eigenschaften
     RIGHT JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.adresse ON ((ap.bearbeiter = adresse.id)))
     RIGHT JOIN apflora.erfkrit ON ((ap.id = erfkrit.ap_id)))
     LEFT JOIN apflora.ap_erfkrit_werte ON ((erfkrit.erfolg = ap_erfkrit_werte.code)))
  ORDER BY ae_eigenschaften.artname;




CREATE VIEW apflora.v_exportevab_beob AS
SELECT
    NULL::uuid AS "fkZeitpunkt",
    NULL::uuid AS "idBeobachtung",
    NULL::uuid AS fkautor,
    NULL::uuid AS fkart,
    NULL::integer AS fkartgruppe,
    NULL::integer AS fkaa1,
    NULL::integer AS "fkAAINTRODUIT",
    NULL::integer AS "fkAAPRESENCE",
    NULL::text AS "MENACES",
    NULL::text AS "VITALITE_PLANTE",
    NULL::text AS "STATION",
    NULL::text AS "ABONDANCE",
    NULL::text AS "EXPERTISE_INTRODUIT",
    NULL::text AS "EXPERTISE_INTRODUITE_NOM";




CREATE VIEW apflora.v_tpopkontr_maxanzahl AS
 SELECT tpopkontr.id,
    max(tpopkontrzaehl.anzahl) AS anzahl
   FROM (apflora.tpopkontr
     JOIN apflora.tpopkontrzaehl ON ((tpopkontr.id = tpopkontrzaehl.tpopkontr_id)))
  GROUP BY tpopkontr.id
  ORDER BY tpopkontr.id;




CREATE VIEW apflora.v_exportevab_projekt AS
 SELECT ap.id AS "idProjekt",
    concat('AP Flora ZH: ', ae_eigenschaften.artname) AS "Name",
        CASE
            WHEN (ap.start_jahr IS NOT NULL) THEN concat('01.01.', ap.start_jahr)
            ELSE to_char((('now'::text)::date)::timestamp with time zone, 'DD.MM.YYYY'::text)
        END AS "Eroeffnung",
    '7c71b8af-df3e-4844-a83b-55735f80b993'::uuid AS "fkAutor",
    concat('Aktionsplan: ', ap_bearbstand_werte.text,
        CASE
            WHEN (ap.start_jahr IS NOT NULL) THEN concat('; Start im Jahr: ', ap.start_jahr)
            ELSE ''::text
        END,
        CASE
            WHEN (ap.umsetzung IS NOT NULL) THEN concat('; Stand Umsetzung: ', ap_umsetzung_werte.text)
            ELSE ''::text
        END, '') AS "Bemerkungen"
   FROM ((((apflora.ap
     JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     JOIN apflora.ae_eigenschaften ON ((ap.art_id = ae_eigenschaften.id)))
     JOIN ((apflora.pop
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     JOIN (apflora.tpop
     JOIN ((apflora.tpopkontr
     JOIN apflora.v_tpopkontr_maxanzahl ON ((v_tpopkontr_maxanzahl.id = tpopkontr.id)))
     LEFT JOIN apflora.adresse ON ((tpopkontr.bearbeiter = adresse.id))) ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((ae_eigenschaften.taxid > 150) AND (ae_eigenschaften.taxid < 1000000) AND (tpop.x IS NOT NULL) AND (tpop.y IS NOT NULL) AND ((tpopkontr.typ)::text = ANY (ARRAY[('Ausgangszustand'::character varying)::text, ('Zwischenbeurteilung'::character varying)::text, ('Freiwilligen-Erfolgskontrolle'::character varying)::text])) AND (tpop.status <> 201) AND (tpopkontr.bearbeiter IS NOT NULL) AND (tpopkontr.bearbeiter <> 'a1146ae4-4e03-4032-8aa8-bc46ba02f468'::uuid) AND (tpopkontr.jahr IS NOT NULL) AND ((tpopkontr.jahr)::double precision <> date_part('year'::text, ('now'::text)::date)) AND (tpop.bekannt_seit IS NOT NULL) AND ((tpop.status = ANY (ARRAY[100, 101])) OR ((tpopkontr.jahr - tpop.bekannt_seit) > 5)) AND (tpop.flurname IS NOT NULL))
  GROUP BY ae_eigenschaften.artname, ap.id, ap.start_jahr, ap.umsetzung, ap_bearbstand_werte.text, ap_umsetzung_werte.text;




CREATE VIEW apflora.v_exportevab_raum AS
 SELECT ap.id AS "fkProjekt",
    pop.id AS "idRaum",
    concat(pop.name,
        CASE
            WHEN (pop.nr IS NOT NULL) THEN concat(' (Nr. ', pop.nr, ')')
            ELSE ''::text
        END) AS "Name",
    to_char((('now'::text)::date)::timestamp with time zone, 'DD.MM.YYYY'::text) AS "Erfassungsdatum",
    '7c71b8af-df3e-4844-a83b-55735f80b993'::uuid AS "fkAutor",
        CASE
            WHEN (pop.status IS NOT NULL) THEN concat('Status: ', "popHerkunft".text,
            CASE
                WHEN (pop.bekannt_seit IS NOT NULL) THEN concat('; Bekannt seit: ', pop.bekannt_seit)
                ELSE ''::text
            END)
            ELSE ''::text
        END AS "Bemerkungen"
   FROM ((apflora.ap
     JOIN ((apflora.pop
     LEFT JOIN apflora.pop_status_werte "popHerkunft" ON ((pop.status = "popHerkunft".code)))
     JOIN (apflora.tpop
     JOIN ((apflora.tpopkontr
     JOIN apflora.v_tpopkontr_maxanzahl ON ((v_tpopkontr_maxanzahl.id = tpopkontr.id)))
     LEFT JOIN apflora.adresse ON ((tpopkontr.bearbeiter = adresse.id))) ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
     JOIN apflora.ae_eigenschaften ON ((ae_eigenschaften.id = ap.art_id)))
  WHERE ((ae_eigenschaften.taxid > 150) AND (ae_eigenschaften.taxid < 1000000) AND (tpop.x IS NOT NULL) AND (tpop.y IS NOT NULL) AND ((tpopkontr.typ)::text = ANY (ARRAY[('Ausgangszustand'::character varying)::text, ('Zwischenbeurteilung'::character varying)::text, ('Freiwilligen-Erfolgskontrolle'::character varying)::text])) AND (tpop.status <> 201) AND (tpopkontr.bearbeiter IS NOT NULL) AND (tpopkontr.bearbeiter <> 'a1146ae4-4e03-4032-8aa8-bc46ba02f468'::uuid) AND (tpopkontr.jahr IS NOT NULL) AND ((tpopkontr.jahr)::double precision <> date_part('year'::text, ('now'::text)::date)) AND (tpop.bekannt_seit IS NOT NULL) AND ((tpop.status = ANY (ARRAY[100, 101])) OR ((tpopkontr.jahr - tpop.bekannt_seit) > 5)) AND (tpop.flurname IS NOT NULL) AND (ap.id IN ( SELECT v_exportevab_projekt."idProjekt"
           FROM apflora.v_exportevab_projekt)))
  GROUP BY ap.id, pop.id, pop.name, pop.nr, pop.status, "popHerkunft".text, pop.bekannt_seit;




CREATE VIEW apflora.v_exportevab_ort AS
 SELECT tpop.id AS "TPopGuid",
    pop.id AS "fkRaum",
    tpop.id AS "idOrt",
    "substring"(concat(tpop.flurname,
        CASE
            WHEN (tpop.nr IS NOT NULL) THEN concat(' (Nr. ', tpop.nr, ')')
            ELSE ''::text
        END), 1, 40) AS "Name",
    to_char((('now'::text)::date)::timestamp with time zone, 'DD.MM.YYYY'::text) AS "Erfassungsdatum",
    '7c71b8af-df3e-4844-a83b-55735f80b993'::uuid AS "fkAutor",
    ("substring"(max((evab_typologie."TYPO")::text), 1, 9))::character varying(10) AS "fkLebensraumtyp",
    1 AS "fkGenauigkeitLage",
    1 AS "fkGeometryType",
        CASE
            WHEN (tpop.hoehe IS NOT NULL) THEN (tpop.hoehe)::integer
            ELSE 0
        END AS "obergrenzeHoehe",
    4 AS "fkGenauigkeitHoehe",
    tpop.x AS "X",
    tpop.y AS "Y",
    "substring"(tpop.gemeinde, 1, 25) AS "NOM_COMMUNE",
    "substring"(tpop.flurname, 1, 255) AS "DESC_LOCALITE",
    max(tpopkontr.lr_umgebung_delarze) AS "ENV",
        CASE
            WHEN (tpop.status IS NOT NULL) THEN concat('Status: ', pop_status_werte.text,
            CASE
                WHEN (tpop.bekannt_seit IS NOT NULL) THEN concat('; Bekannt seit: ', tpop.bekannt_seit)
                ELSE ''::text
            END)
            ELSE ''::text
        END AS "Bemerkungen"
   FROM ((apflora.ap
     JOIN (apflora.pop
     JOIN ((apflora.tpop
     LEFT JOIN apflora.pop_status_werte ON ((tpop.status = pop_status_werte.code)))
     JOIN (((apflora.tpopkontr
     JOIN apflora.v_tpopkontr_maxanzahl ON ((v_tpopkontr_maxanzahl.id = tpopkontr.id)))
     LEFT JOIN apflora.adresse ON ((tpopkontr.bearbeiter = adresse.id)))
     LEFT JOIN apflora.evab_typologie ON ((tpopkontr.lr_delarze = (evab_typologie."TYPO")::text))) ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
     JOIN apflora.ae_eigenschaften ON ((ae_eigenschaften.id = ap.art_id)))
  WHERE ((ae_eigenschaften.taxid > 150) AND (ae_eigenschaften.taxid < 1000000) AND (tpop.x IS NOT NULL) AND (tpop.y IS NOT NULL) AND ((tpopkontr.typ)::text = ANY (ARRAY[('Ausgangszustand'::character varying)::text, ('Zwischenbeurteilung'::character varying)::text, ('Freiwilligen-Erfolgskontrolle'::character varying)::text])) AND (tpop.status <> 201) AND (tpopkontr.bearbeiter IS NOT NULL) AND (tpopkontr.bearbeiter <> 'a1146ae4-4e03-4032-8aa8-bc46ba02f468'::uuid) AND (tpopkontr.jahr IS NOT NULL) AND ((tpopkontr.jahr)::double precision <> date_part('year'::text, ('now'::text)::date)) AND (tpop.bekannt_seit IS NOT NULL) AND ((tpop.status = ANY (ARRAY[100, 101])) OR ((tpopkontr.jahr - tpop.bekannt_seit) > 5)) AND (tpop.flurname IS NOT NULL) AND (ap.id IN ( SELECT v_exportevab_projekt."idProjekt"
           FROM apflora.v_exportevab_projekt)) AND (pop.id IN ( SELECT v_exportevab_raum."idRaum"
           FROM apflora.v_exportevab_raum)))
  GROUP BY pop.id, tpop.id, tpop.nr, tpop.bekannt_seit, tpop.flurname, tpop.status, pop_status_werte.text, tpop.hoehe, tpop.x, tpop.y, tpop.gemeinde;




CREATE VIEW apflora.v_exportevab_zeit AS
 SELECT tpop.id AS "fkOrt",
    tpopkontr.zeit_id AS "idZeitpunkt",
        CASE
            WHEN (tpopkontr.datum IS NOT NULL) THEN to_char((tpopkontr.datum)::timestamp with time zone, 'DD.MM.YYYY'::text)
            ELSE concat('01.01.', tpopkontr.jahr)
        END AS "Datum",
        CASE
            WHEN (tpopkontr.datum IS NOT NULL) THEN 'T'::character varying(10)
            ELSE 'J'::character varying(10)
        END AS "fkGenauigkeitDatum",
        CASE
            WHEN (tpopkontr.datum IS NOT NULL) THEN 'P'::character varying(10)
            ELSE 'X'::character varying(10)
        END AS "fkGenauigkeitDatumZDSF",
    "substring"((tpopkontr.moosschicht)::text, 1, 10) AS "COUV_MOUSSES",
    "substring"((tpopkontr.krautschicht)::text, 1, 10) AS "COUV_HERBACEES",
    "substring"(tpopkontr.strauchschicht, 1, 10) AS "COUV_BUISSONS",
    "substring"((tpopkontr.baumschicht)::text, 1, 10) AS "COUV_ARBRES"
   FROM ((apflora.ap
     JOIN (apflora.pop
     JOIN ((apflora.tpop
     LEFT JOIN apflora.pop_status_werte tpop_status_werte ON ((tpop.status = tpop_status_werte.code)))
     JOIN ((apflora.tpopkontr
     JOIN apflora.v_tpopkontr_maxanzahl ON ((v_tpopkontr_maxanzahl.id = tpopkontr.id)))
     LEFT JOIN apflora.adresse ON ((tpopkontr.bearbeiter = adresse.id))) ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
     JOIN apflora.ae_eigenschaften ON ((ae_eigenschaften.id = ap.art_id)))
  WHERE ((ae_eigenschaften.taxid > 150) AND (ae_eigenschaften.taxid < 1000000) AND (tpop.x IS NOT NULL) AND (tpop.y IS NOT NULL) AND ((tpopkontr.typ)::text = ANY (ARRAY[('Ausgangszustand'::character varying)::text, ('Zwischenbeurteilung'::character varying)::text, ('Freiwilligen-Erfolgskontrolle'::character varying)::text])) AND (tpop.status <> 201) AND (tpopkontr.bearbeiter IS NOT NULL) AND (tpopkontr.bearbeiter <> 'a1146ae4-4e03-4032-8aa8-bc46ba02f468'::uuid) AND (tpopkontr.jahr IS NOT NULL) AND ((tpopkontr.jahr)::double precision <> date_part('year'::text, ('now'::text)::date)) AND (tpop.bekannt_seit IS NOT NULL) AND ((tpop.status = ANY (ARRAY[100, 101])) OR ((tpopkontr.jahr - tpop.bekannt_seit) > 5)) AND (tpop.flurname IS NOT NULL) AND (ap.id IN ( SELECT v_exportevab_projekt."idProjekt"
           FROM apflora.v_exportevab_projekt)) AND (pop.id IN ( SELECT v_exportevab_raum."idRaum"
           FROM apflora.v_exportevab_raum)) AND (tpop.id IN ( SELECT v_exportevab_ort."idOrt"
           FROM apflora.v_exportevab_ort)));




CREATE VIEW apflora.v_idealbiotop AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    adresse.name AS ap_bearbeiter,
    ap.changed AS ap_changed,
    ap.changed_by AS ap_changed_by,
    idealbiotop.erstelldatum,
    idealbiotop.hoehenlage,
    idealbiotop.region,
    idealbiotop.exposition,
    idealbiotop.besonnung,
    idealbiotop.hangneigung,
    idealbiotop.boden_typ,
    idealbiotop.boden_kalkgehalt,
    idealbiotop.boden_durchlaessigkeit,
    idealbiotop.boden_humus,
    idealbiotop.boden_naehrstoffgehalt,
    idealbiotop.wasserhaushalt,
    idealbiotop.konkurrenz,
    idealbiotop.moosschicht,
    idealbiotop.krautschicht,
    idealbiotop.strauchschicht,
    idealbiotop.baumschicht,
    idealbiotop.bemerkungen,
    idealbiotop.changed,
    idealbiotop.changed_by
   FROM (apflora.idealbiotop
     LEFT JOIN ((((apflora.ae_eigenschaften
     RIGHT JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.adresse ON ((ap.bearbeiter = adresse.id))) ON ((idealbiotop.ap_id = ap.id)))
  ORDER BY ae_eigenschaften.artname, idealbiotop.erstelldatum;




CREATE VIEW apflora.v_kontrzaehl_anzproeinheit AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    apflora_adresse_1.name AS ap_bearbeiter,
    pop.id AS pop_id,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    pop_status_werte.text AS pop_status,
    pop.bekannt_seit AS pop_bekannt_seit,
    tpop.id AS tpop_id,
    tpop.nr AS tpop_nr,
    tpop.gemeinde AS tpop_gemeinde,
    tpop.flurname AS tpop_flurname,
    tpop_status_werte.text AS tpop_status,
    tpop.bekannt_seit AS tpop_bekannt_seit,
    tpop.status_unklar AS tpop_status_unklar,
    tpop.status_unklar_grund AS tpop_status_unklar_grund,
    tpop.x AS tpop_x,
    tpop.y AS tpop_y,
    tpop.radius AS tpop_radius_m,
    tpop.hoehe AS tpop_hoehe,
    tpop.exposition AS tpop_exposition,
    tpop.klima AS tpop_klima,
    tpop.neigung AS tpop_neigung,
    tpop.beschreibung AS tpop_beschreibung,
    tpop.kataster_nr AS tpop_kataster_nr,
    tpop.apber_relevant AS tpop_apber_relevant,
    tpop.eigentuemer AS tpop_eigentuemer,
    tpop.kontakt AS tpop_kontakt,
    tpop.nutzungszone AS tpop_nutzungszone,
    tpop.bewirtschafter AS tpop_bewirtschafter,
    tpop.bewirtschaftung AS tpop_bewirtschaftung,
    tpopkontr.id AS kontr_id,
    tpopkontr.jahr AS kontr_jahr,
    tpopkontr.datum AS kontr_datum,
    tpopkontr_typ_werte.text AS kontr_typ,
    adresse.name AS kontr_bearbeiter,
    tpopkontr.ueberlebensrate AS kontr_ueberlebensrate,
    tpopkontr.vitalitaet AS kontr_vitalitaet,
    tpop_entwicklung_werte.text AS kontr_entwicklung,
    tpopkontr.ursachen AS kontr_ursachen,
    tpopkontr.erfolgsbeurteilung AS kontr_erfolgsbeurteilung,
    tpopkontr.umsetzung_aendern AS kontr_umsetzung_aendern,
    tpopkontr.kontrolle_aendern AS kontr_kontrolle_aendern,
    tpopkontr.bemerkungen AS kontr_bemerkungen,
    tpopkontr.lr_delarze AS kontr_lr_delarze,
    tpopkontr.lr_umgebung_delarze AS kontr_lr_umgebung_delarze,
    tpopkontr.vegetationstyp AS kontr_vegetationstyp,
    tpopkontr.konkurrenz AS kontr_konkurrenz,
    tpopkontr.moosschicht AS kontr_moosschicht,
    tpopkontr.krautschicht AS kontr_krautschicht,
    tpopkontr.strauchschicht AS kontr_strauchschicht,
    tpopkontr.baumschicht AS kontr_baumschicht,
    tpopkontr.boden_typ AS kontr_boden_typ,
    tpopkontr.boden_kalkgehalt AS kontr_boden_kalkgehalt,
    tpopkontr.boden_durchlaessigkeit AS kontr_boden_durchlaessigkeit,
    tpopkontr.boden_humus AS kontr_boden_humus,
    tpopkontr.boden_naehrstoffgehalt AS kontr_boden_naehrstoffgehalt,
    tpopkontr.boden_abtrag AS kontr_boden_abtrag,
    tpopkontr.wasserhaushalt AS kontr_wasserhaushalt,
    tpopkontr_idbiotuebereinst_werte.text AS kontr_idealbiotop_uebereinstimmung,
    tpopkontr.handlungsbedarf AS kontr_handlungsbedarf,
    tpopkontr.flaeche_ueberprueft AS kontr_flaeche_ueberprueft,
    tpopkontr.flaeche AS kontr_flaeche,
    tpopkontr.plan_vorhanden AS kontr_plan_vorhanden,
    tpopkontr.deckung_vegetation AS kontr_deckung_vegetation,
    tpopkontr.deckung_nackter_boden AS kontr_deckung_nackter_boden,
    tpopkontr.deckung_ap_art AS kontr_deckung_ap_art,
    tpopkontr.jungpflanzen_vorhanden AS kontr_jungpflanzen_vorhanden,
    tpopkontr.vegetationshoehe_maximum AS kontr_vegetationshoehe_maximum,
    tpopkontr.vegetationshoehe_mittel AS kontr_vegetationshoehe_mittel,
    tpopkontr.gefaehrdung AS kontr_gefaehrdung,
    tpopkontr.changed AS kontr_changed,
    tpopkontr.changed_by AS kontr_changed_by,
    tpopkontrzaehl.id,
    tpopkontrzaehl_einheit_werte.text AS einheit,
    tpopkontrzaehl_methode_werte.text AS methode,
    tpopkontrzaehl.anzahl
   FROM (apflora.ae_eigenschaften
     JOIN ((((apflora.ap
     LEFT JOIN apflora.adresse apflora_adresse_1 ON ((ap.bearbeiter = apflora_adresse_1.id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     JOIN ((apflora.pop
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     JOIN ((apflora.tpop
     LEFT JOIN apflora.pop_status_werte tpop_status_werte ON ((tpop_status_werte.code = tpop.status)))
     JOIN (((((apflora.tpopkontr
     LEFT JOIN apflora.tpopkontr_idbiotuebereinst_werte ON ((tpopkontr.idealbiotop_uebereinstimmung = tpopkontr_idbiotuebereinst_werte.code)))
     LEFT JOIN apflora.tpopkontr_typ_werte ON (((tpopkontr.typ)::text = (tpopkontr_typ_werte.text)::text)))
     LEFT JOIN apflora.adresse ON ((tpopkontr.bearbeiter = adresse.id)))
     LEFT JOIN apflora.tpop_entwicklung_werte ON ((tpopkontr.entwicklung = tpop_entwicklung_werte.code)))
     LEFT JOIN ((apflora.tpopkontrzaehl
     LEFT JOIN apflora.tpopkontrzaehl_einheit_werte ON ((tpopkontrzaehl.einheit = tpopkontrzaehl_einheit_werte.code)))
     LEFT JOIN apflora.tpopkontrzaehl_methode_werte ON ((tpopkontrzaehl.methode = tpopkontrzaehl_methode_werte.code))) ON ((tpopkontr.id = tpopkontrzaehl.tpopkontr_id))) ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id))) ON ((ae_eigenschaften.id = ap.art_id)))
  WHERE (ae_eigenschaften.taxid > 150)
  ORDER BY ae_eigenschaften.artname, pop.nr, tpop.nr, tpopkontr.jahr, tpopkontr.datum;




CREATE VIEW apflora.v_massn AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.familie,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    pop.id AS pop_id,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    pop_status_werte.text AS pop_status,
    pop.bekannt_seit AS pop_bekannt_seit,
    pop.status_unklar AS pop_status_unklar,
    pop.status_unklar_begruendung AS pop_status_unklar_begruendung,
    pop.x AS pop_x,
    pop.y AS pop_y,
    tpop.id AS tpop_id,
    tpop.nr AS tpop_nr,
    tpop.gemeinde AS tpop_gemeinde,
    tpop.flurname AS tpop_flurname,
    pop_status_werte_2.text AS tpop_status,
    tpop.bekannt_seit AS tpop_bekannt_seit,
    tpop.status_unklar AS tpop_status_unklar,
    tpop.status_unklar_grund AS tpop_status_unklar_grund,
    tpop.x AS tpop_x,
    tpop.y AS tpop_y,
    tpop.radius AS tpop_radius,
    tpop.hoehe AS tpop_hoehe,
    tpop.exposition AS tpop_exposition,
    tpop.klima AS tpop_klima,
    tpop.neigung AS tpop_neigung,
    tpop.beschreibung AS tpop_beschreibung,
    tpop.kataster_nr AS tpop_kataster_nr,
    tpop.apber_relevant AS tpop_apber_relevant,
    tpop.eigentuemer AS tpop_eigentuemer,
    tpop.kontakt AS tpop_kontakt,
    tpop.nutzungszone AS tpop_nutzungszone,
    tpop.bewirtschafter AS tpop_bewirtschafter,
    tpop.bewirtschaftung AS tpop_bewirtschaftung,
    tpopmassn.id,
    tpopmassn.jahr,
    tpopmassn.datum,
    tpopmassn_typ_werte.text AS typ,
    tpopmassn.beschreibung,
    adresse.name AS bearbeiter,
    tpopmassn.bemerkungen,
    tpopmassn.plan_vorhanden,
    tpopmassn.plan_bezeichnung,
    tpopmassn.flaeche,
    tpopmassn.form,
    tpopmassn.pflanzanordnung,
    tpopmassn.markierung,
    tpopmassn.anz_triebe,
    tpopmassn.anz_pflanzen,
    tpopmassn.anz_pflanzstellen,
    tpopmassn.wirtspflanze,
    tpopmassn.herkunft_pop,
    tpopmassn.sammeldatum,
    tpopmassn.changed,
    tpopmassn.changed_by
   FROM (((((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN ((apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN (apflora.tpopmassn
     LEFT JOIN apflora.tpopmassn_typ_werte ON ((tpopmassn.typ = tpopmassn_typ_werte.code))) ON ((tpop.id = tpopmassn.tpop_id))) ON ((ap.id = pop.ap_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     LEFT JOIN apflora.pop_status_werte pop_status_werte_2 ON ((tpop.status = pop_status_werte_2.code)))
     LEFT JOIN apflora.adresse ON ((tpopmassn.bearbeiter = adresse.id)))
  WHERE (ae_eigenschaften.taxid > 150)
  ORDER BY ae_eigenschaften.artname, pop.nr, tpop.nr, tpopmassn.jahr, tpopmassn.datum, tpopmassn_typ_werte.text;




CREATE VIEW apflora.v_massn_fuergis_read AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    (pop.id)::character varying(50) AS pop_id,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    pop_status_werte.text AS pop_status,
    pop.bekannt_seit AS pop_bekannt_seit,
    pop.x AS pop_x,
    pop.y AS pop_y,
    (tpop.id)::character varying(50) AS tpop_id,
    tpop.nr AS tpop_nr,
    tpop.gemeinde AS tpop_gemeinde,
    tpop.flurname AS tpop_flurname,
    pop_status_werte_2.text AS tpop_status,
    tpop.status_unklar AS tpop_status_unklar,
    tpop.status_unklar_grund AS tpop_status_unklar_grund,
    tpop.x AS tpop_x,
    tpop.y AS tpop_y,
    tpop.radius AS tpop_radius,
    tpop.hoehe AS tpop_hoehe,
    tpop.exposition AS tpop_exposition,
    tpop.klima AS tpop_klima,
    tpop.neigung AS tpop_neigung,
    tpop.beschreibung AS tpop_beschreibung,
    tpop.kataster_nr AS tpop_kataster_nr,
    adresse.name AS tpop_bearbeiter,
    tpop.apber_relevant AS tpop_apber_relevant,
    tpop.bekannt_seit AS tpop_bekannt_seit,
    tpop.eigentuemer AS tpop_eigentuemer,
    tpop.kontakt AS tpop_kontakt,
    tpop.nutzungszone AS tpop_nutzungszone,
    tpop.bewirtschafter AS tpop_bewirtschafter,
    tpop.bewirtschaftung AS tpop_bewirtschaftung,
    (tpopmassn.id)::character varying(50) AS massn_id,
    tpopmassn.jahr AS massn_jahr,
    (tpopmassn.datum)::timestamp without time zone AS massn_datum,
    tpopmassn_typ_werte.text AS massn_typ,
    tpopmassn.beschreibung AS massn_beschreibung,
    adresse.name AS massn_bearbeiter,
    tpopmassn.plan_vorhanden AS massn_plan_vorhanden,
    tpopmassn.plan_bezeichnung AS massn_plan_bezeichnung,
    tpopmassn.flaeche AS massn_flaeche,
    tpopmassn.form AS massn_form,
    tpopmassn.pflanzanordnung AS massn_pflanzanordnung,
    tpopmassn.markierung AS massn_markierung,
    tpopmassn.anz_triebe AS massn_anz_triebe,
    tpopmassn.anz_pflanzen AS massn_anz_pflanzen,
    tpopmassn.anz_pflanzstellen AS massn_anz_pflanzstellen,
    tpopmassn.wirtspflanze AS massn_wirtspflanze,
    tpopmassn.herkunft_pop AS massn_herkunft_pop,
    tpopmassn.sammeldatum AS massn_sammeldatum,
    (tpopmassn.changed)::timestamp without time zone AS massn_changed,
    tpopmassn.changed_by AS massn_changed_by
   FROM (((((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN ((apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN (apflora.tpopmassn
     LEFT JOIN apflora.tpopmassn_typ_werte ON ((tpopmassn.typ = tpopmassn_typ_werte.code))) ON ((tpop.id = tpopmassn.tpop_id))) ON ((ap.id = pop.ap_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     LEFT JOIN apflora.pop_status_werte pop_status_werte_2 ON ((tpop.status = pop_status_werte_2.code)))
     LEFT JOIN apflora.adresse ON ((tpopmassn.bearbeiter = adresse.id)))
  ORDER BY ae_eigenschaften.artname, pop.nr, tpop.nr, tpopmassn.jahr, tpopmassn.datum, tpopmassn_typ_werte.text;




CREATE VIEW apflora.v_massn_fuergis_write AS
 SELECT tpopmassn.tpop_id,
    (tpopmassn.id)::character varying(50) AS massn_id,
    tpopmassn.typ AS massn_typ,
    tpopmassn.jahr AS massn_jahr,
    (tpopmassn.datum)::timestamp without time zone AS massn_datum,
    tpopmassn.bearbeiter AS massn_bearbeiter,
    tpopmassn.beschreibung AS massn_beschreibung,
    tpopmassn.plan_vorhanden AS massn_plan_vorhanden,
    tpopmassn.plan_bezeichnung AS massn_plan_bezeichnung,
    tpopmassn.flaeche AS massn_flaeche,
    tpopmassn.form AS massn_form,
    tpopmassn.pflanzanordnung AS massn_pflanzanordnung,
    tpopmassn.markierung AS massn_markierung,
    tpopmassn.anz_triebe AS massn_anz_triebe,
    tpopmassn.anz_pflanzen AS massn_anz_pflanzen,
    tpopmassn.anz_pflanzstellen AS massn_anz_pflanzstellen,
    tpopmassn.wirtspflanze AS massn_wirtspflanze,
    tpopmassn.herkunft_pop AS massn_herkunft_pop,
    tpopmassn.sammeldatum AS massn_sammeldatum,
    tpopmassn.bemerkungen AS massn_bemerkungen,
    (tpopmassn.changed)::timestamp without time zone AS massn_changed,
    tpopmassn.changed_by AS massn_changed_by
   FROM apflora.tpopmassn;




CREATE VIEW apflora.v_massn_webgisbun AS
 SELECT ap.id AS "APARTID",
    ae_eigenschaften.artname AS "APART",
    pop.id AS "POPGUID",
    pop.nr AS "POPNR",
    tpop.id AS "TPOPGUID",
    tpop.nr AS "TPOPNR",
    tpop.x AS "TPOP_X",
    tpop.y AS "TPOP_Y",
    pop_status_werte_2.text AS "TPOPSTATUS",
    tpopmassn.id AS "MASSNGUID",
    tpopmassn.jahr AS "MASSNJAHR",
    to_char((tpopmassn.datum)::timestamp with time zone, 'DD.MM.YY'::text) AS "MASSNDAT",
    tpopmassn_typ_werte.text AS "MASSTYP",
    tpopmassn.beschreibung AS "MASSNMASSNAHME",
    adresse.name AS "MASSNBEARBEITER",
    (tpopmassn.bemerkungen)::character(1) AS "MASSNBEMERKUNG",
    tpopmassn.plan_vorhanden AS "MASSNPLAN",
    tpopmassn.plan_bezeichnung AS "MASSPLANBEZ",
    tpopmassn.flaeche AS "MASSNFLAECHE",
    tpopmassn.form AS "MASSNFORMANSIEDL",
    tpopmassn.pflanzanordnung AS "MASSNPFLANZANORDNUNG",
    tpopmassn.markierung AS "MASSNMARKIERUNG",
    tpopmassn.anz_triebe AS "MASSNANZTRIEBE",
    tpopmassn.anz_pflanzen AS "MASSNANZPFLANZEN",
    tpopmassn.anz_pflanzstellen AS "MASSNANZPFLANZSTELLEN",
    tpopmassn.wirtspflanze AS "MASSNWIRTSPFLANZEN",
    tpopmassn.herkunft_pop AS "MASSNHERKUNFTSPOP",
    tpopmassn.sammeldatum AS "MASSNSAMMELDAT",
    to_char((tpopmassn.changed)::timestamp with time zone, 'DD.MM.YY'::text) AS "MASSNCHANGEDAT",
    tpopmassn.changed_by AS "MASSNCHANGEBY"
   FROM (((((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN ((apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN (apflora.tpopmassn
     LEFT JOIN apflora.tpopmassn_typ_werte ON ((tpopmassn.typ = tpopmassn_typ_werte.code))) ON ((tpop.id = tpopmassn.tpop_id))) ON ((ap.id = pop.ap_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     LEFT JOIN apflora.pop_status_werte pop_status_werte_2 ON ((tpop.status = pop_status_werte_2.code)))
     LEFT JOIN apflora.adresse ON ((tpopmassn.bearbeiter = adresse.id)))
  WHERE (ae_eigenschaften.taxid > 150)
  ORDER BY ae_eigenschaften.artname, pop.nr, tpop.nr, tpopmassn.jahr, tpopmassn.datum, tpopmassn_typ_werte.text;




CREATE VIEW apflora.v_pop AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    pop.id,
    pop.nr,
    pop.name,
    pop_status_werte.text AS status,
    pop.bekannt_seit,
    pop.status_unklar,
    pop.status_unklar_begruendung,
    pop.x,
    pop.y,
    pop.changed,
    pop.changed_by
   FROM (apflora.ae_eigenschaften
     JOIN (((apflora.ap
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     JOIN (apflora.pop
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code))) ON ((ap.id = pop.ap_id))) ON ((ae_eigenschaften.id = ap.art_id)))
  ORDER BY ae_eigenschaften.artname, pop.nr;




CREATE VIEW apflora.v_pop_anzkontr AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    pop.id,
    pop.nr,
    pop.name,
    pop_status_werte.text AS status,
    pop.bekannt_seit,
    pop.status_unklar,
    pop.status_unklar_begruendung,
    pop.x,
    pop.y,
    count(tpopkontr.id) AS anzahl_kontrollen
   FROM (((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN ((apflora.pop
     LEFT JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     LEFT JOIN apflora.tpopkontr ON ((tpop.id = tpopkontr.tpop_id))) ON ((ap.id = pop.ap_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
  GROUP BY ap.id, ae_eigenschaften.artname, ap_bearbstand_werte.text, ap.start_jahr, ap_umsetzung_werte.text, pop.id, pop.nr, pop.name, pop_status_werte.text, pop.status_unklar, pop.status_unklar_begruendung, pop.bekannt_seit, pop.x, pop.y
  ORDER BY ae_eigenschaften.artname, pop.nr;




CREATE VIEW apflora.v_pop_anzmassn AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    pop.id,
    pop.nr,
    pop.name,
    pop_status_werte.text AS status,
    pop.bekannt_seit,
    pop.status_unklar,
    pop.status_unklar_begruendung,
    pop.x,
    pop.y,
    count(tpopmassn.id) AS anzahl_massnahmen
   FROM (((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN ((apflora.pop
     LEFT JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     LEFT JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id))) ON ((ap.id = pop.ap_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
  GROUP BY ap.id, ae_eigenschaften.artname, ap_bearbstand_werte.text, ap.start_jahr, ap_umsetzung_werte.text, pop.id, pop.nr, pop.name, pop_status_werte.text, pop.status_unklar, pop.status_unklar_begruendung, pop.bekannt_seit, pop.x, pop.y
  ORDER BY ae_eigenschaften.artname, pop.nr;




CREATE VIEW apflora.v_tpop_berjahrundmassnjahr AS
 SELECT tpop.id,
    tpopber.jahr
   FROM (apflora.tpop
     JOIN apflora.tpopber ON ((tpop.id = tpopber.tpop_id)))
UNION
 SELECT tpop.id,
    tpopmassnber.jahr
   FROM (apflora.tpop
     JOIN apflora.tpopmassnber ON ((tpop.id = tpopmassnber.tpop_id)))
  ORDER BY 2;




CREATE VIEW apflora.v_pop_berjahrundmassnjahrvontpop AS
 SELECT tpop.pop_id,
    v_tpop_berjahrundmassnjahr.jahr
   FROM (apflora.v_tpop_berjahrundmassnjahr
     JOIN apflora.tpop ON ((v_tpop_berjahrundmassnjahr.id = tpop.id)))
  GROUP BY tpop.pop_id, v_tpop_berjahrundmassnjahr.jahr;




CREATE VIEW apflora.v_pop_berundmassnjahre AS
 SELECT pop.id,
    popber.jahr
   FROM (apflora.pop
     JOIN apflora.popber ON ((pop.id = popber.pop_id)))
UNION
 SELECT pop.id,
    popmassnber.jahr
   FROM (apflora.pop
     JOIN apflora.popmassnber ON ((pop.id = popmassnber.pop_id)))
  ORDER BY 2;




CREATE VIEW apflora.v_pop_fuergis_read AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    (pop.id)::text AS id,
    pop.nr,
    pop.name,
    pop_status_werte.text AS status,
    pop.bekannt_seit,
    pop.status_unklar,
    pop.status_unklar_begruendung,
    pop.x,
    pop.y,
    (pop.changed)::timestamp without time zone AS changed,
    pop.changed_by
   FROM (((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN apflora.pop ON ((ap.id = pop.ap_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
  WHERE ((pop.x > 0) AND (pop.y > 0))
  ORDER BY ae_eigenschaften.artname, pop.nr;




CREATE VIEW apflora.v_pop_fuergis_write AS
 SELECT (pop.ap_id)::text AS ap_id,
    (pop.id)::text AS id,
    pop.nr,
    pop.name,
    pop.status,
    pop.status_unklar,
    pop.status_unklar_begruendung,
    pop.bekannt_seit,
    pop.x,
    pop.y,
    (pop.changed)::timestamp without time zone AS changed,
    pop.changed_by
   FROM apflora.pop;




CREATE VIEW apflora.v_pop_kml AS
 SELECT ae_eigenschaften.artname AS "Art",
    pop.nr AS "Label",
    "substring"(concat('Population: ', pop.nr, ' ', pop.name), 1, 225) AS "Inhalte",
    round(((((((2.6779094 + (4.728982 * (((pop.x - 600000))::numeric / (1000000)::numeric))) + ((0.791484 * (((pop.x - 600000))::numeric / (1000000)::numeric)) * (((pop.y - 200000))::numeric / (1000000)::numeric))) + (((0.1306 * (((pop.x - 600000))::numeric / (1000000)::numeric)) * (((pop.y - 200000))::numeric / (1000000)::numeric)) * (((pop.y - 200000))::numeric / (1000000)::numeric))) - (((0.0436 * (((pop.x - 600000))::numeric / (1000000)::numeric)) * (((pop.x - 600000))::numeric / (1000000)::numeric)) * (((pop.x - 600000))::numeric / (1000000)::numeric))) * (100)::numeric) / (36)::numeric), 10) AS "Laengengrad",
    round((((((((16.9023892 + (3.238272 * (((pop.y - 200000))::numeric / (1000000)::numeric))) - ((0.270978 * (((pop.x - 600000))::numeric / (1000000)::numeric)) * (((pop.x - 600000))::numeric / (1000000)::numeric))) - ((0.002528 * (((pop.y - 200000))::numeric / (1000000)::numeric)) * (((pop.y - 200000))::numeric / (1000000)::numeric))) - (((0.0447 * (((pop.x - 600000))::numeric / (1000000)::numeric)) * (((pop.x - 600000))::numeric / (1000000)::numeric)) * (((pop.y - 200000))::numeric / (1000000)::numeric))) - (((0.014 * (((pop.y - 200000))::numeric / (1000000)::numeric)) * (((pop.y - 200000))::numeric / (1000000)::numeric)) * (((pop.y - 200000))::numeric / (1000000)::numeric))) * (100)::numeric) / (36)::numeric), 10) AS "Breitengrad",
    concat('http://www.apflora.ch/Projekte/4635372c-431c-11e8-bb30-e77f6cdd35a6/Aktionspläne/', ap.id, '/Populationen/', pop.id) AS url
   FROM (apflora.ae_eigenschaften
     JOIN (apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id))) ON ((ae_eigenschaften.id = ap.art_id)))
  WHERE ((pop.y IS NOT NULL) AND (pop.y IS NOT NULL))
  ORDER BY ae_eigenschaften.artname, pop.nr, pop.name;




CREATE VIEW apflora.v_pop_kmlnamen AS
 SELECT ae_eigenschaften.artname AS "Art",
    concat(ae_eigenschaften.artname, ' ', pop.nr) AS "Label",
    "substring"(concat('Population: ', pop.nr, ' ', pop.name), 1, 225) AS "Inhalte",
    round(((((((2.6779094 + (4.728982 * (((pop.x - 600000))::numeric / (1000000)::numeric))) + ((0.791484 * (((pop.x - 600000))::numeric / (1000000)::numeric)) * (((pop.y - 200000))::numeric / (1000000)::numeric))) + (((0.1306 * (((pop.x - 600000))::numeric / (1000000)::numeric)) * (((pop.y - 200000))::numeric / (1000000)::numeric)) * (((pop.y - 200000))::numeric / (1000000)::numeric))) - (((0.0436 * (((pop.x - 600000))::numeric / (1000000)::numeric)) * (((pop.x - 600000))::numeric / (1000000)::numeric)) * (((pop.x - 600000))::numeric / (1000000)::numeric))) * (100)::numeric) / (36)::numeric), 10) AS "Laengengrad",
    round((((((((16.9023892 + (3.238272 * (((pop.y - 200000))::numeric / (1000000)::numeric))) - ((0.270978 * (((pop.x - 600000))::numeric / (1000000)::numeric)) * (((pop.x - 600000))::numeric / (1000000)::numeric))) - ((0.002528 * (((pop.y - 200000))::numeric / (1000000)::numeric)) * (((pop.y - 200000))::numeric / (1000000)::numeric))) - (((0.0447 * (((pop.x - 600000))::numeric / (1000000)::numeric)) * (((pop.x - 600000))::numeric / (1000000)::numeric)) * (((pop.y - 200000))::numeric / (1000000)::numeric))) - (((0.014 * (((pop.y - 200000))::numeric / (1000000)::numeric)) * (((pop.y - 200000))::numeric / (1000000)::numeric)) * (((pop.y - 200000))::numeric / (1000000)::numeric))) * (100)::numeric) / (36)::numeric), 10) AS "Breitengrad",
    concat('http://www.apflora.ch/Projekte/4635372c-431c-11e8-bb30-e77f6cdd35a6/Aktionspläne/', ap.id, '/Populationen/', pop.id) AS url
   FROM (apflora.ae_eigenschaften
     JOIN (apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id))) ON ((ae_eigenschaften.id = ap.art_id)))
  WHERE ((pop.y IS NOT NULL) AND (pop.y IS NOT NULL))
  ORDER BY ae_eigenschaften.artname, pop.nr, pop.name;




CREATE VIEW apflora.v_pop_letzterpopber0_overall AS
 SELECT popber.pop_id,
    max(popber.jahr) AS jahr
   FROM apflora.popber
  WHERE (popber.jahr IS NOT NULL)
  GROUP BY popber.pop_id;




CREATE VIEW apflora.v_pop_letzterpopber_overall AS
 SELECT pop.ap_id,
    pop.id,
    v_pop_letzterpopber0_overall.jahr
   FROM ((apflora.pop
     JOIN apflora.v_pop_letzterpopber0_overall ON ((pop.id = v_pop_letzterpopber0_overall.pop_id)))
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((tpop.apber_relevant = 1) AND (pop.status <> 300))
  GROUP BY pop.ap_id, pop.id, v_pop_letzterpopber0_overall.jahr;




CREATE VIEW apflora.v_pop_letzterpopbermassn AS
 SELECT popmassnber.pop_id AS id,
    max(popmassnber.jahr) AS jahr
   FROM apflora.popmassnber
  WHERE (popmassnber.jahr IS NOT NULL)
  GROUP BY popmassnber.pop_id;




CREATE VIEW apflora.v_pop_massnseitbeginnap AS
 SELECT tpopmassn.tpop_id
   FROM (apflora.ap
     JOIN ((apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id))) ON ((ap.id = pop.ap_id)))
  WHERE (tpopmassn.jahr >= ap.start_jahr)
  GROUP BY tpopmassn.tpop_id;




CREATE VIEW apflora.v_pop_mit_letzter_popber AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_status,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    pop.id AS pop_id,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    pop_status_werte.text AS pop_status,
    pop.bekannt_seit AS pop_bekannt_seit,
    pop.status_unklar AS pop_status_unklar,
    pop.status_unklar_begruendung AS pop_status_unklar_begruendung,
    pop.x AS pop_x,
    pop.y AS pop_y,
    pop.changed AS pop_changed,
    pop.changed_by AS pop_changed_by,
    popber.id AS popber_id,
    popber.jahr AS popber_jahr,
    tpop_entwicklung_werte.text AS popber_entwicklung,
    popber.bemerkungen AS popber_bemerkungen,
    popber.changed AS popber_changed,
    popber.changed_by AS popber_changed_by
   FROM (apflora.ae_eigenschaften
     JOIN (((apflora.ap
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     JOIN ((apflora.pop
     LEFT JOIN (apflora.v_pop_letzterpopber0_overall
     LEFT JOIN (apflora.popber
     LEFT JOIN apflora.tpop_entwicklung_werte ON ((popber.entwicklung = tpop_entwicklung_werte.code))) ON (((v_pop_letzterpopber0_overall.jahr = popber.jahr) AND (v_pop_letzterpopber0_overall.pop_id = popber.pop_id)))) ON ((pop.id = v_pop_letzterpopber0_overall.pop_id)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code))) ON ((ap.id = pop.ap_id))) ON ((ae_eigenschaften.id = ap.art_id)))
  WHERE (ae_eigenschaften.taxid > 150)
  ORDER BY ae_eigenschaften.artname, pop.nr, v_pop_letzterpopber0_overall.jahr;




CREATE VIEW apflora.v_pop_mit_letzter_popmassnber AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_status,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    pop.id AS pop_id,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    pop_status_werte.text AS pop_status,
    pop.bekannt_seit AS pop_bekannt_seit,
    pop.status_unklar AS pop_status_unklar,
    pop.status_unklar_begruendung AS pop_status_unklar_begruendung,
    pop.x AS pop_x,
    pop.y AS pop_y,
    pop.changed AS pop_changed,
    pop.changed_by AS pop_changed_by,
    popmassnber.id AS popmassnber_id,
    popmassnber.jahr AS popmassnber_jahr,
    tpopmassn_erfbeurt_werte.text AS popmassnber_entwicklung,
    popmassnber.bemerkungen AS popmassnber_bemerkungen,
    popmassnber.changed AS popmassnber_changed,
    popmassnber.changed_by AS popmassnber_changed_by
   FROM (apflora.ae_eigenschaften
     JOIN (((apflora.ap
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     JOIN ((apflora.pop
     LEFT JOIN (apflora.v_pop_letzterpopbermassn
     LEFT JOIN (apflora.popmassnber
     LEFT JOIN apflora.tpopmassn_erfbeurt_werte ON ((popmassnber.beurteilung = tpopmassn_erfbeurt_werte.code))) ON (((v_pop_letzterpopbermassn.jahr = popmassnber.jahr) AND (v_pop_letzterpopbermassn.id = popmassnber.pop_id)))) ON ((pop.id = v_pop_letzterpopbermassn.id)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code))) ON ((ap.id = pop.ap_id))) ON ((ae_eigenschaften.id = ap.art_id)))
  WHERE (ae_eigenschaften.taxid > 150)
  ORDER BY ae_eigenschaften.artname, pop.nr, v_pop_letzterpopbermassn.jahr;




CREATE VIEW apflora.v_pop_ohnekoord AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    pop.id,
    pop.nr,
    pop.name,
    pop_status_werte.text AS status,
    pop.bekannt_seit,
    pop.status_unklar,
    pop.status_unklar_begruendung,
    pop.x,
    pop.y,
    pop.changed,
    pop.changed_by
   FROM (((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN apflora.pop ON ((ap.id = pop.ap_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
  WHERE ((pop.x IS NULL) OR (pop.y IS NULL))
  ORDER BY ae_eigenschaften.artname, pop.nr;




CREATE VIEW apflora.v_pop_popberundmassnber AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    pop.id AS pop_id,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    pop_status_werte.text AS pop_status,
    pop.bekannt_seit AS pop_bekannt_seit,
    pop.status_unklar AS pop_status_unklar,
    pop.status_unklar_begruendung AS pop_status_unklar_begruendung,
    pop.x AS pop_x,
    pop.y AS pop_y,
    pop.changed AS pop_changed,
    pop.changed_by AS pop_changed_by,
    v_pop_berundmassnjahre.jahr,
    popber.id AS popber_id,
    popber.jahr AS popber_jahr,
    tpop_entwicklung_werte.text AS popber_entwicklung,
    popber.bemerkungen AS popber_bemerkungen,
    popber.changed AS popber_changed,
    popber.changed_by AS popber_changed_by,
    popmassnber.id AS popmassnber_id,
    popmassnber.jahr AS popmassnber_jahr,
    tpopmassn_erfbeurt_werte.text AS popmassnber_entwicklung,
    popmassnber.bemerkungen AS popmassnber_bemerkungen,
    popmassnber.changed AS popmassnber_changed,
    popmassnber.changed_by AS popmassnber_changed_by
   FROM (apflora.ae_eigenschaften
     JOIN (((apflora.ap
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     JOIN (((apflora.pop
     LEFT JOIN (apflora.v_pop_berundmassnjahre
     LEFT JOIN (apflora.popmassnber
     LEFT JOIN apflora.tpopmassn_erfbeurt_werte ON ((popmassnber.beurteilung = tpopmassn_erfbeurt_werte.code))) ON (((v_pop_berundmassnjahre.jahr = popmassnber.jahr) AND (v_pop_berundmassnjahre.id = popmassnber.pop_id)))) ON ((pop.id = v_pop_berundmassnjahre.id)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     LEFT JOIN (apflora.popber
     LEFT JOIN apflora.tpop_entwicklung_werte ON ((popber.entwicklung = tpop_entwicklung_werte.code))) ON (((v_pop_berundmassnjahre.jahr = popber.jahr) AND (v_pop_berundmassnjahre.id = popber.pop_id)))) ON ((ap.id = pop.ap_id))) ON ((ae_eigenschaften.id = ap.art_id)))
  WHERE (ae_eigenschaften.taxid > 150)
  ORDER BY ae_eigenschaften.artname, pop.nr, v_pop_berundmassnjahre.jahr;




CREATE VIEW apflora.v_pop_vonapohnestatus AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap.bearbeitung AS ap_bearbeitung,
    pop.id,
    pop.nr,
    pop.name,
    pop.status
   FROM (apflora.ae_eigenschaften
     JOIN (apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id))) ON ((ae_eigenschaften.id = ap.art_id)))
  WHERE ((ap.bearbeitung = 3) AND (pop.status IS NULL))
  ORDER BY ae_eigenschaften.artname, pop.nr;




CREATE VIEW apflora.v_popber AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    pop.id AS pop_id,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    pop_status_werte.text AS pop_status,
    pop.bekannt_seit AS pop_bekannt_seit,
    pop.status_unklar AS pop_status_unklar,
    pop.status_unklar_begruendung AS pop_status_unklar_begruendung,
    pop.x AS pop_x,
    pop.y AS pop_y,
    popber.id,
    popber.jahr,
    tpop_entwicklung_werte.text AS entwicklung,
    popber.bemerkungen,
    popber.changed,
    popber.changed_by
   FROM (((((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN apflora.pop ON ((ap.id = pop.ap_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     JOIN apflora.popber ON ((pop.id = popber.pop_id)))
     LEFT JOIN apflora.tpop_entwicklung_werte ON ((popber.entwicklung = tpop_entwicklung_werte.code)))
  ORDER BY ae_eigenschaften.artname, pop.nr, popber.jahr, tpop_entwicklung_werte.text;




CREATE VIEW apflora.v_popber_angezapbestjahr0 AS
 SELECT ap.id AS ap_id,
    pop.id AS pop_id,
    popber.id,
    ae_eigenschaften.artname AS "Artname",
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    pop_status_werte.text AS status,
    popber.jahr AS "PopBerJahr",
    tpop_entwicklung_werte.text AS "PopBerEntwicklung",
    popber.bemerkungen AS "PopBerTxt"
   FROM (((apflora.ae_eigenschaften
     JOIN ((apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id)))
     JOIN apflora.popber ON ((pop.id = popber.pop_id))) ON ((ae_eigenschaften.id = ap.art_id)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     LEFT JOIN apflora.tpop_entwicklung_werte ON ((popber.entwicklung = tpop_entwicklung_werte.code)));




CREATE VIEW apflora.v_popmassnber AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    pop.id AS pop_id,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    pop_status_werte.text AS pop_status,
    pop.bekannt_seit AS pop_bekannt_seit,
    pop.status_unklar AS pop_status_unklar,
    pop.status_unklar_begruendung AS pop_status_unklar_begruendung,
    pop.x AS pop_x,
    pop.y AS pop_y,
    pop.changed AS pop_changed,
    pop.changed_by AS pop_changed_by,
    popmassnber.id,
    popmassnber.jahr,
    tpopmassn_erfbeurt_werte.text AS beurteilung,
    popmassnber.bemerkungen,
    popmassnber.changed,
    popmassnber.changed_by
   FROM (((((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN apflora.pop ON ((ap.id = pop.ap_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     JOIN apflora.popmassnber ON ((pop.id = popmassnber.pop_id)))
     LEFT JOIN apflora.tpopmassn_erfbeurt_werte ON ((popmassnber.beurteilung = tpopmassn_erfbeurt_werte.code)))
  ORDER BY ae_eigenschaften.artname, pop.nr;




CREATE VIEW apflora.v_popmassnber_anzmassn0 AS
 SELECT popmassnber.pop_id,
    popmassnber.jahr,
    count(tpopmassn.id) AS anzahl_massnahmen
   FROM (apflora.popmassnber
     JOIN (apflora.tpop
     LEFT JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id))) ON ((popmassnber.pop_id = tpop.pop_id)))
  WHERE ((tpopmassn.jahr = popmassnber.jahr) OR (tpopmassn.jahr IS NULL))
  GROUP BY popmassnber.pop_id, popmassnber.jahr
  ORDER BY popmassnber.pop_id, popmassnber.jahr;




CREATE VIEW apflora.v_popmassnber_anzmassn AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_status,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    pop.id AS pop_id,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    pop_status_werte.text AS pop_status,
    pop.bekannt_seit AS pop_bekannt_seit,
    pop.status_unklar AS pop_status_unklar,
    pop.status_unklar_begruendung AS pop_status_unklar_begruendung,
    pop.x AS pop_x,
    pop.y AS pop_y,
    pop.changed AS pop_changed,
    pop.changed_by AS pop_changed_by,
    popmassnber.id AS popmassnber_id,
    popmassnber.jahr AS popmassnber_jahr,
    tpopmassn_erfbeurt_werte.text AS popmassnber_entwicklung,
    popmassnber.bemerkungen AS popmassnber_bemerkungen,
    popmassnber.changed AS popmassnber_changed,
    popmassnber.changed_by AS popmassnber_changed_by,
    v_popmassnber_anzmassn0.anzahl_massnahmen
   FROM (((((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN apflora.pop ON ((ap.id = pop.ap_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     JOIN (apflora.popmassnber
     LEFT JOIN apflora.v_popmassnber_anzmassn0 ON (((v_popmassnber_anzmassn0.pop_id = popmassnber.pop_id) AND (v_popmassnber_anzmassn0.jahr = popmassnber.jahr)))) ON ((pop.id = popmassnber.pop_id)))
     LEFT JOIN apflora.tpopmassn_erfbeurt_werte ON ((popmassnber.beurteilung = tpopmassn_erfbeurt_werte.code)))
  ORDER BY ae_eigenschaften.artname, pop.nr;




CREATE VIEW apflora.v_q_ziel_ohnejahr AS
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    ziel.id
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN apflora.ziel ON ((ap.id = ziel.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE (ziel.jahr IS NULL)
  ORDER BY ziel.id;




CREATE VIEW apflora.v_q_ziel_ohnetyp AS
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    ziel.id,
    ziel.jahr
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN apflora.ziel ON ((ap.id = ziel.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE (ziel.typ IS NULL)
  ORDER BY ziel.jahr;




CREATE VIEW apflora.v_q_ziel_ohneziel AS
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    ziel.id,
    ziel.jahr
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN apflora.ziel ON ((ap.id = ziel.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE (ziel.bezeichnung IS NULL)
  ORDER BY ziel.jahr;




CREATE VIEW apflora.v_qk_apber_ohnebeurteilung AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'AP-Bericht ohne Beurteilung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'AP-Berichte'::text, (apber.id)::text] AS url,
    ARRAY[concat('AP-Bericht (Jahr): ', apber.jahr)] AS text,
    apber.jahr AS "Berichtjahr"
   FROM (apflora.ap
     JOIN apflora.apber ON ((ap.id = apber.ap_id)))
  WHERE ((apber.beurteilung IS NULL) AND (apber.jahr IS NOT NULL))
  ORDER BY apber.jahr;




CREATE VIEW apflora.v_qk_apber_ohnejahr AS
SELECT
    NULL::uuid AS proj_id,
    NULL::uuid AS ap_id,
    NULL::text AS hw,
    NULL::text[] AS url,
    NULL::text[] AS text;




CREATE VIEW apflora.v_qk_apber_ohnevergleichvorjahrgesamtziel AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'AP-Bericht ohne Vergleich Vorjahr - Gesamtziel:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'AP-Berichte'::text, (apber.id)::text] AS url,
    ARRAY[concat('AP-Bericht (Jahr): ', apber.jahr)] AS text,
    apber.jahr AS "Berichtjahr"
   FROM (apflora.ap
     JOIN apflora.apber ON ((ap.id = apber.ap_id)))
  WHERE ((apber.vergleich_vorjahr_gesamtziel IS NULL) AND (apber.jahr IS NOT NULL))
  ORDER BY apber.jahr;




CREATE VIEW apflora.v_qk_assozart_ohneart AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Assoziierte Art ohne Art:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'assoziierte-Arten'::text, (assozart.id)::text] AS url,
    ARRAY[concat('Assoziierte Art (id): ', assozart.id)] AS text
   FROM (apflora.ap
     JOIN apflora.assozart ON ((ap.id = assozart.ap_id)))
  WHERE (assozart.ae_id IS NULL)
  ORDER BY assozart.id;




CREATE VIEW apflora.v_qk_erfkrit_ohnebeurteilung AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Erfolgskriterium ohne Beurteilung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Erfolgskriterien'::text, (erfkrit.id)::text] AS url,
    ARRAY[concat('Erfolgskriterium (id): ', erfkrit.id)] AS text
   FROM (apflora.ap
     JOIN apflora.erfkrit ON ((ap.id = erfkrit.ap_id)))
  WHERE (erfkrit.erfolg IS NULL)
  ORDER BY erfkrit.id;




CREATE VIEW apflora.v_qk_erfkrit_ohnekriterien AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Erfolgskriterium ohne Kriterien:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Erfolgskriterien'::text, (erfkrit.id)::text] AS url,
    ARRAY[concat('Erfolgskriterium (id): ', erfkrit.id)] AS text
   FROM (apflora.ap
     JOIN apflora.erfkrit ON ((ap.id = erfkrit.ap_id)))
  WHERE (erfkrit.kriterien IS NULL)
  ORDER BY erfkrit.id;




CREATE VIEW apflora.v_qk_feldkontr_ohnebearb AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Feldkontrolle ohne BearbeiterIn:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text, 'Feld-Kontrollen'::text, (tpopkontr.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr), concat('Kontrolle (id): ', tpopkontr.id)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN apflora.tpopkontr ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpopkontr.bearbeiter IS NULL) AND ((tpopkontr.typ)::text <> 'Freiwilligen-Erfolgskontrolle'::text))
  ORDER BY pop.nr, tpop.nr, tpopkontr.id;




CREATE VIEW apflora.v_qk_feldkontr_ohnejahr AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Feldkontrolle ohne Jahr:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text, 'Feld-Kontrollen'::text, (tpopkontr.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr), concat('Feld-Kontrolle (Jahr): ', tpopkontr.jahr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN apflora.tpopkontr ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpopkontr.jahr IS NULL) AND ((tpopkontr.typ)::text <> 'Freiwilligen-Erfolgskontrolle'::text))
  ORDER BY pop.nr, tpop.nr, tpopkontr.jahr;




CREATE VIEW apflora.v_qk_feldkontr_ohnetyp AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Feldkontrolle ohne Typ:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text, 'Feld-Kontrollen'::text, (tpopkontr.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr), concat('Feld-Kontrolle (Jahr): ', tpopkontr.jahr)] AS text,
    tpopkontr.jahr AS "Berichtjahr"
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN apflora.tpopkontr ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE (((tpopkontr.typ IS NULL) OR ((tpopkontr.typ)::text = 'Erfolgskontrolle'::text)) AND (tpopkontr.jahr IS NOT NULL))
  ORDER BY pop.nr, tpop.nr, tpopkontr.jahr;




CREATE VIEW apflora.v_qk_feldkontr_ohnezaehlung AS
SELECT
    NULL::uuid AS proj_id,
    NULL::uuid AS ap_id,
    NULL::text AS hw,
    NULL::text[] AS url,
    NULL::text[] AS text,
    NULL::smallint AS "Berichtjahr";




CREATE VIEW apflora.v_qk_feldkontrzaehlung_ohneanzahl AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Zaehlung ohne Anzahl (Feldkontrolle):'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text, 'Feld-Kontrollen'::text, (tpopkontr.id)::text, 'Zählungen'::text, (tpopkontrzaehl.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr), concat('Feld-Kontrolle (Jahr): ', tpopkontr.jahr), concat('Zählung (id): ', tpopkontrzaehl.id)] AS text,
    tpopkontr.jahr AS "Berichtjahr"
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN (apflora.tpopkontr
     JOIN apflora.tpopkontrzaehl ON ((tpopkontr.id = tpopkontrzaehl.tpopkontr_id))) ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpopkontrzaehl.anzahl IS NULL) AND (tpopkontr.jahr IS NOT NULL) AND ((tpopkontr.typ)::text <> 'Freiwilligen-Erfolgskontrolle'::text))
  ORDER BY pop.nr, tpop.nr, tpopkontr.jahr;




CREATE VIEW apflora.v_qk_feldkontrzaehlung_ohneeinheit AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Zaehlung ohne Zaehleinheit (Feldkontrolle):'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text, 'Feld-Kontrollen'::text, (tpopkontr.id)::text, 'Zählungen'::text, (tpopkontrzaehl.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr), concat('Feld-Kontrolle (Jahr): ', tpopkontr.jahr), concat('Zählung (id): ', tpopkontrzaehl.id)] AS text,
    tpopkontr.jahr AS "Berichtjahr"
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN (apflora.tpopkontr
     JOIN apflora.tpopkontrzaehl ON ((tpopkontr.id = tpopkontrzaehl.tpopkontr_id))) ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpopkontrzaehl.einheit IS NULL) AND (tpopkontr.jahr IS NOT NULL) AND ((tpopkontr.typ)::text <> 'Freiwilligen-Erfolgskontrolle'::text))
  ORDER BY pop.nr, tpop.nr, tpopkontr.jahr;




CREATE VIEW apflora.v_qk_feldkontrzaehlung_ohnemethode AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Zaehlung ohne Methode (Feldkontrolle):'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text, 'Feld-Kontrollen'::text, (tpopkontr.id)::text, 'Zählungen'::text, (tpopkontrzaehl.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr), concat('Feld-Kontrolle (Jahr): ', tpopkontr.jahr), concat('Zählung (id): ', tpopkontrzaehl.id)] AS text,
    tpopkontr.jahr AS "Berichtjahr"
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN (apflora.tpopkontr
     JOIN apflora.tpopkontrzaehl ON ((tpopkontr.id = tpopkontrzaehl.tpopkontr_id))) ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpopkontrzaehl.methode IS NULL) AND (tpopkontr.jahr IS NOT NULL) AND ((tpopkontr.typ)::text <> 'Freiwilligen-Erfolgskontrolle'::text))
  ORDER BY pop.nr, tpop.nr, tpopkontr.jahr;




CREATE VIEW apflora.v_qk_freiwkontr_ohnebearb AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Freiwilligen-Kontrolle ohne BearbeiterIn:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text, 'Freiwilligen-Kontrollen'::text, (tpopkontr.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr), concat('Feld-Kontrolle (id): ', tpopkontr.id)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN apflora.tpopkontr ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpopkontr.bearbeiter IS NULL) AND ((tpopkontr.typ)::text = 'Freiwilligen-Erfolgskontrolle'::text))
  ORDER BY ap.id, pop.nr, tpop.nr, tpopkontr.bearbeiter;




CREATE VIEW apflora.v_qk_freiwkontr_ohnejahr AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Freiwilligen-Kontrolle ohne Jahr:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text, 'Freiwilligen-Kontrollen'::text, (tpopkontr.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr), concat('Feld-Kontrolle (id): ', tpopkontr.id)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN apflora.tpopkontr ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpopkontr.jahr IS NULL) AND ((tpopkontr.typ)::text = 'Freiwilligen-Erfolgskontrolle'::text))
  ORDER BY ap.id, pop.nr, tpop.nr, tpopkontr.jahr;




CREATE VIEW apflora.v_qk_freiwkontr_ohnezaehlung AS
SELECT
    NULL::uuid AS proj_id,
    NULL::uuid AS ap_id,
    NULL::text AS hw,
    NULL::text[] AS url,
    NULL::text[] AS text,
    NULL::smallint AS "Berichtjahr";




CREATE VIEW apflora.v_qk_freiwkontrzaehlung_ohneanzahl AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Zaehlung ohne Anzahl (Freiwilligen-Kontrolle):'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text, 'Freiwilligen-Kontrollen'::text, (tpopkontr.id)::text, 'Zählungen'::text, (tpopkontrzaehl.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr), concat('Feld-Kontrolle (Jahr): ', tpopkontr.jahr), concat('Zählung (id): ', tpopkontrzaehl.id)] AS text,
    tpopkontr.jahr AS "Berichtjahr"
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN (apflora.tpopkontr
     JOIN apflora.tpopkontrzaehl ON ((tpopkontr.id = tpopkontrzaehl.tpopkontr_id))) ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpopkontrzaehl.anzahl IS NULL) AND (tpopkontr.jahr IS NOT NULL) AND ((tpopkontr.typ)::text = 'Freiwilligen-Erfolgskontrolle'::text))
  ORDER BY pop.nr, tpop.nr, tpopkontr.jahr;




CREATE VIEW apflora.v_qk_freiwkontrzaehlung_ohneeinheit AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Zaehlung ohne Zaehleinheit (Freiwilligen-Kontrolle):'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text, 'Freiwilligen-Kontrollen'::text, (tpopkontr.id)::text, 'Zählungen'::text, (tpopkontrzaehl.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr), concat('Feld-Kontrolle (Jahr): ', tpopkontr.jahr), concat('Zählung (id): ', tpopkontrzaehl.id)] AS text,
    tpopkontr.jahr AS "Berichtjahr"
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN (apflora.tpopkontr
     JOIN apflora.tpopkontrzaehl ON ((tpopkontr.id = tpopkontrzaehl.tpopkontr_id))) ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpopkontrzaehl.einheit IS NULL) AND (tpopkontr.jahr IS NOT NULL) AND ((tpopkontr.typ)::text = 'Freiwilligen-Erfolgskontrolle'::text))
  ORDER BY pop.nr, tpop.nr, tpopkontr.jahr;




CREATE VIEW apflora.v_qk_freiwkontrzaehlung_ohnemethode AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Zaehlung ohne Methode (Freiwilligen-Kontrolle):'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text, 'Freiwilligen-Kontrollen'::text, (tpopkontr.id)::text, 'Zählungen'::text, (tpopkontrzaehl.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr), concat('Feld-Kontrolle (Jahr): ', tpopkontr.jahr), concat('Zählung (id): ', tpopkontrzaehl.id)] AS text,
    tpopkontr.jahr AS "Berichtjahr"
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN (apflora.tpopkontr
     JOIN apflora.tpopkontrzaehl ON ((tpopkontr.id = tpopkontrzaehl.tpopkontr_id))) ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpopkontrzaehl.methode IS NULL) AND (tpopkontr.jahr IS NOT NULL) AND ((tpopkontr.typ)::text = 'Freiwilligen-Erfolgskontrolle'::text))
  ORDER BY pop.nr, tpop.nr, tpopkontr.jahr;




CREATE VIEW apflora.v_qk_massn_ohnebearb AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Massnahme ohne BearbeiterIn:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text, 'Massnahmen'::text, (tpopmassn.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr), concat('Massnahme (id): ', tpopmassn.id)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE (tpopmassn.bearbeiter IS NULL)
  ORDER BY ap.id, pop.nr, tpop.nr, tpopmassn.id;




CREATE VIEW apflora.v_qk_massn_ohnejahr AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Massnahme ohne Jahr:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text, 'Massnahmen'::text, (tpopmassn.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr), concat('Massnahme: ', tpopmassn.jahr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE (tpopmassn.jahr IS NULL)
  ORDER BY ap.id, pop.nr, tpop.nr, tpopmassn.id;




CREATE VIEW apflora.v_qk_massn_ohnetyp AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Massnahmen ohne Typ:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text, 'Massnahmen'::text, (tpopmassn.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr), concat('Massnahme (Jahr): ', tpopmassn.jahr)] AS text,
    tpopmassn.jahr AS "Berichtjahr"
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpopmassn.typ IS NULL) AND (tpopmassn.jahr IS NOT NULL))
  ORDER BY pop.nr, tpop.nr, tpopmassn.jahr;




CREATE VIEW apflora.v_qk_massnber_ohneerfbeurt AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Massnahmen-Bericht ohne Entwicklung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text, 'Massnahmen-Berichte'::text, (tpopmassnber.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr), concat('Massnahmen-Bericht (Jahr): ', tpopmassnber.jahr)] AS text,
    tpopmassnber.jahr AS "Berichtjahr"
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN apflora.tpopmassnber ON ((tpop.id = tpopmassnber.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpopmassnber.beurteilung IS NULL) AND (tpopmassnber.jahr IS NOT NULL))
  ORDER BY pop.nr, tpop.nr, tpopmassnber.jahr;




CREATE VIEW apflora.v_qk_massnber_ohnejahr AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Massnahmen-Bericht ohne Jahr:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text, 'Massnahmen-Berichte'::text, (tpopmassnber.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr), concat('Massnahmen-Bericht (Jahr): ', tpopmassnber.jahr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN apflora.tpopmassnber ON ((tpop.id = tpopmassnber.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE (tpopmassnber.jahr IS NULL)
  ORDER BY pop.nr, tpop.nr, tpopmassnber.jahr, tpopmassnber.id;




CREATE VIEW apflora.v_qk_pop_koordentsprechenkeinertpop AS
 SELECT DISTINCT ap.proj_id,
    pop.ap_id,
    'Population: Koordinaten entsprechen keiner Teilpopulation:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr): ', pop.nr)] AS text,
    pop.x AS "XKoord",
    pop.y AS "YKoord"
   FROM (apflora.ap
     JOIN apflora.pop ON ((pop.ap_id = ap.id)))
  WHERE ((pop.x IS NOT NULL) AND (pop.y IS NOT NULL) AND (NOT (pop.id IN ( SELECT tpop.pop_id
           FROM apflora.tpop
          WHERE ((tpop.x = tpop.x) AND (tpop.y = tpop.y))))))
  ORDER BY ap.proj_id, pop.ap_id;




CREATE VIEW apflora.v_qk_pop_mit_ber_abnehmend_ohne_tpopber_abnehmend AS
 SELECT DISTINCT ap.proj_id,
    ap.id AS ap_id,
    pop.id AS pop_id,
    popber.jahr AS "Berichtjahr",
    'Populationen mit Bericht "abnehmend" ohne Teil-Population mit Bericht "abnehmend":'::text AS hw,
    ARRAY['Projekte'::text, (ap.proj_id)::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.popber ON ((pop.id = popber.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((popber.entwicklung = 1) AND (NOT (popber.pop_id IN ( SELECT DISTINCT tpop.pop_id
           FROM (apflora.tpop
             JOIN apflora.tpopber ON ((tpop.id = tpopber.tpop_id)))
          WHERE ((tpopber.entwicklung = 1) AND (tpopber.jahr = popber.jahr))))))
  ORDER BY ap.proj_id, ap.id, pop.id, popber.jahr;




CREATE VIEW apflora.v_qk_pop_mit_ber_erloschen_ohne_tpopber_erloschen AS
 SELECT DISTINCT ap.proj_id,
    ap.id AS ap_id,
    pop.id AS pop_id,
    popber.jahr AS "Berichtjahr",
    'Populationen mit Bericht "erloschen" ohne Teil-Population mit Bericht "erloschen":'::text AS hw,
    ARRAY['Projekte'::text, (ap.proj_id)::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.popber ON ((pop.id = popber.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((popber.entwicklung = 8) AND (NOT (popber.pop_id IN ( SELECT DISTINCT tpop.pop_id
           FROM (apflora.tpop
             JOIN apflora.tpopber ON ((tpop.id = tpopber.tpop_id)))
          WHERE ((tpopber.entwicklung = 8) AND (tpopber.jahr = popber.jahr))))))
  ORDER BY ap.proj_id, ap.id, pop.id, popber.jahr;




CREATE VIEW apflora.v_qk_pop_mit_ber_erloschen_und_tpopber_nicht_erloschen AS
 SELECT DISTINCT ap.proj_id,
    ap.id AS ap_id,
    pop.id AS pop_id,
    popber.jahr AS "Berichtjahr",
    'Populationen mit Bericht "erloschen" und mindestens einer gemäss Bericht nicht erloschenen Teil-Population:'::text AS hw,
    ARRAY['Projekte'::text, (ap.proj_id)::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.popber ON ((pop.id = popber.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((popber.entwicklung = 8) AND (popber.pop_id IN ( SELECT DISTINCT tpop.pop_id
           FROM (apflora.tpop
             JOIN apflora.tpopber ON ((tpop.id = tpopber.tpop_id)))
          WHERE ((tpopber.entwicklung < 8) AND (tpopber.jahr = popber.jahr)))))
  ORDER BY ap.proj_id, ap.id, pop.id, popber.jahr;




CREATE VIEW apflora.v_qk_pop_mit_ber_zunehmend_ohne_tpopber_zunehmend AS
 SELECT DISTINCT ap.proj_id,
    ap.id AS ap_id,
    pop.id AS pop_id,
    popber.jahr AS "Berichtjahr",
    'Populationen mit Bericht "zunehmend" ohne Teil-Population mit Bericht "zunehmend":'::text AS hw,
    ARRAY['Projekte'::text, (ap.proj_id)::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.popber ON ((pop.id = popber.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((popber.entwicklung = 3) AND (NOT (popber.pop_id IN ( SELECT DISTINCT tpop.pop_id
           FROM (apflora.tpop
             JOIN apflora.tpopber ON ((tpop.id = tpopber.tpop_id)))
          WHERE ((tpopber.entwicklung = 3) AND (tpopber.jahr = popber.jahr))))))
  ORDER BY ap.proj_id, ap.id, pop.id, popber.jahr;




CREATE VIEW apflora.v_qk_pop_mitstatusunklarohnebegruendung AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Population mit "Status unklar", ohne Begruendung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id)))
  WHERE ((pop.status_unklar = true) AND (pop.status_unklar_begruendung IS NULL))
  ORDER BY ap.id, pop.nr;




CREATE VIEW apflora.v_qk_pop_ohnebekanntseit AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Population ohne "bekannt seit":'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id)))
  WHERE (pop.bekannt_seit IS NULL)
  ORDER BY ap.id, pop.nr;




CREATE VIEW apflora.v_qk_pop_ohnekoord AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Population: Mindestens eine Koordinate fehlt:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id)))
  WHERE ((pop.x IS NULL) OR (pop.y IS NULL))
  ORDER BY ap.id, pop.nr;




CREATE VIEW apflora.v_qk_pop_ohnepopname AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Population ohne Name:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population: ', pop.nr)] AS text
   FROM (apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id)))
  WHERE (pop.name IS NULL)
  ORDER BY ap.id, pop.nr;




CREATE VIEW apflora.v_qk_pop_ohnepopnr AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Population ohne Nr.:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Name): ', pop.name)] AS text
   FROM (apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id)))
  WHERE (pop.nr IS NULL)
  ORDER BY ap.id, pop.name;




CREATE VIEW apflora.v_qk_pop_ohnepopstatus AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Population ohne Status:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id)))
  WHERE (pop.status IS NULL)
  ORDER BY ap.id, pop.nr;




CREATE VIEW apflora.v_qk_pop_ohnetpop AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Population ohne Teilpopulation:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     LEFT JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE (tpop.id IS NULL)
  ORDER BY ap.id, pop.nr;




CREATE VIEW apflora.v_qk_pop_ohnetpopmitgleichemstatus AS
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Population: Keine Teil-Population hat den Status der Population:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE (NOT (pop.id IN ( SELECT DISTINCT tpop.pop_id
           FROM apflora.tpop
          WHERE ((tpop.pop_id = pop.id) AND ((tpop.status = pop.status) OR ((tpop.status = 200) AND (pop.status = 210)) OR ((tpop.status = 210) AND (pop.status = 200)) OR ((tpop.status = 202) AND (pop.status = 211)) OR ((tpop.status = 211) AND (pop.status = 202)))))));




CREATE VIEW apflora.v_qk_pop_popnrmehrdeutig AS
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Population: Die Nr. ist mehrdeutig:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN apflora.pop ON ((pop.ap_id = ap.id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((pop.ap_id IN ( SELECT DISTINCT pop_1.ap_id
           FROM apflora.pop pop_1
          GROUP BY pop_1.ap_id, pop_1.nr
         HAVING (count(*) > 1))) AND (pop.nr IN ( SELECT DISTINCT pop_1.nr
           FROM apflora.pop pop_1
          GROUP BY pop_1.ap_id, pop_1.nr
         HAVING (count(*) > 1))))
  ORDER BY projekt.id, ap.id, pop.nr;




CREATE VIEW apflora.v_qk_pop_status101tpopstatusanders AS
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Population: Status ist "ursprünglich, erloschen". Es gibt Teil-Populationen (ausser potentiellen Wuchs-/Ansiedlungsorten) mit abweichendem Status:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((pop.status = 101) AND (pop.id IN ( SELECT DISTINCT tpop.pop_id
           FROM apflora.tpop
          WHERE ((tpop.pop_id = pop.id) AND (tpop.status <> ALL (ARRAY[101, 300]))))));




CREATE VIEW apflora.v_qk_pop_status200tpopstatusunzulaessig AS
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Population: Status ist "angesiedelt nach Beginn AP, aktuell". Es gibt Teil-Populationen mit nicht zulässigen Stati ("ursprünglich", "angesiedelt vor Beginn AP, aktuell"):'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((pop.status = 200) AND (pop.id IN ( SELECT DISTINCT tpop.pop_id
           FROM apflora.tpop
          WHERE ((tpop.pop_id = pop.id) AND (tpop.status = ANY (ARRAY[100, 101, 210]))))));




CREATE VIEW apflora.v_qk_pop_status201tpopstatusunzulaessig AS
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Population: Status ist "Ansaatversuch". Es gibt Teil-Populationen mit nicht zulässigen Stati ("ursprünglich" oder "angesiedelt, aktuell"):'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((pop.status = 201) AND (pop.id IN ( SELECT DISTINCT tpop.pop_id
           FROM apflora.tpop
          WHERE ((tpop.pop_id = pop.id) AND (tpop.status = ANY (ARRAY[100, 101, 200, 210]))))));




CREATE VIEW apflora.v_qk_pop_status202tpopstatusanders AS
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Population: Status ist "angesiedelt nach Beginn AP, erloschen/nicht etabliert". Es gibt Teil-Populationen mit abweichendem Status:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((pop.status = 202) AND (pop.id IN ( SELECT DISTINCT tpop.pop_id
           FROM apflora.tpop
          WHERE ((tpop.pop_id = pop.id) AND (tpop.status <> 202)))));




CREATE VIEW apflora.v_qk_pop_status210tpopstatusunzulaessig AS
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Population: Status ist "angesiedelt vor Beginn AP, aktuell". Es gibt Teil-Populationen mit nicht zulässigen Stati ("ursprünglich"):'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((pop.status = 210) AND (pop.id IN ( SELECT DISTINCT tpop.pop_id
           FROM apflora.tpop
          WHERE ((tpop.pop_id = pop.id) AND (tpop.status = ANY (ARRAY[100, 101]))))));




CREATE VIEW apflora.v_qk_pop_status211tpopstatusunzulaessig AS
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Population: Status ist "angesiedelt vor Beginn AP, erloschen/nicht etabliert". Es gibt Teil-Populationen mit nicht zulässigen Stati ("ursprünglich", "angesiedelt, aktuell", "Ansaatversuch", "potentieller Wuchsort"):'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((pop.status = 211) AND (pop.id IN ( SELECT DISTINCT tpop.pop_id
           FROM apflora.tpop
          WHERE ((tpop.pop_id = pop.id) AND (tpop.status = ANY (ARRAY[100, 101, 210, 200, 201, 300]))))));




CREATE VIEW apflora.v_qk_pop_status300tpopstatusanders AS
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Population: Status ist "potentieller Wuchs-/Ansiedlungsort". Es gibt aber Teil-Populationen mit abweichendem Status:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((pop.status = 300) AND (pop.id IN ( SELECT DISTINCT tpop.pop_id
           FROM apflora.tpop
          WHERE ((tpop.pop_id = pop.id) AND (tpop.status <> 300)))));




CREATE VIEW apflora.v_qk_pop_statusaktuellletzterpopbererloschen AS
 WITH lastpopber AS (
         SELECT DISTINCT ON (popber.pop_id) popber.pop_id,
            popber.jahr,
            popber.entwicklung
           FROM apflora.popber
          WHERE (popber.jahr IS NOT NULL)
          ORDER BY popber.pop_id, popber.jahr DESC
        )
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Population: Status ist "aktuell" (ursprünglich oder angesiedelt) oder potentieller Wuchsort; der letzte Populations-Bericht meldet aber "erloschen" und es gab seither keine Ansiedlung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN (apflora.pop
     JOIN lastpopber ON ((pop.id = lastpopber.pop_id))) ON ((ap.id = pop.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((pop.status = ANY (ARRAY[100, 200, 210, 300])) AND (lastpopber.entwicklung = 8) AND (NOT (pop.id IN ( SELECT DISTINCT tpop.pop_id
           FROM (apflora.tpop
             JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id)))
          WHERE ((tpopmassn.typ >= 1) AND (tpopmassn.typ <= 3) AND (tpopmassn.jahr > lastpopber.jahr))))));




CREATE VIEW apflora.v_qk_pop_statusangesiedeltmittpopurspruenglich AS
 SELECT DISTINCT ap.proj_id,
    pop.ap_id,
    'Population: Status ist "angesiedelt", es gibt aber eine Teilpopulation mit Status "urspruenglich":'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr): ', pop.nr)] AS text
   FROM (apflora.ap
     JOIN apflora.pop ON ((pop.ap_id = ap.id)))
  WHERE ((pop.status = ANY (ARRAY[200, 201, 202, 210, 211])) AND (pop.id IN ( SELECT DISTINCT tpop.pop_id
           FROM apflora.tpop
          WHERE (tpop.status = 100))));




CREATE VIEW apflora.v_qk_pop_statusansaatversuchalletpoperloschen AS
 SELECT DISTINCT ap.proj_id,
    pop.ap_id,
    'Population: Status ist "angesiedelt, Ansaatversuch", alle Teilpopulationen sind gemäss Status erloschen:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr): ', pop.nr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((tpop.pop_id = pop.id))) ON ((pop.ap_id = ap.id)))
  WHERE ((pop.status = 201) AND (EXISTS ( SELECT 1
           FROM apflora.tpop tpop_1
          WHERE ((tpop_1.status = ANY (ARRAY[101, 202, 211])) AND (tpop_1.pop_id = pop.id)))) AND (NOT (EXISTS ( SELECT 1
           FROM apflora.tpop tpop_1
          WHERE ((tpop_1.status <> ALL (ARRAY[101, 202, 211])) AND (tpop_1.pop_id = pop.id))))));




CREATE VIEW apflora.v_qk_pop_statusansaatversuchmitaktuellentpop AS
 SELECT DISTINCT ap.proj_id,
    pop.ap_id,
    'Population: Status ist "angesiedelt, Ansaatversuch", es gibt aber eine aktuelle Teilpopulation oder eine ursprüngliche erloschene:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr): ', pop.nr)] AS text
   FROM (apflora.ap
     JOIN apflora.pop ON ((pop.ap_id = ap.id)))
  WHERE ((pop.status = 201) AND (pop.id IN ( SELECT DISTINCT tpop.pop_id
           FROM apflora.tpop
          WHERE (tpop.status = ANY (ARRAY[100, 101, 200, 210])))));




CREATE VIEW apflora.v_qk_pop_statusansaatversuchmittpopursprerloschen AS
 SELECT DISTINCT ap.proj_id,
    pop.ap_id,
    'Population: Status ist "angesiedelt, Ansaatversuch", es gibt aber eine Teilpopulation mit Status "urspruenglich, erloschen":'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr): ', pop.nr)] AS text
   FROM (apflora.ap
     JOIN apflora.pop ON ((pop.ap_id = ap.id)))
  WHERE ((pop.status = 201) AND (pop.id IN ( SELECT DISTINCT tpop.pop_id
           FROM apflora.tpop
          WHERE (tpop.status = 101))));




CREATE VIEW apflora.v_qk_pop_statuserloschenletzterpopberabnehmend AS
 WITH lastpopber AS (
         SELECT DISTINCT ON (popber.pop_id) popber.pop_id,
            popber.jahr,
            popber.entwicklung
           FROM apflora.popber
          WHERE (popber.jahr IS NOT NULL)
          ORDER BY popber.pop_id, popber.jahr DESC
        )
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Population: Status ist "erloschen" (ursprünglich oder angesiedelt), Ansaatversuch oder potentieller Wuchsort; der letzte Populations-Bericht meldet aber "abnehmend" und es gab seither keine Ansiedlung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN (apflora.pop
     JOIN lastpopber ON ((pop.id = lastpopber.pop_id))) ON ((ap.id = pop.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((pop.status = ANY (ARRAY[101, 201, 202, 211, 300])) AND (lastpopber.entwicklung = 1) AND (NOT (pop.id IN ( SELECT DISTINCT tpop.pop_id
           FROM (apflora.tpop
             JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id)))
          WHERE ((tpopmassn.typ >= 1) AND (tpopmassn.typ <= 3) AND (tpopmassn.jahr > lastpopber.jahr))))));




CREATE VIEW apflora.v_qk_pop_statuserloschenletzterpopberaktuell AS
 SELECT DISTINCT ap.proj_id,
    pop.ap_id,
    'Population: Status ist "erloschen", der letzte Populations-Bericht meldet aber "aktuell":'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.ap
     JOIN ((apflora.pop
     JOIN (apflora.popber
     JOIN apflora.v_pop_letzterpopber0_overall ON (((v_pop_letzterpopber0_overall.jahr = popber.jahr) AND (v_pop_letzterpopber0_overall.pop_id = popber.pop_id)))) ON ((popber.pop_id = pop.id)))
     JOIN apflora.tpop ON ((tpop.pop_id = pop.id))) ON ((pop.ap_id = ap.id)))
  WHERE ((popber.entwicklung < 8) AND (pop.status = ANY (ARRAY[101, 202, 211])) AND (tpop.apber_relevant = 1));




CREATE VIEW apflora.v_qk_pop_statuserloschenletzterpopbererloschenmitansiedlung AS
 WITH lastpopber AS (
         SELECT DISTINCT ON (popber.pop_id) popber.pop_id,
            popber.jahr,
            popber.entwicklung
           FROM apflora.popber
          WHERE (popber.jahr IS NOT NULL)
          ORDER BY popber.pop_id, popber.jahr DESC
        )
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Population: Status ist "erloschen" (ursprünglich oder angesiedelt); der letzte Populations-Bericht meldet "erloschen". Seither gab es aber eine Ansiedlung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN (apflora.pop
     JOIN lastpopber ON ((pop.id = lastpopber.pop_id))) ON ((ap.id = pop.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((pop.status = ANY (ARRAY[101, 202, 211])) AND (lastpopber.entwicklung = 8) AND (pop.id IN ( SELECT DISTINCT tpop.pop_id
           FROM (apflora.tpop
             JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id)))
          WHERE ((tpopmassn.typ >= 1) AND (tpopmassn.typ <= 3) AND (tpopmassn.jahr > lastpopber.jahr)))));




CREATE VIEW apflora.v_qk_pop_statuserloschenletzterpopberstabil AS
 WITH lastpopber AS (
         SELECT DISTINCT ON (popber.pop_id) popber.pop_id,
            popber.jahr,
            popber.entwicklung
           FROM apflora.popber
          WHERE (popber.jahr IS NOT NULL)
          ORDER BY popber.pop_id, popber.jahr DESC
        )
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Population: Status ist "erloschen" (ursprünglich oder angesiedelt), Ansaatversuch oder potentieller Wuchsort; der letzte Populations-Bericht meldet aber "stabil" und es gab seither keine Ansiedlung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN (apflora.pop
     JOIN lastpopber ON ((pop.id = lastpopber.pop_id))) ON ((ap.id = pop.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((pop.status = ANY (ARRAY[101, 201, 202, 211, 300])) AND (lastpopber.entwicklung = 2) AND (NOT (pop.id IN ( SELECT DISTINCT tpop.pop_id
           FROM (apflora.tpop
             JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id)))
          WHERE ((tpopmassn.typ >= 1) AND (tpopmassn.typ <= 3) AND (tpopmassn.jahr > lastpopber.jahr))))));




CREATE VIEW apflora.v_qk_pop_statuserloschenletzterpopberunsicher AS
 WITH lastpopber AS (
         SELECT DISTINCT ON (popber.pop_id) popber.pop_id,
            popber.jahr,
            popber.entwicklung
           FROM apflora.popber
          WHERE (popber.jahr IS NOT NULL)
          ORDER BY popber.pop_id, popber.jahr DESC
        )
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Population: Status ist "erloschen" (ursprünglich oder angesiedelt) oder potentieller Wuchsort; der letzte Populations-Bericht meldet aber "unsicher" und es gab seither keine Ansiedlung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN (apflora.pop
     JOIN lastpopber ON ((pop.id = lastpopber.pop_id))) ON ((ap.id = pop.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((pop.status = ANY (ARRAY[101, 202, 211, 300])) AND (lastpopber.entwicklung = 4) AND (NOT (pop.id IN ( SELECT DISTINCT tpop.pop_id
           FROM (apflora.tpop
             JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id)))
          WHERE ((tpopmassn.typ >= 1) AND (tpopmassn.typ <= 3) AND (tpopmassn.jahr > lastpopber.jahr))))));




CREATE VIEW apflora.v_qk_pop_statuserloschenletzterpopberzunehmend AS
 WITH lastpopber AS (
         SELECT DISTINCT ON (popber.pop_id) popber.pop_id,
            popber.jahr,
            popber.entwicklung
           FROM apflora.popber
          WHERE (popber.jahr IS NOT NULL)
          ORDER BY popber.pop_id, popber.jahr DESC
        )
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Population: Status ist "erloschen" (ursprünglich oder angesiedelt), Ansaatversuch oder potentieller Wuchsort; der letzte Populations-Bericht meldet aber "zunehmend" und es gab seither keine Ansiedlung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN (apflora.pop
     JOIN lastpopber ON ((pop.id = lastpopber.pop_id))) ON ((ap.id = pop.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((pop.status = ANY (ARRAY[101, 201, 202, 211, 300])) AND (lastpopber.entwicklung = 3) AND (NOT (pop.id IN ( SELECT DISTINCT tpop.pop_id
           FROM (apflora.tpop
             JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id)))
          WHERE ((tpopmassn.typ >= 1) AND (tpopmassn.typ <= 3) AND (tpopmassn.jahr > lastpopber.jahr))))));




CREATE VIEW apflora.v_qk_pop_statuserloschenmittpopaktuell AS
 SELECT DISTINCT ap.proj_id,
    pop.ap_id,
    'Population: Status ist "erloschen" (urspruenglich oder angesiedelt), es gibt aber eine Teilpopulation mit Status "aktuell" (urspruenglich oder angesiedelt):'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr): ', pop.nr)] AS text
   FROM (apflora.ap
     JOIN apflora.pop ON ((pop.ap_id = ap.id)))
  WHERE ((pop.status = ANY (ARRAY[101, 202, 211])) AND (pop.id IN ( SELECT DISTINCT tpop.pop_id
           FROM apflora.tpop
          WHERE (tpop.status = ANY (ARRAY[100, 200, 210])))));




CREATE VIEW apflora.v_qk_pop_statuserloschenmittpopansaatversuch AS
 SELECT DISTINCT ap.proj_id,
    pop.ap_id,
    'Population: Status ist "erloschen" (urspruenglich oder angesiedelt), es gibt aber eine Teilpopulation mit Status "angesiedelt, Ansaatversuch":'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr): ', pop.nr)] AS text
   FROM (apflora.ap
     JOIN apflora.pop ON ((pop.ap_id = ap.id)))
  WHERE ((pop.status = ANY (ARRAY[101, 202, 211])) AND (pop.id IN ( SELECT DISTINCT tpop.pop_id
           FROM apflora.tpop
          WHERE (tpop.status = 201))));




CREATE VIEW apflora.v_qk_pop_statuspotwuchsortmittpopanders AS
 SELECT DISTINCT ap.proj_id,
    pop.ap_id,
    'Population: Status ist "potenzieller Wuchs-/Ansiedlungsort", es gibt aber eine Teilpopulation mit Status "angesiedelt" oder "urspruenglich":'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text] AS url,
    ARRAY[concat('Population (Nr): ', pop.nr)] AS text
   FROM (apflora.ap
     JOIN apflora.pop ON ((pop.ap_id = ap.id)))
  WHERE ((pop.status = 300) AND (pop.id IN ( SELECT DISTINCT tpop.pop_id
           FROM apflora.tpop
          WHERE (tpop.status < 300))));




CREATE VIEW apflora.v_qk_popber_ohneentwicklung AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Populations-Bericht ohne Entwicklung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Kontroll-Berichte'::text, (popber.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Populations-Bericht (Jahr): ', popber.jahr)] AS text,
    popber.jahr AS "Berichtjahr"
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.popber ON ((pop.id = popber.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((popber.entwicklung IS NULL) AND (popber.jahr IS NOT NULL))
  ORDER BY pop.nr, popber.jahr;




CREATE VIEW apflora.v_qk_popber_ohnejahr AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Populations-Bericht ohne Jahr:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Kontroll-Berichte'::text, (popber.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Populations-Bericht (Jahr): ', popber.jahr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.popber ON ((pop.id = popber.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE (popber.jahr IS NULL)
  ORDER BY pop.nr, popber.jahr;




CREATE VIEW apflora.v_qk_popmassnber_ohneentwicklung AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Populations-Massnahmen-Bericht ohne Entwicklung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Massnahmen-Berichte'::text, (popmassnber.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Populations-Massnahmen-Bericht (Jahr): ', popmassnber.jahr)] AS text,
    popmassnber.jahr AS "Berichtjahr"
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.popmassnber ON ((pop.id = popmassnber.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((popmassnber.beurteilung IS NULL) AND (popmassnber.jahr IS NOT NULL))
  ORDER BY pop.nr, popmassnber.jahr;




CREATE VIEW apflora.v_qk_popmassnber_ohnejahr AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Populations-Massnahmen-Bericht ohne Jahr:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Massnahmen-Berichte'::text, (popmassnber.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Populations-Massnahmen-Bericht (Jahr): ', popmassnber.jahr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.popmassnber ON ((pop.id = popmassnber.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE (popmassnber.jahr IS NULL)
  ORDER BY pop.nr, popmassnber.jahr;




CREATE VIEW apflora.v_qk_tpop_erloschenundrelevantaberletztebeobvor1950_maxbeobjahr AS
 SELECT beob.tpop_id AS id,
    max(date_part('year'::text, beob.datum)) AS "MaxJahr"
   FROM apflora.beob
  WHERE ((beob.datum IS NOT NULL) AND (beob.tpop_id IS NOT NULL))
  GROUP BY beob.tpop_id;




CREATE VIEW apflora.v_qk_tpop_erloschenundrelevantaberletztebeobvor1950 AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'erloschene Teilpopulation "Fuer AP-Bericht relevant" aber letzte Beobachtung vor 1950:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpop.status = ANY (ARRAY[101, 202, 211])) AND (tpop.apber_relevant = 1) AND (NOT (tpop.id IN ( SELECT DISTINCT tpopkontr.tpop_id
           FROM (apflora.tpopkontr
             JOIN apflora.tpopkontrzaehl ON ((tpopkontr.id = tpopkontrzaehl.tpopkontr_id)))
          WHERE (((tpopkontr.typ)::text <> ALL (ARRAY[('Zwischenziel'::character varying)::text, ('Ziel'::character varying)::text])) AND (tpopkontrzaehl.anzahl > 0))))) AND (tpop.id IN ( SELECT beob.tpop_id
           FROM (apflora.beob
             JOIN apflora.v_qk_tpop_erloschenundrelevantaberletztebeobvor1950_maxbeobjahr ON ((beob.tpop_id = v_qk_tpop_erloschenundrelevantaberletztebeobvor1950_maxbeobjahr.id)))
          WHERE (v_qk_tpop_erloschenundrelevantaberletztebeobvor1950_maxbeobjahr."MaxJahr" < (1950)::double precision))))
  ORDER BY pop.nr, tpop.nr;




CREATE VIEW apflora.v_qk_tpop_mitstatusaktuellundtpopbererloschen_maxtpopberjahr AS
 SELECT tpopber.tpop_id,
    max(tpopber.jahr) AS "MaxTPopBerJahr"
   FROM apflora.tpopber
  GROUP BY tpopber.tpop_id;




CREATE VIEW apflora.v_tpopkontr_letztesjahr AS
 SELECT tpop.id,
    max(tpopkontr.jahr) AS "MaxTPopKontrJahr",
    count(tpopkontr.id) AS "AnzTPopKontr"
   FROM (apflora.tpop
     LEFT JOIN apflora.tpopkontr ON ((tpop.id = tpopkontr.tpop_id)))
  WHERE ((((tpopkontr.typ)::text <> ALL (ARRAY[('Ziel'::character varying)::text, ('Zwischenziel'::character varying)::text])) AND (tpopkontr.jahr IS NOT NULL)) OR ((tpopkontr.typ IS NULL) AND (tpopkontr.jahr IS NULL)))
  GROUP BY tpop.id;




CREATE VIEW apflora.v_tpopkontr_letzteid AS
 SELECT v_tpopkontr_letztesjahr.id,
    max((tpopkontr.id)::text) AS "MaxTPopKontrId",
    max(v_tpopkontr_letztesjahr."AnzTPopKontr") AS "AnzTPopKontr"
   FROM (apflora.tpopkontr
     JOIN apflora.v_tpopkontr_letztesjahr ON (((v_tpopkontr_letztesjahr."MaxTPopKontrJahr" = tpopkontr.jahr) AND (tpopkontr.tpop_id = v_tpopkontr_letztesjahr.id))))
  GROUP BY v_tpopkontr_letztesjahr.id;




CREATE VIEW apflora.v_qk_tpop_mitstatusansaatversuchundzaehlungmitanzahl AS
 SELECT DISTINCT ap.proj_id,
    pop.ap_id,
    pop.id AS pop_id,
    tpop.id,
    'Teilpopulation mit Status "Ansaatversuch", bei denen in der letzten Kontrolle eine Anzahl festgestellt wurde:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((tpop.pop_id = pop.id))) ON ((pop.ap_id = ap.id)))
  WHERE ((tpop.status = 201) AND (tpop.id IN ( SELECT DISTINCT tpopkontr.tpop_id
           FROM ((apflora.tpopkontr
             JOIN apflora.tpopkontrzaehl ON ((tpopkontr.id = tpopkontrzaehl.tpopkontr_id)))
             JOIN apflora.v_tpopkontr_letzteid ON (((v_tpopkontr_letzteid.id = tpopkontr.tpop_id) AND (v_tpopkontr_letzteid."MaxTPopKontrId" = (tpopkontr.id)::text))))
          WHERE (((tpopkontr.typ)::text <> ALL (ARRAY[('Zwischenziel'::character varying)::text, ('Ziel'::character varying)::text])) AND (tpopkontrzaehl.anzahl > 0)))));




CREATE VIEW apflora.v_qk_tpop_mitstatuspotentiellundmassnansiedlung AS
 SELECT DISTINCT ap.proj_id,
    pop.ap_id,
    pop.id AS pop_id,
    tpop.id,
    'Teilpopulation mit Status "potentieller Wuchs-/Ansiedlungsort", bei der eine Massnahme des Typs "Ansiedlung" existiert:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((tpop.pop_id = pop.id))) ON ((pop.ap_id = ap.id)))
  WHERE ((tpop.status = 300) AND (tpop.id IN ( SELECT DISTINCT tpopmassn.tpop_id
           FROM apflora.tpopmassn
          WHERE (tpopmassn.typ < 4))));




CREATE VIEW apflora.v_qk_tpop_mitstatuspotentiellundzaehlungmitanzahl AS
 SELECT DISTINCT projekt.id AS proj_id,
    pop.ap_id,
    pop.id AS pop_id,
    tpop.id,
    'Teilpopulation mit Status "potentieller Wuchs-/Ansiedlungsort", bei denen in einer Kontrolle eine Anzahl festgestellt wurde:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((tpop.pop_id = pop.id))) ON ((pop.ap_id = ap.id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((tpop.status = 300) AND (tpop.id IN ( SELECT DISTINCT tpopkontr.tpop_id
           FROM (apflora.tpopkontr
             JOIN apflora.tpopkontrzaehl ON ((tpopkontr.id = tpopkontrzaehl.tpopkontr_id)))
          WHERE (((tpopkontr.typ)::text <> ALL (ARRAY[('Zwischenziel'::character varying)::text, ('Ziel'::character varying)::text])) AND (tpopkontrzaehl.anzahl > 0)))))
  ORDER BY pop.id, tpop.id;




CREATE VIEW apflora.v_qk_tpop_mitstatusunklarohnebegruendung AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Teilpopulation mit "Status unklar", ohne Begruendung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpop.status_unklar = true) AND (tpop.status_unklar_grund IS NULL))
  ORDER BY ap.id, pop.nr, tpop.nr;




CREATE VIEW apflora.v_qk_tpop_ohneapberrelevant AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Teilpopulation ohne "Fuer AP-Bericht relevant":'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE (tpop.apber_relevant IS NULL)
  ORDER BY ap.id, pop.nr, tpop.nr;




CREATE VIEW apflora.v_qk_tpop_ohnebekanntseit AS
 SELECT ap.id AS ap_id,
    'Teilpopulation ohne "bekannt seit":'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE (tpop.bekannt_seit IS NULL)
  ORDER BY ap.id, pop.nr, tpop.nr;




CREATE VIEW apflora.v_qk_tpop_ohneflurname AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Teilpopulation ohne Flurname:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE (tpop.flurname IS NULL)
  ORDER BY ap.id, pop.nr, tpop.nr;




CREATE VIEW apflora.v_qk_tpop_ohnekoordinaten AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Teilpopulation: Mindestens eine Koordinate fehlt:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpop.x IS NULL) OR (tpop.y IS NULL))
  ORDER BY ap.id, pop.nr, tpop.nr;




CREATE VIEW apflora.v_qk_tpop_ohnenr AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Teilpopulation ohne Nr.:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE (tpop.nr IS NULL)
  ORDER BY ap.id, pop.nr, tpop.nr;




CREATE VIEW apflora.v_qk_tpop_ohnestatus AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Teilpopulation ohne Status:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE (tpop.status IS NULL)
  ORDER BY ap.id, pop.nr, tpop.nr;




CREATE VIEW apflora.v_qk_tpop_popnrtpopnrmehrdeutig AS
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Teilpopulation: Die TPop.-Nr. ist mehrdeutig:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((tpop.pop_id = pop.id))) ON ((pop.ap_id = ap.id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((tpop.pop_id IN ( SELECT DISTINCT tpop_1.pop_id
           FROM apflora.tpop tpop_1
          GROUP BY tpop_1.pop_id, tpop_1.nr
         HAVING (count(*) > 1))) AND (tpop.nr IN ( SELECT tpop_1.nr
           FROM apflora.tpop tpop_1
          GROUP BY tpop_1.pop_id, tpop_1.nr
         HAVING (count(*) > 1))))
  ORDER BY projekt.id, ap.id, pop.nr, tpop.nr;




CREATE VIEW apflora.v_qk_tpop_statusaktuellletztertpopbererloschen AS
 WITH lasttpopber AS (
         SELECT DISTINCT ON (tpopber.tpop_id) tpopber.tpop_id,
            tpopber.jahr,
            tpopber.entwicklung
           FROM apflora.tpopber
          WHERE (tpopber.jahr IS NOT NULL)
          ORDER BY tpopber.tpop_id, tpopber.jahr DESC
        )
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Teilpopulation: Status ist "aktuell" (ursprünglich oder angesiedelt) oder potentieller Wuchsort; der letzte Teilpopulations-Bericht meldet aber "erloschen" und es gab seither keine Ansiedlung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN lasttpopber ON ((tpop.id = lasttpopber.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((tpop.status = ANY (ARRAY[100, 200, 210, 300])) AND (lasttpopber.entwicklung = 8) AND (NOT (tpop.id IN ( SELECT tpopmassn.tpop_id
           FROM apflora.tpopmassn
          WHERE ((tpopmassn.tpop_id = tpop.id) AND ((tpopmassn.typ >= 1) AND (tpopmassn.typ <= 3)) AND (tpopmassn.jahr IS NOT NULL) AND (tpopmassn.jahr > lasttpopber.jahr))))));




CREATE VIEW apflora.v_tpop_letztertpopber0_overall AS
 SELECT tpopber.tpop_id,
    max(tpopber.jahr) AS tpopber_jahr
   FROM apflora.tpopber
  WHERE (tpopber.jahr IS NOT NULL)
  GROUP BY tpopber.tpop_id;




CREATE VIEW apflora.v_qk_tpop_statuserloschenletzterpopberaktuell AS
 SELECT DISTINCT ap.proj_id,
    pop.ap_id,
    'Teilpopulation: Status ist "erloschen", der letzte Teilpopulations-Bericht meldet aber "aktuell":'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN (apflora.tpopber
     JOIN apflora.v_tpop_letztertpopber0_overall ON (((v_tpop_letztertpopber0_overall.tpopber_jahr = tpopber.jahr) AND (v_tpop_letztertpopber0_overall.tpop_id = tpopber.tpop_id)))) ON ((tpopber.tpop_id = tpop.id))) ON ((tpop.pop_id = pop.id))) ON ((pop.ap_id = ap.id)))
  WHERE ((tpopber.entwicklung < 8) AND (tpop.status = ANY (ARRAY[101, 202, 211])) AND (NOT (tpop.id IN ( SELECT tpopmassn.tpop_id
           FROM apflora.tpopmassn
          WHERE ((tpopmassn.tpop_id = tpop.id) AND ((tpopmassn.typ >= 1) AND (tpopmassn.typ <= 3)) AND (tpopmassn.jahr IS NOT NULL) AND (tpopmassn.jahr > tpopber.jahr))))));




CREATE VIEW apflora.v_qk_tpop_statuserloschenletztertpopberabnehmend AS
 WITH lasttpopber AS (
         SELECT DISTINCT ON (tpopber.tpop_id) tpopber.tpop_id,
            tpopber.jahr,
            tpopber.entwicklung
           FROM apflora.tpopber
          WHERE (tpopber.jahr IS NOT NULL)
          ORDER BY tpopber.tpop_id, tpopber.jahr DESC
        )
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Teilpopulation: Status ist "erloschen" (ursprünglich oder angesiedelt), Ansaatversuch oder potentieller Wuchsort; der letzte Teilpopulations-Bericht meldet aber "abnehmend" und es gab seither keine Ansiedlung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN lasttpopber ON ((tpop.id = lasttpopber.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((tpop.status = ANY (ARRAY[101, 201, 202, 211, 300])) AND (lasttpopber.entwicklung = 1) AND (NOT (tpop.id IN ( SELECT tpopmassn.tpop_id
           FROM apflora.tpopmassn
          WHERE ((tpopmassn.tpop_id = tpop.id) AND ((tpopmassn.typ >= 1) AND (tpopmassn.typ <= 3)) AND (tpopmassn.jahr IS NOT NULL) AND (tpopmassn.jahr > lasttpopber.jahr))))));




CREATE VIEW apflora.v_qk_tpop_statuserloschenletztertpopbererloschenmitansiedlung AS
 WITH lasttpopber AS (
         SELECT DISTINCT ON (tpopber.tpop_id) tpopber.tpop_id,
            tpopber.jahr,
            tpopber.entwicklung
           FROM apflora.tpopber
          WHERE (tpopber.jahr IS NOT NULL)
          ORDER BY tpopber.tpop_id, tpopber.jahr DESC
        )
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Teilpopulation: Status ist "erloschen" (ursprünglich oder angesiedelt); der letzte Teilpopulations-Bericht meldet "erloschen". Seither gab es aber eine Ansiedlung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN lasttpopber ON ((tpop.id = lasttpopber.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((tpop.status = ANY (ARRAY[101, 202, 211])) AND (lasttpopber.entwicklung = 8) AND (tpop.id IN ( SELECT tpopmassn.tpop_id
           FROM apflora.tpopmassn
          WHERE ((tpopmassn.tpop_id = tpop.id) AND ((tpopmassn.typ >= 1) AND (tpopmassn.typ <= 3)) AND (tpopmassn.jahr IS NOT NULL) AND (tpopmassn.jahr > lasttpopber.jahr)))));




CREATE VIEW apflora.v_qk_tpop_statuserloschenletztertpopberstabil AS
 WITH lasttpopber AS (
         SELECT DISTINCT ON (tpopber.tpop_id) tpopber.tpop_id,
            tpopber.jahr,
            tpopber.entwicklung
           FROM apflora.tpopber
          WHERE (tpopber.jahr IS NOT NULL)
          ORDER BY tpopber.tpop_id, tpopber.jahr DESC
        )
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Teilpopulation: Status ist "erloschen" (ursprünglich oder angesiedelt), Ansaatversuch oder potentieller Wuchsort; der letzte Teilpopulations-Bericht meldet aber "stabil" und es gab seither keine Ansiedlung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN lasttpopber ON ((tpop.id = lasttpopber.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((tpop.status = ANY (ARRAY[101, 201, 202, 211, 300])) AND (lasttpopber.entwicklung = 2) AND (NOT (tpop.id IN ( SELECT tpopmassn.tpop_id
           FROM apflora.tpopmassn
          WHERE ((tpopmassn.tpop_id = tpop.id) AND ((tpopmassn.typ >= 1) AND (tpopmassn.typ <= 3)) AND (tpopmassn.jahr IS NOT NULL) AND (tpopmassn.jahr > lasttpopber.jahr))))));




CREATE VIEW apflora.v_qk_tpop_statuserloschenletztertpopberunsicher AS
 WITH lasttpopber AS (
         SELECT DISTINCT ON (tpopber.tpop_id) tpopber.tpop_id,
            tpopber.jahr,
            tpopber.entwicklung
           FROM apflora.tpopber
          WHERE (tpopber.jahr IS NOT NULL)
          ORDER BY tpopber.tpop_id, tpopber.jahr DESC
        )
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Teilpopulation: Status ist "erloschen" (ursprünglich oder angesiedelt) oder potentieller Wuchsort; der letzte Teilpopulations-Bericht meldet aber "unsicher" und es gab seither keine Ansiedlung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN lasttpopber ON ((tpop.id = lasttpopber.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((tpop.status = ANY (ARRAY[101, 202, 211, 300])) AND (lasttpopber.entwicklung = 4) AND (NOT (tpop.id IN ( SELECT tpopmassn.tpop_id
           FROM apflora.tpopmassn
          WHERE ((tpopmassn.tpop_id = tpop.id) AND ((tpopmassn.typ >= 1) AND (tpopmassn.typ <= 3)) AND (tpopmassn.jahr IS NOT NULL) AND (tpopmassn.jahr > lasttpopber.jahr))))));




CREATE VIEW apflora.v_qk_tpop_statuserloschenletztertpopberzunehmend AS
 WITH lasttpopber AS (
         SELECT DISTINCT ON (tpopber.tpop_id) tpopber.tpop_id,
            tpopber.jahr,
            tpopber.entwicklung
           FROM apflora.tpopber
          WHERE (tpopber.jahr IS NOT NULL)
          ORDER BY tpopber.tpop_id, tpopber.jahr DESC
        )
 SELECT projekt.id AS proj_id,
    ap.id AS ap_id,
    'Teilpopulation: Status ist "erloschen" (ursprünglich oder angesiedelt), Ansaatversuch oder potentieller Wuchsort; der letzte Teilpopulations-Bericht meldet aber "zunehmend" und es gab seither keine Ansiedlung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr)] AS text
   FROM (apflora.projekt
     JOIN (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN lasttpopber ON ((tpop.id = lasttpopber.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id))) ON ((projekt.id = ap.proj_id)))
  WHERE ((tpop.status = ANY (ARRAY[101, 201, 202, 211, 300])) AND (lasttpopber.entwicklung = 3) AND (NOT (tpop.id IN ( SELECT tpopmassn.tpop_id
           FROM apflora.tpopmassn
          WHERE ((tpopmassn.tpop_id = tpop.id) AND ((tpopmassn.typ >= 1) AND (tpopmassn.typ <= 3)) AND (tpopmassn.jahr IS NOT NULL) AND (tpopmassn.jahr > lasttpopber.jahr))))));




CREATE VIEW apflora.v_qk_tpop_statuspotentiellfuerapberrelevant AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Teilpopulation mit Status "potenzieller Wuchs-/Ansiedlungsort" und "Fuer AP-Bericht relevant?" = ja:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpop.status = 300) AND (tpop.apber_relevant = 1))
  ORDER BY ap.id, pop.nr, tpop.nr;




CREATE VIEW apflora.v_qk_tpopber_ohneentwicklung AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Teilpopulations-Bericht ohne Entwicklung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text, 'Kontroll-Berichte'::text, (tpopber.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr), concat('Teilpopulations-Bericht (Jahr): ', tpopber.jahr)] AS text,
    tpopber.jahr AS "Berichtjahr"
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN apflora.tpopber ON ((tpop.id = tpopber.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpopber.entwicklung IS NULL) AND (tpopber.jahr IS NOT NULL))
  ORDER BY pop.nr, tpop.nr, tpopber.jahr;




CREATE VIEW apflora.v_qk_tpopber_ohnejahr AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Teilpopulations-Bericht ohne Jahr:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text, 'Kontroll-Berichte'::text, (tpopber.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr), concat('Teilpopulations-Bericht (id): ', tpopber.id)] AS text
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN apflora.tpopber ON ((tpop.id = tpopber.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE (tpopber.jahr IS NULL)
  ORDER BY pop.nr, tpop.nr, tpopber.jahr;




CREATE VIEW apflora.v_qk_ziel_ohnejahr AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Ziel ohne Jahr:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Ziele'::text, (ziel.id)::text] AS url,
    ARRAY[concat('Ziel (id): ', ziel.id)] AS text
   FROM (apflora.ap
     JOIN apflora.ziel ON ((ap.id = ziel.ap_id)))
  WHERE ((ziel.jahr IS NULL) OR (ziel.jahr = 1))
  ORDER BY ziel.id;




CREATE VIEW apflora.v_qk_ziel_ohnetyp AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Ziel ohne Typ:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Ziele'::text, (ziel.id)::text] AS url,
    ARRAY[concat('Ziel (Jahr): ', ziel.jahr)] AS text
   FROM (apflora.ap
     JOIN apflora.ziel ON ((ap.id = ziel.ap_id)))
  WHERE (ziel.typ IS NULL)
  ORDER BY ziel.jahr;




CREATE VIEW apflora.v_qk_ziel_ohneziel AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Ziel ohne Ziel:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Ziele'::text, (ziel.id)::text] AS url,
    ARRAY[concat('Ziel (Jahr): ', ziel.jahr)] AS text
   FROM (apflora.ap
     JOIN apflora.ziel ON ((ap.id = ziel.ap_id)))
  WHERE (ziel.bezeichnung IS NULL)
  ORDER BY ziel.jahr;




CREATE VIEW apflora.v_qk_zielber_ohneentwicklung AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Ziel-Bericht ohne Entwicklung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Ziele'::text, (ziel.id)::text, 'Berichte'::text, (zielber.id)::text] AS url,
    ARRAY[concat('Ziel (Jahr): ', ziel.jahr), concat('Ziel-Bericht (Jahr): ', zielber.jahr)] AS text,
    zielber.jahr AS "Berichtjahr"
   FROM (apflora.ap
     JOIN (apflora.ziel
     JOIN apflora.zielber ON ((ziel.id = zielber.ziel_id))) ON ((ap.id = ziel.ap_id)))
  WHERE ((zielber.erreichung IS NULL) AND (zielber.jahr IS NOT NULL))
  ORDER BY ziel.jahr, ziel.id, zielber.jahr;




CREATE VIEW apflora.v_qk_zielber_ohnejahr AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Ziel-Bericht ohne Jahr:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Ziele'::text, (ziel.id)::text, 'Berichte'::text, (zielber.id)::text] AS url,
    ARRAY[concat('Ziel (Jahr): ', ziel.jahr), concat('Ziel-Bericht (Jahr): ', zielber.jahr)] AS text
   FROM (apflora.ap
     JOIN (apflora.ziel
     JOIN apflora.zielber ON ((ziel.id = zielber.ziel_id))) ON ((ap.id = ziel.ap_id)))
  WHERE (zielber.jahr IS NULL)
  ORDER BY ziel.jahr, ziel.id, zielber.jahr;




CREATE VIEW apflora.v_tpop AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.familie,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    adresse.name AS ap_bearbeiter,
    pop.id AS pop_id,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    pop_status_werte.text AS pop_status,
    pop.bekannt_seit AS pop_bekannt_seit,
    pop.status_unklar AS pop_status_unklar,
    pop.status_unklar_begruendung AS pop_status_unklar_begruendung,
    pop.x AS pop_x,
    pop.y AS pop_y,
    tpop.id,
    tpop.nr,
    tpop.gemeinde,
    tpop.flurname,
    pop_status_werte_2.text AS status,
    tpop.bekannt_seit,
    tpop.status_unklar,
    tpop.status_unklar_grund,
    tpop.x,
    tpop.y,
    tpop.radius,
    tpop.hoehe,
    tpop.exposition,
    tpop.klima,
    tpop.neigung,
    tpop.beschreibung,
    tpop.kataster_nr,
    tpop.apber_relevant,
    tpop.eigentuemer,
    tpop.kontakt,
    tpop.nutzungszone,
    tpop.bewirtschafter,
    tpop.bewirtschaftung,
    tpop.changed,
    tpop.changed_by
   FROM (((((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     LEFT JOIN apflora.pop_status_werte pop_status_werte_2 ON ((tpop.status = pop_status_werte_2.code)))
     LEFT JOIN apflora.adresse ON ((ap.bearbeiter = adresse.id)))
  WHERE (ae_eigenschaften.taxid > 150)
  ORDER BY ae_eigenschaften.artname, pop.nr, tpop.nr;




CREATE VIEW apflora.v_tpop_letztekontrid AS
 SELECT tpop.id,
    v_tpopkontr_letzteid."MaxTPopKontrId",
    v_tpopkontr_letzteid."AnzTPopKontr"
   FROM (apflora.tpop
     LEFT JOIN apflora.v_tpopkontr_letzteid ON ((tpop.id = v_tpopkontr_letzteid.id)));




CREATE VIEW apflora.v_tpopkontr AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.familie,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    apflora_adresse_1.name AS ap_bearbeiter,
    pop.id AS pop_id,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    pop_status_werte.text AS pop_status,
    pop.bekannt_seit AS pop_bekannt_seit,
    tpop.id AS tpop_id,
    tpop.nr AS tpop_nr,
    tpop.gemeinde AS tpop_gemeinde,
    tpop.flurname AS tpop_flurname,
    pop_status_werte_2.text AS tpop_status,
    tpop.bekannt_seit AS tpop_bekannt_seit,
    tpop.status_unklar AS tpop_status_unklar,
    tpop.status_unklar_grund AS tpop_status_unklar_grund,
    tpop.x AS tpop_x,
    tpop.y AS tpop_y,
    tpop.radius AS tpop_radius,
    tpop.hoehe AS tpop_hoehe,
    tpop.exposition AS tpop_exposition,
    tpop.klima AS tpop_klima,
    tpop.neigung AS tpop_neigung,
    tpop.beschreibung AS tpop_beschreibung,
    tpop.kataster_nr AS tpop_kataster_nr,
    tpop.apber_relevant AS tpop_apber_relevant,
    tpop.eigentuemer AS tpop_eigentuemer,
    tpop.kontakt AS tpop_kontakt,
    tpop.nutzungszone AS tpop_nutzungszone,
    tpop.bewirtschafter AS tpop_bewirtschafter,
    tpop.bewirtschaftung AS tpop_bewirtschaftung,
    tpopkontr.id,
    tpopkontr.jahr,
    tpopkontr.datum,
    tpopkontr_typ_werte.text AS typ,
    adresse.name AS bearbeiter,
    tpopkontr.ueberlebensrate,
    tpopkontr.vitalitaet,
    tpop_entwicklung_werte.text AS entwicklung,
    tpopkontr.ursachen,
    tpopkontr.erfolgsbeurteilung,
    tpopkontr.umsetzung_aendern,
    tpopkontr.kontrolle_aendern,
    tpopkontr.bemerkungen,
    tpopkontr.lr_delarze,
    tpopkontr.lr_umgebung_delarze,
    tpopkontr.vegetationstyp,
    tpopkontr.konkurrenz,
    tpopkontr.moosschicht,
    tpopkontr.krautschicht,
    tpopkontr.strauchschicht,
    tpopkontr.baumschicht,
    tpopkontr.boden_typ,
    tpopkontr.boden_kalkgehalt,
    tpopkontr.boden_durchlaessigkeit,
    tpopkontr.boden_humus,
    tpopkontr.boden_naehrstoffgehalt,
    tpopkontr.boden_abtrag,
    tpopkontr.wasserhaushalt,
    tpopkontr_idbiotuebereinst_werte.text AS idealbiotop_uebereinstimmung,
    tpopkontr.handlungsbedarf,
    tpopkontr.flaeche_ueberprueft,
    tpopkontr.flaeche,
    tpopkontr.plan_vorhanden,
    tpopkontr.deckung_vegetation,
    tpopkontr.deckung_nackter_boden,
    tpopkontr.deckung_ap_art,
    tpopkontr.jungpflanzen_vorhanden,
    tpopkontr.vegetationshoehe_maximum,
    tpopkontr.vegetationshoehe_mittel,
    tpopkontr.gefaehrdung,
    tpopkontr.changed,
    tpopkontr.changed_by,
    array_to_string(array_agg(tpopkontrzaehl.anzahl), ', '::text) AS zaehlung_anzahlen,
    string_agg((tpopkontrzaehl_einheit_werte.text)::text, ', '::text) AS zaehlung_einheiten,
    string_agg((tpopkontrzaehl_methode_werte.text)::text, ', '::text) AS zaehlung_methoden
   FROM (apflora.pop_status_werte pop_status_werte_2
     RIGHT JOIN (((((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN ((((((apflora.tpopkontr
     LEFT JOIN apflora.tpopkontr_typ_werte ON (((tpopkontr.typ)::text = (tpopkontr_typ_werte.text)::text)))
     LEFT JOIN apflora.adresse ON ((tpopkontr.bearbeiter = adresse.id)))
     LEFT JOIN apflora.tpop_entwicklung_werte ON ((tpopkontr.entwicklung = tpop_entwicklung_werte.code)))
     LEFT JOIN apflora.tpopkontrzaehl ON ((tpopkontr.id = tpopkontrzaehl.tpopkontr_id)))
     LEFT JOIN apflora.tpopkontrzaehl_einheit_werte ON ((tpopkontrzaehl.einheit = tpopkontrzaehl_einheit_werte.code)))
     LEFT JOIN apflora.tpopkontrzaehl_methode_werte ON ((tpopkontrzaehl.methode = tpopkontrzaehl_methode_werte.code))) ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     LEFT JOIN apflora.tpopkontr_idbiotuebereinst_werte ON ((tpopkontr.idealbiotop_uebereinstimmung = tpopkontr_idbiotuebereinst_werte.code)))
     LEFT JOIN apflora.adresse apflora_adresse_1 ON ((ap.bearbeiter = apflora_adresse_1.id))) ON ((pop_status_werte_2.code = tpop.status)))
  WHERE (ae_eigenschaften.taxid > 150)
  GROUP BY ap.id, ae_eigenschaften.familie, ae_eigenschaften.artname, ap_bearbstand_werte.text, ap.start_jahr, ap_umsetzung_werte.text, apflora_adresse_1.name, pop.id, pop.nr, pop.name, pop_status_werte.text, pop.bekannt_seit, tpop.id, tpop.nr, tpop.gemeinde, tpop.flurname, pop_status_werte_2.text, tpop.bekannt_seit, tpop.status_unklar, tpop.status_unklar_grund, tpop.x, tpop.y, tpop.radius, tpop.hoehe, tpop.exposition, tpop.klima, tpop.neigung, tpop.beschreibung, tpop.kataster_nr, tpop.apber_relevant, tpop.eigentuemer, tpop.kontakt, tpop.nutzungszone, tpop.bewirtschafter, tpop.bewirtschaftung, tpopkontr.id, tpopkontr.tpop_id, tpopkontr.jahr, tpopkontr.datum, tpopkontr_typ_werte.text, adresse.name, tpopkontr.ueberlebensrate, tpopkontr.vitalitaet, tpop_entwicklung_werte.text, tpopkontr.ursachen, tpopkontr.erfolgsbeurteilung, tpopkontr.umsetzung_aendern, tpopkontr.kontrolle_aendern, tpopkontr.bemerkungen, tpopkontr.lr_delarze, tpopkontr.lr_umgebung_delarze, tpopkontr.vegetationstyp, tpopkontr.konkurrenz, tpopkontr.moosschicht, tpopkontr.krautschicht, tpopkontr.strauchschicht, tpopkontr.baumschicht, tpopkontr.boden_typ, tpopkontr.boden_kalkgehalt, tpopkontr.boden_durchlaessigkeit, tpopkontr.boden_humus, tpopkontr.boden_naehrstoffgehalt, tpopkontr.boden_abtrag, tpopkontr.wasserhaushalt, tpopkontr_idbiotuebereinst_werte.text, tpopkontr.handlungsbedarf, tpopkontr.flaeche_ueberprueft, tpopkontr.flaeche, tpopkontr.plan_vorhanden, tpopkontr.deckung_vegetation, tpopkontr.deckung_nackter_boden, tpopkontr.deckung_ap_art, tpopkontr.jungpflanzen_vorhanden, tpopkontr.vegetationshoehe_maximum, tpopkontr.vegetationshoehe_mittel, tpopkontr.gefaehrdung, tpopkontr.changed, tpopkontr.changed_by
  ORDER BY ae_eigenschaften.artname, pop.nr, tpop.nr;




CREATE VIEW apflora.v_tpop_anzkontrinklletzter AS
 SELECT v_tpop.ap_id,
    v_tpop.familie,
    v_tpop.artname,
    v_tpop.ap_bearbeitung,
    v_tpop.ap_start_jahr,
    v_tpop.ap_umsetzung,
    v_tpop.ap_bearbeiter,
    v_tpop.pop_id,
    v_tpop.pop_nr,
    v_tpop.pop_name,
    v_tpop.pop_status,
    v_tpop.pop_bekannt_seit,
    v_tpop.pop_status_unklar,
    v_tpop.pop_status_unklar_begruendung,
    v_tpop.pop_x,
    v_tpop.pop_y,
    v_tpop.id,
    v_tpop.nr,
    v_tpop.gemeinde,
    v_tpop.flurname,
    v_tpop.status,
    v_tpop.bekannt_seit,
    v_tpop.status_unklar,
    v_tpop.status_unklar_grund,
    v_tpop.x,
    v_tpop.y,
    v_tpop.radius,
    v_tpop.hoehe,
    v_tpop.exposition,
    v_tpop.klima,
    v_tpop.neigung,
    v_tpop.beschreibung,
    v_tpop.kataster_nr,
    v_tpop.apber_relevant,
    v_tpop.eigentuemer,
    v_tpop.kontakt,
    v_tpop.nutzungszone,
    v_tpop.bewirtschafter,
    v_tpop.bewirtschaftung,
    v_tpop.changed,
    v_tpop.changed_by,
    v_tpop_letztekontrid."AnzTPopKontr" AS anzahl_kontrollen,
    v_tpopkontr.id AS kontr_id,
    v_tpopkontr.jahr AS kontr_jahr,
    v_tpopkontr.datum AS kontr_datum,
    v_tpopkontr.typ AS kontr_typ,
    v_tpopkontr.bearbeiter AS kontr_bearbeiter,
    v_tpopkontr.ueberlebensrate AS kontr_ueberlebensrate,
    v_tpopkontr.vitalitaet AS kontr_vitalitaet,
    v_tpopkontr.entwicklung AS kontr_entwicklung,
    v_tpopkontr.ursachen AS kontr_ursachen,
    v_tpopkontr.erfolgsbeurteilung AS kontr_erfolgsbeurteilung,
    v_tpopkontr.umsetzung_aendern AS kontr_umsetzung_aendern,
    v_tpopkontr.kontrolle_aendern AS kontr_kontrolle_aendern,
    v_tpopkontr.bemerkungen AS kontr_bemerkungen,
    v_tpopkontr.lr_delarze AS kontr_lr_delarze,
    v_tpopkontr.lr_umgebung_delarze AS kontr_lr_umgebung_delarze,
    v_tpopkontr.vegetationstyp AS kontr_vegetationstyp,
    v_tpopkontr.konkurrenz AS kontr_konkurrenz,
    v_tpopkontr.moosschicht AS kontr_moosschicht,
    v_tpopkontr.krautschicht AS kontr_krautschicht,
    v_tpopkontr.strauchschicht AS kontr_strauchschicht,
    v_tpopkontr.baumschicht AS kontr_baumschicht,
    v_tpopkontr.boden_typ AS kontr_boden_typ,
    v_tpopkontr.boden_kalkgehalt AS kontr_boden_kalkgehalt,
    v_tpopkontr.boden_durchlaessigkeit AS kontr_boden_durchlaessigkeit,
    v_tpopkontr.boden_humus AS kontr_boden_humus,
    v_tpopkontr.boden_naehrstoffgehalt AS kontr_boden_naehrstoffgehalt,
    v_tpopkontr.boden_abtrag AS kontr_boden_abtrag,
    v_tpopkontr.wasserhaushalt AS kontr_wasserhaushalt,
    v_tpopkontr.idealbiotop_uebereinstimmung AS kontr_idealbiotop_uebereinstimmung,
    v_tpopkontr.handlungsbedarf AS kontr_handlungsbedarf,
    v_tpopkontr.flaeche_ueberprueft AS kontr_flaeche_ueberprueft,
    v_tpopkontr.flaeche AS kontr_flaeche,
    v_tpopkontr.plan_vorhanden AS kontr_plan_vorhanden,
    v_tpopkontr.deckung_vegetation AS kontr_deckung_vegetation,
    v_tpopkontr.deckung_nackter_boden AS kontr_deckung_nackter_boden,
    v_tpopkontr.deckung_ap_art AS kontr_deckung_ap_art,
    v_tpopkontr.jungpflanzen_vorhanden AS kontr_jungpflanzen_vorhanden,
    v_tpopkontr.vegetationshoehe_maximum AS kontr_vegetationshoehe_maximum,
    v_tpopkontr.vegetationshoehe_mittel AS kontr_vegetationshoehe_mittel,
    v_tpopkontr.gefaehrdung AS kontr_gefaehrdung,
    v_tpopkontr.changed AS kontr_changed,
    v_tpopkontr.changed_by AS kontr_changed_by,
    v_tpopkontr.zaehlung_anzahlen,
    v_tpopkontr.zaehlung_einheiten,
    v_tpopkontr.zaehlung_methoden
   FROM ((apflora.v_tpop_letztekontrid
     LEFT JOIN apflora.v_tpopkontr ON ((v_tpop_letztekontrid."MaxTPopKontrId" = (v_tpopkontr.id)::text)))
     JOIN apflora.v_tpop ON ((v_tpop_letztekontrid.id = v_tpop.id)));




CREATE VIEW apflora.v_tpopber_letzteid AS
 SELECT tpopkontr.tpop_id,
    ( SELECT tpopber_1.id
           FROM apflora.tpopber tpopber_1
          WHERE (tpopber_1.tpop_id = tpopkontr.tpop_id)
          ORDER BY tpopber_1.changed DESC
         LIMIT 1) AS tpopber_letzte_id,
    max(tpopber.jahr) AS tpopber_jahr_max,
    count(tpopber.id) AS tpopber_anz
   FROM (apflora.tpopkontr
     JOIN apflora.tpopber ON ((tpopkontr.tpop_id = tpopber.tpop_id)))
  WHERE (((tpopkontr.typ)::text <> ALL (ARRAY[('Ziel'::character varying)::text, ('Zwischenziel'::character varying)::text])) AND (tpopber.jahr IS NOT NULL))
  GROUP BY tpopkontr.tpop_id;




CREATE VIEW apflora.v_tpopber_mitletzterid AS
 SELECT tpopber.tpop_id,
    v_tpopber_letzteid.tpopber_anz,
    tpopber.id,
    tpopber.jahr,
    tpop_entwicklung_werte.text AS entwicklung,
    tpopber.bemerkungen,
    tpopber.changed,
    tpopber.changed_by
   FROM ((apflora.v_tpopber_letzteid
     JOIN apflora.tpopber ON (((v_tpopber_letzteid.tpopber_letzte_id = tpopber.id) AND (v_tpopber_letzteid.tpop_id = tpopber.tpop_id))))
     LEFT JOIN apflora.tpop_entwicklung_werte ON ((tpopber.entwicklung = tpop_entwicklung_werte.code)));




CREATE VIEW apflora.v_tpop_anzkontrinklletzterundletztertpopber AS
 SELECT v_tpop_anzkontrinklletzter.ap_id,
    v_tpop_anzkontrinklletzter.familie,
    v_tpop_anzkontrinklletzter.artname,
    v_tpop_anzkontrinklletzter.ap_bearbeitung,
    v_tpop_anzkontrinklletzter.ap_start_jahr,
    v_tpop_anzkontrinklletzter.ap_umsetzung,
    v_tpop_anzkontrinklletzter.ap_bearbeiter,
    v_tpop_anzkontrinklletzter.pop_id,
    v_tpop_anzkontrinklletzter.pop_nr,
    v_tpop_anzkontrinklletzter.pop_name,
    v_tpop_anzkontrinklletzter.pop_status,
    v_tpop_anzkontrinklletzter.pop_bekannt_seit,
    v_tpop_anzkontrinklletzter.pop_status_unklar,
    v_tpop_anzkontrinklletzter.pop_status_unklar_begruendung,
    v_tpop_anzkontrinklletzter.pop_x,
    v_tpop_anzkontrinklletzter.pop_y,
    v_tpop_anzkontrinklletzter.id,
    v_tpop_anzkontrinklletzter.nr,
    v_tpop_anzkontrinklletzter.gemeinde,
    v_tpop_anzkontrinklletzter.flurname,
    v_tpop_anzkontrinklletzter.status,
    v_tpop_anzkontrinklletzter.bekannt_seit,
    v_tpop_anzkontrinklletzter.status_unklar,
    v_tpop_anzkontrinklletzter.status_unklar_grund,
    v_tpop_anzkontrinklletzter.x,
    v_tpop_anzkontrinklletzter.y,
    v_tpop_anzkontrinklletzter.radius,
    v_tpop_anzkontrinklletzter.hoehe,
    v_tpop_anzkontrinklletzter.exposition,
    v_tpop_anzkontrinklletzter.klima,
    v_tpop_anzkontrinklletzter.neigung,
    v_tpop_anzkontrinklletzter.beschreibung,
    v_tpop_anzkontrinklletzter.kataster_nr,
    v_tpop_anzkontrinklletzter.apber_relevant,
    v_tpop_anzkontrinklletzter.eigentuemer,
    v_tpop_anzkontrinklletzter.kontakt,
    v_tpop_anzkontrinklletzter.nutzungszone,
    v_tpop_anzkontrinklletzter.bewirtschafter,
    v_tpop_anzkontrinklletzter.bewirtschaftung,
    v_tpop_anzkontrinklletzter.changed,
    v_tpop_anzkontrinklletzter.changed_by,
    v_tpop_anzkontrinklletzter.anzahl_kontrollen,
    v_tpop_anzkontrinklletzter.kontr_id,
    v_tpop_anzkontrinklletzter.kontr_jahr,
    v_tpop_anzkontrinklletzter.kontr_datum,
    v_tpop_anzkontrinklletzter.kontr_typ,
    v_tpop_anzkontrinklletzter.kontr_bearbeiter,
    v_tpop_anzkontrinklletzter.kontr_ueberlebensrate,
    v_tpop_anzkontrinklletzter.kontr_vitalitaet,
    v_tpop_anzkontrinklletzter.kontr_entwicklung,
    v_tpop_anzkontrinklletzter.kontr_ursachen,
    v_tpop_anzkontrinklletzter.kontr_erfolgsbeurteilung,
    v_tpop_anzkontrinklletzter.kontr_umsetzung_aendern,
    v_tpop_anzkontrinklletzter.kontr_kontrolle_aendern,
    v_tpop_anzkontrinklletzter.kontr_bemerkungen,
    v_tpop_anzkontrinklletzter.kontr_lr_delarze,
    v_tpop_anzkontrinklletzter.kontr_lr_umgebung_delarze,
    v_tpop_anzkontrinklletzter.kontr_vegetationstyp,
    v_tpop_anzkontrinklletzter.kontr_konkurrenz,
    v_tpop_anzkontrinklletzter.kontr_moosschicht,
    v_tpop_anzkontrinklletzter.kontr_krautschicht,
    v_tpop_anzkontrinklletzter.kontr_strauchschicht,
    v_tpop_anzkontrinklletzter.kontr_baumschicht,
    v_tpop_anzkontrinklletzter.kontr_boden_typ,
    v_tpop_anzkontrinklletzter.kontr_boden_kalkgehalt,
    v_tpop_anzkontrinklletzter.kontr_boden_durchlaessigkeit,
    v_tpop_anzkontrinklletzter.kontr_boden_humus,
    v_tpop_anzkontrinklletzter.kontr_boden_naehrstoffgehalt,
    v_tpop_anzkontrinklletzter.kontr_boden_abtrag,
    v_tpop_anzkontrinklletzter.kontr_wasserhaushalt,
    v_tpop_anzkontrinklletzter.kontr_idealbiotop_uebereinstimmung,
    v_tpop_anzkontrinklletzter.kontr_handlungsbedarf,
    v_tpop_anzkontrinklletzter.kontr_flaeche_ueberprueft,
    v_tpop_anzkontrinklletzter.kontr_flaeche,
    v_tpop_anzkontrinklletzter.kontr_plan_vorhanden,
    v_tpop_anzkontrinklletzter.kontr_deckung_vegetation,
    v_tpop_anzkontrinklletzter.kontr_deckung_nackter_boden,
    v_tpop_anzkontrinklletzter.kontr_deckung_ap_art,
    v_tpop_anzkontrinklletzter.kontr_jungpflanzen_vorhanden,
    v_tpop_anzkontrinklletzter.kontr_vegetationshoehe_maximum,
    v_tpop_anzkontrinklletzter.kontr_vegetationshoehe_mittel,
    v_tpop_anzkontrinklletzter.kontr_gefaehrdung,
    v_tpop_anzkontrinklletzter.kontr_changed,
    v_tpop_anzkontrinklletzter.kontr_changed_by,
    v_tpop_anzkontrinklletzter.zaehlung_anzahlen,
    v_tpop_anzkontrinklletzter.zaehlung_einheiten,
    v_tpop_anzkontrinklletzter.zaehlung_methoden,
    v_tpopber_mitletzterid.tpopber_anz,
    v_tpopber_mitletzterid.id AS tpopber_id,
    v_tpopber_mitletzterid.jahr AS tpopber_jahr,
    v_tpopber_mitletzterid.entwicklung AS tpopber_entwicklung,
    v_tpopber_mitletzterid.bemerkungen AS tpopber_bemerkungen,
    v_tpopber_mitletzterid.changed AS tpopber_changed,
    v_tpopber_mitletzterid.changed_by AS tpopber_changed_by
   FROM (apflora.v_tpop_anzkontrinklletzter
     LEFT JOIN apflora.v_tpopber_mitletzterid ON ((v_tpop_anzkontrinklletzter.id = v_tpopber_mitletzterid.tpop_id)));




CREATE VIEW apflora.v_tpop_anzmassn AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.familie,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    pop.id AS pop_id,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    pop_status_werte.text AS pop_status,
    pop.bekannt_seit AS pop_bekannt_seit,
    pop.status_unklar AS pop_status_unklar,
    pop.status_unklar_begruendung AS pop_status_unklar_begruendung,
    pop.x AS pop_x,
    pop.y AS pop_y,
    tpop.id,
    tpop.nr,
    tpop.gemeinde,
    tpop.flurname,
    pop_status_werte_2.text AS status,
    tpop.bekannt_seit,
    tpop.status_unklar,
    tpop.status_unklar_grund,
    tpop.x,
    tpop.y,
    tpop.radius,
    tpop.hoehe,
    tpop.exposition,
    tpop.klima,
    tpop.neigung,
    tpop.beschreibung,
    tpop.kataster_nr,
    tpop.apber_relevant,
    tpop.eigentuemer,
    tpop.kontakt,
    tpop.nutzungszone,
    tpop.bewirtschafter,
    tpop.bewirtschaftung,
    count(tpopmassn.id) AS anzahl_massnahmen
   FROM (apflora.ae_eigenschaften
     JOIN (((apflora.ap
     JOIN ((apflora.pop
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     JOIN ((apflora.tpop
     LEFT JOIN apflora.tpopmassn ON ((tpop.id = tpopmassn.tpop_id)))
     LEFT JOIN apflora.pop_status_werte pop_status_werte_2 ON ((tpop.status = pop_status_werte_2.code))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code))) ON ((ae_eigenschaften.id = ap.art_id)))
  GROUP BY ap.id, ae_eigenschaften.familie, ae_eigenschaften.artname, ap_bearbstand_werte.text, ap.start_jahr, ap_umsetzung_werte.text, pop.id, pop.nr, pop.name, pop_status_werte.text, pop.bekannt_seit, pop.status_unklar, pop.status_unklar_begruendung, pop.x, pop.y, tpop.id, tpop.nr, tpop.gemeinde, tpop.flurname, pop_status_werte_2.text, tpop.bekannt_seit, tpop.status_unklar, tpop.status_unklar_grund, tpop.x, tpop.y, tpop.radius, tpop.hoehe, tpop.exposition, tpop.klima, tpop.neigung, tpop.beschreibung, tpop.kataster_nr, tpop.apber_relevant, tpop.eigentuemer, tpop.kontakt, tpop.nutzungszone, tpop.bewirtschafter, tpop.bewirtschaftung
  ORDER BY ae_eigenschaften.artname, pop.nr, tpop.nr;




CREATE VIEW apflora.v_tpop_for_ap AS
 SELECT tpop.id_old,
    tpop.nr,
    tpop.gemeinde,
    tpop.flurname,
    tpop.x,
    tpop.y,
    tpop.radius,
    tpop.hoehe,
    tpop.exposition,
    tpop.klima,
    tpop.neigung,
    tpop.beschreibung,
    tpop.kataster_nr,
    tpop.status,
    tpop.status_unklar_grund,
    tpop.apber_relevant,
    tpop.bekannt_seit,
    tpop.eigentuemer,
    tpop.kontakt,
    tpop.nutzungszone,
    tpop.bewirtschafter,
    tpop.bewirtschaftung,
    tpop.bemerkungen,
    tpop.changed,
    tpop.changed_by,
    tpop.id,
    tpop.pop_id,
    tpop.status_unklar,
    ap.id AS ap_id
   FROM ((apflora.ap
     JOIN apflora.pop ON ((ap.id = pop.ap_id)))
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)));




CREATE VIEW apflora.v_tpop_fuergis_read AS
 SELECT (ap.id)::text AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    (pop.id)::text AS pop_id,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    pop_status_werte.text AS pop_status,
    pop.bekannt_seit AS pop_bekannt_seit,
    pop.status_unklar AS pop_status_unklar,
    pop.status_unklar_begruendung AS pop_status_unklar_begruendung,
    (tpop.id)::text AS tpop_id,
    tpop.nr AS tpop_nr,
    tpop.gemeinde AS tpop_gemeinde,
    tpop.flurname AS tpop_flurname,
    pop_status_werte_2.text AS tpop_status,
    tpop.bekannt_seit AS tpop_bekannt_seit,
    tpop.status_unklar AS tpop_status_unklar,
    tpop.status_unklar_grund AS tpop_status_unklar_grund,
    tpop.x AS tpop_x,
    tpop.y AS tpop_y,
    tpop.radius AS tpop_radius,
    tpop.hoehe AS tpop_hoehe,
    tpop.exposition AS tpop_exposition,
    tpop.klima AS tpop_klima,
    tpop.neigung AS tpop_neigung,
    tpop.beschreibung AS tpop_beschreibung,
    tpop.kataster_nr AS tpop_kataster_nr,
    tpop.apber_relevant AS tpop_apber_relevant,
    tpop.eigentuemer AS tpop_eigentuemer,
    tpop.kontakt AS tpop_kontakt,
    tpop.nutzungszone AS tpop_nutzungszone,
    tpop.bewirtschafter AS tpop_bewirtschafter,
    tpop.bewirtschaftung AS tpop_bewirtschaftung,
    (tpop.changed)::timestamp without time zone AS tpop_changed,
    tpop.changed_by AS tpop_changed_by
   FROM ((((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     LEFT JOIN apflora.pop_status_werte pop_status_werte_2 ON ((tpop.status = pop_status_werte_2.code)))
  WHERE ((tpop.y > 0) AND (tpop.x > 0))
  ORDER BY ae_eigenschaften.artname, pop.nr, tpop.nr;




CREATE VIEW apflora.v_tpop_fuergis_write AS
 SELECT (tpop.pop_id)::text AS pop_id,
    (tpop.id)::text AS tpop_id,
    tpop.nr AS tpop_nr,
    tpop.gemeinde AS tpop_gemeinde,
    tpop.flurname AS tpop_flurname,
    tpop.status AS tpop_status,
    tpop.status_unklar AS tpop_status_unklar,
    tpop.status_unklar_grund AS tpop_status_unklar_grund,
    tpop.x AS tpop_x,
    tpop.y AS tpop_y,
    tpop.radius AS tpop_radius,
    tpop.hoehe AS tpop_hoehe,
    tpop.exposition AS tpop_exposition,
    tpop.klima AS tpop_klima,
    tpop.neigung AS tpop_neigung,
    tpop.beschreibung AS tpop_beschreibung,
    tpop.kataster_nr AS tpop_kataster_nr,
    tpop.apber_relevant AS tpop_apber_relevant,
    tpop.bekannt_seit AS tpop_bekannt_seit,
    tpop.eigentuemer AS tpop_eigentuemer,
    tpop.kontakt AS tpop_kontakt,
    tpop.nutzungszone AS tpop_nutzungszone,
    tpop.bewirtschafter AS tpop_bewirtschafter,
    tpop.bewirtschaftung AS tpop_bewirtschaftung,
    tpop.bemerkungen AS tpop_bemerkungen,
    (tpop.changed)::timestamp without time zone AS tpop_changed,
    tpop.changed_by AS tpop_changed_by
   FROM apflora.tpop;




CREATE VIEW apflora.v_tpop_kml AS
 SELECT ae_eigenschaften.artname AS "Art",
    concat(pop.nr, '/', tpop.nr) AS "Label",
    "substring"(concat('Population: ', pop.nr, ' ', pop.name, '<br /> Teilpopulation: ', tpop.nr, ' ', tpop.gemeinde, ' ', tpop.flurname), 1, 225) AS "Inhalte",
    round(((((((2.6779094 + (4.728982 * (((tpop.x - 600000))::numeric / (1000000)::numeric))) + ((0.791484 * (((tpop.x - 600000))::numeric / (1000000)::numeric)) * (((tpop.y - 200000))::numeric / (1000000)::numeric))) + (((0.1306 * (((tpop.x - 600000))::numeric / (1000000)::numeric)) * (((tpop.y - 200000))::numeric / (1000000)::numeric)) * (((tpop.y - 200000))::numeric / (1000000)::numeric))) - (((0.0436 * (((tpop.x - 600000))::numeric / (1000000)::numeric)) * (((tpop.x - 600000))::numeric / (1000000)::numeric)) * (((tpop.x - 600000))::numeric / (1000000)::numeric))) * (100)::numeric) / (36)::numeric), 10) AS "Laengengrad",
    round((((((((16.9023892 + (3.238272 * (((tpop.y - 200000))::numeric / (1000000)::numeric))) - ((0.270978 * (((tpop.x - 600000))::numeric / (1000000)::numeric)) * (((tpop.x - 600000))::numeric / (1000000)::numeric))) - ((0.002528 * (((tpop.y - 200000))::numeric / (1000000)::numeric)) * (((tpop.y - 200000))::numeric / (1000000)::numeric))) - (((0.0447 * (((tpop.x - 600000))::numeric / (1000000)::numeric)) * (((tpop.x - 600000))::numeric / (1000000)::numeric)) * (((tpop.y - 200000))::numeric / (1000000)::numeric))) - (((0.014 * (((tpop.y - 200000))::numeric / (1000000)::numeric)) * (((tpop.y - 200000))::numeric / (1000000)::numeric)) * (((tpop.y - 200000))::numeric / (1000000)::numeric))) * (100)::numeric) / (36)::numeric), 10) AS "Breitengrad",
    concat('http://www.apflora.ch/Projekte/4635372c-431c-11e8-bb30-e77f6cdd35a6/Aktionspläne/', ap.id, '/Populationen/', pop.id, '/Teil-Populationen/', tpop.id) AS url
   FROM ((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpop.y IS NOT NULL) AND (tpop.y IS NOT NULL))
  ORDER BY ae_eigenschaften.artname, pop.nr, pop.name, tpop.nr, tpop.gemeinde, tpop.flurname;




CREATE VIEW apflora.v_tpop_kmlnamen AS
 SELECT ae_eigenschaften.artname AS "Art",
    concat(ae_eigenschaften.artname, ' ', pop.nr, '/', tpop.nr) AS "Label",
    "substring"(concat('Population: ', pop.nr, ' ', pop.name, '<br /> Teilpopulation: ', tpop.nr, ' ', tpop.gemeinde, ' ', tpop.flurname), 1, 225) AS "Inhalte",
    round(((((((2.6779094 + (4.728982 * (((tpop.x - 600000))::numeric / (1000000)::numeric))) + ((0.791484 * (((tpop.x - 600000))::numeric / (1000000)::numeric)) * (((tpop.y - 200000))::numeric / (1000000)::numeric))) + (((0.1306 * (((tpop.x - 600000))::numeric / (1000000)::numeric)) * (((tpop.y - 200000))::numeric / (1000000)::numeric)) * (((tpop.y - 200000))::numeric / (1000000)::numeric))) - (((0.0436 * (((tpop.x - 600000))::numeric / (1000000)::numeric)) * (((tpop.x - 600000))::numeric / (1000000)::numeric)) * (((tpop.x - 600000))::numeric / (1000000)::numeric))) * (100)::numeric) / (36)::numeric), 10) AS "Laengengrad",
    round((((((((16.9023892 + (3.238272 * (((tpop.y - 200000))::numeric / (1000000)::numeric))) - ((0.270978 * (((tpop.x - 600000))::numeric / (1000000)::numeric)) * (((tpop.x - 600000))::numeric / (1000000)::numeric))) - ((0.002528 * (((tpop.y - 200000))::numeric / (1000000)::numeric)) * (((tpop.y - 200000))::numeric / (1000000)::numeric))) - (((0.0447 * (((tpop.x - 600000))::numeric / (1000000)::numeric)) * (((tpop.x - 600000))::numeric / (1000000)::numeric)) * (((tpop.y - 200000))::numeric / (1000000)::numeric))) - (((0.014 * (((tpop.y - 200000))::numeric / (1000000)::numeric)) * (((tpop.y - 200000))::numeric / (1000000)::numeric)) * (((tpop.y - 200000))::numeric / (1000000)::numeric))) * (100)::numeric) / (36)::numeric), 10) AS "Breitengrad",
    concat('http://www.apflora.ch/Projekte/4635372c-431c-11e8-bb30-e77f6cdd35a6/Aktionspläne/', ap.id, '/Populationen/', pop.id, '/Teil-Populationen/', tpop.id) AS url
   FROM ((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpop.y IS NOT NULL) AND (tpop.y IS NOT NULL))
  ORDER BY ae_eigenschaften.artname, pop.nr, pop.name, tpop.nr, tpop.gemeinde, tpop.flurname;




CREATE VIEW apflora.v_tpop_kontrjahrundberjahrundmassnjahr AS
 SELECT tpop.id,
    tpopber.jahr AS "Jahr"
   FROM (apflora.tpop
     JOIN apflora.tpopber ON ((tpop.id = tpopber.tpop_id)))
UNION
 SELECT tpop.id,
    tpopmassnber.jahr AS "Jahr"
   FROM (apflora.tpop
     JOIN apflora.tpopmassnber ON ((tpop.id = tpopmassnber.tpop_id)))
UNION
 SELECT tpop.id,
    tpopkontr.jahr AS "Jahr"
   FROM (apflora.tpop
     JOIN apflora.tpopkontr ON ((tpop.id = tpopkontr.tpop_id)))
  ORDER BY 2;




CREATE VIEW apflora.v_tpop_mitapaberohnestatus AS
 SELECT ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    pop_status_werte.text AS pop_status,
    tpop.nr,
    tpop.flurname,
    tpop.status
   FROM ((apflora.ap_bearbstand_werte
     JOIN (apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id))) ON ((ap_bearbstand_werte.code = ap.bearbeitung)))
     JOIN ((apflora.pop
     JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpop.status IS NULL) AND (ap.bearbeitung = 3))
  ORDER BY ae_eigenschaften.artname, pop.nr;




CREATE VIEW apflora.v_tpop_ohneapberichtrelevant AS
 SELECT ae_eigenschaften.artname AS "Artname",
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    tpop.id,
    tpop.nr,
    tpop.gemeinde,
    tpop.flurname,
    tpop.apber_relevant
   FROM (apflora.ae_eigenschaften
     JOIN (apflora.ap
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((tpop.pop_id = pop.id))) ON ((pop.ap_id = ap.id))) ON ((ae_eigenschaften.id = ap.art_id)))
  WHERE (tpop.apber_relevant IS NULL)
  ORDER BY ae_eigenschaften.artname, pop.nr, tpop.nr;




CREATE VIEW apflora.v_tpop_ohnebekanntseit AS
 SELECT ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    tpop.nr,
    tpop.gemeinde,
    tpop.flurname,
    tpop.bekannt_seit
   FROM (((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE ((tpop.bekannt_seit IS NULL) AND ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3)))
  ORDER BY ae_eigenschaften.artname, pop.nr, pop.name, tpop.nr, tpop.gemeinde, tpop.flurname;




CREATE VIEW apflora.v_tpop_ohnekoord AS
 SELECT ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    tpop.nr,
    tpop.gemeinde,
    tpop.flurname,
    tpop.x,
    tpop.y
   FROM (((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  WHERE (((tpop.x IS NULL) AND ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3))) OR ((tpop.y IS NULL) AND ((ap.bearbeitung >= 1) AND (ap.bearbeitung <= 3))))
  ORDER BY ae_eigenschaften.artname, pop.nr, pop.name, tpop.nr, tpop.gemeinde, tpop.flurname;




CREATE VIEW apflora.v_tpop_popberundmassnber AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    pop.id AS pop_id,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    pop_status_werte.text AS pop_status,
    pop.bekannt_seit AS pop_bekannt_seit,
    pop.status_unklar AS pop_status_unklar,
    pop.status_unklar_begruendung AS pop_status_unklar_begruendung,
    pop.x AS pop_x,
    pop.y AS pop_y,
    tpop.id AS tpop_id,
    tpop.nr AS tpop_nr,
    tpop.gemeinde AS tpop_gemeinde,
    tpop.flurname AS tpop_flurname,
    "domPopHerkunft_1".text AS tpop_status,
    tpop.bekannt_seit AS tpop_bekannt_seit,
    tpop.status_unklar AS tpop_status_unklar,
    tpop.status_unklar_grund AS tpop_status_unklar_grund,
    tpop.x AS tpop_x,
    tpop.y AS tpop_y,
    tpop.radius AS tpop_radius,
    tpop.hoehe AS tpop_hoehe,
    tpop.exposition AS tpop_exposition,
    tpop.klima AS tpop_klima,
    tpop.neigung AS tpop_neigung,
    tpop.beschreibung AS tpop_beschreibung,
    tpop.kataster_nr AS tpop_kataster_nr,
    tpop.apber_relevant AS tpop_apber_relevant,
    tpop.eigentuemer AS tpop_eigentuemer,
    tpop.kontakt AS tpop_kontakt,
    tpop.nutzungszone AS tpop_nutzungszone,
    tpop.bewirtschafter AS tpop_bewirtschafter,
    tpop.bewirtschaftung AS tpop_bewirtschaftung,
    tpopber.id AS tpopber_id,
    tpopber.jahr AS tpopber_jahr,
    tpop_entwicklung_werte.text AS tpopber_entwicklung,
    tpopber.bemerkungen AS tpopber_bemerkungen,
    tpopber.changed AS tpopber_changed,
    tpopber.changed_by AS tpopber_changed_by,
    tpopmassnber.id AS tpopmassnber_id,
    tpopmassnber.jahr AS tpopmassnber_jahr,
    tpopmassn_erfbeurt_werte.text AS tpopmassnber_entwicklung,
    tpopmassnber.bemerkungen AS tpopmassnber_bemerkungen,
    tpopmassnber.changed AS tpopmassnber_changed,
    tpopmassnber.changed_by AS tpopmassnber_changed_by
   FROM (((((((((((apflora.ae_eigenschaften
     RIGHT JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     RIGHT JOIN (apflora.pop
     RIGHT JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     LEFT JOIN apflora.pop_status_werte "domPopHerkunft_1" ON ((tpop.status = "domPopHerkunft_1".code)))
     LEFT JOIN apflora.v_tpop_berjahrundmassnjahr ON ((tpop.id = v_tpop_berjahrundmassnjahr.id)))
     LEFT JOIN apflora.tpopmassnber ON (((v_tpop_berjahrundmassnjahr.id = tpopmassnber.tpop_id) AND (v_tpop_berjahrundmassnjahr.jahr = tpopmassnber.jahr))))
     LEFT JOIN apflora.tpopmassn_erfbeurt_werte ON ((tpopmassnber.beurteilung = tpopmassn_erfbeurt_werte.code)))
     LEFT JOIN apflora.tpopber ON (((v_tpop_berjahrundmassnjahr.jahr = tpopber.jahr) AND (v_tpop_berjahrundmassnjahr.id = tpopber.tpop_id))))
     LEFT JOIN apflora.tpop_entwicklung_werte ON ((tpopber.entwicklung = tpop_entwicklung_werte.code)))
  ORDER BY ae_eigenschaften.artname, pop.nr, tpop.nr, v_tpop_berjahrundmassnjahr.jahr;




CREATE VIEW apflora.v_tpopber_letzterber AS
 SELECT tpopber.tpop_id,
    max(tpopber.jahr) AS jahr
   FROM apflora.tpopber
  GROUP BY tpopber.tpop_id;




CREATE VIEW apflora.v_tpop_statuswidersprichtbericht AS
 SELECT ae_eigenschaften.artname AS "Art",
    ap_bearbstand_werte.text AS "Bearbeitungsstand AP",
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    tpop.nr,
    tpop.gemeinde,
    tpop.flurname,
    tpop.status,
    tpopber.entwicklung AS "TPopBerEntwicklung",
    tpopber.jahr AS tpopber_jahr
   FROM (((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN (apflora.tpopber
     JOIN apflora.v_tpopber_letzterber ON (((tpopber.tpop_id = v_tpopber_letzterber.tpop_id) AND (tpopber.jahr = v_tpopber_letzterber.jahr)))) ON ((tpop.id = tpopber.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
     JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
  WHERE (((ap.bearbeitung < 4) AND ((tpop.status = 101) OR (tpop.status = 202)) AND (tpopber.entwicklung <> 8)) OR ((ap.bearbeitung < 4) AND (tpop.status <> ALL (ARRAY[101, 202])) AND (tpopber.entwicklung = 8)))
  ORDER BY ae_eigenschaften.artname, pop.nr, pop.name, tpop.nr, tpop.gemeinde, tpop.flurname;




CREATE VIEW apflora.v_tpop_webgisbun AS
 SELECT ap.id AS "APARTID",
    ae_eigenschaften.artname AS "APART",
    ap_bearbstand_werte.text AS "APSTATUS",
    ap.start_jahr AS "APSTARTJAHR",
    ap_umsetzung_werte.text AS "APSTANDUMSETZUNG",
    pop.id AS "POPGUID",
    pop.nr AS "POPNR",
    pop.name AS "POPNAME",
    pop_status_werte.text AS "POPSTATUS",
    pop.status_unklar AS "POPSTATUSUNKLAR",
    pop.status_unklar_begruendung AS "POPUNKLARGRUND",
    pop.bekannt_seit AS "POPBEKANNTSEIT",
    pop.x AS "POP_X",
    pop.y AS "POP_Y",
    tpop.id AS "TPOPID",
    tpop.id AS "TPOPGUID",
    tpop.nr AS "TPOPNR",
    tpop.gemeinde AS "TPOPGEMEINDE",
    tpop.flurname AS "TPOPFLURNAME",
    pop_status_werte_2.text AS "TPOPSTATUS",
    tpop.status_unklar AS "TPOPSTATUSUNKLAR",
    tpop.status_unklar_grund AS "TPOPUNKLARGRUND",
    tpop.x AS "TPOP_X",
    tpop.y AS "TPOP_Y",
    tpop.radius AS "TPOPRADIUS",
    tpop.hoehe AS "TPOPHOEHE",
    tpop.exposition AS "TPOPEXPOSITION",
    tpop.klima AS "TPOPKLIMA",
    tpop.neigung AS "TPOPHANGNEIGUNG",
    tpop.beschreibung AS "TPOPBESCHREIBUNG",
    tpop.kataster_nr AS "TPOPKATASTERNR",
    adresse.name AS "TPOPVERANTWORTLICH",
    tpop.apber_relevant AS "TPOPBERICHTSRELEVANZ",
    tpop.bekannt_seit AS "TPOPBEKANNTSEIT",
    tpop.eigentuemer AS "TPOPEIGENTUEMERIN",
    tpop.kontakt AS "TPOPKONTAKT_VO",
    tpop.nutzungszone AS "TPOP_NUTZUNGSZONE",
    tpop.bewirtschafter AS "TPOPBEWIRTSCHAFTER",
    tpop.bewirtschaftung AS "TPOPBEWIRTSCHAFTUNG",
    to_char((tpop.changed)::timestamp with time zone, 'DD.MM.YY'::text) AS "TPOPCHANGEDAT",
    tpop.changed_by AS "TPOPCHANGEBY"
   FROM (((((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     LEFT JOIN apflora.pop_status_werte pop_status_werte_2 ON ((tpop.status = pop_status_werte_2.code)))
     LEFT JOIN apflora.adresse ON ((ap.bearbeiter = adresse.id)))
  WHERE (ae_eigenschaften.taxid > 150)
  ORDER BY ae_eigenschaften.artname, pop.nr, tpop.nr;




CREATE VIEW apflora.v_tpopber AS
 SELECT ap.id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    pop.id AS pop_id,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    pop_status_werte.text AS pop_status,
    pop.bekannt_seit AS pop_bekannt_seit,
    pop.status_unklar AS pop_status_unklar,
    pop.status_unklar_begruendung AS pop_status_unklar_begruendung,
    pop.x AS pop_x,
    pop.y AS pop_y,
    tpop.id AS tpop_id,
    tpop.nr AS tpop_nr,
    tpop.gemeinde AS tpop_gemeinde,
    tpop.flurname AS tpop_flurname,
    tpop_status_werte.text AS tpop_status,
    tpop.bekannt_seit AS tpop_bekannt_seit,
    tpop.status_unklar AS tpop_status_unklar,
    tpop.status_unklar_grund AS tpop_status_unklar_grund,
    tpop.x AS tpop_x,
    tpop.y AS tpop_y,
    tpop.radius AS tpop_radius,
    tpop.hoehe AS tpop_hoehe,
    tpop.exposition AS tpop_exposition,
    tpop.klima AS tpop_klima,
    tpop.neigung AS tpop_neigung,
    tpop.beschreibung AS tpop_beschreibung,
    tpop.kataster_nr AS tpop_kataster_nr,
    tpop.apber_relevant AS tpop_apber_relevant,
    tpop.eigentuemer AS tpop_eigentuemer,
    tpop.kontakt AS tpop_kontakt,
    tpop.nutzungszone AS tpop_nutzungszone,
    tpop.bewirtschafter AS tpop_bewirtschafter,
    tpop.bewirtschaftung AS tpop_bewirtschaftung,
    tpopber.id AS tpopber_id,
    tpopber.jahr AS tpopber_jahr,
    tpop_entwicklung_werte.text AS tpopber_entwicklung,
    tpopber.bemerkungen AS tpopber_bemerkungen,
    tpopber.changed AS tpopber_changed,
    tpopber.changed_by AS tpopber_changed_by
   FROM (apflora.ae_eigenschaften
     JOIN (((apflora.ap
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     JOIN ((apflora.pop
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     JOIN ((apflora.tpop
     LEFT JOIN apflora.pop_status_werte tpop_status_werte ON ((tpop.status = tpop_status_werte.code)))
     RIGHT JOIN (apflora.tpopber
     LEFT JOIN apflora.tpop_entwicklung_werte ON ((tpopber.entwicklung = tpop_entwicklung_werte.code))) ON ((tpop.id = tpopber.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id))) ON ((ae_eigenschaften.id = ap.art_id)))
  ORDER BY ae_eigenschaften.artname, pop.nr, tpop.nr, tpopber.jahr, tpop_entwicklung_werte.text;




CREATE VIEW apflora.v_tpopkontr_fuergis_read AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS apherkunft,
    ap.start_jahr AS apjahr,
    ap_umsetzung_werte.text AS apumsetzung,
    (pop.id)::character varying(50) AS popid,
    pop.nr AS popnr,
    pop.name AS popname,
    pop_status_werte.text AS popherkunft,
    pop.bekannt_seit AS popbekanntseit,
    (tpop.id)::character varying(50) AS tpopid,
    tpop.nr AS tpopnr,
    tpop.gemeinde AS tpopgemeinde,
    tpop.flurname AS tpopflurname,
    tpop.x AS tpopxkoord,
    tpop.y AS tpopykoord,
    tpop.bekannt_seit AS tpopbekanntseit,
    (tpopkontr.id)::character varying(50) AS tpopkontrid,
    tpopkontr.jahr AS tpopkontrjahr,
    (tpopkontr.datum)::timestamp without time zone AS tpopkontrdatum,
    tpopkontr_typ_werte.text AS tpopkontrtyp,
    adresse.name AS tpopkontrbearb,
    tpopkontr.ueberlebensrate AS tpopkontrueberleb,
    tpopkontr.vitalitaet AS tpopkontrvitalitaet,
    tpop_entwicklung_werte.text AS tpopkontrentwicklung,
    tpopkontr.ursachen AS tpopkontrursach,
    tpopkontr.erfolgsbeurteilung AS tpopkontrurteil,
    tpopkontr.umsetzung_aendern AS tpopkontraendums,
    tpopkontr.kontrolle_aendern AS tpopkontraendkontr,
    tpopkontr.lr_delarze AS tpopkontrleb,
    tpopkontr.flaeche AS tpopkontrflaeche,
    tpopkontr.lr_umgebung_delarze AS tpopkontrlebumg,
    tpopkontr.vegetationstyp AS tpopkontrvegtyp,
    tpopkontr.konkurrenz AS tpopkontrkonkurrenz,
    tpopkontr.moosschicht AS tpopkontrmoosschicht,
    tpopkontr.krautschicht AS tpopkontrkrautschicht,
    tpopkontr.strauchschicht AS tpopkontrstrauchschicht,
    tpopkontr.baumschicht AS tpopkontrbaumschicht,
    tpopkontr.boden_typ AS tpopkontrbodentyp,
    tpopkontr.boden_kalkgehalt AS tpopkontrbodenkalkgehalt,
    tpopkontr.boden_durchlaessigkeit AS tpopkontrbodendurchlaessigkeit,
    tpopkontr.boden_humus AS tpopkontrbodenhumus,
    tpopkontr.boden_naehrstoffgehalt AS tpopkontrbodennaehrstoffgehalt,
    tpopkontr.boden_abtrag AS tpopkontrbodenabtrag,
    tpopkontr.wasserhaushalt AS tpopkontrwasserhaushalt,
    tpopkontr_idbiotuebereinst_werte.text AS tpopkontridealbiotopuebereinst,
    tpopkontr.flaeche_ueberprueft AS tpopkontruebflaeche,
    tpopkontr.plan_vorhanden AS tpopkontrplan,
    tpopkontr.deckung_vegetation AS tpopkontrveg,
    tpopkontr.deckung_nackter_boden AS tpopkontrnabo,
    tpopkontr.deckung_ap_art AS tpopkontruebpfl,
    tpopkontr.jungpflanzen_vorhanden AS tpopkontrjungpfljn,
    tpopkontr.vegetationshoehe_maximum AS tpopkontrveghoemax,
    tpopkontr.vegetationshoehe_mittel AS tpopkontrveghoemit,
    tpopkontr.gefaehrdung AS tpopkontrgefaehrdung,
    (tpopkontr.changed)::timestamp without time zone AS mutwann,
    tpopkontr.changed_by AS mutwer
   FROM ((((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN (((apflora.tpopkontr
     LEFT JOIN apflora.tpopkontr_typ_werte ON (((tpopkontr.typ)::text = (tpopkontr_typ_werte.text)::text)))
     LEFT JOIN apflora.adresse ON ((tpopkontr.bearbeiter = adresse.id)))
     LEFT JOIN apflora.tpop_entwicklung_werte ON ((tpopkontr.entwicklung = tpop_entwicklung_werte.code))) ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     LEFT JOIN apflora.tpopkontr_idbiotuebereinst_werte ON ((tpopkontr.idealbiotop_uebereinstimmung = tpopkontr_idbiotuebereinst_werte.code)))
  ORDER BY ae_eigenschaften.artname, pop.nr, tpop.nr, tpopkontr.jahr, tpopkontr.datum;




CREATE VIEW apflora.v_tpopkontr_fuergis_write AS
 SELECT (tpopkontr.id)::text AS id,
    tpopkontr.typ,
    tpopkontr.jahr,
    (tpopkontr.datum)::timestamp without time zone AS datum,
    tpopkontr.bearbeiter,
    tpopkontr.jungpflanzen_anzahl,
    tpopkontr.ueberlebensrate,
    tpopkontr.entwicklung,
    tpopkontr.vitalitaet,
    tpopkontr.ursachen,
    tpopkontr.erfolgsbeurteilung,
    tpopkontr.umsetzung_aendern,
    tpopkontr.kontrolle_aendern,
    tpopkontr.lr_delarze,
    tpopkontr.flaeche,
    tpopkontr.lr_umgebung_delarze,
    tpopkontr.vegetationstyp,
    tpopkontr.konkurrenz,
    tpopkontr.moosschicht,
    tpopkontr.krautschicht,
    tpopkontr.strauchschicht,
    tpopkontr.baumschicht,
    tpopkontr.boden_typ,
    tpopkontr.boden_kalkgehalt,
    tpopkontr.boden_durchlaessigkeit,
    tpopkontr.boden_humus,
    tpopkontr.boden_naehrstoffgehalt,
    tpopkontr.boden_abtrag,
    tpopkontr.wasserhaushalt,
    tpopkontr.idealbiotop_uebereinstimmung,
    tpopkontr.flaeche_ueberprueft,
    tpopkontr.plan_vorhanden,
    tpopkontr.deckung_vegetation,
    tpopkontr.deckung_nackter_boden,
    tpopkontr.deckung_ap_art,
    tpopkontr.jungpflanzen_vorhanden,
    tpopkontr.vegetationshoehe_maximum,
    tpopkontr.vegetationshoehe_mittel,
    tpopkontr.gefaehrdung,
    tpopkontr.bemerkungen,
    (tpopkontr.changed)::timestamp without time zone AS changed,
    tpopkontr.changed_by
   FROM apflora.tpopkontr;




CREATE VIEW apflora.v_tpopkontr_webgisbun AS
 SELECT ap.id AS "APARTID",
    ae_eigenschaften.artname AS "APART",
    pop.id AS "POPGUID",
    pop.nr AS "POPNR",
    tpop.id AS "TPOPGUID",
    tpop.nr AS "TPOPNR",
    tpopkontr.id AS "KONTRGUID",
    tpopkontr.jahr AS "KONTRJAHR",
    to_char((tpopkontr.datum)::timestamp with time zone, 'DD.MM.YY'::text) AS "KONTRDAT",
    tpopkontr_typ_werte.text AS "KONTRTYP",
    pop_status_werte_2.text AS "TPOPSTATUS",
    adresse.name AS "KONTRBEARBEITER",
    tpopkontr.ueberlebensrate AS "KONTRUEBERLEBENSRATE",
    tpopkontr.vitalitaet AS "KONTRVITALITAET",
    tpop_entwicklung_werte.text AS "KONTRENTWICKLUNG",
    tpopkontr.ursachen AS "KONTRURSACHEN",
    tpopkontr.erfolgsbeurteilung AS "KONTRERFOLGBEURTEIL",
    tpopkontr.umsetzung_aendern AS "KONTRAENDUMSETZUNG",
    tpopkontr.kontrolle_aendern AS "KONTRAENDKONTROLLE",
    tpop.x AS "KONTR_X",
    tpop.y AS "KONTR_Y",
    tpopkontr.bemerkungen AS "KONTRBEMERKUNGEN",
    tpopkontr.lr_delarze AS "KONTRLRMDELARZE",
    tpopkontr.lr_umgebung_delarze AS "KONTRDELARZEANGRENZ",
    tpopkontr.vegetationstyp AS "KONTRVEGTYP",
    tpopkontr.konkurrenz AS "KONTRKONKURRENZ",
    tpopkontr.moosschicht AS "KONTRMOOSE",
    tpopkontr.krautschicht AS "KONTRKRAUTSCHICHT",
    tpopkontr.strauchschicht AS "KONTRSTRAUCHSCHICHT",
    tpopkontr.baumschicht AS "KONTRBAUMSCHICHT",
    tpopkontr.boden_typ AS "KONTRBODENTYP",
    tpopkontr.boden_kalkgehalt AS "KONTRBODENKALK",
    tpopkontr.boden_durchlaessigkeit AS "KONTRBODENDURCHLAESSIGK",
    tpopkontr.boden_humus AS "KONTRBODENHUMUS",
    tpopkontr.boden_naehrstoffgehalt AS "KONTRBODENNAEHRSTOFF",
    tpopkontr.boden_abtrag AS "KONTROBERBODENABTRAG",
    tpopkontr.wasserhaushalt AS "KONTROBODENWASSERHAUSHALT",
    tpopkontr_idbiotuebereinst_werte.text AS "KONTRUEBEREINSTIMMUNIDEAL",
    tpopkontr.handlungsbedarf AS "KONTRHANDLUNGSBEDARF",
    tpopkontr.flaeche_ueberprueft AS "KONTRUEBERPRUFTFLAECHE",
    tpopkontr.flaeche AS "KONTRFLAECHETPOP",
    tpopkontr.plan_vorhanden AS "KONTRAUFPLAN",
    tpopkontr.deckung_vegetation AS "KONTRDECKUNGVEG",
    tpopkontr.deckung_nackter_boden AS "KONTRDECKUNGBODEN",
    tpopkontr.deckung_ap_art AS "KONTRDECKUNGART",
    tpopkontr.jungpflanzen_vorhanden AS "KONTRJUNGEPLANZEN",
    tpopkontr.vegetationshoehe_maximum AS "KONTRMAXHOEHEVEG",
    tpopkontr.vegetationshoehe_mittel AS "KONTRMITTELHOEHEVEG",
    tpopkontr.gefaehrdung AS "KONTRGEFAEHRDUNG",
    to_char((tpopkontr.changed)::timestamp with time zone, 'DD.MM.YY'::text) AS "KONTRCHANGEDAT",
    tpopkontr.changed_by AS "KONTRCHANGEBY",
    string_agg((tpopkontrzaehl_einheit_werte.text)::text, ', '::text) AS "ZAEHLEINHEITEN",
    array_to_string(array_agg(tpopkontrzaehl.anzahl), ', '::text) AS "ANZAHLEN",
    string_agg((tpopkontrzaehl_methode_werte.text)::text, ', '::text) AS "METHODEN"
   FROM (((((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN (apflora.pop
     JOIN ((apflora.tpop
     LEFT JOIN apflora.pop_status_werte pop_status_werte_2 ON ((tpop.status = pop_status_werte_2.code)))
     JOIN ((((((apflora.tpopkontr
     LEFT JOIN apflora.tpopkontr_typ_werte ON (((tpopkontr.typ)::text = (tpopkontr_typ_werte.text)::text)))
     LEFT JOIN apflora.adresse ON ((tpopkontr.bearbeiter = adresse.id)))
     LEFT JOIN apflora.tpop_entwicklung_werte ON ((tpopkontr.entwicklung = tpop_entwicklung_werte.code)))
     LEFT JOIN apflora.tpopkontrzaehl ON ((tpopkontr.id = tpopkontrzaehl.tpopkontr_id)))
     LEFT JOIN apflora.tpopkontrzaehl_einheit_werte ON ((tpopkontrzaehl.einheit = tpopkontrzaehl_einheit_werte.code)))
     LEFT JOIN apflora.tpopkontrzaehl_methode_werte ON ((tpopkontrzaehl.methode = tpopkontrzaehl_methode_werte.code))) ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     LEFT JOIN apflora.tpopkontr_idbiotuebereinst_werte ON ((tpopkontr.idealbiotop_uebereinstimmung = tpopkontr_idbiotuebereinst_werte.code)))
     LEFT JOIN apflora.adresse apflora_adresse_1 ON ((ap.bearbeiter = apflora_adresse_1.id)))
  WHERE (ae_eigenschaften.taxid > 150)
  GROUP BY ap.id, ae_eigenschaften.artname, pop.id, pop.nr, tpop.id, tpop.nr, tpopkontr.tpop_id, tpopkontr.id, tpopkontr.jahr, tpopkontr.datum, tpopkontr_typ_werte.text, pop_status_werte_2.text, adresse.name, tpopkontr.ueberlebensrate, tpopkontr.vitalitaet, tpop_entwicklung_werte.text, tpopkontr.ursachen, tpopkontr.erfolgsbeurteilung, tpopkontr.umsetzung_aendern, tpopkontr.kontrolle_aendern, tpop.x, tpop.y, tpopkontr.bemerkungen, tpopkontr.lr_delarze, tpopkontr.lr_umgebung_delarze, tpopkontr.vegetationstyp, tpopkontr.konkurrenz, tpopkontr.moosschicht, tpopkontr.krautschicht, tpopkontr.strauchschicht, tpopkontr.baumschicht, tpopkontr.boden_typ, tpopkontr.boden_kalkgehalt, tpopkontr.boden_durchlaessigkeit, tpopkontr.boden_humus, tpopkontr.boden_naehrstoffgehalt, tpopkontr.boden_abtrag, tpopkontr.wasserhaushalt, tpopkontr_idbiotuebereinst_werte.text, tpopkontr.handlungsbedarf, tpopkontr.flaeche_ueberprueft, tpopkontr.flaeche, tpopkontr.plan_vorhanden, tpopkontr.deckung_vegetation, tpopkontr.deckung_nackter_boden, tpopkontr.deckung_ap_art, tpopkontr.jungpflanzen_vorhanden, tpopkontr.vegetationshoehe_maximum, tpopkontr.vegetationshoehe_mittel, tpopkontr.gefaehrdung, tpopkontr.changed, tpopkontr.changed_by
  ORDER BY ae_eigenschaften.artname, pop.nr, tpop.nr;




CREATE VIEW apflora.v_tpopkoord AS
 SELECT DISTINCT pop.ap_id,
    pop.id AS pop_id,
    pop.nr AS pop_nr,
    tpop.id,
    tpop.nr,
    tpop.x,
    tpop.y,
    tpop.apber_relevant
   FROM (apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
  WHERE ((tpop.x IS NOT NULL) AND (tpop.y IS NOT NULL));




CREATE VIEW apflora.v_tpopmassn_0 AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname AS "Art",
    ap_bearbstand_werte.text AS "Aktionsplan Bearbeitungsstand",
    pop.id AS pop_id,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    tpop.id AS tpop_id,
    tpop.nr AS tpop_nr,
    tpop.flurname AS tpop_flurname,
    tpopmassn.id,
    tpopmassn.jahr AS "Jahr",
    tpopmassn_typ_werte.text AS "Massnahme",
    tpopmassn.beschreibung,
    tpopmassn.datum,
    adresse.name AS bearbeiter,
    tpopmassn.bemerkungen,
    tpopmassn.plan_vorhanden,
    tpopmassn.plan_bezeichnung,
    tpopmassn.flaeche,
    tpopmassn.markierung,
    tpopmassn.anz_triebe,
    tpopmassn.anz_pflanzen,
    tpopmassn.anz_pflanzstellen,
    tpopmassn.wirtspflanze,
    tpopmassn.herkunft_pop,
    tpopmassn.sammeldatum,
    tpopmassn.form,
    tpopmassn.pflanzanordnung
   FROM (((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     JOIN ((apflora.pop
     JOIN apflora.tpop ON ((pop.id = tpop.pop_id)))
     JOIN ((apflora.tpopmassn
     LEFT JOIN apflora.tpopmassn_typ_werte ON ((tpopmassn.typ = tpopmassn_typ_werte.code)))
     LEFT JOIN apflora.adresse ON ((tpopmassn.bearbeiter = adresse.id))) ON ((tpop.id = tpopmassn.tpop_id))) ON ((ap.id = pop.ap_id)))
  ORDER BY ae_eigenschaften.artname, pop.nr, tpop.nr, tpopmassn.jahr, tpopmassn_typ_werte.text;




CREATE VIEW apflora.v_tpopmassn_fueraktap0 AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname AS "Art",
    ap_bearbstand_werte.text AS "Aktionsplan-Status",
    ap.start_jahr AS "Aktionsplan-Jahr",
    ap_umsetzung_werte.text AS "Aktionsplan-Umsetzung",
    pop.id AS pop_id,
    pop.nr AS "Population-Nr",
    pop.name AS "Population-Name",
    pop_status_werte.text AS "Population-Herkunft",
    pop.bekannt_seit AS "Population - bekannt seit",
    tpop.id AS tpop_id,
    tpop.nr AS "Teilpopulation-Nr",
    tpop.gemeinde AS "Teilpopulation-Gemeinde",
    tpop.flurname AS "Teilpopulation-Flurname",
    tpop.x AS "Teilpopulation-X-Koodinate",
    tpop.y AS "Teilpopulation-Y-Koordinate",
    tpop.radius AS "Teilpopulation-Radius",
    tpop.hoehe AS "Teilpopulation-Höhe",
    tpop.beschreibung AS "Teilpopulation-Beschreibung",
    tpop.kataster_nr AS "Teilpopulation-Kataster-Nr",
    pop_status_werte_2.text AS "Teilpopulation-Herkunft",
    tpop.status_unklar AS "Teilpopulation - Herkunft unklar",
    tpop.status_unklar_grund AS "Teilpopulation - Herkunft unklar Begruendung",
    tpop_apberrelevant_werte.text AS "Teilpopulation - Fuer Bericht relevant",
    tpop.bekannt_seit AS "Teilpopulation - bekannt seit",
    tpop.eigentuemer AS "Teilpopulation-Eigentuemer",
    tpop.kontakt AS "Teilpopulation-Kontakt",
    tpop.nutzungszone AS "Teilpopulation-Nutzungszone",
    tpop.bewirtschafter AS "Teilpopulation-Bewirtschafter",
    tpop.bewirtschaftung AS "Teilpopulation-Bewirtschaftung",
    tpop.bemerkungen AS "Teilpopulation-Bemerkungen",
    tpopmassn.id,
    tpopmassn_typ_werte.text AS "Massnahme-Typ",
    tpopmassn.beschreibung AS "Massnahme-Beschreibung",
    tpopmassn.datum AS "Massnahme-Datum",
    adresse.name AS "Massnahme-BearbeiterIn",
    tpopmassn.bemerkungen AS "Massnahme-Bemerkungen",
    tpopmassn.plan_vorhanden AS "Massnahme-Plan",
    tpopmassn.plan_bezeichnung AS "Massnahme-Planbezeichnung",
    tpopmassn.flaeche AS "Massnahme-Flaeche",
    tpopmassn.markierung AS "Massnahme-Markierung",
    tpopmassn.anz_triebe AS "Massnahme - Ansiedlung Anzahl Triebe",
    tpopmassn.anz_pflanzen AS "Massnahme - Ansiedlung Anzahl Pflanzen",
    tpopmassn.anz_pflanzstellen AS "Massnahme - Ansiedlung Anzahl Pflanzstellen",
    tpopmassn.wirtspflanze AS "Massnahme - Ansiedlung Wirtspflanzen",
    tpopmassn.herkunft_pop AS "Massnahme - Ansiedlung Herkunftspopulation",
    tpopmassn.sammeldatum AS "Massnahme - Ansiedlung Sammeldatum",
    tpopmassn.form AS "Massnahme - Ansiedlung Form",
    tpopmassn.pflanzanordnung AS "Massnahme - Ansiedlung Pflanzordnung"
   FROM ((apflora.ae_eigenschaften
     JOIN ((apflora.ap
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code))) ON ((ae_eigenschaften.id = ap.art_id)))
     JOIN (((apflora.pop
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     JOIN ((apflora.tpop
     LEFT JOIN apflora.pop_status_werte pop_status_werte_2 ON ((tpop.status = pop_status_werte_2.code)))
     LEFT JOIN apflora.tpop_apberrelevant_werte ON ((tpop.apber_relevant = tpop_apberrelevant_werte.code))) ON ((pop.id = tpop.pop_id)))
     JOIN ((apflora.tpopmassn
     LEFT JOIN apflora.tpopmassn_typ_werte ON ((tpopmassn.typ = tpopmassn_typ_werte.code)))
     LEFT JOIN apflora.adresse ON ((tpopmassn.bearbeiter = adresse.id))) ON ((tpop.id = tpopmassn.tpop_id))) ON ((ap.id = pop.ap_id)))
  ORDER BY ae_eigenschaften.artname, pop.nr, tpop.nr, tpopmassn_typ_werte.text;




CREATE VIEW apflora.v_tpopmassnber AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    pop.id AS pop_id,
    pop.nr AS pop_nr,
    pop.name AS pop_name,
    pop_status_werte.text AS pop_status,
    pop.bekannt_seit AS pop_bekannt_seit,
    pop.status_unklar AS pop_status_unklar,
    pop.status_unklar_begruendung AS pop_status_unklar_begruendung,
    pop.x AS pop_x,
    pop.y AS pop_y,
    tpop.id AS tpop_id,
    tpop.nr AS tpop_nr,
    tpop.gemeinde AS tpop_gemeinde,
    tpop.flurname AS tpop_flurname,
    tpop_status_werte.text AS tpop_status,
    tpop.bekannt_seit AS tpop_bekannt_seit,
    tpop.status_unklar AS tpop_status_unklar,
    tpop.status_unklar_grund AS tpop_status_unklar_grund,
    tpop.x AS tpop_x,
    tpop.y AS tpop_y,
    tpop.radius AS tpop_radius,
    tpop.hoehe AS tpop_hoehe,
    tpop.exposition AS tpop_exposition,
    tpop.klima AS tpop_klima,
    tpop.neigung AS tpop_neigung,
    tpop.beschreibung AS tpop_beschreibung,
    tpop.kataster_nr AS tpop_kataster_nr,
    tpop.apber_relevant AS tpop_apber_relevant,
    tpop.eigentuemer AS tpop_eigentuemer,
    tpop.kontakt AS tpop_kontakt,
    tpop.nutzungszone AS tpop_nutzungszone,
    tpop.bewirtschafter AS tpop_bewirtschafter,
    tpop.bewirtschaftung AS tpop_bewirtschaftung,
    tpopmassnber.id,
    tpopmassnber.jahr,
    tpopmassn_erfbeurt_werte.text AS entwicklung,
    tpopmassnber.bemerkungen,
    tpopmassnber.changed,
    tpopmassnber.changed_by
   FROM (apflora.ae_eigenschaften
     JOIN (((apflora.ap
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     JOIN ((apflora.pop
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     JOIN ((apflora.tpop
     LEFT JOIN apflora.pop_status_werte tpop_status_werte ON ((tpop.status = tpop_status_werte.code)))
     JOIN (apflora.tpopmassnber
     LEFT JOIN apflora.tpopmassn_erfbeurt_werte ON ((tpopmassnber.beurteilung = tpopmassn_erfbeurt_werte.code))) ON ((tpop.id = tpopmassnber.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id))) ON ((ae_eigenschaften.id = ap.art_id)))
  ORDER BY ae_eigenschaften.artname, pop.nr, tpop.nr, tpopmassnber.jahr;




CREATE VIEW apflora.v_tpopmassnber_fueraktap0 AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname AS "Art",
    ap_bearbstand_werte.text AS "Aktionsplan-Status",
    ap.start_jahr AS "Aktionsplan-Jahr",
    ap_umsetzung_werte.text AS "Aktionsplan-Umsetzung",
    pop.nr AS "Population-Nr",
    pop.name AS "Population-Name",
    pop_status_werte.text AS "Population-Herkunft",
    pop.bekannt_seit AS "Population - bekannt seit",
    tpop.nr AS "Teilpopulation-Nr",
    tpop.gemeinde AS "Teilpopulation-Gemeinde",
    tpop.flurname AS "Teilpopulation-Flurname",
    tpop.x AS "Teilpopulation-X-Koodinate",
    tpop.y AS "Teilpopulation-Y-Koordinate",
    tpop.radius AS "Teilpopulation-Radius",
    tpop.hoehe AS "Teilpopulation-Hoehe",
    tpop.beschreibung AS "Teilpopulation-Beschreibung",
    tpop.kataster_nr AS "Teilpopulation-Kataster-Nr",
    pop_status_werte_2.text AS "Teilpopulation-Herkunft",
    tpop.status_unklar AS "Teilpopulation - Herkunft unklar",
    tpop.status_unklar_grund AS "Teilpopulation - Herkunft unklar Begruendung",
    tpop_apberrelevant_werte.text AS "Teilpopulation - Fuer Bericht relevant",
    tpop.bekannt_seit AS "Teilpopulation - bekannt seit",
    tpop.eigentuemer AS "Teilpopulation-Eigentuemer",
    tpop.kontakt AS "Teilpopulation-Kontakt",
    tpop.nutzungszone AS "Teilpopulation-Nutzungszone",
    tpop.bewirtschafter AS "Teilpopulation-Bewirtschafter",
    tpop.bewirtschaftung AS "Teilpopulation-Bewirtschaftung",
    tpop.bemerkungen AS "Teilpopulation-Bemerkungen",
    tpopmassnber.jahr AS "Massnahmenbericht-Jahr",
    tpopmassn_erfbeurt_werte.text AS "Massnahmenbericht-Erfolgsberuteilung",
    tpopmassnber.bemerkungen AS "Massnahmenbericht-Interpretation"
   FROM ((((apflora.ae_eigenschaften
     JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     JOIN (((apflora.pop
     LEFT JOIN apflora.pop_status_werte ON ((pop.status = pop_status_werte.code)))
     JOIN ((apflora.tpop
     LEFT JOIN apflora.pop_status_werte pop_status_werte_2 ON ((tpop.status = pop_status_werte_2.code)))
     LEFT JOIN apflora.tpop_apberrelevant_werte ON ((tpop.apber_relevant = tpop_apberrelevant_werte.code))) ON ((pop.id = tpop.pop_id)))
     JOIN (apflora.tpopmassnber
     JOIN apflora.tpopmassn_erfbeurt_werte ON ((tpopmassnber.beurteilung = tpopmassn_erfbeurt_werte.code))) ON ((tpop.id = tpopmassnber.tpop_id))) ON ((ap.id = pop.ap_id)))
  ORDER BY ae_eigenschaften.artname, pop.nr, tpop.nr, tpopmassnber.jahr;




CREATE VIEW apflora.v_ziel AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    adresse.name AS ap_bearbeiter,
    ziel.id,
    ziel.jahr,
    ziel_typ_werte.text AS typ,
    ziel.bezeichnung
   FROM ((((((apflora.ae_eigenschaften
     RIGHT JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.adresse ON ((ap.bearbeiter = adresse.id)))
     RIGHT JOIN apflora.ziel ON ((ap.id = ziel.ap_id)))
     LEFT JOIN apflora.ziel_typ_werte ON ((ziel.typ = ziel_typ_werte.code)))
  WHERE (ziel.typ = ANY (ARRAY[1, 2, 1170775556]))
  ORDER BY ae_eigenschaften.artname, ziel.jahr, ziel_typ_werte.text, ziel.typ;




CREATE VIEW apflora.v_zielber AS
 SELECT ap.id AS ap_id,
    ae_eigenschaften.artname,
    ap_bearbstand_werte.text AS ap_bearbeitung,
    ap.start_jahr AS ap_start_jahr,
    ap_umsetzung_werte.text AS ap_umsetzung,
    adresse.name AS ap_bearbeiter,
    ziel.id AS ziel_id,
    ziel.jahr AS ziel_jahr,
    ziel_typ_werte.text AS ziel_typ,
    ziel.bezeichnung AS ziel_bezeichnung,
    zielber.id,
    zielber.jahr,
    zielber.erreichung,
    zielber.bemerkungen,
    zielber.changed,
    zielber.changed_by
   FROM (((((((apflora.ae_eigenschaften
     RIGHT JOIN apflora.ap ON ((ae_eigenschaften.id = ap.art_id)))
     LEFT JOIN apflora.ap_bearbstand_werte ON ((ap.bearbeitung = ap_bearbstand_werte.code)))
     LEFT JOIN apflora.ap_umsetzung_werte ON ((ap.umsetzung = ap_umsetzung_werte.code)))
     LEFT JOIN apflora.adresse ON ((ap.bearbeiter = adresse.id)))
     RIGHT JOIN apflora.ziel ON ((ap.id = ziel.ap_id)))
     LEFT JOIN apflora.ziel_typ_werte ON ((ziel.typ = ziel_typ_werte.code)))
     RIGHT JOIN apflora.zielber ON ((ziel.id = zielber.ziel_id)))
  ORDER BY ae_eigenschaften.artname, ziel.jahr, ziel_typ_werte.text, ziel.typ, zielber.jahr;




CREATE SEQUENCE apflora."ziel_ZielId_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora."ziel_ZielId_seq" OWNED BY apflora.ziel.id_old;



CREATE SEQUENCE apflora."zielber_ZielBerId_seq"
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;




ALTER SEQUENCE apflora."zielber_ZielBerId_seq" OWNED BY apflora.zielber.id_old;



CREATE TABLE public.migrations (
    id integer NOT NULL,
    name character varying(100) NOT NULL,
    hash character varying(40) NOT NULL,
    executed_at timestamp without time zone DEFAULT now()
);




ALTER TABLE ONLY apflora._variable ALTER COLUMN "KonstId" SET DEFAULT nextval('apflora."_variable_KonstId_seq"'::regclass);



ALTER TABLE ONLY apflora._variable
    ADD CONSTRAINT _variable_pkey PRIMARY KEY ("KonstId");



ALTER TABLE ONLY apflora.ae_eigenschaften
    ADD CONSTRAINT "adb_eigenschaften_TaxonomieId_key" UNIQUE (taxid);



ALTER TABLE ONLY apflora.ae_eigenschaften
    ADD CONSTRAINT adb_eigenschaften_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.ae_lrdelarze
    ADD CONSTRAINT adb_lr_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.adresse
    ADD CONSTRAINT adresse_id_key UNIQUE (id);



ALTER TABLE ONLY apflora.adresse
    ADD CONSTRAINT adresse_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.ap
    ADD CONSTRAINT ap_art_key UNIQUE (art_id);



ALTER TABLE ONLY apflora.ap_bearbstand_werte
    ADD CONSTRAINT ap_bearbstand_werte_code_key UNIQUE (code);



ALTER TABLE ONLY apflora.ap_bearbstand_werte
    ADD CONSTRAINT ap_bearbstand_werte_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.ap_erfbeurtkrit_werte
    ADD CONSTRAINT ap_erfbeurtkrit_werte_code_key UNIQUE (code);



ALTER TABLE ONLY apflora.ap_erfbeurtkrit_werte
    ADD CONSTRAINT ap_erfbeurtkrit_werte_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.ap_erfkrit_werte
    ADD CONSTRAINT ap_erfkrit_werte_code_key UNIQUE (code);



ALTER TABLE ONLY apflora.ap_erfkrit_werte
    ADD CONSTRAINT ap_erfkrit_werte_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.ap
    ADD CONSTRAINT ap_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.ap_umsetzung_werte
    ADD CONSTRAINT ap_umsetzung_werte_code_key UNIQUE (code);



ALTER TABLE ONLY apflora.ap_umsetzung_werte
    ADD CONSTRAINT ap_umsetzung_werte_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.apber
    ADD CONSTRAINT apber_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.apberuebersicht
    ADD CONSTRAINT apberuebersicht_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.assozart
    ADD CONSTRAINT assozart_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.beob
    ADD CONSTRAINT beob_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.beob_quelle_werte
    ADD CONSTRAINT beob_quelle_werte_id_key UNIQUE (id);



ALTER TABLE ONLY apflora.beob_quelle_werte
    ADD CONSTRAINT beob_quelle_werte_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.apart
    ADD CONSTRAINT beobart_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.ber
    ADD CONSTRAINT ber_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.erfkrit
    ADD CONSTRAINT erfkrit_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.evab_typologie
    ADD CONSTRAINT evab_typologie_pkey PRIMARY KEY ("TYPO");



ALTER TABLE ONLY apflora.gemeinde
    ADD CONSTRAINT gemeinde_id_key UNIQUE (id);



ALTER TABLE ONLY apflora.gemeinde
    ADD CONSTRAINT gemeinde_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.idealbiotop
    ADD CONSTRAINT idealbiotop_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.message
    ADD CONSTRAINT message_id_key UNIQUE (id);



ALTER TABLE ONLY apflora.message
    ADD CONSTRAINT message_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.pop
    ADD CONSTRAINT pop_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.pop_status_werte
    ADD CONSTRAINT pop_status_werte_code_key UNIQUE (code);



ALTER TABLE ONLY apflora.pop_status_werte
    ADD CONSTRAINT pop_status_werte_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.popber
    ADD CONSTRAINT popber_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.popmassnber
    ADD CONSTRAINT popmassnber_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.projekt
    ADD CONSTRAINT projekt_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.tpop_apberrelevant_werte
    ADD CONSTRAINT tpop_apberrelevant_werte_code_key UNIQUE (code);



ALTER TABLE ONLY apflora.tpop_apberrelevant_werte
    ADD CONSTRAINT tpop_apberrelevant_werte_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.tpop_entwicklung_werte
    ADD CONSTRAINT tpop_entwicklung_werte_code_key UNIQUE (code);



ALTER TABLE ONLY apflora.tpop_entwicklung_werte
    ADD CONSTRAINT tpop_entwicklung_werte_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.tpop
    ADD CONSTRAINT tpop_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.tpopber
    ADD CONSTRAINT tpopber_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.tpopkontr_idbiotuebereinst_werte
    ADD CONSTRAINT tpopkontr_idbiotuebereinst_werte_code_key UNIQUE (code);



ALTER TABLE ONLY apflora.tpopkontr_idbiotuebereinst_werte
    ADD CONSTRAINT tpopkontr_idbiotuebereinst_werte_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.tpopkontr
    ADD CONSTRAINT tpopkontr_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.tpopkontr_typ_werte
    ADD CONSTRAINT tpopkontr_typ_werte_code_key UNIQUE (code);



ALTER TABLE ONLY apflora.tpopkontr_typ_werte
    ADD CONSTRAINT tpopkontr_typ_werte_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.tpopkontr_typ_werte
    ADD CONSTRAINT tpopkontr_typ_werte_text_key UNIQUE (text);



ALTER TABLE ONLY apflora.tpopkontrzaehl_einheit_werte
    ADD CONSTRAINT tpopkontrzaehl_einheit_werte_code_key UNIQUE (code);



ALTER TABLE ONLY apflora.tpopkontrzaehl_einheit_werte
    ADD CONSTRAINT tpopkontrzaehl_einheit_werte_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.tpopkontrzaehl_methode_werte
    ADD CONSTRAINT tpopkontrzaehl_methode_werte_code_key UNIQUE (code);



ALTER TABLE ONLY apflora.tpopkontrzaehl_methode_werte
    ADD CONSTRAINT tpopkontrzaehl_methode_werte_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.tpopkontrzaehl
    ADD CONSTRAINT tpopkontrzaehl_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.tpopmassn_erfbeurt_werte
    ADD CONSTRAINT tpopmassn_erfbeurt_werte_code_key UNIQUE (code);



ALTER TABLE ONLY apflora.tpopmassn_erfbeurt_werte
    ADD CONSTRAINT tpopmassn_erfbeurt_werte_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.tpopmassn
    ADD CONSTRAINT tpopmassn_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.tpopmassn_typ_werte
    ADD CONSTRAINT tpopmassn_typ_werte_code_key UNIQUE (code);



ALTER TABLE ONLY apflora.tpopmassn_typ_werte
    ADD CONSTRAINT tpopmassn_typ_werte_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.tpopmassnber
    ADD CONSTRAINT tpopmassnber_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora."user"
    ADD CONSTRAINT user_email_key UNIQUE (email);



ALTER TABLE ONLY apflora."user"
    ADD CONSTRAINT user_name_key UNIQUE (name);



ALTER TABLE ONLY apflora."user"
    ADD CONSTRAINT user_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.usermessage
    ADD CONSTRAINT usermessage_id_key UNIQUE (id);



ALTER TABLE ONLY apflora.usermessage
    ADD CONSTRAINT usermessage_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.ziel
    ADD CONSTRAINT ziel_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.ziel_typ_werte
    ADD CONSTRAINT ziel_typ_werte_code_key UNIQUE (code);



ALTER TABLE ONLY apflora.ziel_typ_werte
    ADD CONSTRAINT ziel_typ_werte_pkey PRIMARY KEY (id);



ALTER TABLE ONLY apflora.zielber
    ADD CONSTRAINT zielber_pkey PRIMARY KEY (id);



ALTER TABLE ONLY public.migrations
    ADD CONSTRAINT migrations_name_key UNIQUE (name);



ALTER TABLE ONLY public.migrations
    ADD CONSTRAINT migrations_pkey PRIMARY KEY (id);



CREATE INDEX "_variable_ApArtId_idx" ON apflora._variable USING btree ("ApArtId");



CREATE INDEX "_variable_JBerJahr_idx" ON apflora._variable USING btree (apber_jahr);



CREATE INDEX "adb_eigenschaften_Artname_idx" ON apflora.ae_eigenschaften USING btree (artname);



CREATE INDEX "adb_eigenschaften_TaxonomieId_idx" ON apflora.ae_eigenschaften USING btree (taxid);



CREATE INDEX adb_eigenschaften_id_idx ON apflora.ae_eigenschaften USING btree (id);



CREATE INDEX "adb_lr_Id_idx" ON apflora.ae_lrdelarze USING btree (sort);



CREATE INDEX "adb_lr_Label_idx" ON apflora.ae_lrdelarze USING btree (label);



CREATE INDEX adb_lr_id_idx ON apflora.ae_lrdelarze USING btree (id);



CREATE INDEX adresse_freiw_erfko_idx ON apflora.adresse USING btree (freiw_erfko);



CREATE INDEX adresse_id_idx ON apflora.adresse USING btree (id);



CREATE INDEX adresse_name_idx ON apflora.adresse USING btree (name);



CREATE INDEX ap_art_id_idx ON apflora.ap USING btree (art_id);



CREATE INDEX ap_bearbeiter_idx ON apflora.ap USING btree (bearbeiter);



CREATE INDEX ap_bearbeitung_idx ON apflora.ap USING btree (bearbeitung);



CREATE INDEX "ap_bearbstand_werte_DomainCode_idx" ON apflora.ap_bearbstand_werte USING btree (code);



CREATE INDEX "ap_bearbstand_werte_DomainOrd_idx" ON apflora.ap_bearbstand_werte USING btree (sort);



CREATE INDEX ap_bearbstand_werte_id_idx ON apflora.ap_bearbstand_werte USING btree (id);



CREATE INDEX "ap_erfbeurtkrit_werte_DomainCode_idx" ON apflora.ap_erfbeurtkrit_werte USING btree (code);



CREATE INDEX "ap_erfbeurtkrit_werte_DomainOrd_idx" ON apflora.ap_erfbeurtkrit_werte USING btree (sort);



CREATE INDEX ap_erfbeurtkrit_werte_id_idx ON apflora.ap_erfbeurtkrit_werte USING btree (id);



CREATE INDEX "ap_erfkrit_werte_BeurteilId_idx" ON apflora.ap_erfkrit_werte USING btree (code);



CREATE INDEX "ap_erfkrit_werte_BeurteilOrd_idx" ON apflora.ap_erfkrit_werte USING btree (sort);



CREATE INDEX ap_erfkrit_werte_id_idx ON apflora.ap_erfkrit_werte USING btree (id);



CREATE INDEX ap_id_idx ON apflora.ap USING btree (id);



CREATE INDEX ap_proj_id_idx ON apflora.ap USING btree (proj_id);



CREATE INDEX ap_start_jahr_idx ON apflora.ap USING btree (start_jahr);



CREATE INDEX ap_umsetzung_idx ON apflora.ap USING btree (umsetzung);



CREATE INDEX "ap_umsetzung_werte_DomainCode_idx" ON apflora.ap_umsetzung_werte USING btree (code);



CREATE INDEX "ap_umsetzung_werte_DomainOrd_idx" ON apflora.ap_umsetzung_werte USING btree (sort);



CREATE INDEX ap_umsetzung_werte_id_idx ON apflora.ap_umsetzung_werte USING btree (id);



CREATE INDEX apart_ap_id_idx ON apflora.apart USING btree (ap_id);



CREATE INDEX apart_art_id_idx ON apflora.apart USING btree (art_id);



CREATE INDEX apber_ap_id_idx ON apflora.apber USING btree (ap_id);



CREATE INDEX apber_bearbeiter_idx ON apflora.apber USING btree (bearbeiter);



CREATE INDEX apber_beurteilung_idx ON apflora.apber USING btree (beurteilung);



CREATE INDEX apber_id_idx ON apflora.apber USING btree (id);



CREATE INDEX apber_jahr_idx ON apflora.apber USING btree (jahr);



CREATE INDEX apberuebersicht_id_idx ON apflora.apberuebersicht USING btree (id);



CREATE INDEX apberuebersicht_jahr_idx ON apflora.apberuebersicht USING btree (jahr);



CREATE INDEX apberuebersicht_proj_id_idx ON apflora.apberuebersicht USING btree (proj_id);



CREATE INDEX assozart_ae_id_idx ON apflora.assozart USING btree (ae_id);



CREATE INDEX assozart_ap_id_idx ON apflora.assozart USING btree (ap_id);



CREATE INDEX assozart_id_idx ON apflora.assozart USING btree (id);



CREATE INDEX beob_art_id_idx ON apflora.beob USING btree (art_id);



CREATE INDEX beob_id_idx ON apflora.beob USING btree (id);



CREATE INDEX beob_nicht_zuordnen_idx ON apflora.beob USING btree (nicht_zuordnen);



CREATE INDEX beob_quelle_id_idx ON apflora.beob USING btree (quelle_id);



CREATE INDEX beob_quelle_werte_id_idx ON apflora.beob_quelle_werte USING btree (id);



CREATE INDEX beob_tpop_id_idx ON apflora.beob USING btree (tpop_id);



CREATE INDEX beob_x_idx ON apflora.beob USING btree (x);



CREATE INDEX beob_y_idx ON apflora.beob USING btree (y);



CREATE INDEX beobart_id_idx ON apflora.apart USING btree (id);



CREATE INDEX ber_ap_id_idx ON apflora.ber USING btree (ap_id);



CREATE INDEX ber_id_idx ON apflora.ber USING btree (id);



CREATE INDEX ber_jahr_idx ON apflora.ber USING btree (jahr);



CREATE INDEX erfkrit_ap_id_idx ON apflora.erfkrit USING btree (ap_id);



CREATE INDEX erfkrit_erfolg_idx ON apflora.erfkrit USING btree (erfolg);



CREATE INDEX erfkrit_id_idx ON apflora.erfkrit USING btree (id);



CREATE INDEX idealbiotop_ap_id_idx ON apflora.idealbiotop USING btree (ap_id);



CREATE INDEX idealbiotop_id_idx ON apflora.idealbiotop USING btree (id);



CREATE INDEX message_id_idx ON apflora.message USING btree (id);



CREATE INDEX message_time_idx ON apflora.message USING btree ("time");



CREATE INDEX pop_ap_id_idx ON apflora.pop USING btree (ap_id);



CREATE INDEX pop_bekannt_seit_idx ON apflora.pop USING btree (bekannt_seit);



CREATE INDEX pop_id_idx ON apflora.pop USING btree (id);



CREATE INDEX pop_name_idx ON apflora.pop USING btree (name);



CREATE INDEX pop_nr_idx ON apflora.pop USING btree (nr);



CREATE INDEX pop_status_idx ON apflora.pop USING btree (status);



CREATE INDEX "pop_status_werte_HerkunftId_idx" ON apflora.pop_status_werte USING btree (code);



CREATE INDEX "pop_status_werte_HerkunftOrd_idx" ON apflora.pop_status_werte USING btree (sort);



CREATE INDEX "pop_status_werte_HerkunftTxt_idx" ON apflora.pop_status_werte USING btree (text);



CREATE INDEX pop_status_werte_id_idx ON apflora.pop_status_werte USING btree (id);



CREATE INDEX pop_x_idx ON apflora.pop USING btree (x);



CREATE INDEX pop_y_idx ON apflora.pop USING btree (y);



CREATE INDEX popber_entwicklung_idx ON apflora.popber USING btree (entwicklung);



CREATE INDEX popber_id_idx ON apflora.popber USING btree (id);



CREATE INDEX popber_jahr_idx ON apflora.popber USING btree (jahr);



CREATE INDEX popber_pop_id_idx ON apflora.popber USING btree (pop_id);



CREATE INDEX popmassnber_beurteilung_idx ON apflora.popmassnber USING btree (beurteilung);



CREATE INDEX popmassnber_id_idx ON apflora.popmassnber USING btree (id);



CREATE INDEX popmassnber_jahr_idx ON apflora.popmassnber USING btree (jahr);



CREATE INDEX popmassnber_pop_id_idx ON apflora.popmassnber USING btree (pop_id);



CREATE INDEX projekt_id_idx ON apflora.projekt USING btree (id);



CREATE INDEX projekt_name_idx ON apflora.projekt USING btree (name);



CREATE INDEX tpop_apber_relevant_idx ON apflora.tpop USING btree (apber_relevant);



CREATE INDEX "tpop_apberrelevant_werte_DomainCode_idx" ON apflora.tpop_apberrelevant_werte USING btree (code);



CREATE INDEX "tpop_apberrelevant_werte_DomainTxt_idx" ON apflora.tpop_apberrelevant_werte USING btree (text);



CREATE INDEX tpop_apberrelevant_werte_id_idx ON apflora.tpop_apberrelevant_werte USING btree (id);



CREATE INDEX "tpop_entwicklung_werte_EntwicklungCode_idx" ON apflora.tpop_entwicklung_werte USING btree (code);



CREATE INDEX "tpop_entwicklung_werte_EntwicklungOrd_idx" ON apflora.tpop_entwicklung_werte USING btree (sort);



CREATE INDEX tpop_entwicklung_werte_id_idx ON apflora.tpop_entwicklung_werte USING btree (id);



CREATE INDEX tpop_flurname_idx ON apflora.tpop USING btree (flurname);



CREATE INDEX tpop_id_idx ON apflora.tpop USING btree (id);



CREATE INDEX tpop_nr_idx ON apflora.tpop USING btree (nr);



CREATE INDEX tpop_pop_id_idx ON apflora.tpop USING btree (pop_id);



CREATE INDEX tpop_status_idx ON apflora.tpop USING btree (status);



CREATE INDEX tpop_x_idx ON apflora.tpop USING btree (x);



CREATE INDEX tpop_y_idx ON apflora.tpop USING btree (y);



CREATE INDEX tpopber_entwicklung_idx ON apflora.tpopber USING btree (entwicklung);



CREATE INDEX tpopber_id_idx ON apflora.tpopber USING btree (id);



CREATE INDEX tpopber_jahr_idx ON apflora.tpopber USING btree (jahr);



CREATE INDEX tpopber_tpop_id_idx ON apflora.tpopber USING btree (tpop_id);



CREATE INDEX tpopkontr_bearbeiter_idx ON apflora.tpopkontr USING btree (bearbeiter);



CREATE INDEX tpopkontr_datum_idx ON apflora.tpopkontr USING btree (datum);



CREATE INDEX tpopkontr_entwicklung_idx ON apflora.tpopkontr USING btree (entwicklung);



CREATE INDEX tpopkontr_id_idx ON apflora.tpopkontr USING btree (id);



CREATE INDEX tpopkontr_idbiotuebereinst_werte_code_idx ON apflora.tpopkontr_idbiotuebereinst_werte USING btree (code);



CREATE INDEX tpopkontr_idbiotuebereinst_werte_id_idx ON apflora.tpopkontr_idbiotuebereinst_werte USING btree (id);



CREATE INDEX tpopkontr_idbiotuebereinst_werte_sort_idx ON apflora.tpopkontr_idbiotuebereinst_werte USING btree (sort);



CREATE INDEX tpopkontr_idealbiotop_uebereinstimmung_idx ON apflora.tpopkontr USING btree (idealbiotop_uebereinstimmung);



CREATE INDEX tpopkontr_jahr_idx ON apflora.tpopkontr USING btree (jahr);



CREATE INDEX tpopkontr_tpop_id_idx ON apflora.tpopkontr USING btree (tpop_id);



CREATE INDEX tpopkontr_typ_idx ON apflora.tpopkontr USING btree (typ);



CREATE INDEX tpopkontr_typ_werte_id_idx ON apflora.tpopkontr_typ_werte USING btree (id);



CREATE UNIQUE INDEX tpopkontr_zeit_id_idx ON apflora.tpopkontr USING btree (zeit_id);



CREATE INDEX tpopkontrzaehl_anzahl_idx ON apflora.tpopkontrzaehl USING btree (anzahl);



CREATE INDEX tpopkontrzaehl_einheit_idx ON apflora.tpopkontrzaehl USING btree (einheit);



CREATE INDEX tpopkontrzaehl_einheit_werte_code_idx ON apflora.tpopkontrzaehl_einheit_werte USING btree (code);



CREATE INDEX tpopkontrzaehl_einheit_werte_id_idx ON apflora.tpopkontrzaehl_einheit_werte USING btree (id);



CREATE INDEX tpopkontrzaehl_einheit_werte_sort_idx ON apflora.tpopkontrzaehl_einheit_werte USING btree (sort);



CREATE INDEX tpopkontrzaehl_id_idx ON apflora.tpopkontrzaehl USING btree (id);



CREATE INDEX tpopkontrzaehl_methode_idx ON apflora.tpopkontrzaehl USING btree (methode);



CREATE INDEX tpopkontrzaehl_methode_werte_code_idx ON apflora.tpopkontrzaehl_methode_werte USING btree (code);



CREATE INDEX tpopkontrzaehl_methode_werte_id_idx ON apflora.tpopkontrzaehl_methode_werte USING btree (id);



CREATE INDEX tpopkontrzaehl_methode_werte_sort_idx ON apflora.tpopkontrzaehl_methode_werte USING btree (sort);



CREATE INDEX tpopkontrzaehl_tpopkontr_id_idx2 ON apflora.tpopkontrzaehl USING btree (tpopkontr_id);



CREATE INDEX tpopmassn_bearbeiter_idx ON apflora.tpopmassn USING btree (bearbeiter);



CREATE INDEX tpopmassn_erfbeurt_werte_code_idx ON apflora.tpopmassn_erfbeurt_werte USING btree (code);



CREATE INDEX tpopmassn_erfbeurt_werte_id_idx ON apflora.tpopmassn_erfbeurt_werte USING btree (id);



CREATE INDEX tpopmassn_erfbeurt_werte_sort_idx ON apflora.tpopmassn_erfbeurt_werte USING btree (sort);



CREATE UNIQUE INDEX tpopmassn_id_idx ON apflora.tpopmassn USING btree (id);



CREATE INDEX tpopmassn_jahr_idx ON apflora.tpopmassn USING btree (jahr);



CREATE INDEX tpopmassn_tpop_id_idx ON apflora.tpopmassn USING btree (tpop_id);



CREATE INDEX tpopmassn_typ_idx ON apflora.tpopmassn USING btree (typ);



CREATE INDEX tpopmassn_typ_werte_code_idx ON apflora.tpopmassn_typ_werte USING btree (code);



CREATE INDEX tpopmassn_typ_werte_id_idx ON apflora.tpopmassn_typ_werte USING btree (id);



CREATE INDEX tpopmassn_typ_werte_sort_idx ON apflora.tpopmassn_typ_werte USING btree (sort);



CREATE INDEX tpopmassnber_beurteilung_idx ON apflora.tpopmassnber USING btree (beurteilung);



CREATE INDEX tpopmassnber_id_idx ON apflora.tpopmassnber USING btree (id);



CREATE INDEX tpopmassnber_jahr_idx ON apflora.tpopmassnber USING btree (jahr);



CREATE INDEX tpopmassnber_tpop_id_idx ON apflora.tpopmassnber USING btree (tpop_id);



CREATE INDEX user_id_idx ON apflora."user" USING btree (id);



CREATE INDEX user_name_idx ON apflora."user" USING btree (name);



CREATE INDEX usermessage_id_idx ON apflora.usermessage USING btree (id);



CREATE INDEX usermessage_message_id_idx ON apflora.usermessage USING btree (message_id);



CREATE INDEX usermessage_user_name_idx ON apflora.usermessage USING btree (user_name);



CREATE INDEX ziel_ap_id_idx ON apflora.ziel USING btree (ap_id);



CREATE INDEX ziel_id_idx ON apflora.ziel USING btree (id);



CREATE INDEX ziel_jahr_idx ON apflora.ziel USING btree (jahr);



CREATE INDEX ziel_typ_idx ON apflora.ziel USING btree (typ);



CREATE INDEX ziel_typ_werte_code_idx ON apflora.ziel_typ_werte USING btree (code);



CREATE INDEX ziel_typ_werte_id_idx ON apflora.ziel_typ_werte USING btree (id);



CREATE INDEX ziel_typ_werte_sort_idx ON apflora.ziel_typ_werte USING btree (sort);



CREATE INDEX zielber_id_idx ON apflora.zielber USING btree (id);



CREATE INDEX zielber_jahr_idx ON apflora.zielber USING btree (jahr);



CREATE INDEX zielber_ziel_id_idx ON apflora.zielber USING btree (ziel_id);



CREATE OR REPLACE VIEW apflora.v_exportevab_beob AS
 SELECT tpopkontr.zeit_id AS "fkZeitpunkt",
    tpopkontr.id AS "idBeobachtung",
    COALESCE(adresse.evab_id_person, 'a1146ae4-4e03-4032-8aa8-bc46ba02f468'::uuid) AS fkautor,
    ap.art_id AS fkart,
    18 AS fkartgruppe,
    1 AS fkaa1,
        CASE
            WHEN (tpop.status < 200) THEN 4
            WHEN (EXISTS ( SELECT tpopmassn.tpop_id
               FROM apflora.tpopmassn
              WHERE ((tpopmassn.tpop_id = tpopkontr.tpop_id) AND ((tpopmassn.typ >= 1) AND (tpopmassn.typ <= 3)) AND (tpopmassn.jahr <= tpopkontr.jahr)))) THEN 6
            WHEN (tpop.status_unklar = true) THEN 3
            ELSE 5
        END AS "fkAAINTRODUIT",
        CASE
            WHEN ((v_tpopkontr_maxanzahl.anzahl = 0) AND (EXISTS ( SELECT tpopber.tpop_id
               FROM apflora.tpopber
              WHERE ((tpopber.tpop_id = tpopkontr.tpop_id) AND (tpopber.entwicklung = 8) AND (tpopber.jahr = tpopkontr.jahr))))) THEN 2
            WHEN (v_tpopkontr_maxanzahl.anzahl = 0) THEN 3
            ELSE 1
        END AS "fkAAPRESENCE",
    "substring"(tpopkontr.gefaehrdung, 1, 244) AS "MENACES",
    "substring"(tpopkontr.vitalitaet, 1, 200) AS "VITALITE_PLANTE",
    "substring"(tpop.beschreibung, 1, 244) AS "STATION",
    "substring"(concat('Anzahlen: ', array_to_string(array_agg(tpopkontrzaehl.anzahl), ', '::text), ', Zaehleinheiten: ', string_agg((tpopkontrzaehl_einheit_werte.text)::text, ', '::text), ', Methoden: ', string_agg((tpopkontrzaehl_methode_werte.text)::text, ', '::text)), 1, 244) AS "ABONDANCE",
    'C'::text AS "EXPERTISE_INTRODUIT",
        CASE
            WHEN (apflora_adresse_2.evab_id_person IS NOT NULL) THEN "substring"(apflora_adresse_2.name, 1, 99)
            ELSE 'topos Marti & Müller AG Zürich'::text
        END AS "EXPERTISE_INTRODUITE_NOM"
   FROM (((apflora.ap
     LEFT JOIN apflora.adresse apflora_adresse_2 ON ((ap.bearbeiter = apflora_adresse_2.id)))
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN (((apflora.tpopkontr
     LEFT JOIN apflora.adresse ON ((tpopkontr.bearbeiter = adresse.id)))
     JOIN apflora.v_tpopkontr_maxanzahl ON ((v_tpopkontr_maxanzahl.id = tpopkontr.id)))
     LEFT JOIN ((apflora.tpopkontrzaehl
     LEFT JOIN apflora.tpopkontrzaehl_einheit_werte ON ((tpopkontrzaehl.einheit = tpopkontrzaehl_einheit_werte.code)))
     LEFT JOIN apflora.tpopkontrzaehl_methode_werte ON ((tpopkontrzaehl.methode = tpopkontrzaehl_methode_werte.code))) ON ((tpopkontr.id = tpopkontrzaehl.tpopkontr_id))) ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
     JOIN apflora.ae_eigenschaften ON ((ae_eigenschaften.id = ap.art_id)))
  WHERE ((ae_eigenschaften.taxid > 150) AND (ae_eigenschaften.taxid < 1000000) AND (tpop.x IS NOT NULL) AND (tpop.y IS NOT NULL) AND ((tpopkontr.typ)::text = ANY (ARRAY[('Ausgangszustand'::character varying)::text, ('Zwischenbeurteilung'::character varying)::text, ('Freiwilligen-Erfolgskontrolle'::character varying)::text])) AND (tpop.status <> 201) AND (tpopkontr.bearbeiter IS NOT NULL) AND (tpopkontr.bearbeiter <> 'a1146ae4-4e03-4032-8aa8-bc46ba02f468'::uuid) AND (tpopkontr.jahr IS NOT NULL) AND ((tpopkontr.jahr)::double precision <> date_part('year'::text, ('now'::text)::date)) AND (tpop.bekannt_seit IS NOT NULL) AND ((tpop.status = ANY (ARRAY[100, 101])) OR ((tpopkontr.jahr - tpop.bekannt_seit) > 5)) AND (tpop.flurname IS NOT NULL) AND (ap.id IN ( SELECT v_exportevab_projekt."idProjekt"
           FROM apflora.v_exportevab_projekt)) AND (pop.id IN ( SELECT v_exportevab_raum."idRaum"
           FROM apflora.v_exportevab_raum)) AND (tpop.id IN ( SELECT v_exportevab_ort."idOrt"
           FROM apflora.v_exportevab_ort)) AND (tpopkontr.zeit_id IN ( SELECT v_exportevab_zeit."idZeitpunkt"
           FROM apflora.v_exportevab_zeit)))
  GROUP BY tpopkontr.zeit_id, tpopkontr.tpop_id, tpopkontr.id, tpopkontr.jahr, adresse.evab_id_person, ap.id,
        CASE
            WHEN (tpop.status < 200) THEN 4
            WHEN (EXISTS ( SELECT tpopmassn.tpop_id
               FROM apflora.tpopmassn
              WHERE ((tpopmassn.tpop_id = tpopkontr.tpop_id) AND ((tpopmassn.typ >= 1) AND (tpopmassn.typ <= 3)) AND (tpopmassn.jahr <= tpopkontr.jahr)))) THEN 6
            WHEN (tpop.status_unklar = true) THEN 3
            ELSE 5
        END, v_tpopkontr_maxanzahl.anzahl, tpopkontr.gefaehrdung, tpopkontr.vitalitaet, tpop.beschreibung, apflora_adresse_2.evab_id_person, apflora_adresse_2.name;



CREATE OR REPLACE VIEW apflora.v_qk_apber_ohnejahr AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'AP-Bericht ohne Jahr:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'AP-Berichte'::text, (apber.id)::text] AS url,
    ARRAY[concat('AP-Bericht (id): ', apber.id)] AS text
   FROM (apflora.ap
     JOIN apflora.apber ON ((ap.id = apber.ap_id)))
  GROUP BY ap.id, apber.id
 HAVING (apber.jahr IS NULL)
  ORDER BY apber.id;



CREATE OR REPLACE VIEW apflora.v_qk_feldkontr_ohnezaehlung AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Feldkontrolle ohne Zaehlung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text, 'Feld-Kontrollen'::text, (tpopkontr.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr), concat('Feld-Kontrolle (Jahr): ', tpopkontr.jahr)] AS text,
    tpopkontr.jahr AS "Berichtjahr"
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN (apflora.tpopkontr
     LEFT JOIN apflora.tpopkontrzaehl ON ((tpopkontr.id = tpopkontrzaehl.tpopkontr_id))) ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  GROUP BY ap.id, pop.id, tpop.id, tpop.nr, tpopkontr.id, tpopkontrzaehl.id
 HAVING ((tpopkontrzaehl.id IS NULL) AND (tpopkontr.jahr IS NOT NULL) AND ((tpopkontr.typ)::text <> 'Freiwilligen-Erfolgskontrolle'::text))
  ORDER BY ap.id, pop.nr, tpop.nr, tpopkontr.jahr;



CREATE OR REPLACE VIEW apflora.v_qk_freiwkontr_ohnezaehlung AS
 SELECT ap.proj_id,
    ap.id AS ap_id,
    'Freiwilligen-Kontrolle ohne Zaehlung:'::text AS hw,
    ARRAY['Projekte'::text, '4635372c-431c-11e8-bb30-e77f6cdd35a6'::text, 'Aktionspläne'::text, (ap.id)::text, 'Populationen'::text, (pop.id)::text, 'Teil-Populationen'::text, (tpop.id)::text, 'Freiwilligen-Kontrollen'::text, (tpopkontr.id)::text] AS url,
    ARRAY[concat('Population (Nr.): ', pop.nr), concat('Teil-Population (Nr.): ', tpop.nr), concat('Feld-Kontrolle (Jahr): ', tpopkontr.jahr)] AS text,
    tpopkontr.jahr AS "Berichtjahr"
   FROM (apflora.ap
     JOIN (apflora.pop
     JOIN (apflora.tpop
     JOIN (apflora.tpopkontr
     LEFT JOIN apflora.tpopkontrzaehl ON ((tpopkontr.id = tpopkontrzaehl.tpopkontr_id))) ON ((tpop.id = tpopkontr.tpop_id))) ON ((pop.id = tpop.pop_id))) ON ((ap.id = pop.ap_id)))
  GROUP BY ap.id, pop.id, tpop.id, tpop.nr, tpopkontr.id, tpopkontrzaehl.id
 HAVING ((tpopkontrzaehl.id IS NULL) AND (tpopkontr.jahr IS NOT NULL) AND ((tpopkontr.typ)::text = 'Freiwilligen-Erfolgskontrolle'::text))
  ORDER BY ap.id, pop.nr, tpop.nr, tpopkontr.jahr;



CREATE TRIGGER adresse_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.adresse FOR EACH ROW EXECUTE PROCEDURE public.adresse_on_update_set_mut();



CREATE TRIGGER ap_bearbstand_werte_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.ap_bearbstand_werte FOR EACH ROW EXECUTE PROCEDURE public.ap_bearbstand_werte_on_update_set_mut();



CREATE TRIGGER ap_erfbeurtkrit_werte_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.ap_erfbeurtkrit_werte FOR EACH ROW EXECUTE PROCEDURE public.ap_erfbeurtkrit_werte_on_update_set_mut();



CREATE TRIGGER ap_erfkrit_werte_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.ap_erfkrit_werte FOR EACH ROW EXECUTE PROCEDURE public.ap_erfkrit_werte_on_update_set_mut();



CREATE TRIGGER ap_insert_add_apart AFTER INSERT ON apflora.ap FOR EACH ROW EXECUTE PROCEDURE apflora.ap_insert_add_apart();



CREATE TRIGGER ap_insert_add_idealbiotop AFTER INSERT ON apflora.ap FOR EACH ROW EXECUTE PROCEDURE apflora.ap_insert_add_idealbiotop();



CREATE TRIGGER ap_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.ap FOR EACH ROW EXECUTE PROCEDURE public.ap_on_update_set_mut();



CREATE TRIGGER ap_umsetzung_werte_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.ap_umsetzung_werte FOR EACH ROW EXECUTE PROCEDURE public.ap_umsetzung_werte_on_update_set_mut();



CREATE TRIGGER apber_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.apber FOR EACH ROW EXECUTE PROCEDURE public.apber_on_update_set_mut();



CREATE TRIGGER apberuebersicht_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.apberuebersicht FOR EACH ROW EXECUTE PROCEDURE public.apberuebersicht_on_update_set_mut();



CREATE TRIGGER assozart_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.assozart FOR EACH ROW EXECUTE PROCEDURE public.assozart_on_update_set_mut();



CREATE TRIGGER beob_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.beob FOR EACH ROW EXECUTE PROCEDURE public.beob_on_update_set_mut();



CREATE TRIGGER ber_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.ber FOR EACH ROW EXECUTE PROCEDURE public.ber_on_update_set_mut();



CREATE TRIGGER encrypt_pass BEFORE INSERT OR UPDATE ON apflora."user" FOR EACH ROW EXECUTE PROCEDURE auth.encrypt_pass();



CREATE CONSTRAINT TRIGGER ensure_user_role_exists AFTER INSERT OR UPDATE ON apflora."user" NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE PROCEDURE auth.check_role_exists();



CREATE TRIGGER erfkrit_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.erfkrit FOR EACH ROW EXECUTE PROCEDURE public.erfkrit_on_update_set_mut();



CREATE TRIGGER idealbiotop_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.idealbiotop FOR EACH ROW EXECUTE PROCEDURE public.idealbiotop_on_update_set_mut();



CREATE TRIGGER pop_max_one_massnber_per_year BEFORE INSERT OR UPDATE ON apflora.popmassnber FOR EACH ROW EXECUTE PROCEDURE apflora.pop_max_one_massnber_per_year();



CREATE TRIGGER pop_max_one_popber_per_year BEFORE INSERT OR UPDATE ON apflora.popber FOR EACH ROW EXECUTE PROCEDURE apflora.pop_max_one_popber_per_year();



CREATE TRIGGER pop_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.pop FOR EACH ROW EXECUTE PROCEDURE public.pop_on_update_set_mut();



CREATE TRIGGER pop_status_werte_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.pop_status_werte FOR EACH ROW EXECUTE PROCEDURE public.pop_status_werte_on_update_set_mut();



CREATE TRIGGER popber_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.popber FOR EACH ROW EXECUTE PROCEDURE public.popber_on_update_set_mut();



CREATE TRIGGER popmassnber_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.popmassnber FOR EACH ROW EXECUTE PROCEDURE public.popmassnber_on_update_set_mut();



CREATE TRIGGER projekt_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.projekt FOR EACH ROW EXECUTE PROCEDURE public.projekt_on_update_set_mut();



CREATE TRIGGER tpop_apberrelevant_werte_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.tpop_apberrelevant_werte FOR EACH ROW EXECUTE PROCEDURE public.tpop_apberrelevant_werte_on_update_set_mut();



CREATE TRIGGER tpop_entwicklung_werte_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.tpop_entwicklung_werte FOR EACH ROW EXECUTE PROCEDURE public.tpop_entwicklung_werte_on_update_set_mut();



CREATE TRIGGER tpop_max_one_massnber_per_year BEFORE INSERT OR UPDATE ON apflora.tpopmassnber FOR EACH ROW EXECUTE PROCEDURE apflora.tpop_max_one_massnber_per_year();



CREATE TRIGGER tpop_max_one_tpopber_per_year BEFORE INSERT OR UPDATE ON apflora.tpopber FOR EACH ROW EXECUTE PROCEDURE apflora.tpop_max_one_tpopber_per_year();



CREATE TRIGGER tpop_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.tpop FOR EACH ROW EXECUTE PROCEDURE public.tpop_on_update_set_mut();



CREATE TRIGGER tpopber_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.tpopber FOR EACH ROW EXECUTE PROCEDURE public.tpopber_on_update_set_mut();



CREATE TRIGGER tpopkontr_idbiotuebereinst_werte_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.tpopkontr_idbiotuebereinst_werte FOR EACH ROW EXECUTE PROCEDURE public.tpopkontr_idbiotuebereinst_werte_on_update_set_mut();



CREATE TRIGGER tpopkontr_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.tpopkontr FOR EACH ROW EXECUTE PROCEDURE public.tpopkontr_on_update_set_mut();



CREATE TRIGGER tpopkontr_typ_werte_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.tpopkontr_typ_werte FOR EACH ROW EXECUTE PROCEDURE public.tpopkontr_typ_werte_on_update_set_mut();



CREATE TRIGGER tpopkontrzaehl_einheit_werte_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.tpopkontrzaehl_einheit_werte FOR EACH ROW EXECUTE PROCEDURE public.tpopkontrzaehl_einheit_werte_on_update_set_mut();



CREATE TRIGGER tpopkontrzaehl_methode_werte_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.tpopkontrzaehl_methode_werte FOR EACH ROW EXECUTE PROCEDURE public.tpopkontrzaehl_methode_werte_on_update_set_mut();



CREATE TRIGGER tpopkontrzaehl_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.tpopkontrzaehl FOR EACH ROW EXECUTE PROCEDURE public.tpopkontrzaehl_on_update_set_mut();



CREATE TRIGGER tpopmassn_erfbeurt_werte_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.tpopmassn_erfbeurt_werte FOR EACH ROW EXECUTE PROCEDURE public.tpopmassn_erfbeurt_werte_on_update_set_mut();



CREATE TRIGGER tpopmassn_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.tpopmassn FOR EACH ROW EXECUTE PROCEDURE public.tpopmassn_on_update_set_mut();



CREATE TRIGGER tpopmassn_typ_werte_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.tpopmassn_typ_werte FOR EACH ROW EXECUTE PROCEDURE public.tpopmassn_typ_werte_on_update_set_mut();



CREATE TRIGGER tpopmassnber_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.tpopmassnber FOR EACH ROW EXECUTE PROCEDURE public.tpopmassnber_on_update_set_mut();



CREATE TRIGGER ziel_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.ziel FOR EACH ROW EXECUTE PROCEDURE public.ziel_on_update_set_mut();



CREATE TRIGGER ziel_typ_werte_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.ziel_typ_werte FOR EACH ROW EXECUTE PROCEDURE public.ziel_typ_werte_on_update_set_mut();



CREATE TRIGGER zielber_on_update_set_mut BEFORE INSERT OR UPDATE ON apflora.zielber FOR EACH ROW EXECUTE PROCEDURE public.zielber_on_update_set_mut();



ALTER TABLE ONLY apflora.ap
    ADD CONSTRAINT ap_fk_adresse FOREIGN KEY (bearbeiter) REFERENCES apflora.adresse(id) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.ap
    ADD CONSTRAINT ap_fk_ae_eigenschaften FOREIGN KEY (art_id) REFERENCES apflora.ae_eigenschaften(id) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.ap
    ADD CONSTRAINT ap_fk_ap_bearbstand_werte FOREIGN KEY (bearbeitung) REFERENCES apflora.ap_bearbstand_werte(code) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.ap
    ADD CONSTRAINT ap_fk_ap_umsetzung_werte FOREIGN KEY (umsetzung) REFERENCES apflora.ap_umsetzung_werte(code) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.ap
    ADD CONSTRAINT ap_proj_id_fkey FOREIGN KEY (proj_id) REFERENCES apflora.projekt(id) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.apart
    ADD CONSTRAINT apart_ap_id_fkey FOREIGN KEY (ap_id) REFERENCES apflora.ap(id) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.apart
    ADD CONSTRAINT apart_fk_ae_eigenschaften FOREIGN KEY (art_id) REFERENCES apflora.ae_eigenschaften(id) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.apber
    ADD CONSTRAINT apber_ap_id_fkey FOREIGN KEY (ap_id) REFERENCES apflora.ap(id) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.apber
    ADD CONSTRAINT apber_fk_adresse FOREIGN KEY (bearbeiter) REFERENCES apflora.adresse(id) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.apber
    ADD CONSTRAINT apber_fk_ap_erfkrit_werte FOREIGN KEY (beurteilung) REFERENCES apflora.ap_erfkrit_werte(code) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.apberuebersicht
    ADD CONSTRAINT apberuebersicht_proj_id_fkey FOREIGN KEY (proj_id) REFERENCES apflora.projekt(id) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.assozart
    ADD CONSTRAINT assozart_ae_id_fkey FOREIGN KEY (ae_id) REFERENCES apflora.ae_eigenschaften(id) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.assozart
    ADD CONSTRAINT assozart_ap_id_fkey FOREIGN KEY (ap_id) REFERENCES apflora.ap(id) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.assozart
    ADD CONSTRAINT assozart_fk_ae_eigenschaften FOREIGN KEY (ae_id) REFERENCES apflora.ae_eigenschaften(id) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.beob
    ADD CONSTRAINT beob_fk_ae_eigenschaften FOREIGN KEY (art_id) REFERENCES apflora.ae_eigenschaften(id) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.beob
    ADD CONSTRAINT beob_fk_beob_quelle_werte FOREIGN KEY (quelle_id) REFERENCES apflora.beob_quelle_werte(id) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.beob
    ADD CONSTRAINT beob_tpop_id_fkey FOREIGN KEY (tpop_id) REFERENCES apflora.tpop(id) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.ber
    ADD CONSTRAINT ber_ap_id_fkey FOREIGN KEY (ap_id) REFERENCES apflora.ap(id) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.erfkrit
    ADD CONSTRAINT erfkrit_ap_id_fkey FOREIGN KEY (ap_id) REFERENCES apflora.ap(id) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.erfkrit
    ADD CONSTRAINT erfkrit_fk_ap_erfkrit_werte FOREIGN KEY (erfolg) REFERENCES apflora.ap_erfkrit_werte(code) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.usermessage
    ADD CONSTRAINT fk_user FOREIGN KEY (user_name) REFERENCES apflora."user"(name) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.idealbiotop
    ADD CONSTRAINT idealbiotop_ap_id_fkey FOREIGN KEY (ap_id) REFERENCES apflora.ap(id) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.pop
    ADD CONSTRAINT pop_ap_id_fkey FOREIGN KEY (ap_id) REFERENCES apflora.ap(id) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.pop
    ADD CONSTRAINT pop_fk_pop_status_werte FOREIGN KEY (status) REFERENCES apflora.pop_status_werte(code) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.popber
    ADD CONSTRAINT popber_fk_tpop_entwicklung_werte FOREIGN KEY (entwicklung) REFERENCES apflora.tpop_entwicklung_werte(code) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.popber
    ADD CONSTRAINT popber_pop_id_fkey FOREIGN KEY (pop_id) REFERENCES apflora.pop(id) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.popmassnber
    ADD CONSTRAINT popmassnber_fk_tpopmassn_erfbeurt_werte FOREIGN KEY (beurteilung) REFERENCES apflora.tpopmassn_erfbeurt_werte(code) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.popmassnber
    ADD CONSTRAINT popmassnber_pop_id_fkey FOREIGN KEY (pop_id) REFERENCES apflora.pop(id) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.tpop
    ADD CONSTRAINT tpop_fk_tpop_apberrelevant_werte FOREIGN KEY (apber_relevant) REFERENCES apflora.tpop_apberrelevant_werte(code) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.tpop
    ADD CONSTRAINT tpop_fk_tpop_status_werte FOREIGN KEY (status) REFERENCES apflora.pop_status_werte(code) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.tpop
    ADD CONSTRAINT tpop_pop_id_fkey FOREIGN KEY (pop_id) REFERENCES apflora.pop(id) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.tpopber
    ADD CONSTRAINT tpopber_fk_tpop_entwicklung_werte FOREIGN KEY (entwicklung) REFERENCES apflora.tpop_entwicklung_werte(code) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.tpopber
    ADD CONSTRAINT tpopber_tpop_id_fkey FOREIGN KEY (tpop_id) REFERENCES apflora.tpop(id) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.tpopkontr
    ADD CONSTRAINT tpopkontr_fk_adresse FOREIGN KEY (bearbeiter) REFERENCES apflora.adresse(id) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.tpopkontr
    ADD CONSTRAINT tpopkontr_fk_tpop_entwicklung_werte FOREIGN KEY (entwicklung) REFERENCES apflora.tpop_entwicklung_werte(code) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.tpopkontr
    ADD CONSTRAINT tpopkontr_fk_tpopkontr_idbiotuebereinst_werte FOREIGN KEY (idealbiotop_uebereinstimmung) REFERENCES apflora.tpopkontr_idbiotuebereinst_werte(code) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.tpopkontr
    ADD CONSTRAINT tpopkontr_fk_tpopkontr_typ_werte FOREIGN KEY (typ) REFERENCES apflora.tpopkontr_typ_werte(text) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.tpopkontr
    ADD CONSTRAINT tpopkontr_tpop_id_fkey FOREIGN KEY (tpop_id) REFERENCES apflora.tpop(id) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.tpopkontrzaehl
    ADD CONSTRAINT tpopkontrzaehl_fk_tpopkontrzaehl_einheit_werte FOREIGN KEY (einheit) REFERENCES apflora.tpopkontrzaehl_einheit_werte(code) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.tpopkontrzaehl
    ADD CONSTRAINT tpopkontrzaehl_fk_tpopkontrzaehl_methode_werte FOREIGN KEY (methode) REFERENCES apflora.tpopkontrzaehl_methode_werte(code) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.tpopkontrzaehl
    ADD CONSTRAINT tpopkontrzaehl_tpopkontr_id_fkey FOREIGN KEY (tpopkontr_id) REFERENCES apflora.tpopkontr(id) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.tpopmassn
    ADD CONSTRAINT tpopmassn_fk_adresse FOREIGN KEY (bearbeiter) REFERENCES apflora.adresse(id) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.tpopmassn
    ADD CONSTRAINT tpopmassn_fk_tpopmassn_typ_werte FOREIGN KEY (typ) REFERENCES apflora.tpopmassn_typ_werte(code) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.tpopmassn
    ADD CONSTRAINT tpopmassn_tpop_id_fkey FOREIGN KEY (tpop_id) REFERENCES apflora.tpop(id) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.tpopmassnber
    ADD CONSTRAINT tpopmassnber_fk_tpopmassn_erfbeurt_werte FOREIGN KEY (beurteilung) REFERENCES apflora.tpopmassn_erfbeurt_werte(code) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.tpopmassnber
    ADD CONSTRAINT tpopmassnber_tpop_id_fkey FOREIGN KEY (tpop_id) REFERENCES apflora.tpop(id) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.usermessage
    ADD CONSTRAINT usermessage_message_id_fkey FOREIGN KEY (message_id) REFERENCES apflora.message(id) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.ziel
    ADD CONSTRAINT ziel_ap_id_fkey FOREIGN KEY (ap_id) REFERENCES apflora.ap(id) ON UPDATE CASCADE ON DELETE CASCADE;



ALTER TABLE ONLY apflora.ziel
    ADD CONSTRAINT ziel_fk_ziel_typ_werte FOREIGN KEY (typ) REFERENCES apflora.ziel_typ_werte(code) ON UPDATE CASCADE ON DELETE SET NULL;



ALTER TABLE ONLY apflora.zielber
    ADD CONSTRAINT zielber_ziel_id_fkey FOREIGN KEY (ziel_id) REFERENCES apflora.ziel(id) ON UPDATE CASCADE ON DELETE CASCADE;

ALTER TABLE apflora."user" ENABLE ROW LEVEL SECURITY;
