﻿-----------------------------------------------------------------------------------
-- *******************************************************************************
-- * Copyright (c) 2019 Contributors to the Eclipse Foundation
-- *
-- * See the NOTICE file(s) distributed with this work for additional
-- * information regarding copyright ownership.
-- *
-- * This program and the accompanying materials are made available under the
-- * terms of the Eclipse Public License v. 2.0 which is available at
-- * http://www.eclipse.org/legal/epl-2.0.
-- *
-- * SPDX-License-Identifier: EPL-2.0
-- *******************************************************************************
-----------------------------------------------------------------------------------

-- CREATE ROLE CBD_SERVICE LOGIN
-- NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
-- ALTER ROLE CBD_SERVICE with password 'cbd_service';
-- Insert new Columns into table REF_COMMUNICATION_TYPE ('EDITABLE, 'MAPPING_LDAP')

-- ---------------------------------------------
-- DROPS
-- ---------------------------------------------
DROP TABLE IF EXISTS public.VERSION CASCADE;

DROP TABLE IF EXISTS public.TBL_ADDRESS CASCADE;
DROP SEQUENCE IF EXISTS public.TBL_ADDRESS_ID_SEQ;

DROP TABLE IF EXISTS public.TBL_COMMUNICATION CASCADE;
DROP SEQUENCE IF EXISTS public.TBL_COMMUNICATION_ID_SEQ;

DROP TABLE IF EXISTS public.TBL_CONTACT_PERSON CASCADE;
DROP SEQUENCE IF EXISTS public.TBL_CONTACT_PERSON_ID_SEQ;

DROP TABLE IF EXISTS public.TBL_COMPANY CASCADE;
DROP SEQUENCE IF EXISTS public.TBL_COMPANY_ID_SEQ;

DROP TABLE IF EXISTS public.TBL_EXTERNAL_PERSON CASCADE;
DROP SEQUENCE IF EXISTS public.TBL_EXTERNAL_PERSON_ID_SEQ;

DROP TABLE IF EXISTS public.TBL_INTERNAL_PERSON CASCADE;
DROP SEQUENCE IF EXISTS public.TBL_INTERNAL_PERSON_ID_SEQ;

DROP TABLE IF EXISTS public.TBL_CONTACT CASCADE;
DROP SEQUENCE IF EXISTS public.TBL_CONTACT_ID_SEQ;

DROP TABLE IF EXISTS public.REF_ADDRESS_TYPE CASCADE;
DROP SEQUENCE IF EXISTS public.REF_ADDRESS_TYPE_ID_SEQ;

DROP TABLE IF EXISTS public.REF_PERSON_TYPE CASCADE;
DROP SEQUENCE IF EXISTS public.REF_PERSON_TYPE_ID_SEQ;

DROP TABLE IF EXISTS public.REF_COMMUNICATION_TYPE CASCADE;
DROP SEQUENCE IF EXISTS public.REF_COMMUNICATION_TYPE_ID_SEQ;

DROP TABLE IF EXISTS public.REF_SALUTATION CASCADE;
DROP SEQUENCE IF EXISTS public.REF_SALUTATION_ID_SEQ;

DROP TABLE IF EXISTS public.TBL_ASSIGNMENT_MODUL_CONTACT CASCADE;
DROP SEQUENCE IF EXISTS public.TBL_ASSIGNMENT_MODUL_CONTACT_ID_SEQ;

-- ---------------------------------------------
-- TABLE VERSION
-- ---------------------------------------------
CREATE TABLE public.VERSION
(
  ID integer NOT NULL,
  VERSION character varying(50) NOT NULL,
  CONSTRAINT REF_VERSION_PKEY PRIMARY KEY (id)
);

ALTER TABLE public.VERSION
  OWNER TO CBD_SERVICE;
GRANT ALL ON TABLE public.VERSION TO CBD_SERVICE;

INSERT INTO public.VERSION (ID, VERSION) VALUES ( 1, '00-DEV' );


-- ---------------------------------------------
-- TABLE TBL_CONTACT
-- ---------------------------------------------
CREATE SEQUENCE public.tbl_contact_id_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
ALTER TABLE public.tbl_contact_id_seq
  OWNER TO CBD_SERVICE;

CREATE TABLE public.TBL_CONTACT
(
  ID bigint NOT NULL DEFAULT nextval('tbl_contact_id_seq'::regclass),
  UUID uuid NOT NULL,
  CONTACT_TYPE character varying(3),
  NOTE character varying(255),
  CONSTRAINT TBL_CONTACT_PKEY PRIMARY KEY (ID)
);



ALTER TABLE public.TBL_CONTACT
  OWNER TO CBD_SERVICE;
GRANT ALL ON TABLE public.TBL_CONTACT TO CBD_SERVICE;

INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE) VALUES ( 'ae3f2ec1-ccc5-4269-a48f-dd40e37fa14e', 'COM', 'company 1' );
INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE) VALUES ( 'fc7f598b-0d51-46bb-9563-99851fe6a3ad', 'COM', 'company 2 ' );
INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE) VALUES ( '556b91be-6d57-432f-93ed-65604dd6e5cd', 'C_P', 'contact person 1' );
INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE) VALUES ( '116380e3-25c5-4179-b40a-8abebe10fe07', 'C_P', 'contact person 2' );
INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE) VALUES ( '7782179b-fb79-4370-8f71-f4c71470d006', 'I_P', 'internal person 1' );
INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE) VALUES ( '8963aa38-d021-4dc9-bd70-d3734ccd20c4', 'I_P', 'internal person 2' );
INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE) VALUES ( 'c862d604-5766-43d6-a7e8-a4bac2bd01e1', 'E_P', 'external person 1' );
INSERT INTO public.TBL_CONTACT (UUID, CONTACT_TYPE, NOTE) VALUES ( 'fa3d981b-a7d6-4965-a623-cdbc69404153', 'E_P', 'exernal person 2' );

CREATE UNIQUE INDEX idx_tbl_contact_contact_type ON public.TBL_CONTACT  ( ID ASC );
CREATE UNIQUE INDEX idx_cntct_uuid ON public.TBL_CONTACT (UUID);


-- ---------------------------------------------
-- TABLE REF_ADDRESS_TYPE
-- ---------------------------------------------
CREATE SEQUENCE public.ref_address_type_id_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
ALTER TABLE public.ref_address_type_id_seq
  OWNER TO CBD_SERVICE;

CREATE TABLE public.REF_ADDRESS_TYPE
(
  ID bigint NOT NULL DEFAULT nextval('ref_address_type_id_seq'::regclass),
  UUID uuid NOT NULL,
  TYPE character varying(30),
  DESCRIPTION character varying(255),
  CONSTRAINT REF_ADDRESS_TYPE_PKEY PRIMARY KEY (ID)
);

ALTER TABLE public.REF_ADDRESS_TYPE
  OWNER TO CBD_SERVICE;
GRANT ALL ON TABLE public.REF_ADDRESS_TYPE TO CBD_SERVICE;

CREATE UNIQUE INDEX idx_ref_address_type_uuid ON public.REF_ADDRESS_TYPE ( UUID ASC );

INSERT INTO public.REF_ADDRESS_TYPE (UUID, TYPE, DESCRIPTION) VALUES ( '3802e681-9396-434e-b19c-5fedcec40ba7', 'Geschäftsadresse', 'Adresse des Hauptfirmensitzes' );
INSERT INTO public.REF_ADDRESS_TYPE (UUID, TYPE, DESCRIPTION) VALUES ( 'f43ed6ac-9e7a-40f6-acc9-ec6b73eebf79', 'Privatadresse', 'private Anschrift' );
INSERT INTO public.REF_ADDRESS_TYPE (UUID, TYPE, DESCRIPTION) VALUES ( '70fd0811-f674-4f3a-96a7-7ae29fc95188', 'Lieferadresse', 'Adresse für Lieferungen' );


-- ---------------------------------------------
-- TABLE REF_PERSON_TYPE
-- ---------------------------------------------
CREATE SEQUENCE public.ref_person_type_id_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
ALTER TABLE public.ref_person_type_id_seq
  OWNER TO CBD_SERVICE;

CREATE TABLE public.REF_PERSON_TYPE
(
  ID bigint NOT NULL DEFAULT nextval('ref_person_type_id_seq'::regclass),
  UUID uuid NOT NULL,
  TYPE character varying(30),
  DESCRIPTION character varying(255),
  CONSTRAINT REF_PERSON_TYPE_PKEY PRIMARY KEY (ID)
);
ALTER TABLE public.REF_PERSON_TYPE
  OWNER TO CBD_SERVICE;
GRANT ALL ON TABLE public.REF_PERSON_TYPE TO CBD_SERVICE;

CREATE UNIQUE INDEX idx_ref_person_type_uuid ON public.REF_PERSON_TYPE ( UUID ASC );

INSERT INTO public.REF_PERSON_TYPE (UUID, TYPE, DESCRIPTION) VALUES ( '47ce68b7-6d44-453e-b421-19020fd791b5', 'Rechtsanwalt', '' );
INSERT INTO public.REF_PERSON_TYPE (UUID, TYPE, DESCRIPTION) VALUES ( 'a7522c72-14d0-4e9d-afe3-bfcb3ffbec10', 'Geschäftsführer', '' );
INSERT INTO public.REF_PERSON_TYPE (UUID, TYPE, DESCRIPTION) VALUES ( '2eb4885e-7363-4918-90ed-b7d5d84cfd3f', 'Rechnungsempfänger', 'Person, der Rechnungen zukommen' );


-- ---------------------------------------------
-- TABLE REF_COMMUNICATION_TYPE
-- ---------------------------------------------
CREATE SEQUENCE public.ref_communication_type_id_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
ALTER TABLE public.ref_communication_type_id_seq
  OWNER TO CBD_SERVICE;

CREATE TABLE public.REF_COMMUNICATION_TYPE
(
  ID bigint NOT NULL DEFAULT nextval('ref_communication_type_id_seq'::regclass),
  UUID uuid NOT NULL,
  TYPE character varying(30),
  DESCRIPTION character varying(255),
  EDITABLE boolean,
  MAPPING_LDAP boolean,
  CONSTRAINT REF_COMMUNICATION_TYPE_PKEY PRIMARY KEY (ID)
);
ALTER TABLE public.REF_COMMUNICATION_TYPE
  OWNER TO CBD_SERVICE;
GRANT ALL ON TABLE public.REF_COMMUNICATION_TYPE TO CBD_SERVICE;

CREATE UNIQUE INDEX idx_ref_communication_type_uuid ON public.REF_COMMUNICATION_TYPE ( UUID ASC );

INSERT INTO public.REF_COMMUNICATION_TYPE (UUID, TYPE, DESCRIPTION, EDITABLE, MAPPING_LDAP) VALUES ( '4757ca3a-72c2-4f13-a2f6-ce092e3eadf4', 'Mail', 'Mailadresse', false, true );
INSERT INTO public.REF_COMMUNICATION_TYPE (UUID, TYPE, DESCRIPTION, EDITABLE, MAPPING_LDAP) VALUES ( '77028572-ff57-4c1d-999a-78fa3fcbc1cd', 'Mobil', '', false, true );
INSERT INTO public.REF_COMMUNICATION_TYPE (UUID, TYPE, DESCRIPTION, EDITABLE, MAPPING_LDAP) VALUES ( 'f7d5b343-00c2-4d7f-8e03-009aad3d90f7', 'Festnetz', '', true, false );
INSERT INTO public.REF_COMMUNICATION_TYPE (UUID, TYPE, DESCRIPTION, EDITABLE, MAPPING_LDAP) VALUES ( '2bfe40f9-c4eb-4d2e-855f-6b0883912846', 'Fax', '', true, false );
INSERT INTO public.REF_COMMUNICATION_TYPE (UUID, TYPE, DESCRIPTION, EDITABLE, MAPPING_LDAP) VALUES ( 'd00d1a61-c8e7-43b2-959f-66e986731441', 'WhatsApp', '', true, false );

-- ---------------------------------------------
-- TABLE REF_SALUTATION
-- ---------------------------------------------
CREATE SEQUENCE public.ref_salutation_id_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
ALTER TABLE public.ref_salutation_id_seq
  OWNER TO CBD_SERVICE;

CREATE TABLE public.REF_SALUTATION
(
  ID bigint NOT NULL DEFAULT nextval('ref_salutation_id_seq'::regclass),
  UUID uuid NOT NULL,
  TYPE character varying(30),
  DESCRIPTION character varying(255),
  CONSTRAINT REF_SALUTATION_PKEY PRIMARY KEY (ID)
);
ALTER TABLE public.REF_SALUTATION
  OWNER TO CBD_SERVICE;
GRANT ALL ON TABLE public.REF_SALUTATION TO CBD_SERVICE;

CREATE UNIQUE INDEX idx_ref_salutation_uuid ON public.REF_SALUTATION ( UUID ASC );

INSERT INTO public.REF_SALUTATION (UUID, TYPE, DESCRIPTION) VALUES ( '90119f18-5562-425d-9a36-3dd58ea125e5', 'Herr', 'Anrede männlich' );
INSERT INTO public.REF_SALUTATION (UUID, TYPE, DESCRIPTION) VALUES ( '4e873baa-e4f5-4585-8b16-2db8fac66538', 'Frau', 'Anrede weiblich' );


-- ---------------------------------------------
-- TABLE TBL_ADDRESS
-- ---------------------------------------------
CREATE SEQUENCE public.tbl_address_id_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
ALTER TABLE public.tbl_address_id_seq
  OWNER TO CBD_SERVICE;

CREATE TABLE public.TBL_ADDRESS
(
  ID bigint NOT NULL DEFAULT nextval('tbl_address_id_seq'::regclass),
  UUID uuid NOT NULL,
  FK_CONTACT_ID bigint NOT NULL,
  FK_ADDRESS_TYPE bigint,
  IS_MAIN_ADDRESS boolean,
  POSTCODE character varying(30),
  COMMUNITY character varying(255),
  COMMUNITY_SUFFIX character varying(255),
  STREET character varying(255),
  HOUSENUMBER character varying(30),
  WGS_84_ZONE character varying(255),
  LATITUDE character varying(255),
  LONGITUDE character varying(255),
  URL_MAP character varying(255),
  NOTE character varying(255),

  CONSTRAINT TBL_ADDRESS_PKEY PRIMARY KEY (ID),
  CONSTRAINT TBL_ADDRESS__CONTACT_ID_FKEY FOREIGN KEY (FK_CONTACT_ID)
      REFERENCES public.TBL_CONTACT(ID) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT TBL_ADDRESS__ADDRESS_TYPE_ID_FKEY FOREIGN KEY (FK_ADDRESS_TYPE)
       REFERENCES public.REF_ADDRESS_TYPE (ID) MATCH SIMPLE
       ON UPDATE NO ACTION ON DELETE NO ACTION
);
ALTER TABLE public.TBL_ADDRESS
  OWNER TO CBD_SERVICE;
GRANT ALL ON TABLE public.TBL_ADDRESS TO CBD_SERVICE;

CREATE UNIQUE INDEX idx_tbl_address_uuid ON public.TBL_ADDRESS ( UUID ASC );

INSERT INTO public.TBL_ADDRESS (UUID, FK_CONTACT_ID, FK_ADDRESS_TYPE, IS_MAIN_ADDRESS, POSTCODE, COMMUNITY, COMMUNITY_SUFFIX, STREET, HOUSENUMBER, WGS_84_ZONE, LATITUDE, LONGITUDE, URL_MAP, NOTE) VALUES ( '37e800fe-64f0-4834-8b83-8453cbb936a5', 2, 1, true, '12345', 'Heringsdorf','', 'Flunderweg', '5', '', '53 NL', '3 WB','www.xyz', 'nur über Seeweg erreichbar');
INSERT INTO public.TBL_ADDRESS (UUID, FK_CONTACT_ID, FK_ADDRESS_TYPE, IS_MAIN_ADDRESS, POSTCODE, COMMUNITY, COMMUNITY_SUFFIX, STREET, HOUSENUMBER, WGS_84_ZONE, LATITUDE, LONGITUDE, URL_MAP, NOTE) VALUES ( '8a1202ae-2532-474e-8367-a1f0e13e9fbd', 1, 2, false, '67890', 'Stralsund','', 'Schollendamm', '18', '', '53 N', '2 WB','www.xyz', 'Hochwassergefahr');


-- ---------------------------------------------
-- TABLE TBL_COMMUNICATION
-- ---------------------------------------------
CREATE SEQUENCE public.tbl_communication_id_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
ALTER TABLE public.tbl_communication_id_seq
  OWNER TO CBD_SERVICE;

CREATE TABLE public.TBL_COMMUNICATION
(
  ID bigint NOT NULL DEFAULT nextval('tbl_communication_id_seq'::regclass),
  UUID uuid NOT NULL,
  FK_CONTACT_ID bigint NOT NULL,
  FK_COMMUNICATION_TYPE bigint,
  COMMUNICATION_DATA character varying(1024),
  NOTE character varying(255),

  CONSTRAINT TBL_COMMUNICATION_PKEY PRIMARY KEY (ID),
  CONSTRAINT TBL_COMMUNICATION__CONTACT_ID_FKEY FOREIGN KEY (FK_CONTACT_ID)
      REFERENCES public.TBL_CONTACT(ID) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT TBL_COMMUNICATION__COMMUNICATION_TYPE_ID_FKEY FOREIGN KEY (FK_COMMUNICATION_TYPE)
       REFERENCES public.REF_COMMUNICATION_TYPE (ID) MATCH SIMPLE
       ON UPDATE NO ACTION ON DELETE NO ACTION
);
ALTER TABLE public.TBL_COMMUNICATION
  OWNER TO CBD_SERVICE;
GRANT ALL ON TABLE public.TBL_COMMUNICATION TO CBD_SERVICE;

CREATE UNIQUE INDEX idx_tbl_communication_uuid ON public.TBL_COMMUNICATION ( UUID ASC );

INSERT INTO public.TBL_COMMUNICATION (UUID, FK_CONTACT_ID, FK_COMMUNICATION_TYPE, COMMUNICATION_DATA, NOTE) VALUES ( '25f6d7cc-b168-4dd5-a36d-6f14b2f956e9', 2, 2, 'bitte melden Sie sich bei uns', 'Info...');
INSERT INTO public.TBL_COMMUNICATION (UUID, FK_CONTACT_ID, FK_COMMUNICATION_TYPE, COMMUNICATION_DATA, NOTE) VALUES ( 'a5fa380e-8f33-4ea7-9416-e03d11b91cae', 1, 3, 'bitte melden zwecks Terminabstimmung', 'Info...');
INSERT INTO public.TBL_COMMUNICATION (UUID, FK_CONTACT_ID, FK_COMMUNICATION_TYPE, COMMUNICATION_DATA, NOTE) VALUES ( 'c0dcef80-ca07-48b7-a3ed-2c99c4388928', 1, 1, 'info@bigbang.com', 'Info...');
INSERT INTO public.TBL_COMMUNICATION (UUID, FK_CONTACT_ID, FK_COMMUNICATION_TYPE, COMMUNICATION_DATA, NOTE) VALUES ( 'd19d9e10-d2dd-4383-84ec-2fe96421c0a3', 2, 1, 'info@pharmapeekltd.com', 'Info...');
INSERT INTO public.TBL_COMMUNICATION (UUID, FK_CONTACT_ID, FK_COMMUNICATION_TYPE, COMMUNICATION_DATA, NOTE) VALUES ( '234b63e4-d8db-48ab-899f-0320903c01af', 3, 1, 'reinbold.tab@pharmapeek.com', 'Info...');
INSERT INTO public.TBL_COMMUNICATION (UUID, FK_CONTACT_ID, FK_COMMUNICATION_TYPE, COMMUNICATION_DATA, NOTE) VALUES ( '11e25c02-de00-430d-b6cd-f02f7c60e026', 5, 1, 'PaulineF@gmx.net', 'Info...');
INSERT INTO public.TBL_COMMUNICATION (UUID, FK_CONTACT_ID, FK_COMMUNICATION_TYPE, COMMUNICATION_DATA, NOTE) VALUES ( '9ca29c3b-e189-4ce9-9401-15001c769627', 6, 1, 'mo@gmail.com', 'Info...');
INSERT INTO public.TBL_COMMUNICATION (UUID, FK_CONTACT_ID, FK_COMMUNICATION_TYPE, COMMUNICATION_DATA, NOTE) VALUES ( '05505b1a-61df-45c0-b006-64165cbadfa2', 7, 1, 'MGruebelSport@fogger.mil', 'Info...');
INSERT INTO public.TBL_COMMUNICATION (UUID, FK_CONTACT_ID, FK_COMMUNICATION_TYPE, COMMUNICATION_DATA, NOTE) VALUES ( 'b52dabaf-d156-4fd0-a07c-510673112a15', 8, 1, 'Mini.osterbrink@yahoo.ie', 'Info...');

-- ---------------------------------------------
-- TABLE TBL_COMPANY
-- ---------------------------------------------
CREATE SEQUENCE public.tbl_company_id_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
ALTER TABLE public.tbl_company_id_seq
  OWNER TO CBD_SERVICE;


CREATE TABLE public.TBL_COMPANY
(
  ID bigint NOT NULL DEFAULT nextval('tbl_company_id_seq'::regclass),
  COMPANY_NAME character varying(255),
  COMPANY_TYPE character varying(30),
  HR_NUMBER character varying(255),
  FK_CONTACT_ID bigint NOT NULL,
  CONSTRAINT TBL_COMPANY_PKEY PRIMARY KEY (id),
  CONSTRAINT TBL_COMPANY__CONTACT_ID_FKEY FOREIGN KEY (FK_CONTACT_ID)
      REFERENCES public.TBL_CONTACT(ID) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
);
ALTER TABLE public.TBL_COMPANY
  OWNER TO CBD_SERVICE;
GRANT ALL ON TABLE public.TBL_COMPANY TO CBD_SERVICE;

INSERT INTO public.TBL_COMPANY (COMPANY_NAME, COMPANY_TYPE, HR_NUMBER, FK_CONTACT_ID) VALUES ( 'BigBang Logistic', 'Logistik', '123', 1 );
INSERT INTO public.TBL_COMPANY (COMPANY_NAME, COMPANY_TYPE, HR_NUMBER, FK_CONTACT_ID) VALUES ( 'Pharma Peek', 'Pharma', '345', 2 );


-- ---------------------------------------------
-- TABLE TBL_CONTACT_PERSON
-- ---------------------------------------------
CREATE SEQUENCE public.tbl_contact_person_id_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
ALTER TABLE public.tbl_contact_person_id_seq
  OWNER TO CBD_SERVICE;

CREATE TABLE public.TBL_CONTACT_PERSON
(
  ID bigint NOT NULL DEFAULT nextval('tbl_contact_person_id_seq'::regclass),
  FIRST_NAME character varying(255),
  LAST_NAME character varying(255),
  TITLE character varying(255),
  FK_SALUTATION_ID bigint,
  FK_REF_PERSON_TYPE_ID bigint NOT NULL,
  FK_CONTACT_ID bigint NOT NULL,
  FK_COMPANY_ID bigint NOT NULL,
  CONSTRAINT TBL_CONTACT_PERSON_PKEY PRIMARY KEY (ID),
  CONSTRAINT TBL_CONTACT_PERSON__CONTACT_ID_FKEY FOREIGN KEY (FK_CONTACT_ID)
      REFERENCES public.TBL_CONTACT (ID) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT TBL_CONTACT_PERSON__PERSON_TYPE_ID_FKEY FOREIGN KEY (FK_REF_PERSON_TYPE_ID)
      REFERENCES public.REF_PERSON_TYPE (ID) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT TBL_CONTACT_PERSON__SALUTATION_ID_FKEY FOREIGN KEY (FK_SALUTATION_ID)
           REFERENCES public.REF_SALUTATION (ID) MATCH SIMPLE
           ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT TBL_CONTACT_PERSON__COMPANY_ID_FKEY FOREIGN KEY (FK_COMPANY_ID)
       REFERENCES public.TBL_COMPANY (ID) MATCH SIMPLE
       ON UPDATE NO ACTION ON DELETE NO ACTION
);
ALTER TABLE public.TBL_CONTACT_PERSON
  OWNER TO CBD_SERVICE;
GRANT ALL ON TABLE public.TBL_CONTACT_PERSON TO CBD_SERVICE;

INSERT INTO public.TBL_CONTACT_PERSON (FIRST_NAME, LAST_NAME, TITLE, FK_SALUTATION_ID, FK_REF_PERSON_TYPE_ID, FK_CONTACT_ID, FK_COMPANY_ID) VALUES ( 'Tabea', 'Reinebold', 'Dr.', 2, 1, 3, 2);
INSERT INTO public.TBL_CONTACT_PERSON (FIRST_NAME, LAST_NAME, TITLE, FK_SALUTATION_ID, FK_REF_PERSON_TYPE_ID, FK_CONTACT_ID, FK_COMPANY_ID) VALUES ( 'Jan', 'Wacker', '', 1, 1, 4, 2);


-- ---------------------------------------------
-- TABLE TBL_EXTERNAL_PERSON
-- ---------------------------------------------
CREATE SEQUENCE public.tbl_external_person_id_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
ALTER TABLE public.tbl_external_person_id_seq
  OWNER TO CBD_SERVICE;

CREATE TABLE public.TBL_EXTERNAL_PERSON
(
  ID bigint NOT NULL DEFAULT nextval('tbl_external_person_id_seq'::regclass),
  FIRST_NAME character varying(255),
  LAST_NAME character varying(255),
  TITLE character varying(255),
  FK_SALUTATION_ID bigint,
  FK_REF_PERSON_TYPE_ID bigint,
  FK_CONTACT_ID bigint NOT NULL,
  CONSTRAINT TBL_EXTERNAL_PERSON_PKEY PRIMARY KEY (id),
  CONSTRAINT TBL_EXTERNAL_PERSON__CONTACT_ID_FKEY FOREIGN KEY (FK_CONTACT_ID)
       REFERENCES public.TBL_CONTACT (ID) MATCH SIMPLE
       ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT TBL_EXTERNAL_PERSON__SALUTATION_ID_FKEY FOREIGN KEY (FK_SALUTATION_ID)
         REFERENCES public.REF_SALUTATION (ID) MATCH SIMPLE
         ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT TBL_EXTERNAL_PERSON__PERSON_TYPE_ID_FKEY FOREIGN KEY (FK_REF_PERSON_TYPE_ID)
           REFERENCES public.REF_PERSON_TYPE (ID) MATCH SIMPLE
           ON UPDATE NO ACTION ON DELETE NO ACTION
);
ALTER TABLE public.TBL_EXTERNAL_PERSON
  OWNER TO CBD_SERVICE;
GRANT ALL ON TABLE public.TBL_EXTERNAL_PERSON TO CBD_SERVICE;

INSERT INTO public.TBL_EXTERNAL_PERSON (FIRST_NAME, LAST_NAME, TITLE, FK_SALUTATION_ID, FK_REF_PERSON_TYPE_ID, FK_CONTACT_ID) VALUES ( 'Monica', 'Grübel', 'Dipl.-Sportlehrerin', 2, 1, 7);
INSERT INTO public.TBL_EXTERNAL_PERSON (FIRST_NAME, LAST_NAME, TITLE, FK_SALUTATION_ID, FK_REF_PERSON_TYPE_ID, FK_CONTACT_ID) VALUES ( 'Maurice', 'Fürstenberg', 'B.A.', 2, 2, 8);


-- ---------------------------------------------
-- TABLE TBL_INTERNAL_PERSON
-- ---------------------------------------------
CREATE SEQUENCE public.tbl_internal_person_id_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
ALTER TABLE public.tbl_internal_person_id_seq
  OWNER TO CBD_SERVICE;
CREATE TABLE public.TBL_INTERNAL_PERSON
(
   ID bigint NOT NULL DEFAULT nextval('tbl_internal_person_id_seq'::regclass),
   FIRST_NAME character varying(255),
   LAST_NAME character varying(255),
   TITLE character varying(255),
   FK_SALUTATION_ID bigint,
   FK_REF_PERSON_TYPE_ID bigint,
   DEPARTMENT character varying(255),
   UID character varying(255),
   USER_REF character varying(255),
   FK_CONTACT_ID bigint NOT NULL,
   CONSTRAINT TBL_INTERNAL_PERSON_PKEY PRIMARY KEY (ID),
   CONSTRAINT TBL_INTERNAL_PERSON__CONTACT_ID_FKEY FOREIGN KEY (FK_CONTACT_ID)
      REFERENCES public.TBL_CONTACT (ID) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
   CONSTRAINT TBL_INTERNAL_PERSON__SALUTATION_ID_FKEY FOREIGN KEY (FK_SALUTATION_ID)
         REFERENCES public.REF_SALUTATION (ID) MATCH SIMPLE
         ON UPDATE NO ACTION ON DELETE NO ACTION,
   CONSTRAINT TBL_INTERNAL_PERSON__PERSON_TYPE_ID_FKEY FOREIGN KEY (FK_REF_PERSON_TYPE_ID)
         REFERENCES public.REF_PERSON_TYPE (ID) MATCH SIMPLE
         ON UPDATE NO ACTION ON DELETE NO ACTION
);
ALTER TABLE public.TBL_INTERNAL_PERSON
  OWNER TO CBD_SERVICE;
GRANT ALL ON TABLE public.TBL_INTERNAL_PERSON TO CBD_SERVICE;

CREATE UNIQUE INDEX idx_tbl_internal_person_uid ON public.TBL_INTERNAL_PERSON ( UID ASC );
CREATE UNIQUE INDEX idx_tbl_internal_person_user_ref ON public.TBL_INTERNAL_PERSON ( USER_REF ASC );

INSERT INTO public.TBL_INTERNAL_PERSON (FIRST_NAME, LAST_NAME, TITLE, FK_SALUTATION_ID, FK_REF_PERSON_TYPE_ID, DEPARTMENT, UID, USER_REF, FK_CONTACT_ID) VALUES ( 'Pauline', 'Freudenberg', 'B.Sc.', 1, 1,'Abteilung Rechnungsstellung', '66cd78c3-6716-4ab3-b834-a199fc796b88', 'PFREUD',  5);
INSERT INTO public.TBL_INTERNAL_PERSON (FIRST_NAME, LAST_NAME, TITLE, FK_SALUTATION_ID, FK_REF_PERSON_TYPE_ID, DEPARTMENT, UID, USER_REF, FK_CONTACT_ID) VALUES ( 'Bernhardt', 'Iffland', '', 2, 2,'Kreativ', '4124e4e7-3488-4492-bf39-75e6a23a1c1a', 'BIFFL', 6);

-- ---------------------------------------------
-- TABLE TBL_ASSIGNMENT_MODUL_CONTACT
-- ---------------------------------------------
CREATE SEQUENCE public.tbl_assignment_modul_contact_id_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
ALTER TABLE public.tbl_assignment_modul_contact_id_seq
  OWNER TO CBD_SERVICE;

CREATE TABLE public.TBL_ASSIGNMENT_MODUL_CONTACT
(
  id bigint NOT NULL DEFAULT nextval('tbl_assignment_modul_contact_id_seq'::regclass),
  uuid uuid NOT NULL,
  fk_contact_id bigint NOT NULL,
  modul_name character varying(255),
  assignment_date timestamp,
  expiring_date timestamp,
  deletion_lock_until timestamp,
  assignment_note character varying(2048),
  CONSTRAINT tbl_assignment_modul_contact_pkey PRIMARY KEY (id),
  CONSTRAINT tbl_assignment_modul_contact_id_fkey FOREIGN KEY (fk_contact_id)
      REFERENCES public.tbl_contact (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public.tbl_assignment_modul_contact
  OWNER TO cbd_service;
GRANT ALL ON TABLE public.tbl_assignment_modul_contact TO cbd_service;

INSERT INTO public.tbl_assignment_modul_contact(uuid, fk_contact_id, modul_name, assignment_date, expiring_date, deletion_lock_until, assignment_note) VALUES ( 'dfc2979c-40e3-11ea-b77f-2e728ce88125', 1, 'Betriebstagebuch', '2020-01-19 10:23:54', '2021-01-19 00:00:00', '2021-01-19 00:00:00', 'seit Januar zugeordnet');
INSERT INTO public.tbl_assignment_modul_contact(uuid, fk_contact_id, modul_name, assignment_date, expiring_date, deletion_lock_until, assignment_note) VALUES ( '4009bce2-40e5-11ea-b77f-2e728ce88125', 1, 'Störinfos', '2020-02-27 10:23:54', '2021-02-27 00:00:00', '2021-02-27 00:00:00', 'seit Februar zugeordnet');

-- -------------------------------------
-- VIEWS -------------------------------
-- -------------------------------------
DROP VIEW IF EXISTS VW_GENERAL_CONTACT CASCADE;

CREATE VIEW VW_GENERAL_CONTACT
AS
SELECT g.id,
	c.uuid,
	g.name,
	c.contact_type,
	g.fk_contact_id,
	g.company_name,
	g.company_type,
	g.fk_salutation_id,
	g.fk_ref_person_type_id,
	g.title,
	g.first_name,
	g.last_name,
	g.department,
	c.note
FROM tbl_contact c
INNER JOIN (

SELECT id,
	company_name as name,
	fk_contact_id,
	company_name,
	company_type,
	null as fk_salutation_id,
	null as fk_ref_person_type_id,
	null as title,
	null as first_name,
	null as last_name,
	null as department
FROM tbl_company company

UNION

SELECT p.id,
	COALESCE(p.last_name, '') || ' ' || COALESCE(p.first_name,'') || ' [' || COALESCE(c.company_name, '') || ']' as name,
	p.fk_contact_id,
	c.company_name,
	c.company_type,
	p.fk_salutation_id,
	p.fk_ref_person_type_id,
	p.title,
	p.first_name,
	p.last_name,
	null as department
FROM tbl_contact_person p
INNER JOIN tbl_company c ON c.id = p.fk_company_id

UNION

SELECT id,
	COALESCE(last_name, '') || ' ' || COALESCE(first_name, '') as name,
	fk_contact_id,
	null as company_name,
	null as company_type,
	fk_salutation_id,
	fk_ref_person_type_id,
	title,
	first_name,
	last_name,
	department
FROM tbl_internal_person

UNION

SELECT id,
	COALESCE(last_name, '') || ' ' || COALESCE(first_name, '') as name,
	fk_contact_id,
	null as company_name,
	null as company_type,
	fk_salutation_id,
	fk_ref_person_type_id,
	title,
	first_name,
	last_name,
	null as department
FROM tbl_external_person
	) g
ON g.fk_contact_id = c.ID;

ALTER VIEW public.VW_GENERAL_CONTACT
  OWNER TO CBD_SERVICE;
GRANT ALL ON TABLE public.VW_GENERAL_CONTACT TO CBD_SERVICE;


DROP VIEW IF EXISTS VW_DETAILED_CONTACT;

CREATE VIEW VW_DETAILED_CONTACT
AS
SELECT c.id,
    c.uuid,
	c.name,
	c.contact_type,
	c.fk_contact_id,
	c.company_name,
	c.company_type,
	s.uuid as salutation_uuid,
	t.uuid as person_type_uuid,
	c.title,
	c.first_name,
	c.last_name,
	c.department,
	c.note,
	s.type as salutation_type,
	t.type as person_type,
	a.street,
	a.housenumber,
	a.community,
	com.communication_data as email,

	UPPER(
        COALESCE(c.name, '') || '|@|'
        || COALESCE(company_name, '') || '|@|'
        || COALESCE(c.company_type, '') || '|@|'
        || COALESCE(c.title, '') || '|@|'
        || COALESCE(c.first_name, '') || '|@|'
        || COALESCE(c.last_name, '') || '|@|'
        || COALESCE(c.department, '') || '|@|'
        || COALESCE(c.note, '') || '|@|'
        || COALESCE(s.type, '') || '|@|'
        || COALESCE(t.type, '') || '|@|'
        || COALESCE(a.street, '') || '|@|'
        || COALESCE(a.housenumber, '') || '|@|'
        || COALESCE(a.community, '') || '|@|'
        || COALESCE(com.communication_data, '')
    )as searchfield
FROM VW_GENERAL_CONTACT c
LEFT OUTER JOIN ref_salutation s ON c.fk_salutation_id = s.id
LEFT OUTER JOIN tbl_address a ON a.fk_contact_id = c.fk_contact_id and is_main_address = true
LEFT OUTER JOIN ref_person_type t ON c.fk_ref_person_type_id = t.id
LEFT OUTER JOIN tbl_communication com ON (com.fk_contact_id = c.id
	AND com.fk_communication_type=(
		SELECT ct.id FROM ref_communication_type ct WHERE UPPER(ct.type) LIKE 'MAIL' LIMIT 1 ) ) ;




