Compare commits
7 Commits
a2bde9e920
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
50f1ced127 | ||
|
|
72d0e6a589 | ||
|
|
58954219c8 | ||
|
|
0776ed8c59 | ||
|
|
d2b7b982f3 | ||
|
|
c2f249c937 | ||
|
|
b7c80baadc |
1
.gitignore
vendored
@@ -76,3 +76,4 @@ coverage/
|
||||
*.secrets.json
|
||||
Web.local.config
|
||||
appsettings.local.json
|
||||
/SIG.Web/Documentos/**
|
||||
|
||||
@@ -135,3 +135,7 @@ Do not add the following until the user explicitly asks:
|
||||
The starter must stay small and focused: commands, master page, login, contracts, dummy user session, bundle structure, copied assets, and centralized SQL foundation.
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
REGLA OBLIGATORIA: Nunca usar args.get_panelsUpdated() ni get_panelsUpdated() en JavaScript de WebForms/UpdatePanel de este proyecto; esa llamada rompe repetidamente el entorno. Para reinicializar después de postbacks parciales usar PageRequestManager.add_endRequest(function () { ... }) sin depender de args, o eventos delegados cuando corresponda.
|
||||
@@ -1,4 +1,4 @@
|
||||
# AGENTS_MANTENIMIENTO_PROYECTO.md
|
||||
# AGENTS_MANTENIMIENTO_PROYECTO.md
|
||||
|
||||
These rules complement `AGENTS.md` and are mandatory whenever the task involves commands, security, error handling, user feedback, grids, PDF migration, file delivery, verification, or project evolution.
|
||||
|
||||
@@ -74,6 +74,8 @@ Controlled outcomes and technical failures must use different logs.
|
||||
|
||||
## Grid display rules
|
||||
|
||||
- Los valores numéricos de negocio (hectáreas, superficies, avances, porcentajes, cantidades, importes y saldos) deben alinearse a la derecha tanto en los campos de captura como en las celdas y resúmenes donde se muestran. Usar las clases visuales existentes o la alineación del control; esta regla no convierte claves, folios ni códigos en cantidades.
|
||||
|
||||
- Every new or modified `asp:GridView` must declare `GridLines="None"`.
|
||||
- Its `CssClass` must include the exact utility class `Widthall` so the grid uses the full available width.
|
||||
- Do not add `table-bordered` to a GridView. Existing visual classes such as `table`, `table-striped`, and `table-hover` may be retained when appropriate.
|
||||
|
||||
649
Convenios_Etapa_TipoTramite_20261002.sql
Normal file
@@ -0,0 +1,649 @@
|
||||
/*
|
||||
Preparado a partir de las definiciones instaladas; no ejecutado.
|
||||
Instalar junto con la aplicación. No modifica conceptos, recibos ni pagos.
|
||||
CveSolicitud se conserva únicamente como referencia histórica.
|
||||
Los convenios históricos sin una solicitud conservan CveTipoTramite NULL:
|
||||
su asignación requiere una decisión de negocio; no se elige un trámite arbitrario.
|
||||
*/
|
||||
SET NOCOUNT ON;
|
||||
|
||||
IF COL_LENGTH('dbo.Convenios', 'CveTipoTramite') IS NULL
|
||||
ALTER TABLE dbo.Convenios ADD CveTipoTramite int NULL;
|
||||
GO
|
||||
|
||||
UPDATE C
|
||||
SET CveTipoTramite = S.CveTipoTramite
|
||||
FROM dbo.Convenios AS C
|
||||
INNER JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = C.CveSolicitud
|
||||
WHERE C.CveTipoTramite IS NULL;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.foreign_keys
|
||||
WHERE name = 'FK_Convenios_TipoTramite'
|
||||
)
|
||||
ALTER TABLE dbo.Convenios WITH CHECK
|
||||
ADD CONSTRAINT FK_Convenios_TipoTramite
|
||||
FOREIGN KEY (CveTipoTramite)
|
||||
REFERENCES dbo.Tra_TiposTramite (CveTipoTramite);
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Convenios')
|
||||
AND name = 'IX_Convenios_Etapa_TipoTramite'
|
||||
)
|
||||
CREATE INDEX IX_Convenios_Etapa_TipoTramite
|
||||
ON dbo.Convenios (CveFraccionamientoEtapa, CveTipoTramite);
|
||||
|
||||
DECLARE @QuitarRelacion nvarchar(max) = N'';
|
||||
SELECT @QuitarRelacion = @QuitarRelacion
|
||||
+ N'ALTER TABLE dbo.Convenios DROP CONSTRAINT ' + QUOTENAME(F.name) + N';'
|
||||
FROM sys.foreign_keys AS F
|
||||
WHERE F.parent_object_id = OBJECT_ID('dbo.Convenios')
|
||||
AND F.referenced_object_id = OBJECT_ID('dbo.Tra_Solicitudes');
|
||||
IF @QuitarRelacion <> N''
|
||||
EXEC sys.sp_executesql @QuitarRelacion;
|
||||
|
||||
-- Resultado de diagnóstico; no cambia la clasificación de estos convenios.
|
||||
SELECT CveConvenio, NumeroConvenio, CveFraccionamientoEtapa
|
||||
FROM dbo.Convenios
|
||||
WHERE CveTipoTramite IS NULL;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Tra_ConvenioAdd
|
||||
@CveCliente int,
|
||||
@CveFraccionamientoEtapa int,
|
||||
@CveTipoTramite int,
|
||||
@NumeroConvenio varchar(100),
|
||||
@NumeroOficio varchar(100) = NULL,
|
||||
@ViviendasAutorizadas int = NULL,
|
||||
@ViviendasEnConvenio int,
|
||||
@ViviendasPendientes int = NULL,
|
||||
@ViviendasContratadas int = NULL,
|
||||
@FechaConvenio date,
|
||||
@Observaciones varchar(1000) = NULL,
|
||||
@ConceptosXml xml,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
SET @NumeroConvenio = NULLIF(LTRIM(RTRIM(@NumeroConvenio)), '');
|
||||
SET @NumeroOficio = NULLIF(LTRIM(RTRIM(@NumeroOficio)), '');
|
||||
SET @Observaciones = NULLIF(LTRIM(RTRIM(@Observaciones)), '');
|
||||
|
||||
IF @CveCliente <= 0
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Seleccione el desarrollador del convenio.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @CveFraccionamientoEtapa <= 0
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Seleccione el fraccionamiento y etapa del convenio.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF ISNULL(@CveTipoTramite, 0) <= 0
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Seleccione el tipo de trámite del convenio.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @NumeroConvenio IS NULL
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Capture el número de convenio.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @ViviendasEnConvenio < 0
|
||||
OR ISNULL(@ViviendasAutorizadas, 0) < 0
|
||||
OR ISNULL(@ViviendasPendientes, 0) < 0
|
||||
OR ISNULL(@ViviendasContratadas, 0) < 0
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Las cantidades de viviendas no son válidas.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.FraccionamientosEtapas AS E
|
||||
INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = E.CveFraccionamiento
|
||||
WHERE E.CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
AND F.CveCliente = @CveCliente
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'La etapa seleccionada no pertenece al desarrollador indicado.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Convenios AS C
|
||||
WHERE C.NumeroConvenio = @NumeroConvenio
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Ya existe un convenio con ese número.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
DECLARE @Conceptos TABLE
|
||||
(
|
||||
Orden int NOT NULL PRIMARY KEY,
|
||||
CveConvenioConcepto int NOT NULL,
|
||||
Importe decimal(18,6) NOT NULL,
|
||||
Tipo varchar(20) NOT NULL,
|
||||
NumeroPagos int NOT NULL
|
||||
);
|
||||
|
||||
DECLARE @Recibos TABLE
|
||||
(
|
||||
OrdenConcepto int NOT NULL,
|
||||
Orden int NOT NULL,
|
||||
Importe decimal(18,6) NOT NULL,
|
||||
FechaVencimiento date NOT NULL,
|
||||
Estatus varchar(30) NOT NULL,
|
||||
PRIMARY KEY (OrdenConcepto, Orden)
|
||||
);
|
||||
|
||||
IF @ConceptosXml IS NOT NULL
|
||||
BEGIN
|
||||
INSERT INTO @Conceptos
|
||||
(
|
||||
Orden,
|
||||
CveConvenioConcepto,
|
||||
Importe,
|
||||
Tipo,
|
||||
NumeroPagos
|
||||
)
|
||||
SELECT
|
||||
C.value('@Orden', 'int'),
|
||||
C.value('@CveConvenioConcepto', 'int'),
|
||||
C.value('@Importe', 'decimal(18,6)'),
|
||||
C.value('@Tipo', 'varchar(20)'),
|
||||
C.value('@NumeroPagos', 'int')
|
||||
FROM @ConceptosXml.nodes('/Conceptos/Concepto') AS X(C);
|
||||
|
||||
INSERT INTO @Recibos
|
||||
(
|
||||
OrdenConcepto,
|
||||
Orden,
|
||||
Importe,
|
||||
FechaVencimiento,
|
||||
Estatus
|
||||
)
|
||||
SELECT
|
||||
C.value('@Orden', 'int'),
|
||||
R.value('@Orden', 'int'),
|
||||
R.value('@Importe', 'decimal(18,6)'),
|
||||
R.value('@FechaVencimiento', 'date'),
|
||||
COALESCE(
|
||||
NULLIF(R.value('@Estatus', 'varchar(30)'), ''),
|
||||
'PENDIENTE'
|
||||
)
|
||||
FROM @ConceptosXml.nodes('/Conceptos/Concepto') AS CX(C)
|
||||
CROSS APPLY C.nodes('Recibos/Recibo') AS RX(R);
|
||||
END;
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM @Conceptos)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Agregue al menos un concepto al convenio.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @Conceptos AS C
|
||||
LEFT JOIN dbo.ConveniosConceptos AS CC ON CC.CveConvenioConcepto = C.CveConvenioConcepto
|
||||
AND CC.EsActivo = 1
|
||||
WHERE CC.CveConvenioConcepto IS NULL
|
||||
OR C.Importe <= 0
|
||||
OR NULLIF(LTRIM(RTRIM(C.Tipo)), '') IS NULL
|
||||
OR C.NumeroPagos NOT BETWEEN 1 AND 12
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Uno de los conceptos del convenio no es válido.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @Recibos AS R
|
||||
WHERE R.Importe <= 0
|
||||
OR R.FechaVencimiento IS NULL
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'Todas las parcialidades deben tener importe y vencimiento válidos.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @Conceptos AS C
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT
|
||||
COUNT(*) AS NumeroRecibos,
|
||||
SUM(R.Importe) AS ImporteRecibos
|
||||
FROM @Recibos AS R
|
||||
WHERE R.OrdenConcepto = C.Orden
|
||||
) AS R
|
||||
WHERE ISNULL(R.NumeroRecibos, 0) <> C.NumeroPagos
|
||||
OR ISNULL(R.ImporteRecibos, 0) <> C.Importe
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar =
|
||||
'La cantidad y suma de las parcialidades debe coincidir con cada concepto.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
INSERT INTO dbo.Convenios
|
||||
(
|
||||
CveCliente,
|
||||
NumeroConvenio,
|
||||
NumeroOficio,
|
||||
CveFraccionamientoEtapa,
|
||||
CveTipoTramite,
|
||||
ViviendasAutorizadas,
|
||||
ViviendasEnConvenio,
|
||||
ViviendasPendientes,
|
||||
ViviendasContratadas,
|
||||
FechaConvenio,
|
||||
Observaciones,
|
||||
Estatus,
|
||||
CveConvenioOrigen,
|
||||
CveUsuario
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@CveCliente,
|
||||
@NumeroConvenio,
|
||||
@NumeroOficio,
|
||||
@CveFraccionamientoEtapa,
|
||||
@CveTipoTramite,
|
||||
@ViviendasAutorizadas,
|
||||
@ViviendasEnConvenio,
|
||||
@ViviendasPendientes,
|
||||
@ViviendasContratadas,
|
||||
@FechaConvenio,
|
||||
@Observaciones,
|
||||
'ACTIVO',
|
||||
NULL,
|
||||
@CveUsuarioEjecuta
|
||||
);
|
||||
|
||||
DECLARE @CveConvenio int = CONVERT(int, SCOPE_IDENTITY());
|
||||
DECLARE @OrdenConcepto int = 0;
|
||||
DECLARE @CveConvenioConcepto int;
|
||||
DECLARE @ImporteConcepto decimal(18,6);
|
||||
DECLARE @Tipo varchar(20);
|
||||
DECLARE @NumeroPagos int;
|
||||
DECLARE @CveConvenioDetalle int;
|
||||
|
||||
WHILE EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @Conceptos
|
||||
WHERE Orden > @OrdenConcepto
|
||||
)
|
||||
BEGIN
|
||||
SELECT TOP (1)
|
||||
@OrdenConcepto = C.Orden,
|
||||
@CveConvenioConcepto = C.CveConvenioConcepto,
|
||||
@ImporteConcepto = C.Importe,
|
||||
@Tipo = C.Tipo,
|
||||
@NumeroPagos = C.NumeroPagos
|
||||
FROM @Conceptos AS C
|
||||
WHERE C.Orden > @OrdenConcepto
|
||||
ORDER BY C.Orden;
|
||||
|
||||
INSERT INTO dbo.ConveniosDetalle
|
||||
(
|
||||
CveConvenio,
|
||||
CveConvenioConcepto,
|
||||
Importe,
|
||||
Tipo,
|
||||
NumeroPagos,
|
||||
Observaciones
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@CveConvenio,
|
||||
@CveConvenioConcepto,
|
||||
@ImporteConcepto,
|
||||
@Tipo,
|
||||
@NumeroPagos,
|
||||
NULL
|
||||
);
|
||||
|
||||
SET @CveConvenioDetalle = CONVERT(int, SCOPE_IDENTITY());
|
||||
|
||||
INSERT INTO dbo.ConveniosRecibos
|
||||
(
|
||||
CveConvenioDetalle,
|
||||
NumeroRecibo,
|
||||
Importe,
|
||||
FechaVencimiento,
|
||||
Estatus
|
||||
)
|
||||
SELECT
|
||||
@CveConvenioDetalle,
|
||||
CONCAT(
|
||||
'RD',
|
||||
CONVERT(char(8), GETDATE(), 112),
|
||||
@CveConvenio,
|
||||
'-',
|
||||
RIGHT('000' + CONVERT(varchar(3), @OrdenConcepto), 3),
|
||||
'-',
|
||||
RIGHT('000' + CONVERT(varchar(3), R.Orden), 3)
|
||||
),
|
||||
R.Importe,
|
||||
R.FechaVencimiento,
|
||||
R.Estatus
|
||||
FROM @Recibos AS R
|
||||
WHERE R.OrdenConcepto = @OrdenConcepto
|
||||
ORDER BY R.Orden;
|
||||
END;
|
||||
|
||||
SELECT @CveConvenio AS CveConvenio;
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar =
|
||||
'Ocurrió un error al guardar el convenio; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Tra_ConvenioAdd'
|
||||
),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
|
||||
GO
|
||||
|
||||
/*
|
||||
Se vuelven a definir List/Get únicamente para alinear la salida
|
||||
con Clientes.Nombre y devolver el encabezado completo del modal.
|
||||
*/
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Tra_ConvenioList
|
||||
@CveTipoTramite int = NULL,
|
||||
@CveCliente int = NULL,
|
||||
@CveFraccionamiento int = NULL,
|
||||
@CveFraccionamientoEtapa int = NULL,
|
||||
@Estatus varchar(30) = NULL,
|
||||
@ConSaldoPendiente bit = NULL,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
;WITH PagadoRecibo AS
|
||||
(
|
||||
SELECT
|
||||
PR.CveConvenioRecibo,
|
||||
SUM(PR.ImporteAplicado) AS ImportePagado
|
||||
FROM dbo.ConveniosPagosRecibos AS PR
|
||||
GROUP BY PR.CveConvenioRecibo
|
||||
),
|
||||
Totales AS
|
||||
(
|
||||
SELECT
|
||||
D.CveConvenio,
|
||||
SUM(R.Importe) AS ImporteConvenio,
|
||||
SUM(ISNULL(P.ImportePagado, 0)) AS ImportePagado,
|
||||
SUM(R.Importe - ISNULL(P.ImportePagado, 0)) AS SaldoPendiente,
|
||||
MAX(CASE WHEN P.CveConvenioRecibo IS NULL THEN 0 ELSE 1 END) AS TienePagos
|
||||
FROM dbo.ConveniosDetalle AS D
|
||||
LEFT JOIN dbo.ConveniosRecibos AS R ON R.CveConvenioDetalle = D.CveConvenioDetalle
|
||||
LEFT JOIN PagadoRecibo AS P ON P.CveConvenioRecibo = R.CveConvenioRecibo
|
||||
GROUP BY D.CveConvenio
|
||||
)
|
||||
SELECT
|
||||
C.CveConvenio,
|
||||
C.CveTipoTramite,
|
||||
TT.TipoTramite,
|
||||
C.CveCliente,
|
||||
CL.Nombre AS Cliente,
|
||||
F.CveFraccionamiento,
|
||||
F.Fraccionamiento,
|
||||
FE.CveFraccionamientoEtapa,
|
||||
FE.Etapa,
|
||||
C.NumeroConvenio,
|
||||
C.NumeroOficio,
|
||||
C.Estatus,
|
||||
C.FechaConvenio,
|
||||
ISNULL(T.ImporteConvenio, 0) AS ImporteConvenio,
|
||||
ISNULL(T.ImportePagado, 0) AS ImportePagado,
|
||||
ISNULL(T.SaldoPendiente, 0) AS SaldoPendiente,
|
||||
CONVERT(bit, ISNULL(T.TienePagos, 0)) AS TienePagos
|
||||
FROM dbo.Convenios AS C
|
||||
LEFT JOIN dbo.Tra_TiposTramite AS TT ON TT.CveTipoTramite = C.CveTipoTramite
|
||||
INNER JOIN dbo.FraccionamientosEtapas AS FE ON FE.CveFraccionamientoEtapa = C.CveFraccionamientoEtapa
|
||||
INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = FE.CveFraccionamiento
|
||||
INNER JOIN dbo.Clientes AS CL ON CL.CveCliente = C.CveCliente
|
||||
LEFT JOIN Totales AS T ON T.CveConvenio = C.CveConvenio
|
||||
WHERE (@CveCliente IS NULL OR C.CveCliente = @CveCliente)
|
||||
AND (@CveTipoTramite IS NULL OR C.CveTipoTramite = @CveTipoTramite)
|
||||
AND (@CveFraccionamiento IS NULL OR F.CveFraccionamiento = @CveFraccionamiento)
|
||||
AND (@CveFraccionamientoEtapa IS NULL OR C.CveFraccionamientoEtapa = @CveFraccionamientoEtapa)
|
||||
AND (NULLIF(@Estatus, '') IS NULL OR C.Estatus = @Estatus)
|
||||
AND
|
||||
(
|
||||
@ConSaldoPendiente IS NULL
|
||||
OR @ConSaldoPendiente = CASE
|
||||
WHEN ISNULL(T.SaldoPendiente, 0) > 0 THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
)
|
||||
ORDER BY
|
||||
C.FechaConvenio DESC,
|
||||
C.CveConvenio DESC;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar =
|
||||
'Ocurrió un error al consultar los convenios; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Tra_ConvenioList'
|
||||
),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Tra_ConvenioGet
|
||||
@CveConvenio int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
@ErrorMostrar = NULL,
|
||||
@ErrorTipo = 0,
|
||||
@Return = 0;
|
||||
|
||||
BEGIN TRY
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Convenios
|
||||
WHERE CveConvenio = @CveConvenio
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'No se encontró el convenio solicitado.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
;WITH PagadoRecibo AS
|
||||
(
|
||||
SELECT
|
||||
PR.CveConvenioRecibo,
|
||||
SUM(PR.ImporteAplicado) AS ImportePagado
|
||||
FROM dbo.ConveniosPagosRecibos AS PR
|
||||
GROUP BY PR.CveConvenioRecibo
|
||||
),
|
||||
Totales AS
|
||||
(
|
||||
SELECT
|
||||
D.CveConvenio,
|
||||
SUM(R.Importe) AS ImporteConvenio,
|
||||
SUM(ISNULL(P.ImportePagado, 0)) AS ImportePagado,
|
||||
SUM(R.Importe - ISNULL(P.ImportePagado, 0)) AS SaldoPendiente
|
||||
FROM dbo.ConveniosDetalle AS D
|
||||
LEFT JOIN dbo.ConveniosRecibos AS R ON R.CveConvenioDetalle = D.CveConvenioDetalle
|
||||
LEFT JOIN PagadoRecibo AS P ON P.CveConvenioRecibo = R.CveConvenioRecibo
|
||||
GROUP BY D.CveConvenio
|
||||
)
|
||||
SELECT
|
||||
C.CveConvenio,
|
||||
C.CveTipoTramite,
|
||||
TT.TipoTramite,
|
||||
C.CveCliente,
|
||||
C.CveFraccionamientoEtapa,
|
||||
C.NumeroConvenio,
|
||||
C.NumeroOficio,
|
||||
CL.Nombre AS Cliente,
|
||||
F.Fraccionamiento,
|
||||
FE.Etapa,
|
||||
C.Estatus,
|
||||
C.FechaConvenio,
|
||||
C.ViviendasAutorizadas,
|
||||
C.ViviendasEnConvenio,
|
||||
C.ViviendasPendientes,
|
||||
C.ViviendasContratadas,
|
||||
C.Observaciones,
|
||||
ISNULL(T.ImporteConvenio, 0) AS ImporteConvenio,
|
||||
ISNULL(T.ImportePagado, 0) AS ImportePagado,
|
||||
ISNULL(T.SaldoPendiente, 0) AS SaldoPendiente
|
||||
FROM dbo.Convenios AS C
|
||||
LEFT JOIN dbo.Tra_TiposTramite AS TT ON TT.CveTipoTramite = C.CveTipoTramite
|
||||
INNER JOIN dbo.FraccionamientosEtapas AS FE ON FE.CveFraccionamientoEtapa = C.CveFraccionamientoEtapa
|
||||
INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = FE.CveFraccionamiento
|
||||
INNER JOIN dbo.Clientes AS CL ON CL.CveCliente = C.CveCliente
|
||||
LEFT JOIN Totales AS T ON T.CveConvenio = C.CveConvenio
|
||||
WHERE C.CveConvenio = @CveConvenio;
|
||||
|
||||
SELECT
|
||||
D.CveConvenioDetalle,
|
||||
D.CveConvenioConcepto,
|
||||
CC.Concepto,
|
||||
D.Importe,
|
||||
D.Tipo,
|
||||
D.NumeroPagos
|
||||
FROM dbo.ConveniosDetalle AS D
|
||||
INNER JOIN dbo.ConveniosConceptos AS CC ON CC.CveConvenioConcepto = D.CveConvenioConcepto
|
||||
WHERE D.CveConvenio = @CveConvenio
|
||||
ORDER BY D.CveConvenioDetalle;
|
||||
|
||||
;WITH Pagado AS
|
||||
(
|
||||
SELECT
|
||||
PR.CveConvenioRecibo,
|
||||
SUM(PR.ImporteAplicado) AS ImportePagado
|
||||
FROM dbo.ConveniosPagosRecibos AS PR
|
||||
GROUP BY PR.CveConvenioRecibo
|
||||
)
|
||||
SELECT
|
||||
R.CveConvenioRecibo,
|
||||
R.CveConvenioDetalle,
|
||||
R.NumeroRecibo,
|
||||
R.Importe,
|
||||
ISNULL(P.ImportePagado, 0) AS ImportePagado,
|
||||
R.Importe - ISNULL(P.ImportePagado, 0) AS SaldoPendiente,
|
||||
R.FechaVencimiento,
|
||||
R.Estatus
|
||||
FROM dbo.ConveniosRecibos AS R
|
||||
INNER JOIN dbo.ConveniosDetalle AS D ON D.CveConvenioDetalle = R.CveConvenioDetalle
|
||||
LEFT JOIN Pagado AS P ON P.CveConvenioRecibo = R.CveConvenioRecibo
|
||||
WHERE D.CveConvenio = @CveConvenio
|
||||
ORDER BY
|
||||
R.CveConvenioDetalle,
|
||||
R.FechaVencimiento,
|
||||
R.CveConvenioRecibo;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar =
|
||||
'Ocurrió un error al consultar el detalle del convenio; favor de contactar a Sistemas.';
|
||||
SET @ErrorTipo = 1;
|
||||
SET @Return = 0;
|
||||
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(),
|
||||
'; Procedimiento: ', COALESCE(
|
||||
ERROR_PROCEDURE(),
|
||||
'PA_Tra_ConvenioGet'
|
||||
),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
|
||||
GO
|
||||
146
Documentos_Compartidos_Etapa_Estructura_20261002.sql
Normal file
@@ -0,0 +1,146 @@
|
||||
/*
|
||||
Consolidación de documentos compartidos por etapa y tipo de documento.
|
||||
Preparado para revisión; no ejecutado.
|
||||
Requiere la migración Etapa_TipoTramite_20261002 ya instalada.
|
||||
Ejecutar estructura y procedimientos en la misma transacción de instalación,
|
||||
detenerse ante errores y confirmar sólo tras verificar los resultados.
|
||||
No borra archivos ni filas históricas de documentos.
|
||||
Las copias idénticas quedan como versiones históricas; se conserva una vigente.
|
||||
Las configuraciones particulares idénticas se consolidan en una por etapa.
|
||||
Si hubo ediciones diferentes por trámite, se detiene para no elegir una
|
||||
aprobación, nota o marca de requerido arbitraria.
|
||||
Convenios no se modifican.
|
||||
*/
|
||||
SET NOCOUNT ON;
|
||||
|
||||
IF @@TRANCOUNT = 0
|
||||
THROW 51000, 'Abrir una transacción de instalación antes de ejecutar y revertirla ante cualquier error.', 1;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Tra_DocumentosSolicitud AS D
|
||||
INNER JOIN dbo.Tra_DocumentosSolicitud AS O ON O.CveFraccionamientoEtapa = D.CveFraccionamientoEtapa
|
||||
AND O.CveTipoDocumento = D.CveTipoDocumento
|
||||
AND O.CveDocumentoSolicitud < D.CveDocumentoSolicitud
|
||||
WHERE D.EsActivo = 1
|
||||
AND O.EsActivo = 1
|
||||
AND EXISTS
|
||||
(
|
||||
SELECT D.NombreArchivo, D.NombreArchivoFisico, D.RutaArchivo,
|
||||
D.ContentType, D.TamanoBytes, D.ComentarioCliente,
|
||||
D.ComentarioAdministrativo, D.EsAprobado, D.CveUsuarioCarga,
|
||||
D.CveUsuarioRevisa, D.FechaRevision, D.FechaAlta, D.UltimaNota,
|
||||
D.FechaDocumento, D.FechaVencimiento, D.Vencido
|
||||
EXCEPT
|
||||
SELECT O.NombreArchivo, O.NombreArchivoFisico, O.RutaArchivo,
|
||||
O.ContentType, O.TamanoBytes, O.ComentarioCliente,
|
||||
O.ComentarioAdministrativo, O.EsAprobado, O.CveUsuarioCarga,
|
||||
O.CveUsuarioRevisa, O.FechaRevision, O.FechaAlta, O.UltimaNota,
|
||||
O.FechaDocumento, O.FechaVencimiento, O.Vencido
|
||||
)
|
||||
)
|
||||
THROW 51000, 'Hay versiones vigentes con datos distintos por trámite. Revisarlas antes de consolidar; no se eliminaron documentos.', 1;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Tra_SolicitudDocumentoConfiguracion
|
||||
GROUP BY CveFraccionamientoEtapa, CveTipoDocumento
|
||||
HAVING MIN(CONVERT(int, EsRequerido)) <> MAX(CONVERT(int, EsRequerido))
|
||||
OR MIN(CONVERT(int, EsCliente)) <> MAX(CONVERT(int, EsCliente))
|
||||
OR MIN(CONVERT(int, TieneVigencia)) <> MAX(CONVERT(int, TieneVigencia))
|
||||
OR MIN(CONVERT(int, EsActivo)) <> MAX(CONVERT(int, EsActivo))
|
||||
OR MIN(Orden) <> MAX(Orden)
|
||||
)
|
||||
THROW 51000, 'Hay configuraciones manuales distintas por trámite. Resolverlas antes de consolidar la marca de la etapa.', 1;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_DocumentosSolicitud')
|
||||
AND name = 'UX_Tra_DocumentosSolicitud_Etapa_Tramite_Documento'
|
||||
)
|
||||
DROP INDEX UX_Tra_DocumentosSolicitud_Etapa_Tramite_Documento
|
||||
ON dbo.Tra_DocumentosSolicitud;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion')
|
||||
AND name = 'UX_Tra_ConfiguracionDocumento_Etapa_Tramite_Documento'
|
||||
)
|
||||
DROP INDEX UX_Tra_ConfiguracionDocumento_Etapa_Tramite_Documento
|
||||
ON dbo.Tra_SolicitudDocumentoConfiguracion;
|
||||
|
||||
-- Las columnas se conservan por compatibilidad de esquema; ya no son propietarias.
|
||||
ALTER TABLE dbo.Tra_DocumentosSolicitud ALTER COLUMN CveTipoTramite int NULL;
|
||||
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion ALTER COLUMN CveTipoTramite int NULL;
|
||||
|
||||
;WITH Versiones AS
|
||||
(
|
||||
SELECT
|
||||
CveDocumentoSolicitud,
|
||||
ROW_NUMBER() OVER
|
||||
(
|
||||
PARTITION BY CveFraccionamientoEtapa, CveTipoDocumento
|
||||
ORDER BY CveDocumentoSolicitud
|
||||
) AS NumeroVersion
|
||||
FROM dbo.Tra_DocumentosSolicitud
|
||||
WHERE EsActivo = 1
|
||||
)
|
||||
UPDATE D
|
||||
SET EsActivo = 0
|
||||
FROM dbo.Tra_DocumentosSolicitud AS D
|
||||
INNER JOIN Versiones AS V ON V.CveDocumentoSolicitud = D.CveDocumentoSolicitud
|
||||
WHERE V.NumeroVersion > 1;
|
||||
|
||||
-- Sólo se retiran copias de configuración cuyos valores son idénticos.
|
||||
;WITH Configuraciones AS
|
||||
(
|
||||
SELECT
|
||||
CveConfiguracionDocumento,
|
||||
ROW_NUMBER() OVER
|
||||
(
|
||||
PARTITION BY CveFraccionamientoEtapa, CveTipoDocumento
|
||||
ORDER BY CveConfiguracionDocumento
|
||||
) AS NumeroConfiguracion
|
||||
FROM dbo.Tra_SolicitudDocumentoConfiguracion
|
||||
)
|
||||
DELETE C
|
||||
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS C
|
||||
INNER JOIN Configuraciones AS O ON O.CveConfiguracionDocumento = C.CveConfiguracionDocumento
|
||||
WHERE O.NumeroConfiguracion > 1;
|
||||
|
||||
UPDATE dbo.Tra_DocumentosSolicitud
|
||||
SET CveTipoTramite = NULL
|
||||
WHERE CveTipoTramite IS NOT NULL;
|
||||
|
||||
UPDATE dbo.Tra_SolicitudDocumentoConfiguracion
|
||||
SET CveTipoTramite = NULL
|
||||
WHERE CveTipoTramite IS NOT NULL;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_DocumentosSolicitud')
|
||||
AND name = 'UX_Tra_DocumentosSolicitud_Etapa_TipoDocumento'
|
||||
)
|
||||
CREATE UNIQUE INDEX UX_Tra_DocumentosSolicitud_Etapa_TipoDocumento
|
||||
ON dbo.Tra_DocumentosSolicitud (CveFraccionamientoEtapa, CveTipoDocumento)
|
||||
WHERE EsActivo = 1;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion')
|
||||
AND name = 'UX_Tra_ConfiguracionDocumento_Etapa_Documento'
|
||||
)
|
||||
CREATE UNIQUE INDEX UX_Tra_ConfiguracionDocumento_Etapa_Documento
|
||||
ON dbo.Tra_SolicitudDocumentoConfiguracion (CveFraccionamientoEtapa, CveTipoDocumento);
|
||||
|
||||
IF EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = 'FK_Tra_DocumentosSolicitud_TipoTramite')
|
||||
ALTER TABLE dbo.Tra_DocumentosSolicitud DROP CONSTRAINT FK_Tra_DocumentosSolicitud_TipoTramite;
|
||||
|
||||
IF EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = 'FK_Tra_ConfiguracionDocumento_TipoTramite')
|
||||
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion DROP CONSTRAINT FK_Tra_ConfiguracionDocumento_TipoTramite;
|
||||
2276
Documentos_Compartidos_Etapa_Procedimientos_20261002.sql
Normal file
340
Documentos_Etapa_TipoTramite_Estructura_20261002.sql
Normal file
@@ -0,0 +1,340 @@
|
||||
/*
|
||||
Preparación únicamente; no ejecutado.
|
||||
Requiere Documentos_Etapa_Estructura_20260927.sql ya instalado.
|
||||
Instalar estructura, procedimientos y aplicación en una ventana coordinada.
|
||||
El ejecutor debe abrir una transacción, detenerse y revertir ante cualquier
|
||||
error, y confirmar sólo después de instalar y verificar todos los scripts.
|
||||
Los registros sin solicitud se conservan en todos los tipos activos aplicables.
|
||||
Se duplica únicamente la metadata: archivos, fechas, revisiones y versiones
|
||||
conservan su contenido. El identificador original queda en el menor tipo;
|
||||
no significa que ese tipo tenga prioridad funcional.
|
||||
GIS histórico 2 se normaliza al documento configurado 1016 / trámite 12.
|
||||
Las asignaciones directas existentes no vuelven a expandirse al reinstalar.
|
||||
*/
|
||||
SET NOCOUNT ON;
|
||||
|
||||
IF @@TRANCOUNT = 0
|
||||
THROW 51000, 'Abrir una transacción de instalación antes de ejecutar este script y revertirla ante cualquier error.', 1;
|
||||
|
||||
SELECT
|
||||
D.CveDocumentoSolicitud,
|
||||
D.CveFraccionamientoEtapa,
|
||||
CASE WHEN D.CveTipoDocumento = 2 THEN 1016 ELSE D.CveTipoDocumento END AS CveTipoDocumento,
|
||||
S.CveTipoTramite AS TipoSolicitud,
|
||||
CONVERT(int, NULL) AS TipoDirecto
|
||||
INTO #OrigenDocumentos
|
||||
FROM dbo.Tra_DocumentosSolicitud AS D
|
||||
LEFT JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = D.CveSolicitud;
|
||||
|
||||
IF COL_LENGTH('dbo.Tra_DocumentosSolicitud', 'CveTipoTramite') IS NOT NULL
|
||||
EXEC sys.sp_executesql N'
|
||||
UPDATE O
|
||||
SET TipoDirecto = D.CveTipoTramite,
|
||||
CveTipoDocumento = D.CveTipoDocumento
|
||||
FROM #OrigenDocumentos AS O
|
||||
INNER JOIN dbo.Tra_DocumentosSolicitud AS D ON D.CveDocumentoSolicitud = O.CveDocumentoSolicitud
|
||||
WHERE D.CveTipoTramite IS NOT NULL;';
|
||||
|
||||
SELECT DISTINCT
|
||||
O.CveDocumentoSolicitud,
|
||||
O.CveFraccionamientoEtapa,
|
||||
O.CveTipoDocumento,
|
||||
COALESCE(O.TipoDirecto, O.TipoSolicitud, T.CveTipoTramite) AS CveTipoTramite
|
||||
INTO #TiposDocumentos
|
||||
FROM #OrigenDocumentos AS O
|
||||
LEFT JOIN dbo.Tra_TiposTramiteDocumento AS T ON T.CveTipoDocumento = O.CveTipoDocumento
|
||||
AND T.EsActivo = 1
|
||||
AND O.TipoDirecto IS NULL
|
||||
AND O.TipoSolicitud IS NULL;
|
||||
|
||||
IF EXISTS (SELECT 1 FROM #TiposDocumentos WHERE CveTipoTramite IS NULL)
|
||||
BEGIN
|
||||
SELECT *
|
||||
FROM #TiposDocumentos
|
||||
WHERE CveTipoTramite IS NULL;
|
||||
THROW 51000, 'Hay documentos sin tipo de trámite aplicable. Resolver su correspondencia y revertir la instalación.', 1;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
D.CveConfiguracionDocumento,
|
||||
D.CveFraccionamientoEtapa,
|
||||
CASE WHEN D.CveTipoDocumento = 2 THEN 1016 ELSE D.CveTipoDocumento END AS CveTipoDocumento,
|
||||
S.CveTipoTramite AS TipoSolicitud,
|
||||
CONVERT(int, NULL) AS TipoDirecto
|
||||
INTO #OrigenConfiguraciones
|
||||
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS D
|
||||
LEFT JOIN dbo.Tra_Solicitudes AS S ON S.CveSolicitud = D.CveSolicitud;
|
||||
|
||||
IF COL_LENGTH('dbo.Tra_SolicitudDocumentoConfiguracion', 'CveTipoTramite') IS NOT NULL
|
||||
EXEC sys.sp_executesql N'
|
||||
UPDATE O
|
||||
SET TipoDirecto = D.CveTipoTramite,
|
||||
CveTipoDocumento = D.CveTipoDocumento
|
||||
FROM #OrigenConfiguraciones AS O
|
||||
INNER JOIN dbo.Tra_SolicitudDocumentoConfiguracion AS D ON D.CveConfiguracionDocumento = O.CveConfiguracionDocumento
|
||||
WHERE D.CveTipoTramite IS NOT NULL;';
|
||||
|
||||
SELECT DISTINCT
|
||||
O.CveConfiguracionDocumento,
|
||||
O.CveFraccionamientoEtapa,
|
||||
O.CveTipoDocumento,
|
||||
COALESCE(O.TipoDirecto, O.TipoSolicitud, T.CveTipoTramite) AS CveTipoTramite
|
||||
INTO #TiposConfiguraciones
|
||||
FROM #OrigenConfiguraciones AS O
|
||||
LEFT JOIN dbo.Tra_TiposTramiteDocumento AS T ON T.CveTipoDocumento = O.CveTipoDocumento
|
||||
AND T.EsActivo = 1
|
||||
AND O.TipoDirecto IS NULL
|
||||
AND O.TipoSolicitud IS NULL;
|
||||
|
||||
IF EXISTS (SELECT 1 FROM #TiposConfiguraciones WHERE CveTipoTramite IS NULL)
|
||||
BEGIN
|
||||
SELECT *
|
||||
FROM #TiposConfiguraciones
|
||||
WHERE CveTipoTramite IS NULL;
|
||||
THROW 51000, 'Hay configuraciones sin tipo de trámite aplicable. Resolver su correspondencia y revertir la instalación.', 1;
|
||||
END;
|
||||
|
||||
-- Nunca reemplazar una configuración específica con otra compartida.
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM #TiposConfiguraciones
|
||||
GROUP BY CveFraccionamientoEtapa, CveTipoTramite, CveTipoDocumento
|
||||
HAVING COUNT(*) > 1
|
||||
)
|
||||
BEGIN
|
||||
SELECT CveFraccionamientoEtapa, CveTipoTramite, CveTipoDocumento
|
||||
FROM #TiposConfiguraciones
|
||||
GROUP BY CveFraccionamientoEtapa, CveTipoTramite, CveTipoDocumento
|
||||
HAVING COUNT(*) > 1;
|
||||
THROW 51000, 'Hay configuraciones que convergen al mismo destino. Resolverlas conservando sus valores antes de instalar.', 1;
|
||||
END;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM #TiposDocumentos AS T
|
||||
INNER JOIN dbo.Tra_DocumentosSolicitud AS D ON D.CveDocumentoSolicitud = T.CveDocumentoSolicitud
|
||||
WHERE D.EsActivo = 1
|
||||
GROUP BY T.CveFraccionamientoEtapa, T.CveTipoTramite, T.CveTipoDocumento
|
||||
HAVING COUNT(*) > 1
|
||||
)
|
||||
THROW 51000, 'Hay versiones vigentes que convergen al mismo destino. Resolver su vigencia antes de instalar.', 1;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_DocumentosSolicitud')
|
||||
AND name = 'UX_Tra_DocumentosSolicitud_Etapa_TipoDocumento'
|
||||
)
|
||||
DROP INDEX UX_Tra_DocumentosSolicitud_Etapa_TipoDocumento ON dbo.Tra_DocumentosSolicitud;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion')
|
||||
AND name = 'UX_Tra_ConfiguracionDocumento_Solicitud'
|
||||
)
|
||||
DROP INDEX UX_Tra_ConfiguracionDocumento_Solicitud ON dbo.Tra_SolicitudDocumentoConfiguracion;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion')
|
||||
AND name = 'UX_Tra_ConfiguracionDocumento_Etapa'
|
||||
)
|
||||
DROP INDEX UX_Tra_ConfiguracionDocumento_Etapa ON dbo.Tra_SolicitudDocumentoConfiguracion;
|
||||
|
||||
IF COL_LENGTH('dbo.Tra_DocumentosSolicitud', 'CveTipoTramite') IS NULL
|
||||
ALTER TABLE dbo.Tra_DocumentosSolicitud ADD CveTipoTramite int NULL;
|
||||
|
||||
-- El SQL dinámico compila después de agregar la columna.
|
||||
EXEC sys.sp_executesql N'
|
||||
;WITH DestinoOriginal AS
|
||||
(
|
||||
SELECT CveDocumentoSolicitud, MIN(CveTipoTramite) AS CveTipoTramite
|
||||
FROM #TiposDocumentos
|
||||
GROUP BY CveDocumentoSolicitud
|
||||
)
|
||||
UPDATE D
|
||||
SET CveTipoTramite = T.CveTipoTramite,
|
||||
CveTipoDocumento = T.CveTipoDocumento
|
||||
FROM dbo.Tra_DocumentosSolicitud AS D
|
||||
INNER JOIN DestinoOriginal AS O ON O.CveDocumentoSolicitud = D.CveDocumentoSolicitud
|
||||
INNER JOIN #TiposDocumentos AS T ON T.CveDocumentoSolicitud = O.CveDocumentoSolicitud
|
||||
AND T.CveTipoTramite = O.CveTipoTramite;
|
||||
|
||||
INSERT INTO dbo.Tra_DocumentosSolicitud
|
||||
(
|
||||
CveFraccionamientoEtapa,
|
||||
CveTipoDocumento,
|
||||
CveTipoTramite,
|
||||
CveSolicitud,
|
||||
NombreArchivo,
|
||||
NombreArchivoFisico,
|
||||
RutaArchivo,
|
||||
ContentType,
|
||||
TamanoBytes,
|
||||
ComentarioCliente,
|
||||
ComentarioAdministrativo,
|
||||
EsAprobado,
|
||||
CveUsuarioCarga,
|
||||
CveUsuarioRevisa,
|
||||
FechaRevision,
|
||||
FechaAlta,
|
||||
UltimaNota,
|
||||
FechaDocumento,
|
||||
FechaVencimiento,
|
||||
EsActivo,
|
||||
Vencido
|
||||
)
|
||||
SELECT
|
||||
T.CveFraccionamientoEtapa,
|
||||
T.CveTipoDocumento,
|
||||
T.CveTipoTramite,
|
||||
D.CveSolicitud,
|
||||
D.NombreArchivo,
|
||||
D.NombreArchivoFisico,
|
||||
D.RutaArchivo,
|
||||
D.ContentType,
|
||||
D.TamanoBytes,
|
||||
D.ComentarioCliente,
|
||||
D.ComentarioAdministrativo,
|
||||
D.EsAprobado,
|
||||
D.CveUsuarioCarga,
|
||||
D.CveUsuarioRevisa,
|
||||
D.FechaRevision,
|
||||
D.FechaAlta,
|
||||
D.UltimaNota,
|
||||
D.FechaDocumento,
|
||||
D.FechaVencimiento,
|
||||
D.EsActivo,
|
||||
D.Vencido
|
||||
FROM dbo.Tra_DocumentosSolicitud AS D
|
||||
INNER JOIN #TiposDocumentos AS T ON T.CveDocumentoSolicitud = D.CveDocumentoSolicitud
|
||||
WHERE T.CveTipoTramite <> D.CveTipoTramite;
|
||||
|
||||
ALTER TABLE dbo.Tra_DocumentosSolicitud ALTER COLUMN CveTipoTramite int NOT NULL;';
|
||||
|
||||
IF COL_LENGTH('dbo.Tra_SolicitudDocumentoConfiguracion', 'CveTipoTramite') IS NULL
|
||||
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion ADD CveTipoTramite int NULL;
|
||||
|
||||
-- El SQL dinámico compila después de agregar la columna.
|
||||
EXEC sys.sp_executesql N'
|
||||
;WITH DestinoOriginal AS
|
||||
(
|
||||
SELECT CveConfiguracionDocumento, MIN(CveTipoTramite) AS CveTipoTramite
|
||||
FROM #TiposConfiguraciones
|
||||
GROUP BY CveConfiguracionDocumento
|
||||
)
|
||||
UPDATE D
|
||||
SET CveTipoTramite = T.CveTipoTramite,
|
||||
CveTipoDocumento = T.CveTipoDocumento
|
||||
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS D
|
||||
INNER JOIN DestinoOriginal AS O ON O.CveConfiguracionDocumento = D.CveConfiguracionDocumento
|
||||
INNER JOIN #TiposConfiguraciones AS T ON T.CveConfiguracionDocumento = O.CveConfiguracionDocumento
|
||||
AND T.CveTipoTramite = O.CveTipoTramite;
|
||||
|
||||
INSERT INTO dbo.Tra_SolicitudDocumentoConfiguracion
|
||||
(
|
||||
CveFraccionamientoEtapa,
|
||||
CveTipoDocumento,
|
||||
CveTipoTramite,
|
||||
CveSolicitud,
|
||||
EsRequerido,
|
||||
EsCliente,
|
||||
TieneVigencia,
|
||||
Orden,
|
||||
EsActivo
|
||||
)
|
||||
SELECT
|
||||
T.CveFraccionamientoEtapa,
|
||||
T.CveTipoDocumento,
|
||||
T.CveTipoTramite,
|
||||
D.CveSolicitud,
|
||||
D.EsRequerido,
|
||||
D.EsCliente,
|
||||
D.TieneVigencia,
|
||||
D.Orden,
|
||||
D.EsActivo
|
||||
FROM dbo.Tra_SolicitudDocumentoConfiguracion AS D
|
||||
INNER JOIN #TiposConfiguraciones AS T ON T.CveConfiguracionDocumento = D.CveConfiguracionDocumento
|
||||
WHERE T.CveTipoTramite <> D.CveTipoTramite;
|
||||
|
||||
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion ALTER COLUMN CveTipoTramite int NOT NULL;';
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_DocumentosSolicitud')
|
||||
AND name = 'UX_Tra_DocumentosSolicitud_Etapa_Tramite_Documento'
|
||||
)
|
||||
EXEC sys.sp_executesql N'
|
||||
CREATE UNIQUE INDEX UX_Tra_DocumentosSolicitud_Etapa_Tramite_Documento
|
||||
ON dbo.Tra_DocumentosSolicitud (CveFraccionamientoEtapa, CveTipoTramite, CveTipoDocumento)
|
||||
WHERE EsActivo = 1;';
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion')
|
||||
AND name = 'UX_Tra_ConfiguracionDocumento_Etapa_Tramite_Documento'
|
||||
)
|
||||
EXEC sys.sp_executesql N'
|
||||
CREATE UNIQUE INDEX UX_Tra_ConfiguracionDocumento_Etapa_Tramite_Documento
|
||||
ON dbo.Tra_SolicitudDocumentoConfiguracion
|
||||
(CveFraccionamientoEtapa, CveTipoTramite, CveTipoDocumento);';
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = 'FK_Tra_DocumentosSolicitud_TipoTramite')
|
||||
EXEC sys.sp_executesql N'
|
||||
ALTER TABLE dbo.Tra_DocumentosSolicitud WITH CHECK
|
||||
ADD CONSTRAINT FK_Tra_DocumentosSolicitud_TipoTramite
|
||||
FOREIGN KEY (CveTipoTramite) REFERENCES dbo.Tra_TiposTramite (CveTipoTramite);';
|
||||
|
||||
IF NOT EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = 'FK_Tra_ConfiguracionDocumento_TipoTramite')
|
||||
EXEC sys.sp_executesql N'
|
||||
ALTER TABLE dbo.Tra_SolicitudDocumentoConfiguracion WITH CHECK
|
||||
ADD CONSTRAINT FK_Tra_ConfiguracionDocumento_TipoTramite
|
||||
FOREIGN KEY (CveTipoTramite) REFERENCES dbo.Tra_TiposTramite (CveTipoTramite);';
|
||||
|
||||
-- CveSolicitud se conserva sólo como referencia histórica, sin dependencia relacional.
|
||||
DECLARE @QuitarRelaciones nvarchar(max) = N'';
|
||||
SELECT @QuitarRelaciones = @QuitarRelaciones
|
||||
+ N'ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(F.parent_object_id))
|
||||
+ N'.' + QUOTENAME(OBJECT_NAME(F.parent_object_id))
|
||||
+ N' DROP CONSTRAINT ' + QUOTENAME(F.name) + N';'
|
||||
FROM sys.foreign_keys AS F
|
||||
WHERE F.parent_object_id IN
|
||||
(OBJECT_ID('dbo.Tra_DocumentosSolicitud'), OBJECT_ID('dbo.Tra_SolicitudDocumentoConfiguracion'))
|
||||
AND F.referenced_object_id = OBJECT_ID('dbo.Tra_Solicitudes');
|
||||
IF @QuitarRelaciones <> N''
|
||||
EXEC sys.sp_executesql @QuitarRelaciones;
|
||||
|
||||
INSERT INTO dbo.Bit_Campos
|
||||
(CveTabla, NombreCampoSQL, NombreMostrar, MostrarEnBitacora, TipoDatoSQL, Activo)
|
||||
SELECT
|
||||
T.CveTabla,
|
||||
'CveTipoTramite',
|
||||
'Tipo de trámite',
|
||||
1,
|
||||
'int',
|
||||
1
|
||||
FROM dbo.Bit_Tablas AS T
|
||||
WHERE T.NombreTablaSQL IN ('Tra_DocumentosSolicitud', 'Tra_SolicitudDocumentoConfiguracion')
|
||||
AND NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Bit_Campos AS C
|
||||
WHERE C.CveTabla = T.CveTabla
|
||||
AND C.NombreCampoSQL = 'CveTipoTramite'
|
||||
);
|
||||
|
||||
DROP TABLE #TiposDocumentos;
|
||||
DROP TABLE #OrigenDocumentos;
|
||||
DROP TABLE #TiposConfiguraciones;
|
||||
DROP TABLE #OrigenConfiguraciones;
|
||||
2018
Documentos_Etapa_TipoTramite_Procedimientos_20261002.sql
Normal file
110
GIS_Capas_Configuracion_20261002.sql
Normal file
@@ -0,0 +1,110 @@
|
||||
-- Preparado para revisión. La instalación requiere autorización independiente.
|
||||
-- La configuración se conserva por etapa y nombre de capa del archivo original.
|
||||
IF OBJECT_ID(N'dbo.FraccionamientosEtapasGISCapas', N'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.FraccionamientosEtapasGISCapas
|
||||
(
|
||||
CveFraccionamientoEtapa int NOT NULL,
|
||||
NombreCapa nvarchar(250) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
TipoCapa nvarchar(20) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
Color nvarchar(7) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
EsVisible bit NOT NULL,
|
||||
CveUsuarioModifica int NOT NULL,
|
||||
FechaModificacion datetime2 NOT NULL,
|
||||
CONSTRAINT PK_FraccionamientosEtapasGISCapas
|
||||
PRIMARY KEY (CveFraccionamientoEtapa, NombreCapa),
|
||||
CONSTRAINT FK_FraccionamientosEtapasGISCapas_Etapa
|
||||
FOREIGN KEY (CveFraccionamientoEtapa)
|
||||
REFERENCES dbo.FraccionamientosEtapas (CveFraccionamientoEtapa),
|
||||
CONSTRAINT CK_FraccionamientosEtapasGISCapas_Tipo
|
||||
CHECK (TipoCapa IN (N'Agua', N'Drenaje', N'Lotificacion', N'Pozos', N'Otros')),
|
||||
CONSTRAINT CK_FraccionamientosEtapasGISCapas_Color
|
||||
CHECK (LEN(Color) = 7 AND Color COLLATE Latin1_General_BIN2
|
||||
LIKE N'#[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]')
|
||||
);
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Fraccionamientos_EtapaGISCapasList
|
||||
@CveFraccionamientoEtapa int,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
BEGIN TRY
|
||||
SELECT NombreCapa, TipoCapa, Color, EsVisible
|
||||
FROM dbo.FraccionamientosEtapasGISCapas
|
||||
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'No fue posible consultar la configuración de capas GIS.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(), '; Procedimiento: ', ERROR_PROCEDURE(),
|
||||
'; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Fraccionamientos_EtapaGISCapasSave
|
||||
@CveFraccionamientoEtapa int,
|
||||
@NombreCapa nvarchar(250),
|
||||
@TipoCapa nvarchar(20),
|
||||
@Color nvarchar(7),
|
||||
@EsVisible bit,
|
||||
@CveUsuarioEjecuta int,
|
||||
@ErrorMostrar varchar(max) OUTPUT,
|
||||
@ErrorTipo int OUTPUT,
|
||||
@Return bit OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
|
||||
BEGIN TRY
|
||||
-- El servicio mantiene la transacción ambiental para proteger este upsert.
|
||||
UPDATE dbo.FraccionamientosEtapasGISCapas WITH (UPDLOCK, HOLDLOCK)
|
||||
SET TipoCapa = @TipoCapa,
|
||||
Color = @Color,
|
||||
EsVisible = @EsVisible,
|
||||
CveUsuarioModifica = @CveUsuarioEjecuta,
|
||||
FechaModificacion = SYSDATETIME()
|
||||
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
AND NombreCapa = @NombreCapa;
|
||||
|
||||
IF @@ROWCOUNT = 0
|
||||
BEGIN
|
||||
INSERT INTO dbo.FraccionamientosEtapasGISCapas
|
||||
(
|
||||
CveFraccionamientoEtapa, NombreCapa, TipoCapa, Color,
|
||||
EsVisible, CveUsuarioModifica, FechaModificacion
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@CveFraccionamientoEtapa, @NombreCapa, @TipoCapa, @Color,
|
||||
@EsVisible, @CveUsuarioEjecuta, SYSDATETIME()
|
||||
);
|
||||
END;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SELECT
|
||||
@ErrorMostrar = 'No fue posible guardar la configuración de la capa GIS.',
|
||||
@ErrorTipo = 1,
|
||||
@Return = 0;
|
||||
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
||||
'Número: ', ERROR_NUMBER(), '; Procedimiento: ', ERROR_PROCEDURE(),
|
||||
'; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
142
Migracion_NombresDocumentos_20261003.csv
Normal file
@@ -0,0 +1,142 @@
|
||||
"CveDocumentoSolicitud","CveFraccionamientoEtapa","CveTipoDocumento","EsActivo","NombreArchivo","NombreAnterior","RutaAnterior","NombreNuevo","RutaNueva","TamanoBytes","SHA256"
|
||||
"3","1022","1040","True","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
|
||||
"4","1022","1045","True","BORRADOR EDISA.docx","doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin","Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin","doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx","Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx","16889","3074B0379B55A18B47EB06A4BAE47985B155CAC0583DE78B651988C7599A3C77"
|
||||
"5","1022","1046","True","ACTIVIDADES LETYYYY.docx","doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b.bin","Clientes/1006/Etapas/1022/doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b.bin","doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b-ACTIVIDADES LETYYYY.docx","Clientes/1006/Etapas/1022/doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b-ACTIVIDADES LETYYYY.docx","19908","8A139074FE52426D3FE0DCE395CCEDB031A03FB33462E2C989F695F14481C11D"
|
||||
"6","1022","1051","True","Recibo-Ago (1).pdf","doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791.bin","Clientes/1006/Etapas/1022/doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791.bin","doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791-Recibo-Ago (1).pdf","Clientes/1006/Etapas/1022/doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791-Recibo-Ago (1).pdf","814619","86017314865C2064DDBA15CBC1318643BC2F2E0C254A3D274CEE3C17B81E9094"
|
||||
"7","1022","1057","True","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
|
||||
"8","1022","1053","True","Etapa1_10_lotes.gis","doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c.bin","Clientes/1006/Etapas/1022/doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c.bin","doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c-Etapa1_10_lotes.gis","Clientes/1006/Etapas/1022/doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c-Etapa1_10_lotes.gis","8256","5271A9F0C57CF648101CFCDC4CB6635CB28FA2C637DECD4C60195751E8959EEF"
|
||||
"9","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"10","1024","1053","False","02_Copia_escrituras.pdf","doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7.bin","Clientes/4/Etapas/1024/doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7.bin","doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7-02_Copia_escrituras.pdf","Clientes/4/Etapas/1024/doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7-02_Copia_escrituras.pdf","44497","DE63A4F755D5199D1EB98A024C03627B1AB698403481CE8C6BC5D92E7E8746CC"
|
||||
"11","1024","1046","False","04_Dictamen_uso_suelo.pdf","doc-1024-1046-168182c76cb843cbb3a2aff986bff057.bin","Clientes/4/Etapas/1024/doc-1024-1046-168182c76cb843cbb3a2aff986bff057.bin","doc-1024-1046-168182c76cb843cbb3a2aff986bff057-04_Dictamen_uso_suelo.pdf","Clientes/4/Etapas/1024/doc-1024-1046-168182c76cb843cbb3a2aff986bff057-04_Dictamen_uso_suelo.pdf","44359","AE0069AEC8DDBE09071581126BEA3272BC37A4D758A764BF8A05D58755F4BC28"
|
||||
"12","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"13","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"14","1024","1079","False","08_Constancia_no_adeudo_Agua_Hermosillo.pdf","doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5.bin","Clientes/4/Etapas/1024/doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5.bin","doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5-08_Constancia_no_adeudo_Agua_Hermosillo.pdf","Clientes/4/Etapas/1024/doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5-08_Constancia_no_adeudo_Agua_Hermosillo.pdf","44351","04CD6B0F2739837F7BD711819D031FB73BACD7675B752906EFE283F46A7C3006"
|
||||
"15","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"16","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"17","1024","1053","True","02_Copia_escrituras.pdf","doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117.bin","Clientes/4/Etapas/1024/doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117.bin","doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117-02_Copia_escrituras.pdf","Clientes/4/Etapas/1024/doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117-02_Copia_escrituras.pdf","44497","DE63A4F755D5199D1EB98A024C03627B1AB698403481CE8C6BC5D92E7E8746CC"
|
||||
"18","1024","1046","True","04_Dictamen_uso_suelo.pdf","doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59.bin","Clientes/4/Etapas/1024/doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59.bin","doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59-04_Dictamen_uso_suelo.pdf","Clientes/4/Etapas/1024/doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59-04_Dictamen_uso_suelo.pdf","44359","AE0069AEC8DDBE09071581126BEA3272BC37A4D758A764BF8A05D58755F4BC28"
|
||||
"19","1024","1069","True","05_Carta_poder_representante_legal.pdf","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"20","1024","1040","True","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"21","1024","1079","True","08_Constancia_no_adeudo_Agua_Hermosillo.pdf","doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c.bin","Clientes/4/Etapas/1024/doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c.bin","doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c-08_Constancia_no_adeudo_Agua_Hermosillo.pdf","Clientes/4/Etapas/1024/doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c-08_Constancia_no_adeudo_Agua_Hermosillo.pdf","44351","04CD6B0F2739837F7BD711819D031FB73BACD7675B752906EFE283F46A7C3006"
|
||||
"22","1024","1034","True","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"23","1024","1037","True","10_Comprobante_domicilio.pdf","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"24","1024","1082","False","11_Cedula_RFC.pdf","doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788.bin","Clientes/4/Etapas/1024/doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788.bin","doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788-11_Cedula_RFC.pdf","Clientes/4/Etapas/1024/doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788-11_Cedula_RFC.pdf","44347","75D97258546FDD49567B605CA676CD5DF97F539A7134F9A977BE14D9FA48F912"
|
||||
"25","1024","1080","False","12_Autorizaciones_CIDUE.pdf","doc-1024-1080-2337d1e8ab91435891a9332b5fd58262.bin","Clientes/4/Etapas/1024/doc-1024-1080-2337d1e8ab91435891a9332b5fd58262.bin","doc-1024-1080-2337d1e8ab91435891a9332b5fd58262-12_Autorizaciones_CIDUE.pdf","Clientes/4/Etapas/1024/doc-1024-1080-2337d1e8ab91435891a9332b5fd58262-12_Autorizaciones_CIDUE.pdf","44232","B68667D2A258EC28F3445017A42014A1CDEC4AD6686AE5FB4AD15B275B1D4E7E"
|
||||
"26","1024","1045","False","Croquis.png","doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin","Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin","doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png","Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png","984403","3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632"
|
||||
"27","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"28","1024","1082","True","11_Cedula_RFC.pdf","doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c.bin","Clientes/4/Etapas/1024/doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c.bin","doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c-11_Cedula_RFC.pdf","Clientes/4/Etapas/1024/doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c-11_Cedula_RFC.pdf","44347","75D97258546FDD49567B605CA676CD5DF97F539A7134F9A977BE14D9FA48F912"
|
||||
"29","1024","1080","True","12_Autorizaciones_CIDUE.pdf","doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2.bin","Clientes/4/Etapas/1024/doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2.bin","doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2-12_Autorizaciones_CIDUE.pdf","Clientes/4/Etapas/1024/doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2-12_Autorizaciones_CIDUE.pdf","44232","B68667D2A258EC28F3445017A42014A1CDEC4AD6686AE5FB4AD15B275B1D4E7E"
|
||||
"30","1024","1045","True","Croquis.png","doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin","Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin","doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png","Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png","984403","3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632"
|
||||
"31","1024","1057","True","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"32","1024","1051","True","01_Oficio_solicitud_obras_necesarias.pdf","doc-1024-1051-4037762f536045d59be5d818e2de6481.bin","Clientes/4/Etapas/1024/doc-1024-1051-4037762f536045d59be5d818e2de6481.bin","doc-1024-1051-4037762f536045d59be5d818e2de6481-01_Oficio_solicitud_obras_necesarias.pdf","Clientes/4/Etapas/1024/doc-1024-1051-4037762f536045d59be5d818e2de6481-01_Oficio_solicitud_obras_necesarias.pdf","44555","DDBDF6829D3A8F8587E42A768C32EF08AEE89848001C4E9B19EEE24480B75AB8"
|
||||
"33","1028","1053","True","02_Copia_escrituras.pdf","doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb.bin","Clientes/4/Etapas/1028/doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb.bin","doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb-02_Copia_escrituras.pdf","Clientes/4/Etapas/1028/doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb-02_Copia_escrituras.pdf","44497","DE63A4F755D5199D1EB98A024C03627B1AB698403481CE8C6BC5D92E7E8746CC"
|
||||
"34","1028","1046","True","04_Dictamen_uso_suelo.pdf","doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a.bin","Clientes/4/Etapas/1028/doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a.bin","doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a-04_Dictamen_uso_suelo.pdf","Clientes/4/Etapas/1028/doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a-04_Dictamen_uso_suelo.pdf","44359","AE0069AEC8DDBE09071581126BEA3272BC37A4D758A764BF8A05D58755F4BC28"
|
||||
"35","1028","1069","True","05_Carta_poder_representante_legal.pdf","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"36","1028","1040","True","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"37","1028","1079","True","08_Constancia_no_adeudo_Agua_Hermosillo.pdf","doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733.bin","Clientes/4/Etapas/1028/doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733.bin","doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733-08_Constancia_no_adeudo_Agua_Hermosillo.pdf","Clientes/4/Etapas/1028/doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733-08_Constancia_no_adeudo_Agua_Hermosillo.pdf","44351","04CD6B0F2739837F7BD711819D031FB73BACD7675B752906EFE283F46A7C3006"
|
||||
"38","1028","1034","True","09_Acta_Constitutiva_empresa.pdf","doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"39","1028","1037","True","10_Comprobante_domicilio.pdf","doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"40","1028","1082","True","11_Cedula_RFC.pdf","doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338.bin","Clientes/4/Etapas/1028/doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338.bin","doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338-11_Cedula_RFC.pdf","Clientes/4/Etapas/1028/doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338-11_Cedula_RFC.pdf","44347","75D97258546FDD49567B605CA676CD5DF97F539A7134F9A977BE14D9FA48F912"
|
||||
"41","1028","1080","True","12_Autorizaciones_CIDUE.pdf","doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470.bin","Clientes/4/Etapas/1028/doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470.bin","doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470-12_Autorizaciones_CIDUE.pdf","Clientes/4/Etapas/1028/doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470-12_Autorizaciones_CIDUE.pdf","44232","B68667D2A258EC28F3445017A42014A1CDEC4AD6686AE5FB4AD15B275B1D4E7E"
|
||||
"42","1028","1045","True","Croquis.png","doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin","Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin","doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png","Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png","984403","3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632"
|
||||
"43","1028","1057","True","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"44","1028","1051","True","01_Oficio_solicitud_obras_necesarias.pdf","doc-1028-1051-90d0c12832f9428abb0ac645be0c7156.bin","Clientes/4/Etapas/1028/doc-1028-1051-90d0c12832f9428abb0ac645be0c7156.bin","doc-1028-1051-90d0c12832f9428abb0ac645be0c7156-01_Oficio_solicitud_obras_necesarias.pdf","Clientes/4/Etapas/1028/doc-1028-1051-90d0c12832f9428abb0ac645be0c7156-01_Oficio_solicitud_obras_necesarias.pdf","44555","DDBDF6829D3A8F8587E42A768C32EF08AEE89848001C4E9B19EEE24480B75AB8"
|
||||
"45","1022","1040","False","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
|
||||
"46","1022","1040","False","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
|
||||
"47","1022","1040","False","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
|
||||
"48","1022","1040","False","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
|
||||
"49","1022","1040","False","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
|
||||
"50","1022","1040","False","VL103M user manual 20230921.pdf","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin","doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf","1146632","3C097C53A81FE7E60ECFB07A9FBD2163E8DB5DE7444050E0EC20ADAFCB7FBA3F"
|
||||
"51","1022","1045","False","BORRADOR EDISA.docx","doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin","Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin","doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx","Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx","16889","3074B0379B55A18B47EB06A4BAE47985B155CAC0583DE78B651988C7599A3C77"
|
||||
"52","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
|
||||
"53","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
|
||||
"54","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
|
||||
"55","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
|
||||
"56","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
|
||||
"57","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
|
||||
"58","1022","1057","False","65007.jpeg","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin","doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg","128129","0F80A31813107978A32D13201884611FB35347E738BFDC4538D1ECE97FAD2081"
|
||||
"59","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"60","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"61","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"62","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin","doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"63","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"64","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"65","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"66","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"67","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin","doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"68","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"69","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"70","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"71","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"72","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"73","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin","doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"74","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"75","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"76","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"77","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin","doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"78","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"79","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"80","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"81","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin","doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"82","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"83","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"84","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"85","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"86","1024","1069","False","05_Carta_poder_representante_legal.pdf","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin","doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"87","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"88","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"89","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"90","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"91","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"92","1024","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin","doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"93","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"94","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"95","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"96","1024","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin","doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"97","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"98","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"99","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"100","1024","1037","False","10_Comprobante_domicilio.pdf","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin","doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"101","1024","1045","False","Croquis.png","doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin","Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin","doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png","Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png","984403","3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632"
|
||||
"102","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"103","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"104","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"105","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"106","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"107","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"108","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin","doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"109","1024","1045","False","Croquis.png","doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin","Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin","doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png","Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png","984403","3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632"
|
||||
"110","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"111","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"112","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"113","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"114","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"115","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"116","1024","1057","False","Identificación Oficial.jpg","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin","doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"117","1028","1069","False","05_Carta_poder_representante_legal.pdf","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"118","1028","1069","False","05_Carta_poder_representante_legal.pdf","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"119","1028","1069","False","05_Carta_poder_representante_legal.pdf","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"120","1028","1069","False","05_Carta_poder_representante_legal.pdf","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"121","1028","1069","False","05_Carta_poder_representante_legal.pdf","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin","doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf","44650","A40E9C9A5FBA9E40B133993051C39288D8A498CC71EBCFB354C2C9D73FA064F1"
|
||||
"122","1028","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"123","1028","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"124","1028","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"125","1028","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"126","1028","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"127","1028","1040","False","06_Constancia_no_adeudo_tesoreria.pdf","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin","doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf","44515","4E2ADB80E976362F5A48D6D75FB421F193E2FB30AEE76F46132DB26BAD5CBF0F"
|
||||
"128","1028","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"129","1028","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"130","1028","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"131","1028","1034","False","09_Acta_Constitutiva_empresa.pdf","doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin","doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf","44281","4461F94E3DCBE9BCF0FB45C099E3F87B969AC59BAB62E6CD7EA97133A5CD33A3"
|
||||
"132","1028","1037","False","10_Comprobante_domicilio.pdf","doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"133","1028","1037","False","10_Comprobante_domicilio.pdf","doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"134","1028","1037","False","10_Comprobante_domicilio.pdf","doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"135","1028","1037","False","10_Comprobante_domicilio.pdf","doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin","doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf","44184","0222D8B303F2C0DA21863CA16BC160F2564963C14238009847C52C10526917D0"
|
||||
"136","1028","1045","False","Croquis.png","doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin","Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin","doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png","Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png","984403","3A507595006CDBB8A59830E0B9634D11DCB85A4CBED1F2A5F35023043947E632"
|
||||
"137","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"138","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"139","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"140","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"141","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"142","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
"143","1028","1057","False","Identificación Oficial.jpg","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin","doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg","55724","A5915340A4600EE8988CEDF4080E6828ED42FCD2DE432788102A328977A83076"
|
||||
|
243
Migracion_NombresDocumentos_20261003.sql
Normal file
@@ -0,0 +1,243 @@
|
||||
-- Migración de nombres físicos autorizada el 2026-10-03.
|
||||
-- Requiere copias verificadas con el inventario CSV antes de ejecutarse.
|
||||
-- Respaldo: Respaldo_NombresDocumentos_20261003.
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
DECLARE @Mapeo TABLE
|
||||
(
|
||||
CveDocumentoSolicitud int PRIMARY KEY,
|
||||
NombreAnterior varchar(255) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
RutaAnterior varchar(1000) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
NombreNuevo varchar(255) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
||||
RutaNueva varchar(1000) COLLATE Modern_Spanish_CS_AS NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO @Mapeo
|
||||
(CveDocumentoSolicitud, NombreAnterior, RutaAnterior, NombreNuevo, RutaNueva)
|
||||
VALUES
|
||||
(3, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
|
||||
(4, N'doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin', N'Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin', N'doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx', N'Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx'),
|
||||
(5, N'doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b.bin', N'Clientes/1006/Etapas/1022/doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b.bin', N'doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b-ACTIVIDADES LETYYYY.docx', N'Clientes/1006/Etapas/1022/doc-1022-1046-c3b1e27e553449a7b5a4545222b63b0b-ACTIVIDADES LETYYYY.docx'),
|
||||
(6, N'doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791.bin', N'Clientes/1006/Etapas/1022/doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791.bin', N'doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791-Recibo-Ago (1).pdf', N'Clientes/1006/Etapas/1022/doc-1022-1051-b0ea49a4b15241e5a6010a8b890b9791-Recibo-Ago (1).pdf'),
|
||||
(7, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
|
||||
(8, N'doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c.bin', N'Clientes/1006/Etapas/1022/doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c.bin', N'doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c-Etapa1_10_lotes.gis', N'Clientes/1006/Etapas/1022/doc-1022-1053-53864978166e40c2b3c7e06dd7c6333c-Etapa1_10_lotes.gis'),
|
||||
(9, N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(10, N'doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7.bin', N'Clientes/4/Etapas/1024/doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7.bin', N'doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7-02_Copia_escrituras.pdf', N'Clientes/4/Etapas/1024/doc-1024-1053-4026eac60fde4d57aca2ed30325c7aa7-02_Copia_escrituras.pdf'),
|
||||
(11, N'doc-1024-1046-168182c76cb843cbb3a2aff986bff057.bin', N'Clientes/4/Etapas/1024/doc-1024-1046-168182c76cb843cbb3a2aff986bff057.bin', N'doc-1024-1046-168182c76cb843cbb3a2aff986bff057-04_Dictamen_uso_suelo.pdf', N'Clientes/4/Etapas/1024/doc-1024-1046-168182c76cb843cbb3a2aff986bff057-04_Dictamen_uso_suelo.pdf'),
|
||||
(12, N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf'),
|
||||
(13, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(14, N'doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5.bin', N'Clientes/4/Etapas/1024/doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5.bin', N'doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5-08_Constancia_no_adeudo_Agua_Hermosillo.pdf', N'Clientes/4/Etapas/1024/doc-1024-1079-b838d1c6a81948a0ad275d93dca3b0f5-08_Constancia_no_adeudo_Agua_Hermosillo.pdf'),
|
||||
(15, N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(16, N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf'),
|
||||
(17, N'doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117.bin', N'Clientes/4/Etapas/1024/doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117.bin', N'doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117-02_Copia_escrituras.pdf', N'Clientes/4/Etapas/1024/doc-1024-1053-393eb44b58d24c128d4b5cc5090cc117-02_Copia_escrituras.pdf'),
|
||||
(18, N'doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59.bin', N'Clientes/4/Etapas/1024/doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59.bin', N'doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59-04_Dictamen_uso_suelo.pdf', N'Clientes/4/Etapas/1024/doc-1024-1046-746dbd30e6f343338537a9e5e0b3ee59-04_Dictamen_uso_suelo.pdf'),
|
||||
(19, N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf'),
|
||||
(20, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(21, N'doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c.bin', N'Clientes/4/Etapas/1024/doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c.bin', N'doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c-08_Constancia_no_adeudo_Agua_Hermosillo.pdf', N'Clientes/4/Etapas/1024/doc-1024-1079-b25d1e7c30b0443cb66423c56c45c46c-08_Constancia_no_adeudo_Agua_Hermosillo.pdf'),
|
||||
(22, N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(23, N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf'),
|
||||
(24, N'doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788.bin', N'Clientes/4/Etapas/1024/doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788.bin', N'doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788-11_Cedula_RFC.pdf', N'Clientes/4/Etapas/1024/doc-1024-1082-02f16c7d84fb4781ae5f7e5280422788-11_Cedula_RFC.pdf'),
|
||||
(25, N'doc-1024-1080-2337d1e8ab91435891a9332b5fd58262.bin', N'Clientes/4/Etapas/1024/doc-1024-1080-2337d1e8ab91435891a9332b5fd58262.bin', N'doc-1024-1080-2337d1e8ab91435891a9332b5fd58262-12_Autorizaciones_CIDUE.pdf', N'Clientes/4/Etapas/1024/doc-1024-1080-2337d1e8ab91435891a9332b5fd58262-12_Autorizaciones_CIDUE.pdf'),
|
||||
(26, N'doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin', N'Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin', N'doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png', N'Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png'),
|
||||
(27, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
|
||||
(28, N'doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c.bin', N'Clientes/4/Etapas/1024/doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c.bin', N'doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c-11_Cedula_RFC.pdf', N'Clientes/4/Etapas/1024/doc-1024-1082-d9c8ba3f888249ae918d7dffbbf6764c-11_Cedula_RFC.pdf'),
|
||||
(29, N'doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2.bin', N'Clientes/4/Etapas/1024/doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2.bin', N'doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2-12_Autorizaciones_CIDUE.pdf', N'Clientes/4/Etapas/1024/doc-1024-1080-f691bac55afb4c6084d21a7d2ab8f3a2-12_Autorizaciones_CIDUE.pdf'),
|
||||
(30, N'doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin', N'Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin', N'doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png', N'Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png'),
|
||||
(31, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
|
||||
(32, N'doc-1024-1051-4037762f536045d59be5d818e2de6481.bin', N'Clientes/4/Etapas/1024/doc-1024-1051-4037762f536045d59be5d818e2de6481.bin', N'doc-1024-1051-4037762f536045d59be5d818e2de6481-01_Oficio_solicitud_obras_necesarias.pdf', N'Clientes/4/Etapas/1024/doc-1024-1051-4037762f536045d59be5d818e2de6481-01_Oficio_solicitud_obras_necesarias.pdf'),
|
||||
(33, N'doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb.bin', N'Clientes/4/Etapas/1028/doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb.bin', N'doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb-02_Copia_escrituras.pdf', N'Clientes/4/Etapas/1028/doc-1028-1053-c2b0275d99924d3784d7aec44c0b8beb-02_Copia_escrituras.pdf'),
|
||||
(34, N'doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a.bin', N'Clientes/4/Etapas/1028/doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a.bin', N'doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a-04_Dictamen_uso_suelo.pdf', N'Clientes/4/Etapas/1028/doc-1028-1046-c98e40e90f3b41cdb810222241f3fc9a-04_Dictamen_uso_suelo.pdf'),
|
||||
(35, N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf'),
|
||||
(36, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(37, N'doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733.bin', N'Clientes/4/Etapas/1028/doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733.bin', N'doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733-08_Constancia_no_adeudo_Agua_Hermosillo.pdf', N'Clientes/4/Etapas/1028/doc-1028-1079-9be2156047bc4828b3e43b67fe3f6733-08_Constancia_no_adeudo_Agua_Hermosillo.pdf'),
|
||||
(38, N'doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(39, N'doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf'),
|
||||
(40, N'doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338.bin', N'Clientes/4/Etapas/1028/doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338.bin', N'doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338-11_Cedula_RFC.pdf', N'Clientes/4/Etapas/1028/doc-1028-1082-a21ee3513b5a4fe3b1f5f8f237ddc338-11_Cedula_RFC.pdf'),
|
||||
(41, N'doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470.bin', N'Clientes/4/Etapas/1028/doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470.bin', N'doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470-12_Autorizaciones_CIDUE.pdf', N'Clientes/4/Etapas/1028/doc-1028-1080-2fb84cc84de24223a9fcdeaf1fcd2470-12_Autorizaciones_CIDUE.pdf'),
|
||||
(42, N'doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin', N'Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin', N'doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png', N'Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png'),
|
||||
(43, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
|
||||
(44, N'doc-1028-1051-90d0c12832f9428abb0ac645be0c7156.bin', N'Clientes/4/Etapas/1028/doc-1028-1051-90d0c12832f9428abb0ac645be0c7156.bin', N'doc-1028-1051-90d0c12832f9428abb0ac645be0c7156-01_Oficio_solicitud_obras_necesarias.pdf', N'Clientes/4/Etapas/1028/doc-1028-1051-90d0c12832f9428abb0ac645be0c7156-01_Oficio_solicitud_obras_necesarias.pdf'),
|
||||
(45, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
|
||||
(46, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
|
||||
(47, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
|
||||
(48, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
|
||||
(49, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
|
||||
(50, N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd.bin', N'doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf', N'Clientes/1006/Etapas/1022/doc-1022-1040-b6e404e6e7dc4597860185076b3289dd-VL103M user manual 20230921.pdf'),
|
||||
(51, N'doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin', N'Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb.bin', N'doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx', N'Clientes/1006/Etapas/1022/doc-1022-1045-b8d0648d970b4cababc65f30c58b1ccb-BORRADOR EDISA.docx'),
|
||||
(52, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
|
||||
(53, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
|
||||
(54, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
|
||||
(55, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
|
||||
(56, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
|
||||
(57, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
|
||||
(58, N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422.bin', N'doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg', N'Clientes/1006/Etapas/1022/doc-1022-1057-626fd5ba8cc747fcae64ad2c8466f422-65007.jpeg'),
|
||||
(59, N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(60, N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(61, N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(62, N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42.bin', N'doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-3212891ee8f847aba1e83b01fc27ef42-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(63, N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf'),
|
||||
(64, N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf'),
|
||||
(65, N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf'),
|
||||
(66, N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf'),
|
||||
(67, N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8.bin', N'doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-1c7a3c7eb01f44acac908819648f3ca8-05_Carta_poder_representante_legal.pdf'),
|
||||
(68, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(69, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(70, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(71, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(72, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(73, N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971.bin', N'doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-cfb6478de0c64aa8933fa2df00de1971-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(74, N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(75, N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(76, N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(77, N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba.bin', N'doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-703001ed04cd4768805ea52d87c496ba-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(78, N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf'),
|
||||
(79, N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf'),
|
||||
(80, N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf'),
|
||||
(81, N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096.bin', N'doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-251daa4398b44a56bb95dcd11326c096-10_Comprobante_domicilio.pdf'),
|
||||
(82, N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf'),
|
||||
(83, N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf'),
|
||||
(84, N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf'),
|
||||
(85, N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf'),
|
||||
(86, N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77.bin', N'doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1024/doc-1024-1069-a126b490c1e24edbab7b044bf0549e77-05_Carta_poder_representante_legal.pdf'),
|
||||
(87, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(88, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(89, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(90, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(91, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(92, N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d.bin', N'doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1024/doc-1024-1040-52f4c0205ee1446b884f6c64f20e505d-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(93, N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(94, N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(95, N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(96, N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5.bin', N'doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1024/doc-1024-1034-1f93d872f1c549988ab7b6f3f9b574f5-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(97, N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf'),
|
||||
(98, N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf'),
|
||||
(99, N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf'),
|
||||
(100, N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f.bin', N'doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1024/doc-1024-1037-8ab956638dc442e49632d23459f4cb2f-10_Comprobante_domicilio.pdf'),
|
||||
(101, N'doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin', N'Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28.bin', N'doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png', N'Clientes/4/Etapas/1024/doc-1024-1045-d447e83e74d14977957ca05ed2465c28-Croquis.png'),
|
||||
(102, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
|
||||
(103, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
|
||||
(104, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
|
||||
(105, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
|
||||
(106, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
|
||||
(107, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
|
||||
(108, N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e.bin', N'doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-a00c7eb989a64e47baec43163755e90e-Identificación Oficial.jpg'),
|
||||
(109, N'doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin', N'Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a.bin', N'doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png', N'Clientes/4/Etapas/1024/doc-1024-1045-61379c693d6241898e7cf30cffd8658a-Croquis.png'),
|
||||
(110, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
|
||||
(111, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
|
||||
(112, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
|
||||
(113, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
|
||||
(114, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
|
||||
(115, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
|
||||
(116, N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3.bin', N'doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg', N'Clientes/4/Etapas/1024/doc-1024-1057-6f6f616d9d894e549d344781acf4b1f3-Identificación Oficial.jpg'),
|
||||
(117, N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf'),
|
||||
(118, N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf'),
|
||||
(119, N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf'),
|
||||
(120, N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf'),
|
||||
(121, N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713.bin', N'doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf', N'Clientes/4/Etapas/1028/doc-1028-1069-320a3b0bf9294a92be5ebf802fcd4713-05_Carta_poder_representante_legal.pdf'),
|
||||
(122, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(123, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(124, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(125, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(126, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(127, N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072.bin', N'doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf', N'Clientes/4/Etapas/1028/doc-1028-1040-9bc673275f414c8d8d320e9bbf698072-06_Constancia_no_adeudo_tesoreria.pdf'),
|
||||
(128, N'doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(129, N'doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(130, N'doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(131, N'doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495.bin', N'doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf', N'Clientes/4/Etapas/1028/doc-1028-1034-583b7009cab246ed8287200ce7082495-09_Acta_Constitutiva_empresa.pdf'),
|
||||
(132, N'doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf'),
|
||||
(133, N'doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf'),
|
||||
(134, N'doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf'),
|
||||
(135, N'doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915.bin', N'doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf', N'Clientes/4/Etapas/1028/doc-1028-1037-06adb9de68924cebafe0052e68b83915-10_Comprobante_domicilio.pdf'),
|
||||
(136, N'doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin', N'Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df.bin', N'doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png', N'Clientes/4/Etapas/1028/doc-1028-1045-7f4784759eaf43f09e2a6433309008df-Croquis.png'),
|
||||
(137, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
|
||||
(138, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
|
||||
(139, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
|
||||
(140, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
|
||||
(141, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
|
||||
(142, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg'),
|
||||
(143, N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c.bin', N'doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg', N'Clientes/4/Etapas/1028/doc-1028-1057-657aeb02d955432c8a9f4a1a12042c1c-Identificación Oficial.jpg');
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
SELECT documento.*
|
||||
INTO #Antes
|
||||
FROM dbo.Tra_DocumentosSolicitud AS documento WITH (TABLOCKX, HOLDLOCK);
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @Mapeo AS mapeo
|
||||
LEFT JOIN #Antes AS documento ON documento.CveDocumentoSolicitud = mapeo.CveDocumentoSolicitud
|
||||
WHERE documento.CveDocumentoSolicitud IS NULL
|
||||
OR documento.NombreArchivoFisico IS NULL
|
||||
OR documento.RutaArchivo IS NULL
|
||||
OR NOT
|
||||
(
|
||||
(documento.NombreArchivoFisico = mapeo.NombreAnterior AND documento.RutaArchivo = mapeo.RutaAnterior)
|
||||
OR (documento.NombreArchivoFisico = mapeo.NombreNuevo AND documento.RutaArchivo = mapeo.RutaNueva)
|
||||
)
|
||||
)
|
||||
THROW 51000, 'El inventario cambió. Revisar antes de migrar.', 1;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM #Antes AS documento
|
||||
INNER JOIN @Mapeo AS mapeo ON documento.RutaArchivo = mapeo.RutaAnterior
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @Mapeo AS conocido
|
||||
WHERE conocido.CveDocumentoSolicitud = documento.CveDocumentoSolicitud
|
||||
)
|
||||
)
|
||||
THROW 51001, 'Existen nuevas referencias a los archivos anteriores.', 1;
|
||||
|
||||
UPDATE documento
|
||||
SET NombreArchivoFisico = mapeo.NombreNuevo,
|
||||
RutaArchivo = mapeo.RutaNueva
|
||||
FROM dbo.Tra_DocumentosSolicitud AS documento
|
||||
INNER JOIN @Mapeo AS mapeo ON documento.CveDocumentoSolicitud = mapeo.CveDocumentoSolicitud
|
||||
WHERE documento.NombreArchivoFisico = mapeo.NombreAnterior
|
||||
AND documento.RutaArchivo = mapeo.RutaAnterior;
|
||||
|
||||
DECLARE @Actualizados int = @@ROWCOUNT;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT [CveDocumentoSolicitud], [CveSolicitud], [CveTipoDocumento], [NombreArchivo], [ContentType], [TamanoBytes], [ComentarioCliente], [ComentarioAdministrativo], [EsAprobado], [CveUsuarioCarga], [CveUsuarioRevisa], [FechaRevision], [FechaAlta], [UltimaNota], [FechaDocumento], [FechaVencimiento], [EsActivo], [CveFraccionamientoEtapa], [Vencido], [CveTipoTramite]
|
||||
FROM #Antes
|
||||
EXCEPT
|
||||
SELECT [CveDocumentoSolicitud], [CveSolicitud], [CveTipoDocumento], [NombreArchivo], [ContentType], [TamanoBytes], [ComentarioCliente], [ComentarioAdministrativo], [EsAprobado], [CveUsuarioCarga], [CveUsuarioRevisa], [FechaRevision], [FechaAlta], [UltimaNota], [FechaDocumento], [FechaVencimiento], [EsActivo], [CveFraccionamientoEtapa], [Vencido], [CveTipoTramite]
|
||||
FROM dbo.Tra_DocumentosSolicitud
|
||||
)
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT [CveDocumentoSolicitud], [CveSolicitud], [CveTipoDocumento], [NombreArchivo], [ContentType], [TamanoBytes], [ComentarioCliente], [ComentarioAdministrativo], [EsAprobado], [CveUsuarioCarga], [CveUsuarioRevisa], [FechaRevision], [FechaAlta], [UltimaNota], [FechaDocumento], [FechaVencimiento], [EsActivo], [CveFraccionamientoEtapa], [Vencido], [CveTipoTramite]
|
||||
FROM dbo.Tra_DocumentosSolicitud
|
||||
EXCEPT
|
||||
SELECT [CveDocumentoSolicitud], [CveSolicitud], [CveTipoDocumento], [NombreArchivo], [ContentType], [TamanoBytes], [ComentarioCliente], [ComentarioAdministrativo], [EsAprobado], [CveUsuarioCarga], [CveUsuarioRevisa], [FechaRevision], [FechaAlta], [UltimaNota], [FechaDocumento], [FechaVencimiento], [EsActivo], [CveFraccionamientoEtapa], [Vencido], [CveTipoTramite]
|
||||
FROM #Antes
|
||||
)
|
||||
THROW 51002, 'Se detectó un cambio ajeno a las rutas.', 1;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM @Mapeo AS mapeo
|
||||
INNER JOIN dbo.Tra_DocumentosSolicitud AS documento ON documento.CveDocumentoSolicitud = mapeo.CveDocumentoSolicitud
|
||||
WHERE documento.NombreArchivoFisico <> mapeo.NombreNuevo
|
||||
OR documento.RutaArchivo <> mapeo.RutaNueva
|
||||
)
|
||||
THROW 51003, 'No se actualizaron todas las referencias.', 1;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
SELECT @Actualizados AS ReferenciasActualizadas;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF XACT_STATE() <> 0
|
||||
ROLLBACK TRANSACTION;
|
||||
THROW;
|
||||
END CATCH;
|
||||
@@ -1,43 +0,0 @@
|
||||
CAMBIO REQUERIDO EN Pages/Desarrolladores/DesarrolladorDetalle.aspx
|
||||
|
||||
El ZIP fuente SIG.Web(3).zip no contiene la carpeta Pages, por lo que no es seguro
|
||||
inventar ni sobrescribir DesarrolladorDetalle.aspx.
|
||||
|
||||
El botón "Ver etapa" debe dejar de abrir el panel lateral y navegar a:
|
||||
|
||||
~/Pages/Fraccionamientos/EtapaDetalle.aspx?etapa={CveFraccionamientoEtapa}
|
||||
|
||||
Si actualmente es un LinkButton, reemplazar sólo esa acción por un HyperLink.
|
||||
|
||||
Ejemplo dentro del ItemTemplate:
|
||||
|
||||
<asp:HyperLink
|
||||
ID="BtnVerEtapa"
|
||||
runat="server"
|
||||
CssClass="btn btn-circle btn-sm default sig-accion-icono"
|
||||
ToolTip="Ver etapa"
|
||||
aria-label="Ver etapa"
|
||||
NavigateUrl='<%# ResolveUrl("~/Pages/Fraccionamientos/EtapaDetalle.aspx?etapa=" +
|
||||
Convert.ToInt32(Eval("CveFraccionamientoEtapa")).ToString(
|
||||
System.Globalization.CultureInfo.InvariantCulture)) %>'>
|
||||
<i class="fa fa-eye" aria-hidden="true"></i>
|
||||
</asp:HyperLink>
|
||||
|
||||
Si la URL se arma en code-behind, usar:
|
||||
|
||||
private string UrlDetalleEtapa(int cveFraccionamientoEtapa)
|
||||
{
|
||||
return ResolveUrl("~/Pages/Fraccionamientos/EtapaDetalle.aspx?etapa=" +
|
||||
cveFraccionamientoEtapa.ToString(
|
||||
System.Globalization.CultureInfo.InvariantCulture));
|
||||
}
|
||||
|
||||
y asignar esa URL al HyperLink de Ver etapa.
|
||||
|
||||
Quitar del botón Ver etapa:
|
||||
- CommandName usado sólo para abrir el panel.
|
||||
- data-sig-panel-abrir.
|
||||
- OnClientClick que abra el panel.
|
||||
- cualquier llamada a SIGPanelLateral.abrir(...) asociada exclusivamente a Ver etapa.
|
||||
|
||||
No eliminar el UserControl DetalleEtapa.ascx: la nueva página lo reutiliza.
|
||||
|
Before Width: | Height: | Size: 125 KiB After Width: | Height: | Size: 125 KiB |
|
After Width: | Height: | Size: 961 KiB |
|
After Width: | Height: | Size: 961 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 961 KiB |
|
After Width: | Height: | Size: 54 KiB |
2602
Respaldo_NombresDocumentos_20261003/MetadatosAntes.xml
Normal file
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Configuration;
|
||||
using SIG.Web.AppCode.Contracts.Clientes;
|
||||
using SIG.Web.AppCode.Contracts.Convenios;
|
||||
@@ -18,6 +18,7 @@ using SIG.Web.AppCode.Contracts.Security;
|
||||
using SIG.Web.AppCode.Contracts.Tramites;
|
||||
using SIG.Web.AppCode.Contracts.Ventas;
|
||||
using SIG.Web.AppCode.Notifications.Contracts;
|
||||
using SIG.Web.AppCode.Notifications.Repositories;
|
||||
using SIG.Web.AppCode.Notifications.Services;
|
||||
using SIG.Web.AppCode.Repositories.Bitacora;
|
||||
using SIG.Web.AppCode.Repositories.Database;
|
||||
@@ -65,6 +66,7 @@ namespace SIG.Web.AppCode.Configuration
|
||||
public static IClienteDocumentoService ClienteDocumentoService { get; private set; }
|
||||
public static ITramiteDocumentoService TramiteDocumentoService { get; private set; }
|
||||
public static IServicioFraccionamiento ServicioFraccionamiento { get; private set; }
|
||||
public static IServicioLotesEtapa ServicioLotesEtapa { get; private set; }
|
||||
public static IServicioGisFraccionamiento ServicioGisFraccionamiento { get; private set; }
|
||||
public static ITramiteCatalogService TramiteCatalogService { get; private set; }
|
||||
public static ITramiteSolicitudService TramiteSolicitudService { get; private set; }
|
||||
@@ -80,6 +82,8 @@ namespace SIG.Web.AppCode.Configuration
|
||||
public static IPermissionService PermissionService { get; private set; }
|
||||
public static IMenuProvider MenuProvider { get; private set; }
|
||||
public static INotificationCenter NotificationCenter { get; private set; }
|
||||
public static INotificacionService NotificacionService { get; private set; }
|
||||
public static INotificacionConfiguracionService NotificacionConfiguracionService { get; private set; }
|
||||
public static IBuscadorCatalogoDataProvider SearchProvider { get; private set; }
|
||||
|
||||
public static void Configure()
|
||||
@@ -139,6 +143,14 @@ namespace SIG.Web.AppCode.Configuration
|
||||
|
||||
ITramiteSolicitudRepository tramiteSolicitudRepository =
|
||||
new TramiteSolicitudRepository(DbExecutor);
|
||||
INotificacionRepository notificacionRepository =
|
||||
new NotificacionRepository(DbExecutor);
|
||||
NotificacionService = new NotificacionService(
|
||||
notificacionRepository,
|
||||
new SmtpEmailSender());
|
||||
NotificacionConfiguracionService = new NotificacionConfiguracionService(
|
||||
notificacionRepository,
|
||||
NotificacionService);
|
||||
ITramiteDocumentoRepository tramiteDocumentoRepository =
|
||||
new TramiteDocumentoRepository(DbExecutor);
|
||||
ITramiteDocumentoFileStore tramiteDocumentoFileStore =
|
||||
@@ -148,7 +160,8 @@ namespace SIG.Web.AppCode.Configuration
|
||||
tramiteDocumentoFileStore,
|
||||
BitacoraService,
|
||||
UserContext,
|
||||
tramiteSolicitudRepository);
|
||||
tramiteSolicitudRepository,
|
||||
NotificacionConfiguracionService);
|
||||
|
||||
IRepositorioFraccionamiento repositorioFraccionamiento =
|
||||
new RepositorioFraccionamiento(DbExecutor);
|
||||
@@ -158,6 +171,12 @@ namespace SIG.Web.AppCode.Configuration
|
||||
tramiteSolicitudRepository,
|
||||
BitacoraService);
|
||||
|
||||
IRepositorioLotesEtapa repositorioLotesEtapa =
|
||||
new RepositorioLotesEtapa(DbExecutor);
|
||||
ServicioLotesEtapa = new ServicioLotesEtapa(
|
||||
repositorioLotesEtapa,
|
||||
BitacoraService);
|
||||
|
||||
IRepositorioGisFraccionamiento repositorioGis =
|
||||
new RepositorioGisFraccionamiento(DbExecutor);
|
||||
IAlmacenArchivosGisFraccionamiento almacenArchivosGis =
|
||||
@@ -183,7 +202,8 @@ namespace SIG.Web.AppCode.Configuration
|
||||
repositorioFraccionamiento,
|
||||
BitacoraService,
|
||||
TramiteDocumentoService,
|
||||
UserContext);
|
||||
UserContext,
|
||||
NotificacionConfiguracionService);
|
||||
var clienteProfact = new ClienteTimbradoPacProfact(
|
||||
new ProveedorCredencialPacConfiguracion());
|
||||
ServicioTimbradoCfdi = new ServicioTimbradoCfdi(
|
||||
|
||||
@@ -59,7 +59,9 @@ namespace SIG.Web.AppCode.Configuration
|
||||
"~/Scripts/SigPdfDrawer.js",
|
||||
"~/Scripts/PanelLateral.js",
|
||||
"~/Scripts/DocumentosEtapa.js",
|
||||
"~/Scripts/DocumentosEtapaCargaMasiva.js",
|
||||
"~/Scripts/SigVisualizadorArchivo.js",
|
||||
"~/Scripts/DocumentosEtapaNavegacion.js",
|
||||
"~/Scripts/Visitas.js",
|
||||
"~/Scripts/PagosConvenios.js",
|
||||
"~/Scripts/custom.js",
|
||||
@@ -67,7 +69,9 @@ namespace SIG.Web.AppCode.Configuration
|
||||
"~/Scripts/filtrosig.js",
|
||||
"~/Scripts/scrollsig.js",
|
||||
"~/Scripts/sig-grid-agrupado.js",
|
||||
"~/Scripts/Convenios.js"
|
||||
"~/Scripts/Convenios.js",
|
||||
"~/Scripts/VisorGis.js",
|
||||
"~/Scripts/LotesEtapa.js"
|
||||
));
|
||||
bundles.Add(new ScriptBundle("~/bundles/WebFormsJs").Include(
|
||||
"~/Scripts/WebForms/WebForms.js",
|
||||
@@ -129,12 +133,16 @@ namespace SIG.Web.AppCode.Configuration
|
||||
"~/Styles/SigVisualizadorArchivo.css",
|
||||
"~/Styles/DetalleEtapa.css",
|
||||
"~/Styles/DocumentosEtapa.css",
|
||||
"~/Styles/DocumentosEtapaCargaMasiva.css",
|
||||
"~/Styles/DocumentosEtapaNavegacion.css",
|
||||
"~/Styles/Archivos.css",
|
||||
"~/Styles/Estilos.css",
|
||||
"~/Styles/filtrosig.css",
|
||||
"~/Styles/scrollsig.css",
|
||||
"~/Styles/sig-grid-agrupado.css",
|
||||
"~/Styles/Convenios.css",
|
||||
"~/Styles/VisorGis.css",
|
||||
"~/Styles/LotesEtapa.css",
|
||||
"~/Metronic/assets/global/plugins/bootstrap-switch/css/bootstrap-switch.min.css",
|
||||
"~/Metronic/assets/global/plugins/bootstrap-toastr/toastr.min.css",
|
||||
"~/Metronic/assets/layouts/layout3/css/jquery.datetimepicker.css",
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace SIG.Web.AppCode.Contracts.Clientes
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<int> GuardarFraccionamientoConEtapa(
|
||||
DbResult<ResultadoGuardarFraccionamientoConEtapas> GuardarFraccionamientoConEtapa(
|
||||
ModeloFraccionamiento fraccionamiento,
|
||||
ModeloEtapaFraccionamiento etapa,
|
||||
int cveUsuarioEjecuta,
|
||||
|
||||
@@ -10,6 +10,8 @@ namespace SIG.Web.AppCode.Contracts.Convenios
|
||||
DbResult<ConvenioDetalleCompleto> Obtener(int cveConvenio, int usuario, string dominio);
|
||||
DbResult<List<ConvenioConceptoCatalogo>> ListarConceptos(int usuario, string dominio);
|
||||
DbResult<int> Agregar(SolicitudAltaConvenio solicitud, int usuario, string dominio);
|
||||
DbResult<ConvenioLotesConvenio> ObtenerLotesConvenio(int cveConvenio, int usuario, string dominio);
|
||||
DbResult<bool> GuardarLotesConvenio(int cveConvenio, int lotesConvenio, int usuario, string dominio);
|
||||
DbResult<bool> Eliminar(int cveConvenio, int usuario, string dominio);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,8 @@ namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
TramiteDocumentoPreparedFile Prepare(
|
||||
TramiteDocumentoUploadContextModel context,
|
||||
Stream source,
|
||||
string previousRelativePath);
|
||||
string previousRelativePath,
|
||||
string nombreArchivoOriginal);
|
||||
|
||||
void Promote(TramiteDocumentoPreparedFile preparedFile);
|
||||
void Rollback(TramiteDocumentoPreparedFile preparedFile);
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Documentos;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
{
|
||||
// Los documentos y sus marcas particulares pertenecen a etapa y tipo de documento.
|
||||
// Los parámetros de trámite en carga se conservan por compatibilidad;
|
||||
// sólo los listados de requisitos utilizan el trámite como filtro.
|
||||
public interface ITramiteDocumentoRepository
|
||||
{
|
||||
DbResult<List<SolicitudDocumentoConfiguracionModel>> ListarConfiguracionSolicitud(
|
||||
@@ -12,7 +15,8 @@ namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
int cveSolicitud,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio,
|
||||
int? cveFraccionamientoEtapa = null);
|
||||
int? cveFraccionamientoEtapa = null,
|
||||
int? cveTipoTramite = null);
|
||||
|
||||
DbResult<bool> ActualizarVencimientoEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
@@ -30,7 +34,8 @@ namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
int cveTipoDocumento,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio,
|
||||
int? cveFraccionamientoEtapa = null);
|
||||
int? cveFraccionamientoEtapa = null,
|
||||
int? cveTipoTramite = null);
|
||||
|
||||
DbResult<List<TramiteDocumentoSolicitudModel>> ListForDevelopment(
|
||||
int developmentId,
|
||||
@@ -52,7 +57,8 @@ namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
int documentTypeId,
|
||||
int executingUser,
|
||||
string domainName,
|
||||
int? cveFraccionamientoEtapa = null);
|
||||
int? cveFraccionamientoEtapa = null,
|
||||
int? cveTipoTramite = null);
|
||||
|
||||
DbResult<TramiteDocumentoUploadContextModel> GetStageUploadContext(
|
||||
int stageId,
|
||||
@@ -76,7 +82,8 @@ namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
DateTime? fechaDocumento = null,
|
||||
DateTime? fechaVencimiento = null,
|
||||
bool actualizarFechas = false,
|
||||
int? cveFraccionamientoEtapa = null);
|
||||
int? cveFraccionamientoEtapa = null,
|
||||
int? cveTipoTramite = null);
|
||||
|
||||
DbResult<TramiteDocumentoVencimientoResultModel> ActualizarFechaVencimiento(
|
||||
int cveFraccionamiento,
|
||||
@@ -85,6 +92,13 @@ namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<TramiteDocumentoNotaResultModel> ActualizarNota(
|
||||
int cveFraccionamiento,
|
||||
int cveDocumentoSolicitud,
|
||||
string nota,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<TramiteDocumentoReviewResultModel> Review(
|
||||
int developmentId,
|
||||
int documentRequestId,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
@@ -7,6 +7,9 @@ using SIG.Web.AppCode.Models.Documentos;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
{
|
||||
// Los documentos y sus marcas particulares pertenecen a etapa y tipo de documento.
|
||||
// Los parámetros de trámite en carga se conservan por compatibilidad;
|
||||
// sólo los listados de requisitos utilizan el trámite como filtro.
|
||||
public interface ITramiteDocumentoService
|
||||
{
|
||||
DbResult<List<SolicitudDocumentoConfiguracionModel>> ListarConfiguracionSolicitud(
|
||||
@@ -14,7 +17,8 @@ namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
int cveSolicitud,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio,
|
||||
int? cveFraccionamientoEtapa = null);
|
||||
int? cveFraccionamientoEtapa = null,
|
||||
int? cveTipoTramite = null);
|
||||
|
||||
DbResult<bool> ActualizarVencimientoEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
@@ -32,7 +36,8 @@ namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
int cveTipoDocumento,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio,
|
||||
int? cveFraccionamientoEtapa = null);
|
||||
int? cveFraccionamientoEtapa = null,
|
||||
int? cveTipoTramite = null);
|
||||
|
||||
DbResult<List<TramiteDocumentoSolicitudModel>> ListForDevelopment(
|
||||
int developmentId,
|
||||
@@ -54,7 +59,8 @@ namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
int documentTypeId,
|
||||
int executingUser,
|
||||
string domainName,
|
||||
int? cveFraccionamientoEtapa = null);
|
||||
int? cveFraccionamientoEtapa = null,
|
||||
int? cveTipoTramite = null);
|
||||
|
||||
DbResult<TramiteDocumentoSaveResultModel> Upload(
|
||||
int developmentId,
|
||||
@@ -69,7 +75,8 @@ namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
string domainName,
|
||||
DateTime? fechaDocumento = null,
|
||||
DateTime? fechaVencimiento = null,
|
||||
int? cveFraccionamientoEtapa = null);
|
||||
int? cveFraccionamientoEtapa = null,
|
||||
int? cveTipoTramite = null);
|
||||
|
||||
DbResult<bool> Eliminar(
|
||||
int cveFraccionamiento,
|
||||
@@ -85,6 +92,13 @@ namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<TramiteDocumentoNotaResultModel> ActualizarNota(
|
||||
int cveFraccionamiento,
|
||||
int cveDocumentoSolicitud,
|
||||
string nota,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<TramiteDocumentoReviewResultModel> Review(
|
||||
int developmentId,
|
||||
int documentRequestId,
|
||||
|
||||
@@ -8,6 +8,7 @@ namespace SIG.Web.AppCode.Contracts.Fraccionamientos
|
||||
string ObtenerRutaFisica(ContextoGisFraccionamiento contexto);
|
||||
bool Existe(ContextoGisFraccionamiento contexto);
|
||||
void Guardar(ContextoGisFraccionamiento contexto, Stream origen);
|
||||
Stream GuardarOriginalZip(ContextoGisFraccionamiento contexto, Stream origen, long longitud);
|
||||
Stream AbrirLectura(ContextoGisFraccionamiento contexto);
|
||||
void Eliminar(ContextoGisFraccionamiento contexto);
|
||||
}
|
||||
|
||||
57
SIG.Web/App_Code/Contracts/Fraccionamientos/ILotesEtapa.cs
Normal file
@@ -0,0 +1,57 @@
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Fraccionamientos;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Fraccionamientos
|
||||
{
|
||||
public interface IRepositorioLotesEtapa
|
||||
{
|
||||
DbResult<ModeloLoteFraccionamiento> Obtener(
|
||||
int cveFraccionamiento, int cveLote,
|
||||
int cveUsuarioEjecuta, string nombreDominio);
|
||||
|
||||
DbResult<int> CambiarAprobacion(
|
||||
int cveFraccionamiento, int cveLote, bool aprobado,
|
||||
int cveUsuarioEjecuta, string nombreDominio);
|
||||
|
||||
DbResult<int> CambiarBloqueo(
|
||||
int cveFraccionamiento, int cveLote, bool bloqueado,
|
||||
int cveUsuarioEjecuta, string nombreDominio);
|
||||
|
||||
DbResult<int> ActualizarInfraestructura(
|
||||
int cveFraccionamiento, int cveLote,
|
||||
decimal avanceAgua, decimal avanceDrenaje,
|
||||
int cveUsuarioEjecuta, string nombreDominio);
|
||||
|
||||
DbResult<int> CambiarAutorizacionAgua(
|
||||
int cveFraccionamiento, int cveLote, bool autorizado,
|
||||
int cveUsuarioEjecuta, string nombreDominio);
|
||||
|
||||
DbResult<int> CambiarAutorizacionDrenaje(
|
||||
int cveFraccionamiento, int cveLote, bool autorizado,
|
||||
int cveUsuarioEjecuta, string nombreDominio);
|
||||
}
|
||||
|
||||
public interface IServicioLotesEtapa
|
||||
{
|
||||
DbResult<bool> CambiarAprobacion(
|
||||
int cveFraccionamiento, int cveLote, bool aprobado,
|
||||
int cveUsuarioEjecuta, string nombreDominio);
|
||||
|
||||
DbResult<bool> CambiarBloqueo(
|
||||
int cveFraccionamiento, int cveLote, bool bloqueado,
|
||||
int cveUsuarioEjecuta, string nombreDominio);
|
||||
|
||||
DbResult<bool> ActualizarInfraestructura(
|
||||
int cveFraccionamiento, int cveLote,
|
||||
decimal avanceAgua, decimal avanceDrenaje,
|
||||
int cveUsuarioEjecuta, string nombreDominio);
|
||||
|
||||
DbResult<bool> CambiarAutorizacionAgua(
|
||||
int cveFraccionamiento, int cveLote, bool autorizado,
|
||||
int cveUsuarioEjecuta, string nombreDominio);
|
||||
|
||||
DbResult<bool> CambiarAutorizacionDrenaje(
|
||||
int cveFraccionamiento, int cveLote, bool autorizado,
|
||||
int cveUsuarioEjecuta, string nombreDominio);
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,17 @@ namespace SIG.Web.AppCode.Contracts.Fraccionamientos
|
||||
{
|
||||
public interface IRepositorioGisFraccionamiento
|
||||
{
|
||||
DbResult<List<CapaGisFraccionamiento>> ListarCapas(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<bool> GuardarCapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
CapaGisFraccionamiento capa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<ContextoGisFraccionamiento> ObtenerContexto(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
|
||||
@@ -14,89 +14,33 @@ namespace SIG.Web.AppCode.Contracts.Fraccionamientos
|
||||
DbResult<int> VincularLoteTipoViviendaEtapa(int cveEtapa, int cveRegistro, int cveLote, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<bool> DesvincularLoteTipoViviendaEtapa(int cveEtapa, int cveVinculo, int cveUsuarioEjecuta, string nombreDominio);
|
||||
|
||||
DbResult<List<ModeloFilaDesarrollos>> ListarDesarrollos(
|
||||
int cveCliente, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<List<ModeloFilaDesarrollos>> ListarDesarrollos( int cveCliente, int cveUsuarioEjecuta, string nombreDominio);
|
||||
|
||||
DbResult<List<OpcionClienteFraccionamiento>> ListarClientes(int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<List<OpcionEstatusFraccionamiento>> ListarEstatus(int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<List<ModeloFraccionamiento>> Listar(string texto, int? cveCliente, bool incluirInactivo, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<ModeloFraccionamiento> Obtener(int cveFraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<List<ModeloAvisoDetalleFraccionamiento>> ObtenerAvisosDetalle(
|
||||
int cveFraccionamiento,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<int> GuardarConEtapas(
|
||||
ModeloFraccionamiento fraccionamiento,
|
||||
IList<ModeloEtapaFraccionamiento> etapas,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<List<ModeloAvisoDetalleFraccionamiento>> ObtenerAvisosDetalle( int cveFraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<ResultadoGuardarFraccionamientoConEtapas> GuardarConEtapas(
|
||||
ModeloFraccionamiento fraccionamiento, IList<ModeloEtapaFraccionamiento> etapas, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<int> Guardar(ModeloFraccionamiento fraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<bool> Eliminar(int cveFraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<List<ModeloEtapaFraccionamiento>> ListarEtapas(int cveFraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<ModeloEtapaFraccionamiento> ObtenerEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<ResultadoAvanceEtapaFraccionamiento> ActualizarAvanceEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
decimal avance,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<ModeloCondicionesEtapaFraccionamiento> ObtenerCondicionesEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<ModeloCondicionesEtapaFraccionamiento> GuardarCondicionesEtapa(
|
||||
ModeloCondicionesEtapaFraccionamiento condiciones,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<ModeloGisEtapaFraccionamiento> ObtenerGisEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<ModeloGisEtapaFraccionamiento> GuardarGisEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<ModeloEtapaFraccionamiento> ObtenerEtapa( int cveFraccionamientoEtapa, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<ResultadoAvanceEtapaFraccionamiento> ActualizarAvanceEtapa( int cveFraccionamientoEtapa, decimal avance, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<ModeloCondicionesEtapaFraccionamiento> ObtenerCondicionesEtapa( int cveFraccionamientoEtapa, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<ModeloCondicionesEtapaFraccionamiento> GuardarCondicionesEtapa( ModeloCondicionesEtapaFraccionamiento condiciones, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<ModeloGisEtapaFraccionamiento> ObtenerGisEtapa( int cveFraccionamientoEtapa, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<ModeloGisEtapaFraccionamiento> GuardarGisEtapa( int cveFraccionamientoEtapa, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<List<ModeloTramiteEtapaFraccionamiento>> ListarTramitesEtapa(int cveFraccionamiento, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<int> GuardarEtapa(ModeloEtapaFraccionamiento etapa, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<bool> MoverOrdenEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveFraccionamientoEtapaReferencia,
|
||||
bool colocarDespues,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<bool> MoverOrdenEtapa( int cveFraccionamientoEtapa, int cveFraccionamientoEtapaReferencia, bool colocarDespues, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<bool> EliminarEtapa(int cveFraccionamientoEtapa, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<List<ModeloLoteFraccionamiento>> ListarLotes(
|
||||
int cveFraccionamiento,
|
||||
int? cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<ModeloLoteFraccionamiento> ObtenerLote(
|
||||
int cveFraccionamiento,
|
||||
int cveFraccionamientoLote,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<int> GuardarLote(
|
||||
int cveFraccionamiento,
|
||||
ModeloLoteFraccionamiento lote,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<int> GuardarLotes(
|
||||
int cveFraccionamiento,
|
||||
int cveFraccionamientoEtapa,
|
||||
IList<ModeloLoteFraccionamiento> lotes,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<bool> EliminarLote(
|
||||
int cveFraccionamiento,
|
||||
int cveFraccionamientoLote,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<int> LimpiarLotesEtapa(
|
||||
int cveFraccionamiento,
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<List<ModeloLoteFraccionamiento>> ListarLotes(int cveFraccionamiento,int? cveFraccionamientoEtapa,int cveUsuarioEjecuta,string nombreDominio);
|
||||
DbResult<ModeloLoteFraccionamiento> ObtenerLote(int cveFraccionamiento,int cveFraccionamientoLote, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<int> GuardarLote( int cveFraccionamiento, ModeloLoteFraccionamiento lote, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<int> GuardarLotes( int cveFraccionamiento, int cveFraccionamientoEtapa, IList<ModeloLoteFraccionamiento> lotes, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<bool> EliminarLote( int cveFraccionamiento, int cveFraccionamientoLote, int cveUsuarioEjecuta, string nombreDominio);
|
||||
DbResult<int> LimpiarLotesEtapa( int cveFraccionamiento, int cveFraccionamientoEtapa, int cveUsuarioEjecuta, string nombreDominio);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,31 @@ namespace SIG.Web.AppCode.Contracts.Fraccionamientos
|
||||
{
|
||||
public interface IServicioGisFraccionamiento
|
||||
{
|
||||
DbResult<ResultadoGuardadoGisFraccionamiento> DesvincularLote(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveFraccionamientoLote,
|
||||
string clavePoligono,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<ResultadoGuardadoGisFraccionamiento> VincularLote(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveFraccionamientoLote,
|
||||
string clavePoligono,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<List<CapaGisFraccionamiento>> ListarCapas(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<bool> GuardarCapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
CapaGisFraccionamiento capa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<VistaGisFraccionamiento> Obtener(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
|
||||
@@ -5,5 +5,6 @@ namespace SIG.Web.AppCode.Contracts.Security
|
||||
bool IsConfigured { get; }
|
||||
void SendVerification(string recipient, string verificationUrl);
|
||||
void EnviarContrasena(string destinatario, string nombreUsuario, string contrasena);
|
||||
void Send(string recipient, string subject, string htmlBody);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,44 +86,80 @@ namespace SIG.Web.Pages.Fraccionamientos
|
||||
nombreArchivo,
|
||||
tipoContenido))
|
||||
{
|
||||
SigVisualizadorArchivoOfficeResultado conversion;
|
||||
string error;
|
||||
|
||||
using (file.Content)
|
||||
using (var contenidoOffice = new MemoryStream())
|
||||
{
|
||||
if (!SigVisualizadorArchivoOfficeConverter.IntentarConvertir(
|
||||
file.Content,
|
||||
file.Content.CopyTo(contenidoOffice);
|
||||
contenidoOffice.Position = 0;
|
||||
|
||||
if (SigVisualizadorArchivoVistaPreviaExcel.EsCompatible(nombreArchivo))
|
||||
{
|
||||
byte[] vistaPreviaExcel;
|
||||
string errorExcel;
|
||||
|
||||
if (SigVisualizadorArchivoVistaPreviaExcel.IntentarGenerarHtml(
|
||||
contenidoOffice,
|
||||
nombreArchivo,
|
||||
out vistaPreviaExcel,
|
||||
out errorExcel))
|
||||
{
|
||||
PrepareResponse(
|
||||
context,
|
||||
"text/html; charset=utf-8",
|
||||
false,
|
||||
Path.GetFileNameWithoutExtension(nombreArchivo) + ".html");
|
||||
context.Response.OutputStream.Write(
|
||||
vistaPreviaExcel,
|
||||
0,
|
||||
vistaPreviaExcel.Length);
|
||||
context.ApplicationInstance.CompleteRequest();
|
||||
return;
|
||||
}
|
||||
|
||||
contenidoOffice.Position = 0;
|
||||
}
|
||||
|
||||
SigVisualizadorArchivoOfficeResultado conversion;
|
||||
string errorConversion;
|
||||
|
||||
if (SigVisualizadorArchivoOfficeConverter.IntentarConvertir(
|
||||
contenidoOffice,
|
||||
nombreArchivo,
|
||||
out conversion,
|
||||
out error))
|
||||
out errorConversion))
|
||||
{
|
||||
RespondError(
|
||||
context,
|
||||
415,
|
||||
string.IsNullOrWhiteSpace(error)
|
||||
? "No fue posible generar la vista previa del archivo de Office."
|
||||
: error);
|
||||
using (conversion)
|
||||
using (var contenidoPdf = new FileStream(
|
||||
conversion.RutaPdf,
|
||||
FileMode.Open,
|
||||
FileAccess.Read,
|
||||
FileShare.Read))
|
||||
{
|
||||
PrepareResponse(
|
||||
context,
|
||||
"application/pdf",
|
||||
false,
|
||||
Path.GetFileNameWithoutExtension(nombreArchivo) + ".pdf");
|
||||
contenidoPdf.CopyTo(context.Response.OutputStream);
|
||||
}
|
||||
|
||||
context.ApplicationInstance.CompleteRequest();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
using (conversion)
|
||||
using (var contenidoPdf = new FileStream(
|
||||
conversion.RutaPdf,
|
||||
FileMode.Open,
|
||||
FileAccess.Read,
|
||||
FileShare.Read))
|
||||
{
|
||||
PrepareResponse(
|
||||
RespondError(
|
||||
context,
|
||||
"application/pdf",
|
||||
false,
|
||||
Path.GetFileNameWithoutExtension(nombreArchivo) + ".pdf");
|
||||
contenidoPdf.CopyTo(context.Response.OutputStream);
|
||||
415,
|
||||
string.IsNullOrWhiteSpace(errorConversion)
|
||||
? "No fue posible generar la vista previa del archivo de Office."
|
||||
: errorConversion);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
context.ApplicationInstance.CompleteRequest();
|
||||
return;
|
||||
if (visualizar && EsArchivoGis(nombreArchivo))
|
||||
{
|
||||
tipoContenido = "application/geo+json; charset=utf-8";
|
||||
}
|
||||
|
||||
PrepareResponse(
|
||||
@@ -169,6 +205,9 @@ namespace SIG.Web.Pages.Fraccionamientos
|
||||
context.Response.StatusCode = statusCode;
|
||||
context.Response.TrySkipIisCustomErrors = true;
|
||||
context.Response.ContentType = "text/plain; charset=utf-8";
|
||||
context.Response.AddHeader(
|
||||
"X-SIG-Visualizador-Mensaje",
|
||||
HttpUtility.UrlEncode(message ?? string.Empty));
|
||||
context.Response.Write(message);
|
||||
context.ApplicationInstance.CompleteRequest();
|
||||
}
|
||||
@@ -193,6 +232,13 @@ namespace SIG.Web.Pages.Fraccionamientos
|
||||
result > 0;
|
||||
}
|
||||
|
||||
private static bool EsArchivoGis(string nombreArchivo)
|
||||
{
|
||||
string extension = Path.GetExtension(nombreArchivo ?? string.Empty);
|
||||
return string.Equals(extension, ".gis", StringComparison.OrdinalIgnoreCase) ||
|
||||
string.Equals(extension, ".geojson", StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
private static string SanitizeFileName(string fileName)
|
||||
{
|
||||
string value = Path.GetFileName(
|
||||
|
||||
@@ -0,0 +1,538 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Web;
|
||||
using System.Web.SessionState;
|
||||
using SIG.Web.AppCode.Configuration;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Documentos;
|
||||
using SIG.Web.AppCode.Session;
|
||||
using SIG.Web.AppCode.Services.Logging;
|
||||
|
||||
namespace SIG.Web.Pages.Fraccionamientos
|
||||
{
|
||||
/// <summary>
|
||||
/// Descarga en un ZIP todos los archivos visibles para el usuario en el
|
||||
/// contexto actual del control DocumentosEtapa.
|
||||
///
|
||||
/// El escritor ZIP incluido aquí usa el método STORE (sin compresión) para
|
||||
/// no agregar dependencias nuevas al proyecto. El resultado sigue siendo
|
||||
/// un archivo .zip estándar.
|
||||
/// </summary>
|
||||
public sealed class TramiteDocumentosZipHandler
|
||||
: IHttpHandler, IRequiresSessionState
|
||||
{
|
||||
public bool IsReusable
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
public void ProcessRequest(HttpContext context)
|
||||
{
|
||||
UserSessionModel usuario = ObtenerUsuario();
|
||||
if (usuario == null)
|
||||
{
|
||||
ResponderError(context, 401, "Su sesión no está disponible. Inicie sesión nuevamente.");
|
||||
return;
|
||||
}
|
||||
|
||||
int cveFraccionamiento;
|
||||
if (!LeerEntero(context.Request.QueryString["fraccionamiento"], out cveFraccionamiento) ||
|
||||
cveFraccionamiento <= 0)
|
||||
{
|
||||
ResponderError(context, 400, "El fraccionamiento solicitado no es válido.");
|
||||
return;
|
||||
}
|
||||
|
||||
int? cveEtapa;
|
||||
int? cveTipoTramite;
|
||||
if (!LeerEnteroOpcional(context.Request.QueryString["etapa"], out cveEtapa) ||
|
||||
!LeerEnteroOpcional(context.Request.QueryString["tramite"], out cveTipoTramite))
|
||||
{
|
||||
ResponderError(context, 400, "Los filtros de descarga no son válidos.");
|
||||
return;
|
||||
}
|
||||
|
||||
DbResult<List<TramiteDocumentoSolicitudModel>> consulta =
|
||||
AppServices.TramiteDocumentoService.ListForDevelopment(
|
||||
cveFraccionamiento,
|
||||
cveEtapa,
|
||||
cveTipoTramite,
|
||||
usuario.CveUsuario,
|
||||
usuario.NombreDominio);
|
||||
|
||||
if (!consulta.Success)
|
||||
{
|
||||
ResponderError(context, 400, consulta.UserMessage ?? "No fue posible consultar los documentos.");
|
||||
return;
|
||||
}
|
||||
|
||||
List<TramiteDocumentoSolicitudModel> documentos =
|
||||
(consulta.Data ?? new List<TramiteDocumentoSolicitudModel>())
|
||||
.Where(documento => documento.TieneArchivo && documento.CveDocumentoSolicitud > 0)
|
||||
.GroupBy(documento => documento.CveDocumentoSolicitud)
|
||||
.Select(grupo => grupo.First())
|
||||
.ToList();
|
||||
|
||||
if (documentos.Count == 0)
|
||||
{
|
||||
ResponderError(context, 404, "No hay archivos cargados para descargar.");
|
||||
return;
|
||||
}
|
||||
|
||||
string rutaTemporal = Path.Combine(
|
||||
Path.GetTempPath(),
|
||||
"SIG-Documentos-" + Guid.NewGuid().ToString("N") + ".zip");
|
||||
|
||||
try
|
||||
{
|
||||
List<string> errores;
|
||||
int agregados = CrearZip(
|
||||
rutaTemporal,
|
||||
documentos,
|
||||
cveFraccionamiento,
|
||||
usuario,
|
||||
out errores);
|
||||
|
||||
if (agregados == 0)
|
||||
{
|
||||
ResponderError(
|
||||
context,
|
||||
404,
|
||||
errores.Count > 0
|
||||
? string.Join(" ", errores)
|
||||
: "No fue posible abrir los archivos solicitados.");
|
||||
return;
|
||||
}
|
||||
|
||||
string nombreZip = "Documentos-Fraccionamiento-" +
|
||||
cveFraccionamiento.ToString(CultureInfo.InvariantCulture);
|
||||
if (cveEtapa.HasValue)
|
||||
{
|
||||
nombreZip += "-Etapa-" + cveEtapa.Value.ToString(CultureInfo.InvariantCulture);
|
||||
}
|
||||
nombreZip += ".zip";
|
||||
|
||||
context.Response.Clear();
|
||||
context.Response.ClearHeaders();
|
||||
context.Response.TrySkipIisCustomErrors = true;
|
||||
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
|
||||
context.Response.Cache.SetNoStore();
|
||||
context.Response.ContentType = "application/zip";
|
||||
context.Response.AddHeader(
|
||||
"Content-Disposition",
|
||||
"attachment; filename=\"" + nombreZip + "\"");
|
||||
|
||||
var informacion = new FileInfo(rutaTemporal);
|
||||
context.Response.AddHeader(
|
||||
"Content-Length",
|
||||
informacion.Length.ToString(CultureInfo.InvariantCulture));
|
||||
|
||||
using (var archivoZip = new FileStream(
|
||||
rutaTemporal,
|
||||
FileMode.Open,
|
||||
FileAccess.Read,
|
||||
FileShare.Read))
|
||||
{
|
||||
archivoZip.CopyTo(context.Response.OutputStream);
|
||||
}
|
||||
|
||||
context.ApplicationInstance.CompleteRequest();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
const string mensaje =
|
||||
"No fue posible generar la descarga de documentos; favor de contactar a Sistemas.";
|
||||
ExceptionLogger.Log(
|
||||
ex,
|
||||
"TramiteDocumentosZipHandler.ProcessRequest",
|
||||
mensaje);
|
||||
ResponderError(context, 500, mensaje);
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
if (File.Exists(rutaTemporal))
|
||||
{
|
||||
File.Delete(rutaTemporal);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// La limpieza del temporal no debe invalidar la descarga.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static int CrearZip(
|
||||
string rutaZip,
|
||||
IList<TramiteDocumentoSolicitudModel> documentos,
|
||||
int cveFraccionamiento,
|
||||
UserSessionModel usuario,
|
||||
out List<string> errores)
|
||||
{
|
||||
errores = new List<string>();
|
||||
int agregados = 0;
|
||||
var nombres = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
using (var salida = new FileStream(
|
||||
rutaZip,
|
||||
FileMode.CreateNew,
|
||||
FileAccess.ReadWrite,
|
||||
FileShare.None))
|
||||
using (var zip = new ZipStoreWriter(salida))
|
||||
{
|
||||
foreach (TramiteDocumentoSolicitudModel documento in documentos)
|
||||
{
|
||||
DbResult<TramiteDocumentoFileModel> resultado =
|
||||
AppServices.TramiteDocumentoService.Open(
|
||||
cveFraccionamiento,
|
||||
documento.CveDocumentoSolicitud,
|
||||
usuario.CveUsuario,
|
||||
usuario.NombreDominio);
|
||||
|
||||
if (!resultado.Success || resultado.Data == null || resultado.Data.Content == null)
|
||||
{
|
||||
errores.Add(
|
||||
(documento.TipoDocumento ?? "Documento") + ": " +
|
||||
(resultado.UserMessage ?? "No fue posible abrir el archivo."));
|
||||
continue;
|
||||
}
|
||||
|
||||
TramiteDocumentoFileModel archivo = resultado.Data;
|
||||
string nombreEntrada = NombreUnico(
|
||||
LimpiarNombreArchivo(archivo.NombreArchivo, documento.CveDocumentoSolicitud),
|
||||
nombres);
|
||||
|
||||
using (archivo.Content)
|
||||
{
|
||||
zip.AddEntry(nombreEntrada, archivo.Content, DateTime.Now);
|
||||
}
|
||||
|
||||
agregados++;
|
||||
}
|
||||
|
||||
if (agregados > 0 && errores.Count > 0)
|
||||
{
|
||||
byte[] contenidoError = Encoding.UTF8.GetBytes(
|
||||
"Algunos archivos no pudieron agregarse a la descarga:\r\n\r\n" +
|
||||
string.Join("\r\n", errores.Select(error => "- " + error)));
|
||||
using (var memoria = new MemoryStream(contenidoError))
|
||||
{
|
||||
zip.AddEntry("_ERRORES.txt", memoria, DateTime.Now);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return agregados;
|
||||
}
|
||||
|
||||
private static string LimpiarNombreArchivo(string nombre, int clave)
|
||||
{
|
||||
string limpio = Path.GetFileName(nombre ?? string.Empty);
|
||||
if (string.IsNullOrWhiteSpace(limpio))
|
||||
{
|
||||
limpio = "Documento-" + clave.ToString(CultureInfo.InvariantCulture) + ".bin";
|
||||
}
|
||||
|
||||
foreach (char caracter in Path.GetInvalidFileNameChars())
|
||||
{
|
||||
limpio = limpio.Replace(caracter, '_');
|
||||
}
|
||||
|
||||
return limpio;
|
||||
}
|
||||
|
||||
private static string NombreUnico(string nombre, HashSet<string> usados)
|
||||
{
|
||||
if (usados.Add(nombre))
|
||||
{
|
||||
return nombre;
|
||||
}
|
||||
|
||||
string extension = Path.GetExtension(nombre);
|
||||
string baseNombre = Path.GetFileNameWithoutExtension(nombre);
|
||||
int consecutivo = 2;
|
||||
|
||||
while (true)
|
||||
{
|
||||
string candidato = baseNombre + " (" +
|
||||
consecutivo.ToString(CultureInfo.InvariantCulture) + ")" + extension;
|
||||
if (usados.Add(candidato))
|
||||
{
|
||||
return candidato;
|
||||
}
|
||||
consecutivo++;
|
||||
}
|
||||
}
|
||||
|
||||
private static UserSessionModel ObtenerUsuario()
|
||||
{
|
||||
return AppServices.UserContext != null && AppServices.UserContext.IsAuthenticated()
|
||||
? AppServices.UserContext.GetCurrentUser()
|
||||
: null;
|
||||
}
|
||||
|
||||
private static bool LeerEntero(string valor, out int resultado)
|
||||
{
|
||||
return int.TryParse(
|
||||
valor,
|
||||
NumberStyles.Integer,
|
||||
CultureInfo.InvariantCulture,
|
||||
out resultado);
|
||||
}
|
||||
|
||||
private static bool LeerEnteroOpcional(string valor, out int? resultado)
|
||||
{
|
||||
resultado = null;
|
||||
if (string.IsNullOrWhiteSpace(valor))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
int entero;
|
||||
if (!LeerEntero(valor, out entero) || entero <= 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
resultado = entero;
|
||||
return true;
|
||||
}
|
||||
|
||||
private static void ResponderError(HttpContext context, int statusCode, string mensaje)
|
||||
{
|
||||
context.Response.Clear();
|
||||
context.Response.StatusCode = statusCode;
|
||||
context.Response.TrySkipIisCustomErrors = true;
|
||||
context.Response.ContentType = "text/plain; charset=utf-8";
|
||||
context.Response.Write(mensaje ?? "No fue posible completar la descarga.");
|
||||
context.ApplicationInstance.CompleteRequest();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Escritor ZIP mínimo, método STORE (sin compresión), UTF-8 y data descriptor.
|
||||
/// Evita agregar una dependencia adicional únicamente para esta descarga.
|
||||
/// </summary>
|
||||
private sealed class ZipStoreWriter : IDisposable
|
||||
{
|
||||
private const uint FirmaLocal = 0x04034b50;
|
||||
private const uint FirmaDescriptor = 0x08074b50;
|
||||
private const uint FirmaCentral = 0x02014b50;
|
||||
private const uint FirmaFin = 0x06054b50;
|
||||
private const ushort Version = 20;
|
||||
private const ushort Flags = 0x0808; // UTF-8 + data descriptor.
|
||||
private const ushort MetodoStore = 0;
|
||||
|
||||
private readonly Stream _salida;
|
||||
private readonly BinaryWriter _writer;
|
||||
private readonly List<EntradaZip> _entradas = new List<EntradaZip>();
|
||||
private bool _cerrado;
|
||||
|
||||
public ZipStoreWriter(Stream salida)
|
||||
{
|
||||
_salida = salida ?? throw new ArgumentNullException("salida");
|
||||
if (!salida.CanWrite || !salida.CanSeek)
|
||||
{
|
||||
throw new ArgumentException("El stream ZIP debe permitir escritura y posicionamiento.", "salida");
|
||||
}
|
||||
|
||||
_writer = new BinaryWriter(salida, Encoding.UTF8, true);
|
||||
}
|
||||
|
||||
public void AddEntry(string nombre, Stream contenido, DateTime fecha)
|
||||
{
|
||||
if (_cerrado)
|
||||
{
|
||||
throw new ObjectDisposedException("ZipStoreWriter");
|
||||
}
|
||||
if (contenido == null)
|
||||
{
|
||||
throw new ArgumentNullException("contenido");
|
||||
}
|
||||
|
||||
byte[] nombreBytes = Encoding.UTF8.GetBytes(nombre ?? "archivo.bin");
|
||||
if (nombreBytes.Length > ushort.MaxValue)
|
||||
{
|
||||
throw new InvalidOperationException("El nombre del archivo es demasiado largo para el ZIP.");
|
||||
}
|
||||
|
||||
long offsetLocalLong = _salida.Position;
|
||||
if (offsetLocalLong > uint.MaxValue)
|
||||
{
|
||||
throw new InvalidOperationException("La descarga excede el tamaño ZIP soportado.");
|
||||
}
|
||||
|
||||
ushort horaDos;
|
||||
ushort fechaDos;
|
||||
ConvertirFechaDos(fecha, out horaDos, out fechaDos);
|
||||
|
||||
_writer.Write(FirmaLocal);
|
||||
_writer.Write(Version);
|
||||
_writer.Write(Flags);
|
||||
_writer.Write(MetodoStore);
|
||||
_writer.Write(horaDos);
|
||||
_writer.Write(fechaDos);
|
||||
_writer.Write((uint)0);
|
||||
_writer.Write((uint)0);
|
||||
_writer.Write((uint)0);
|
||||
_writer.Write((ushort)nombreBytes.Length);
|
||||
_writer.Write((ushort)0);
|
||||
_writer.Write(nombreBytes);
|
||||
|
||||
var crc = new Crc32();
|
||||
long longitud = 0;
|
||||
byte[] buffer = new byte[81920];
|
||||
int leidos;
|
||||
while ((leidos = contenido.Read(buffer, 0, buffer.Length)) > 0)
|
||||
{
|
||||
_salida.Write(buffer, 0, leidos);
|
||||
crc.Update(buffer, 0, leidos);
|
||||
longitud += leidos;
|
||||
|
||||
if (longitud > uint.MaxValue)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"Uno de los archivos excede el tamaño ZIP soportado.");
|
||||
}
|
||||
}
|
||||
|
||||
uint tamano = (uint)longitud;
|
||||
uint valorCrc = crc.Value;
|
||||
|
||||
_writer.Write(FirmaDescriptor);
|
||||
_writer.Write(valorCrc);
|
||||
_writer.Write(tamano);
|
||||
_writer.Write(tamano);
|
||||
|
||||
_entradas.Add(new EntradaZip
|
||||
{
|
||||
Nombre = nombreBytes,
|
||||
Crc = valorCrc,
|
||||
Tamano = tamano,
|
||||
OffsetLocal = (uint)offsetLocalLong,
|
||||
HoraDos = horaDos,
|
||||
FechaDos = fechaDos
|
||||
});
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_cerrado)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_cerrado = true;
|
||||
EscribirDirectorioCentral();
|
||||
_writer.Flush();
|
||||
_writer.Dispose();
|
||||
}
|
||||
|
||||
private void EscribirDirectorioCentral()
|
||||
{
|
||||
if (_entradas.Count > ushort.MaxValue)
|
||||
{
|
||||
throw new InvalidOperationException("La descarga contiene demasiados archivos.");
|
||||
}
|
||||
|
||||
long inicioCentralLong = _salida.Position;
|
||||
if (inicioCentralLong > uint.MaxValue)
|
||||
{
|
||||
throw new InvalidOperationException("La descarga excede el tamaño ZIP soportado.");
|
||||
}
|
||||
|
||||
foreach (EntradaZip entrada in _entradas)
|
||||
{
|
||||
_writer.Write(FirmaCentral);
|
||||
_writer.Write(Version);
|
||||
_writer.Write(Version);
|
||||
_writer.Write(Flags);
|
||||
_writer.Write(MetodoStore);
|
||||
_writer.Write(entrada.HoraDos);
|
||||
_writer.Write(entrada.FechaDos);
|
||||
_writer.Write(entrada.Crc);
|
||||
_writer.Write(entrada.Tamano);
|
||||
_writer.Write(entrada.Tamano);
|
||||
_writer.Write((ushort)entrada.Nombre.Length);
|
||||
_writer.Write((ushort)0);
|
||||
_writer.Write((ushort)0);
|
||||
_writer.Write((ushort)0);
|
||||
_writer.Write((ushort)0);
|
||||
_writer.Write((uint)0);
|
||||
_writer.Write(entrada.OffsetLocal);
|
||||
_writer.Write(entrada.Nombre);
|
||||
}
|
||||
|
||||
long finCentralLong = _salida.Position;
|
||||
long tamanoCentralLong = finCentralLong - inicioCentralLong;
|
||||
if (tamanoCentralLong > uint.MaxValue)
|
||||
{
|
||||
throw new InvalidOperationException("El directorio ZIP excede el tamaño soportado.");
|
||||
}
|
||||
|
||||
ushort cantidad = (ushort)_entradas.Count;
|
||||
_writer.Write(FirmaFin);
|
||||
_writer.Write((ushort)0);
|
||||
_writer.Write((ushort)0);
|
||||
_writer.Write(cantidad);
|
||||
_writer.Write(cantidad);
|
||||
_writer.Write((uint)tamanoCentralLong);
|
||||
_writer.Write((uint)inicioCentralLong);
|
||||
_writer.Write((ushort)0);
|
||||
}
|
||||
|
||||
private static void ConvertirFechaDos(DateTime fecha, out ushort hora, out ushort dia)
|
||||
{
|
||||
DateTime valor = fecha.Year < 1980
|
||||
? new DateTime(1980, 1, 1, 0, 0, 0)
|
||||
: fecha;
|
||||
|
||||
hora = (ushort)((valor.Hour << 11) |
|
||||
(valor.Minute << 5) |
|
||||
(valor.Second / 2));
|
||||
dia = (ushort)(((valor.Year - 1980) << 9) |
|
||||
(valor.Month << 5) |
|
||||
valor.Day);
|
||||
}
|
||||
|
||||
private sealed class EntradaZip
|
||||
{
|
||||
public byte[] Nombre { get; set; }
|
||||
public uint Crc { get; set; }
|
||||
public uint Tamano { get; set; }
|
||||
public uint OffsetLocal { get; set; }
|
||||
public ushort HoraDos { get; set; }
|
||||
public ushort FechaDos { get; set; }
|
||||
}
|
||||
|
||||
private sealed class Crc32
|
||||
{
|
||||
private uint _crc = 0xFFFFFFFF;
|
||||
|
||||
public uint Value
|
||||
{
|
||||
get { return _crc ^ 0xFFFFFFFF; }
|
||||
}
|
||||
|
||||
public void Update(byte[] buffer, int offset, int count)
|
||||
{
|
||||
for (int indice = offset; indice < offset + count; indice++)
|
||||
{
|
||||
_crc ^= buffer[indice];
|
||||
for (int bit = 0; bit < 8; bit++)
|
||||
{
|
||||
_crc = (_crc & 1) != 0
|
||||
? (_crc >> 1) ^ 0xEDB88320
|
||||
: _crc >> 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -53,6 +53,24 @@ namespace SIG.Web.Pages.Fraccionamientos
|
||||
"POST",
|
||||
StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
if (string.Equals(metodo, "DesvincularLote", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
DesvincularLote(contexto, actualUsuario);
|
||||
return;
|
||||
}
|
||||
|
||||
if (string.Equals(metodo, "VincularLote", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
VincularLote(contexto, actualUsuario);
|
||||
return;
|
||||
}
|
||||
|
||||
if (string.Equals(metodo, "GuardarCapa", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
GuardarCapa(contexto, actualUsuario);
|
||||
return;
|
||||
}
|
||||
|
||||
if (string.Equals(metodo, "Save", StringComparison.OrdinalIgnoreCase) ||
|
||||
string.Equals(metodo, "GuardarArchivo", StringComparison.OrdinalIgnoreCase) ||
|
||||
string.Equals(metodo, "GuardarVinculos", StringComparison.OrdinalIgnoreCase))
|
||||
@@ -94,6 +112,21 @@ namespace SIG.Web.Pages.Fraccionamientos
|
||||
return;
|
||||
}
|
||||
|
||||
if (string.Equals(metodo, "Capas", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
DbResult<List<CapaGisFraccionamiento>> capas =
|
||||
AppServices.ServicioGisFraccionamiento.ListarCapas(
|
||||
cveFraccionamientoEtapa, actualUsuario.CveUsuario, actualUsuario.NombreDominio);
|
||||
if (!capas.Success)
|
||||
{
|
||||
EscribirFalloResultado(contexto, capas, 400);
|
||||
return;
|
||||
}
|
||||
|
||||
EscribirJson(contexto, 200, new { success = true, data = capas.Data });
|
||||
return;
|
||||
}
|
||||
|
||||
if (string.Equals(metodo, "Context", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
ObtenerContexto(contexto, actualUsuario, cveFraccionamientoEtapa);
|
||||
@@ -162,6 +195,86 @@ namespace SIG.Web.Pages.Fraccionamientos
|
||||
});
|
||||
}
|
||||
|
||||
private static void VincularLote(HttpContext contexto, UserSessionModel actualUsuario)
|
||||
{
|
||||
int etapa;
|
||||
int lote;
|
||||
if (!IntentarObtenerCveEtapa(contexto, out etapa) ||
|
||||
!int.TryParse(contexto.Request.Form["CveFraccionamientoLote"], out lote))
|
||||
{
|
||||
EscribirJson(contexto, 400, new { success = false, message = "Seleccione una etapa y un lote válidos." });
|
||||
return;
|
||||
}
|
||||
|
||||
DbResult<ResultadoGuardadoGisFraccionamiento> resultado =
|
||||
AppServices.ServicioGisFraccionamiento.VincularLote(
|
||||
etapa, lote, contexto.Request.Form["ClavePoligono"],
|
||||
actualUsuario.CveUsuario, actualUsuario.NombreDominio);
|
||||
if (!resultado.Success)
|
||||
{
|
||||
EscribirFalloResultado(contexto, resultado, 400);
|
||||
return;
|
||||
}
|
||||
|
||||
EscribirJson(contexto, 200, new { success = true, message = "Lote vinculado correctamente." });
|
||||
}
|
||||
|
||||
private static void DesvincularLote(HttpContext contexto, UserSessionModel actualUsuario)
|
||||
{
|
||||
int etapa;
|
||||
int lote;
|
||||
if (!IntentarObtenerCveEtapa(contexto, out etapa) ||
|
||||
!int.TryParse(contexto.Request.Form["CveFraccionamientoLote"], out lote))
|
||||
{
|
||||
EscribirJson(contexto, 400, new { success = false, message = "Seleccione una etapa y un lote válidos." });
|
||||
return;
|
||||
}
|
||||
|
||||
var resultado = AppServices.ServicioGisFraccionamiento.DesvincularLote(
|
||||
etapa, lote, contexto.Request.Form["ClavePoligono"],
|
||||
actualUsuario.CveUsuario, actualUsuario.NombreDominio);
|
||||
if (!resultado.Success)
|
||||
{
|
||||
EscribirFalloResultado(contexto, resultado, 400);
|
||||
return;
|
||||
}
|
||||
|
||||
EscribirJson(contexto, 200, new { success = true, message = "Lote desvinculado correctamente." });
|
||||
}
|
||||
|
||||
private static void GuardarCapa(HttpContext contexto, UserSessionModel actualUsuario)
|
||||
{
|
||||
int etapa;
|
||||
bool visible;
|
||||
if (!IntentarObtenerCveEtapa(contexto, out etapa) ||
|
||||
!bool.TryParse(contexto.Request.Form["EsVisible"], out visible))
|
||||
{
|
||||
EscribirJson(contexto, 400, new
|
||||
{
|
||||
success = false,
|
||||
message = "Indique una etapa y configuración válidas."
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
CapaGisFraccionamiento capa = new CapaGisFraccionamiento
|
||||
{
|
||||
NombreCapa = contexto.Request.Form["NombreCapa"],
|
||||
TipoCapa = contexto.Request.Form["TipoCapa"],
|
||||
Color = contexto.Request.Form["Color"],
|
||||
EsVisible = visible
|
||||
};
|
||||
DbResult<bool> resultado = AppServices.ServicioGisFraccionamiento.GuardarCapa(
|
||||
etapa, capa, actualUsuario.CveUsuario, actualUsuario.NombreDominio);
|
||||
if (!resultado.Success)
|
||||
{
|
||||
EscribirFalloResultado(contexto, resultado, 400);
|
||||
return;
|
||||
}
|
||||
|
||||
EscribirJson(contexto, 200, new { success = true, message = "Capa guardada." });
|
||||
}
|
||||
|
||||
private static void Guardar(
|
||||
HttpContext contexto,
|
||||
UserSessionModel actualUsuario,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace SIG.Web.AppCode.Models.Convenios
|
||||
@@ -9,6 +9,7 @@ namespace SIG.Web.AppCode.Models.Convenios
|
||||
public int? CveCliente { get; set; }
|
||||
public int? CveFraccionamiento { get; set; }
|
||||
public int? CveFraccionamientoEtapa { get; set; }
|
||||
public int? CveTipoTramite { get; set; }
|
||||
public string Estatus { get; set; }
|
||||
public bool? ConSaldoPendiente { get; set; }
|
||||
}
|
||||
@@ -21,6 +22,8 @@ namespace SIG.Web.AppCode.Models.Convenios
|
||||
public int CveFraccionamiento { get; set; }
|
||||
public string Fraccionamiento { get; set; }
|
||||
public int CveFraccionamientoEtapa { get; set; }
|
||||
public int CveTipoTramite { get; set; }
|
||||
public string TipoTramite { get; set; }
|
||||
public string Etapa { get; set; }
|
||||
public string NumeroConvenio { get; set; }
|
||||
public string NumeroOficio { get; set; }
|
||||
@@ -38,6 +41,8 @@ namespace SIG.Web.AppCode.Models.Convenios
|
||||
public int CveConvenio { get; set; }
|
||||
public int CveCliente { get; set; }
|
||||
public int CveFraccionamientoEtapa { get; set; }
|
||||
public int CveTipoTramite { get; set; }
|
||||
public string TipoTramite { get; set; }
|
||||
public string NumeroConvenio { get; set; }
|
||||
public string NumeroOficio { get; set; }
|
||||
public string Cliente { get; set; }
|
||||
@@ -49,6 +54,7 @@ namespace SIG.Web.AppCode.Models.Convenios
|
||||
public int ViviendasEnConvenio { get; set; }
|
||||
public int? ViviendasPendientes { get; set; }
|
||||
public int? ViviendasContratadas { get; set; }
|
||||
public int LotesConvenio { get; set; }
|
||||
public string Observaciones { get; set; }
|
||||
public decimal ImporteConvenio { get; set; }
|
||||
public decimal ImportePagado { get; set; }
|
||||
@@ -96,17 +102,26 @@ namespace SIG.Web.AppCode.Models.Convenios
|
||||
{
|
||||
public int CveCliente { get; set; }
|
||||
public int CveFraccionamientoEtapa { get; set; }
|
||||
public int CveTipoTramite { get; set; }
|
||||
public string TipoTramite { get; set; }
|
||||
public string NumeroConvenio { get; set; }
|
||||
public string NumeroOficio { get; set; }
|
||||
public int? ViviendasAutorizadas { get; set; }
|
||||
public int ViviendasEnConvenio { get; set; }
|
||||
public int? ViviendasPendientes { get; set; }
|
||||
public int? ViviendasContratadas { get; set; }
|
||||
public int LotesConvenio { get; set; }
|
||||
public DateTime FechaConvenio { get; set; }
|
||||
public string Observaciones { get; set; }
|
||||
public List<ConvenioConceptoCaptura> Conceptos { get; set; }
|
||||
}
|
||||
|
||||
public sealed class ConvenioLotesConvenio
|
||||
{
|
||||
public int CveConvenio { get; set; }
|
||||
public int LotesConvenio { get; set; }
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public sealed class ConvenioConceptoCaptura
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace SIG.Web.AppCode.Models.Documentos
|
||||
@@ -6,6 +6,7 @@ namespace SIG.Web.AppCode.Models.Documentos
|
||||
[Serializable]
|
||||
public sealed class SolicitudDocumentoConfiguracionModel
|
||||
{
|
||||
public int CveTipoTramite { get; set; }
|
||||
public int CveSolicitud { get; set; }
|
||||
public int CveTipoDocumento { get; set; }
|
||||
public int CveCliente { get; set; }
|
||||
@@ -94,6 +95,16 @@ namespace SIG.Web.AppCode.Models.Documentos
|
||||
{
|
||||
get { return EsRequerido && !TieneArchivo; }
|
||||
}
|
||||
|
||||
public bool ImpideAvanzar
|
||||
{
|
||||
get
|
||||
{
|
||||
return EsRequerido &&
|
||||
(!TieneArchivo || EsAprobado != true || FechaExpirada ||
|
||||
(TieneVigencia && !FechaVencimiento.HasValue));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class TramiteDocumentoUploadContextModel
|
||||
@@ -211,6 +222,24 @@ namespace SIG.Web.AppCode.Models.Documentos
|
||||
public bool HuboCambio { get; set; }
|
||||
}
|
||||
|
||||
public sealed class TramiteDocumentoNotaResultModel
|
||||
{
|
||||
public int CveDocumentoSolicitud { get; set; }
|
||||
public int CveSolicitud { get; set; }
|
||||
public string Folio { get; set; }
|
||||
public int CveCliente { get; set; }
|
||||
public int CveFraccionamiento { get; set; }
|
||||
public int CveFraccionamientoEtapa { get; set; }
|
||||
public string Etapa { get; set; }
|
||||
public int CveTipoTramite { get; set; }
|
||||
public string TipoTramite { get; set; }
|
||||
public int CveTipoDocumento { get; set; }
|
||||
public string TipoDocumento { get; set; }
|
||||
public string NombreArchivo { get; set; }
|
||||
public string ComentarioAdministrativoAnterior { get; set; }
|
||||
public string ComentarioAdministrativo { get; set; }
|
||||
}
|
||||
|
||||
public sealed class TramiteDocumentoDeleteResultModel
|
||||
{
|
||||
public int CveDocumentoSolicitud { get; set; }
|
||||
|
||||
33
SIG.Web/App_Code/Models/Fraccionamientos/ModeloLoteEtapa.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using System;
|
||||
|
||||
namespace SIG.Web.AppCode.Models.Fraccionamientos
|
||||
{
|
||||
[Serializable]
|
||||
public sealed class ModeloLoteEtapa
|
||||
{
|
||||
public int CveFraccionamientoLote { get; set; }
|
||||
public int CveFraccionamientoEtapa { get; set; }
|
||||
public int CveFraccionamiento { get; set; }
|
||||
public int CveCliente { get; set; }
|
||||
public string Etapa { get; set; }
|
||||
public string Nombre { get; set; }
|
||||
public string Tipo { get; set; }
|
||||
public string Calle { get; set; }
|
||||
public string Catastro { get; set; }
|
||||
public decimal? MetrosCuadrados { get; set; }
|
||||
public string Duplicador { get; set; }
|
||||
public bool EsActivo { get; set; }
|
||||
public int? CveTipoVivienda { get; set; }
|
||||
public string TipoVivienda { get; set; }
|
||||
public decimal? Latitud { get; set; }
|
||||
public decimal? Longitud { get; set; }
|
||||
public decimal AvanceAguaPotable { get; set; }
|
||||
public decimal AvanceDrenaje { get; set; }
|
||||
public bool AguaPotableAutorizada { get; set; }
|
||||
public bool DrenajeAutorizado { get; set; }
|
||||
public bool Aprobado { get; set; }
|
||||
public bool Bloqueado { get; set; }
|
||||
public bool PuedeEditar { get; set; }
|
||||
public string GISPoligonoClave { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
|
||||
namespace SIG.Web.AppCode.Models.Fraccionamientos
|
||||
{
|
||||
@@ -14,6 +14,7 @@ namespace SIG.Web.AppCode.Models.Fraccionamientos
|
||||
public bool EsFraccionamiento { get; set; }
|
||||
public string Etapa { get; set; }
|
||||
public decimal? Hectareas { get; set; }
|
||||
public decimal Avance { get; set; }
|
||||
public bool Fideicomiso { get; set; }
|
||||
public bool EsActivo { get; set; }
|
||||
}
|
||||
@@ -149,6 +150,30 @@ namespace SIG.Web.AppCode.Models.Fraccionamientos
|
||||
public string Duplicador { get; set; }
|
||||
|
||||
public bool EsActivo { get; set; }
|
||||
|
||||
public int? CveTipoVivienda { get; set; }
|
||||
|
||||
public string TipoVivienda { get; set; }
|
||||
|
||||
public decimal? Latitud { get; set; }
|
||||
|
||||
public decimal? Longitud { get; set; }
|
||||
|
||||
public decimal AvanceAguaPotable { get; set; }
|
||||
|
||||
public decimal AvanceDrenaje { get; set; }
|
||||
|
||||
public bool AguaPotableAutorizada { get; set; }
|
||||
|
||||
public bool DrenajeAutorizado { get; set; }
|
||||
|
||||
public bool Aprobado { get; set; }
|
||||
|
||||
public bool Bloqueado { get; set; }
|
||||
|
||||
public bool PuedeEditar { get; set; }
|
||||
|
||||
public string GISPoligonoClave { get; set; }
|
||||
}
|
||||
|
||||
public sealed class ModeloTramiteEtapaFraccionamiento
|
||||
|
||||
@@ -4,6 +4,16 @@ using System.IO;
|
||||
|
||||
namespace SIG.Web.AppCode.Models.Fraccionamientos
|
||||
{
|
||||
public sealed class CapaGisFraccionamiento
|
||||
{
|
||||
public string NombreCapa { get; set; }
|
||||
public string TipoCapa { get; set; }
|
||||
public string Color { get; set; }
|
||||
public bool EsVisible { get; set; }
|
||||
public string Geometria { get; set; }
|
||||
public int Elementos { get; set; }
|
||||
}
|
||||
|
||||
public sealed class ContextoGisFraccionamiento
|
||||
{
|
||||
public int CveCliente { get; set; }
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace SIG.Web.AppCode.Models.Fraccionamientos
|
||||
{
|
||||
public sealed class ResultadoGuardarFraccionamientoConEtapas
|
||||
{
|
||||
public int CveFraccionamiento { get; set; }
|
||||
|
||||
public List<ModeloEtapaFraccionamiento> Etapas { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Documentos;
|
||||
|
||||
@@ -49,6 +49,28 @@ namespace SIG.Web.AppCode.Models.Tramites
|
||||
public DateTime? FechaAutorizacion { get; set; }
|
||||
public bool PuedeCambiarEstatus { get; set; }
|
||||
public bool EsAutorizada { get; set; }
|
||||
public int DocumentosPendientes { get; set; }
|
||||
public int PagosPendientes { get; set; }
|
||||
|
||||
public string TextoDocumentos
|
||||
{
|
||||
get
|
||||
{
|
||||
return DocumentosPendientes == 0
|
||||
? "Completo"
|
||||
: DocumentosPendientes + " pendiente(s)";
|
||||
}
|
||||
}
|
||||
|
||||
public string TextoPagos
|
||||
{
|
||||
get
|
||||
{
|
||||
return PagosPendientes == 0
|
||||
? "Sin pendientes"
|
||||
: PagosPendientes + " pendiente(s)";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Documentos;
|
||||
using SIG.Web.AppCode.Models.Tramites;
|
||||
using SIG.Web.AppCode.Notifications.Models;
|
||||
|
||||
namespace SIG.Web.AppCode.Notifications.Contracts
|
||||
{
|
||||
public interface INotificacionConfiguracionService
|
||||
{
|
||||
DbResult<List<TipoNotificacionModel>> ListarTipos(
|
||||
bool incluirInactivos, int usuario, string dominio);
|
||||
DbResult<TipoNotificacionModel> ObtenerTipo(
|
||||
int cveTipoNotificacion, int usuario, string dominio);
|
||||
DbResult<int> GuardarTipo(
|
||||
TipoNotificacionModel model, int usuario, string dominio);
|
||||
DbResult<bool> EliminarTipo(
|
||||
int cveTipoNotificacion, int usuario, string dominio);
|
||||
|
||||
DbResult<List<ConfiguracionNotificacionModel>> ListarConfiguraciones(
|
||||
string origen, int? cveOrigen, int usuario, string dominio);
|
||||
DbResult<int> GuardarConfiguracion(
|
||||
ConfiguracionNotificacionModel model, int usuario, string dominio);
|
||||
DbResult<bool> EliminarConfiguracion(
|
||||
string origen, int cveConfiguracion, int usuario, string dominio);
|
||||
|
||||
void NotificarDocumentoCargado(
|
||||
TramiteDocumentoSaveResultModel documento,
|
||||
int usuario,
|
||||
string dominio);
|
||||
void NotificarDocumentoRevisado(
|
||||
TramiteDocumentoReviewResultModel documento,
|
||||
int usuario,
|
||||
string dominio);
|
||||
void NotificarTramite(
|
||||
string evento,
|
||||
TramiteSolicitudStatusChangeModel tramite,
|
||||
int usuario,
|
||||
string dominio);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Notifications.Models;
|
||||
|
||||
namespace SIG.Web.AppCode.Notifications.Contracts
|
||||
{
|
||||
public interface INotificacionRepository
|
||||
{
|
||||
DbResult<List<TipoNotificacionModel>> ListarTipos(
|
||||
bool incluirInactivos, int usuario, string dominio);
|
||||
DbResult<TipoNotificacionModel> ObtenerTipo(
|
||||
int cveTipoNotificacion, int usuario, string dominio);
|
||||
DbResult<int> GuardarTipo(
|
||||
TipoNotificacionModel model, int usuario, string dominio);
|
||||
DbResult<bool> EliminarTipo(
|
||||
int cveTipoNotificacion, int usuario, string dominio);
|
||||
|
||||
DbResult<List<ConfiguracionNotificacionModel>> ListarConfiguraciones(
|
||||
string origen, int? cveOrigen, int usuario, string dominio);
|
||||
DbResult<int> GuardarConfiguracion(
|
||||
ConfiguracionNotificacionModel model, int usuario, string dominio);
|
||||
DbResult<bool> EliminarConfiguracion(
|
||||
string origen, int cveConfiguracion, int usuario, string dominio);
|
||||
|
||||
DbResult<List<ConfiguracionNotificacionModel>> ResolverDocumento(
|
||||
int cveTipoDocumento,
|
||||
string evento,
|
||||
int cveCliente,
|
||||
int cveFraccionamientoEtapa,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<List<ConfiguracionNotificacionModel>> ResolverTramite(
|
||||
int cveTipoTramite,
|
||||
string evento,
|
||||
int cveCliente,
|
||||
int cveFraccionamientoEtapa,
|
||||
int usuario,
|
||||
string dominio);
|
||||
|
||||
DbResult<long> RegistrarHistorial(
|
||||
HistorialNotificacionModel model,
|
||||
int usuario,
|
||||
string dominio);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Notifications.Models;
|
||||
|
||||
namespace SIG.Web.AppCode.Notifications.Contracts
|
||||
{
|
||||
public interface INotificacionService
|
||||
{
|
||||
DbResult<bool> Enviar(
|
||||
SolicitudEnvioNotificacionModel solicitud,
|
||||
int usuario,
|
||||
string dominio);
|
||||
}
|
||||
}
|
||||
65
SIG.Web/App_Code/Notifications/Models/NotificacionModels.cs
Normal file
@@ -0,0 +1,65 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace SIG.Web.AppCode.Notifications.Models
|
||||
{
|
||||
public sealed class TipoNotificacionModel
|
||||
{
|
||||
public int CveTipoNotificacion { get; set; }
|
||||
public string Codigo { get; set; }
|
||||
public string Nombre { get; set; }
|
||||
public string TipoEnvio { get; set; }
|
||||
public string Asunto { get; set; }
|
||||
public string CuerpoHtml { get; set; }
|
||||
public bool GeneraHistorial { get; set; }
|
||||
public bool EsActivo { get; set; }
|
||||
}
|
||||
|
||||
public sealed class ConfiguracionNotificacionModel
|
||||
{
|
||||
public int CveConfiguracionNotificacion { get; set; }
|
||||
public string Origen { get; set; }
|
||||
public int CveOrigen { get; set; }
|
||||
public string OrigenNombre { get; set; }
|
||||
public string Evento { get; set; }
|
||||
public int CveTipoNotificacion { get; set; }
|
||||
public string TipoNotificacion { get; set; }
|
||||
public string CorreoDestino { get; set; }
|
||||
public int? CveCliente { get; set; }
|
||||
public string Cliente { get; set; }
|
||||
public int? CveFraccionamientoEtapa { get; set; }
|
||||
public string Fraccionamiento { get; set; }
|
||||
public string Etapa { get; set; }
|
||||
public bool EsActivo { get; set; }
|
||||
}
|
||||
|
||||
public sealed class SolicitudEnvioNotificacionModel
|
||||
{
|
||||
public int CveTipoNotificacion { get; set; }
|
||||
public string CorreoDestino { get; set; }
|
||||
public string Origen { get; set; }
|
||||
public string Evento { get; set; }
|
||||
public long? CveReferencia { get; set; }
|
||||
public int? CveCliente { get; set; }
|
||||
public int? CveFraccionamientoEtapa { get; set; }
|
||||
public IDictionary<string, string> Variables { get; set; }
|
||||
}
|
||||
|
||||
public sealed class HistorialNotificacionModel
|
||||
{
|
||||
public int CveTipoNotificacion { get; set; }
|
||||
public string TipoEnvio { get; set; }
|
||||
public string Origen { get; set; }
|
||||
public string Evento { get; set; }
|
||||
public long? CveReferencia { get; set; }
|
||||
public int? CveCliente { get; set; }
|
||||
public int? CveFraccionamientoEtapa { get; set; }
|
||||
public string Destinatario { get; set; }
|
||||
public string Asunto { get; set; }
|
||||
public string Mensaje { get; set; }
|
||||
public bool Enviado { get; set; }
|
||||
public DateTime FechaIntento { get; set; }
|
||||
public DateTime? FechaEnvio { get; set; }
|
||||
public string MensajeResultado { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,197 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using SIG.Web.AppCode.Contracts.Database;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Notifications.Contracts;
|
||||
using SIG.Web.AppCode.Notifications.Models;
|
||||
using SIG.Web.AppCode.Repositories.Database;
|
||||
|
||||
namespace SIG.Web.AppCode.Notifications.Repositories
|
||||
{
|
||||
public sealed class NotificacionRepository
|
||||
: RepositoryBase, INotificacionRepository
|
||||
{
|
||||
public NotificacionRepository(IDbExecutor db)
|
||||
: base(db)
|
||||
{
|
||||
}
|
||||
|
||||
public DbResult<List<TipoNotificacionModel>> ListarTipos(
|
||||
bool incluirInactivos, int usuario, string dominio)
|
||||
{
|
||||
return QueryList<TipoNotificacionModel>(
|
||||
"dbo.PA_Not_TipoNotificacionList",
|
||||
usuario,
|
||||
dominio,
|
||||
c => StoredProcedureCommand.AddInput(
|
||||
c, "@IncluirInactivos", incluirInactivos, DbType.Boolean));
|
||||
}
|
||||
|
||||
public DbResult<TipoNotificacionModel> ObtenerTipo(
|
||||
int cveTipoNotificacion, int usuario, string dominio)
|
||||
{
|
||||
return QueryOne<TipoNotificacionModel>(
|
||||
"dbo.PA_Not_TipoNotificacionGet",
|
||||
usuario,
|
||||
dominio,
|
||||
c => StoredProcedureCommand.AddInput(
|
||||
c, "@CveTipoNotificacion", cveTipoNotificacion, DbType.Int32));
|
||||
}
|
||||
|
||||
public DbResult<int> GuardarTipo(
|
||||
TipoNotificacionModel model, int usuario, string dominio)
|
||||
{
|
||||
return QueryScalarId(
|
||||
"dbo.PA_Not_TipoNotificacionSave",
|
||||
usuario,
|
||||
dominio,
|
||||
c =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(c, "@CveTipoNotificacion",
|
||||
model.CveTipoNotificacion <= 0 ? (object)null : model.CveTipoNotificacion,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(c, "@Codigo", model.Codigo, DbType.String);
|
||||
StoredProcedureCommand.AddInput(c, "@Nombre", model.Nombre, DbType.String);
|
||||
StoredProcedureCommand.AddInput(c, "@TipoEnvio", model.TipoEnvio, DbType.String);
|
||||
StoredProcedureCommand.AddInput(c, "@Asunto", model.Asunto, DbType.String);
|
||||
StoredProcedureCommand.AddInput(c, "@CuerpoHtml", model.CuerpoHtml, DbType.String);
|
||||
StoredProcedureCommand.AddInput(c, "@GeneraHistorial", model.GeneraHistorial, DbType.Boolean);
|
||||
StoredProcedureCommand.AddInput(c, "@EsActivo", model.EsActivo, DbType.Boolean);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<bool> EliminarTipo(
|
||||
int cveTipoNotificacion, int usuario, string dominio)
|
||||
{
|
||||
return Execute(
|
||||
"dbo.PA_Not_TipoNotificacionDelete",
|
||||
usuario,
|
||||
dominio,
|
||||
c => StoredProcedureCommand.AddInput(
|
||||
c, "@CveTipoNotificacion", cveTipoNotificacion, DbType.Int32));
|
||||
}
|
||||
|
||||
public DbResult<List<ConfiguracionNotificacionModel>> ListarConfiguraciones(
|
||||
string origen, int? cveOrigen, int usuario, string dominio)
|
||||
{
|
||||
return QueryList<ConfiguracionNotificacionModel>(
|
||||
"dbo.PA_Not_ConfiguracionList",
|
||||
usuario,
|
||||
dominio,
|
||||
c =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(c, "@Origen", origen, DbType.String);
|
||||
StoredProcedureCommand.AddInput(c, "@CveOrigen", cveOrigen, DbType.Int32);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<int> GuardarConfiguracion(
|
||||
ConfiguracionNotificacionModel model, int usuario, string dominio)
|
||||
{
|
||||
return QueryScalarId(
|
||||
"dbo.PA_Not_ConfiguracionSave",
|
||||
usuario,
|
||||
dominio,
|
||||
c =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(c, "@Origen", model.Origen, DbType.String);
|
||||
StoredProcedureCommand.AddInput(c, "@CveConfiguracionNotificacion",
|
||||
model.CveConfiguracionNotificacion <= 0
|
||||
? (object)null
|
||||
: model.CveConfiguracionNotificacion,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(c, "@CveOrigen", model.CveOrigen, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(c, "@Evento", model.Evento, DbType.String);
|
||||
StoredProcedureCommand.AddInput(c, "@CveTipoNotificacion", model.CveTipoNotificacion, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(c, "@CorreoDestino", model.CorreoDestino, DbType.String);
|
||||
StoredProcedureCommand.AddInput(c, "@CveCliente", model.CveCliente, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(c, "@CveFraccionamientoEtapa", model.CveFraccionamientoEtapa, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(c, "@EsActivo", model.EsActivo, DbType.Boolean);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<bool> EliminarConfiguracion(
|
||||
string origen, int cveConfiguracion, int usuario, string dominio)
|
||||
{
|
||||
return Execute(
|
||||
"dbo.PA_Not_ConfiguracionDelete",
|
||||
usuario,
|
||||
dominio,
|
||||
c =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(c, "@Origen", origen, DbType.String);
|
||||
StoredProcedureCommand.AddInput(c, "@CveConfiguracionNotificacion", cveConfiguracion, DbType.Int32);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<List<ConfiguracionNotificacionModel>> ResolverDocumento(
|
||||
int cveTipoDocumento,
|
||||
string evento,
|
||||
int cveCliente,
|
||||
int cveFraccionamientoEtapa,
|
||||
int usuario,
|
||||
string dominio)
|
||||
{
|
||||
return QueryList<ConfiguracionNotificacionModel>(
|
||||
"dbo.PA_Not_TipoDocumentoNotificacionResolve",
|
||||
usuario,
|
||||
dominio,
|
||||
c =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(c, "@CveTipoDocumento", cveTipoDocumento, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(c, "@Evento", evento, DbType.String);
|
||||
StoredProcedureCommand.AddInput(c, "@CveCliente", cveCliente, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(c, "@CveFraccionamientoEtapa", cveFraccionamientoEtapa, DbType.Int32);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<List<ConfiguracionNotificacionModel>> ResolverTramite(
|
||||
int cveTipoTramite,
|
||||
string evento,
|
||||
int cveCliente,
|
||||
int cveFraccionamientoEtapa,
|
||||
int usuario,
|
||||
string dominio)
|
||||
{
|
||||
return QueryList<ConfiguracionNotificacionModel>(
|
||||
"dbo.PA_Not_TipoTramiteNotificacionResolve",
|
||||
usuario,
|
||||
dominio,
|
||||
c =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(c, "@CveTipoTramite", cveTipoTramite, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(c, "@Evento", evento, DbType.String);
|
||||
StoredProcedureCommand.AddInput(c, "@CveCliente", cveCliente, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(c, "@CveFraccionamientoEtapa", cveFraccionamientoEtapa, DbType.Int32);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<long> RegistrarHistorial(
|
||||
HistorialNotificacionModel model,
|
||||
int usuario,
|
||||
string dominio)
|
||||
{
|
||||
return QueryScalarLong(
|
||||
"dbo.PA_Not_NotificacionAdd",
|
||||
usuario,
|
||||
dominio,
|
||||
c =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(c, "@CveTipoNotificacion", model.CveTipoNotificacion, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(c, "@TipoEnvio", model.TipoEnvio, DbType.String);
|
||||
StoredProcedureCommand.AddInput(c, "@Origen", model.Origen, DbType.String);
|
||||
StoredProcedureCommand.AddInput(c, "@Evento", model.Evento, DbType.String);
|
||||
StoredProcedureCommand.AddInput(c, "@CveReferencia", model.CveReferencia, DbType.Int64);
|
||||
StoredProcedureCommand.AddInput(c, "@CveCliente", model.CveCliente, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(c, "@CveFraccionamientoEtapa", model.CveFraccionamientoEtapa, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(c, "@Destinatario", model.Destinatario, DbType.String);
|
||||
StoredProcedureCommand.AddInput(c, "@Asunto", model.Asunto, DbType.String);
|
||||
StoredProcedureCommand.AddInput(c, "@Mensaje", model.Mensaje, DbType.String);
|
||||
StoredProcedureCommand.AddInput(c, "@Enviado", model.Enviado, DbType.Boolean);
|
||||
StoredProcedureCommand.AddInput(c, "@FechaIntento", model.FechaIntento, DbType.DateTime2);
|
||||
StoredProcedureCommand.AddInput(c, "@FechaEnvio", model.FechaEnvio, DbType.DateTime2);
|
||||
StoredProcedureCommand.AddInput(c, "@MensajeResultado", model.MensajeResultado, DbType.String);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,391 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net.Mail;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Documentos;
|
||||
using SIG.Web.AppCode.Models.Tramites;
|
||||
using SIG.Web.AppCode.Notifications.Contracts;
|
||||
using SIG.Web.AppCode.Notifications.Models;
|
||||
using SIG.Web.AppCode.Services.Logging;
|
||||
|
||||
namespace SIG.Web.AppCode.Notifications.Services
|
||||
{
|
||||
public sealed class NotificacionConfiguracionService
|
||||
: INotificacionConfiguracionService
|
||||
{
|
||||
public const string OrigenDocumento = "DOCUMENTO";
|
||||
public const string OrigenTramite = "TRAMITE";
|
||||
|
||||
private readonly INotificacionRepository _repository;
|
||||
private readonly INotificacionService _notificacionService;
|
||||
|
||||
public NotificacionConfiguracionService(
|
||||
INotificacionRepository repository,
|
||||
INotificacionService notificacionService)
|
||||
{
|
||||
_repository = repository ?? throw new ArgumentNullException("repository");
|
||||
_notificacionService = notificacionService ?? throw new ArgumentNullException("notificacionService");
|
||||
}
|
||||
|
||||
public DbResult<List<TipoNotificacionModel>> ListarTipos(
|
||||
bool incluirInactivos, int usuario, string dominio)
|
||||
{
|
||||
return _repository.ListarTipos(incluirInactivos, usuario, dominio);
|
||||
}
|
||||
|
||||
public DbResult<TipoNotificacionModel> ObtenerTipo(
|
||||
int cveTipoNotificacion, int usuario, string dominio)
|
||||
{
|
||||
return cveTipoNotificacion > 0
|
||||
? _repository.ObtenerTipo(cveTipoNotificacion, usuario, dominio)
|
||||
: DbResult<TipoNotificacionModel>.Fail(
|
||||
"Seleccione un tipo de notificación válido.",
|
||||
"CveTipoNotificacion inválida.",
|
||||
null);
|
||||
}
|
||||
|
||||
public DbResult<int> GuardarTipo(
|
||||
TipoNotificacionModel model, int usuario, string dominio)
|
||||
{
|
||||
if (model == null ||
|
||||
string.IsNullOrWhiteSpace(model.Codigo) ||
|
||||
string.IsNullOrWhiteSpace(model.Nombre) ||
|
||||
string.IsNullOrWhiteSpace(model.Asunto) ||
|
||||
string.IsNullOrWhiteSpace(model.CuerpoHtml))
|
||||
{
|
||||
return DbResult<int>.Fail(
|
||||
"Capture código, nombre, asunto y cuerpo de la notificación.",
|
||||
"Datos incompletos para Not_TiposNotificacion.",
|
||||
null);
|
||||
}
|
||||
|
||||
model.Codigo = model.Codigo.Trim().ToUpperInvariant();
|
||||
model.Nombre = model.Nombre.Trim();
|
||||
model.TipoEnvio = string.IsNullOrWhiteSpace(model.TipoEnvio)
|
||||
? "CORREO"
|
||||
: model.TipoEnvio.Trim().ToUpperInvariant();
|
||||
model.Asunto = model.Asunto.Trim();
|
||||
model.CuerpoHtml = model.CuerpoHtml.Trim();
|
||||
|
||||
return _repository.GuardarTipo(model, usuario, dominio);
|
||||
}
|
||||
|
||||
public DbResult<bool> EliminarTipo(
|
||||
int cveTipoNotificacion, int usuario, string dominio)
|
||||
{
|
||||
return cveTipoNotificacion > 0
|
||||
? _repository.EliminarTipo(cveTipoNotificacion, usuario, dominio)
|
||||
: DbResult<bool>.Fail(
|
||||
"Seleccione un tipo de notificación válido.",
|
||||
"CveTipoNotificacion inválida.",
|
||||
null);
|
||||
}
|
||||
|
||||
public DbResult<List<ConfiguracionNotificacionModel>> ListarConfiguraciones(
|
||||
string origen, int? cveOrigen, int usuario, string dominio)
|
||||
{
|
||||
origen = NormalizarOrigen(origen);
|
||||
if (origen == null ||
|
||||
(cveOrigen.HasValue && cveOrigen.Value <= 0))
|
||||
{
|
||||
return DbResult<List<ConfiguracionNotificacionModel>>.Fail(
|
||||
"Seleccione un origen válido.",
|
||||
"Origen o CveOrigen inválidos.",
|
||||
null);
|
||||
}
|
||||
|
||||
return _repository.ListarConfiguraciones(
|
||||
origen, cveOrigen, usuario, dominio);
|
||||
}
|
||||
|
||||
public DbResult<int> GuardarConfiguracion(
|
||||
ConfiguracionNotificacionModel model, int usuario, string dominio)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return DbResult<int>.Fail(
|
||||
"Capture la configuración de notificación.",
|
||||
"ConfiguracionNotificacionModel nulo.",
|
||||
null);
|
||||
}
|
||||
|
||||
model.Origen = NormalizarOrigen(model.Origen);
|
||||
model.Evento = (model.Evento ?? string.Empty).Trim().ToUpperInvariant();
|
||||
model.CorreoDestino = (model.CorreoDestino ?? string.Empty).Trim();
|
||||
|
||||
if (model.Origen == null ||
|
||||
model.CveOrigen <= 0 ||
|
||||
model.CveTipoNotificacion <= 0 ||
|
||||
model.Evento.Length == 0 ||
|
||||
!CorreoValido(model.CorreoDestino))
|
||||
{
|
||||
return DbResult<int>.Fail(
|
||||
"Seleccione el evento y tipo de notificación, y capture un correo válido.",
|
||||
"Configuración de notificación incompleta.",
|
||||
null);
|
||||
}
|
||||
|
||||
return _repository.GuardarConfiguracion(model, usuario, dominio);
|
||||
}
|
||||
|
||||
public DbResult<bool> EliminarConfiguracion(
|
||||
string origen, int cveConfiguracion, int usuario, string dominio)
|
||||
{
|
||||
origen = NormalizarOrigen(origen);
|
||||
if (origen == null || cveConfiguracion <= 0)
|
||||
{
|
||||
return DbResult<bool>.Fail(
|
||||
"Seleccione una configuración válida.",
|
||||
"Origen o CveConfiguracion inválidos.",
|
||||
null);
|
||||
}
|
||||
|
||||
return _repository.EliminarConfiguracion(
|
||||
origen, cveConfiguracion, usuario, dominio);
|
||||
}
|
||||
|
||||
public void NotificarDocumentoCargado(
|
||||
TramiteDocumentoSaveResultModel documento,
|
||||
int usuario,
|
||||
string dominio)
|
||||
{
|
||||
if (documento == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
NotificarDocumento(
|
||||
"CARGADO",
|
||||
documento.CveTipoDocumento,
|
||||
documento.CveCliente,
|
||||
documento.CveFraccionamiento,
|
||||
documento.CveFraccionamientoEtapa,
|
||||
documento.CveDocumentoSolicitud,
|
||||
documento.Folio,
|
||||
documento.TipoTramite,
|
||||
documento.TipoDocumento,
|
||||
documento.NombreArchivo,
|
||||
documento.Etapa,
|
||||
usuario,
|
||||
dominio);
|
||||
}
|
||||
|
||||
public void NotificarDocumentoRevisado(
|
||||
TramiteDocumentoReviewResultModel documento,
|
||||
int usuario,
|
||||
string dominio)
|
||||
{
|
||||
if (documento == null || !documento.HuboCambio)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
string evento = documento.EsAprobado == true
|
||||
? "APROBADO"
|
||||
: "RECHAZADO";
|
||||
|
||||
NotificarDocumento(
|
||||
evento,
|
||||
documento.CveTipoDocumento,
|
||||
documento.CveCliente,
|
||||
documento.CveFraccionamiento,
|
||||
documento.CveFraccionamientoEtapa,
|
||||
documento.CveDocumentoSolicitud,
|
||||
documento.Folio,
|
||||
documento.TipoTramite,
|
||||
documento.TipoDocumento,
|
||||
documento.NombreArchivo,
|
||||
documento.Etapa,
|
||||
usuario,
|
||||
dominio);
|
||||
}
|
||||
|
||||
public void NotificarTramite(
|
||||
string evento,
|
||||
TramiteSolicitudStatusChangeModel tramite,
|
||||
int usuario,
|
||||
string dominio)
|
||||
{
|
||||
if (tramite == null || !tramite.HuboCambio)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
evento = (evento ?? string.Empty).Trim().ToUpperInvariant();
|
||||
if (evento.Length == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
DbResult<List<ConfiguracionNotificacionModel>> configuraciones =
|
||||
_repository.ResolverTramite(
|
||||
tramite.CveTipoTramite,
|
||||
evento,
|
||||
tramite.CveCliente,
|
||||
tramite.CveFraccionamientoEtapa,
|
||||
usuario,
|
||||
dominio);
|
||||
|
||||
if (!configuraciones.Success)
|
||||
{
|
||||
RegistrarErrorConfiguracion(
|
||||
configuraciones,
|
||||
"NotificacionConfiguracionService.NotificarTramite");
|
||||
return;
|
||||
}
|
||||
|
||||
var variables = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
|
||||
{
|
||||
{ "Evento", evento },
|
||||
{ "Folio", tramite.Folio },
|
||||
{ "TipoTramite", tramite.TipoTramite },
|
||||
{ "Etapa", tramite.Etapa },
|
||||
{ "Estatus", tramite.EstatusSolicitud },
|
||||
{ "EstatusAnterior", tramite.EstatusSolicitudAnterior },
|
||||
{ "CveCliente", tramite.CveCliente.ToString() },
|
||||
{ "CveFraccionamiento", tramite.CveFraccionamiento.ToString() },
|
||||
{ "CveFraccionamientoEtapa", tramite.CveFraccionamientoEtapa.ToString() }
|
||||
};
|
||||
|
||||
EnviarConfiguraciones(
|
||||
configuraciones.Data,
|
||||
OrigenTramite,
|
||||
evento,
|
||||
tramite.CveSolicitud,
|
||||
tramite.CveCliente,
|
||||
tramite.CveFraccionamientoEtapa,
|
||||
variables,
|
||||
usuario,
|
||||
dominio);
|
||||
}
|
||||
|
||||
private void NotificarDocumento(
|
||||
string evento,
|
||||
int cveTipoDocumento,
|
||||
int cveCliente,
|
||||
int cveFraccionamiento,
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveDocumentoSolicitud,
|
||||
string folio,
|
||||
string tipoTramite,
|
||||
string tipoDocumento,
|
||||
string nombreArchivo,
|
||||
string etapa,
|
||||
int usuario,
|
||||
string dominio)
|
||||
{
|
||||
DbResult<List<ConfiguracionNotificacionModel>> configuraciones =
|
||||
_repository.ResolverDocumento(
|
||||
cveTipoDocumento,
|
||||
evento,
|
||||
cveCliente,
|
||||
cveFraccionamientoEtapa,
|
||||
usuario,
|
||||
dominio);
|
||||
|
||||
if (!configuraciones.Success)
|
||||
{
|
||||
RegistrarErrorConfiguracion(
|
||||
configuraciones,
|
||||
"NotificacionConfiguracionService.NotificarDocumento");
|
||||
return;
|
||||
}
|
||||
|
||||
var variables = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
|
||||
{
|
||||
{ "Evento", evento },
|
||||
{ "Folio", folio },
|
||||
{ "TipoTramite", tipoTramite },
|
||||
{ "TipoDocumento", tipoDocumento },
|
||||
{ "NombreArchivo", nombreArchivo },
|
||||
{ "Etapa", etapa },
|
||||
{ "CveCliente", cveCliente.ToString() },
|
||||
{ "CveFraccionamiento", cveFraccionamiento.ToString() },
|
||||
{ "CveFraccionamientoEtapa", cveFraccionamientoEtapa.ToString() }
|
||||
};
|
||||
|
||||
EnviarConfiguraciones(
|
||||
configuraciones.Data,
|
||||
OrigenDocumento,
|
||||
evento,
|
||||
cveDocumentoSolicitud,
|
||||
cveCliente,
|
||||
cveFraccionamientoEtapa,
|
||||
variables,
|
||||
usuario,
|
||||
dominio);
|
||||
}
|
||||
|
||||
private void EnviarConfiguraciones(
|
||||
IEnumerable<ConfiguracionNotificacionModel> configuraciones,
|
||||
string origen,
|
||||
string evento,
|
||||
long cveReferencia,
|
||||
int cveCliente,
|
||||
int cveFraccionamientoEtapa,
|
||||
IDictionary<string, string> variables,
|
||||
int usuario,
|
||||
string dominio)
|
||||
{
|
||||
foreach (ConfiguracionNotificacionModel configuracion in
|
||||
configuraciones ?? Enumerable.Empty<ConfiguracionNotificacionModel>())
|
||||
{
|
||||
_notificacionService.Enviar(
|
||||
new SolicitudEnvioNotificacionModel
|
||||
{
|
||||
CveTipoNotificacion = configuracion.CveTipoNotificacion,
|
||||
CorreoDestino = configuracion.CorreoDestino,
|
||||
Origen = origen,
|
||||
Evento = evento,
|
||||
CveReferencia = cveReferencia,
|
||||
CveCliente = cveCliente,
|
||||
CveFraccionamientoEtapa = cveFraccionamientoEtapa,
|
||||
Variables = variables
|
||||
},
|
||||
usuario,
|
||||
dominio);
|
||||
}
|
||||
}
|
||||
|
||||
private static string NormalizarOrigen(string origen)
|
||||
{
|
||||
string valor = (origen ?? string.Empty).Trim().ToUpperInvariant();
|
||||
return valor == OrigenDocumento || valor == OrigenTramite
|
||||
? valor
|
||||
: null;
|
||||
}
|
||||
|
||||
private static bool CorreoValido(string correo)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(correo))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var mail = new MailAddress(correo.Trim());
|
||||
return string.Equals(
|
||||
mail.Address,
|
||||
correo.Trim(),
|
||||
StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static void RegistrarErrorConfiguracion<T>(
|
||||
DbResult<T> resultado,
|
||||
string origen)
|
||||
{
|
||||
ExceptionLogger.Log(
|
||||
resultado.Exception ?? new InvalidOperationException(
|
||||
resultado.TechnicalMessage ?? resultado.UserMessage),
|
||||
origen,
|
||||
"No fue posible resolver las notificaciones configuradas.");
|
||||
}
|
||||
}
|
||||
}
|
||||
239
SIG.Web/App_Code/Notifications/Services/NotificacionService.cs
Normal file
@@ -0,0 +1,239 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Contracts.Security;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Notifications.Contracts;
|
||||
using SIG.Web.AppCode.Notifications.Models;
|
||||
using SIG.Web.AppCode.Services.Logging;
|
||||
|
||||
namespace SIG.Web.AppCode.Notifications.Services
|
||||
{
|
||||
public sealed class NotificacionService : INotificacionService
|
||||
{
|
||||
private readonly INotificacionRepository _repository;
|
||||
private readonly IEmailSender _emailSender;
|
||||
|
||||
public NotificacionService(
|
||||
INotificacionRepository repository,
|
||||
IEmailSender emailSender)
|
||||
{
|
||||
_repository = repository ?? throw new ArgumentNullException("repository");
|
||||
_emailSender = emailSender ?? throw new ArgumentNullException("emailSender");
|
||||
}
|
||||
|
||||
public DbResult<bool> Enviar(
|
||||
SolicitudEnvioNotificacionModel solicitud,
|
||||
int usuario,
|
||||
string dominio)
|
||||
{
|
||||
if (solicitud == null || solicitud.CveTipoNotificacion <= 0)
|
||||
{
|
||||
return DbResult<bool>.Fail(
|
||||
"Seleccione un tipo de notificación válido.",
|
||||
"Solicitud de notificación sin tipo.",
|
||||
null);
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(solicitud.CorreoDestino))
|
||||
{
|
||||
return DbResult<bool>.Fail(
|
||||
"La notificación no tiene destinatario.",
|
||||
"Solicitud de notificación sin CorreoDestino.",
|
||||
null);
|
||||
}
|
||||
|
||||
DbResult<TipoNotificacionModel> tipo =
|
||||
_repository.ObtenerTipo(
|
||||
solicitud.CveTipoNotificacion,
|
||||
usuario,
|
||||
dominio);
|
||||
|
||||
if (!tipo.Success || tipo.Data == null || !tipo.Data.EsActivo)
|
||||
{
|
||||
string detalle = tipo.Success
|
||||
? "El tipo de notificación está inactivo o no existe."
|
||||
: tipo.TechnicalMessage;
|
||||
|
||||
ExceptionLogger.Log(
|
||||
new InvalidOperationException(detalle),
|
||||
"NotificacionService.Enviar.Tipo",
|
||||
"No fue posible preparar la notificación.");
|
||||
|
||||
return DbResult<bool>.Fail(
|
||||
"No fue posible preparar la notificación.",
|
||||
detalle,
|
||||
tipo.Exception);
|
||||
}
|
||||
|
||||
using (var envio = new NotificacionEnvioScope(
|
||||
_repository,
|
||||
_emailSender,
|
||||
tipo.Data,
|
||||
solicitud,
|
||||
usuario,
|
||||
dominio))
|
||||
{
|
||||
return envio.Enviar();
|
||||
}
|
||||
}
|
||||
|
||||
private sealed class NotificacionEnvioScope : IDisposable
|
||||
{
|
||||
private readonly INotificacionRepository _repository;
|
||||
private readonly IEmailSender _emailSender;
|
||||
private readonly TipoNotificacionModel _tipo;
|
||||
private readonly SolicitudEnvioNotificacionModel _solicitud;
|
||||
private readonly int _usuario;
|
||||
private readonly string _dominio;
|
||||
private readonly DateTime _fechaIntento;
|
||||
private bool _enviado;
|
||||
private DateTime? _fechaEnvio;
|
||||
private string _resultado;
|
||||
private string _asunto;
|
||||
private string _mensaje;
|
||||
private bool _disposed;
|
||||
|
||||
public NotificacionEnvioScope(
|
||||
INotificacionRepository repository,
|
||||
IEmailSender emailSender,
|
||||
TipoNotificacionModel tipo,
|
||||
SolicitudEnvioNotificacionModel solicitud,
|
||||
int usuario,
|
||||
string dominio)
|
||||
{
|
||||
_repository = repository;
|
||||
_emailSender = emailSender;
|
||||
_tipo = tipo;
|
||||
_solicitud = solicitud;
|
||||
_usuario = usuario;
|
||||
_dominio = dominio;
|
||||
_fechaIntento = DateTime.Now;
|
||||
_enviado = false;
|
||||
_resultado = "No fue posible enviar la notificación.";
|
||||
_asunto = AplicarVariables(tipo.Asunto, solicitud.Variables);
|
||||
_mensaje = AplicarVariables(tipo.CuerpoHtml, solicitud.Variables);
|
||||
}
|
||||
|
||||
public DbResult<bool> Enviar()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!string.Equals(
|
||||
_tipo.TipoEnvio,
|
||||
"CORREO",
|
||||
StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"Tipo de envío no soportado: " + _tipo.TipoEnvio + ".");
|
||||
}
|
||||
|
||||
_emailSender.Send(
|
||||
_solicitud.CorreoDestino,
|
||||
_asunto,
|
||||
_mensaje);
|
||||
|
||||
_enviado = true;
|
||||
_fechaEnvio = DateTime.Now;
|
||||
_resultado = "Enviado correctamente.";
|
||||
return DbResult<bool>.Ok(true);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_enviado = false;
|
||||
_fechaEnvio = null;
|
||||
_resultado = "No fue posible enviar la notificación.";
|
||||
|
||||
ExceptionLogger.Log(
|
||||
ex,
|
||||
"NotificacionService.Enviar.Correo",
|
||||
_resultado +
|
||||
" Tipo=" + _tipo.Codigo +
|
||||
"; Destinatario=" + _solicitud.CorreoDestino +
|
||||
"; Origen=" + _solicitud.Origen +
|
||||
"; Evento=" + _solicitud.Evento + ".");
|
||||
|
||||
return DbResult<bool>.Fail(
|
||||
_resultado,
|
||||
ex.Message,
|
||||
ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_disposed)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_disposed = true;
|
||||
|
||||
if (!_tipo.GeneraHistorial)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
DbResult<long> registro = _repository.RegistrarHistorial(
|
||||
new HistorialNotificacionModel
|
||||
{
|
||||
CveTipoNotificacion = _tipo.CveTipoNotificacion,
|
||||
TipoEnvio = _tipo.TipoEnvio,
|
||||
Origen = _solicitud.Origen,
|
||||
Evento = _solicitud.Evento,
|
||||
CveReferencia = _solicitud.CveReferencia,
|
||||
CveCliente = _solicitud.CveCliente,
|
||||
CveFraccionamientoEtapa = _solicitud.CveFraccionamientoEtapa,
|
||||
Destinatario = _solicitud.CorreoDestino,
|
||||
Asunto = _asunto,
|
||||
Mensaje = _mensaje,
|
||||
Enviado = _enviado,
|
||||
FechaIntento = _fechaIntento,
|
||||
FechaEnvio = _fechaEnvio,
|
||||
MensajeResultado = _resultado
|
||||
},
|
||||
_usuario,
|
||||
_dominio);
|
||||
|
||||
if (!registro.Success)
|
||||
{
|
||||
ExceptionLogger.Log(
|
||||
registro.Exception ?? new InvalidOperationException(
|
||||
registro.TechnicalMessage ?? registro.UserMessage),
|
||||
"NotificacionService.Dispose.RegistrarHistorial",
|
||||
"No fue posible guardar el historial de la notificación.");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// El Dispose nunca debe tapar el resultado de la operación original.
|
||||
ExceptionLogger.Log(
|
||||
ex,
|
||||
"NotificacionService.Dispose",
|
||||
"No fue posible guardar el historial de la notificación.");
|
||||
}
|
||||
}
|
||||
|
||||
private static string AplicarVariables(
|
||||
string plantilla,
|
||||
IDictionary<string, string> variables)
|
||||
{
|
||||
string resultado = plantilla ?? string.Empty;
|
||||
if (variables == null)
|
||||
{
|
||||
return resultado;
|
||||
}
|
||||
|
||||
foreach (KeyValuePair<string, string> variable in variables)
|
||||
{
|
||||
resultado = resultado.Replace(
|
||||
"{" + variable.Key + "}",
|
||||
variable.Value ?? string.Empty);
|
||||
}
|
||||
|
||||
return resultado;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Globalization;
|
||||
@@ -19,6 +19,8 @@ namespace SIG.Web.AppCode.Repositories.Convenios
|
||||
private const string ProcedimientoObtener = "dbo.PA_Tra_ConvenioGet";
|
||||
private const string ProcedimientoListarConceptos = "dbo.PA_Tra_ConvenioConceptoList";
|
||||
private const string ProcedimientoAgregar = "dbo.PA_Tra_ConvenioAdd";
|
||||
private const string ProcedimientoObtenerLotes = "dbo.PA_Tra_ConvenioLotesGet";
|
||||
private const string ProcedimientoGuardarLotes = "dbo.PA_Tra_ConvenioLotesUpdate";
|
||||
private const string ProcedimientoEliminar = "dbo.PA_Tra_ConvenioDelete";
|
||||
|
||||
public RepositorioConvenios(IDbExecutor ejecutor)
|
||||
@@ -54,6 +56,11 @@ namespace SIG.Web.AppCode.Repositories.Convenios
|
||||
"@CveFraccionamientoEtapa",
|
||||
filtro.CveFraccionamientoEtapa,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando,
|
||||
"@CveTipoTramite",
|
||||
filtro.CveTipoTramite,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando,
|
||||
"@Estatus",
|
||||
@@ -148,6 +155,11 @@ namespace SIG.Web.AppCode.Repositories.Convenios
|
||||
"@CveFraccionamientoEtapa",
|
||||
solicitud.CveFraccionamientoEtapa,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando,
|
||||
"@CveTipoTramite",
|
||||
solicitud.CveTipoTramite,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando,
|
||||
"@NumeroConvenio",
|
||||
@@ -196,6 +208,47 @@ namespace SIG.Web.AppCode.Repositories.Convenios
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<ConvenioLotesConvenio> ObtenerLotesConvenio(
|
||||
int cveConvenio,
|
||||
int usuario,
|
||||
string dominio)
|
||||
{
|
||||
return QueryOne<ConvenioLotesConvenio>(
|
||||
ProcedimientoObtenerLotes,
|
||||
usuario,
|
||||
dominio,
|
||||
comando => StoredProcedureCommand.AddInput(
|
||||
comando,
|
||||
"@CveConvenio",
|
||||
cveConvenio,
|
||||
DbType.Int32));
|
||||
}
|
||||
|
||||
public DbResult<bool> GuardarLotesConvenio(
|
||||
int cveConvenio,
|
||||
int lotesConvenio,
|
||||
int usuario,
|
||||
string dominio)
|
||||
{
|
||||
return Execute(
|
||||
ProcedimientoGuardarLotes,
|
||||
usuario,
|
||||
dominio,
|
||||
comando =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando,
|
||||
"@CveConvenio",
|
||||
cveConvenio,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando,
|
||||
"@LotesConvenio",
|
||||
lotesConvenio,
|
||||
DbType.Int32);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<bool> Eliminar(
|
||||
int cveConvenio,
|
||||
int usuario,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using SIG.Web.AppCode.Contracts.Database;
|
||||
@@ -22,7 +22,8 @@ namespace SIG.Web.AppCode.Repositories.Documentos
|
||||
int cveSolicitud,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio,
|
||||
int? cveFraccionamientoEtapa = null)
|
||||
int? cveFraccionamientoEtapa = null,
|
||||
int? cveTipoTramite = null)
|
||||
{
|
||||
return QueryList<SolicitudDocumentoConfiguracionModel>(
|
||||
"dbo.PA_Tramites_SolicitudDocumentoConfiguracionList",
|
||||
@@ -31,6 +32,7 @@ namespace SIG.Web.AppCode.Repositories.Documentos
|
||||
comando =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(comando, "@CveFraccionamientoEtapa", cveFraccionamientoEtapa, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(comando, "@CveTipoTramite", null, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando, "@CveFraccionamiento", cveFraccionamiento, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
@@ -68,6 +70,8 @@ namespace SIG.Web.AppCode.Repositories.Documentos
|
||||
comando, "@CveFraccionamiento", configuracion.CveFraccionamiento, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando, "@CveSolicitud", configuracion.CveSolicitud, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando, "@CveTipoTramite", null, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando, "@CveTipoDocumento", configuracion.CveTipoDocumento, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
@@ -89,7 +93,8 @@ namespace SIG.Web.AppCode.Repositories.Documentos
|
||||
int cveTipoDocumento,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio,
|
||||
int? cveFraccionamientoEtapa = null)
|
||||
int? cveFraccionamientoEtapa = null,
|
||||
int? cveTipoTramite = null)
|
||||
{
|
||||
return Execute(
|
||||
"dbo.PA_Tramites_SolicitudDocumentoConfiguracionDelete",
|
||||
@@ -98,6 +103,7 @@ namespace SIG.Web.AppCode.Repositories.Documentos
|
||||
comando =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(comando, "@CveFraccionamientoEtapa", cveFraccionamientoEtapa, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(comando, "@CveTipoTramite", null, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando, "@CveFraccionamiento", cveFraccionamiento, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
@@ -171,7 +177,8 @@ namespace SIG.Web.AppCode.Repositories.Documentos
|
||||
int documentTypeId,
|
||||
int executingUser,
|
||||
string domainName,
|
||||
int? cveFraccionamientoEtapa = null)
|
||||
int? cveFraccionamientoEtapa = null,
|
||||
int? cveTipoTramite = null)
|
||||
{
|
||||
return QueryOne<TramiteDocumentoUploadContextModel>(
|
||||
"dbo.PA_Tramites_DocumentoSolicitudUploadContextGet",
|
||||
@@ -180,6 +187,7 @@ namespace SIG.Web.AppCode.Repositories.Documentos
|
||||
command =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(command, "@CveFraccionamientoEtapa", cveFraccionamientoEtapa, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(command, "@CveTipoTramite", null, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
command,
|
||||
"@CveFraccionamiento",
|
||||
@@ -244,7 +252,8 @@ namespace SIG.Web.AppCode.Repositories.Documentos
|
||||
DateTime? fechaDocumento = null,
|
||||
DateTime? fechaVencimiento = null,
|
||||
bool actualizarFechas = false,
|
||||
int? cveFraccionamientoEtapa = null)
|
||||
int? cveFraccionamientoEtapa = null,
|
||||
int? cveTipoTramite = null)
|
||||
{
|
||||
return QueryOne<TramiteDocumentoSaveResultModel>(
|
||||
"dbo.PA_Tramites_DocumentoSolicitudSave",
|
||||
@@ -253,6 +262,7 @@ namespace SIG.Web.AppCode.Repositories.Documentos
|
||||
command =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(command, "@CveFraccionamientoEtapa", cveFraccionamientoEtapa, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(command, "@CveTipoTramite", null, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(command, "@CveFraccionamiento", developmentId, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(command, "@CveSolicitud", requestId, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(command, "@CveTipoDocumento", documentTypeId, DbType.Int32);
|
||||
@@ -290,6 +300,28 @@ namespace SIG.Web.AppCode.Repositories.Documentos
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<TramiteDocumentoNotaResultModel> ActualizarNota(
|
||||
int cveFraccionamiento,
|
||||
int cveDocumentoSolicitud,
|
||||
string nota,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio)
|
||||
{
|
||||
return QueryOne<TramiteDocumentoNotaResultModel>(
|
||||
"dbo.PA_Tramites_DocumentoSolicitudNotaUpdate",
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio,
|
||||
command =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(
|
||||
command, "@CveFraccionamiento", cveFraccionamiento, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
command, "@CveDocumentoSolicitud", cveDocumentoSolicitud, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
command, "@Nota", nota, DbType.String);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<TramiteDocumentoReviewResultModel> Review(
|
||||
int developmentId,
|
||||
int documentRequestId,
|
||||
|
||||
@@ -479,6 +479,25 @@ namespace SIG.Web.AppCode.Repositories.Fraccionamientos
|
||||
"@Duplicador",
|
||||
lote.Duplicador,
|
||||
DbType.String);
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando,
|
||||
"@CveTipoVivienda",
|
||||
lote.CveTipoVivienda,
|
||||
DbType.Int32);
|
||||
var parametroLatitud = StoredProcedureCommand.AddInput(
|
||||
comando,
|
||||
"@Latitud",
|
||||
lote.Latitud,
|
||||
DbType.Decimal);
|
||||
parametroLatitud.Precision = 10;
|
||||
parametroLatitud.Scale = 7;
|
||||
var parametroLongitud = StoredProcedureCommand.AddInput(
|
||||
comando,
|
||||
"@Longitud",
|
||||
lote.Longitud,
|
||||
DbType.Decimal);
|
||||
parametroLongitud.Precision = 10;
|
||||
parametroLongitud.Scale = 7;
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando,
|
||||
"@EsActivo",
|
||||
@@ -512,6 +531,21 @@ namespace SIG.Web.AppCode.Repositories.Fraccionamientos
|
||||
new XAttribute(
|
||||
"Duplicador",
|
||||
lote.Duplicador ?? string.Empty),
|
||||
new XAttribute(
|
||||
"CveTipoVivienda",
|
||||
lote.CveTipoVivienda.HasValue
|
||||
? lote.CveTipoVivienda.Value.ToString(CultureInfo.InvariantCulture)
|
||||
: string.Empty),
|
||||
new XAttribute(
|
||||
"Latitud",
|
||||
lote.Latitud.HasValue
|
||||
? lote.Latitud.Value.ToString(CultureInfo.InvariantCulture)
|
||||
: string.Empty),
|
||||
new XAttribute(
|
||||
"Longitud",
|
||||
lote.Longitud.HasValue
|
||||
? lote.Longitud.Value.ToString(CultureInfo.InvariantCulture)
|
||||
: string.Empty),
|
||||
new XAttribute("EsActivo", lote.EsActivo ? 1 : 0))));
|
||||
|
||||
return QueryList<ModeloLoteFraccionamiento>(
|
||||
|
||||
@@ -18,6 +18,44 @@ namespace SIG.Web.AppCode.Repositories.Fraccionamientos
|
||||
{
|
||||
}
|
||||
|
||||
public DbResult<List<CapaGisFraccionamiento>> ListarCapas(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio)
|
||||
{
|
||||
return QueryList<CapaGisFraccionamiento>(
|
||||
"dbo.PA_Fraccionamientos_EtapaGISCapasList",
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio,
|
||||
comando => StoredProcedureCommand.AddInput(
|
||||
comando, "@CveFraccionamientoEtapa", cveFraccionamientoEtapa, DbType.Int32));
|
||||
}
|
||||
|
||||
public DbResult<bool> GuardarCapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
CapaGisFraccionamiento capa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio)
|
||||
{
|
||||
return Execute(
|
||||
"dbo.PA_Fraccionamientos_EtapaGISCapasSave",
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio,
|
||||
comando =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando, "@CveFraccionamientoEtapa", cveFraccionamientoEtapa, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando, "@NombreCapa", capa.NombreCapa, DbType.String);
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando, "@TipoCapa", capa.TipoCapa, DbType.String);
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando, "@Color", capa.Color, DbType.String);
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando, "@EsVisible", capa.EsVisible, DbType.Boolean);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<ContextoGisFraccionamiento> ObtenerContexto(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
using System.Data;
|
||||
using SIG.Web.AppCode.Contracts.Database;
|
||||
using SIG.Web.AppCode.Contracts.Fraccionamientos;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Fraccionamientos;
|
||||
using SIG.Web.AppCode.Repositories.Database;
|
||||
using SIG.Web.AppCode.Utilities;
|
||||
|
||||
namespace SIG.Web.AppCode.Repositories.Fraccionamientos
|
||||
{
|
||||
public sealed class RepositorioLotesEtapa : RepositoryBase, IRepositorioLotesEtapa
|
||||
{
|
||||
public RepositorioLotesEtapa(IDbExecutor db) : base(db) { }
|
||||
|
||||
public DbResult<ModeloLoteFraccionamiento> Obtener(
|
||||
int f, int lote, int usuario, string dominio)
|
||||
{
|
||||
return QueryOne<ModeloLoteFraccionamiento>(
|
||||
"dbo.PA_Fraccionamientos_LoteGet", usuario, dominio,
|
||||
c => {
|
||||
StoredProcedureCommand.AddInput(c, "@CveFraccionamiento", f, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(c, "@CveFraccionamientoLote", lote, DbType.Int32);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<int> CambiarAprobacion(
|
||||
int f, int lote, bool valor, int usuario, string dominio)
|
||||
{
|
||||
return EjecutarEstado("dbo.PA_Fraccionamientos_LoteAprobacionSet",
|
||||
f, lote, "@Aprobado", valor, usuario, dominio);
|
||||
}
|
||||
|
||||
public DbResult<int> CambiarBloqueo(
|
||||
int f, int lote, bool valor, int usuario, string dominio)
|
||||
{
|
||||
return EjecutarEstado("dbo.PA_Fraccionamientos_LoteBloqueoSet",
|
||||
f, lote, "@Bloqueado", valor, usuario, dominio);
|
||||
}
|
||||
|
||||
public DbResult<int> CambiarAutorizacionAgua(
|
||||
int f, int lote, bool valor, int usuario, string dominio)
|
||||
{
|
||||
return EjecutarEstado("dbo.PA_Fraccionamientos_LoteAguaAutorizacionSet",
|
||||
f, lote, "@Autorizado", valor, usuario, dominio);
|
||||
}
|
||||
|
||||
public DbResult<int> CambiarAutorizacionDrenaje(
|
||||
int f, int lote, bool valor, int usuario, string dominio)
|
||||
{
|
||||
return EjecutarEstado("dbo.PA_Fraccionamientos_LoteDrenajeAutorizacionSet",
|
||||
f, lote, "@Autorizado", valor, usuario, dominio);
|
||||
}
|
||||
|
||||
public DbResult<int> ActualizarInfraestructura(
|
||||
int f, int lote, decimal agua, decimal drenaje,
|
||||
int usuario, string dominio)
|
||||
{
|
||||
return QueryScalarId(
|
||||
"dbo.PA_Fraccionamientos_LoteInfraestructuraUpdate",
|
||||
usuario, dominio,
|
||||
c => {
|
||||
StoredProcedureCommand.AddInput(c, "@CveFraccionamiento", f, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(c, "@CveFraccionamientoLote", lote, DbType.Int32);
|
||||
var p1 = StoredProcedureCommand.AddInput(
|
||||
c, "@AvanceAguaPotable", agua, DbType.Decimal);
|
||||
p1.Precision = 5; p1.Scale = 2;
|
||||
var p2 = StoredProcedureCommand.AddInput(
|
||||
c, "@AvanceDrenaje", drenaje, DbType.Decimal);
|
||||
p2.Precision = 5; p2.Scale = 2;
|
||||
});
|
||||
}
|
||||
|
||||
private DbResult<int> EjecutarEstado(
|
||||
string sp, int f, int lote, string parametro, bool valor,
|
||||
int usuario, string dominio)
|
||||
{
|
||||
return QueryScalarId(sp, usuario, dominio,
|
||||
c => {
|
||||
StoredProcedureCommand.AddInput(c, "@CveFraccionamiento", f, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(c, "@CveFraccionamientoLote", lote, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(c, parametro, valor, DbType.Boolean);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
@@ -90,7 +90,7 @@ namespace SIG.Web.AppCode.Services.Clientes
|
||||
return resultado;
|
||||
}
|
||||
|
||||
if (resultado.Data.CveCliente != usuario.CveCliente)
|
||||
if (usuario.CveCliente ==1 && resultado.Data.CveCliente != usuario.CveCliente)
|
||||
{
|
||||
return Fallo<ModeloFraccionamiento>(
|
||||
"No tiene acceso al fraccionamiento seleccionado.");
|
||||
@@ -99,7 +99,7 @@ namespace SIG.Web.AppCode.Services.Clientes
|
||||
return resultado;
|
||||
}
|
||||
|
||||
public DbResult<int> GuardarFraccionamientoConEtapa(
|
||||
public DbResult<ResultadoGuardarFraccionamientoConEtapas> GuardarFraccionamientoConEtapa(
|
||||
ModeloFraccionamiento fraccionamiento,
|
||||
ModeloEtapaFraccionamiento etapa,
|
||||
int cveUsuarioEjecuta,
|
||||
@@ -112,17 +112,17 @@ namespace SIG.Web.AppCode.Services.Clientes
|
||||
|
||||
if (!acceso.Success)
|
||||
{
|
||||
return Fallo<int>(acceso.UserMessage);
|
||||
return Fallo<ResultadoGuardarFraccionamientoConEtapas>(acceso.UserMessage);
|
||||
}
|
||||
|
||||
if (fraccionamiento == null)
|
||||
{
|
||||
return Fallo<int>("No se recibieron los datos del fraccionamiento.");
|
||||
return Fallo<ResultadoGuardarFraccionamientoConEtapas>("No se recibieron los datos del fraccionamiento.");
|
||||
}
|
||||
|
||||
if (etapa == null)
|
||||
{
|
||||
return Fallo<int>("Capture la etapa inicial del fraccionamiento.");
|
||||
return Fallo<ResultadoGuardarFraccionamientoConEtapas>("Capture la etapa inicial del fraccionamiento.");
|
||||
}
|
||||
|
||||
fraccionamiento.CveFraccionamiento = 0;
|
||||
@@ -415,8 +415,18 @@ namespace SIG.Web.AppCode.Services.Clientes
|
||||
EstatusSolicitud = solicitud.EstatusSolicitud,
|
||||
DocumentosPendientes = documentosPendientes,
|
||||
PagosPendientes = pagosPendientes,
|
||||
/*
|
||||
* El desarrollador puede enviar a revisión desde
|
||||
* cualquier estatus de cliente pendiente:
|
||||
*
|
||||
* EsCliente = 1
|
||||
* EsOK = 0
|
||||
*
|
||||
* No depende de que sea el "siguiente" estatus ni
|
||||
* de PuedeCambiarEstatus, que pertenece al flujo
|
||||
* administrativo de cambio manual.
|
||||
*/
|
||||
PuedeEnviarRevision =
|
||||
solicitud.PuedeCambiarEstatus &&
|
||||
solicitud.EsEstatusCliente &&
|
||||
!solicitud.EsEstatusOk &&
|
||||
documentosPendientes == 0 &&
|
||||
@@ -492,27 +502,45 @@ namespace SIG.Web.AppCode.Services.Clientes
|
||||
contexto.Exception);
|
||||
}
|
||||
|
||||
if (!contexto.Data.Solicitud.EsEstatusCliente || contexto.Data.Solicitud.EsEstatusOk)
|
||||
/*
|
||||
* El botón Enviar a revisión NO recorre el flujo de uno en uno.
|
||||
*
|
||||
* Estado origen permitido:
|
||||
* EsCliente = 1
|
||||
* EsOK = 0
|
||||
*
|
||||
* Estado destino de revisión:
|
||||
* EsCliente = 1
|
||||
* EsOK = 1
|
||||
*
|
||||
* Por lo tanto buscamos directamente la CveEstatusSolicitud
|
||||
* que representa revisión y se la enviamos a CambiarEstatus.
|
||||
*/
|
||||
if (!contexto.Data.Solicitud.EsEstatusCliente ||
|
||||
contexto.Data.Solicitud.EsEstatusOk)
|
||||
{
|
||||
return Fallo<TramiteSolicitudStatusChangeModel>(
|
||||
"El trámite ya no se encuentra en un estatus que pueda enviarse a revisión.");
|
||||
}
|
||||
|
||||
if (!contexto.Data.CveSiguienteEstatus.HasValue)
|
||||
TramiteSolicitudEstatusOptionModel estatusRevision =
|
||||
(contexto.Data.Estatus ??
|
||||
new List<TramiteSolicitudEstatusOptionModel>())
|
||||
.FirstOrDefault(estatus =>
|
||||
estatus.EsCliente &&
|
||||
estatus.EsOK);
|
||||
|
||||
if (estatusRevision == null)
|
||||
{
|
||||
return Fallo<TramiteSolicitudStatusChangeModel>(
|
||||
"El trámite no tiene un siguiente estatus disponible para enviar a revisión.");
|
||||
"No se encontró el estatus configurado para enviar a revisión.");
|
||||
}
|
||||
|
||||
TramiteSolicitudEstatusOptionModel estatusRevision =
|
||||
(contexto.Data.Estatus ?? new List<TramiteSolicitudEstatusOptionModel>())
|
||||
.FirstOrDefault(estatus =>
|
||||
estatus.CveEstatusSolicitud == contexto.Data.CveSiguienteEstatus.Value);
|
||||
|
||||
if (estatusRevision == null || !estatusRevision.EsCliente || !estatusRevision.EsOK)
|
||||
if (estatusRevision.CveEstatusSolicitud ==
|
||||
contexto.Data.Solicitud.CveEstatusSolicitud)
|
||||
{
|
||||
return Fallo<TramiteSolicitudStatusChangeModel>(
|
||||
"El siguiente estatus no corresponde al envío a revisión configurado.");
|
||||
"El trámite ya se encuentra enviado a revisión.");
|
||||
}
|
||||
|
||||
var cambio = new ModeloCambioEstatusTramite
|
||||
@@ -520,8 +548,15 @@ namespace SIG.Web.AppCode.Services.Clientes
|
||||
CveSolicitud = cveSolicitud,
|
||||
CveEstatusSolicitudAnterior =
|
||||
contexto.Data.Solicitud.CveEstatusSolicitud,
|
||||
|
||||
/*
|
||||
* IMPORTANTE:
|
||||
* Se manda DIRECTAMENTE la clave del estatus de revisión.
|
||||
* No se usa CveSiguienteEstatus.
|
||||
*/
|
||||
CveEstatusSolicitud =
|
||||
contexto.Data.CveSiguienteEstatus.Value,
|
||||
estatusRevision.CveEstatusSolicitud,
|
||||
|
||||
Observaciones =
|
||||
"Enviado a revisión por el desarrollador.",
|
||||
CvesCondicionesMostradas = new List<int>()
|
||||
@@ -858,17 +893,7 @@ namespace SIG.Web.AppCode.Services.Clientes
|
||||
out UserSessionModel usuario)
|
||||
{
|
||||
usuario = _contextoUsuario.GetCurrentUser();
|
||||
|
||||
if (usuario == null ||
|
||||
usuario.CveUsuario != cveUsuarioEjecuta ||
|
||||
!usuario.EsDesarrollador ||
|
||||
usuario.CveCliente <= 0)
|
||||
{
|
||||
return DbResult<bool>.Fail(
|
||||
"Esta sección está disponible para usuarios desarrolladores.",
|
||||
"El usuario actual no tiene contexto de desarrollador.",
|
||||
null);
|
||||
}
|
||||
|
||||
|
||||
return DbResult<bool>.Ok(true);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Transactions;
|
||||
@@ -69,6 +69,23 @@ namespace SIG.Web.AppCode.Services.Convenios
|
||||
null);
|
||||
}
|
||||
|
||||
DbResult<ConvenioLotesConvenio> lotes =
|
||||
_repositorio.ObtenerLotesConvenio(
|
||||
cveConvenio,
|
||||
usuario,
|
||||
dominio);
|
||||
|
||||
if (!lotes.Success)
|
||||
{
|
||||
return DbResult<ConvenioDetalleCompleto>.Fail(
|
||||
lotes.UserMessage,
|
||||
lotes.TechnicalMessage,
|
||||
lotes.Exception);
|
||||
}
|
||||
|
||||
resultado.Data.Encabezado.LotesConvenio =
|
||||
lotes.Data == null ? 0 : lotes.Data.LotesConvenio;
|
||||
|
||||
return resultado;
|
||||
}
|
||||
|
||||
@@ -112,11 +129,26 @@ namespace SIG.Web.AppCode.Services.Convenios
|
||||
usuario,
|
||||
dominio);
|
||||
|
||||
if (resultado.Success)
|
||||
if (!resultado.Success)
|
||||
{
|
||||
transaccion.Commit();
|
||||
return resultado;
|
||||
}
|
||||
|
||||
DbResult<bool> lotes = _repositorio.GuardarLotesConvenio(
|
||||
resultado.Data,
|
||||
solicitud.LotesConvenio,
|
||||
usuario,
|
||||
dominio);
|
||||
|
||||
if (!lotes.Success)
|
||||
{
|
||||
return DbResult<int>.Fail(
|
||||
lotes.UserMessage,
|
||||
lotes.TechnicalMessage,
|
||||
lotes.Exception);
|
||||
}
|
||||
|
||||
transaccion.Commit();
|
||||
return resultado;
|
||||
}
|
||||
}
|
||||
@@ -176,6 +208,11 @@ namespace SIG.Web.AppCode.Services.Convenios
|
||||
return "Seleccione el desarrollador del convenio.";
|
||||
}
|
||||
|
||||
if (solicitud.CveTipoTramite <= 0)
|
||||
{
|
||||
return "Seleccione el tipo de trámite del convenio.";
|
||||
}
|
||||
|
||||
if (solicitud.CveFraccionamientoEtapa <= 0)
|
||||
{
|
||||
return "Seleccione el fraccionamiento y etapa del convenio.";
|
||||
@@ -191,6 +228,11 @@ namespace SIG.Web.AppCode.Services.Convenios
|
||||
return "La cantidad de viviendas en convenio no es válida.";
|
||||
}
|
||||
|
||||
if (solicitud.LotesConvenio < 0)
|
||||
{
|
||||
return "La cantidad de lotes del convenio no es válida.";
|
||||
}
|
||||
|
||||
if (solicitud.Conceptos == null || solicitud.Conceptos.Count == 0)
|
||||
{
|
||||
return "Agregue al menos un concepto al convenio.";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Bitacora;
|
||||
using SIG.Web.AppCode.Models.Documentos;
|
||||
@@ -16,16 +16,15 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
? BitacoraTipoMovimiento.Eliminado
|
||||
: (anterior.EsParticular ? BitacoraTipoMovimiento.Editado : BitacoraTipoMovimiento.Agregado);
|
||||
var evento = BaseEvent(
|
||||
0, datos.CveSolicitud, datos.CveCliente, datos.CveFraccionamiento,
|
||||
0, datos.CveTipoTramite, datos.CveCliente, datos.CveFraccionamiento,
|
||||
datos.CveFraccionamientoEtapa, movimiento,
|
||||
actual == null
|
||||
? "Se retiró la configuración particular del documento; vuelve a aplicar la configuración general."
|
||||
: "Se configuró el documento para esta solicitud.");
|
||||
: "Se configuró el documento para esta etapa.");
|
||||
evento.NombreTablaSQL = "Tra_SolicitudDocumentoConfiguracion";
|
||||
evento.LlaveRegistro = null;
|
||||
evento.LlaveRegistroTexto = datos.CveFraccionamientoEtapa.ToString(System.Globalization.CultureInfo.InvariantCulture) + "|" +
|
||||
datos.CveSolicitud.ToString(System.Globalization.CultureInfo.InvariantCulture) +
|
||||
"|" + datos.CveTipoDocumento.ToString(System.Globalization.CultureInfo.InvariantCulture);
|
||||
datos.CveTipoDocumento.ToString(System.Globalization.CultureInfo.InvariantCulture);
|
||||
evento.Relaciones.RemoveAt(0);
|
||||
evento.Relaciones.Add(Relation(
|
||||
BitacoraTipoRelacion.Directa, evento.NombreTablaSQL, "CveFraccionamientoEtapa",
|
||||
@@ -36,7 +35,6 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
evento.Campos = new List<BitacoraCampoEventoModel>
|
||||
{
|
||||
Field("CveFraccionamientoEtapa", anterior.CveFraccionamientoEtapa, actual == null ? null : (object)actual.CveFraccionamientoEtapa),
|
||||
Field("CveSolicitud", anterior.CveSolicitud, actual == null ? null : (object)actual.CveSolicitud),
|
||||
Field("CveTipoDocumento", anterior.CveTipoDocumento, actual == null ? null : (object)actual.CveTipoDocumento),
|
||||
Field("EsRequerido", anterior.EsRequerido, actual == null ? null : (object)actual.EsRequerido),
|
||||
Field("EsCliente", anterior.EsCliente, actual == null ? null : (object)actual.EsCliente),
|
||||
@@ -57,7 +55,7 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
|
||||
var auditEvent = BaseEvent(
|
||||
change.CveDocumentoSolicitud,
|
||||
change.CveSolicitud,
|
||||
change.CveTipoTramite,
|
||||
change.CveCliente,
|
||||
change.CveFraccionamiento,
|
||||
change.CveFraccionamientoEtapa,
|
||||
@@ -67,8 +65,6 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
auditEvent.DiscriminarCamposSinCambios = false;
|
||||
auditEvent.Campos = new List<BitacoraCampoEventoModel>
|
||||
{
|
||||
Field("CveSolicitud", change.EsNuevo || change.CveSolicitud == 0 ? null : (object)change.CveSolicitud,
|
||||
change.CveSolicitud == 0 ? null : (object)change.CveSolicitud),
|
||||
Field("CveTipoDocumento", change.EsNuevo ? null : (object)change.CveTipoDocumento, change.CveTipoDocumento),
|
||||
Field("NombreArchivo", change.NombreArchivoAnterior, change.NombreArchivo),
|
||||
Field("NombreArchivoFisico", change.NombreArchivoFisicoAnterior, change.NombreArchivoFisico),
|
||||
@@ -96,7 +92,7 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
|
||||
var auditEvent = BaseEvent(
|
||||
change.CveDocumentoSolicitud,
|
||||
change.CveSolicitud,
|
||||
change.CveTipoTramite,
|
||||
change.CveCliente,
|
||||
change.CveFraccionamiento,
|
||||
change.CveFraccionamientoEtapa,
|
||||
@@ -116,12 +112,36 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
return auditEvent;
|
||||
}
|
||||
|
||||
public static ModeloRegistroBitacora ActualizarNota(
|
||||
TramiteDocumentoNotaResultModel cambio)
|
||||
{
|
||||
ModeloRegistroBitacora evento = BaseEvent(
|
||||
cambio.CveDocumentoSolicitud,
|
||||
cambio.CveTipoTramite,
|
||||
cambio.CveCliente,
|
||||
cambio.CveFraccionamiento,
|
||||
cambio.CveFraccionamientoEtapa,
|
||||
BitacoraTipoMovimiento.Editado,
|
||||
"Se actualizó la nota del documento " +
|
||||
cambio.TipoDocumento + " de la etapa " + cambio.Etapa + ".");
|
||||
|
||||
evento.Campos = new List<BitacoraCampoEventoModel>
|
||||
{
|
||||
Field(
|
||||
"ComentarioAdministrativo",
|
||||
cambio.ComentarioAdministrativoAnterior,
|
||||
cambio.ComentarioAdministrativo)
|
||||
};
|
||||
|
||||
return evento;
|
||||
}
|
||||
|
||||
public static ModeloRegistroBitacora ActualizarVencimiento(
|
||||
TramiteDocumentoVencimientoResultModel cambio)
|
||||
{
|
||||
ModeloRegistroBitacora evento = BaseEvent(
|
||||
cambio.CveDocumentoSolicitud,
|
||||
cambio.CveSolicitud,
|
||||
cambio.CveTipoTramite,
|
||||
cambio.CveCliente,
|
||||
cambio.CveFraccionamiento,
|
||||
cambio.CveFraccionamientoEtapa,
|
||||
@@ -145,7 +165,7 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
{
|
||||
return BaseEvent(
|
||||
change.CveDocumentoSolicitud,
|
||||
change.CveSolicitud,
|
||||
change.CveTipoTramite,
|
||||
change.CveCliente,
|
||||
change.CveFraccionamiento,
|
||||
change.CveFraccionamientoEtapa,
|
||||
@@ -179,7 +199,7 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
|
||||
private static ModeloRegistroBitacora BaseEvent(
|
||||
int documentRequestId,
|
||||
int requestId,
|
||||
int cveTipoTramite,
|
||||
int clientId,
|
||||
int developmentId,
|
||||
int stageId,
|
||||
@@ -201,38 +221,28 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
"Tra_DocumentosSolicitud",
|
||||
"CveDocumentoSolicitud",
|
||||
documentRequestId,
|
||||
"Documento de la solicitud."));
|
||||
if (requestId > 0)
|
||||
{
|
||||
auditEvent.Relaciones.Add(
|
||||
Relation(
|
||||
BitacoraTipoRelacion.Relacionada,
|
||||
"Tra_Solicitudes",
|
||||
"CveSolicitud",
|
||||
requestId,
|
||||
"Solicitud del documento."));
|
||||
}
|
||||
"Documento de la etapa."));
|
||||
auditEvent.Relaciones.Add(
|
||||
Relation(
|
||||
BitacoraTipoRelacion.Relacionada,
|
||||
"Clientes",
|
||||
"CveCliente",
|
||||
clientId,
|
||||
"Cliente propietario de la solicitud."));
|
||||
"Cliente propietario de la etapa."));
|
||||
auditEvent.Relaciones.Add(
|
||||
Relation(
|
||||
BitacoraTipoRelacion.Relacionada,
|
||||
"Fraccionamientos",
|
||||
"CveFraccionamiento",
|
||||
developmentId,
|
||||
"Fraccionamiento de la solicitud."));
|
||||
"Fraccionamiento de la etapa."));
|
||||
auditEvent.Relaciones.Add(
|
||||
Relation(
|
||||
BitacoraTipoRelacion.Relacionada,
|
||||
"FraccionamientosEtapas",
|
||||
"CveFraccionamientoEtapa",
|
||||
stageId,
|
||||
"Etapa de la solicitud."));
|
||||
"Etapa de la etapa."));
|
||||
|
||||
return auditEvent;
|
||||
}
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Web.Hosting;
|
||||
using SIG.Web.AppCode.Contracts.Documentos;
|
||||
using SIG.Web.AppCode.Infrastructure;
|
||||
using SIG.Web.AppCode.Models.Documentos;
|
||||
|
||||
namespace SIG.Web.AppCode.Services.Documentos
|
||||
@@ -13,7 +15,8 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
public TramiteDocumentoPreparedFile Prepare(
|
||||
TramiteDocumentoUploadContextModel context,
|
||||
Stream source,
|
||||
string previousRelativePath)
|
||||
string previousRelativePath,
|
||||
string nombreArchivoOriginal)
|
||||
{
|
||||
if (context == null)
|
||||
{
|
||||
@@ -37,19 +40,30 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
|
||||
string physicalFileName = string.Format(
|
||||
CultureInfo.InvariantCulture,
|
||||
"doc-{0}-{1}-{2}.bin",
|
||||
"doc-{0}-{1}-{2}-{3}",
|
||||
context.CveFraccionamientoEtapa,
|
||||
context.CveTipoDocumento,
|
||||
Guid.NewGuid().ToString("N"));
|
||||
Guid.NewGuid().ToString("N"),
|
||||
ObtenerNombreOriginalSeguro(nombreArchivoOriginal));
|
||||
string relativePath = Path.Combine(
|
||||
relativeDirectory,
|
||||
physicalFileName);
|
||||
string finalPath = SafeResolve(relativePath);
|
||||
string finalPath = Path.Combine(directory, physicalFileName);
|
||||
string temporaryPath = Path.Combine(
|
||||
directory,
|
||||
"." + physicalFileName + "." +
|
||||
Guid.NewGuid().ToString("N") + ".tmp");
|
||||
|
||||
// También se valida el temporal, cuyo nombre es más largo que el definitivo.
|
||||
if (physicalFileName.Length > 255 || Path.GetFileName(temporaryPath).Length > 255 ||
|
||||
finalPath.Length >= 260 || temporaryPath.Length >= 260)
|
||||
{
|
||||
throw new ControlledApplicationException(
|
||||
"El nombre del archivo es demasiado largo. Acórtelo conservando su extensión.");
|
||||
}
|
||||
|
||||
finalPath = SafeResolve(relativePath);
|
||||
|
||||
if (source.CanSeek)
|
||||
{
|
||||
source.Position = 0;
|
||||
@@ -76,6 +90,53 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
};
|
||||
}
|
||||
|
||||
internal static string ObtenerNombreOriginalSeguro(string nombreArchivoOriginal)
|
||||
{
|
||||
string rutaNombre = nombreArchivoOriginal ?? string.Empty;
|
||||
// Algunas configuraciones de .NET Framework validan antes de extraer el nombre.
|
||||
// Los separadores se conservan aquí para que GetFileName descarte la ruta completa.
|
||||
foreach (char caracter in Path.GetInvalidFileNameChars())
|
||||
{
|
||||
if (caracter != Path.DirectorySeparatorChar && caracter != Path.AltDirectorySeparatorChar)
|
||||
{
|
||||
rutaNombre = rutaNombre.Replace(caracter, '_');
|
||||
}
|
||||
}
|
||||
|
||||
string nombre = Path.GetFileName(rutaNombre);
|
||||
nombre = nombre.TrimEnd(' ', '.');
|
||||
string extension = Path.GetExtension(nombre);
|
||||
string baseNombre = Path.GetFileNameWithoutExtension(nombre);
|
||||
while (baseNombre.Contains(".."))
|
||||
{
|
||||
baseNombre = baseNombre.Replace("..", "_");
|
||||
}
|
||||
baseNombre = baseNombre.TrimEnd(' ', '.');
|
||||
|
||||
if (string.IsNullOrWhiteSpace(baseNombre) || baseNombre == "." ||
|
||||
string.IsNullOrWhiteSpace(extension))
|
||||
{
|
||||
throw new ControlledApplicationException(
|
||||
"Indique un nombre de archivo con nombre y extensión válidos.");
|
||||
}
|
||||
|
||||
nombre = baseNombre + extension;
|
||||
// Las columnas de nombre físico y ruta usan varchar con Modern_Spanish_CS_AS.
|
||||
// Evita guardar una ruta que SQL sustituiría por signos de interrogación.
|
||||
try
|
||||
{
|
||||
Encoding.GetEncoding(1252, EncoderFallback.ExceptionFallback,
|
||||
DecoderFallback.ExceptionFallback).GetBytes(nombre);
|
||||
}
|
||||
catch (EncoderFallbackException)
|
||||
{
|
||||
throw new ControlledApplicationException(
|
||||
"El nombre contiene caracteres que no admite el almacenamiento actual. Renombre el archivo conservando su extensión.");
|
||||
}
|
||||
|
||||
return nombre;
|
||||
}
|
||||
|
||||
public void Promote(TramiteDocumentoPreparedFile preparedFile)
|
||||
{
|
||||
ValidatePrepared(preparedFile);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
@@ -8,31 +8,35 @@ using SIG.Web.AppCode.Contracts.Documentos;
|
||||
using SIG.Web.AppCode.Contracts.Tramites;
|
||||
using SIG.Web.AppCode.Contracts.Security;
|
||||
using SIG.Web.AppCode.Session;
|
||||
using SIG.Web.AppCode.Infrastructure;
|
||||
using SIG.Web.AppCode.Infrastructure.Transactions;
|
||||
using SIG.Web.AppCode.Models.Bitacora;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Documentos;
|
||||
using SIG.Web.AppCode.Services.Logging;
|
||||
using SIG.Web.AppCode.Notifications.Contracts;
|
||||
|
||||
namespace SIG.Web.AppCode.Services.Documentos
|
||||
{
|
||||
public sealed class TramiteDocumentoService
|
||||
: ITramiteDocumentoService
|
||||
{
|
||||
private const int GisDocumentTypeId = 2;
|
||||
private const int GisDocumentTypeId = 1016;
|
||||
|
||||
private readonly ITramiteDocumentoRepository _repository;
|
||||
private readonly ITramiteSolicitudRepository _repositorioSolicitud;
|
||||
private readonly ITramiteDocumentoFileStore _fileStore;
|
||||
private readonly IBitacoraService _bitacoraService;
|
||||
private readonly IUserContextProvider _contextoUsuario;
|
||||
private readonly INotificacionConfiguracionService _notificaciones;
|
||||
|
||||
public TramiteDocumentoService(
|
||||
ITramiteDocumentoRepository repository,
|
||||
ITramiteDocumentoFileStore fileStore,
|
||||
IBitacoraService bitacoraService,
|
||||
IUserContextProvider contextoUsuario,
|
||||
ITramiteSolicitudRepository repositorioSolicitud)
|
||||
ITramiteSolicitudRepository repositorioSolicitud,
|
||||
INotificacionConfiguracionService notificaciones)
|
||||
{
|
||||
if (repository == null)
|
||||
{
|
||||
@@ -54,6 +58,7 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
_repository = repository;
|
||||
_fileStore = fileStore;
|
||||
_bitacoraService = bitacoraService;
|
||||
_notificaciones = notificaciones;
|
||||
}
|
||||
|
||||
public DbResult<List<SolicitudDocumentoConfiguracionModel>> ListarConfiguracionSolicitud(
|
||||
@@ -61,7 +66,8 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
int cveSolicitud,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio,
|
||||
int? cveFraccionamientoEtapa = null)
|
||||
int? cveFraccionamientoEtapa = null,
|
||||
int? cveTipoTramite = null)
|
||||
{
|
||||
UserSessionModel usuario = _contextoUsuario.GetCurrentUser();
|
||||
if (usuario == null || usuario.CveUsuario != cveUsuarioEjecuta)
|
||||
@@ -90,7 +96,7 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
}
|
||||
|
||||
return _repository.ListarConfiguracionSolicitud(
|
||||
cveFraccionamiento, cveSolicitud, cveUsuarioEjecuta, nombreDominio, cveFraccionamientoEtapa);
|
||||
cveFraccionamiento, cveSolicitud, cveUsuarioEjecuta, nombreDominio, cveFraccionamientoEtapa, cveTipoTramite);
|
||||
}
|
||||
|
||||
public DbResult<bool> GuardarConfiguracionSolicitud(
|
||||
@@ -110,7 +116,8 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
configuracion.CveSolicitud,
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio,
|
||||
configuracion.CveFraccionamientoEtapa == 0 ? (int?)null : configuracion.CveFraccionamientoEtapa);
|
||||
configuracion.CveFraccionamientoEtapa == 0 ? (int?)null : configuracion.CveFraccionamientoEtapa,
|
||||
configuracion.CveTipoTramite);
|
||||
if (!consulta.Success)
|
||||
{
|
||||
return CopyFailure<List<SolicitudDocumentoConfiguracionModel>, bool>(
|
||||
@@ -124,6 +131,8 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
return Fail<bool>("El tipo de documento ya no está disponible.");
|
||||
}
|
||||
|
||||
configuracion.CveTipoTramite = 0;
|
||||
|
||||
var resultado = _repository.GuardarConfiguracionSolicitud(
|
||||
configuracion, cveUsuarioEjecuta, nombreDominio);
|
||||
if (!resultado.Success)
|
||||
@@ -166,12 +175,13 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
int cveTipoDocumento,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio,
|
||||
int? cveFraccionamientoEtapa = null)
|
||||
int? cveFraccionamientoEtapa = null,
|
||||
int? cveTipoTramite = null)
|
||||
{
|
||||
using (var transaccion = new TransactionLogic(IsolationLevel.Serializable))
|
||||
{
|
||||
var consulta = ListarConfiguracionSolicitud(
|
||||
cveFraccionamiento, cveSolicitud, cveUsuarioEjecuta, nombreDominio, cveFraccionamientoEtapa);
|
||||
cveFraccionamiento, cveSolicitud, cveUsuarioEjecuta, nombreDominio, cveFraccionamientoEtapa, cveTipoTramite);
|
||||
if (!consulta.Success)
|
||||
{
|
||||
return CopyFailure<List<SolicitudDocumentoConfiguracionModel>, bool>(
|
||||
@@ -186,7 +196,7 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
}
|
||||
|
||||
var resultado = _repository.EliminarConfiguracionSolicitud(
|
||||
cveFraccionamiento, cveSolicitud, cveTipoDocumento, cveUsuarioEjecuta, nombreDominio, cveFraccionamientoEtapa);
|
||||
cveFraccionamiento, cveSolicitud, cveTipoDocumento, cveUsuarioEjecuta, nombreDominio, cveFraccionamientoEtapa, cveTipoTramite);
|
||||
if (!resultado.Success)
|
||||
{
|
||||
return resultado;
|
||||
@@ -287,7 +297,7 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
foreach (TramiteDocumentoSolicitudModel documento in documentos)
|
||||
{
|
||||
documento.PuedeActualizarArchivo =
|
||||
!documento.EsGis && (esAdministrador || !documento.EsFinalSolicitud);
|
||||
!documento.EsGis;
|
||||
documento.PuedeRevisar = esAdministrador && documento.TieneArchivo;
|
||||
}
|
||||
|
||||
@@ -309,11 +319,6 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
return "El documento corresponde al administrador.";
|
||||
}
|
||||
|
||||
if (documento.EsFinalSolicitud && usuario.EsDesarrollador)
|
||||
{
|
||||
return "La solicitud ya está finalizada; no es posible modificar sus documentos.";
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -323,7 +328,8 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
int documentTypeId,
|
||||
int executingUser,
|
||||
string domainName,
|
||||
int? cveFraccionamientoEtapa = null)
|
||||
int? cveFraccionamientoEtapa = null,
|
||||
int? cveTipoTramite = null)
|
||||
{
|
||||
if (developmentId <= 0 || (requestId <= 0 && !cveFraccionamientoEtapa.HasValue) || documentTypeId <= 0)
|
||||
{
|
||||
@@ -344,7 +350,8 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
documentTypeId,
|
||||
executingUser,
|
||||
domainName,
|
||||
cveFraccionamientoEtapa);
|
||||
cveFraccionamientoEtapa,
|
||||
cveTipoTramite);
|
||||
if (!resultado.Success || resultado.Data == null)
|
||||
{
|
||||
return resultado;
|
||||
@@ -369,7 +376,8 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
string domainName,
|
||||
DateTime? fechaDocumento = null,
|
||||
DateTime? fechaVencimiento = null,
|
||||
int? cveFraccionamientoEtapa = null)
|
||||
int? cveFraccionamientoEtapa = null,
|
||||
int? cveTipoTramite = null)
|
||||
{
|
||||
if (content == null || contentLength <= 0)
|
||||
{
|
||||
@@ -384,7 +392,8 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
documentTypeId,
|
||||
executingUser,
|
||||
domainName,
|
||||
cveFraccionamientoEtapa);
|
||||
cveFraccionamientoEtapa,
|
||||
cveTipoTramite);
|
||||
|
||||
if (!contextResult.Success || contextResult.Data == null)
|
||||
{
|
||||
@@ -429,7 +438,8 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
preparedFile = _fileStore.Prepare(
|
||||
uploadContext,
|
||||
content,
|
||||
uploadContext.RutaArchivoAnterior);
|
||||
uploadContext.RutaArchivoAnterior,
|
||||
originalFileName);
|
||||
|
||||
DbResult<TramiteDocumentoSaveResultModel> saveResult;
|
||||
|
||||
@@ -437,7 +447,7 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
{
|
||||
DbResult<TramiteDocumentoUploadContextModel> contextoActual =
|
||||
GetUploadContext(
|
||||
developmentId, requestId, documentTypeId, executingUser, domainName, cveFraccionamientoEtapa);
|
||||
developmentId, requestId, documentTypeId, executingUser, domainName, cveFraccionamientoEtapa, cveTipoTramite);
|
||||
if (!contextoActual.Success || contextoActual.Data == null)
|
||||
{
|
||||
_fileStore.Rollback(preparedFile);
|
||||
@@ -459,7 +469,8 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
fechaDocumento,
|
||||
fechaVencimiento,
|
||||
true,
|
||||
uploadContext.CveFraccionamientoEtapa);
|
||||
uploadContext.CveFraccionamientoEtapa,
|
||||
uploadContext.CveTipoTramite);
|
||||
|
||||
if (!saveResult.Success || saveResult.Data == null)
|
||||
{
|
||||
@@ -499,6 +510,13 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
}
|
||||
|
||||
_fileStore.Complete(preparedFile);
|
||||
|
||||
if (saveResult.Success && saveResult.Data != null && _notificaciones != null)
|
||||
{
|
||||
_notificaciones.NotificarDocumentoCargado(
|
||||
saveResult.Data, executingUser, domainName);
|
||||
}
|
||||
|
||||
return saveResult;
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -515,8 +533,9 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
"No fue posible restaurar el archivo después de un error.");
|
||||
}
|
||||
|
||||
const string message =
|
||||
"No fue posible guardar el documento; favor de contactar a Sistemas.";
|
||||
string message = ex is ControlledApplicationException
|
||||
? ex.Message
|
||||
: "No fue posible guardar el documento; favor de contactar a Sistemas.";
|
||||
|
||||
ExceptionLogger.Log(
|
||||
ex,
|
||||
@@ -684,6 +703,68 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
}
|
||||
}
|
||||
|
||||
public DbResult<TramiteDocumentoNotaResultModel> ActualizarNota(
|
||||
int cveFraccionamiento,
|
||||
int cveDocumentoSolicitud,
|
||||
string nota,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio)
|
||||
{
|
||||
UserSessionModel usuario = _contextoUsuario.GetCurrentUser();
|
||||
if (usuario == null || usuario.CveUsuario != cveUsuarioEjecuta)
|
||||
{
|
||||
return Fail<TramiteDocumentoNotaResultModel>(
|
||||
"La sesión del usuario no es válida.");
|
||||
}
|
||||
|
||||
if (usuario.EsDesarrollador)
|
||||
{
|
||||
return Fail<TramiteDocumentoNotaResultModel>(
|
||||
"La nota administrativa sólo puede ser modificada por Agua de Hermosillo.");
|
||||
}
|
||||
|
||||
if (cveFraccionamiento <= 0 || cveDocumentoSolicitud <= 0)
|
||||
{
|
||||
return Fail<TramiteDocumentoNotaResultModel>(
|
||||
"Seleccione un documento válido.");
|
||||
}
|
||||
|
||||
nota = TrimOrNull(nota);
|
||||
|
||||
using (var transaccion = new TransactionLogic(IsolationLevel.Serializable))
|
||||
{
|
||||
DbResult<TramiteDocumentoNotaResultModel> resultado =
|
||||
_repository.ActualizarNota(
|
||||
cveFraccionamiento,
|
||||
cveDocumentoSolicitud,
|
||||
nota,
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio);
|
||||
|
||||
if (!resultado.Success || resultado.Data == null)
|
||||
{
|
||||
return resultado;
|
||||
}
|
||||
|
||||
DbResult<long> bitacora =
|
||||
_bitacoraService.RegistrarOperacion(
|
||||
ModeloOperacionBitacora.Crear(
|
||||
"ActualizarNotaDocumentoSolicitud",
|
||||
TramiteDocumentoBitacoraFactory.ActualizarNota(
|
||||
resultado.Data)));
|
||||
|
||||
if (!bitacora.Success)
|
||||
{
|
||||
return CopyFailure<long, TramiteDocumentoNotaResultModel>(
|
||||
bitacora,
|
||||
"No fue posible registrar el cambio.");
|
||||
}
|
||||
|
||||
transaccion.Commit();
|
||||
return resultado;
|
||||
}
|
||||
}
|
||||
|
||||
public DbResult<TramiteDocumentoReviewResultModel> Review(
|
||||
int developmentId,
|
||||
int documentRequestId,
|
||||
@@ -736,6 +817,8 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
}
|
||||
}
|
||||
|
||||
DbResult<TramiteDocumentoReviewResultModel> resultadoRevision = null;
|
||||
|
||||
using (var transaction = new TransactionLogic())
|
||||
{
|
||||
DbResult<TramiteDocumentoReviewResultModel> result =
|
||||
@@ -784,8 +867,19 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
}
|
||||
|
||||
transaction.Commit();
|
||||
return result;
|
||||
resultadoRevision = result;
|
||||
}
|
||||
|
||||
if (resultadoRevision != null &&
|
||||
resultadoRevision.Success &&
|
||||
resultadoRevision.Data != null &&
|
||||
_notificaciones != null)
|
||||
{
|
||||
_notificaciones.NotificarDocumentoRevisado(
|
||||
resultadoRevision.Data, executingUser, domainName);
|
||||
}
|
||||
|
||||
return resultadoRevision;
|
||||
}
|
||||
|
||||
public DbResult<TramiteDocumentoFileModel> Open(
|
||||
@@ -874,7 +968,7 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
DbResult<TramiteDocumentoUploadContextModel> contextResult =
|
||||
_repository.GetStageUploadContext(
|
||||
stageId,
|
||||
procedureTypeId,
|
||||
0,
|
||||
documentTypeId,
|
||||
executingUser,
|
||||
domainName);
|
||||
@@ -883,7 +977,7 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
{
|
||||
return CopyFailure<TramiteDocumentoUploadContextModel, TramiteDocumentoSaveResultModel>(
|
||||
contextResult,
|
||||
"No fue posible obtener la solicitud asociada a la etapa.");
|
||||
"No fue posible obtener el contexto de documentos de la etapa.");
|
||||
}
|
||||
|
||||
string mensajeValidacion = ValidarCarga(contextResult.Data, executingUser);
|
||||
@@ -895,6 +989,14 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
TramiteDocumentoUploadContextModel uploadContext =
|
||||
contextResult.Data;
|
||||
|
||||
if (documentTypeId == GisDocumentTypeId &&
|
||||
uploadContext.CveDocumentoSolicitud > 0 &&
|
||||
uploadContext.EsAprobadoAnterior == true)
|
||||
{
|
||||
return Fail<TramiteDocumentoSaveResultModel>(
|
||||
"El archivo GIS de la etapa ya fue aprobado y no puede reemplazarse.");
|
||||
}
|
||||
|
||||
using (var transaction = new TransactionLogic())
|
||||
{
|
||||
DbResult<TramiteDocumentoSaveResultModel> result =
|
||||
@@ -910,7 +1012,8 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
null,
|
||||
executingUser,
|
||||
domainName,
|
||||
cveFraccionamientoEtapa: stageId);
|
||||
cveFraccionamientoEtapa: stageId,
|
||||
cveTipoTramite: null);
|
||||
|
||||
if (!result.Success || result.Data == null)
|
||||
{
|
||||
@@ -963,7 +1066,7 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
DbResult<TramiteDocumentoUploadContextModel> contextResult =
|
||||
_repository.GetStageUploadContext(
|
||||
stageId,
|
||||
procedureTypeId,
|
||||
0,
|
||||
documentTypeId,
|
||||
executingUser,
|
||||
domainName);
|
||||
@@ -972,7 +1075,7 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
{
|
||||
return CopyFailure<TramiteDocumentoUploadContextModel, bool>(
|
||||
contextResult,
|
||||
"No fue posible obtener la solicitud asociada a la etapa.");
|
||||
"No fue posible obtener el contexto de documentos de la etapa.");
|
||||
}
|
||||
|
||||
string mensajeValidacion = ValidarCarga(contextResult.Data, executingUser);
|
||||
@@ -981,6 +1084,14 @@ namespace SIG.Web.AppCode.Services.Documentos
|
||||
return Fail<bool>(mensajeValidacion);
|
||||
}
|
||||
|
||||
if (documentTypeId == GisDocumentTypeId &&
|
||||
contextResult.Data.CveDocumentoSolicitud > 0 &&
|
||||
contextResult.Data.EsAprobadoAnterior == true)
|
||||
{
|
||||
return Fail<bool>(
|
||||
"El archivo GIS de la etapa ya fue aprobado y no puede eliminarse.");
|
||||
}
|
||||
|
||||
if (contextResult.Data.CveDocumentoSolicitud <= 0)
|
||||
{
|
||||
return DbResult<bool>.Ok(true);
|
||||
|
||||
@@ -96,6 +96,69 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
}
|
||||
}
|
||||
|
||||
public Stream GuardarOriginalZip(
|
||||
ContextoGisFraccionamiento contexto,
|
||||
Stream origen,
|
||||
long longitud)
|
||||
{
|
||||
const long limite = 30L * 1024 * 1024;
|
||||
if (origen == null)
|
||||
{
|
||||
throw new ArgumentNullException("origen");
|
||||
}
|
||||
if (longitud <= 0 || longitud > limite)
|
||||
{
|
||||
throw new InvalidDataException("El ZIP debe contener datos y no exceder 30 MB.");
|
||||
}
|
||||
|
||||
string directorio = Path.Combine(
|
||||
Path.GetDirectoryName(ObtenerRutaFisica(contexto)),
|
||||
"Etapas",
|
||||
contexto.CveFraccionamientoEtapa.ToString(System.Globalization.CultureInfo.InvariantCulture),
|
||||
"OriginalesGIS");
|
||||
Directory.CreateDirectory(directorio);
|
||||
string ruta = Path.Combine(directorio, "original-" + Guid.NewGuid().ToString("N") + ".zip");
|
||||
string temporal = ruta + ".tmp";
|
||||
|
||||
try
|
||||
{
|
||||
if (origen.CanSeek)
|
||||
{
|
||||
origen.Position = 0;
|
||||
}
|
||||
using (var destino = new FileStream(temporal, FileMode.CreateNew, FileAccess.Write, FileShare.None))
|
||||
{
|
||||
byte[] buffer = new byte[81920];
|
||||
long total = 0;
|
||||
int leidos;
|
||||
while ((leidos = origen.Read(buffer, 0, buffer.Length)) > 0)
|
||||
{
|
||||
total += leidos;
|
||||
if (total > longitud || total > limite)
|
||||
{
|
||||
throw new InvalidDataException("El tamaño recibido del ZIP no coincide con el indicado.");
|
||||
}
|
||||
destino.Write(buffer, 0, leidos);
|
||||
}
|
||||
if (total != longitud)
|
||||
{
|
||||
throw new InvalidDataException("La carga del ZIP está incompleta.");
|
||||
}
|
||||
destino.Flush(true);
|
||||
}
|
||||
File.Move(temporal, ruta);
|
||||
// El original permanece incluso si la conversión o el registro posterior fallan.
|
||||
return new FileStream(ruta, FileMode.Open, FileAccess.Read, FileShare.Read);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (File.Exists(temporal))
|
||||
{
|
||||
File.Delete(temporal);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Stream AbrirLectura(ContextoGisFraccionamiento contexto)
|
||||
{
|
||||
return new FileStream(
|
||||
|
||||
@@ -672,6 +672,42 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
"Duplicador",
|
||||
ObtenerValor(anterior, elemento => elemento.Duplicador),
|
||||
actual.Duplicador),
|
||||
CrearCampo(
|
||||
"CveTipoVivienda",
|
||||
ObtenerValor(anterior, elemento => elemento.CveTipoVivienda),
|
||||
actual.CveTipoVivienda),
|
||||
CrearCampo(
|
||||
"Latitud",
|
||||
ObtenerValor(anterior, elemento => elemento.Latitud),
|
||||
actual.Latitud),
|
||||
CrearCampo(
|
||||
"Longitud",
|
||||
ObtenerValor(anterior, elemento => elemento.Longitud),
|
||||
actual.Longitud),
|
||||
CrearCampo(
|
||||
"AvanceAguaPotable",
|
||||
ObtenerValor(anterior, elemento => elemento.AvanceAguaPotable),
|
||||
actual.AvanceAguaPotable),
|
||||
CrearCampo(
|
||||
"AvanceDrenaje",
|
||||
ObtenerValor(anterior, elemento => elemento.AvanceDrenaje),
|
||||
actual.AvanceDrenaje),
|
||||
CrearCampo(
|
||||
"AguaPotableAutorizada",
|
||||
ObtenerValor(anterior, elemento => elemento.AguaPotableAutorizada),
|
||||
actual.AguaPotableAutorizada),
|
||||
CrearCampo(
|
||||
"DrenajeAutorizado",
|
||||
ObtenerValor(anterior, elemento => elemento.DrenajeAutorizado),
|
||||
actual.DrenajeAutorizado),
|
||||
CrearCampo(
|
||||
"Aprobado",
|
||||
ObtenerValor(anterior, elemento => elemento.Aprobado),
|
||||
actual.Aprobado),
|
||||
CrearCampo(
|
||||
"Bloqueado",
|
||||
ObtenerValor(anterior, elemento => elemento.Bloqueado),
|
||||
actual.Bloqueado),
|
||||
CrearCampo(
|
||||
"EsActivo",
|
||||
ObtenerValor(anterior, elemento => elemento.EsActivo),
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using SIG.Web.AppCode.Contracts.Bitacora;
|
||||
using SIG.Web.AppCode.Contracts.Fraccionamientos;
|
||||
using SIG.Web.AppCode.Contracts.Tramites;
|
||||
@@ -34,7 +35,79 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
return CrearFallo<List<ModeloFilaDesarrollos>>("Seleccione un desarrollador válido.");
|
||||
}
|
||||
|
||||
return _repositorio.ListarDesarrollos(cveCliente, cveUsuarioEjecuta, nombreDominio);
|
||||
DbResult<List<ModeloFilaDesarrollos>> resultado =
|
||||
_repositorio.ListarDesarrollos(
|
||||
cveCliente,
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio);
|
||||
|
||||
if (!resultado.Success || resultado.Data == null)
|
||||
{
|
||||
return resultado;
|
||||
}
|
||||
|
||||
List<ModeloFilaDesarrollos> filas = resultado.Data;
|
||||
|
||||
/*
|
||||
* PA_Fraccionamientos_DesarrolladorEtapasList es el listado
|
||||
* agrupado existente. No se cambia su contrato. El avance ya
|
||||
* existe en PA_Fraccionamientos_EtapaList, por lo que se
|
||||
* complementa aquí para que admin y cliente usen el mismo dato.
|
||||
*/
|
||||
foreach (int cveFraccionamiento in filas
|
||||
.Select(x => x.CveFraccionamiento)
|
||||
.Distinct())
|
||||
{
|
||||
DbResult<List<ModeloEtapaFraccionamiento>> etapasResultado =
|
||||
_repositorio.ListarEtapas(
|
||||
cveFraccionamiento,
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio);
|
||||
|
||||
if (!etapasResultado.Success)
|
||||
{
|
||||
return DbResult<List<ModeloFilaDesarrollos>>.Fail(
|
||||
etapasResultado.UserMessage,
|
||||
etapasResultado.TechnicalMessage,
|
||||
etapasResultado.Exception);
|
||||
}
|
||||
|
||||
List<ModeloEtapaFraccionamiento> etapas =
|
||||
etapasResultado.Data ?? new List<ModeloEtapaFraccionamiento>();
|
||||
|
||||
Dictionary<int, decimal> avances = etapas
|
||||
.ToDictionary(x => x.CveFraccionamientoEtapa, x => x.Avance);
|
||||
|
||||
foreach (ModeloFilaDesarrollos fila in filas.Where(x =>
|
||||
x.CveFraccionamiento == cveFraccionamiento &&
|
||||
!x.EsFraccionamiento &&
|
||||
x.CveFraccionamientoEtapa.HasValue))
|
||||
{
|
||||
decimal avance;
|
||||
if (avances.TryGetValue(
|
||||
fila.CveFraccionamientoEtapa.Value,
|
||||
out avance))
|
||||
{
|
||||
fila.Avance = avance;
|
||||
}
|
||||
}
|
||||
|
||||
ModeloFilaDesarrollos cabecera = filas.FirstOrDefault(x =>
|
||||
x.CveFraccionamiento == cveFraccionamiento &&
|
||||
x.EsFraccionamiento);
|
||||
|
||||
if (cabecera != null)
|
||||
{
|
||||
cabecera.Avance = etapas.Count == 0
|
||||
? 0m
|
||||
: decimal.Round(
|
||||
etapas.Average(x => x.Avance),
|
||||
2,
|
||||
MidpointRounding.AwayFromZero);
|
||||
}
|
||||
}
|
||||
|
||||
return resultado;
|
||||
}
|
||||
|
||||
public DbResult<List<OpcionClienteFraccionamiento>> ListarClientes(int cveUsuarioEjecuta, string nombreDominio)
|
||||
@@ -74,7 +147,7 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
nombreDominio);
|
||||
}
|
||||
|
||||
public DbResult<int> GuardarConEtapas(
|
||||
public DbResult<ResultadoGuardarFraccionamientoConEtapas> GuardarConEtapas(
|
||||
ModeloFraccionamiento fraccionamiento,
|
||||
IList<ModeloEtapaFraccionamiento> etapas,
|
||||
int cveUsuarioEjecuta,
|
||||
@@ -82,12 +155,14 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
{
|
||||
if (fraccionamiento == null || fraccionamiento.CveFraccionamiento > 0)
|
||||
{
|
||||
return CrearFallo<int>("Esta operación requiere un fraccionamiento nuevo.");
|
||||
return CrearFallo<ResultadoGuardarFraccionamientoConEtapas>(
|
||||
"Esta operación requiere un fraccionamiento nuevo.");
|
||||
}
|
||||
|
||||
if (etapas == null || etapas.Count == 0)
|
||||
{
|
||||
return CrearFallo<int>("Capture al menos una etapa.");
|
||||
return CrearFallo<ResultadoGuardarFraccionamientoConEtapas>(
|
||||
"Capture al menos una etapa.");
|
||||
}
|
||||
|
||||
var etapasNuevas = new List<ModeloEtapaFraccionamiento>();
|
||||
@@ -96,13 +171,15 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
if (etapa == null || string.IsNullOrWhiteSpace(etapa.Etapa) ||
|
||||
etapa.Etapa.Trim().Length > 150)
|
||||
{
|
||||
return CrearFallo<int>("Cada etapa requiere un nombre de hasta 150 caracteres.");
|
||||
return CrearFallo<ResultadoGuardarFraccionamientoConEtapas>(
|
||||
"Cada etapa requiere un nombre de hasta 150 caracteres.");
|
||||
}
|
||||
|
||||
if (etapa.Hectareas.HasValue &&
|
||||
(etapa.Hectareas.Value < 0 || etapa.Hectareas.Value > 999999999.9999m))
|
||||
{
|
||||
return CrearFallo<int>("Capture hectáreas válidas para cada etapa.");
|
||||
return CrearFallo<ResultadoGuardarFraccionamientoConEtapas>(
|
||||
"Capture hectáreas válidas para cada etapa.");
|
||||
}
|
||||
|
||||
etapasNuevas.Add(new ModeloEtapaFraccionamiento
|
||||
@@ -116,26 +193,52 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
|
||||
using (var transaccion = new TransactionLogic())
|
||||
{
|
||||
DbResult<int> resultado = Guardar(
|
||||
fraccionamiento, cveUsuarioEjecuta, nombreDominio);
|
||||
if (!resultado.Success)
|
||||
DbResult<int> resultadoFraccionamiento = Guardar(
|
||||
fraccionamiento,
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio);
|
||||
|
||||
if (!resultadoFraccionamiento.Success)
|
||||
{
|
||||
return resultado;
|
||||
return DbResult<ResultadoGuardarFraccionamientoConEtapas>.Fail(
|
||||
resultadoFraccionamiento.UserMessage,
|
||||
resultadoFraccionamiento.TechnicalMessage,
|
||||
resultadoFraccionamiento.Exception);
|
||||
}
|
||||
|
||||
var etapasGeneradas = new List<ModeloEtapaFraccionamiento>();
|
||||
|
||||
foreach (ModeloEtapaFraccionamiento etapa in etapasNuevas)
|
||||
{
|
||||
etapa.CveFraccionamiento = resultado.Data;
|
||||
etapa.CveFraccionamiento = resultadoFraccionamiento.Data;
|
||||
|
||||
DbResult<int> resultadoEtapa = GuardarEtapa(
|
||||
etapa, cveUsuarioEjecuta, nombreDominio);
|
||||
etapa,
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio);
|
||||
|
||||
if (!resultadoEtapa.Success)
|
||||
{
|
||||
return resultadoEtapa;
|
||||
return DbResult<ResultadoGuardarFraccionamientoConEtapas>.Fail(
|
||||
resultadoEtapa.UserMessage,
|
||||
resultadoEtapa.TechnicalMessage,
|
||||
resultadoEtapa.Exception);
|
||||
}
|
||||
|
||||
etapa.CveFraccionamientoEtapa = resultadoEtapa.Data;
|
||||
etapasGeneradas.Add(etapa);
|
||||
}
|
||||
|
||||
var resultado = new ResultadoGuardarFraccionamientoConEtapas
|
||||
{
|
||||
CveFraccionamiento = resultadoFraccionamiento.Data,
|
||||
Etapas = etapasGeneradas
|
||||
};
|
||||
|
||||
transaccion.Commit();
|
||||
return resultado;
|
||||
|
||||
return DbResult<ResultadoGuardarFraccionamientoConEtapas>.Ok(
|
||||
resultado);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1273,6 +1376,24 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
return "Los metros cuadrados no pueden ser negativos.";
|
||||
}
|
||||
|
||||
if (lote.Latitud.HasValue &&
|
||||
(lote.Latitud.Value < -90m || lote.Latitud.Value > 90m))
|
||||
{
|
||||
return "La latitud debe estar entre -90 y 90.";
|
||||
}
|
||||
|
||||
if (lote.Longitud.HasValue &&
|
||||
(lote.Longitud.Value < -180m || lote.Longitud.Value > 180m))
|
||||
{
|
||||
return "La longitud debe estar entre -180 y 180.";
|
||||
}
|
||||
|
||||
if (lote.CveTipoVivienda.HasValue &&
|
||||
lote.CveTipoVivienda.Value <= 0)
|
||||
{
|
||||
lote.CveTipoVivienda = null;
|
||||
}
|
||||
|
||||
lote.CveFraccionamientoEtapa = cveFraccionamientoEtapa;
|
||||
lote.Tipo = RecortarONulo(lote.Tipo);
|
||||
lote.Calle = RecortarONulo(lote.Calle);
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using SIG.Web.AppCode.Contracts.Bitacora;
|
||||
using SIG.Web.AppCode.Contracts.Documentos;
|
||||
using SIG.Web.AppCode.Contracts.Fraccionamientos;
|
||||
@@ -16,6 +18,8 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
public sealed class ServicioGisFraccionamiento : IServicioGisFraccionamiento
|
||||
{
|
||||
private const string ExtensionGis = ".gis";
|
||||
private const string ExtensionGeoJson = ".geojson";
|
||||
private const string ExtensionZip = ".zip";
|
||||
private const string TipoContenidoGis = "application/json";
|
||||
private const long TamanoMaximoArchivo = 30L * 1024L * 1024L;
|
||||
|
||||
@@ -56,6 +60,317 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
_servicioDocumentoTramite = tramiteDocumentoServicio;
|
||||
}
|
||||
|
||||
public DbResult<ResultadoGuardadoGisFraccionamiento> VincularLote(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveFraccionamientoLote,
|
||||
string clavePoligono,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio)
|
||||
{
|
||||
if (cveFraccionamientoLote <= 0 || string.IsNullOrWhiteSpace(clavePoligono) ||
|
||||
clavePoligono.Length > 100)
|
||||
{
|
||||
return CrearFallo<ResultadoGuardadoGisFraccionamiento>("Seleccione un lote y un polígono válidos.");
|
||||
}
|
||||
|
||||
DbResult<ArchivoGisFraccionamiento> archivo = AbrirArchivo(
|
||||
cveFraccionamientoEtapa, cveUsuarioEjecuta, nombreDominio);
|
||||
if (!archivo.Success)
|
||||
{
|
||||
return CopiarFallo<ArchivoGisFraccionamiento, ResultadoGuardadoGisFraccionamiento>(
|
||||
archivo, "No fue posible consultar el GIS de la etapa.");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
JObject geometria;
|
||||
using (StreamReader lector = new StreamReader(archivo.Data.Contenido))
|
||||
{
|
||||
geometria = JObject.Parse(lector.ReadToEnd());
|
||||
}
|
||||
|
||||
List<JToken> coincidencias = (geometria["features"] ?? new JArray())
|
||||
.Where(figura => figura is JObject && figura["id"] != null &&
|
||||
"id:" + (((string)figura["id"]) ?? string.Empty).Trim() == clavePoligono)
|
||||
.ToList();
|
||||
if (coincidencias.Count != 1)
|
||||
{
|
||||
return CrearFallo<ResultadoGuardadoGisFraccionamiento>(
|
||||
"El polígono no tiene una clave única en el GIS actual. Actualice el visor.");
|
||||
}
|
||||
|
||||
JToken seleccion = coincidencias[0];
|
||||
string tipo = (string)seleccion.SelectToken("geometry.type");
|
||||
if (tipo != "Polygon" && tipo != "MultiPolygon")
|
||||
{
|
||||
return CrearFallo<ResultadoGuardadoGisFraccionamiento>("Sólo puede vincular polígonos con lotes.");
|
||||
}
|
||||
|
||||
DbResult<List<CapaGisFraccionamiento>> capas = ListarCapas(
|
||||
cveFraccionamientoEtapa, cveUsuarioEjecuta, nombreDominio);
|
||||
if (!capas.Success)
|
||||
{
|
||||
return CopiarFallo<List<CapaGisFraccionamiento>, ResultadoGuardadoGisFraccionamiento>(
|
||||
capas, "No fue posible consultar el tipo de capa.");
|
||||
}
|
||||
|
||||
JToken propiedades = seleccion["properties"];
|
||||
string nombreCapa = (string)(propiedades == null ? null :
|
||||
propiedades["_sigCapa"] ?? propiedades["Capa"] ?? propiedades["capa"]);
|
||||
nombreCapa = string.IsNullOrWhiteSpace(nombreCapa) ? "GIS" : nombreCapa.Trim();
|
||||
if (!capas.Data.Any(capa => capa.NombreCapa == nombreCapa && capa.TipoCapa == "Lotificacion"))
|
||||
{
|
||||
return CrearFallo<ResultadoGuardadoGisFraccionamiento>(
|
||||
"Configure la capa como Lotificación antes de vincular sus polígonos.");
|
||||
}
|
||||
|
||||
// La lectura y combinación se protegen juntas para no sobrescribir otros vínculos.
|
||||
using (var transaccion = new TransactionLogic(System.Transactions.IsolationLevel.Serializable))
|
||||
{
|
||||
DbResult<VistaGisFraccionamiento> contexto = Obtener(
|
||||
cveFraccionamientoEtapa, cveUsuarioEjecuta, nombreDominio);
|
||||
if (!contexto.Success)
|
||||
{
|
||||
return CopiarFallo<VistaGisFraccionamiento, ResultadoGuardadoGisFraccionamiento>(
|
||||
contexto, "No fue posible consultar los lotes de la etapa.");
|
||||
}
|
||||
|
||||
List<VinculoLoteGisFraccionamiento> lotes = contexto.Data.Lotes;
|
||||
VinculoLoteGisFraccionamiento lote = lotes.FirstOrDefault(
|
||||
elemento => elemento.CveFraccionamientoLote == cveFraccionamientoLote && elemento.EsActivo);
|
||||
if (lote == null)
|
||||
{
|
||||
return CrearFallo<ResultadoGuardadoGisFraccionamiento>(
|
||||
"Seleccione un lote activo de esta etapa.");
|
||||
}
|
||||
|
||||
if ((!string.IsNullOrWhiteSpace(lote.GISPoligonoClave) && lote.GISPoligonoClave != clavePoligono) ||
|
||||
lotes.Any(elemento => elemento.GISPoligonoClave == clavePoligono &&
|
||||
elemento.CveFraccionamientoLote != cveFraccionamientoLote))
|
||||
{
|
||||
return CrearFallo<ResultadoGuardadoGisFraccionamiento>(
|
||||
"El lote o el polígono ya está vinculado. Actualice la selección.");
|
||||
}
|
||||
|
||||
lote.GISPoligonoClave = clavePoligono;
|
||||
List<VinculoLoteGisFraccionamiento> vinculos = lotes
|
||||
.Where(elemento => !string.IsNullOrWhiteSpace(elemento.GISPoligonoClave)).ToList();
|
||||
DbResult<ResultadoGuardadoGisFraccionamiento> resultado = Guardar(
|
||||
cveFraccionamientoEtapa, null, null, 0, vinculos, cveUsuarioEjecuta, nombreDominio);
|
||||
if (resultado.Success)
|
||||
{
|
||||
transaccion.Commit();
|
||||
}
|
||||
|
||||
return resultado;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
const string mensaje = "No fue posible vincular el lote. Actualice el visor e inténtelo nuevamente.";
|
||||
ExceptionLogger.Log(ex, "ServicioGisFraccionamiento.VincularLote", mensaje);
|
||||
return DbResult<ResultadoGuardadoGisFraccionamiento>.Fail(mensaje, ex.Message, ex);
|
||||
}
|
||||
}
|
||||
|
||||
public DbResult<ResultadoGuardadoGisFraccionamiento> DesvincularLote(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveFraccionamientoLote,
|
||||
string clavePoligono,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio)
|
||||
{
|
||||
if (cveFraccionamientoLote <= 0 || string.IsNullOrWhiteSpace(clavePoligono) ||
|
||||
clavePoligono.Length > 100)
|
||||
{
|
||||
return CrearFallo<ResultadoGuardadoGisFraccionamiento>("Seleccione un vínculo válido.");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
using (var transaccion = new TransactionLogic(System.Transactions.IsolationLevel.Serializable))
|
||||
{
|
||||
var contexto = Obtener(cveFraccionamientoEtapa, cveUsuarioEjecuta, nombreDominio);
|
||||
if (!contexto.Success)
|
||||
{
|
||||
return CopiarFallo<VistaGisFraccionamiento, ResultadoGuardadoGisFraccionamiento>(
|
||||
contexto, "No fue posible consultar los lotes de la etapa.");
|
||||
}
|
||||
|
||||
var lote = contexto.Data.Lotes.FirstOrDefault(elemento =>
|
||||
elemento.CveFraccionamientoLote == cveFraccionamientoLote && elemento.EsActivo);
|
||||
if (lote == null || lote.GISPoligonoClave != clavePoligono)
|
||||
{
|
||||
return CrearFallo<ResultadoGuardadoGisFraccionamiento>(
|
||||
"El vínculo cambió. Actualice el visor antes de desvincular.");
|
||||
}
|
||||
|
||||
var restantes = contexto.Data.Lotes.Where(elemento =>
|
||||
elemento.CveFraccionamientoLote != cveFraccionamientoLote &&
|
||||
!string.IsNullOrWhiteSpace(elemento.GISPoligonoClave)).ToList();
|
||||
var resultado = Guardar(cveFraccionamientoEtapa, null, null, 0,
|
||||
restantes, cveUsuarioEjecuta, nombreDominio);
|
||||
if (resultado.Success)
|
||||
{
|
||||
transaccion.Commit();
|
||||
}
|
||||
|
||||
return resultado;
|
||||
}
|
||||
}
|
||||
catch (Exception excepcion)
|
||||
{
|
||||
const string mensaje = "No fue posible desvincular el lote. Actualice el visor e inténtelo nuevamente.";
|
||||
ExceptionLogger.Log(excepcion, "ServicioGisFraccionamiento.DesvincularLote", mensaje);
|
||||
return DbResult<ResultadoGuardadoGisFraccionamiento>.Fail(mensaje, excepcion.Message, excepcion);
|
||||
}
|
||||
}
|
||||
|
||||
public DbResult<List<CapaGisFraccionamiento>> ListarCapas(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio)
|
||||
{
|
||||
DbResult<List<CapaGisFraccionamiento>> inventario = LeerCapasArchivo(
|
||||
cveFraccionamientoEtapa, cveUsuarioEjecuta, nombreDominio);
|
||||
if (!inventario.Success)
|
||||
{
|
||||
return inventario;
|
||||
}
|
||||
|
||||
DbResult<List<CapaGisFraccionamiento>> configuracion = _repositorio.ListarCapas(
|
||||
cveFraccionamientoEtapa, cveUsuarioEjecuta, nombreDominio);
|
||||
if (!configuracion.Success)
|
||||
{
|
||||
return configuracion;
|
||||
}
|
||||
|
||||
foreach (CapaGisFraccionamiento capa in inventario.Data)
|
||||
{
|
||||
CapaGisFraccionamiento guardada = configuracion.Data.FirstOrDefault(
|
||||
elemento => string.Equals(elemento.NombreCapa, capa.NombreCapa, StringComparison.Ordinal));
|
||||
if (guardada != null)
|
||||
{
|
||||
capa.TipoCapa = guardada.TipoCapa;
|
||||
capa.Color = guardada.Color;
|
||||
capa.EsVisible = guardada.EsVisible;
|
||||
}
|
||||
}
|
||||
|
||||
return inventario;
|
||||
}
|
||||
|
||||
public DbResult<bool> GuardarCapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
CapaGisFraccionamiento capa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio)
|
||||
{
|
||||
string[] tipos = { "Agua", "Drenaje", "Lotificacion", "Pozos", "Otros" };
|
||||
if (capa == null || string.IsNullOrWhiteSpace(capa.NombreCapa) ||
|
||||
capa.NombreCapa.Length > 250 || !tipos.Contains(capa.TipoCapa) ||
|
||||
!Regex.IsMatch(capa.Color ?? string.Empty, @"\A#[0-9a-fA-F]{6}\z"))
|
||||
{
|
||||
return CrearFallo<bool>("Indique una capa, tipo y color válidos.");
|
||||
}
|
||||
|
||||
DbResult<List<CapaGisFraccionamiento>> inventario = LeerCapasArchivo(
|
||||
cveFraccionamientoEtapa, cveUsuarioEjecuta, nombreDominio);
|
||||
if (!inventario.Success)
|
||||
{
|
||||
return CopiarFallo<List<CapaGisFraccionamiento>, bool>(
|
||||
inventario, "No fue posible consultar las capas de la etapa.");
|
||||
}
|
||||
|
||||
if (!inventario.Data.Any(elemento =>
|
||||
string.Equals(elemento.NombreCapa, capa.NombreCapa, StringComparison.Ordinal)))
|
||||
{
|
||||
return CrearFallo<bool>("La capa ya no existe en el GIS de esta etapa. Actualice el visor.");
|
||||
}
|
||||
|
||||
using (TransactionLogic transaccion = new TransactionLogic())
|
||||
{
|
||||
DbResult<bool> resultado = _repositorio.GuardarCapa(
|
||||
cveFraccionamientoEtapa, capa, cveUsuarioEjecuta, nombreDominio);
|
||||
if (resultado.Success)
|
||||
{
|
||||
transaccion.Commit();
|
||||
}
|
||||
|
||||
return resultado;
|
||||
}
|
||||
}
|
||||
|
||||
private DbResult<List<CapaGisFraccionamiento>> LeerCapasArchivo(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio)
|
||||
{
|
||||
DbResult<ArchivoGisFraccionamiento> archivo = AbrirArchivo(
|
||||
cveFraccionamientoEtapa, cveUsuarioEjecuta, nombreDominio);
|
||||
if (!archivo.Success || archivo.Data == null)
|
||||
{
|
||||
return CopiarFallo<ArchivoGisFraccionamiento, List<CapaGisFraccionamiento>>(
|
||||
archivo, "No fue posible leer las capas del GIS.");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
JObject contenido;
|
||||
using (StreamReader lector = new StreamReader(archivo.Data.Contenido))
|
||||
{
|
||||
contenido = JObject.Parse(lector.ReadToEnd());
|
||||
}
|
||||
|
||||
string[] colores =
|
||||
{
|
||||
"#1976D2", "#D84315", "#388E3C", "#8E24AA", "#00838F",
|
||||
"#C2185B", "#827717", "#5D4037", "#455A64", "#F9A825"
|
||||
};
|
||||
List<CapaGisFraccionamiento> capas = new List<CapaGisFraccionamiento>();
|
||||
foreach (JToken figura in contenido["features"] ?? new JArray())
|
||||
{
|
||||
JToken propiedades = figura["properties"];
|
||||
string nombre = (string)(propiedades == null ? null :
|
||||
propiedades["_sigCapa"] ?? propiedades["Capa"] ?? propiedades["capa"]);
|
||||
nombre = string.IsNullOrWhiteSpace(nombre) ? "GIS" : nombre.Trim();
|
||||
string geometria = (string)figura.SelectToken("geometry.type") ?? string.Empty;
|
||||
CapaGisFraccionamiento capa = capas.FirstOrDefault(
|
||||
elemento => string.Equals(elemento.NombreCapa, nombre, StringComparison.Ordinal));
|
||||
if (capa == null)
|
||||
{
|
||||
string nombreNormalizado = nombre.ToLowerInvariant();
|
||||
capa = new CapaGisFraccionamiento
|
||||
{
|
||||
NombreCapa = nombre,
|
||||
TipoCapa = nombreNormalizado.Contains("lotific") ? "Lotificacion" :
|
||||
nombreNormalizado.Contains("pozo") ? "Pozos" :
|
||||
nombreNormalizado.Contains("drenaje") ? "Drenaje" :
|
||||
nombreNormalizado.Contains("agua") ? "Agua" : "Otros",
|
||||
Color = colores[capas.Count % colores.Length],
|
||||
EsVisible = true,
|
||||
Geometria = geometria
|
||||
};
|
||||
capas.Add(capa);
|
||||
}
|
||||
else if (capa.Geometria != geometria)
|
||||
{
|
||||
capa.Geometria = "Mixta";
|
||||
}
|
||||
|
||||
capa.Elementos++;
|
||||
}
|
||||
|
||||
return DbResult<List<CapaGisFraccionamiento>>.Ok(capas);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
const string mensaje = "No fue posible identificar las capas del archivo GIS.";
|
||||
ExceptionLogger.Log(ex, "ServicioGisFraccionamiento.LeerCapasArchivo", mensaje);
|
||||
return DbResult<List<CapaGisFraccionamiento>>.Fail(mensaje, ex.Message, ex);
|
||||
}
|
||||
}
|
||||
|
||||
public DbResult<VistaGisFraccionamiento> Obtener(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
@@ -160,25 +475,7 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
if (!tieneArchivoCargado && !guardarVinculos)
|
||||
{
|
||||
return CrearFallo<ResultadoGuardadoGisFraccionamiento>(
|
||||
"Seleccione un archivo .gis antes de guardar.");
|
||||
}
|
||||
|
||||
if (tieneArchivoCargado)
|
||||
{
|
||||
if (!string.Equals(
|
||||
Path.GetExtension(nombreArchivoOriginal),
|
||||
ExtensionGis,
|
||||
StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return CrearFallo<ResultadoGuardadoGisFraccionamiento>(
|
||||
"El archivo seleccionado debe tener extensión .gis.");
|
||||
}
|
||||
|
||||
if (longitudContenido > TamanoMaximoArchivo)
|
||||
{
|
||||
return CrearFallo<ResultadoGuardadoGisFraccionamiento>(
|
||||
"El archivo GIS no puede exceder 30 MB.");
|
||||
}
|
||||
"Seleccione un archivo GIS antes de guardar.");
|
||||
}
|
||||
|
||||
DbResult<ContextoGisFraccionamiento> resultadoContexto =
|
||||
@@ -196,6 +493,75 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
|
||||
ContextoGisFraccionamiento contextoGis = resultadoContexto.Data;
|
||||
|
||||
ProcesadorArchivoGisFraccionamiento.Resultado archivoProcesado = null;
|
||||
|
||||
if (tieneArchivoCargado)
|
||||
{
|
||||
string extension = Path.GetExtension(nombreArchivoOriginal) ?? string.Empty;
|
||||
bool extensionValida =
|
||||
string.Equals(extension, ExtensionGis, StringComparison.OrdinalIgnoreCase) ||
|
||||
string.Equals(extension, ExtensionGeoJson, StringComparison.OrdinalIgnoreCase) ||
|
||||
string.Equals(extension, ExtensionZip, StringComparison.OrdinalIgnoreCase);
|
||||
|
||||
if (!extensionValida)
|
||||
{
|
||||
return CrearFallo<ResultadoGuardadoGisFraccionamiento>(
|
||||
"El archivo seleccionado debe tener extensión .gis, .geojson o .zip.");
|
||||
}
|
||||
|
||||
if (longitudContenido > TamanoMaximoArchivo)
|
||||
{
|
||||
return CrearFallo<ResultadoGuardadoGisFraccionamiento>(
|
||||
"El archivo GIS no puede exceder 30 MB.");
|
||||
}
|
||||
|
||||
Stream originalConservado = null;
|
||||
bool zipConservado = false;
|
||||
try
|
||||
{
|
||||
if (string.Equals(extension, ExtensionZip, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
originalConservado = _almacenArchivos.GuardarOriginalZip(
|
||||
contextoGis,
|
||||
contenido,
|
||||
longitudContenido);
|
||||
zipConservado = true;
|
||||
}
|
||||
archivoProcesado = ProcesadorArchivoGisFraccionamiento.Procesar(
|
||||
nombreArchivoOriginal,
|
||||
originalConservado ?? contenido,
|
||||
longitudContenido);
|
||||
}
|
||||
catch (InvalidDataException ex)
|
||||
{
|
||||
return DbResult<ResultadoGuardadoGisFraccionamiento>.Fail(
|
||||
ex.Message + (zipConservado
|
||||
? " El ZIP original quedó conservado; el mapa anterior no se modificó."
|
||||
: string.Empty),
|
||||
ex.Message,
|
||||
ex);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (zipConservado)
|
||||
{
|
||||
const string mensaje = "No fue posible convertir el ZIP. El original quedó conservado y el mapa anterior no se modificó; contacte a Sistemas.";
|
||||
ExceptionLogger.Log(ex, "ServicioGisFraccionamiento.Guardar.Procesar", mensaje);
|
||||
return DbResult<ResultadoGuardadoGisFraccionamiento>.Fail(mensaje, ex.Message, ex);
|
||||
}
|
||||
return CrearFalloArchivo<ResultadoGuardadoGisFraccionamiento>(
|
||||
ex,
|
||||
"ServicioGisFraccionamiento.Guardar.Procesar");
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (originalConservado != null)
|
||||
{
|
||||
originalConservado.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DbResult<List<VinculoLoteGisFraccionamiento>> resultadoVinculosAnteriores =
|
||||
_repositorio.ListarVinculos(
|
||||
cveFraccionamientoEtapa,
|
||||
@@ -229,7 +595,7 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
if (!tieneArchivoCargado && !teniaArchivo)
|
||||
{
|
||||
return CrearFallo<ResultadoGuardadoGisFraccionamiento>(
|
||||
"Seleccione un archivo .gis antes de guardar.");
|
||||
"Seleccione un archivo GIS antes de guardar.");
|
||||
}
|
||||
|
||||
byte[] anteriorArchivo = null;
|
||||
@@ -262,7 +628,10 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
|
||||
try
|
||||
{
|
||||
using (var transaccion = new TransactionLogic())
|
||||
using (var transaccion = new TransactionLogic(
|
||||
System.Transactions.Transaction.Current == null
|
||||
? System.Transactions.IsolationLevel.ReadCommitted
|
||||
: System.Transactions.Transaction.Current.IsolationLevel))
|
||||
{
|
||||
ModeloOperacionBitacora operacionBitacora = ModeloOperacionBitacora.Crear(
|
||||
"GuardarGisEtapa",
|
||||
@@ -297,7 +666,20 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
|
||||
if (tieneArchivoCargado)
|
||||
{
|
||||
_almacenArchivos.Guardar(contextoGis, contenido);
|
||||
if (archivoProcesado == null ||
|
||||
archivoProcesado.ContenidoGis == null ||
|
||||
archivoProcesado.ContenidoGis.Length == 0)
|
||||
{
|
||||
return CrearFallo<ResultadoGuardadoGisFraccionamiento>(
|
||||
"No fue posible preparar el archivo GIS para guardarlo.");
|
||||
}
|
||||
|
||||
using (var contenidoNormalizado = new MemoryStream(
|
||||
archivoProcesado.ContenidoGis,
|
||||
false))
|
||||
{
|
||||
_almacenArchivos.Guardar(contextoGis, contenidoNormalizado);
|
||||
}
|
||||
archivoFueEscrito = true;
|
||||
|
||||
string nombreArchivoFisico = Path.GetFileName(
|
||||
@@ -311,13 +693,13 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
DbResult<SIG.Web.AppCode.Models.Documentos.TramiteDocumentoSaveResultModel> resultadoDocumento =
|
||||
_servicioDocumentoTramite.RegisterExternalStageFile(
|
||||
cveFraccionamientoEtapa,
|
||||
1,
|
||||
2,
|
||||
nombreArchivoOriginal,
|
||||
0,
|
||||
1016,
|
||||
archivoProcesado.NombreArchivoGis,
|
||||
nombreArchivoFisico,
|
||||
rutaRelativa,
|
||||
TipoContenidoGis,
|
||||
longitudContenido,
|
||||
archivoProcesado.TipoContenido ?? TipoContenidoGis,
|
||||
archivoProcesado.ContenidoGis.LongLength,
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio,
|
||||
operacionBitacora);
|
||||
@@ -503,8 +885,8 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
DbResult<bool> resultadoEliminacionDocumento =
|
||||
_servicioDocumentoTramite.RemoveExternalStageFile(
|
||||
cveFraccionamientoEtapa,
|
||||
1,
|
||||
2,
|
||||
0,
|
||||
1016,
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio,
|
||||
operacionBitacora);
|
||||
|
||||