Vinculaciones multi-agencia
This commit is contained in:
107
agencias.txt
107
agencias.txt
@@ -1,4 +1,33 @@
|
||||
-- 1. Tabla de Agencias Aduanales
|
||||
Sistemas -- Administrador General
|
||||
INSERT INTO [Importaciones_HC].[dbo].[usuarios_sistema]
|
||||
([nombre], [email], [password_hash], [tipo_usuario], [activo], [creado_en], [dos_factores], [notificaciones], [notificaciones_extra])
|
||||
VALUES (
|
||||
'4a77Tj9XtOCnvkUrxuxLCg==', -- nombre encriptado
|
||||
'QVaqkaWSvUtgAfKN51JNDkoyUiZGVQs3+ARpoGtdD/I=', -- email encriptado
|
||||
'$2y$10$.8CI5zuJ6MICQRRGqksYjOyuIYnln4xgUKJiQkZdEpLWfvUpg1f9m', -- password hash bcrypt
|
||||
'super_admin', 1, GETDATE(), 0, 0, 0
|
||||
);
|
||||
|
||||
|
||||
CREATE TABLE solicitudes_agencias(
|
||||
[request_id] [int] IDENTITY(1,1) NOT NULL,
|
||||
[agencia_name] [varchar](255) NULL,
|
||||
[rfc] [varchar](100) NULL,
|
||||
[email] [varchar](255) NULL,
|
||||
[phone] [varchar](20) NULL,
|
||||
[direccion] [varchar](100) NULL,
|
||||
[opinion_file] [varchar](500) NULL,
|
||||
[admin_name] [varchar](255) NULL,
|
||||
[admin_email] [varchar](255) NULL,
|
||||
[request_status] [varchar](20) NULL,
|
||||
[request_date] [datetime] NULL,
|
||||
[approval_date] [datetime] NULL,
|
||||
[approved_by] [int] NULL,
|
||||
[timestamp_request] [timestamp] NOT NULL
|
||||
);
|
||||
|
||||
|
||||
-- Tabla de Agencias Aduanales
|
||||
|
||||
CREATE TABLE [dbo].[agencias_aduanales](
|
||||
[id_agencia] [int] IDENTITY(1,1) NOT NULL,
|
||||
@@ -15,15 +44,33 @@ CREATE TABLE [dbo].[agencias_aduanales](
|
||||
CONSTRAINT [PK_agencias_aduanales] PRIMARY KEY CLUSTERED ([id_agencia] ASC)
|
||||
);
|
||||
|
||||
|
||||
-- Agregar foreign key para administrador de agencia
|
||||
|
||||
ALTER TABLE [dbo].[agencias_aduanales]
|
||||
ADD CONSTRAINT [FK_agencias_administrador]
|
||||
FOREIGN KEY ([id_administrador]) REFERENCES [dbo].[usuarios_sistema]([id_usuario]);
|
||||
|
||||
CREATE TABLE [dbo].[credenciales_db_agencias] (
|
||||
[id_credencial] INT IDENTITY(1,1) NOT NULL,
|
||||
[id_agencia] INT NOT NULL,
|
||||
[db_instance] NVARCHAR(255) NOT NULL,
|
||||
[db_ip] NVARCHAR(50) NOT NULL,
|
||||
[db_user] NVARCHAR(100) NOT NULL,
|
||||
[db_password] NVARCHAR(255) NOT NULL, -- Considera encriptar o manejar de forma segura
|
||||
[db_port] INT NOT NULL DEFAULT 1433, -- Default SQL Server port
|
||||
[creado_en] DATETIME NOT NULL DEFAULT GETDATE(),
|
||||
[actualizado_en] DATETIME NULL,
|
||||
|
||||
-- 2. Actualizar tipos de usuario válidos
|
||||
CONSTRAINT [PK_credenciales_db_agencias] PRIMARY KEY CLUSTERED ([id_credencial] ASC),
|
||||
CONSTRAINT [FK_credenciales_db_agencia]
|
||||
FOREIGN KEY ([id_agencia]) REFERENCES [dbo].[agencias_aduanales]([id_agencia])
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX [IX_credenciales_db_agencias_id_agencia]
|
||||
ON [dbo].[credenciales_db_agencias]([id_agencia]);
|
||||
|
||||
|
||||
-- Actualizar tipos de usuario válidos
|
||||
|
||||
-- Los tipos de usuario ahora serán:
|
||||
|
||||
@@ -34,11 +81,10 @@ FOREIGN KEY ([id_administrador]) REFERENCES [dbo].[usuarios_sistema]([id_usuario
|
||||
|
||||
-- Campos de auditoría para usuarios_sistema
|
||||
ALTER TABLE [dbo].[usuarios_sistema]
|
||||
ADD [actualizado_en] [datetime] NULL,
|
||||
[creado_por] [int] NULL;
|
||||
ADD [creado_por] [int] NULL;
|
||||
|
||||
|
||||
-- 3. Tabla de relación importador-agencia (many-to-many)
|
||||
-- Tabla de relación importador-agencia (many-to-many)
|
||||
|
||||
CREATE TABLE [dbo].[importador_agencia](
|
||||
[id_relacion] [int] IDENTITY(1,1) NOT NULL,
|
||||
@@ -68,7 +114,7 @@ ON [dbo].[importador_agencia] ([id_importador], [id_agencia])
|
||||
WHERE [activo] = 1;
|
||||
|
||||
|
||||
-- 4. Tabla de relación agente-agencia
|
||||
-- Tabla de relación agente-agencia
|
||||
|
||||
CREATE TABLE [dbo].[agente_agencia](
|
||||
[id_relacion] INT IDENTITY(1,1) NOT NULL,
|
||||
@@ -81,11 +127,15 @@ CREATE TABLE [dbo].[agente_agencia](
|
||||
CONSTRAINT [FK_agente_agencia_usuario]
|
||||
FOREIGN KEY ([id_agente]) REFERENCES [dbo].[usuarios_sistema]([id_usuario]),
|
||||
CONSTRAINT [FK_agente_agencia_agencia]
|
||||
FOREIGN KEY ([id_agencia]) REFERENCES [dbo].[agencias_aduanales]([id_agencia]),
|
||||
CONSTRAINT [UQ_agente_activo]
|
||||
UNIQUE ([id_agente]) WHERE [activo] = 1 -- evita duplicados activos
|
||||
FOREIGN KEY ([id_agencia]) REFERENCES [dbo].[agencias_aduanales]([id_agencia])
|
||||
);
|
||||
|
||||
-- Luego creas el índice filtrado:
|
||||
|
||||
CREATE UNIQUE INDEX [UQ_agente_activo]
|
||||
ON [dbo].[agente_agencia]([id_agente])
|
||||
WHERE [activo] = 1;
|
||||
|
||||
-- Índice único para evitar duplicados activos
|
||||
|
||||
CREATE UNIQUE INDEX [IX_agente_agencia_unique]
|
||||
@@ -93,7 +143,7 @@ ON [dbo].[agente_agencia] ([id_agente], [id_agencia])
|
||||
WHERE [activo] = 1;
|
||||
|
||||
|
||||
-- 5. Tabla para solicitudes de vinculación de importadores
|
||||
-- Tabla para solicitudes de vinculación de importadores
|
||||
|
||||
CREATE TABLE [dbo].[solicitudes_vinculacion](
|
||||
[id_solicitud] [int] IDENTITY(1,1) NOT NULL,
|
||||
@@ -115,25 +165,32 @@ CREATE TABLE [dbo].[solicitudes_vinculacion](
|
||||
);
|
||||
|
||||
|
||||
-- 6. Tabla para auditoría de cambios de agencia
|
||||
-- Tabla para auditoría de cambios de agencia
|
||||
|
||||
CREATE TABLE [dbo].[historial_agencia](
|
||||
[id_historial] [int] IDENTITY(1,1) NOT NULL,
|
||||
[id_importador] [int] NULL,
|
||||
[id_agente] [int] NULL,
|
||||
[id_agencia_anterior] [int] NULL,
|
||||
[id_agencia_nueva] [int] NULL,
|
||||
[accion] [varchar](50) NOT NULL, -- 'VINCULACION', 'DESVINCULACION'
|
||||
[motivo] [nvarchar](500) NULL,
|
||||
CREATE TABLE [dbo].[bitacora_agencias](
|
||||
[id_bitacora] [int] IDENTITY(1,1) NOT NULL,
|
||||
[id_agencia] [int] NULL,
|
||||
[nombre] [varchar](100) NULL,
|
||||
[accion] [varchar](50) NOT NULL, -- 'CREACION', 'DESACTIVACION'
|
||||
[realizado_por] [int] NOT NULL,
|
||||
[fecha_cambio] [datetime] NOT NULL DEFAULT GETDATE(),
|
||||
[datos_adicionales] [nvarchar](max) NULL, -- JSON con información adicional
|
||||
CONSTRAINT [PK_historial_agencia_cambios] PRIMARY KEY CLUSTERED ([id_historial] ASC)
|
||||
[fecha] [datetime] NOT NULL DEFAULT GETDATE(),
|
||||
CONSTRAINT [PK_bitacora_agenciaS] PRIMARY KEY CLUSTERED ([id_bitacora] ASC)
|
||||
);
|
||||
|
||||
-- Índices adicionales para mejorar rendimiento
|
||||
ALTER TABLE [dbo].[bitacora_agencias]
|
||||
ADD CONSTRAINT [FK_bitacora_agencias_agencia]
|
||||
FOREIGN KEY ([id_agencia]) REFERENCES [dbo].[agencias_aduanales]([id_agencia]);
|
||||
|
||||
CREATE INDEX [IX_usuarios_tipo_agencia] ON [dbo].[usuarios_sistema] ([tipo_usuario], [id_agencia]);
|
||||
ALTER TABLE [dbo].[bitacora_agencias]
|
||||
ADD CONSTRAINT [FK_bitacora_agencias_administrador]
|
||||
FOREIGN KEY ([realizado_por]) REFERENCES [dbo].[usuarios_sistema]([id_usuario]);
|
||||
|
||||
ALTER TABLE [dbo].[bitacora_agencias]
|
||||
ADD CONSTRAINT [CK_bitacora_agencias_accion]
|
||||
CHECK ([accion] IN ('CREACION', 'DESACTIVACION'));
|
||||
|
||||
|
||||
-- Índices adicionales para mejorar rendimiento
|
||||
|
||||
CREATE INDEX [IX_importador_agencia_importador] ON [dbo].[importador_agencia] ([id_importador]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user