Ajustes pequeños
This commit is contained in:
@@ -18,6 +18,13 @@ Estas reglas complementan `AGENTS.md` y son obligatorias para toda consulta nuev
|
||||
- `<Entidad>` identifica el objeto y `<Accion>` describe claramente la operación; por ejemplo `Add`, `Update`, `List`, `Activate`, `Deactivate` o `Delete`.
|
||||
- Ejemplos: `PA_Sis_UsuarioAdd`, `PA_Sis_UsuarioUpdate`, `PA_Sis_UsuarioList`, `PA_Sis_UsuarioActivate`, `PA_Sis_UsuarioDeactivate` y `PA_Sis_UsuarioDelete`.
|
||||
|
||||
## Formato de JOIN
|
||||
|
||||
- Mantener cada `JOIN` y su condición `ON` en la misma línea cuando la condición sea simple o pueda continuarse de forma legible en las líneas siguientes.
|
||||
- No separar `ON` en una línea independiente únicamente por estilo.
|
||||
- Evitar subconsultas con `SELECT` directamente dentro de un `JOIN`. Cuando la consulta relacionada sea compleja, preferir un CTE con `WITH` y realizar el `JOIN` contra ese CTE.
|
||||
- Una condición extensa del `ON` puede continuar en líneas adicionales, alineando cada `AND` para conservar la legibilidad.
|
||||
|
||||
## Parámetros y resultado obligatorios
|
||||
|
||||
Todos los procedimientos deben declarar:
|
||||
|
||||
@@ -177,6 +177,12 @@ Do not mix placeholder naming systems in the same project.
|
||||
- When a postback needs to recover related values from an already loaded catalog, store the typed serializable object list in a typed `ViewState` property and locate the selected object by its key.
|
||||
- Do not copy server-owned catalog or model values into HTML `data-*` attributes, CSS classes, hidden fields, or other client-controlled markup merely to recover them during a postback. Read them from the typed object list stored in `ViewState`.
|
||||
|
||||
### Server-control visibility rules
|
||||
|
||||
- Never use the effective `Visible` property of an ASP.NET server control as business or page state, as an `if` condition, or as the input used to mutate another control or object. An invisible ancestor causes every descendant to report `Visible == false`, regardless of the value assigned directly to that descendant.
|
||||
- Calculate visibility in independent, clearly named Boolean variables or a typed state model. Use those values both for decisions and for assigning each control's `Visible` property.
|
||||
- When configuring children of a server container that starts hidden, make the parent container visible before assigning child visibility. After assigning the children, hide the parent again only when the independent visibility values indicate that none of its children should be rendered.
|
||||
|
||||
---
|
||||
|
||||
## Login and session rules
|
||||
@@ -412,4 +418,3 @@ Rules:
|
||||
- The home page must use `Site.master`.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -121,9 +121,11 @@ namespace SIG.Web.AppCode.Configuration
|
||||
|
||||
ITramiteSolicitudRepository tramiteSolicitudRepository =
|
||||
new TramiteSolicitudRepository(DbExecutor);
|
||||
IRepositorioFraccionamiento repositorioFraccionamiento =
|
||||
new RepositorioFraccionamiento(DbExecutor);
|
||||
|
||||
ServicioFraccionamiento = new ServicioFraccionamiento(
|
||||
new RepositorioFraccionamiento(DbExecutor),
|
||||
repositorioFraccionamiento,
|
||||
tramiteSolicitudRepository,
|
||||
BitacoraService);
|
||||
|
||||
@@ -141,6 +143,7 @@ namespace SIG.Web.AppCode.Configuration
|
||||
BitacoraService);
|
||||
TramiteSolicitudService = new TramiteSolicitudService(
|
||||
tramiteSolicitudRepository,
|
||||
repositorioFraccionamiento,
|
||||
BitacoraService);
|
||||
var clienteProfact = new ClienteTimbradoPacProfact(
|
||||
new ProveedorCredencialPacConfiguracion());
|
||||
|
||||
@@ -31,6 +31,12 @@ namespace SIG.Web.AppCode.Contracts.Fraccionamientos
|
||||
ModeloCondicionesEtapaFraccionamiento condiciones,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<ModeloCondicionesEtapaFraccionamiento> ActualizarCondicionEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveCondicionMostrar,
|
||||
bool? valor,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
DbResult<ModeloGisEtapaFraccionamiento> ObtenerGisEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
|
||||
@@ -42,15 +42,22 @@ namespace SIG.Web.AppCode.Contracts.Tramites
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteSolicitudStatusChangeModel> ChangeStatus(
|
||||
int requestId,
|
||||
int statusId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
DbResult<List<ModeloCondicionMostrarTramite>>
|
||||
ListarCondicionesPorTramite(
|
||||
int cveTipoTramite,
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<int> ActualizarTramites(
|
||||
DbResult<TramiteSolicitudStatusChangeModel> CambiarEstatus(
|
||||
int cveSolicitud,
|
||||
int cveEstatusSolicitud,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<bool> GenerarSolicitudesPorFlujo(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuario,
|
||||
string nombreDominio);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,10 +36,16 @@ namespace SIG.Web.AppCode.Contracts.Tramites
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteSolicitudStatusChangeModel> ChangeStatus(
|
||||
int requestId,
|
||||
int statusId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
DbResult<List<ModeloCondicionMostrarTramite>>
|
||||
ListarCondicionesPorTramite(
|
||||
int cveTipoTramite,
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
|
||||
DbResult<TramiteSolicitudStatusChangeModel> CambiarEstatus(
|
||||
ModeloCambioEstatusTramite cambioEstatus,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace SIG.Web.AppCode.Models.Tramites
|
||||
{
|
||||
@@ -49,6 +50,27 @@ namespace SIG.Web.AppCode.Models.Tramites
|
||||
public bool EsCliente { get; set; }
|
||||
public DateTime? FechaAutorizacion { get; set; }
|
||||
public bool HuboCambio { get; set; }
|
||||
public bool HuboCambioCondiciones { get; set; }
|
||||
}
|
||||
|
||||
public sealed class ModeloCondicionMostrarTramite
|
||||
{
|
||||
public int CveCondicionMostrar { get; set; }
|
||||
public string CondicionMostrar { get; set; }
|
||||
}
|
||||
|
||||
public sealed class ModeloCambioEstatusTramite
|
||||
{
|
||||
public int CveSolicitud { get; set; }
|
||||
public int CveEstatusSolicitud { get; set; }
|
||||
public List<int> CvesCondicionesMostradas { get; set; }
|
||||
public bool? AprobadoPrefactibilidad { get; set; }
|
||||
public bool? RequiereObrasExternas { get; set; }
|
||||
public bool? TipoDeObra { get; set; }
|
||||
public bool? LiberacionMacromedidor { get; set; }
|
||||
public bool? Relotificacion { get; set; }
|
||||
public bool? LiberacionDeLotes { get; set; }
|
||||
public bool? LiberacionDePagosDeDerechos { get; set; }
|
||||
}
|
||||
public sealed class TramiteSolicitudTipoOptionModel
|
||||
{
|
||||
|
||||
@@ -229,6 +229,38 @@ namespace SIG.Web.AppCode.Repositories.Fraccionamientos
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<ModeloCondicionesEtapaFraccionamiento>
|
||||
ActualizarCondicionEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveCondicionMostrar,
|
||||
bool? valor,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio)
|
||||
{
|
||||
return QueryOne<ModeloCondicionesEtapaFraccionamiento>(
|
||||
"dbo.PA_Fraccionamientos_EtapaCondicionUpdate",
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio,
|
||||
comando =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando,
|
||||
"@CveFraccionamientoEtapa",
|
||||
cveFraccionamientoEtapa,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando,
|
||||
"@CveCondicionMostrar",
|
||||
cveCondicionMostrar,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando,
|
||||
"@Valor",
|
||||
valor,
|
||||
DbType.Boolean);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<ModeloGisEtapaFraccionamiento> ObtenerGisEtapa(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
|
||||
@@ -162,45 +162,91 @@ namespace SIG.Web.AppCode.Repositories.Tramites
|
||||
null);
|
||||
}
|
||||
|
||||
public DbResult<TramiteSolicitudStatusChangeModel> ChangeStatus(
|
||||
int requestId,
|
||||
int statusId,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
public DbResult<List<ModeloCondicionMostrarTramite>>
|
||||
ListarCondicionesPorTramite(
|
||||
int cveTipoTramite,
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio)
|
||||
{
|
||||
return QueryOne<TramiteSolicitudStatusChangeModel>(
|
||||
"dbo.PA_Tramites_SolicitudEstatusUpdate",
|
||||
executingUser,
|
||||
domainName,
|
||||
command =>
|
||||
return QueryList<ModeloCondicionMostrarTramite>(
|
||||
"dbo.PA_Tra_MostrarCondicionesporTramite",
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio,
|
||||
comando =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(
|
||||
command,
|
||||
"@CveSolicitud",
|
||||
requestId,
|
||||
comando,
|
||||
"@CveTipoTramite",
|
||||
cveTipoTramite,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
command,
|
||||
"@CveEstatusSolicitud",
|
||||
statusId,
|
||||
comando,
|
||||
"@CveFraccionamientoEtapa",
|
||||
cveFraccionamientoEtapa,
|
||||
DbType.Int32);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<int> ActualizarTramites(
|
||||
public DbResult<TramiteSolicitudStatusChangeModel> CambiarEstatus(
|
||||
int cveSolicitud,
|
||||
int cveEstatusSolicitud,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio)
|
||||
{
|
||||
return QueryScalarId(
|
||||
"dbo.PA_Tramites_ActualizarTramites",
|
||||
return QueryOne<TramiteSolicitudStatusChangeModel>(
|
||||
"dbo.PA_Tramites_SolicitudEstatusUpdate",
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio,
|
||||
command => StoredProcedureCommand.AddInput(
|
||||
command,
|
||||
"@CveSolicitud",
|
||||
cveSolicitud,
|
||||
DbType.Int32));
|
||||
comando =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando,
|
||||
"@CveSolicitud",
|
||||
cveSolicitud,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando,
|
||||
"@CveEstatusSolicitud",
|
||||
cveEstatusSolicitud,
|
||||
DbType.Int32);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<bool> GenerarSolicitudesPorFlujo(
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuario,
|
||||
string nombreDominio)
|
||||
{
|
||||
const string procedimiento =
|
||||
"dbo.PA_Tra_GenerarSolicitudesPorFlujo";
|
||||
|
||||
return ExecuteCustom(
|
||||
nombreDominio,
|
||||
conexion =>
|
||||
{
|
||||
using (IDbCommand comando = conexion.CreateCommand())
|
||||
{
|
||||
StoredProcedureDiagnostics.Start(procedimiento);
|
||||
comando.CommandText = procedimiento;
|
||||
comando.CommandType = CommandType.StoredProcedure;
|
||||
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando,
|
||||
"@CveFraccionamientoEtapa",
|
||||
cveFraccionamientoEtapa,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
comando,
|
||||
"@CveUsuario",
|
||||
cveUsuario,
|
||||
DbType.Int32);
|
||||
|
||||
comando.ExecuteNonQuery();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,24 +1,35 @@
|
||||
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;
|
||||
using SIG.Web.AppCode.Infrastructure.Transactions;
|
||||
using SIG.Web.AppCode.Models.Bitacora;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Fraccionamientos;
|
||||
using SIG.Web.AppCode.Models.Tramites;
|
||||
using SIG.Web.AppCode.Services.Fraccionamientos;
|
||||
|
||||
namespace SIG.Web.AppCode.Services.Tramites
|
||||
{
|
||||
public sealed class TramiteSolicitudService
|
||||
: ITramiteSolicitudService
|
||||
{
|
||||
private const int CveTipoTramitePrefactibilidad = 1;
|
||||
private const int CveEstatusSolicitudAutorizado = 7;
|
||||
private const int CveEstatusSolicitudCancelado = 8;
|
||||
|
||||
private readonly ITramiteSolicitudRepository _repository;
|
||||
private readonly IRepositorioFraccionamiento _repositorioFraccionamiento;
|
||||
private readonly IBitacoraService _bitacoraService;
|
||||
|
||||
public TramiteSolicitudService(
|
||||
ITramiteSolicitudRepository repository,
|
||||
IRepositorioFraccionamiento repositorioFraccionamiento,
|
||||
IBitacoraService bitacoraService)
|
||||
{
|
||||
_repository = repository;
|
||||
_repositorioFraccionamiento = repositorioFraccionamiento;
|
||||
_bitacoraService = bitacoraService;
|
||||
}
|
||||
|
||||
@@ -163,19 +174,44 @@ namespace SIG.Web.AppCode.Services.Tramites
|
||||
domainName);
|
||||
}
|
||||
|
||||
public DbResult<TramiteSolicitudStatusChangeModel> ChangeStatus(
|
||||
int requestId,
|
||||
int statusId,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
public DbResult<List<ModeloCondicionMostrarTramite>>
|
||||
ListarCondicionesPorTramite(
|
||||
int cveTipoTramite,
|
||||
int cveFraccionamientoEtapa,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio)
|
||||
{
|
||||
if (requestId <= 0)
|
||||
if (cveTipoTramite <= 0)
|
||||
{
|
||||
return Fail<List<ModeloCondicionMostrarTramite>>(
|
||||
"Seleccione un tipo de trámite válido.");
|
||||
}
|
||||
|
||||
if (cveFraccionamientoEtapa <= 0)
|
||||
{
|
||||
return Fail<List<ModeloCondicionMostrarTramite>>(
|
||||
"Seleccione una etapa válida.");
|
||||
}
|
||||
|
||||
return _repository.ListarCondicionesPorTramite(
|
||||
cveTipoTramite,
|
||||
cveFraccionamientoEtapa,
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio);
|
||||
}
|
||||
|
||||
public DbResult<TramiteSolicitudStatusChangeModel> CambiarEstatus(
|
||||
ModeloCambioEstatusTramite cambioEstatus,
|
||||
int cveUsuarioEjecuta,
|
||||
string nombreDominio)
|
||||
{
|
||||
if (cambioEstatus == null || cambioEstatus.CveSolicitud <= 0)
|
||||
{
|
||||
return Fail<TramiteSolicitudStatusChangeModel>(
|
||||
"Seleccione una solicitud válida.");
|
||||
}
|
||||
|
||||
if (statusId <= 0)
|
||||
if (cambioEstatus.CveEstatusSolicitud <= 0)
|
||||
{
|
||||
return Fail<TramiteSolicitudStatusChangeModel>(
|
||||
"Seleccione un estatus válido.");
|
||||
@@ -183,38 +219,138 @@ namespace SIG.Web.AppCode.Services.Tramites
|
||||
|
||||
using (var transaction = new TransactionLogic())
|
||||
{
|
||||
DbResult<TramiteSolicitudModel> resultadoSolicitud =
|
||||
_repository.Get(
|
||||
cambioEstatus.CveSolicitud,
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio);
|
||||
|
||||
if (!resultadoSolicitud.Success ||
|
||||
resultadoSolicitud.Data == null)
|
||||
{
|
||||
return DbResult<TramiteSolicitudStatusChangeModel>.Fail(
|
||||
resultadoSolicitud.UserMessage,
|
||||
resultadoSolicitud.TechnicalMessage,
|
||||
resultadoSolicitud.Exception);
|
||||
}
|
||||
|
||||
TramiteSolicitudModel solicitudActual = resultadoSolicitud.Data;
|
||||
DbResult<List<ModeloCondicionMostrarTramite>>
|
||||
resultadoCondiciones =
|
||||
_repository.ListarCondicionesPorTramite(
|
||||
solicitudActual.CveTipoTramite,
|
||||
solicitudActual.CveFraccionamientoEtapa,
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio);
|
||||
|
||||
if (!resultadoCondiciones.Success)
|
||||
{
|
||||
return DbResult<TramiteSolicitudStatusChangeModel>.Fail(
|
||||
resultadoCondiciones.UserMessage,
|
||||
resultadoCondiciones.TechnicalMessage,
|
||||
resultadoCondiciones.Exception);
|
||||
}
|
||||
|
||||
PrepararCondicionesPermitidas(
|
||||
cambioEstatus,
|
||||
solicitudActual.CveTipoTramite,
|
||||
resultadoCondiciones.Data);
|
||||
|
||||
ModeloCondicionesEtapaFraccionamiento condicionesAnteriores =
|
||||
null;
|
||||
ModeloCondicionesEtapaFraccionamiento condicionesActuales =
|
||||
null;
|
||||
List<int> cvesCondiciones =
|
||||
cambioEstatus.CvesCondicionesMostradas ?? new List<int>();
|
||||
|
||||
if (cvesCondiciones.Count > 0)
|
||||
{
|
||||
DbResult<ModeloCondicionesEtapaFraccionamiento>
|
||||
resultadoCondicionesAnteriores =
|
||||
_repositorioFraccionamiento
|
||||
.ObtenerCondicionesEtapa(
|
||||
solicitudActual.CveFraccionamientoEtapa,
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio);
|
||||
|
||||
if (!resultadoCondicionesAnteriores.Success ||
|
||||
resultadoCondicionesAnteriores.Data == null)
|
||||
{
|
||||
return DbResult<TramiteSolicitudStatusChangeModel>.Fail(
|
||||
resultadoCondicionesAnteriores.UserMessage,
|
||||
resultadoCondicionesAnteriores.TechnicalMessage,
|
||||
resultadoCondicionesAnteriores.Exception);
|
||||
}
|
||||
|
||||
condicionesAnteriores =
|
||||
resultadoCondicionesAnteriores.Data;
|
||||
condicionesActuales = condicionesAnteriores;
|
||||
}
|
||||
|
||||
DbResult<TramiteSolicitudStatusChangeModel> result =
|
||||
_repository.ChangeStatus(
|
||||
requestId,
|
||||
statusId,
|
||||
executingUser,
|
||||
domainName);
|
||||
_repository.CambiarEstatus(
|
||||
cambioEstatus.CveSolicitud,
|
||||
cambioEstatus.CveEstatusSolicitud,
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio);
|
||||
|
||||
if (!result.Success || result.Data == null)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
if (result.Data.HuboCambio)
|
||||
foreach (int cveCondicion in cvesCondiciones)
|
||||
{
|
||||
DbResult<int> resultadoActualizacionTramites =
|
||||
_repository.ActualizarTramites(
|
||||
requestId,
|
||||
executingUser,
|
||||
domainName);
|
||||
DbResult<ModeloCondicionesEtapaFraccionamiento>
|
||||
resultadoCondicion =
|
||||
_repositorioFraccionamiento
|
||||
.ActualizarCondicionEtapa(
|
||||
solicitudActual.CveFraccionamientoEtapa,
|
||||
cveCondicion,
|
||||
ObtenerValorCondicion(
|
||||
cambioEstatus,
|
||||
cveCondicion),
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio);
|
||||
|
||||
if (!resultadoActualizacionTramites.Success)
|
||||
if (!resultadoCondicion.Success ||
|
||||
resultadoCondicion.Data == null)
|
||||
{
|
||||
return DbResult<TramiteSolicitudStatusChangeModel>.Fail(
|
||||
resultadoActualizacionTramites.UserMessage,
|
||||
resultadoActualizacionTramites.TechnicalMessage,
|
||||
resultadoActualizacionTramites.Exception);
|
||||
resultadoCondicion.UserMessage,
|
||||
resultadoCondicion.TechnicalMessage,
|
||||
resultadoCondicion.Exception);
|
||||
}
|
||||
|
||||
if (_bitacoraService == null)
|
||||
condicionesActuales = resultadoCondicion.Data;
|
||||
}
|
||||
|
||||
bool huboCambioCondiciones = HayCambioCondiciones(
|
||||
condicionesAnteriores,
|
||||
condicionesActuales);
|
||||
result.Data.HuboCambioCondiciones = huboCambioCondiciones;
|
||||
|
||||
if ((result.Data.HuboCambio || huboCambioCondiciones) &&
|
||||
_bitacoraService == null)
|
||||
{
|
||||
return Fail<TramiteSolicitudStatusChangeModel>(
|
||||
"El servicio de bitácora no está configurado.");
|
||||
}
|
||||
|
||||
if (result.Data.HuboCambio)
|
||||
{
|
||||
DbResult<bool> resultadoGeneracionSolicitudes =
|
||||
_repository.GenerarSolicitudesPorFlujo(
|
||||
result.Data.CveFraccionamientoEtapa,
|
||||
cveUsuarioEjecuta,
|
||||
nombreDominio);
|
||||
|
||||
if (!resultadoGeneracionSolicitudes.Success)
|
||||
{
|
||||
return Fail<TramiteSolicitudStatusChangeModel>(
|
||||
"El servicio de bitácora no está configurado.");
|
||||
return DbResult<TramiteSolicitudStatusChangeModel>.Fail(
|
||||
resultadoGeneracionSolicitudes.UserMessage,
|
||||
resultadoGeneracionSolicitudes.TechnicalMessage,
|
||||
resultadoGeneracionSolicitudes.Exception);
|
||||
}
|
||||
|
||||
BitacoraEventoModel auditEvent =
|
||||
@@ -223,7 +359,7 @@ namespace SIG.Web.AppCode.Services.Tramites
|
||||
|
||||
if (result.Data.FechaAutorizacion.HasValue)
|
||||
{
|
||||
auditEvent.CveUsuarioAutoriza = executingUser;
|
||||
auditEvent.CveUsuarioAutoriza = cveUsuarioEjecuta;
|
||||
auditEvent.FechaAutorizacion =
|
||||
result.Data.FechaAutorizacion;
|
||||
}
|
||||
@@ -240,11 +376,122 @@ namespace SIG.Web.AppCode.Services.Tramites
|
||||
}
|
||||
}
|
||||
|
||||
if (huboCambioCondiciones)
|
||||
{
|
||||
DbResult<long> resultadoBitacoraCondiciones =
|
||||
_bitacoraService.Registrar(
|
||||
FabricaBitacoraFraccionamiento
|
||||
.CrearCondicionesEtapa(
|
||||
condicionesAnteriores,
|
||||
condicionesActuales));
|
||||
|
||||
if (!resultadoBitacoraCondiciones.Success)
|
||||
{
|
||||
return DbResult<TramiteSolicitudStatusChangeModel>.Fail(
|
||||
resultadoBitacoraCondiciones.UserMessage,
|
||||
resultadoBitacoraCondiciones.TechnicalMessage,
|
||||
resultadoBitacoraCondiciones.Exception);
|
||||
}
|
||||
}
|
||||
|
||||
transaction.Commit();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
private static void PrepararCondicionesPermitidas(
|
||||
ModeloCambioEstatusTramite cambioEstatus,
|
||||
int cveTipoTramite,
|
||||
List<ModeloCondicionMostrarTramite> condicionesPermitidas)
|
||||
{
|
||||
var clavesPermitidas = new HashSet<int>(
|
||||
(condicionesPermitidas ??
|
||||
new List<ModeloCondicionMostrarTramite>())
|
||||
.Select(condicion => condicion.CveCondicionMostrar));
|
||||
var clavesSolicitadas = new HashSet<int>(
|
||||
cambioEstatus.CvesCondicionesMostradas ?? new List<int>());
|
||||
|
||||
clavesSolicitadas.IntersectWith(clavesPermitidas);
|
||||
|
||||
if (cveTipoTramite == CveTipoTramitePrefactibilidad)
|
||||
{
|
||||
if (cambioEstatus.CveEstatusSolicitud ==
|
||||
CveEstatusSolicitudAutorizado)
|
||||
{
|
||||
cambioEstatus.AprobadoPrefactibilidad = true;
|
||||
|
||||
if (clavesPermitidas.Contains(1))
|
||||
{
|
||||
clavesSolicitadas.Add(1);
|
||||
}
|
||||
}
|
||||
else if (cambioEstatus.CveEstatusSolicitud ==
|
||||
CveEstatusSolicitudCancelado)
|
||||
{
|
||||
cambioEstatus.AprobadoPrefactibilidad = false;
|
||||
clavesSolicitadas.Remove(2);
|
||||
|
||||
if (clavesPermitidas.Contains(1))
|
||||
{
|
||||
clavesSolicitadas.Add(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cambioEstatus.CvesCondicionesMostradas =
|
||||
clavesSolicitadas.OrderBy(clave => clave).ToList();
|
||||
}
|
||||
|
||||
private static bool? ObtenerValorCondicion(
|
||||
ModeloCambioEstatusTramite cambioEstatus,
|
||||
int cveCondicion)
|
||||
{
|
||||
switch (cveCondicion)
|
||||
{
|
||||
case 1:
|
||||
return cambioEstatus.AprobadoPrefactibilidad;
|
||||
case 2:
|
||||
return cambioEstatus.RequiereObrasExternas;
|
||||
case 3:
|
||||
return cambioEstatus.TipoDeObra;
|
||||
case 4:
|
||||
return cambioEstatus.LiberacionMacromedidor;
|
||||
case 5:
|
||||
return cambioEstatus.Relotificacion;
|
||||
case 6:
|
||||
return cambioEstatus.LiberacionDeLotes;
|
||||
case 7:
|
||||
return cambioEstatus.LiberacionDePagosDeDerechos;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static bool HayCambioCondiciones(
|
||||
ModeloCondicionesEtapaFraccionamiento condicionesAnteriores,
|
||||
ModeloCondicionesEtapaFraccionamiento condicionesActuales)
|
||||
{
|
||||
if (condicionesAnteriores == null || condicionesActuales == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return condicionesAnteriores.Aprobado_Prefactibilidad !=
|
||||
condicionesActuales.Aprobado_Prefactibilidad ||
|
||||
condicionesAnteriores.RequiereObrasExternas !=
|
||||
condicionesActuales.RequiereObrasExternas ||
|
||||
condicionesAnteriores.TipoDeObra !=
|
||||
condicionesActuales.TipoDeObra ||
|
||||
condicionesAnteriores.LiberacionMacromedidor !=
|
||||
condicionesActuales.LiberacionMacromedidor ||
|
||||
condicionesAnteriores.Relotificacion !=
|
||||
condicionesActuales.Relotificacion ||
|
||||
condicionesAnteriores.LiberacionDeLotes !=
|
||||
condicionesActuales.LiberacionDeLotes ||
|
||||
condicionesAnteriores.LiberacionDePagosDeDerechos !=
|
||||
condicionesActuales.LiberacionDePagosDeDerechos;
|
||||
}
|
||||
|
||||
private static int? NormalizeId(int? value)
|
||||
{
|
||||
return value.HasValue && value.Value > 0
|
||||
|
||||
@@ -1769,8 +1769,128 @@
|
||||
<label>Estatus *</label>
|
||||
<asp:DropDownList ID="DdlNuevoEstatusTramite"
|
||||
runat="server"
|
||||
CssClass="form-control" />
|
||||
CssClass="form-control"
|
||||
AutoPostBack="true"
|
||||
OnSelectedIndexChanged="DdlNuevoEstatusTramite_SeleccionadoIndiceCambiado" />
|
||||
</div>
|
||||
|
||||
<asp:Panel ID="PnlCondicionesEstatusTramite"
|
||||
runat="server"
|
||||
Visible="false">
|
||||
<hr />
|
||||
<h4>
|
||||
Condiciones de la etapa
|
||||
<asp:Literal ID="LitEtapaCondicionesEstatusTramite"
|
||||
runat="server" />
|
||||
</h4>
|
||||
|
||||
<div class="row">
|
||||
<asp:Panel ID="PnlAprobadoPrefactibilidadEstatusTramite"
|
||||
runat="server"
|
||||
CssClass="col-sm-6 form-group"
|
||||
Visible="false">
|
||||
<label>Aprobado en prefactibilidad</label>
|
||||
<asp:DropDownList ID="DdlAprobadoPrefactibilidadEstatusTramite"
|
||||
runat="server"
|
||||
CssClass="form-control select2me"
|
||||
Width="100%">
|
||||
<asp:ListItem Text="Sin configurar" Value="-1" />
|
||||
<asp:ListItem Text="No" Value="0" />
|
||||
<asp:ListItem Text="Sí" Value="1" />
|
||||
</asp:DropDownList>
|
||||
</asp:Panel>
|
||||
|
||||
<asp:Panel ID="PnlRequiereObrasExternasEstatusTramite"
|
||||
runat="server"
|
||||
CssClass="col-sm-6 form-group"
|
||||
Visible="false">
|
||||
<label>Requiere obras externas</label>
|
||||
<asp:DropDownList ID="DdlRequiereObrasExternasEstatusTramite"
|
||||
runat="server"
|
||||
CssClass="form-control select2me"
|
||||
Width="100%">
|
||||
<asp:ListItem Text="Sin configurar" Value="-1" />
|
||||
<asp:ListItem Text="No" Value="0" />
|
||||
<asp:ListItem Text="Sí" Value="1" />
|
||||
</asp:DropDownList>
|
||||
</asp:Panel>
|
||||
|
||||
<asp:Panel ID="PnlTipoDeObraEstatusTramite"
|
||||
runat="server"
|
||||
CssClass="col-sm-6 form-group"
|
||||
Visible="false">
|
||||
<label>Tipo de obra</label>
|
||||
<asp:DropDownList ID="DdlTipoDeObraEstatusTramite"
|
||||
runat="server"
|
||||
CssClass="form-control select2me"
|
||||
Width="100%">
|
||||
<asp:ListItem Text="Sin configurar" Value="-1" />
|
||||
<asp:ListItem Text="De cabecera" Value="0" />
|
||||
<asp:ListItem Text="Necesaria" Value="1" />
|
||||
</asp:DropDownList>
|
||||
</asp:Panel>
|
||||
|
||||
<asp:Panel ID="PnlLiberacionMacromedidorEstatusTramite"
|
||||
runat="server"
|
||||
CssClass="col-sm-6 form-group"
|
||||
Visible="false">
|
||||
<label>Liberación de macromedidor</label>
|
||||
<asp:DropDownList ID="DdlLiberacionMacromedidorEstatusTramite"
|
||||
runat="server"
|
||||
CssClass="form-control select2me"
|
||||
Width="100%">
|
||||
<asp:ListItem Text="Sin configurar" Value="-1" />
|
||||
<asp:ListItem Text="No" Value="0" />
|
||||
<asp:ListItem Text="Sí" Value="1" />
|
||||
</asp:DropDownList>
|
||||
</asp:Panel>
|
||||
|
||||
<asp:Panel ID="PnlRelotificacionEstatusTramite"
|
||||
runat="server"
|
||||
CssClass="col-sm-6 form-group"
|
||||
Visible="false">
|
||||
<label>Relotificación</label>
|
||||
<asp:DropDownList ID="DdlRelotificacionEstatusTramite"
|
||||
runat="server"
|
||||
CssClass="form-control select2me"
|
||||
Width="100%">
|
||||
<asp:ListItem Text="Sin configurar" Value="-1" />
|
||||
<asp:ListItem Text="No" Value="0" />
|
||||
<asp:ListItem Text="Sí" Value="1" />
|
||||
</asp:DropDownList>
|
||||
</asp:Panel>
|
||||
|
||||
<asp:Panel ID="PnlLiberacionDeLotesEstatusTramite"
|
||||
runat="server"
|
||||
CssClass="col-sm-6 form-group"
|
||||
Visible="false">
|
||||
<label>Liberación de lotes</label>
|
||||
<asp:DropDownList ID="DdlLiberacionDeLotesEstatusTramite"
|
||||
runat="server"
|
||||
CssClass="form-control select2me"
|
||||
Width="100%">
|
||||
<asp:ListItem Text="Sin configurar" Value="-1" />
|
||||
<asp:ListItem Text="No" Value="0" />
|
||||
<asp:ListItem Text="Sí" Value="1" />
|
||||
</asp:DropDownList>
|
||||
</asp:Panel>
|
||||
|
||||
<asp:Panel ID="PnlLiberacionPagosDerechosEstatusTramite"
|
||||
runat="server"
|
||||
CssClass="col-sm-12 form-group"
|
||||
Visible="false">
|
||||
<label>Liberación de pagos de derechos</label>
|
||||
<asp:DropDownList ID="DdlLiberacionPagosDerechosEstatusTramite"
|
||||
runat="server"
|
||||
CssClass="form-control select2me"
|
||||
Width="100%">
|
||||
<asp:ListItem Text="Sin configurar" Value="-1" />
|
||||
<asp:ListItem Text="No" Value="0" />
|
||||
<asp:ListItem Text="Sí" Value="1" />
|
||||
</asp:DropDownList>
|
||||
</asp:Panel>
|
||||
</div>
|
||||
</asp:Panel>
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
@@ -1790,6 +1910,9 @@
|
||||
</div>
|
||||
</ContentTemplate>
|
||||
<Triggers>
|
||||
<asp:AsyncPostBackTrigger
|
||||
ControlID="DdlNuevoEstatusTramite"
|
||||
EventName="SelectedIndexChanged" />
|
||||
<asp:AsyncPostBackTrigger
|
||||
ControlID="BtnGuardarEstatusTramite"
|
||||
EventName="Click" />
|
||||
|
||||
@@ -22,6 +22,9 @@ namespace SIG.Web.Pages.Fraccionamientos
|
||||
public partial class FraccionamientoDetalle : ClsPaginaBase
|
||||
{
|
||||
private const string ValorVisualizacionVacio = "—";
|
||||
private const int CveTipoTramitePrefactibilidad = 1;
|
||||
private const int CveEstatusSolicitudAutorizado = 7;
|
||||
private const int CveEstatusSolicitudCancelado = 8;
|
||||
|
||||
#region "Propiedades"
|
||||
private int CveFraccionamientoActual
|
||||
@@ -164,6 +167,62 @@ namespace SIG.Web.Pages.Fraccionamientos
|
||||
}
|
||||
}
|
||||
|
||||
private int CveTipoTramiteEstatusActual
|
||||
{
|
||||
get
|
||||
{
|
||||
return ViewState["CveTipoTramiteEstatusActual"] == null
|
||||
? 0
|
||||
: (int)ViewState["CveTipoTramiteEstatusActual"];
|
||||
}
|
||||
set
|
||||
{
|
||||
ViewState["CveTipoTramiteEstatusActual"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
private List<int> CvesCondicionesEstatusActual
|
||||
{
|
||||
get
|
||||
{
|
||||
return ViewState["CvesCondicionesEstatusActual"] as List<int>
|
||||
?? new List<int>();
|
||||
}
|
||||
set
|
||||
{
|
||||
ViewState["CvesCondicionesEstatusActual"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
private int CveEstatusSolicitudSeleccionadoAnterior
|
||||
{
|
||||
get
|
||||
{
|
||||
return ViewState["CveEstatusSolicitudSeleccionadoAnterior"] == null
|
||||
? 0
|
||||
: (int)ViewState["CveEstatusSolicitudSeleccionadoAnterior"];
|
||||
}
|
||||
set
|
||||
{
|
||||
ViewState["CveEstatusSolicitudSeleccionadoAnterior"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
private bool? AprobadoPrefactibilidadEstatusCapturado
|
||||
{
|
||||
get
|
||||
{
|
||||
return ViewState["AprobadoPrefactibilidadEstatusCapturado"] == null
|
||||
? (bool?)null
|
||||
: (bool)ViewState[
|
||||
"AprobadoPrefactibilidadEstatusCapturado"];
|
||||
}
|
||||
set
|
||||
{
|
||||
ViewState["AprobadoPrefactibilidadEstatusCapturado"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
private FiltroActivo FiltroTramiteEstatus
|
||||
{
|
||||
get
|
||||
@@ -576,17 +635,23 @@ namespace SIG.Web.Pages.Fraccionamientos
|
||||
AbrirModalEstatusTramite(cveSolicitud);
|
||||
}
|
||||
|
||||
protected void DdlNuevoEstatusTramite_SeleccionadoIndiceCambiado(
|
||||
object sender,
|
||||
EventArgs e)
|
||||
{
|
||||
CapturarAprobadoPrefactibilidadAntesDeCambiarEstatus();
|
||||
ConfigurarCondicionesSegunEstatus();
|
||||
CveEstatusSolicitudSeleccionadoAnterior =
|
||||
ObtenerCveEstatusSolicitudSeleccionado();
|
||||
OcultarMensajeEstatusTramite();
|
||||
UpModalEstatusTramite.Update();
|
||||
MostrarModalEstatusTramite();
|
||||
}
|
||||
|
||||
protected void BtnGuardarEstatusTramite_Click(
|
||||
object sender,
|
||||
EventArgs e)
|
||||
{
|
||||
if (CurrentUser.CveRol > 2)
|
||||
{
|
||||
MostrarValidacionEstatusTramite(
|
||||
"Sólo un superusuario puede cambiar el estatus de una solicitud.");
|
||||
return;
|
||||
}
|
||||
|
||||
int cveSolicitud = CveSolicitudEstatusActual;
|
||||
int cveEstatus;
|
||||
|
||||
@@ -601,10 +666,33 @@ namespace SIG.Web.Pages.Fraccionamientos
|
||||
return;
|
||||
}
|
||||
|
||||
ConfigurarCondicionesSegunEstatus();
|
||||
|
||||
var cambioEstatus = new ModeloCambioEstatusTramite
|
||||
{
|
||||
CveSolicitud = cveSolicitud,
|
||||
CveEstatusSolicitud = cveEstatus,
|
||||
CvesCondicionesMostradas =
|
||||
ObtenerCvesCondicionesEstatusVisibles(),
|
||||
AprobadoPrefactibilidad = ObtenerBitAnulable(
|
||||
DdlAprobadoPrefactibilidadEstatusTramite),
|
||||
RequiereObrasExternas = ObtenerBitAnulable(
|
||||
DdlRequiereObrasExternasEstatusTramite),
|
||||
TipoDeObra = ObtenerBitAnulable(
|
||||
DdlTipoDeObraEstatusTramite),
|
||||
LiberacionMacromedidor = ObtenerBitAnulable(
|
||||
DdlLiberacionMacromedidorEstatusTramite),
|
||||
Relotificacion = ObtenerBitAnulable(
|
||||
DdlRelotificacionEstatusTramite),
|
||||
LiberacionDeLotes = ObtenerBitAnulable(
|
||||
DdlLiberacionDeLotesEstatusTramite),
|
||||
LiberacionDePagosDeDerechos = ObtenerBitAnulable(
|
||||
DdlLiberacionPagosDerechosEstatusTramite)
|
||||
};
|
||||
|
||||
DbResult<TramiteSolicitudStatusChangeModel> resultado =
|
||||
AppServices.TramiteSolicitudService.ChangeStatus(
|
||||
cveSolicitud,
|
||||
cveEstatus,
|
||||
AppServices.TramiteSolicitudService.CambiarEstatus(
|
||||
cambioEstatus,
|
||||
CurrentUser.CveUsuario,
|
||||
CurrentUser.NombreDominio);
|
||||
|
||||
@@ -615,6 +703,10 @@ namespace SIG.Web.Pages.Fraccionamientos
|
||||
}
|
||||
|
||||
CveSolicitudEstatusActual = 0;
|
||||
CveTipoTramiteEstatusActual = 0;
|
||||
CvesCondicionesEstatusActual = new List<int>();
|
||||
CveEstatusSolicitudSeleccionadoAnterior = 0;
|
||||
AprobadoPrefactibilidadEstatusCapturado = null;
|
||||
OcultarMensajeEstatusTramite();
|
||||
CargarOpcionesEstatusTramite();
|
||||
CargarTramites();
|
||||
@@ -625,9 +717,11 @@ namespace SIG.Web.Pages.Fraccionamientos
|
||||
OcultarModalEstatusTramite();
|
||||
|
||||
Alert(
|
||||
resultado.Data != null && resultado.Data.HuboCambio
|
||||
? "Estatus actualizado correctamente."
|
||||
: "La solicitud ya tenía el estatus seleccionado.",
|
||||
resultado.Data != null &&
|
||||
(resultado.Data.HuboCambio ||
|
||||
resultado.Data.HuboCambioCondiciones)
|
||||
? "Cambio de estatus guardado correctamente."
|
||||
: "No se realizaron cambios en la solicitud.",
|
||||
TipoMensaje.ToastExito);
|
||||
}
|
||||
|
||||
@@ -1904,6 +1998,60 @@ namespace SIG.Web.Pages.Fraccionamientos
|
||||
return;
|
||||
}
|
||||
|
||||
DbResult<List<ModeloCondicionMostrarTramite>>
|
||||
resultadoCondicionesMostrar =
|
||||
AppServices.TramiteSolicitudService
|
||||
.ListarCondicionesPorTramite(
|
||||
resultado.Data.CveTipoTramite,
|
||||
resultado.Data.CveFraccionamientoEtapa,
|
||||
CurrentUser.CveUsuario,
|
||||
CurrentUser.NombreDominio);
|
||||
|
||||
if (!resultadoCondicionesMostrar.Success)
|
||||
{
|
||||
Alert(
|
||||
resultadoCondicionesMostrar.UserMessage,
|
||||
TipoMensaje.MsgError);
|
||||
return;
|
||||
}
|
||||
|
||||
List<int> cvesCondiciones =
|
||||
(resultadoCondicionesMostrar.Data ??
|
||||
new List<ModeloCondicionMostrarTramite>())
|
||||
.Select(condicion => condicion.CveCondicionMostrar)
|
||||
.Distinct()
|
||||
.ToList();
|
||||
|
||||
ModeloCondicionesEtapaFraccionamiento condicionesEtapa = null;
|
||||
|
||||
if (cvesCondiciones.Count > 0)
|
||||
{
|
||||
DbResult<ModeloCondicionesEtapaFraccionamiento>
|
||||
resultadoCondicionesEtapa =
|
||||
AppServices.ServicioFraccionamiento
|
||||
.ObtenerCondicionesEtapa(
|
||||
resultado.Data.CveFraccionamientoEtapa,
|
||||
CurrentUser.CveUsuario,
|
||||
CurrentUser.NombreDominio);
|
||||
|
||||
if (!resultadoCondicionesEtapa.Success ||
|
||||
resultadoCondicionesEtapa.Data == null ||
|
||||
resultadoCondicionesEtapa.Data.CveFraccionamiento !=
|
||||
CveFraccionamientoActual)
|
||||
{
|
||||
Alert(
|
||||
resultadoCondicionesEtapa.Success
|
||||
? "No se encontraron las condiciones de la etapa."
|
||||
: resultadoCondicionesEtapa.UserMessage,
|
||||
resultadoCondicionesEtapa.Success
|
||||
? TipoMensaje.MsgAdvertencia
|
||||
: TipoMensaje.MsgError);
|
||||
return;
|
||||
}
|
||||
|
||||
condicionesEtapa = resultadoCondicionesEtapa.Data;
|
||||
}
|
||||
|
||||
DbResult<List<TramiteSolicitudEstatusOptionModel>> resultadoEstatus =
|
||||
AppServices.TramiteSolicitudService.ListStatusOptions(
|
||||
CurrentUser.CveUsuario,
|
||||
@@ -1939,15 +2087,193 @@ namespace SIG.Web.Pages.Fraccionamientos
|
||||
|
||||
CveSolicitudEstatusActual =
|
||||
resultado.Data.CveSolicitud;
|
||||
CveTipoTramiteEstatusActual =
|
||||
resultado.Data.CveTipoTramite;
|
||||
CvesCondicionesEstatusActual = cvesCondiciones;
|
||||
LitFolioEstatusTramite.Text =
|
||||
CodificarValorVisualizacion(resultado.Data.Folio);
|
||||
LitEtapaCondicionesEstatusTramite.Text =
|
||||
CodificarValorVisualizacion(" — " + resultado.Data.Etapa);
|
||||
CargarValoresCondicionesEstatus(condicionesEtapa);
|
||||
AprobadoPrefactibilidadEstatusCapturado =
|
||||
condicionesEtapa == null
|
||||
? (bool?)null
|
||||
: condicionesEtapa.Aprobado_Prefactibilidad;
|
||||
ConfigurarCondicionesSegunEstatus();
|
||||
CveEstatusSolicitudSeleccionadoAnterior =
|
||||
ObtenerCveEstatusSolicitudSeleccionado();
|
||||
OcultarMensajeEstatusTramite();
|
||||
UpModalEstatusTramite.Update();
|
||||
MostrarModalEstatusTramite();
|
||||
}
|
||||
|
||||
private void CargarValoresCondicionesEstatus(
|
||||
ModeloCondicionesEtapaFraccionamiento condiciones)
|
||||
{
|
||||
SeleccionarBitAnulable(
|
||||
DdlAprobadoPrefactibilidadEstatusTramite,
|
||||
condiciones == null
|
||||
? null
|
||||
: condiciones.Aprobado_Prefactibilidad);
|
||||
SeleccionarBitAnulable(
|
||||
DdlRequiereObrasExternasEstatusTramite,
|
||||
condiciones == null
|
||||
? null
|
||||
: condiciones.RequiereObrasExternas);
|
||||
SeleccionarBitAnulable(
|
||||
DdlTipoDeObraEstatusTramite,
|
||||
condiciones == null ? null : condiciones.TipoDeObra);
|
||||
SeleccionarBitAnulable(
|
||||
DdlLiberacionMacromedidorEstatusTramite,
|
||||
condiciones == null
|
||||
? null
|
||||
: condiciones.LiberacionMacromedidor);
|
||||
SeleccionarBitAnulable(
|
||||
DdlRelotificacionEstatusTramite,
|
||||
condiciones == null ? null : condiciones.Relotificacion);
|
||||
SeleccionarBitAnulable(
|
||||
DdlLiberacionDeLotesEstatusTramite,
|
||||
condiciones == null
|
||||
? null
|
||||
: condiciones.LiberacionDeLotes);
|
||||
SeleccionarBitAnulable(
|
||||
DdlLiberacionPagosDerechosEstatusTramite,
|
||||
condiciones == null
|
||||
? null
|
||||
: condiciones.LiberacionDePagosDeDerechos);
|
||||
}
|
||||
|
||||
private void ConfigurarCondicionesSegunEstatus()
|
||||
{
|
||||
PnlCondicionesEstatusTramite.Visible = true;
|
||||
|
||||
List<int> cvesCondicionesVisibles =
|
||||
ObtenerCvesCondicionesEstatusVisibles();
|
||||
bool mostrarAprobadoPrefactibilidad =
|
||||
cvesCondicionesVisibles.Contains(1);
|
||||
bool mostrarRequiereObrasExternas =
|
||||
cvesCondicionesVisibles.Contains(2);
|
||||
bool mostrarTipoDeObra =
|
||||
cvesCondicionesVisibles.Contains(3);
|
||||
bool mostrarLiberacionMacromedidor =
|
||||
cvesCondicionesVisibles.Contains(4);
|
||||
bool mostrarRelotificacion =
|
||||
cvesCondicionesVisibles.Contains(5);
|
||||
bool mostrarLiberacionDeLotes =
|
||||
cvesCondicionesVisibles.Contains(6);
|
||||
bool mostrarLiberacionPagosDerechos =
|
||||
cvesCondicionesVisibles.Contains(7);
|
||||
|
||||
PnlAprobadoPrefactibilidadEstatusTramite.Visible =
|
||||
mostrarAprobadoPrefactibilidad;
|
||||
PnlRequiereObrasExternasEstatusTramite.Visible =
|
||||
mostrarRequiereObrasExternas;
|
||||
PnlTipoDeObraEstatusTramite.Visible = mostrarTipoDeObra;
|
||||
PnlLiberacionMacromedidorEstatusTramite.Visible =
|
||||
mostrarLiberacionMacromedidor;
|
||||
PnlRelotificacionEstatusTramite.Visible = mostrarRelotificacion;
|
||||
PnlLiberacionDeLotesEstatusTramite.Visible =
|
||||
mostrarLiberacionDeLotes;
|
||||
PnlLiberacionPagosDerechosEstatusTramite.Visible =
|
||||
mostrarLiberacionPagosDerechos;
|
||||
DdlAprobadoPrefactibilidadEstatusTramite.Enabled = true;
|
||||
|
||||
int cveEstatusSolicitud;
|
||||
bool estatusValido = int.TryParse(
|
||||
DdlNuevoEstatusTramite.SelectedValue,
|
||||
out cveEstatusSolicitud);
|
||||
|
||||
if (CveTipoTramiteEstatusActual ==
|
||||
CveTipoTramitePrefactibilidad &&
|
||||
estatusValido)
|
||||
{
|
||||
if (cveEstatusSolicitud == CveEstatusSolicitudAutorizado)
|
||||
{
|
||||
SeleccionarBitAnulable(
|
||||
DdlAprobadoPrefactibilidadEstatusTramite,
|
||||
true);
|
||||
DdlAprobadoPrefactibilidadEstatusTramite.Enabled = false;
|
||||
}
|
||||
else if (cveEstatusSolicitud ==
|
||||
CveEstatusSolicitudCancelado)
|
||||
{
|
||||
SeleccionarBitAnulable(
|
||||
DdlAprobadoPrefactibilidadEstatusTramite,
|
||||
false);
|
||||
DdlAprobadoPrefactibilidadEstatusTramite.Enabled = false;
|
||||
}
|
||||
else if (CveEstatusSolicitudSeleccionadoAnterior ==
|
||||
CveEstatusSolicitudAutorizado ||
|
||||
CveEstatusSolicitudSeleccionadoAnterior ==
|
||||
CveEstatusSolicitudCancelado)
|
||||
{
|
||||
SeleccionarBitAnulable(
|
||||
DdlAprobadoPrefactibilidadEstatusTramite,
|
||||
AprobadoPrefactibilidadEstatusCapturado);
|
||||
}
|
||||
}
|
||||
|
||||
bool hayCondicionesVisibles =
|
||||
mostrarAprobadoPrefactibilidad ||
|
||||
mostrarRequiereObrasExternas ||
|
||||
mostrarTipoDeObra ||
|
||||
mostrarLiberacionMacromedidor ||
|
||||
mostrarRelotificacion ||
|
||||
mostrarLiberacionDeLotes ||
|
||||
mostrarLiberacionPagosDerechos;
|
||||
|
||||
if (!hayCondicionesVisibles)
|
||||
{
|
||||
PnlCondicionesEstatusTramite.Visible = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void CapturarAprobadoPrefactibilidadAntesDeCambiarEstatus()
|
||||
{
|
||||
if (CveTipoTramiteEstatusActual !=
|
||||
CveTipoTramitePrefactibilidad ||
|
||||
CveEstatusSolicitudSeleccionadoAnterior ==
|
||||
CveEstatusSolicitudAutorizado ||
|
||||
CveEstatusSolicitudSeleccionadoAnterior ==
|
||||
CveEstatusSolicitudCancelado)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
AprobadoPrefactibilidadEstatusCapturado = ObtenerBitAnulable(
|
||||
DdlAprobadoPrefactibilidadEstatusTramite);
|
||||
}
|
||||
|
||||
private int ObtenerCveEstatusSolicitudSeleccionado()
|
||||
{
|
||||
int cveEstatusSolicitud;
|
||||
|
||||
return int.TryParse(
|
||||
DdlNuevoEstatusTramite.SelectedValue,
|
||||
out cveEstatusSolicitud)
|
||||
? cveEstatusSolicitud
|
||||
: 0;
|
||||
}
|
||||
|
||||
private List<int> ObtenerCvesCondicionesEstatusVisibles()
|
||||
{
|
||||
var cvesCondicionesVisibles = new List<int>(
|
||||
CvesCondicionesEstatusActual);
|
||||
|
||||
if (CveTipoTramiteEstatusActual ==
|
||||
CveTipoTramitePrefactibilidad &&
|
||||
ObtenerCveEstatusSolicitudSeleccionado() ==
|
||||
CveEstatusSolicitudCancelado)
|
||||
{
|
||||
cvesCondicionesVisibles.Remove(2);
|
||||
}
|
||||
|
||||
return cvesCondicionesVisibles;
|
||||
}
|
||||
|
||||
private void MostrarValidacionEstatusTramite(string mensaje)
|
||||
{
|
||||
ConfigurarCondicionesSegunEstatus();
|
||||
LblMensajeEstatusTramite.Text =
|
||||
Server.HtmlEncode(mensaje ?? string.Empty);
|
||||
LblMensajeEstatusTramite.Visible = true;
|
||||
|
||||
272
Tramites_CambioEstatus_Condiciones_20260907.sql
Normal file
272
Tramites_CambioEstatus_Condiciones_20260907.sql
Normal file
@@ -0,0 +1,272 @@
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Tra_MostrarCondicionesporTramite
|
||||
@CveTipoTramite int,
|
||||
@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
|
||||
DECLARE @CvePrefactibilidad int = 1;
|
||||
DECLARE @CvePuntosConexion int = 5;
|
||||
DECLARE @CveSupervisionObraRedesInternas int = 13;
|
||||
DECLARE @CveConvenioActualizacionPagos int = 22;
|
||||
DECLARE @AprobadoPrefactibilidad bit;
|
||||
DECLARE @RequiereObrasExternas bit;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.FraccionamientosEtapas
|
||||
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'La etapa seleccionada no existe.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT
|
||||
@AprobadoPrefactibilidad = E.Aprobado_Prefactibilidad,
|
||||
@RequiereObrasExternas = E.RequiereObrasExternas
|
||||
FROM dbo.FraccionamientosEtapas AS E
|
||||
WHERE E.CveFraccionamientoEtapa = @CveFraccionamientoEtapa;
|
||||
|
||||
DECLARE @Condiciones TABLE
|
||||
(
|
||||
CveCondicionMostrar int NOT NULL,
|
||||
CondicionMostrar varchar(100) NOT NULL
|
||||
);
|
||||
|
||||
IF @CveTipoTramite = @CvePrefactibilidad
|
||||
BEGIN
|
||||
INSERT INTO @Condiciones
|
||||
(CveCondicionMostrar, CondicionMostrar)
|
||||
VALUES
|
||||
(1, 'Aprobado en prefactibilidad'),
|
||||
(2, 'Requiere obras externas');
|
||||
END;
|
||||
|
||||
IF @CveTipoTramite = @CvePuntosConexion
|
||||
AND @AprobadoPrefactibilidad = 1
|
||||
AND @RequiereObrasExternas = 1
|
||||
BEGIN
|
||||
INSERT INTO @Condiciones
|
||||
(CveCondicionMostrar, CondicionMostrar)
|
||||
VALUES
|
||||
(3, 'Tipo de obra');
|
||||
END;
|
||||
|
||||
IF @CveTipoTramite = @CveSupervisionObraRedesInternas
|
||||
BEGIN
|
||||
INSERT INTO @Condiciones
|
||||
(CveCondicionMostrar, CondicionMostrar)
|
||||
VALUES
|
||||
(4, 'Liberación de macromedidor'),
|
||||
(5, 'Relotificación'),
|
||||
(6, 'Liberación de lotes');
|
||||
END;
|
||||
|
||||
IF @CveTipoTramite = @CveConvenioActualizacionPagos
|
||||
BEGIN
|
||||
INSERT INTO @Condiciones
|
||||
(CveCondicionMostrar, CondicionMostrar)
|
||||
VALUES
|
||||
(7, 'Liberación de pagos de derechos');
|
||||
END;
|
||||
|
||||
SELECT
|
||||
CveCondicionMostrar,
|
||||
CondicionMostrar
|
||||
FROM @Condiciones
|
||||
ORDER BY CveCondicionMostrar;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al consultar las condiciones del trámite; 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_MostrarCondicionesporTramite'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Fraccionamientos_EtapaCondicionUpdate
|
||||
@CveFraccionamientoEtapa int,
|
||||
@CveCondicionMostrar int,
|
||||
@Valor 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
|
||||
IF @CveCondicionMostrar NOT BETWEEN 1 AND 7
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'La condición seleccionada no es válida.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.FraccionamientosEtapas
|
||||
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
)
|
||||
BEGIN
|
||||
SET @ErrorMostrar = 'La etapa seleccionada no existe.';
|
||||
SET @ErrorTipo = 2;
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @CveCondicionMostrar = 1
|
||||
BEGIN
|
||||
UPDATE dbo.FraccionamientosEtapas
|
||||
SET
|
||||
Aprobado_Prefactibilidad = @Valor,
|
||||
FechaModificacion = GETDATE(),
|
||||
CveUsuario = @CveUsuarioEjecuta
|
||||
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
AND ISNULL(CONVERT(tinyint, Aprobado_Prefactibilidad), 2) <>
|
||||
ISNULL(CONVERT(tinyint, @Valor), 2);
|
||||
END;
|
||||
|
||||
IF @CveCondicionMostrar = 2
|
||||
BEGIN
|
||||
UPDATE dbo.FraccionamientosEtapas
|
||||
SET
|
||||
RequiereObrasExternas = @Valor,
|
||||
FechaModificacion = GETDATE(),
|
||||
CveUsuario = @CveUsuarioEjecuta
|
||||
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
AND ISNULL(CONVERT(tinyint, RequiereObrasExternas), 2) <>
|
||||
ISNULL(CONVERT(tinyint, @Valor), 2);
|
||||
END;
|
||||
|
||||
IF @CveCondicionMostrar = 3
|
||||
BEGIN
|
||||
UPDATE dbo.FraccionamientosEtapas
|
||||
SET
|
||||
TipoDeObra = @Valor,
|
||||
FechaModificacion = GETDATE(),
|
||||
CveUsuario = @CveUsuarioEjecuta
|
||||
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
AND ISNULL(CONVERT(tinyint, TipoDeObra), 2) <>
|
||||
ISNULL(CONVERT(tinyint, @Valor), 2);
|
||||
END;
|
||||
|
||||
IF @CveCondicionMostrar = 4
|
||||
BEGIN
|
||||
UPDATE dbo.FraccionamientosEtapas
|
||||
SET
|
||||
LiberacionMacromedidor = @Valor,
|
||||
FechaModificacion = GETDATE(),
|
||||
CveUsuario = @CveUsuarioEjecuta
|
||||
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
AND ISNULL(CONVERT(tinyint, LiberacionMacromedidor), 2) <>
|
||||
ISNULL(CONVERT(tinyint, @Valor), 2);
|
||||
END;
|
||||
|
||||
IF @CveCondicionMostrar = 5
|
||||
BEGIN
|
||||
UPDATE dbo.FraccionamientosEtapas
|
||||
SET
|
||||
Relotificacion = @Valor,
|
||||
FechaModificacion = GETDATE(),
|
||||
CveUsuario = @CveUsuarioEjecuta
|
||||
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
AND ISNULL(CONVERT(tinyint, Relotificacion), 2) <>
|
||||
ISNULL(CONVERT(tinyint, @Valor), 2);
|
||||
END;
|
||||
|
||||
IF @CveCondicionMostrar = 6
|
||||
BEGIN
|
||||
UPDATE dbo.FraccionamientosEtapas
|
||||
SET
|
||||
LiberacionDeLotes = @Valor,
|
||||
FechaModificacion = GETDATE(),
|
||||
CveUsuario = @CveUsuarioEjecuta
|
||||
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
AND ISNULL(CONVERT(tinyint, LiberacionDeLotes), 2) <>
|
||||
ISNULL(CONVERT(tinyint, @Valor), 2);
|
||||
END;
|
||||
|
||||
IF @CveCondicionMostrar = 7
|
||||
BEGIN
|
||||
UPDATE dbo.FraccionamientosEtapas
|
||||
SET
|
||||
LiberacionDePagosDeDerechos = @Valor,
|
||||
FechaModificacion = GETDATE(),
|
||||
CveUsuario = @CveUsuarioEjecuta
|
||||
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
AND ISNULL(
|
||||
CONVERT(tinyint, LiberacionDePagosDeDerechos),
|
||||
2) <>
|
||||
ISNULL(CONVERT(tinyint, @Valor), 2);
|
||||
END;
|
||||
|
||||
SELECT
|
||||
E.CveFraccionamientoEtapa,
|
||||
E.CveFraccionamiento,
|
||||
F.CveCliente,
|
||||
E.Etapa,
|
||||
E.Aprobado_Prefactibilidad,
|
||||
E.RequiereObrasExternas,
|
||||
E.TipoDeObra,
|
||||
E.LiberacionMacromedidor,
|
||||
E.Relotificacion,
|
||||
E.LiberacionDeLotes,
|
||||
E.LiberacionDePagosDeDerechos
|
||||
FROM dbo.FraccionamientosEtapas AS E
|
||||
INNER JOIN dbo.Fraccionamientos AS F
|
||||
ON F.CveFraccionamiento = E.CveFraccionamiento
|
||||
WHERE E.CveFraccionamientoEtapa = @CveFraccionamientoEtapa;
|
||||
|
||||
SET @Return = 1;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
SET @ErrorMostrar = 'Ocurrió un error al actualizar la condición de la etapa; 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_Fraccionamientos_EtapaCondicionUpdate'),
|
||||
'; Línea: ', ERROR_LINE(),
|
||||
'; Detalle: ', ERROR_MESSAGE()
|
||||
);
|
||||
|
||||
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
95
Tramites_GenerarSolicitudesPorFlujo_20260907.sql
Normal file
95
Tramites_GenerarSolicitudesPorFlujo_20260907.sql
Normal file
@@ -0,0 +1,95 @@
|
||||
CREATE OR ALTER PROCEDURE dbo.PA_Tra_GenerarSolicitudesPorFlujo
|
||||
(
|
||||
@CveFraccionamientoEtapa int,
|
||||
@CveUsuario int
|
||||
)
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
DECLARE @CveEstatusSolicitud int;
|
||||
|
||||
SELECT TOP (1)
|
||||
@CveEstatusSolicitud = ES.CveEstatusSolicitud
|
||||
FROM dbo.Tra_EstatusSolicitud AS ES
|
||||
WHERE ES.EsActivo = 1
|
||||
AND ES.Orden = 1
|
||||
ORDER BY ES.CveEstatusSolicitud;
|
||||
|
||||
;WITH DatosFlujo AS
|
||||
(
|
||||
SELECT
|
||||
FE.CveFraccionamientoEtapa,
|
||||
T.CveTipoTramite,
|
||||
TF.CveTipoTramitePadre,
|
||||
IIF(
|
||||
ES.EsFinal = 1
|
||||
AND ES.EsOK = 1,
|
||||
1,
|
||||
0
|
||||
) AS EsOK
|
||||
FROM dbo.Tra_TiposTramite AS T
|
||||
INNER JOIN dbo.FraccionamientosEtapas AS FE
|
||||
ON FE.CveFraccionamientoEtapa = @CveFraccionamientoEtapa
|
||||
INNER JOIN dbo.Tra_TiposTramiteFlujo AS TF
|
||||
ON TF.CveTipoTramite = T.CveTipoTramite
|
||||
LEFT JOIN dbo.Tra_Solicitudes AS TS
|
||||
ON TS.CveTipoTramite = TF.CveTipoTramitePadre
|
||||
AND TS.CveFraccionamientoEtapa =
|
||||
FE.CveFraccionamientoEtapa
|
||||
LEFT JOIN dbo.Tra_EstatusSolicitud AS ES
|
||||
ON ES.CveEstatusSolicitud = TS.CveEstatusSolicitud
|
||||
),
|
||||
TramitesDisponibles AS
|
||||
(
|
||||
SELECT
|
||||
D.CveFraccionamientoEtapa,
|
||||
D.CveTipoTramite
|
||||
FROM DatosFlujo AS D
|
||||
GROUP BY
|
||||
D.CveFraccionamientoEtapa,
|
||||
D.CveTipoTramite
|
||||
HAVING COUNT(D.CveTipoTramitePadre) = SUM(D.EsOK)
|
||||
)
|
||||
INSERT INTO dbo.Tra_Solicitudes
|
||||
(
|
||||
Folio,
|
||||
CveCliente,
|
||||
CveFraccionamiento,
|
||||
CveFraccionamientoEtapa,
|
||||
CveTipoTramite,
|
||||
CveEstatusSolicitud,
|
||||
CveUsuarioSolicita,
|
||||
FechaInicio,
|
||||
FechaAlta
|
||||
)
|
||||
SELECT
|
||||
CONCAT(
|
||||
'ET',
|
||||
FE.CveFraccionamientoEtapa,
|
||||
'-TR',
|
||||
TD.CveTipoTramite
|
||||
),
|
||||
F.CveCliente,
|
||||
FE.CveFraccionamiento,
|
||||
FE.CveFraccionamientoEtapa,
|
||||
TD.CveTipoTramite,
|
||||
@CveEstatusSolicitud,
|
||||
@CveUsuario,
|
||||
GETDATE(),
|
||||
GETDATE()
|
||||
FROM TramitesDisponibles AS TD
|
||||
INNER JOIN dbo.FraccionamientosEtapas AS FE
|
||||
ON FE.CveFraccionamientoEtapa = TD.CveFraccionamientoEtapa
|
||||
INNER JOIN dbo.Fraccionamientos AS F
|
||||
ON F.CveFraccionamiento = FE.CveFraccionamiento
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM dbo.Tra_Solicitudes AS S
|
||||
WHERE S.CveFraccionamientoEtapa =
|
||||
TD.CveFraccionamientoEtapa
|
||||
AND S.CveTipoTramite = TD.CveTipoTramite
|
||||
);
|
||||
END;
|
||||
GO
|
||||
Reference in New Issue
Block a user