SET @OLD_UNIQUE_CHECKS = @@UNIQUE_CHECKS, UNIQUE_CHECKS = 0;
SET @OLD_FOREIGN_KEY_CHECKS = @@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0;
SET @OLD_SQL_MODE = @@SQL_MODE, SQL_MODE = 'TRADITIONAL';
-- -----------------------------------------------------
USE `logpro`;
-- -----------------------------------------------------
-- Table `logpro`.`proyectos_tipos`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `logpro`.`proyectos_tipos`
(
  `id`         INT(2) UNSIGNED NOT NULL AUTO_INCREMENT,
  `creacion`   TIMESTAMP       NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `creador_id` INT(3) UNSIGNED NOT NULL,
  `nombre`     VARCHAR(200)    NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_proyectos_tipos_creadores` (`creador_id` ASC),
  CONSTRAINT `fk_proyectos_tipos_creadores`
  FOREIGN KEY (`creador_id`)
  REFERENCES `logpro`.`sistema_usuarios` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE
)
  ENGINE = InnoDB
  DEFAULT CHARACTER SET = utf8
  COLLATE = utf8_general_ci
  PACK_KEYS = 0
  ROW_FORMAT = DEFAULT;
-- -----------------------------------------------------
-- Table `logpro`.`proyectos`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `logpro`.`proyectos`
(
  `id`                         INT(4) UNSIGNED                                             NOT NULL AUTO_INCREMENT,
  `creacion`                   TIMESTAMP                                                   NOT NULL DEFAULT CURRENT_TIMESTAMP
  ON UPDATE CURRENT_TIMESTAMP,
  `creador_id`                 INT(3) UNSIGNED                                             NOT NULL,
  `tipo_id`                    INT(2) UNSIGNED                                             NOT NULL,
  `responsable_id`             INT(3) UNSIGNED                                             NOT NULL,
  `empresa_id`                 INT(3) UNSIGNED                                             NULL,
  `grupo_id`                   INT(3) UNSIGNED                                             NULL,
  `unidad_id`                  VARCHAR(40)                                                 NULL,
  `nombre`                     VARCHAR(100)                                                NOT NULL,
  `descripcion`                TEXT                                                        NOT NULL,
  `resumen_inicio_fecha`       DATE                                                        NULL,
  `resumen_cierre_usuario_id`  INT(3) UNSIGNED                                             NULL,
  `resumen_cierre_fecha`       DATE                                                        NULL,
  `resumen_cierre_resultado`   ENUM ('TERMINADO', 'TERMINADO CON REPAROS', 'NO TERMINADO') NULL,
  `resumen_cierre_comentarios` TEXT                                                        NULL,
  `estado`                     ENUM ('BORRADOR', 'ACTIVO', 'CERRADO')                      NOT NULL DEFAULT 'BORRADOR',
  PRIMARY KEY (`id`),
  INDEX `fk_proyectos_creadores` (`creador_id` ASC),
  INDEX `fk_proyectos_tipos` (`tipo_id` ASC),
  INDEX `fk_proyectos_responsables` (`responsable_id` ASC),
  INDEX `fk_proyectos_clientes` (`cliente_id` ASC),
  INDEX `fk_proyectos_grupos` (`grupo_id` ASC),
  INDEX `fk_proyectos_unidades` (`unidad_id` ASC),
  INDEX `fk_proyectos_usuarios_cierre` (`resumen_cierre_usuario_id` ASC),
  CONSTRAINT `fk_proyectos_creadores`
  FOREIGN KEY (`creador_id`)
  REFERENCES `logpro`.`sistema_usuarios` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_tipos`
  FOREIGN KEY (`tipo_id`)
  REFERENCES `logpro`.`proyectos_tipos` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_responsables`
  FOREIGN KEY (`responsable_id`)
  REFERENCES `logpro`.`sistema_usuarios` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_clientes`
  FOREIGN KEY (`cliente_id`)
  REFERENCES `logpro`.`empresas` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_grupos`
  FOREIGN KEY (`grupo_id`)
  REFERENCES `logpro`.`control_grupos` (`id`)
    ON DELETE SET NULL
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_unidades`
  FOREIGN KEY (`unidad_id`)
  REFERENCES `logpro`.`control_unidades` (`id`)
    ON DELETE SET NULL
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_usuarios_cierre`
  FOREIGN KEY (`resumen_cierre_usuario_id`)
  REFERENCES `logpro`.`sistema_usuarios` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE
)
  ENGINE = InnoDB
  DEFAULT CHARACTER SET = utf8
  COLLATE = utf8_general_ci
  PACK_KEYS = 0
  ROW_FORMAT = DEFAULT;
-- -----------------------------------------------------
-- Table `logpro`.`proyectos_etapas`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `logpro`.`proyectos_etapas`
(
  `id`          INT(6) UNSIGNED NOT NULL AUTO_INCREMENT,
  `creacion`    TIMESTAMP       NOT NULL DEFAULT CURRENT_TIMESTAMP
  ON UPDATE CURRENT_TIMESTAMP,
  `creador_id`  INT(3) UNSIGNED NOT NULL,
  `proyecto_id` INT(4) UNSIGNED NOT NULL,
  `nombre`      VARCHAR(100)    NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_proyectos_etapas_creadores` (`creador_id` ASC),
  INDEX `fk_proyectos_etapas_proyectos` (`proyecto_id` ASC),
  CONSTRAINT `fk_proyectos_etapas_creadores`
  FOREIGN KEY (`creador_id`)
  REFERENCES `logpro`.`sistema_usuarios` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_etapas_proyectos`
  FOREIGN KEY (`proyecto_id`)
  REFERENCES `logpro`.`proyectos` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE
)
  ENGINE = InnoDB
  DEFAULT CHARACTER SET = utf8
  COLLATE = utf8_general_ci
  PACK_KEYS = 0
  ROW_FORMAT = DEFAULT;
-- -----------------------------------------------------
-- Table `logpro`.`proyectos_tareas`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `logpro`.`proyectos_tareas`
(
  `id`                            INT(6) UNSIGNED                           NOT NULL AUTO_INCREMENT,
  `creacion`                      TIMESTAMP                                 NOT NULL DEFAULT CURRENT_TIMESTAMP
  ON UPDATE CURRENT_TIMESTAMP,
  `creador_id`                    INT(3) UNSIGNED                           NOT NULL,
  `proyecto_id`                   INT(4) UNSIGNED                           NOT NULL,
  `etapa_id`                      INT(6) UNSIGNED                           NULL     DEFAULT NULL,
  `responsable_id`                INT(3) UNSIGNED                           NOT NULL,
  `nombre`                        VARCHAR(100)                              NOT NULL,
  `descripcion`                   TEXT                                      NULL,
  `programacion_inicio_fecha`     DATE                                      NULL,
  `programacion_termino_fecha`    DATE                                      NULL,
  `presupuesto_asignado`          INT UNSIGNED                              NULL,
  `resumen_inicio_fecha`          DATE                                      NULL,
  `resumen_inicio_usuario_id`     INT(3) UNSIGNED                           NULL,
  `resumen_termino_fecha`         DATE                                      NULL,
  `resumen_termino_usuario_id`    INT(3) UNSIGNED                           NOT NULL,
  `resumen_aprobacion_fecha`      DATE                                      NULL,
  `resumen_aprobacion_usuario_id` INT(3) UNSIGNED                           NOT NULL,
  `avance`                        INT(3) UNSIGNED                           NOT NULL DEFAULT 0,
  `avance_log`                    TEXT                                      NULL,
  `estado`                        ENUM ('PENDIENTE', 'ACTIVA', 'TERMINADA') NOT NULL DEFAULT 'PENDIENTE',
  `aprobada`                      ENUM ('NO', 'SI')                         NOT NULL DEFAULT 'NO',
  PRIMARY KEY (`id`),
  INDEX `fk_proyectos_tareas_creadores` (`creador_id` ASC),
  INDEX `fk_proyectos_tareas_proyectos` (`proyecto_id` ASC),
  INDEX `fk_proyectos_tareas_etapas` (`etapa_id` ASC),
  INDEX `fk_proyectos_tareas_responsables` (`responsable_id` ASC),
  INDEX `fk_proyectos_tareas_usuarios_inicio` (`resumen_inicio_usuario_id` ASC),
  INDEX `fk_proyectos_tareas_usuarios_termino` (`resumen_termino_usuario_id` ASC),
  INDEX `fk_proyectos_tareas_usuarios_aprobacion` (`resumen_aprobacion_usuario_id` ASC),
  CONSTRAINT `fk_proyectos_tareas_creadores`
  FOREIGN KEY (`creador_id`)
  REFERENCES `logpro`.`sistema_usuarios` (`id`)
      ON DELETE RESTRICT
      ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_tareas_proyectos`
  FOREIGN KEY (`proyecto_id`)
  REFERENCES `logpro`.`proyectos` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_tareas_etapas`
  FOREIGN KEY (`etapa_id`)
  REFERENCES `logpro`.`proyectos_etapas` (`id`)
    ON DELETE SET NULL
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_tareas_responsables`
  FOREIGN KEY (`responsable_id`)
  REFERENCES `logpro`.`sistema_usuarios` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_tareas_usuarios_inicio`
  FOREIGN KEY (`resumen_inicio_usuario_id`)
  REFERENCES `logpro`.`sistema_usuarios` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_tareas_usuarios_termino`
  FOREIGN KEY (`resumen_termino_usuario_id`)
  REFERENCES `logpro`.`sistema_usuarios` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_tareas_usuarios_aprobacion`
  FOREIGN KEY (`resumen_aprobacion_usuario_id`)
  REFERENCES `logpro`.`sistema_usuarios` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE

)
  ENGINE = InnoDB
  DEFAULT CHARACTER SET = utf8
  COLLATE = utf8_general_ci
  PACK_KEYS = 0
  ROW_FORMAT = DEFAULT;
-- -----------------------------------------------------
-- Table `logpro`.`proyectos_tareas_dependencias`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `logpro`.`proyectos_tareas_dependencias`
(
  `id`         INT(6) UNSIGNED            NOT NULL AUTO_INCREMENT,
  `creacion`   TIMESTAMP                  NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `creador_id` INT(3) UNSIGNED            NOT NULL,
  `tarea_id`   INT(6) UNSIGNED            NOT NULL,
  `padre_id`   INT(6) UNSIGNED            NOT NULL,
  `tipo`       ENUM ('INICIO', 'TERMINO') NOT NULL DEFAULT 'TERMINO',
  PRIMARY KEY (`id`),
  INDEX `fk_proyectos_tareas_dependencias_creadores` (`creador_id` ASC),
  INDEX `fk_proyectos_tareas_dependencias_tareas_hijas` (`tarea_id` ASC),
  INDEX `fk_proyectos_tareas_dependencias_tareas_padres` (`padre_id` ASC),
  CONSTRAINT `fk_proyectos_tareas_dependencias_creadores`
  FOREIGN KEY (`creador_id`)
  REFERENCES `logpro`.`sistema_usuarios` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_tareas_dependencias_tareas_hijas`
  FOREIGN KEY (`tarea_id`)
  REFERENCES `logpro`.`proyectos_tareas` (`id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_tareas_dependencias_tareas_padres`
  FOREIGN KEY (`padre_id`)
  REFERENCES `logpro`.`proyectos_tareas` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE
)
  ENGINE = InnoDB
  DEFAULT CHARACTER SET = utf8
  COLLATE = utf8_general_ci
  PACK_KEYS = 0
  ROW_FORMAT = DEFAULT;
-- -----------------------------------------------------
-- Table `logpro`.`proyectos_tareas_archivos`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `logpro`.`proyectos_tareas_archivos`
(
  `archivo_id` VARCHAR(40)     NOT NULL,
  `tarea_id`   INT(6) UNSIGNED NOT NULL,
  PRIMARY KEY (`archivo_id`),
  INDEX `fk_proyectos_tareas_archivos_archivos` (`archivo_id` ASC),
  INDEX `fk_proyectos_tareas_archivos_tareas` (`tarea_id` ASC),
  CONSTRAINT `fk_proyectos_tareas_archivos_archivos`
  FOREIGN KEY (`archivo_id`)
  REFERENCES `logpro`.`archivos` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_tareas_archivos_tareas`
  FOREIGN KEY (`tarea_id`)
  REFERENCES `logpro`.`proyectos_tareas` (`id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE
)
  ENGINE = InnoDB
  DEFAULT CHARACTER SET = utf8
  COLLATE = utf8_general_ci
  PACK_KEYS = 0
  ROW_FORMAT = DEFAULT;
-- -----------------------------------------------------
-- Table `logpro`.`proyectos_tareas_comentarios`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `logpro`.`proyectos_tareas_comentarios`
(
  `id`            INT(6) UNSIGNED NOT NULL AUTO_INCREMENT,
  `creacion`      TIMESTAMP       NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `creador_id`    INT(3) UNSIGNED NOT NULL,
  `tarea_id`      INT(3) UNSIGNED NULL,
  `comentario_id` INT(6) UNSIGNED NULL,
  `comentarios`   VARCHAR(100)    NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_proyectos_tareas_comentarios_creadores` (`creador_id` ASC),
  INDEX `fk_proyectos_tareas_comentarios_tareas` (`tarea_id` ASC),
  INDEX `fk_proyectos_tareas_comentarios_comentarios` (`comentario_id` ASC),
  CONSTRAINT `fk_proyectos_tareas_comentarios_creadores`
  FOREIGN KEY (`creador_id`)
  REFERENCES `logpro`.`sistema_usuarios` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_tareas_comentarios_tareas`
  FOREIGN KEY (`tarea_id`)
  REFERENCES `logpro`.`proyectos_tareas` (`id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_tareas_comentarios_comentarios`
  FOREIGN KEY (`comentario_id`)
  REFERENCES `logpro`.`proyectos_tareas_comentarios` (`id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE
)
  ENGINE = InnoDB
  DEFAULT CHARACTER SET = utf8
  COLLATE = utf8_general_ci
  PACK_KEYS = 0
  ROW_FORMAT = DEFAULT;
-- -----------------------------------------------------
-- Table `logpro`.`proyectos_asignaciones_presupuesto`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `logpro`.`proyectos_asignaciones_presupuesto`
(
  `id`          INT(6) UNSIGNED NOT NULL AUTO_INCREMENT,
  `creacion`    TIMESTAMP       NOT NULL DEFAULT CURRENT_TIMESTAMP
  ON UPDATE CURRENT_TIMESTAMP,
  `creador_id`  INT(3) UNSIGNED NOT NULL,
  `proyecto_id` INT(4) UNSIGNED NOT NULL,
  `tarea_id`    INT(6) UNSIGNED NOT NULL,
  `cuenta_id`   VARCHAR(20)     NOT NULL,
  `cantidad`    INT UNSIGNED    NOT NULL,
  `detalle`     VARCHAR(100)    NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_presupuestos_creadores` (`creador_id` ASC),
  INDEX `fk_presupuestos_proyectos` (`proyecto_id` ASC),
  INDEX `fk_presupuestos_cuentas` (`cuenta_id` ASC),
  INDEX `fk_presupuestos_tareas` (`tarea_id` ASC),
  CONSTRAINT `fk_presupuestos_creadores`
  FOREIGN KEY (`creador_id`)
  REFERENCES `logpro`.`sistema_usuarios` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
  CONSTRAINT `fk_presupuestos_proyectos`
  FOREIGN KEY (`proyecto_id`)
  REFERENCES `logpro`.`proyectos` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
  CONSTRAINT `fk_presupuestos_cuentas`
  FOREIGN KEY (`cuenta_id`)
  REFERENCES `logpro`.`contab_cuentas` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
  CONSTRAINT `fk_presupuestos_tareas`
  FOREIGN KEY (`tareas_id`)
  REFERENCES `logpro`.`proyectos_tareas` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE
)
  ENGINE = InnoDB
  DEFAULT CHARACTER SET = utf8
  COLLATE = utf8_general_ci
  PACK_KEYS = 0
  ROW_FORMAT = DEFAULT;
-- -----------------------------------------------------
-- Table `logpro`.`proyectos_gastos`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `logpro`.`proyectos_gastos`
(
  `id`           INT(6) UNSIGNED          NOT NULL AUTO_INCREMENT,
  `creacion`     TIMESTAMP                NOT NULL DEFAULT CURRENT_TIMESTAMP
  ON UPDATE CURRENT_TIMESTAMP,
  `creador_id`   INT(3) UNSIGNED          NOT NULL,
  `proyecto_id`  INT(4) UNSIGNED          NOT NULL,
  `tarea_id`     INT(6) UNSIGNED          NULL,
  `cuenta_id`    VARCHAR(20)              NULL,
  `centro_id`    VARCHAR(20)              NULL,
  `gasto_fecha`  DATE                     NOT NULL,
  `gasto_year`   YEAR                     NULL,
  `gasto_mes`    INT(2) UNSIGNED ZEROFILL NULL,
  `proveedor_id` INT(5) UNSIGNED          NULL,
  `cantidad`     INT UNSIGNED             NOT NULL,
  `detalle`      VARCHAR(100)             NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_proyectos_gastos_creadores` (`creador_id` ASC),
  INDEX `fk_proyectos_gastos_proyectos` (`proyecto_id` ASC),
  INDEX `fk_proyectos_gastos_tareas` (`tarea_id` ASC),
  INDEX `fk_proyectos_gastos_cuentas` (`cuenta_id` ASC),
  INDEX `fk_proyectos_gastos_centros` (`centro_id` ASC),
  INDEX `fk_proyectos_gastos_proveedores` (`proveedor_id` ASC),
  CONSTRAINT `fk_proyectos_gastos_creadores`
  FOREIGN KEY (`creador_id`)
  REFERENCES `logpro`.`sistema_usuarios` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_gastos_proyectos`
  FOREIGN KEY (`proyecto_id`)
  REFERENCES `logpro`.`proyectos` (`id`)
      ON DELETE CASCADE
      ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_gastos_tareas`
  FOREIGN KEY (`tarea_id`)
  REFERENCES `logpro`.`proyectos_tareas` (`id`)
    ON DELETE SET NULL
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_gastos_cuentas`
  FOREIGN KEY (`cuenta_id`)
  REFERENCES `logpro`.`contab_cuentas` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_gastos_centros`
  FOREIGN KEY (`centro_id`)
  REFERENCES `logpro`.`contab_centros_costo` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE,
  CONSTRAINT `fk_proyectos_gastos_proveedores`
  FOREIGN KEY (`proveedor_id`)
  REFERENCES `logpro`.`contab_proveedores` (`id`)
    ON DELETE RESTRICT
    ON UPDATE CASCADE
)
  ENGINE = InnoDB
  DEFAULT CHARACTER SET = utf8
  COLLATE = utf8_general_ci
  PACK_KEYS = 0
  ROW_FORMAT = DEFAULT;
-- -----------------------------------------------------
SET SQL_MODE = @OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS = @OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS = @OLD_UNIQUE_CHECKS;