DROP TABLE tip_komitenta;
DROP SEQUENCE tip_komitenta_sifra;
DROP TABLE operateri;
DROP SEQUENCE operateri_sifra;
DROP TABLE sifre_komitenata;
DROP SEQUENCE sifre_komitenata_sifra;
DROP TABLE komitent_napomena;
DROP TABLE cenovnik_grupe;
DROP TABLE cenovnik_podgrupe;
DROP SEQUENCE cenovnik_grupe_sifra;
DROP SEQUENCE cenovnik_podgrupe_sifra;
DROP TABLE magacin;
DROP SEQUENCE magacin_sifra;
DROP TABLE poreske_grupe;
DROP SEQUENCE poreske_grupe_sifra;
DROP TABLE porezi;
DROP SEQUENCE porezi_sifra;
DROP TABLE tip_izjave;
DROP SEQUENCE izjave_sifra;
DROP TABLE sifre_artikala;
DROP SEQUENCE sifre_artikala_sifra;
DROP TABLE opstine;
DROP SEQUENCE opstine_sifra;
DROP TABLE sifre_magacina;
DROP SEQUENCE sifre_magacina_sifra;
DROP TABLE sifre_dokumenata;
DROP SEQUENCE sifre_dokumenata_sifra;
DROP TABLE tip_magacina;
DROP TABLE dokumenti;
DROP SEQUENCE dokumenti_sifra;
DROP TABLE dokument_32;
DROP SEQUENCE dokument32_sifra;
DROP TABLE nivo_privilegija;
DROP SEQUENCE nivo_privilegija_sifra;
DROP TABLE porezi_za_poreske_grupe;
DROP TABLE sifre_delatnosti;
DROP SEQUENCE sifre_delatnosti_sifra;

CREATE SEQUENCE tip_komitenta_sifra START 4;
CREATE SEQUENCE operateri_sifra START 6;
CREATE SEQUENCE sifre_komitenata_sifra;
CREATE SEQUENCE cenovnik_grupe_sifra;
CREATE SEQUENCE cenovnik_podgrupe_sifra;
CREATE SEQUENCE magacin_sifra;
CREATE SEQUENCE poreske_grupe_sifra;
CREATE SEQUENCE porezi_sifra;
CREATE SEQUENCE izjave_sifra;
CREATE SEQUENCE sifre_artikala_sifra;
CREATE SEQUENCE opstine_sifra START 6; 
CREATE SEQUENCE sifre_magacina_sifra START 10;
CREATE SEQUENCE sifre_dokumenata_sifra;
CREATE SEQUENCE dokumenti_sifra;
CREATE SEQUENCE dokument32_sifra;
CREATE SEQUENCE sifre_delatnosti_sifra;

CREATE TABLE nivo_privilegija (
nivo			integer NOT NULL,
naziv			char(10),
opis			char(60),
operater		integer,
datum			timestamp DEFAULT NOW(),
KONFIGURACIJA	boolean DEFAULT FALSE,
CENOVNIK		boolean DEFAULT FALSE,
MAGACIN		boolean DEFAULT FALSE,
DOKUMENTI		boolean DEFAULT FALSE,
KNJIZENJE		boolean DEFAULT FALSE,
PRIMARY KEY (nivo)
);
CREATE SEQUENCE nivo_privilegija_sifra START 10;
INSERT INTO nivo_privilegija VALUES(1, 'KONFIGURACIJA',	'Konfiguracija korisnicke aplikacije', 1, NOW(), TRUE, FALSE, FALSE, FALSE, FALSE);
INSERT INTO nivo_privilegija VALUES(2, 'CENOVNIK', 		'Rad sa cenovnikom', 1, NOW(), FALSE, TRUE, FALSE, FALSE, FALSE);
INSERT INTO nivo_privilegija VALUES(3, 'MAGACIN', 		'Rad sa magacinom robe', 1, NOW(), FALSE, FALSE, TRUE, FALSE, FALSE);
INSERT INTO nivo_privilegija VALUES(4, 'DOKUMENTI', 		'Rad sa dokumentima', 1, NOW(), FALSE, FALSE, FALSE, TRUE, FALSE);
INSERT INTO nivo_privilegija VALUES(5, 'KNJIZENJE', 		'Knjizenje i zavrsni racun', 1, NOW(), FALSE, FALSE, FALSE, FALSE, TRUE);
INSERT INTO nivo_privilegija VALUES(9, 'ADMIN', 		'Maksimalni nivo privilegija', 1, NOW(), TRUE, TRUE, TRUE, TRUE, TRUE);

CREATE TABLE operateri (
sifra			integer NOT NULL,
username		char(20) NOT NULL,
password		char(20) NOT NULL,
ime			char(32) NOT NULL,
prezime		char(32) NOT NULL,
privilegije		integer NOT NULL REFERENCES nivo_privilegija (nivo),
obrisan		boolean DEFAULT FALSE,
operater		integer NOT NULL,
datum			timestamp DEFAULT NOW(),
UNIQUE (sifra, datum),
PRIMARY KEY (sifra, datum)
);
INSERT INTO operateri VALUES (1, 'tony',   'warlock', 'Antonio', 'Novakovic', 9, FALSE, 1, NOW());
INSERT INTO operateri VALUES (2, 'marko',  'marsek',  'Marko',   'Crvenica',  1, FALSE, 1, NOW());
INSERT INTO operateri VALUES (3, 'brana',  'mi8auv',  'Brana',   'Crvenica',  2, FALSE, 1, NOW());
INSERT INTO operateri VALUES (4, 'martin', 'mi8auv',  'Martin',  'Crvenica',  3, FALSE, 1, NOW());
INSERT INTO operateri VALUES (5, 'bole',   'promme',  'Bosko',   'Crvenica',  4, FALSE, 1, NOW());

CREATE TABLE tip_komitenta (
sifra			integer NOT NULL UNIQUE,
tip			char(20) NOT NULL UNIQUE,
obrisan		boolean DEFAULT FALSE,
operater		integer NOT NULL REFERENCES operateri (sifra),
datum			timestamp DEFAULT NOW(),
PRIMARY KEY (sifra)
);
INSERT INTO tip_komitenta VALUES (1, 'Kupac', FALSE, 1, NOW());
INSERT INTO tip_komitenta VALUES (2, 'Dobavljac', FALSE, 1, NOW());
INSERT INTO tip_komitenta VALUES (3, 'Kupac/Dobavljac', FALSE, 1, NOW());

CREATE TABLE komitent_napomena (
sifra			integer NOT NULL,
napomena		varchar(300),
obrisan		boolean DEFAULT FALSE,
operater		integer REFERENCES operateri (sifra),
datum			timestamp DEFAULT NOW(),
PRIMARY KEY (sifra)
);

CREATE TABLE sifre_delatnosti (
sifra			integer NOT NULL UNIQUE,
delatnost		varchar(50) NOT NULL,
napomena		varchar(200),
obrisan		boolean DEFAULT FALSE,
operater		integer REFERENCES operateri (sifra),
datum			timestamp DEFAULT NOW(),
PRIMARY KEY (sifra)
);

CREATE TABLE sifre_komitenata (
sifra			integer NOT NULL UNIQUE,
naziv			varchar(100) NOT NULL UNIQUE,
vlasnik		char(32),
maticni_broj	char(30),
reg_broj		char(30),
sifra_del		integer REFERENCES sifre_delatnosti (sifra),
ulica			varchar(40),
mesto			varchar(20),
pbroj			char(7),
telefon_1		varchar(20),
telefon_2		varchar(20),
mobilni		varchar(20),
fax			varchar(20),
drzava		varchar(20),
ziro_racun_1	varchar(20),
ziro_racun_2	varchar(20),
ziro_racun_3	varchar(20),
rabat			decimal(2),
tip			integer REFERENCES tip_komitenta (sifra),
napomena		integer REFERENCES komitent_napomena (sifra),
obrisan		boolean DEFAULT FALSE,
operater		integer REFERENCES operateri (sifra),
datum			timestamp DEFAULT NOW(),
PRIMARY KEY (sifra)
);

CREATE TABLE cenovnik_grupe (
grupa			integer NOT NULL UNIQUE,
naziv			varchar(100),
vidljiva		integer,
napomena		varchar(100),
obrisan		boolean DEFAULT FALSE,
operater		integer REFERENCES operateri (sifra),
datum			timestamp DEFAULT NOW(),
PRIMARY KEY (grupa)
);

CREATE TABLE cenovnik_podgrupe (
grupa			integer NOT NULL REFERENCES cenovnik_grupe(grupa),
podgrupa		integer NOT NULL UNIQUE,
naziv			varchar(100),
vidljiva		integer,
napomena		varchar(100),
obrisan		boolean DEFAULT FALSE,
operater		integer REFERENCES operateri (sifra),
datum			timestamp DEFAULT NOW(),
PRIMARY KEY (podgrupa)
);

CREATE TABLE sifre_artikala (
sifra			char(11) NOT NULL UNIQUE,
grupa			integer REFERENCES cenovnik_grupe (grupa),
podgrupa		integer REFERENCES cenovnik_podgrupe (podgrupa),
naziv			char(60) NOT NULL UNIQUE,
jed_mere		varchar(10) NOT NULL DEFAULT 'kom.',
bar_kod		char(20),
dobavljac		integer REFERENCES sifre_komitenata (sifra),
proizvod		boolean DEFAULT FALSE,
obrisan		boolean DEFAULT FALSE,
operater		integer REFERENCES operateri (sifra),
datum			timestamp NOT NULL DEFAULT NOW(),
PRIMARY KEY 	(sifra)
);

CREATE TABLE porezi (
sifra			integer NOT NULL UNIQUE,
vazi_od 		timestamp DEFAULT NOW(),
vazi_do 		timestamp DEFAULT NULL,
kolona		varchar(20) NOT NULL,
naziv			varchar(50),
obrisan		boolean DEFAULT FALSE,
operater		integer REFERENCES operateri (sifra),
datum			timestamp DEFAULT NOW(),
PRIMARY KEY (sifra)
);

CREATE TABLE opstine (
sifra			integer NOT NULL UNIQUE,
opstina		varchar(30) UNIQUE,
adresa		varchar(30),
grad			varchar(30),
pbroj			varchar(7),
obrisan		boolean DEFAULT FALSE,
operater		integer REFERENCES operateri (sifra),
datum			timestamp DEFAULT NOW(),
PRIMARY KEY (sifra)
);
INSERT INTO opstine VALUES (1, 'Novi Beograd', '', 'Beograd', '11070', FALSE, 1, NOW());
INSERT INTO opstine VALUES (2, 'Stari grad',   '', 'Beograd', '11000', FALSE, 1, NOW());
INSERT INTO opstine VALUES (3, 'Savski venac', '', 'Beograd', '11000', FALSE, 1, NOW());
INSERT INTO opstine VALUES (4, 'Cukarica',     '', 'Beograd', '11000', FALSE, 1, NOW());
INSERT INTO opstine VALUES (5, 'Zemun',        '', 'Beograd', '11080', FALSE, 1, NOW());

CREATE TABLE poreske_grupe (
sifra 		integer NOT NULL UNIQUE,
porezi		integer REFERENCES porezi (sifra),
naziv 		varchar(50) NOT NULL UNIQUE,
vazi_od 		timestamp DEFAULT NOW(),
vazi_do 		timestamp DEFAULT NULL,
obrisan		boolean DEFAULT FALSE,
operater		integer REFERENCES operateri (sifra),
datum			timestamp DEFAULT NOW(),
PRIMARY KEY (sifra)
);

CREATE TABLE porezi_za_poreske_grupe (
sifra			integer REFERENCES poreske_grupe (sifra),
vazi_od 		timestamp DEFAULT NOW(),
vazi_do 		timestamp DEFAULT NULL,
ima_izjavu		boolean DEFAULT FALSE,
obrisan		boolean DEFAULT FALSE,
operater		integer REFERENCES operateri (sifra),
datum			timestamp DEFAULT NOW(),
p1			numeric(2,2),
p2			numeric(2,2),
p3			numeric(2,2),
p4			numeric(2,2),
PRIMARY KEY (sifra)
);

CREATE TABLE tip_magacina (
tip			char(2) NOT NULL UNIQUE,
obrisan		boolean DEFAULT FALSE,
operater		integer REFERENCES operateri (sifra),
datum			timestamp DEFAULT NOW(),
PRIMARY KEY (tip)
);
INSERT INTO tip_magacina VALUES ('MM', FALSE, 1, NOW());
INSERT INTO tip_magacina VALUES ('PP', FALSE, 1, NOW());
INSERT INTO tip_magacina VALUES ('MP', FALSE, 1, NOW());
INSERT INTO tip_magacina VALUES ('MR', FALSE, 1, NOW());

CREATE TABLE sifre_magacina (
sifra			integer NOT NULL UNIQUE,
naziv			varchar(50) NOT NULL UNIQUE,
tip_magacina	char(2) REFERENCES tip_magacina (tip),
lokacija		varchar(30),
opstina		integer REFERENCES opstine (sifra),
vlasnik		varchar(30),
telefon		varchar(20),
fax			varchar(20),
obrisan		boolean DEFAULT FALSE,
operater		integer REFERENCES operateri (sifra),
datum			timestamp DEFAULT NOW(),
PRIMARY KEY (sifra)
);
INSERT INTO sifre_magacina VALUES (1,'Magacin materijala',        'MM', 'firma', 2,'','','', FALSE, 1, NOW());
INSERT INTO sifre_magacina VALUES (2,'Proizvodnja',               'PP', 'firma', 2,'','','', FALSE, 1, NOW());
INSERT INTO sifre_magacina VALUES (3,'Magacin gotovih proizvoda', 'MP', 'firma', 2,'','','', FALSE, 1, NOW());
INSERT INTO sifre_magacina VALUES (4,'Magacin roba',              'MR', 'firma', 2,'','','', FALSE, 1, NOW());
INSERT INTO sifre_magacina VALUES (5,'Osnovna sredstva',          'MR', 'firma', 2,'','','', FALSE, 1, NOW());
INSERT INTO sifre_magacina VALUES (9,'Usluge',                    'MR', 'firma', 2,'','','', FALSE, 1, NOW());
INSERT INTO sifre_magacina VALUES (6,'Gradjevina',                'MM', 'Gradj. fakultet', 2,'','','', FALSE, 1, NOW());

CREATE TABLE magacin (
sifra_artikla	varchar(20) REFERENCES sifre_artikala (sifra),
sifra_magacina	integer REFERENCES sifre_magacina (sifra),
dobavljac		integer REFERENCES sifre_komitenata (sifra),
minimum_zaliha	numeric(16,2),
maximimum_zaliha 	numeric(16,2),
optimum_zaliha	numeric(16,2),
stanje		numeric(16,2),
mp_cena		numeric(16,2),
vp_cena		numeric(16,2),
minrabat		numeric(2,2),
defrabat		numeric(2,2),
maxrabat		numeric(2,2),
poreska_grupa	integer REFERENCES poreske_grupe (sifra),
obrisan		boolean DEFAULT FALSE,
operater		integer REFERENCES operateri (sifra),
datum			timestamp DEFAULT NOW(),
PRIMARY KEY (sifra_artikla)
);

CREATE TABLE tip_izjave (
sifra			integer NOT NULL UNIQUE,
naziv			varchar(50) UNIQUE,
pun_naziv		varchar(100),
obrisan		boolean DEFAULT FALSE,
operater		integer REFERENCES operateri (sifra),
datum			timestamp DEFAULT NOW(),
PRIMARY KEY (sifra)
);

CREATE TABLE sifre_dokumenata (
sifra 		integer NOT NULL UNIQUE,
naziv			varchar(50) DEFAULT '(nepoznat)' NOT NULL UNIQUE,
program		varchar(50),
window		varchar(50),
obrisan		boolean DEFAULT FALSE,
operater		integer REFERENCES operateri (sifra),
datum			timestamp DEFAULT NOW(),
PRIMARY KEY (sifra)
);

CREATE TABLE dokumenti (
broj_dokumenta	integer NOT NULL UNIQUE,
sifra_dokumenta	integer REFERENCES sifre_dokumenata (sifra),
sifra_komitenta	integer REFERENCES sifre_komitenata (sifra),
dokument_datum	timestamp NOT NULL DEFAULT NOW(),
valuta		timestamp,
spec_rabat		numeric (16,2) DEFAULT '0.0', 
povezivanje		boolean,
iznos			numeric(16,2) NOT NULL,
ukupno		numeric(16,2) NOT NULL,
svega			numeric(16,2) NOT NULL,
obrisan		boolean DEFAULT FALSE,
operater		integer REFERENCES operateri (sifra),
datum			timestamp DEFAULT NOW(),
PRIMARY KEY (sifra_dokumenta, broj_dokumenta)
);

CREATE TABLE dokument_32 (
broj_dokumenta	integer REFERENCES dokumenti (broj_dokumenta),
stavka		integer NOT NULL,
sifra_artikla	char(11) REFERENCES sifre_artikala (sifra),
sifra_magacina	integer REFERENCES sifre_magacina (sifra),
kolicina		numeric (10,2) NOT NULL,
jm			char(5) NOT NULL DEFAULT 'kom.',
cena_jm		numeric(16,2) NOT NULL,
rabat			numeric(2,2) DEFAULT '0.0',
neto_cena		numeric(16,2) NOT NULL,
izjava		integer REFERENCES tip_izjave (sifra),
obrisan		boolean DEFAULT FALSE,
operater		integer REFERENCES operateri (sifra),
datum			timestamp DEFAULT NOW(),
PRIMARY KEY (broj_dokumenta)
);

