CREATE DOMAIN TIPO_ID AS INTEGER;
CREATE DOMAIN TIPO_PERFIL AS VARCHAR(15);
CREATE DOMAIN TIPO_USUARIO AS VARCHAR(20);
CREATE DOMAIN TIPO_PASSWORD AS VARCHAR(10);
CREATE DOMAIN TIPO_NOTAS AS BLOB SUB_TYPE TEXT;
CREATE DOMAIN TIPO_BINARIO AS BLOB SUB_TYPE 0 SEGMENT SIZE 80;
CREATE DOMAIN TIPO_IMPORTE AS NUMERIC(11, 2);
CREATE DOMAIN TIPO_PORCENTAJE AS FLOAT;
CREATE DOMAIN TIPO_CONCEPTO AS VARCHAR(2000);
CREATE DOMAIN TIPO_BOOLEANO AS SMALLINT;

CREATE TABLE CONFIGURACION (
    CODIGO  		VARCHAR(50) NOT NULL,
    VALOR   		VARCHAR(255) NOT NULL,
		ID_EMPRESA 	TIPO_ID
);

CREATE TABLE REFERENCIAS (
    CODIGO  VARCHAR(50) NOT NULL,
    VALOR   VARCHAR(255) NOT NULL,
		ID_EMPRESA 	TIPO_ID
);


CREATE TABLE EMPRESAS (
  ID                 TIPO_ID NOT NULL,
  NIF_CIF            VARCHAR(15),
  NOMBRE             VARCHAR(255),
  RAZON_SOCIAL       VARCHAR(255),
  CALLE              VARCHAR(255),
  POBLACION          VARCHAR(255),
  PROVINCIA          VARCHAR(255),
  CODIGO_POSTAL      VARCHAR(10),
  TELEFONO_1         VARCHAR(25),
  TELEFONO_2         VARCHAR(25),
  MOVIL_1            VARCHAR(25),
  MOVIL_2            VARCHAR(25),
  FAX                VARCHAR(25),
  EMAIL_1            VARCHAR(255),
  EMAIL_2            VARCHAR(255),
  PAGINA_WEB         VARCHAR(255),
  NOTAS              TIPO_NOTAS,
  FECHA_ALTA         TIMESTAMP,
  FECHA_MODIFICACION TIMESTAMP,
  USUARIO            TIPO_USUARIO,
  LOGOTIPO           TIPO_BINARIO,
  REGISTRO_MERCANTIL VARCHAR(255),
  IVA                TIPO_PORCENTAJE
);

ALTER TABLE EMPRESAS ADD CONSTRAINT
PK_EMPRESAS
PRIMARY KEY (ID);

CREATE GENERATOR GEN_EMPRESAS_ID;
SET GENERATOR GEN_EMPRESAS_ID TO 1;


CREATE TABLE PERFILES (
  ID TIPO_ID NOT NULL,
  PERFIL TIPO_PERFIL NOT NULL
);

ALTER TABLE PERFILES
ADD CONSTRAINT PK_PERFILES PRIMARY KEY (ID);

CREATE GENERATOR GEN_PERFILES_ID;
SET GENERATOR GEN_PERFILES_ID TO 1;


CREATE TABLE USUARIOS (
  ID TIPO_ID NOT NULL,
  USUARIO TIPO_USUARIO NOT NULL,
  PASS TIPO_PASSWORD,
  ACTIVO TIPO_BOOLEANO,
  LAST_LOGIN TIMESTAMP
);

ALTER TABLE USUARIOS
ADD CONSTRAINT PK_USUARIOS PRIMARY KEY (ID);

CREATE GENERATOR GEN_USUARIOS_ID;
SET GENERATOR GEN_USUARIOS_ID TO 1;


CREATE TABLE PERFILES_USUARIOS (
  ID_PERFIL  TIPO_ID NOT NULL,
  ID_USUARIO TIPO_ID NOT NULL
);

ALTER TABLE PERFILES_USUARIOS
ADD CONSTRAINT PK_PERFILES_USUARIOS PRIMARY KEY (ID_PERFIL, ID_USUARIO);


CREATE TABLE CATEGORIAS (
  ID TIPO_ID NOT NULL,
  CATEGORIA VARCHAR(255) NOT NULL
);

ALTER TABLE CATEGORIAS
ADD CONSTRAINT PK_CATEGORIAS PRIMARY KEY (ID);

CREATE GENERATOR GEN_CATEGORIAS_ID;
SET GENERATOR GEN_CATEGORIAS_ID TO 1;


CREATE TABLE CONTACTOS (
  ID TIPO_ID NOT NULL,
  NIF_CIF VARCHAR(15),
  NOMBRE VARCHAR(255) NOT NULL,
  CALLE VARCHAR(255),
  POBLACION VARCHAR(255),
  PROVINCIA VARCHAR(255),
  CODIGO_POSTAL VARCHAR(10),
  TELEFONO_1 VARCHAR(25),
  TELEFONO_2 VARCHAR(25),
  MOVIL_1 VARCHAR(25),
  MOVIL_2 VARCHAR(25),
  FAX VARCHAR(25),
  EMAIL_1 VARCHAR(255),
  EMAIL_2 VARCHAR(255),
  PAGINA_WEB VARCHAR(255),
  NOTAS TIPO_NOTAS,
  FECHA_ALTA TIMESTAMP,
  FECHA_MODIFICACION TIMESTAMP,
  USUARIO TIPO_USUARIO
);

ALTER TABLE CONTACTOS
ADD CONSTRAINT PK_CONTACTOS PRIMARY KEY (ID);

CREATE GENERATOR GEN_CONTACTOS_ID;
SET GENERATOR GEN_CONTACTOS_ID TO 1;

CREATE TRIGGER TRI_INSERT_CONTACTOS FOR CONTACTOS
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  NEW.FECHA_ALTA = current_timestamp;
  NEW.FECHA_MODIFICACION = Null;
end;

CREATE TRIGGER TRI_UPDATE_CONTACTOS FOR CONTACTOS
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  NEW.FECHA_MODIFICACION = current_timestamp;
end;

CREATE TABLE CONTACTOS_CATEGORIAS (
  ID_CONTACTO TIPO_ID NOT NULL,
  ID_CATEGORIA TIPO_ID NOT NULL
);

ALTER TABLE CONTACTOS_CATEGORIAS
ADD CONSTRAINT PK_CONTACTOS_CATEGORIAS PRIMARY KEY (ID_CONTACTO, ID_CATEGORIA);

CREATE TABLE CONTACTOS_DATOS_BANCO (
  ID TIPO_ID NOT NULL,
  ID_CONTACTO TIPO_ID NOT NULL,
  TITULAR VARCHAR(255),
  ENTIDAD VARCHAR(15),
  SUCURSAL VARCHAR(15),
  DC VARCHAR(15),
  CUENTA VARCHAR(15)
);

ALTER TABLE CONTACTOS_DATOS_BANCO
ADD CONSTRAINT PK_CONTACTOS_DATOS_BANCO PRIMARY KEY (ID);

CREATE INDEX IDX_CONTACTOS_DATOS_BANCO
ON CONTACTOS_DATOS_BANCO (ID_CONTACTO);

CREATE GENERATOR GEN_CONTACTOS_DATOS_BANCO_ID;
SET GENERATOR GEN_CONTACTOS_DATOS_BANCO_ID TO 1;


CREATE TABLE CONTACTOS_DIRECCIONES (
	ID TIPO_ID NOT NULL,
  ID_CONTACTO TIPO_ID NOT NULL,
  CALLE VARCHAR(255),
  POBLACION VARCHAR(255),
  PROVINCIA VARCHAR(255),
  CODIGO_POSTAL VARCHAR(10),
  PERSONA_CONTACTO VARCHAR(255)
);

ALTER TABLE CONTACTOS_DIRECCIONES
ADD CONSTRAINT PK_CONTACTOS_DIR PRIMARY KEY (ID);

CREATE GENERATOR GEN_CONTACTOS_DIR_ID;
SET GENERATOR GEN_CONTACTOS_DIR_ID TO 1;


CREATE TABLE CLIENTES_DATOS (
  ID_CLIENTE TIPO_ID NOT NULL,
  ID_AGENTE TIPO_ID,
  GRUPO_CLIENTE VARCHAR(255),
  PORTE TIPO_IMPORTE
);

ALTER TABLE CLIENTES_DATOS
ADD CONSTRAINT PK_CLIENTES_DATOS PRIMARY KEY (ID_CLIENTE);

CREATE TABLE CLIENTES_GRUPOS (
	DESCRIPCION VARCHAR(255)
);

CREATE TABLE PROVEEDORES_DATOS (
  ID_PROVEEDOR TIPO_ID NOT NULL,
  DESCUENTO TIPO_PORCENTAJE,
  REGIMEN_IVA TIPO_PORCENTAJE
);

ALTER TABLE PROVEEDORES_DATOS
ADD CONSTRAINT PK_PROVEEDORES_DATOS PRIMARY KEY (ID_PROVEEDOR);

CREATE TABLE EMPRESAS_CONTACTOS (
  ID_EMPRESA  TIPO_ID NOT NULL,
  ID_CONTACTO TIPO_ID NOT NULL
);

ALTER TABLE EMPRESAS_CONTACTOS ADD CONSTRAINT
PK_EMPRESAS_CONTACTOS
PRIMARY KEY (ID_EMPRESA, ID_CONTACTO);


CREATE TABLE EMPRESAS_USUARIOS (
  ID_EMPRESA  TIPO_ID NOT NULL,
  ID_USUARIO TIPO_ID NOT NULL
);

ALTER TABLE EMPRESAS_USUARIOS ADD CONSTRAINT
PK_EMPRESAS_USUARIOS
PRIMARY KEY (ID_EMPRESA, ID_USUARIO);





CREATE TABLE FACTURAS_CLIENTE (
    ID		      TIPO_ID NOT NULL,
    ID_EMPRESA        TIPO_ID,
    ID_CONTRATO       TIPO_ID,
    REFERENCIA        VARCHAR(255),
    FECHA_FACTURA     DATE,
    VENCIMIENTO       INTEGER,
    SITUACION         VARCHAR(255),
    FECHA_PAGADO			DATE,
    BASE_IMPONIBLE    TIPO_IMPORTE,
    DESCUENTO         TIPO_PORCENTAJE,
    IMPORTE_DESCUENTO TIPO_IMPORTE,
    IVA               TIPO_PORCENTAJE,
    IMPORTE_IVA       TIPO_IMPORTE,
    IMPORTE_TOTAL     TIPO_IMPORTE,
    OBSERVACIONES     TIPO_NOTAS,
    FORMA_PAGO        TIPO_NOTAS,
    ID_CLIENTE        TIPO_ID,
    NIF_CIF           VARCHAR(15),
    NOMBRE            VARCHAR(255),
    CALLE             VARCHAR(255),
    POBLACION         VARCHAR(255),
    PROVINCIA         VARCHAR(255),
    CODIGO_POSTAL     VARCHAR(10),
    FECHA_ALTA         TIMESTAMP,
    FECHA_MODIFICACION TIMESTAMP,
    USUARIO            TIPO_USUARIO
);
ALTER TABLE FACTURAS_CLIENTE ADD CONSTRAINT PK_FACTURAS_CLIENTE PRIMARY KEY (ID);

ALTER TABLE FACTURAS_CLIENTE ADD CONSTRAINT FK_FACTURAS_CLIENTE_CONTACTOS FOREIGN KEY (ID_CLIENTE) REFERENCES CONTACTOS (ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE FACTURAS_CLIENTE ADD CONSTRAINT FK_FACTURAS_CLIENTE_EMPRESAS FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE NO ACTION ON UPDATE NO ACTION;

CREATE GENERATOR GEN_FACTURAS_CLIENTE_ID;
SET GENERATOR GEN_FACTURAS_CLIENTE_ID TO 1;

CREATE TRIGGER TRI_INSERT_FACTURAS_CLIENTE FOR FACTURAS_CLIENTE
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  NEW.FECHA_ALTA = current_timestamp;
  NEW.FECHA_MODIFICACION = Null;
end;

CREATE TRIGGER TRI_UPDATE_FACTURAS_CLIENTE FOR FACTURAS_CLIENTE
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  NEW.FECHA_MODIFICACION = current_timestamp;
end;


CREATE TABLE FACTURAS_CLIENTE_DETALLES (
    ID              TIPO_ID NOT NULL,
    ID_FACTURA      TIPO_ID NOT NULL,
    POSICION        INTEGER,
    TIPO_DETALLE    VARCHAR(10),
    CONCEPTO        TIPO_CONCEPTO,
    CANTIDAD        INTEGER,
    IMPORTE_UNIDAD  TIPO_IMPORTE,
    IMPORTE_TOTAL   TIPO_IMPORTE,
    VISIBLE         TIPO_BOOLEANO,
  	FECHA_ALTA         TIMESTAMP,
  	FECHA_MODIFICACION TIMESTAMP
);
ALTER TABLE FACTURAS_CLIENTE_DETALLES ADD CONSTRAINT PK_FACTURAS_CLIENTE_DETALLES PRIMARY KEY (ID);

CREATE GENERATOR GEN_FACTURA_CLIENTE_DETALLES_ID;
SET GENERATOR GEN_FACTURA_CLIENTE_DETALLES_ID TO 1;

CREATE TRIGGER TRI_INSERT_FACTURAS_CLIENTE_DET FOR FACTURAS_CLIENTE_DETALLES
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  NEW.FECHA_ALTA = current_timestamp;
  NEW.FECHA_MODIFICACION = Null;
end;


CREATE TRIGGER TRI_UPDATE_FACTURAS_CLIENTE_DET FOR FACTURAS_CLIENTE_DETALLES
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  NEW.FECHA_MODIFICACION = current_timestamp;
end;




CREATE TABLE ALMACENES (
    ID                 TIPO_ID NOT NULL,
    ID_EMPRESA         TIPO_ID NOT NULL,
    NOMBRE             VARCHAR(255),
    CALLE              VARCHAR(255),
    PROVINCIA          VARCHAR(255),
    POBLACION          VARCHAR(255),
    CODIGO_POSTAL      VARCHAR(10),
    TELEFONO           VARCHAR(25),
    MOVIL              VARCHAR(25),
    FAX                VARCHAR(25),
    PERSONA_CONTACTO    VARCHAR(255),
    OBSERVACIONES      TIPO_NOTAS,
    FECHA_ALTA         TIMESTAMP,
    FECHA_MODIFICACION TIMESTAMP,
    USUARIO            TIPO_USUARIO
);

ALTER TABLE ALMACENES ADD CONSTRAINT PK_ALMACENES PRIMARY KEY (ID);

ALTER TABLE ALMACENES ADD CONSTRAINT FK_ALMACENES_EMPRESAS FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE NO ACTION ON UPDATE NO ACTION;

CREATE GENERATOR GEN_ALMACENES_ID;
SET GENERATOR GEN_ALMACENES_ID TO 1;

CREATE TRIGGER TRI_INSERT_ALMACENES FOR ALMACENES
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  NEW.FECHA_ALTA = current_timestamp;
  NEW.FECHA_MODIFICACION = Null;
end;


CREATE TRIGGER TRI_UPDATE_ALMACENES FOR ALMACENES
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  NEW.FECHA_MODIFICACION = current_timestamp;
end;

CREATE TABLE FAMILIAS (
    DESCRIPCION  VARCHAR(255)
);

CREATE TABLE ARTICULOS (
    ID                 TIPO_ID NOT NULL,
    ID_EMPRESA         TIPO_ID,
    REFERENCIA         VARCHAR(255),
    DESCRIPCION        VARCHAR(255),
    FAMILIA            VARCHAR(255),
    IMAGEN             TIPO_BINARIO,
    COMISIONABLE       TIPO_BOOLEANO,
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP,
    USUARIO             TIPO_USUARIO
);

ALTER TABLE ARTICULOS ADD CONSTRAINT PK_ARTICULOS PRIMARY KEY (ID);
ALTER TABLE ARTICULOS ADD CONSTRAINT FK_ARTICULOS_EMPRESA FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE NO ACTION ON UPDATE NO ACTION;

CREATE GENERATOR GEN_ARTICULOS_ID;
SET GENERATOR GEN_ARTICULOS_ID TO 1;

CREATE TRIGGER TRI_INSERT_ARTICULOS FOR ARTICULOS
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  NEW.FECHA_ALTA = current_timestamp;
  NEW.FECHA_MODIFICACION = Null;
end;


CREATE TRIGGER TRI_UPDATE_ARTICULOS FOR ARTICULOS
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  NEW.FECHA_MODIFICACION = current_timestamp;
end;


CREATE TABLE ARTICULOS_DATOS_PROV (
    ID            	 TIPO_ID NOT NULL,
    ID_ARTICULO    	 TIPO_ID,
    ID_PROVEEDOR         TIPO_ID,
    REFERENCIA		 VARCHAR(255),
    PRECIO_COSTE    	 TIPO_IMPORTE,
    PRECIO_PORTE	 TIPO_IMPORTE,
    DESCUENTO		 TIPO_PORCENTAJE
);
ALTER TABLE ARTICULOS_DATOS_PROV ADD CONSTRAINT PK_ARTICULOS_DATOS_PROV PRIMARY KEY (ID);

CREATE GENERATOR GEN_ARTICULOS_DATOS_PROV_ID;
SET GENERATOR GEN_ARTICULOS_DATOS_PROV_ID TO 1;


CREATE TABLE PEDIDOS_PROVEEDOR (
    ID                   TIPO_ID NOT NULL,
    ID_EMPRESA           TIPO_ID,
    ID_PROVEEDOR         TIPO_ID,
    REFERENCIA           VARCHAR(255),
    FECHA_PEDIDO         DATE,
    FECHA_CONFIRMACION   DATE,
    FECHA_ENTREGA        DATE,
    SITUACION            VARCHAR(255),
    ID_ALMACEN           TIPO_ID,
    DIRECCION_ENTREGA    TIPO_NOTAS,
    OBSERVACIONES        TIPO_NOTAS,
    IMPORTE_TOTAL        TIPO_IMPORTE,
    INCIDENCIAS          TIPO_NOTAS,
    INCIDENCIAS_ACTIVAS  SMALLINT DEFAULT 0 NOT NULL,
    FECHA_ALTA           TIMESTAMP,
    FECHA_MODIFICACION   TIMESTAMP,
    USUARIO              TIPO_USUARIO
);

ALTER TABLE PEDIDOS_PROVEEDOR ADD CONSTRAINT PK_PEDIDOS_PROVEEDOR PRIMARY KEY (ID);
ALTER TABLE PEDIDOS_PROVEEDOR ADD CONSTRAINT FK_PEDIDOS_PROVEEDOR FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID);
ALTER TABLE PEDIDOS_PROVEEDOR ADD CONSTRAINT FK_PEDIDOS_PROVEEDOR2 FOREIGN KEY (ID_PROVEEDOR) REFERENCES CONTACTOS (ID);

CREATE TRIGGER TRI_INSERT_PEDIDOS_PROVEEDOR FOR PEDIDOS_PROVEEDOR
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  NEW.FECHA_ALTA = current_timestamp;
  NEW.FECHA_MODIFICACION = Null;
end;


CREATE TRIGGER TRI_UPDATE_PEDIDOS_PROVEEDOR FOR PEDIDOS_PROVEEDOR
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  NEW.FECHA_MODIFICACION = current_timestamp;
end;


CREATE TABLE PEDIDOS_PROVEEDOR_DETALLES (
    ID                  TIPO_ID NOT NULL,
    ID_PEDIDO           TIPO_ID NOT NULL,
    POSICION            INTEGER,
    TIPO_DETALLE        VARCHAR(10),
    REFERENCIA          VARCHAR(255),
    ID_ARTICULO         TIPO_ID,
    CONCEPTO            TIPO_CONCEPTO,
    CANTIDAD            INTEGER,
    IMPORTE_UNIDAD      TIPO_IMPORTE,
    IMPORTE_TOTAL       TIPO_IMPORTE,
    VISIBLE             TIPO_BOOLEANO,
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP
);

ALTER TABLE PEDIDOS_PROVEEDOR_DETALLES ADD CONSTRAINT PK_PEDIDOS_PROVEEDOR_DETALLES PRIMARY KEY (ID);


CREATE TRIGGER TRI_INSERT_PEDIDOS_PROV_DET FOR PEDIDOS_PROVEEDOR_DETALLES
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  NEW.FECHA_ALTA = current_timestamp;
  NEW.FECHA_MODIFICACION = Null;
end;

CREATE TRIGGER TRI_UPDATE_PEDIDOS_PROV_DET FOR PEDIDOS_PROVEEDOR_DETALLES
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  NEW.FECHA_MODIFICACION = current_timestamp;
end;


CREATE TABLE PEDIDOS_CLIENTE (
    ID                   TIPO_ID NOT NULL,
    ID_EMPRESA           TIPO_ID,
    ID_CLIENTE           TIPO_ID,
    REFERENCIA           VARCHAR(255),
    FECHA_PEDIDO         DATE,
    FECHA_CONFIRMACION   DATE,
    FECHA_ENTREGA        DATE,
    SITUACION            VARCHAR(255),
    CALLE    		 VARCHAR(255),
    CODIGO_POSTAL        VARCHAR(10),
    POBLACION		 VARCHAR(255),
    PROVINCIA		 VARCHAR(255),
    PERSONA_CONTACTO     VARCHAR(255),
    TELEFONO             VARCHAR(25),
    OBSERVACIONES        TIPO_NOTAS,
    IMPORTE_TOTAL        TIPO_IMPORTE,
    INCIDENCIAS          TIPO_NOTAS,
    INCIDENCIAS_ACTIVAS  SMALLINT DEFAULT 0 NOT NULL,
    FECHA_ALTA           TIMESTAMP,
    FECHA_MODIFICACION   TIMESTAMP,
    USUARIO              TIPO_USUARIO
);

ALTER TABLE PEDIDOS_CLIENTE ADD CONSTRAINT PK_PEDIDOS_CLIENTE PRIMARY KEY (ID);


CREATE GENERATOR GEN_PEDIDOS_PROV_ID;
SET GENERATOR GEN_PEDIDOS_PROV_ID TO 1;

CREATE TRIGGER TRI_INSERT_PEDIDOS_CLIENTE FOR PEDIDOS_CLIENTE
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  NEW.FECHA_ALTA = current_timestamp;
  NEW.FECHA_MODIFICACION = Null;
end;

CREATE TRIGGER TRI_UPDATE_PEDIDOS_CLIENTE FOR PEDIDOS_CLIENTE
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  NEW.FECHA_MODIFICACION = current_timestamp;
end;


CREATE TABLE PEDIDOS_CLIENTE_DETALLES (
    ID                  TIPO_ID NOT NULL,
    ID_PEDIDO           TIPO_ID NOT NULL,
    POSICION            INTEGER,
    TIPO_DETALLE        VARCHAR(10),
    REFERENCIA          VARCHAR(255),
    ID_ARTICULO         TIPO_ID,
    CONCEPTO            TIPO_CONCEPTO,
    CANTIDAD            INTEGER,
    IMPORTE_UNIDAD      TIPO_IMPORTE,
    IMPORTE_TOTAL       TIPO_IMPORTE,
    VISIBLE             TIPO_BOOLEANO,
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP
);

ALTER TABLE PEDIDOS_CLIENTE_DETALLES ADD CONSTRAINT PK_PEDIDOS_CLIENTE_DETALLES PRIMARY KEY (ID);


CREATE GENERATOR GEN_PEDIDOS_CLI_ID;
SET GENERATOR GEN_PEDIDOS_CLI_ID TO 1;

CREATE TRIGGER TRI_INSERT_PEDIDOS_CLI_DET FOR PEDIDOS_CLIENTE_DETALLES
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  NEW.FECHA_ALTA = current_timestamp;
  NEW.FECHA_MODIFICACION = Null;
end;

CREATE TRIGGER TRI_UPDATE_PEDIDOS_CLI_DET FOR PEDIDOS_CLIENTE_DETALLES
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  NEW.FECHA_MODIFICACION = current_timestamp;
end;



CREATE TABLE INVENTARIO (
    ID                   TIPO_ID NOT NULL,
    ID_ARTICULO          TIPO_ID,
    ID_ALMACEN           TIPO_ID,
    ID_PEDIDO_PROVEEDOR  TIPO_ID,
    ID_PEDIDO_CLIENTE    TIPO_ID
);

ALTER TABLE INVENTARIO ADD CONSTRAINT PK_INVENTARIO PRIMARY KEY (ID);
ALTER TABLE INVENTARIO ADD CONSTRAINT FK_INVENTARIO_ALMACENES FOREIGN KEY (ID_ALMACEN) REFERENCES ALMACENES (ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE INVENTARIO ADD CONSTRAINT FK_INVENTARIO_ARTICULOS FOREIGN KEY (ID_ARTICULO) REFERENCES ARTICULOS (ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE INVENTARIO ADD CONSTRAINT FK_INVENTARIO_PEDIDOS_PRO FOREIGN KEY (ID_PEDIDO_PROVEEDOR) REFERENCES PEDIDOS_PROVEEDOR (ID) ON DELETE SET NULL ON UPDATE CASCADE;

CREATE GENERATOR GEN_INVENTARIO_ID;
SET GENERATOR GEN_INVENTARIO_ID TO 1;


































CREATE TABLE PRESUPUESTOS (
  ID                 TIPO_ID NOT NULL,
  ID_EMPRESA         TIPO_ID,
  ID_CLIENTE         TIPO_ID,
  ID_VENDEDOR        TIPO_ID,
  TIPO               VARCHAR(10),
  REFERENCIA         VARCHAR(255),
  FECHA_PRESUPUESTO  DATE,
  VIGENCIA           INTEGER,
  SITUACION          VARCHAR(255),
  FECHA_DECISION     DATE,
  BASE_IMPONIBLE     TIPO_IMPORTE,
  DESCUENTO          TIPO_PORCENTAJE,
  IMPORTE_DESCUENTO  TIPO_IMPORTE,
  IVA                TIPO_PORCENTAJE,
  IMPORTE_IVA        TIPO_IMPORTE,
  IMPORTE_TOTAL      TIPO_IMPORTE,
  OBSERVACIONES      TIPO_NOTAS,
  PLAZO_ENTREGA      TIPO_NOTAS,
  FORMA_PAGO         TIPO_NOTAS,
  FECHA_ALTA         TIMESTAMP,
  FECHA_MODIFICACION TIMESTAMP,
  USUARIO            TIPO_USUARIO
);

ALTER TABLE PRESUPUESTOS
ADD CONSTRAINT PK_PRESUPUESTOS PRIMARY KEY (ID);

CREATE GENERATOR GEN_PRESUPUESTOS_ID;
SET GENERATOR GEN_PRESUPUESTOS_ID TO 1;



CREATE TABLE PRESUPUESTOS_DETALLES (
  ID TIPO_ID NOT NULL,
  ID_PRESUPUESTO TIPO_ID NOT NULL,
  POSICION INTEGER,
  TIPO_DETALLE VARCHAR(10),
  CONCEPTO TIPO_CONCEPTO,
  CANTIDAD INTEGER,
  PUNTOS INTEGER,
  IMPORTE_PUNTOS TIPO_IMPORTE,
  IMPORTE_UNIDAD TIPO_IMPORTE,
  IMPORTE_TOTAL TIPO_IMPORTE,
  VISIBLE TIPO_BOOLEANO
);

ALTER TABLE PRESUPUESTOS_DETALLES
ADD CONSTRAINT PK_PRESUPUESTOS_DETALLES PRIMARY KEY (ID);

CREATE GENERATOR GEN_PRESUPUESTOS_DETALLES_ID;
SET GENERATOR GEN_PRESUPUESTOS_DETALLES_ID TO 1;







CREATE TABLE PEDIDOS_PROVEEDOR (
    ID                  TIPO_ID NOT NULL,
    ID_EMPRESA          TIPO_ID,
    ID_PROVEEDOR        TIPO_ID,
    ID_MONTAJE          TIPO_ID,
    REFERENCIA          VARCHAR(255),
    FECHA_PEDIDO        DATE,
    FECHA_CONFIRMACION  DATE,
    FECHA_ENTREGA       DATE,
    SITUACION           VARCHAR(255),
    DIRECCION_ENTREGA   TIPO_NOTAS,
    OBSERVACIONES       TIPO_NOTAS,
    IMPORTE_TOTAL        TIPO_IMPORTE,
    INCIDENCIAS         TIPO_NOTAS,
    INCIDENCIAS_ACTIVAS  SMALLINT DEFAULT 0 NOT NULL,
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP,
    USUARIO             TIPO_USUARIO
);
ALTER TABLE PEDIDOS_PROVEEDOR ADD CONSTRAINT PK_PEDIDOS_PROVEEDOR PRIMARY KEY (ID);
ALTER TABLE PEDIDOS_PROVEEDOR ADD CONSTRAINT FK_PEDIDOS_PROVEEDOR FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID);
ALTER TABLE PEDIDOS_PROVEEDOR ADD CONSTRAINT FK_PEDIDOS_PROVEEDOR2 FOREIGN KEY (ID_PROVEEDOR) REFERENCES CONTACTOS (ID);

CREATE GENERATOR GEN_PEDIDOS_PROV_ID;
SET GENERATOR GEN_PEDIDOS_PROV_ID TO 1;

CREATE TABLE PEDIDOS_PROVEEDOR_DETALLES (
    ID              TIPO_ID NOT NULL,
    ID_PEDIDO       TIPO_ID NOT NULL,
    POSICION        INTEGER,
    TIPO_DETALLE    VARCHAR(10),
    CONCEPTO        TIPO_CONCEPTO,
    CANTIDAD        INTEGER,
    IMPORTE_UNIDAD  TIPO_IMPORTE,
    IMPORTE_TOTAL   TIPO_IMPORTE,
    VISIBLE         TIPO_BOOLEANO
);
ALTER TABLE PEDIDOS_PROVEEDOR_DETALLES ADD CONSTRAINT PK_PEDIDOS_PROVEEDOR_DETALLES PRIMARY KEY (ID);

CREATE GENERATOR GEN_PEDIDOS_PROV_DETALLES_ID;
SET GENERATOR GEN_PEDIDOS_PROV_DETALLES_ID TO 1;


CREATE TABLE COBROS (
    ID                  TIPO_ID NOT NULL,
    ID_EMPRESA          TIPO_ID,
    ID_CLIENTE          TIPO_ID,
    ID_MONTAJE          TIPO_ID,
    REFERENCIA          VARCHAR(255),
    FECHA_COBRO         TIMESTAMP,
    DESCRIPCION         TIPO_CONCEPTO,
    IMPORTE             TIPO_IMPORTE,
    FORMA_PAGO          VARCHAR(255),
    FECHA_ALTA          TIMESTAMP,
    FECHA_MODIFICACION  TIMESTAMP,
    USUARIO             TIPO_USUARIO
);

ALTER TABLE COBROS ADD CONSTRAINT PK_COBROS PRIMARY KEY (ID);
ALTER TABLE COBROS ADD CONSTRAINT FK_COBROS FOREIGN KEY (ID_CLIENTE) REFERENCES CONTACTOS (ID);

CREATE GENERATOR GEN_COBROS_CLIENTE_ID;
SET GENERATOR GEN_COBROS_CLIENTE_ID TO 1;

ALTER TABLE PRESUPUESTOS_DETALLES
ADD DESCUENTO TIPO_PORCENTAJE;

ALTER TABLE REFERENCIAS
ADD ID_EMPRESA TIPO_ID;

ALTER TABLE REFERENCIAS
ADD CONSTRAINT FK_REFERENCIAS
FOREIGN KEY (ID_EMPRESA)
REFERENCES EMPRESAS(ID);


ALTER TABLE FACTURAS_CLIENTE_DETALLES
ADD FECHA_ALTA TIMESTAMP;

ALTER TABLE FACTURAS_CLIENTE_DETALLES
ADD FECHA_MODIFICACION TIMESTAMP;

ALTER TABLE PEDIDOS_PROVEEDOR_DETALLES
ADD FECHA_ALTA TIMESTAMP;

ALTER TABLE PEDIDOS_PROVEEDOR_DETALLES
ADD FECHA_MODIFICACION TIMESTAMP;

ALTER TABLE PRESUPUESTOS_DETALLES
ADD FECHA_ALTA TIMESTAMP;

ALTER TABLE PRESUPUESTOS_DETALLES
ADD FECHA_MODIFICACION TIMESTAMP;


CREATE TRIGGER TRI_INSERT_FACTURAS_CLIENTE FOR FACTURAS_CLIENTE
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  NEW.FECHA_ALTA = current_timestamp;
  NEW.FECHA_MODIFICACION = Null;
end;

CREATE TRIGGER TRI_INSERT_PEDIDOS_PROVEEDOR FOR PEDIDOS_PROVEEDOR
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  NEW.FECHA_ALTA = current_timestamp;
  NEW.FECHA_MODIFICACION = Null;
end;

CREATE TRIGGER TRI_INSERT_PRESUPUESTOS FOR PRESUPUESTOS
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  NEW.FECHA_ALTA = current_timestamp;
  NEW.FECHA_MODIFICACION = Null;
end;

CREATE TRIGGER TRI_INSERT_FACTURAS_CLIENTE_DET FOR FACTURAS_CLIENTE_DETALLES
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  NEW.FECHA_ALTA = current_timestamp;
  NEW.FECHA_MODIFICACION = Null;
end;

CREATE TRIGGER TRI_INSERT_PEDIDOS_PROV_DET FOR PEDIDOS_PROVEEDOR_DETALLES
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  NEW.FECHA_ALTA = current_timestamp;
  NEW.FECHA_MODIFICACION = Null;
end;

CREATE TRIGGER TRI_INSERT_PRESUPUESTOS_DET FOR PRESUPUESTOS_DETALLES
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  NEW.FECHA_ALTA = current_timestamp;
  NEW.FECHA_MODIFICACION = Null;
end;


CREATE TRIGGER TRI_UPDATE_FACTURAS_CLIENTE FOR FACTURAS_CLIENTE
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  NEW.FECHA_MODIFICACION = current_timestamp;
end;

CREATE TRIGGER TRI_UPDATE_PEDIDOS_PROVEEDOR FOR PEDIDOS_PROVEEDOR
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  NEW.FECHA_MODIFICACION = current_timestamp;
end;

CREATE TRIGGER TRI_UPDATE_PRESUPUESTOS FOR PRESUPUESTOS
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  NEW.FECHA_MODIFICACION = current_timestamp;
end;


CREATE TRIGGER TRI_UPDATE_FACTURAS_CLIENTE_DET FOR FACTURAS_CLIENTE_DETALLES
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  NEW.FECHA_MODIFICACION = current_timestamp;
end;

CREATE TRIGGER TRI_UPDATE_PEDIDOS_PROV_DET FOR PEDIDOS_PROVEEDOR_DETALLES
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  NEW.FECHA_MODIFICACION = current_timestamp;
end;

CREATE TRIGGER TRI_UPDATE_PRESUPUESTOS_DET FOR PRESUPUESTOS_DETALLES
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  NEW.FECHA_MODIFICACION = current_timestamp;
end;

ALTER TABLE PEDIDOS_PROVEEDOR_DETALLES
ADD REFERENCIA VARCHAR(255);

ALTER TABLE COBROS ADD CONSTRAINT FK_COBROS_EMPRESAS FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE NO ACTION ON UPDATE NO ACTION;
alter table PRESUPUESTOS add constraint FK_PRESUPUESTOS2 foreign key (ID_CLIENTE) references CONTACTOS(ID) ON DELETE NO ACTION ON UPDATE NO ACTION;



/****************************************************************************/
/* INICIALIZAR GENERADORES */


SET GENERATOR GEN_ALMACENES_ID TO 1;
SET GENERATOR GEN_ARTICULOS_DATOS_PROV_ID TO 1;
SET GENERATOR GEN_ARTICULOS_ID TO 1;
SET GENERATOR GEN_CATEGORIAS_ID TO 4;
SET GENERATOR GEN_CONTACTOS_DATOS_BANCO_ID TO 1;
SET GENERATOR GEN_CONTACTOS_DIR_ID TO 1;
SET GENERATOR GEN_CONTACTOS_ID TO 1;
SET GENERATOR GEN_EMPRESAS_ID TO 2;
SET GENERATOR GEN_FACTURAS_CLIENTE_ID TO 1;
SET GENERATOR GEN_FACTURA_CLIENTE_DETALLES_ID TO 1;
SET GENERATOR GEN_INVENTARIO_ID TO 1;
SET GENERATOR GEN_PEDIDOS_CLI_ID TO 1;
SET GENERATOR GEN_PEDIDOS_PROV_ID TO 1;
SET GENERATOR GEN_PERFILES_ID TO 1;
SET GENERATOR GEN_USUARIOS_ID TO 1;

/****************************************************************************/
/* INSERTAR DATOS */

INSERT INTO CATEGORIAS (ID, CATEGORIA) VALUES (1, 'CLIENTE');
INSERT INTO CATEGORIAS (ID, CATEGORIA) VALUES (2, 'PROVEEDOR');
INSERT INTO CATEGORIAS (ID, CATEGORIA) VALUES (3, 'AGENTE');

COMMIT;


INSERT INTO REFERENCIAS (CODIGO, VALOR, ID_EMPRESA) VALUES('REF_FACTURAS_CLIENTE', '2007/001', 1);
COMMIT;