-- MySQL Script generated by MySQL Workbench
-- Modificado manualmente para ser compatible con SQLite

-- -----------------------------------------------------
-- Table Objetos
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS Objetos (
  idObjetos INTEGER NOT NULL,
  referencia TEXT NULL DEFAULT NULL,
  nombre TEXT NULL DEFAULT NULL,
  PRIMARY KEY (idObjetos));

CREATE UNIQUE INDEX referencia_Objetos_UNIQUE ON Objetos (referencia ASC);


-- -----------------------------------------------------
-- Table Ubicaciones
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS Ubicaciones (
  idUbicaciones INTEGER NOT NULL,
  referencia TEXT NULL DEFAULT NULL,
  nombre TEXT NULL DEFAULT NULL,
  PRIMARY KEY (idUbicaciones));

CREATE UNIQUE INDEX referencia_Ubicaciones_UNIQUE ON Ubicaciones (referencia ASC);


-- -----------------------------------------------------
-- Table Entidades
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS Entidades (
  idEntidades INTEGER NOT NULL,
  referencia TEXT NULL DEFAULT NULL,
  nombre TEXT NULL DEFAULT NULL,
  PRIMARY KEY (idEntidades));

CREATE UNIQUE INDEX referencia_Entidades_UNIQUE ON Entidades (referencia ASC);


-- -----------------------------------------------------
-- Table Empresas
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS Empresas (
  idEmpresas INTEGER NOT NULL,
  idEntidades INTEGER NOT NULL,
  PRIMARY KEY (idEmpresas),
  CONSTRAINT fk_Empresas_Entidades
    FOREIGN KEY (idEntidades)
    REFERENCES Entidades (idEntidades)
    ON DELETE CASCADE
    ON UPDATE CASCADE);

CREATE INDEX fk_Empresas_Entidades_idx ON Empresas (idEntidades ASC);


-- -----------------------------------------------------
-- Table Talleres
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS Talleres (
  idTalleres INTEGER NOT NULL,
  idUbicaciones INTEGER NOT NULL,
  idEmpresas INTEGER NULL,
  PRIMARY KEY (idTalleres),
  CONSTRAINT fk_Talleres_Ubicaciones
    FOREIGN KEY (idUbicaciones)
    REFERENCES Ubicaciones (idUbicaciones)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT fk_Talleres_Empresas
    FOREIGN KEY (idEmpresas)
    REFERENCES Empresas (idEmpresas)
    ON DELETE CASCADE
    ON UPDATE CASCADE);

CREATE INDEX fk_Talleres_Ubicaciones_idx ON Talleres (idUbicaciones ASC);

CREATE INDEX fk_Talleres_Empresas_idx ON Talleres (idEmpresas ASC);


-- -----------------------------------------------------
-- Table Caracteristicas
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS Caracteristicas (
  idCaracteristicas INTEGER NOT NULL,
  idEntidades INTEGER NOT NULL,
  tipo TEXT NULL DEFAULT NULL,
  valor TEXT NULL DEFAULT NULL,
  PRIMARY KEY (idCaracteristicas, idEntidades),
  CONSTRAINT fk_Caracteristicas_Entidades
    FOREIGN KEY (idEntidades)
    REFERENCES Entidades (idEntidades)
    ON DELETE CASCADE
    ON UPDATE CASCADE);

CREATE INDEX fk_Caracteristicas_Entidades_idx ON Caracteristicas (idEntidades ASC);


-- -----------------------------------------------------
-- Table Especificaciones
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS Especificaciones (
  idEspecificaciones INTEGER NOT NULL,
  idObjetos INTEGER NOT NULL,
  tipo TEXT NOT NULL DEFAULT NULL,
  valor TEXT NULL DEFAULT NULL,
  PRIMARY KEY (idEspecificaciones),
  CONSTRAINT fk_Especificaciones_Equipos
    FOREIGN KEY (idObjetos)
    REFERENCES Objetos (idObjetos)
    ON DELETE CASCADE
    ON UPDATE CASCADE);

CREATE INDEX fk_Especificaciones_Equipos_idx ON Especificaciones (idObjetos ASC);


-- -----------------------------------------------------
-- Table Tecnicos
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS Tecnicos (
  idTecnicos INTEGER NOT NULL,
  idEntidades INTEGER NOT NULL,
  idEmpresas INTEGER NULL,
  PRIMARY KEY (idTecnicos),
  CONSTRAINT fk_Tecnicos_Entidades
    FOREIGN KEY (idEntidades)
    REFERENCES Entidades (idEntidades)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT fk_Tecnicos_Empresas
    FOREIGN KEY (idEmpresas)
    REFERENCES Empresas (idEmpresas)
    ON DELETE CASCADE
    ON UPDATE CASCADE);

CREATE INDEX fk_Tecnicos_Entidades_idx ON Tecnicos (idEntidades ASC);

CREATE INDEX fk_Tecnicos_Empresas_idx ON Tecnicos (idEmpresas ASC);


-- -----------------------------------------------------
-- Table Descripciones
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS Descripciones (
  idDescripciones INTEGER NOT NULL,
  idUbicaciones INTEGER NOT NULL,
  tipo TEXT NOT NULL DEFAULT NULL,
  valor TEXT NULL DEFAULT NULL,
  PRIMARY KEY (idDescripciones),
  CONSTRAINT fk_Descripciones_Ubicaciones
    FOREIGN KEY (idUbicaciones)
    REFERENCES Ubicaciones (idUbicaciones)
    ON DELETE CASCADE
    ON UPDATE CASCADE);

CREATE INDEX fk_Descripciones_Ubicaciones_idx ON Descripciones (idUbicaciones ASC);


-- -----------------------------------------------------
-- Table Almasenes
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS Almasenes (
  idAlmasenes INTEGER NOT NULL,
  idUbicaciones INTEGER NOT NULL,
  idEmpresas INTEGER NULL,
  PRIMARY KEY (idAlmasenes),
  CONSTRAINT fk_Almasenes_Ubicaciones
    FOREIGN KEY (idUbicaciones)
    REFERENCES Ubicaciones (idUbicaciones)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT fk_Almasenes_Empresas
    FOREIGN KEY (idEmpresas)
    REFERENCES Empresas (idEmpresas)
    ON DELETE CASCADE
    ON UPDATE CASCADE);

CREATE INDEX fk_Almasenes_Ubicaciones_idx ON Almasenes (idUbicaciones ASC);

CREATE INDEX fk_Almasenes_Empresas_idx ON Almasenes (idEmpresas ASC);


-- -----------------------------------------------------
-- Table Herramientas
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS Herramientas (
  idHerramientas INTEGER NOT NULL,
  idObjetos INTEGER NOT NULL,
  idEmpresas INTEGER NULL,
  PRIMARY KEY (idHerramientas),
  CONSTRAINT fk_Herramientas_Equipos
    FOREIGN KEY (idObjetos)
    REFERENCES Objetos (idObjetos)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT fk_Herramientas_Empresas
    FOREIGN KEY (idEmpresas)
    REFERENCES Empresas (idEmpresas)
    ON DELETE CASCADE
    ON UPDATE CASCADE);

CREATE INDEX fk_Herramientas_Equipos_idx ON Herramientas (idObjetos ASC);

CREATE INDEX fk_Herramientas_Empresas_idx ON Herramientas (idEmpresas ASC);


-- -----------------------------------------------------
-- Table Clientes
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS Clientes (
  idClientes INTEGER NOT NULL,
  idEntidades INTEGER NOT NULL,
  PRIMARY KEY (idClientes),
  CONSTRAINT fk_Clientes_Entidades
    FOREIGN KEY (idEntidades)
    REFERENCES Entidades (idEntidades)
    ON DELETE CASCADE
    ON UPDATE CASCADE);

CREATE INDEX fk_Clientes_Entidades_idx ON Clientes (idEntidades ASC);


-- -----------------------------------------------------
-- Table Entradas
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS Entradas (
  idEntradas INTEGER NOT NULL,
  idClientes INTEGER NOT NULL,
  idEmpresas INTEGER NOT NULL,
  fecha TEXT NULL DEFAULT NULL,
  estado INTEGER NOT NULL DEFAULT 0,
  PRIMARY KEY (idEntradas),
  CONSTRAINT fk_Entradas_Empresas
    FOREIGN KEY (idEmpresas)
    REFERENCES Empresas (idEmpresas)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT fk_Entradas_Clientes
    FOREIGN KEY (idClientes)
    REFERENCES Clientes (idClientes)
    ON DELETE CASCADE
    ON UPDATE CASCADE);

CREATE INDEX fk_Entradas_Empresas_idx ON Entradas (idEmpresas ASC);

CREATE INDEX fk_Entradas_Clientes_idx ON Entradas (idClientes ASC);


-- -----------------------------------------------------
-- Table Equipos
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS Equipos (
  idEquipos INTEGER NOT NULL,
  idObjetos INTEGER NOT NULL,
  idClientes INTEGER NULL,
  PRIMARY KEY (idEquipos),
  CONSTRAINT fk_Equipos_Objetos
    FOREIGN KEY (idObjetos)
    REFERENCES Objetos (idObjetos)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT fk_Equipos_Clientes
    FOREIGN KEY (idClientes)
    REFERENCES Clientes (idClientes)
    ON DELETE CASCADE
    ON UPDATE CASCADE);

CREATE INDEX fk_Equipos_Objetos_idx ON Equipos (idObjetos ASC);

CREATE INDEX fk_Equipos_Clientes_idx ON Equipos (idClientes ASC);


-- -----------------------------------------------------
-- Table Trabajos
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS Trabajos (
  idTrabajos INTEGER NOT NULL,
  idEquipos INTEGER NOT NULL,
  idTalleres INTEGER NULL,
  idAlmasenes INTEGER NULL,
  idEntradas INTEGER NOT NULL,
  fecha TEXT NULL DEFAULT NULL,
  estado INTEGER NOT NULL DEFAULT 0,
  PRIMARY KEY (idTrabajos),
  CONSTRAINT fk_Trabajos_Entradas
    FOREIGN KEY (idEntradas)
    REFERENCES Entradas (idEntradas)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT fk_Trabajos_Talleres
    FOREIGN KEY (idTalleres)
    REFERENCES Talleres (idTalleres)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT fk_Trabajos_Almasenes
    FOREIGN KEY (idAlmasenes)
    REFERENCES Almasenes (idAlmasenes)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT fk_Trabajos_Equipos
    FOREIGN KEY (idEquipos)
    REFERENCES Equipos (idEquipos)
    ON DELETE CASCADE
    ON UPDATE CASCADE);

CREATE INDEX fk_Trabajos_Entradas_idx ON Trabajos (idEntradas ASC);

CREATE INDEX fk_Trabajos_Talleres_idx ON Trabajos (idTalleres ASC);

CREATE INDEX fk_Trabajos_Almasenes_idx ON Trabajos (idAlmasenes ASC);

CREATE INDEX fk_Trabajos_Equipos_idx ON Trabajos (idEquipos ASC);


-- -----------------------------------------------------
-- Table Acciones
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS Acciones (
  idAcciones INTEGER NOT NULL,
  idTecnicos INTEGER NULL,
  idHerramientas INTEGER NULL,
  idTrabajos INTEGER NOT NULL,
  fecha TEXT NULL DEFAULT NULL,
  estado INTEGER NOT NULL DEFAULT 0,
  PRIMARY KEY (idAcciones),
  CONSTRAINT fk_Acciones_Trabajos
    FOREIGN KEY (idTrabajos)
    REFERENCES Trabajos (idTrabajos)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT fk_Acciones_Tecnicos
    FOREIGN KEY (idTecnicos)
    REFERENCES Tecnicos (idTecnicos)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT fk_Acciones_Herramientas
    FOREIGN KEY (idHerramientas)
    REFERENCES Herramientas (idHerramientas)
    ON DELETE CASCADE
    ON UPDATE CASCADE);

CREATE INDEX fk_Acciones_Trabajos_idx ON Acciones (idTrabajos ASC);

CREATE INDEX fk_Acciones_Tecnicos_idx ON Acciones (idTecnicos ASC);

CREATE INDEX fk_Acciones_Herramientas_idx ON Acciones (idHerramientas ASC);


-- -----------------------------------------------------
-- Table Contacto
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS Contacto (
  idContacto INTEGER NOT NULL,
  idEntidades INTEGER NOT NULL,
  tipo TEXT NULL DEFAULT NULL,
  valor TEXT NULL DEFAULT NULL,
  PRIMARY KEY (idContacto),
  CONSTRAINT fk_Contacto_Entidades
    FOREIGN KEY (idEntidades)
    REFERENCES Entidades (idEntidades)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

CREATE INDEX fk_Contacto_Entidades_idx ON Contacto (idEntidades ASC);


-- -----------------------------------------------------
-- Table Informacion_Fiscal
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS Informacion_Fiscal (
  idInformacion_Fiscal INTEGER NOT NULL,
  idEntidades INTEGER NOT NULL,
  razon_social TEXT NULL,
  rif_tipo TEXT NOT NULL,
  rif_numero INTEGER NOT NULL,
  rif_final INTEGER NULL,
  estado TEXT NULL,
  ciudad TEXT NULL,
  direccion TEXT NULL,
  PRIMARY KEY (idInformacion_Fiscal),
  CONSTRAINT fk_Informacion_fiscal_Entidades
    FOREIGN KEY (idEntidades)
    REFERENCES Entidades (idEntidades)
    ON DELETE CASCADE
    ON UPDATE CASCADE);

CREATE INDEX fk_Informacion_fiscal_Entidades_idx ON Informacion_Fiscal (idEntidades ASC);


-- -----------------------------------------------------
-- View _Talleres
-- -----------------------------------------------------
CREATE VIEW _Talleres AS
SELECT
    b.idUbicaciones,
    a.idTalleres,
    b.nombre,
    b.referencia,
    a.idEmpresas
FROM Talleres AS a
LEFT JOIN Ubicaciones AS b ON (a.idUbicaciones = b.idUbicaciones);

-- -----------------------------------------------------
-- View _Tecnicos
-- -----------------------------------------------------
CREATE VIEW _Tecnicos AS
SELECT
    a.idTecnicos,
    b.idEntidades,
    b.nombre,
    b.referencia,
    a.idEmpresas
FROM Tecnicos AS a
LEFT JOIN Entidades AS b ON (a.idEntidades = b.idEntidades);

-- -----------------------------------------------------
-- View _Almasenes
-- -----------------------------------------------------
CREATE VIEW _Almasenes AS
SELECT
    a.idAlmasenes,
    b.idUbicaciones,
    b.nombre,
    b.referencia,
    a.idEmpresas
FROM Almasenes AS a
LEFT JOIN Ubicaciones AS b ON (a.idUbicaciones = b.idUbicaciones);

-- -----------------------------------------------------
-- View _Herramientas
-- -----------------------------------------------------
CREATE VIEW _Herramientas AS
SELECT
    a.idHerramientas,
    b.idObjetos,
    b.nombre,
    b.referencia,
    a.idEmpresas
FROM Herramientas AS a
LEFT JOIN Objetos AS b ON (a.idObjetos = b.idObjetos);

-- -----------------------------------------------------
-- View _Clientes
-- -----------------------------------------------------
CREATE VIEW _Clientes AS
SELECT
    a.idClientes,
    b.idEntidades,
    b.nombre,
    b.referencia
FROM Clientes AS a
LEFT JOIN Entidades AS b ON (a.idEntidades = b.idEntidades);

-- -----------------------------------------------------
-- View _Equipos
-- -----------------------------------------------------
CREATE VIEW _Equipos AS
SELECT
    a.idEquipos,
    b.idObjetos,
    b.nombre,
    b.referencia,
    a.idClientes
FROM Equipos AS a
LEFT JOIN Objetos AS b ON (a.idObjetos = b.idObjetos);

-- -----------------------------------------------------
-- View _Empresas
-- -----------------------------------------------------
CREATE VIEW _Empresas AS
SELECT
    a.idEmpresas,
    b.idEntidades,
    b.nombre,
    b.referencia
FROM Empresas AS a
LEFT JOIN Entidades AS b ON (a.idEntidades = b.idEntidades);

-- -----------------------------------------------------
-- View _Entradas
-- -----------------------------------------------------
CREATE VIEW _Entradas AS
SELECT
    a.idEntradas,
    b.idTrabajos,
    c.idEquipos,
    d.idObjetos,
    e.idClientes,
    f.idEntidades,
    f.nombre AS cliente,
    f.referencia AS codigo,
    d.nombre  AS equipo,
    d.referencia  AS serial,
    a.estado AS entregado,
    b.estado
FROM Entradas AS a
INNER JOIN Trabajos AS b ON (a.idEntradas = b.idEntradas)
INNER JOIN Equipos AS c ON (b.idEquipos = c.idEquipos)
INNER JOIN Objetos AS d ON (c.idObjetos = d.idObjetos)
LEFT JOIN Clientes AS e ON (a.idClientes = e.idClientes)
LEFT JOIN Entidades AS f ON (e.idEntidades = f.idEntidades);
