import psycopg2.extras

_user = "postgres"
_password = "<PASSWORD>"
_con = psycopg2.connect(host="localhost", database="esami", user=_user, password=_password)
_con.set_session(autocommit=True)

def get_cursor():
    return _con.cursor(cursor_factory=psycopg2.extras.DictCursor)


def create_tables():
    with get_cursor() as cur:
        cur.execute("""
            drop domain if exists regioniItaliane;
            create domain regioniItaliane as varchar(21)
	            check(value in ('Trentino-Alto Adige', 'Veneto', 'Basilicata', 'Puglia', 'Molise', 'Marche' , 
	                            'Umbria', 'Emilia-Romagna', 'Friuli-<NAME>', 'Liguria', 'Lombardia', 
	                            'Lazio', 'Campania', 'Sicilia', 'Sardegna', 'Toscana', 'Piemonte', 'Valle d aosta', 
	                            'Abruzzo', 'Calabria'));

            drop table if exists ospedale;
            create table ospedale(
	            id integer primary key,
	            nome varchar not null default 'Azienda Ospedaliera integrata ULSS22 Legnago'
            );

            drop table if exists divisione;
            create table DIVISIONE(
	            id integer primary key, 
	            idOspedale integer not null references ospedale(id), 
	            nome varchar not null , 
	            numeroAddetti integer not null default 1 check(numeroAddetti>0)
	        );

            drop table if exists paziente;
            create table PAZIENTE(
	            codiceFiscale char(16) primary key check (codiceFiscale similar to '[a-zA-Z]{6}[0-9]{2}[a-zA-Z]{1}[0-9]{2}[a-zA-Z]{1}[0-9]{3}[a-zA-Z]{1}'), 
	            nome varchar not null default 'Mario', 
	            cognome varchar not null default 'Rossi', 
	            regione regioniItaliane not null default 'Veneto', 
	            nazione char(3) not null default 'ITA'
	        );

            drop table if exists RICOVERO;
            create table RICOVERO(
	            divisione integer references divisione(id), 
	            paziente char(16) references paziente(codiceFiscale), 
	            descrizione varchar not null, 
	            urgenza varchar(20) not null, 
	            dataAmmissione date not null, 
	            dataDimissione date not null,
		        PRIMARY KEY(divisione, paziente, dataAmmissione, dataDimissione)
	        ); 

            INSERT INTO OSPEDALE(id, nome)
	            VALUES (10, '<NAME>'), 
	            (11, '<NAME>'), 
	            (12, '<NAME>'), 
	            (13, '<NAME>'),
	            (14, '<NAME>'), 
	            (15, '<NAME>'), 
	            (16, '<NAME>');

            INSERT INTO DIVISIONE(id, idOspedale, nome, numeroAddetti)
	            VALUES (01, 10, 'Ginecologia', 17), (02, 10, 'Pneumologia', 15), 
		        (03, 16, 'Cardiochirurgia', 20), (04, 13, 'Podologia', 10),
		        (05, 14, 'Reumatologia', 17), (06, 15, 'Neurochirurgia', 14), 
		        (07, 14, 'Psichiatria', 18), (08, 12, 'Chirurgia Plastica', 10),
		        (09, 12, 'Ostetricia', 20), (10, 12, 'Malattie Infettive', 20), 
		        (11, 12, 'Ortopedia', 10), (12, 13, 'Pediatria', 19),
		        (13, 16, 'Pediatria', 25);

            INSERT INTO PAZIENTE (codiceFiscale, nome, cognome, regione, nazione)
	            VALUES ('asdfun55c15u120g', 'giovanni', 'galli', 'Lazio', 'ITA'),
		        ('aseoij34u12q101r', 'carlo', 'conti', 'Toscana', 'CHE'),
		        ('pokfgj76p18d405s', 'silvia', 'giacometti', 'Veneto', 'ITA'),
		        ('pokasd89e12t309n', 'luca', 'coglione', 'Toscana', 'ITA'),
		        ('qwerty00o10s406f', 'greta', 'figa', 'Piemonte' ,'CHE'),
		        ('mnbvcx99k30h500f', 'giulia', 'roberts', 'Toscana', 'USA');

            INSERT INTO RICOVERO(divisione, paziente, descrizione, urgenza, dataAmmissione, dataDimissione)
	            VALUES (03, 'asdfun55c15u120g', 'colpo al cuore', 'Urgente', '2017-08-06', '2017-05-05'),
	            (07, 'qwerty00o10s406f', 'impazzita', 'Non urgente', '2017-06-11', '2017-09-12'),
	            (08, 'mnbvcx99k30h500f', 'rifacimento del naso', 'Trascurabile', '2017-06-06', '2017-06-07'),
	            (02, 'aseoij34u12q101r', 'bronco polmonite', 'Urgente', '2017-06-06', '2017-07-07'),
	            (03, 'pokasd89e12t309n', 'cuore di pietra', 'codice bianco', '2017-06-19', '2017-09-09'),
	            (11, 'pokfgj76p18d405s', 'appendicite', 'Urgente', '2017-03-11', '2017-03-15'),
	            (03, 'qwerty00o10s406f', 'piede a banana', 'No problem', '2017-03-19', '2017-03-21');""")


if __name__ == "__main__":
    create_tables()

import psycopg2.extras

_user = "postgres"
_password = "<PASSWORD>"
_con = psycopg2.connect(host="localhost", database="esami", user=_user, password=_password)
_con.set_session(autocommit=True)

def get_cursor():
    return _con.cursor(cursor_factory=psycopg2.extras.DictCursor)


def create_tables():
    with get_cursor() as cur:
        cur.execute("""
            drop domain if exists regioniItaliane;
            create domain regioniItaliane as varchar(21)
	            check(value in ('Trentino-Alto Adige', 'Veneto', 'Basilicata', 'Puglia', 'Molise', 'Marche' , 
	                            'Umbria', 'Emilia-Romagna', 'Friuli-<NAME>', 'Liguria', 'Lombardia', 
	                            'Lazio', 'Campania', 'Sicilia', 'Sardegna', 'Toscana', 'Piemonte', 'Valle d aosta', 
	                            'Abruzzo', 'Calabria'));

            drop table if exists ospedale;
            create table ospedale(
	            id integer primary key,
	            nome varchar not null default 'Azienda Ospedaliera integrata ULSS22 Legnago'
            );

            drop table if exists divisione;
            create table DIVISIONE(
	            id integer primary key, 
	            idOspedale integer not null references ospedale(id), 
	            nome varchar not null , 
	            numeroAddetti integer not null default 1 check(numeroAddetti>0)
	        );

            drop table if exists paziente;
            create table PAZIENTE(
	            codiceFiscale char(16) primary key check (codiceFiscale similar to '[a-zA-Z]{6}[0-9]{2}[a-zA-Z]{1}[0-9]{2}[a-zA-Z]{1}[0-9]{3}[a-zA-Z]{1}'), 
	            nome varchar not null default 'Mario', 
	            cognome varchar not null default 'Rossi', 
	            regione regioniItaliane not null default 'Veneto', 
	            nazione char(3) not null default 'ITA'
	        );

            drop table if exists RICOVERO;
            create table RICOVERO(
	            divisione integer references divisione(id), 
	            paziente char(16) references paziente(codiceFiscale), 
	            descrizione varchar not null, 
	            urgenza varchar(20) not null, 
	            dataAmmissione date not null, 
	            dataDimissione date not null,
		        PRIMARY KEY(divisione, paziente, dataAmmissione, dataDimissione)
	        ); 

            INSERT INTO OSPEDALE(id, nome)
	            VALUES (10, '<NAME>'), 
	            (11, '<NAME>'), 
	            (12, '<NAME>'), 
	            (13, '<NAME>'),
	            (14, '<NAME>'), 
	            (15, '<NAME>'), 
	            (16, '<NAME>');

            INSERT INTO DIVISIONE(id, idOspedale, nome, numeroAddetti)
	            VALUES (01, 10, 'Ginecologia', 17), (02, 10, 'Pneumologia', 15), 
		        (03, 16, 'Cardiochirurgia', 20), (04, 13, 'Podologia', 10),
		        (05, 14, 'Reumatologia', 17), (06, 15, 'Neurochirurgia', 14), 
		        (07, 14, 'Psichiatria', 18), (08, 12, 'Chirurgia Plastica', 10),
		        (09, 12, 'Ostetricia', 20), (10, 12, 'Malattie Infettive', 20), 
		        (11, 12, 'Ortopedia', 10), (12, 13, 'Pediatria', 19),
		        (13, 16, 'Pediatria', 25);

            INSERT INTO PAZIENTE (codiceFiscale, nome, cognome, regione, nazione)
	            VALUES ('asdfun55c15u120g', 'giovanni', 'galli', 'Lazio', 'ITA'),
		        ('aseoij34u12q101r', 'carlo', 'conti', 'Toscana', 'CHE'),
		        ('pokfgj76p18d405s', 'silvia', 'giacometti', 'Veneto', 'ITA'),
		        ('pokasd89e12t309n', 'luca', 'coglione', 'Toscana', 'ITA'),
		        ('qwerty00o10s406f', 'greta', 'figa', 'Piemonte' ,'CHE'),
		        ('mnbvcx99k30h500f', 'giulia', 'roberts', 'Toscana', 'USA');

            INSERT INTO RICOVERO(divisione, paziente, descrizione, urgenza, dataAmmissione, dataDimissione)
	            VALUES (03, 'asdfun55c15u120g', 'colpo al cuore', 'Urgente', '2017-08-06', '2017-05-05'),
	            (07, 'qwerty00o10s406f', 'impazzita', 'Non urgente', '2017-06-11', '2017-09-12'),
	            (08, 'mnbvcx99k30h500f', 'rifacimento del naso', 'Trascurabile', '2017-06-06', '2017-06-07'),
	            (02, 'aseoij34u12q101r', 'bronco polmonite', 'Urgente', '2017-06-06', '2017-07-07'),
	            (03, 'pokasd89e12t309n', 'cuore di pietra', 'codice bianco', '2017-06-19', '2017-09-09'),
	            (11, 'pokfgj76p18d405s', 'appendicite', 'Urgente', '2017-03-11', '2017-03-15'),
	            (03, 'qwerty00o10s406f', 'piede a banana', 'No problem', '2017-03-19', '2017-03-21');""")


if __name__ == "__main__":
    create_tables()

drop domain if exists regioniItaliane;             create domain regioniItaliane as varchar(21) 	            check(value in ('Trentino-Alto Adige', 'Veneto', 'Basilicata', 'Puglia', 'Molise', 'Marche' ,  	                            'Umbria', 'Emilia-Romagna', 'Friuli-<NAME>', 'Liguria', 'Lombardia',  	                            'Lazio', 'Campania', 'Sicilia', 'Sardegna', 'Toscana', 'Piemonte', 'Valle d aosta',  	                            'Abruzzo', 'Calabria'));              drop table if exists ospedale;             create table ospedale( 	            id integer primary key, 	            nome varchar not null default 'Azienda Ospedaliera integrata ULSS22 Legnago'             );              drop table if exists divisione;             create table DIVISIONE( 	            id integer primary key,  	            idOspedale integer not null references ospedale(id),  	            nome varchar not null ,  	            numeroAddetti integer not null default 1 check(numeroAddetti>0) 	        );              drop table if exists paziente;             create table PAZIENTE( 	            codiceFiscale char(16) primary key check (codiceFiscale similar to '[a-zA-Z]{6}[0-9]{2}[a-zA-Z]{1}[0-9]{2}[a-zA-Z]{1}[0-9]{3}[a-zA-Z]{1}'),  	            nome varchar not null default 'Mario',  	            cognome varchar not null default 'Rossi',  	            regione regioniItaliane not null default 'Veneto',  	            nazione char(3) not null default 'ITA' 	        );              drop table if exists RICOVERO;             create table RICOVERO( 	            divisione integer references divisione(id),  	            paziente char(16) references paziente(codiceFiscale),  	            descrizione varchar not null,  	            urgenza varchar(20) not null,  	            dataAmmissione date not null,  	            dataDimissione date not null, 		        PRIMARY KEY(divisione, paziente, dataAmmissione, dataDimissione) 	        );               INSERT INTO OSPEDALE(id, nome) 	            VALUES (10, '<NAME>'),  	            (11, '<NAME>'),  	            (12, '<NAME>'),  	            (13, '<NAME>'), 	            (14, '<NAME>'),  	            (15, '<NAME>'),  	            (16, '<NAME>');              INSERT INTO DIVISIONE(id, idOspedale, nome, numeroAddetti) 	            VALUES (01, 10, 'Ginecologia', 17), (02, 10, 'Pneumologia', 15),  		        (03, 16, 'Cardiochirurgia', 20), (04, 13, 'Podologia', 10), 		        (05, 14, 'Reumatologia', 17), (06, 15, 'Neurochirurgia', 14),  		        (07, 14, 'Psichiatria', 18), (08, 12, 'Chirurgia Plastica', 10), 		        (09, 12, 'Ostetricia', 20), (10, 12, 'Malattie Infettive', 20),  		        (11, 12, 'Ortopedia', 10), (12, 13, 'Pediatria', 19), 		        (13, 16, 'Pediatria', 25);              INSERT INTO PAZIENTE (codiceFiscale, nome, cognome, regione, nazione) 	            VALUES ('asdfun55c15u120g', 'giovanni', 'galli', 'Lazio', 'ITA'), 		        ('aseoij34u12q101r', 'carlo', 'conti', 'Toscana', 'CHE'), 		        ('pokfgj76p18d405s', 'silvia', 'giacometti', 'Veneto', 'ITA'), 		        ('pokasd89e12t309n', 'luca', 'coglione', 'Toscana', 'ITA'), 		        ('qwerty00o10s406f', 'greta', 'figa', 'Piemonte' ,'CHE'), 		        ('mnbvcx99k30h500f', 'giulia', 'roberts', 'Toscana', 'USA');              INSERT INTO RICOVERO(divisione, paziente, descrizione, urgenza, dataAmmissione, dataDimissione) 	            VALUES (03, 'asdfun55c15u120g', 'colpo al cuore', 'Urgente', '2017-08-06', '2017-05-05'), 	            (07, 'qwerty00o10s406f', 'impazzita', 'Non urgente', '2017-06-11', '2017-09-12'), 	            (08, 'mnbvcx99k30h500f', 'rifacimento del naso', 'Trascurabile', '2017-06-06', '2017-06-07'), 	            (02, 'aseoij34u12q101r', 'bronco polmonite', 'Urgente', '2017-06-06', '2017-07-07'), 	            (03, 'pokasd89e12t309n', 'cuore di pietra', 'codice bianco', '2017-06-19', '2017-09-09'), 	            (11, 'pokfgj76p18d405s', 'appendicite', 'Urgente', '2017-03-11', '2017-03-15'), 	            (03, 'qwerty00o10s406f', 'piede a banana', 'No problem', '2017-03-19', '2017-03-21');