documentos
This commit is contained in:
@@ -45,9 +45,11 @@ namespace SIG.Web.AppCode.Configuration
|
||||
public static IUserAdministrationService UserAdministrationService { get; private set; }
|
||||
public static IGeneralCatalogRepository GeneralCatalogRepository { get; private set; }
|
||||
public static IClienteDocumentoService ClienteDocumentoService { get; private set; }
|
||||
public static ITramiteDocumentoService TramiteDocumentoService { get; private set; }
|
||||
public static IFraccionamientoService FraccionamientoService { get; private set; }
|
||||
public static IFraccionamientoGisService FraccionamientoGisService { get; private set; }
|
||||
public static ITramiteCatalogService TramiteCatalogService { get; private set; }
|
||||
public static ITramiteSolicitudService TramiteSolicitudService { get; private set; }
|
||||
public static ICfdiTimbradoService CfdiTimbradoService { get; private set; }
|
||||
public static IPublicRegistrationService PublicRegistrationService { get; private set; }
|
||||
public static ILoginAttemptRepository LoginAttemptRepository { get; private set; }
|
||||
@@ -90,9 +92,22 @@ namespace SIG.Web.AppCode.Configuration
|
||||
GeneralCatalogRepository = new GeneralCatalogRepository(DbExecutor);
|
||||
ClienteDocumentoService = new ClienteDocumentoService(
|
||||
new ClienteDocumentoRepository(DbExecutor));
|
||||
|
||||
ITramiteDocumentoRepository tramiteDocumentoRepository =
|
||||
new TramiteDocumentoRepository(DbExecutor);
|
||||
ITramiteDocumentoFileStore tramiteDocumentoFileStore =
|
||||
new TramiteDocumentoFileStore();
|
||||
TramiteDocumentoService = new TramiteDocumentoService(
|
||||
tramiteDocumentoRepository,
|
||||
tramiteDocumentoFileStore,
|
||||
BitacoraService);
|
||||
|
||||
ITramiteSolicitudRepository tramiteSolicitudRepository =
|
||||
new TramiteSolicitudRepository(DbExecutor);
|
||||
|
||||
FraccionamientoService = new FraccionamientoService(
|
||||
new FraccionamientoRepository(DbExecutor),
|
||||
new TramiteSolicitudRepository(DbExecutor),
|
||||
tramiteSolicitudRepository,
|
||||
BitacoraService);
|
||||
|
||||
IFraccionamientoGisRepository gisRepository =
|
||||
@@ -102,10 +117,14 @@ namespace SIG.Web.AppCode.Configuration
|
||||
FraccionamientoGisService = new FraccionamientoGisService(
|
||||
gisRepository,
|
||||
gisFileStore,
|
||||
BitacoraService);
|
||||
BitacoraService,
|
||||
TramiteDocumentoService);
|
||||
TramiteCatalogService = new TramiteCatalogService(
|
||||
new TramiteCatalogRepository(DbExecutor),
|
||||
BitacoraService);
|
||||
TramiteSolicitudService = new TramiteSolicitudService(
|
||||
tramiteSolicitudRepository,
|
||||
BitacoraService);
|
||||
CfdiTimbradoService = new CfdiTimbradoService(
|
||||
new CfdiRepository(DbExecutor),
|
||||
new ProfactCfdi40XmlBuilder(),
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
using System.IO;
|
||||
using SIG.Web.AppCode.Models.Documentos;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
{
|
||||
public interface ITramiteDocumentoFileStore
|
||||
{
|
||||
TramiteDocumentoPreparedFile Prepare(
|
||||
TramiteDocumentoUploadContextModel context,
|
||||
Stream source,
|
||||
string previousRelativePath);
|
||||
|
||||
void Promote(TramiteDocumentoPreparedFile preparedFile);
|
||||
void Rollback(TramiteDocumentoPreparedFile preparedFile);
|
||||
void Complete(TramiteDocumentoPreparedFile preparedFile);
|
||||
Stream OpenRead(string relativePath);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Documentos;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
{
|
||||
public interface ITramiteDocumentoRepository
|
||||
{
|
||||
DbResult<List<TramiteDocumentoSolicitudModel>> ListForDevelopment(
|
||||
int developmentId,
|
||||
int? stageId,
|
||||
int? procedureTypeId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoUploadContextModel> GetUploadContext(
|
||||
int developmentId,
|
||||
int requestId,
|
||||
int documentTypeId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoUploadContextModel> GetStageUploadContext(
|
||||
int stageId,
|
||||
int procedureTypeId,
|
||||
int documentTypeId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoSaveResultModel> SaveUpload(
|
||||
int developmentId,
|
||||
int requestId,
|
||||
int documentTypeId,
|
||||
string originalFileName,
|
||||
string physicalFileName,
|
||||
string relativePath,
|
||||
string contentType,
|
||||
long contentLength,
|
||||
string clientComment,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoReviewResultModel> Review(
|
||||
int developmentId,
|
||||
int documentRequestId,
|
||||
bool approved,
|
||||
string note,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoDownloadContextModel> GetDownloadContext(
|
||||
int developmentId,
|
||||
int documentRequestId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoDeleteResultModel> Delete(
|
||||
int developmentId,
|
||||
int documentRequestId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Documentos;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Documentos
|
||||
{
|
||||
public interface ITramiteDocumentoService
|
||||
{
|
||||
DbResult<List<TramiteDocumentoSolicitudModel>> ListForDevelopment(
|
||||
int developmentId,
|
||||
int? stageId,
|
||||
int? procedureTypeId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoUploadContextModel> GetUploadContext(
|
||||
int developmentId,
|
||||
int requestId,
|
||||
int documentTypeId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoSaveResultModel> Upload(
|
||||
int developmentId,
|
||||
int requestId,
|
||||
int documentTypeId,
|
||||
string originalFileName,
|
||||
string contentType,
|
||||
Stream content,
|
||||
long contentLength,
|
||||
string clientComment,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoReviewResultModel> Review(
|
||||
int developmentId,
|
||||
int documentRequestId,
|
||||
bool approved,
|
||||
string note,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoFileModel> Open(
|
||||
int developmentId,
|
||||
int documentRequestId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteDocumentoSaveResultModel> RegisterExternalStageFile(
|
||||
int stageId,
|
||||
int procedureTypeId,
|
||||
int documentTypeId,
|
||||
string originalFileName,
|
||||
string physicalFileName,
|
||||
string relativePath,
|
||||
string contentType,
|
||||
long contentLength,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<bool> RemoveExternalStageFile(
|
||||
int stageId,
|
||||
int procedureTypeId,
|
||||
int documentTypeId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Tramites;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Tramites
|
||||
{
|
||||
@@ -9,5 +11,28 @@ namespace SIG.Web.AppCode.Contracts.Tramites
|
||||
int procedureTypeId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<List<TramiteSolicitudModel>> ListForDevelopment(
|
||||
int developmentId,
|
||||
int? stageId,
|
||||
int? procedureTypeId,
|
||||
int? statusId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteSolicitudModel> Get(
|
||||
int requestId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<List<TramiteSolicitudEstatusOptionModel>> ListStatusOptions(
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteSolicitudStatusChangeModel> ChangeStatus(
|
||||
int requestId,
|
||||
int statusId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Tramites;
|
||||
|
||||
namespace SIG.Web.AppCode.Contracts.Tramites
|
||||
{
|
||||
public interface ITramiteSolicitudService
|
||||
{
|
||||
DbResult<List<TramiteSolicitudModel>> ListForDevelopment(
|
||||
int developmentId,
|
||||
int? stageId,
|
||||
int? procedureTypeId,
|
||||
int? statusId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteSolicitudModel> Get(
|
||||
int requestId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<List<TramiteSolicitudEstatusOptionModel>> ListStatusOptions(
|
||||
int executingUser,
|
||||
string domainName);
|
||||
|
||||
DbResult<TramiteSolicitudStatusChangeModel> ChangeStatus(
|
||||
int requestId,
|
||||
int statusId,
|
||||
int executingUser,
|
||||
string domainName);
|
||||
}
|
||||
}
|
||||
129
SIG.Web/App_Code/Handlers/Documentos/TramiteDocumentoHandler.cs
Normal file
129
SIG.Web/App_Code/Handlers/Documentos/TramiteDocumentoHandler.cs
Normal file
@@ -0,0 +1,129 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
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;
|
||||
|
||||
namespace SIG.Web.Pages.Fraccionamientos
|
||||
{
|
||||
public sealed class TramiteDocumentoHandler
|
||||
: IHttpHandler, IRequiresSessionState
|
||||
{
|
||||
public bool IsReusable
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
public void ProcessRequest(HttpContext context)
|
||||
{
|
||||
UserSessionModel currentUser = GetCurrentUser();
|
||||
|
||||
if (currentUser == null)
|
||||
{
|
||||
context.Response.StatusCode = 401;
|
||||
context.Response.ContentType = "text/plain";
|
||||
context.Response.Write(
|
||||
"Su sesión no está disponible. Inicie sesión nuevamente.");
|
||||
return;
|
||||
}
|
||||
|
||||
int developmentId;
|
||||
int documentRequestId;
|
||||
|
||||
if (!TryReadInt(
|
||||
context.Request.QueryString["fraccionamiento"],
|
||||
out developmentId) ||
|
||||
!TryReadInt(
|
||||
context.Request.QueryString["documento"],
|
||||
out documentRequestId))
|
||||
{
|
||||
context.Response.StatusCode = 400;
|
||||
context.Response.ContentType = "text/plain";
|
||||
context.Response.Write("El documento solicitado no es válido.");
|
||||
return;
|
||||
}
|
||||
|
||||
DbResult<TramiteDocumentoFileModel> result =
|
||||
AppServices.TramiteDocumentoService.Open(
|
||||
developmentId,
|
||||
documentRequestId,
|
||||
currentUser.CveUsuario,
|
||||
currentUser.NombreDominio);
|
||||
|
||||
if (!result.Success ||
|
||||
result.Data == null ||
|
||||
result.Data.Content == null)
|
||||
{
|
||||
context.Response.StatusCode = 404;
|
||||
context.Response.ContentType = "text/plain";
|
||||
context.Response.Write(
|
||||
result == null ||
|
||||
string.IsNullOrWhiteSpace(result.UserMessage)
|
||||
? "No se encontró el documento."
|
||||
: result.UserMessage);
|
||||
return;
|
||||
}
|
||||
|
||||
TramiteDocumentoFileModel file = result.Data;
|
||||
|
||||
context.Response.Clear();
|
||||
context.Response.ClearHeaders();
|
||||
context.Response.TrySkipIisCustomErrors = true;
|
||||
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
|
||||
context.Response.Cache.SetNoStore();
|
||||
context.Response.ContentType =
|
||||
string.IsNullOrWhiteSpace(file.ContentType)
|
||||
? "application/octet-stream"
|
||||
: file.ContentType;
|
||||
context.Response.AddHeader(
|
||||
"Content-Disposition",
|
||||
"attachment; filename=\"" +
|
||||
SanitizeFileName(file.NombreArchivo) +
|
||||
"\"");
|
||||
|
||||
using (file.Content)
|
||||
{
|
||||
file.Content.CopyTo(context.Response.OutputStream);
|
||||
}
|
||||
|
||||
context.ApplicationInstance.CompleteRequest();
|
||||
}
|
||||
|
||||
private static UserSessionModel GetCurrentUser()
|
||||
{
|
||||
return AppServices.UserContext != null &&
|
||||
AppServices.UserContext.IsAuthenticated()
|
||||
? AppServices.UserContext.GetCurrentUser()
|
||||
: null;
|
||||
}
|
||||
|
||||
private static bool TryReadInt(
|
||||
string value,
|
||||
out int result)
|
||||
{
|
||||
return int.TryParse(
|
||||
value,
|
||||
NumberStyles.Integer,
|
||||
CultureInfo.InvariantCulture,
|
||||
out result) &&
|
||||
result > 0;
|
||||
}
|
||||
|
||||
private static string SanitizeFileName(string fileName)
|
||||
{
|
||||
string value = Path.GetFileName(
|
||||
string.IsNullOrWhiteSpace(fileName)
|
||||
? "documento"
|
||||
: fileName);
|
||||
|
||||
return value
|
||||
.Replace("\"", string.Empty)
|
||||
.Replace("\r", string.Empty)
|
||||
.Replace("\n", string.Empty);
|
||||
}
|
||||
}
|
||||
}
|
||||
171
SIG.Web/App_Code/Models/Documentos/TramiteDocumentoModels.cs
Normal file
171
SIG.Web/App_Code/Models/Documentos/TramiteDocumentoModels.cs
Normal file
@@ -0,0 +1,171 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace SIG.Web.AppCode.Models.Documentos
|
||||
{
|
||||
public sealed class TramiteDocumentoSolicitudModel
|
||||
{
|
||||
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 Nota { get; set; }
|
||||
public bool? EsAprobado { get; set; }
|
||||
public DateTime? FechaRevision { get; set; }
|
||||
public bool EsFinalSolicitud { get; set; }
|
||||
public bool TieneArchivo { get; set; }
|
||||
public bool PuedeActualizarArchivo { get; set; }
|
||||
public bool PuedeRevisar { get; set; }
|
||||
public bool EsGis { get; set; }
|
||||
public bool PuedeAdministrarGis { get; set; }
|
||||
public string EstadoDocumento { get; set; }
|
||||
}
|
||||
|
||||
public sealed class TramiteDocumentoUploadContextModel
|
||||
{
|
||||
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 ExtensionesPermitidas { get; set; }
|
||||
public int? TamanoMaximoMb { get; set; }
|
||||
public bool EsFinalSolicitud { get; set; }
|
||||
public string NombreArchivoAnterior { get; set; }
|
||||
public string NombreArchivoFisicoAnterior { get; set; }
|
||||
public string RutaArchivoAnterior { get; set; }
|
||||
public string ContentTypeAnterior { get; set; }
|
||||
public long? TamanoBytesAnterior { get; set; }
|
||||
public string ComentarioClienteAnterior { get; set; }
|
||||
public string ComentarioAdministrativoAnterior { get; set; }
|
||||
public bool? EsAprobadoAnterior { get; set; }
|
||||
public int? CveUsuarioRevisaAnterior { get; set; }
|
||||
public DateTime? FechaRevisionAnterior { get; set; }
|
||||
}
|
||||
|
||||
public sealed class TramiteDocumentoSaveResultModel
|
||||
{
|
||||
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 NombreArchivoFisico { get; set; }
|
||||
public string RutaArchivo { get; set; }
|
||||
public string ContentType { get; set; }
|
||||
public long? TamanoBytes { get; set; }
|
||||
public string ComentarioCliente { get; set; }
|
||||
public string ComentarioAdministrativo { get; set; }
|
||||
public bool? EsAprobado { get; set; }
|
||||
public int? CveUsuarioRevisa { get; set; }
|
||||
public DateTime? FechaRevision { get; set; }
|
||||
public bool EsNuevo { get; set; }
|
||||
public string NombreArchivoAnterior { get; set; }
|
||||
public string NombreArchivoFisicoAnterior { get; set; }
|
||||
public string RutaArchivoAnterior { get; set; }
|
||||
public string ContentTypeAnterior { get; set; }
|
||||
public long? TamanoBytesAnterior { get; set; }
|
||||
public string ComentarioClienteAnterior { get; set; }
|
||||
public string ComentarioAdministrativoAnterior { get; set; }
|
||||
public bool? EsAprobadoAnterior { get; set; }
|
||||
public int? CveUsuarioRevisaAnterior { get; set; }
|
||||
public DateTime? FechaRevisionAnterior { get; set; }
|
||||
}
|
||||
|
||||
public sealed class TramiteDocumentoReviewResultModel
|
||||
{
|
||||
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 bool? EsAprobadoAnterior { get; set; }
|
||||
public string ComentarioAdministrativoAnterior { get; set; }
|
||||
public int? CveUsuarioRevisaAnterior { get; set; }
|
||||
public DateTime? FechaRevisionAnterior { get; set; }
|
||||
public bool? EsAprobado { get; set; }
|
||||
public string ComentarioAdministrativo { get; set; }
|
||||
public int? CveUsuarioRevisa { get; set; }
|
||||
public DateTime? FechaRevision { get; set; }
|
||||
public bool HuboCambio { get; set; }
|
||||
}
|
||||
|
||||
public sealed class TramiteDocumentoDeleteResultModel
|
||||
{
|
||||
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 NombreArchivoFisico { get; set; }
|
||||
public string RutaArchivo { get; set; }
|
||||
public string ContentType { get; set; }
|
||||
public long? TamanoBytes { get; set; }
|
||||
}
|
||||
|
||||
public sealed class TramiteDocumentoDownloadContextModel
|
||||
{
|
||||
public int CveDocumentoSolicitud { get; set; }
|
||||
public int CveSolicitud { get; set; }
|
||||
public int CveCliente { get; set; }
|
||||
public int CveFraccionamiento { get; set; }
|
||||
public int CveFraccionamientoEtapa { get; set; }
|
||||
public string NombreArchivo { get; set; }
|
||||
public string NombreArchivoFisico { get; set; }
|
||||
public string RutaArchivo { get; set; }
|
||||
public string ContentType { get; set; }
|
||||
}
|
||||
|
||||
public sealed class TramiteDocumentoFileModel
|
||||
{
|
||||
public string NombreArchivo { get; set; }
|
||||
public string ContentType { get; set; }
|
||||
public Stream Content { get; set; }
|
||||
}
|
||||
|
||||
public sealed class TramiteDocumentoPreparedFile
|
||||
{
|
||||
public string NombreArchivoFisico { get; set; }
|
||||
public string RutaArchivo { get; set; }
|
||||
public string TemporaryPath { get; set; }
|
||||
public string FinalPath { get; set; }
|
||||
public string BackupPath { get; set; }
|
||||
public string PreviousPath { get; set; }
|
||||
public bool Promoted { get; set; }
|
||||
}
|
||||
}
|
||||
53
SIG.Web/App_Code/Models/Tramites/TramiteSolicitudModels.cs
Normal file
53
SIG.Web/App_Code/Models/Tramites/TramiteSolicitudModels.cs
Normal file
@@ -0,0 +1,53 @@
|
||||
using System;
|
||||
|
||||
namespace SIG.Web.AppCode.Models.Tramites
|
||||
{
|
||||
public sealed class TramiteSolicitudModel
|
||||
{
|
||||
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 CveEstatusSolicitud { get; set; }
|
||||
public string EstatusSolicitud { get; set; }
|
||||
public bool EsEstatusCliente { get; set; }
|
||||
public DateTime? FechaInicio { get; set; }
|
||||
public DateTime? FechaAutorizacion { get; set; }
|
||||
public bool PuedeCambiarEstatus { get; set; }
|
||||
public bool EsAutorizada { get; set; }
|
||||
}
|
||||
|
||||
public sealed class TramiteSolicitudEstatusOptionModel
|
||||
{
|
||||
public int CveEstatusSolicitud { get; set; }
|
||||
public string Codigo { get; set; }
|
||||
public string EstatusSolicitud { get; set; }
|
||||
public int Orden { get; set; }
|
||||
public bool EsFinal { get; set; }
|
||||
public bool EsCliente { get; set; }
|
||||
}
|
||||
|
||||
public sealed class TramiteSolicitudStatusChangeModel
|
||||
{
|
||||
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 CveEstatusSolicitudAnterior { get; set; }
|
||||
public string EstatusSolicitudAnterior { get; set; }
|
||||
public bool EsClienteAnterior { get; set; }
|
||||
public int CveEstatusSolicitud { get; set; }
|
||||
public string EstatusSolicitud { get; set; }
|
||||
public bool EsCliente { get; set; }
|
||||
public DateTime? FechaAutorizacion { get; set; }
|
||||
public bool HuboCambio { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,198 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using SIG.Web.AppCode.Contracts.Database;
|
||||
using SIG.Web.AppCode.Contracts.Documentos;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Documentos;
|
||||
using SIG.Web.AppCode.Repositories.Database;
|
||||
|
||||
namespace SIG.Web.AppCode.Repositories.Documentos
|
||||
{
|
||||
public sealed class TramiteDocumentoRepository
|
||||
: RepositoryBase, ITramiteDocumentoRepository
|
||||
{
|
||||
public TramiteDocumentoRepository(IDbExecutor db)
|
||||
: base(db)
|
||||
{
|
||||
}
|
||||
|
||||
public DbResult<List<TramiteDocumentoSolicitudModel>> ListForDevelopment(
|
||||
int developmentId,
|
||||
int? stageId,
|
||||
int? procedureTypeId,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
return QueryList<TramiteDocumentoSolicitudModel>(
|
||||
"dbo.PA_Tramites_DocumentoSolicitudFraccionamientoList",
|
||||
executingUser,
|
||||
domainName,
|
||||
command =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(
|
||||
command,
|
||||
"@CveFraccionamiento",
|
||||
developmentId,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
command,
|
||||
"@CveFraccionamientoEtapa",
|
||||
stageId,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
command,
|
||||
"@CveTipoTramite",
|
||||
procedureTypeId,
|
||||
DbType.Int32);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<TramiteDocumentoUploadContextModel> GetUploadContext(
|
||||
int developmentId,
|
||||
int requestId,
|
||||
int documentTypeId,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
return QueryOne<TramiteDocumentoUploadContextModel>(
|
||||
"dbo.PA_Tramites_DocumentoSolicitudUploadContextGet",
|
||||
executingUser,
|
||||
domainName,
|
||||
command =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(
|
||||
command,
|
||||
"@CveFraccionamiento",
|
||||
developmentId,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
command,
|
||||
"@CveSolicitud",
|
||||
requestId,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
command,
|
||||
"@CveTipoDocumento",
|
||||
documentTypeId,
|
||||
DbType.Int32);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<TramiteDocumentoUploadContextModel> GetStageUploadContext(
|
||||
int stageId,
|
||||
int procedureTypeId,
|
||||
int documentTypeId,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
return QueryOne<TramiteDocumentoUploadContextModel>(
|
||||
"dbo.PA_Tramites_DocumentoSolicitudStageContextGet",
|
||||
executingUser,
|
||||
domainName,
|
||||
command =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(
|
||||
command,
|
||||
"@CveFraccionamientoEtapa",
|
||||
stageId,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
command,
|
||||
"@CveTipoTramite",
|
||||
procedureTypeId,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
command,
|
||||
"@CveTipoDocumento",
|
||||
documentTypeId,
|
||||
DbType.Int32);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<TramiteDocumentoSaveResultModel> SaveUpload(
|
||||
int developmentId,
|
||||
int requestId,
|
||||
int documentTypeId,
|
||||
string originalFileName,
|
||||
string physicalFileName,
|
||||
string relativePath,
|
||||
string contentType,
|
||||
long contentLength,
|
||||
string clientComment,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
return QueryOne<TramiteDocumentoSaveResultModel>(
|
||||
"dbo.PA_Tramites_DocumentoSolicitudSave",
|
||||
executingUser,
|
||||
domainName,
|
||||
command =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(command, "@CveFraccionamiento", developmentId, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(command, "@CveSolicitud", requestId, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(command, "@CveTipoDocumento", documentTypeId, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(command, "@NombreArchivo", originalFileName, DbType.String);
|
||||
StoredProcedureCommand.AddInput(command, "@NombreArchivoFisico", physicalFileName, DbType.String);
|
||||
StoredProcedureCommand.AddInput(command, "@RutaArchivo", relativePath, DbType.String);
|
||||
StoredProcedureCommand.AddInput(command, "@ContentType", contentType, DbType.String);
|
||||
StoredProcedureCommand.AddInput(command, "@TamanoBytes", contentLength, DbType.Int64);
|
||||
StoredProcedureCommand.AddInput(command, "@ComentarioCliente", clientComment, DbType.String);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<TramiteDocumentoReviewResultModel> Review(
|
||||
int developmentId,
|
||||
int documentRequestId,
|
||||
bool approved,
|
||||
string note,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
return QueryOne<TramiteDocumentoReviewResultModel>(
|
||||
"dbo.PA_Tramites_DocumentoSolicitudReview",
|
||||
executingUser,
|
||||
domainName,
|
||||
command =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(command, "@CveFraccionamiento", developmentId, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(command, "@CveDocumentoSolicitud", documentRequestId, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(command, "@Aprobar", approved, DbType.Boolean);
|
||||
StoredProcedureCommand.AddInput(command, "@Nota", note, DbType.String);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<TramiteDocumentoDownloadContextModel> GetDownloadContext(
|
||||
int developmentId,
|
||||
int documentRequestId,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
return QueryOne<TramiteDocumentoDownloadContextModel>(
|
||||
"dbo.PA_Tramites_DocumentoSolicitudDownloadGet",
|
||||
executingUser,
|
||||
domainName,
|
||||
command =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(command, "@CveFraccionamiento", developmentId, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(command, "@CveDocumentoSolicitud", documentRequestId, DbType.Int32);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<TramiteDocumentoDeleteResultModel> Delete(
|
||||
int developmentId,
|
||||
int documentRequestId,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
return QueryOne<TramiteDocumentoDeleteResultModel>(
|
||||
"dbo.PA_Tramites_DocumentoSolicitudDelete",
|
||||
executingUser,
|
||||
domainName,
|
||||
command =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(command, "@CveFraccionamiento", developmentId, DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(command, "@CveDocumentoSolicitud", documentRequestId, DbType.Int32);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,9 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using SIG.Web.AppCode.Contracts.Database;
|
||||
using SIG.Web.AppCode.Contracts.Tramites;
|
||||
using SIG.Web.AppCode.Models.Common;
|
||||
using SIG.Web.AppCode.Models.Tramites;
|
||||
using SIG.Web.AppCode.Repositories.Database;
|
||||
|
||||
namespace SIG.Web.AppCode.Repositories.Tramites
|
||||
@@ -39,5 +41,94 @@ namespace SIG.Web.AppCode.Repositories.Tramites
|
||||
DbType.Int32);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<List<TramiteSolicitudModel>> ListForDevelopment(
|
||||
int developmentId,
|
||||
int? stageId,
|
||||
int? procedureTypeId,
|
||||
int? statusId,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
return QueryList<TramiteSolicitudModel>(
|
||||
"dbo.PA_Tramites_SolicitudFraccionamientoList",
|
||||
executingUser,
|
||||
domainName,
|
||||
command =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(
|
||||
command,
|
||||
"@CveFraccionamiento",
|
||||
developmentId,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
command,
|
||||
"@CveFraccionamientoEtapa",
|
||||
stageId,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
command,
|
||||
"@CveTipoTramite",
|
||||
procedureTypeId,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
command,
|
||||
"@CveEstatusSolicitud",
|
||||
statusId,
|
||||
DbType.Int32);
|
||||
});
|
||||
}
|
||||
|
||||
public DbResult<TramiteSolicitudModel> Get(
|
||||
int requestId,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
return QueryOne<TramiteSolicitudModel>(
|
||||
"dbo.PA_Tramites_SolicitudGet",
|
||||
executingUser,
|
||||
domainName,
|
||||
command => StoredProcedureCommand.AddInput(
|
||||
command,
|
||||
"@CveSolicitud",
|
||||
requestId,
|
||||
DbType.Int32));
|
||||
}
|
||||
|
||||
public DbResult<List<TramiteSolicitudEstatusOptionModel>> ListStatusOptions(
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
return QueryList<TramiteSolicitudEstatusOptionModel>(
|
||||
"dbo.PA_Tramites_EstatusSolicitudOptionList",
|
||||
executingUser,
|
||||
domainName,
|
||||
null);
|
||||
}
|
||||
|
||||
public DbResult<TramiteSolicitudStatusChangeModel> ChangeStatus(
|
||||
int requestId,
|
||||
int statusId,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
return QueryOne<TramiteSolicitudStatusChangeModel>(
|
||||
"dbo.PA_Tramites_SolicitudEstatusUpdate",
|
||||
executingUser,
|
||||
domainName,
|
||||
command =>
|
||||
{
|
||||
StoredProcedureCommand.AddInput(
|
||||
command,
|
||||
"@CveSolicitud",
|
||||
requestId,
|
||||
DbType.Int32);
|
||||
StoredProcedureCommand.AddInput(
|
||||
command,
|
||||
"@CveEstatusSolicitud",
|
||||
statusId,
|
||||
DbType.Int32);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,210 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Bitacora;
|
||||
using SIG.Web.AppCode.Models.Documentos;
|
||||
|
||||
namespace SIG.Web.AppCode.Services.Documentos
|
||||
{
|
||||
internal static class TramiteDocumentoBitacoraFactory
|
||||
{
|
||||
public static BitacoraEventoModel Upload(
|
||||
TramiteDocumentoSaveResultModel change)
|
||||
{
|
||||
BitacoraTipoMovimiento movement = change.EsNuevo
|
||||
? BitacoraTipoMovimiento.Agregado
|
||||
: BitacoraTipoMovimiento.Editado;
|
||||
|
||||
var auditEvent = BaseEvent(
|
||||
change.CveDocumentoSolicitud,
|
||||
change.CveSolicitud,
|
||||
change.CveCliente,
|
||||
change.CveFraccionamiento,
|
||||
change.CveFraccionamientoEtapa,
|
||||
movement,
|
||||
BuildUploadDescription(change));
|
||||
|
||||
auditEvent.DiscriminarCamposSinCambios = false;
|
||||
auditEvent.Campos = new List<BitacoraCampoEventoModel>
|
||||
{
|
||||
Field("CveSolicitud", change.EsNuevo ? null : (object)change.CveSolicitud, change.CveSolicitud),
|
||||
Field("CveTipoDocumento", change.EsNuevo ? null : (object)change.CveTipoDocumento, change.CveTipoDocumento),
|
||||
Field("NombreArchivo", change.NombreArchivoAnterior, change.NombreArchivo),
|
||||
Field("NombreArchivoFisico", change.NombreArchivoFisicoAnterior, change.NombreArchivoFisico),
|
||||
Field("RutaArchivo", change.RutaArchivoAnterior, change.RutaArchivo),
|
||||
Field("ContentType", change.ContentTypeAnterior, change.ContentType),
|
||||
Field("TamanoBytes", change.TamanoBytesAnterior, change.TamanoBytes),
|
||||
Field("ComentarioCliente", change.ComentarioClienteAnterior, change.ComentarioCliente),
|
||||
Field("ComentarioAdministrativo", change.ComentarioAdministrativoAnterior, change.ComentarioAdministrativo),
|
||||
Field("EsAprobado", change.EsAprobadoAnterior, change.EsAprobado),
|
||||
Field("CveUsuarioRevisa", change.CveUsuarioRevisaAnterior, change.CveUsuarioRevisa),
|
||||
Field("FechaRevision", change.FechaRevisionAnterior, change.FechaRevision)
|
||||
};
|
||||
|
||||
return auditEvent;
|
||||
}
|
||||
|
||||
public static BitacoraEventoModel Review(
|
||||
TramiteDocumentoReviewResultModel change)
|
||||
{
|
||||
string action = change.EsAprobado == true
|
||||
? "aprobó"
|
||||
: "rechazó";
|
||||
|
||||
var auditEvent = BaseEvent(
|
||||
change.CveDocumentoSolicitud,
|
||||
change.CveSolicitud,
|
||||
change.CveCliente,
|
||||
change.CveFraccionamiento,
|
||||
change.CveFraccionamientoEtapa,
|
||||
BitacoraTipoMovimiento.Editado,
|
||||
"Se " + action + " el documento " +
|
||||
change.TipoDocumento + " del trámite " +
|
||||
change.TipoTramite + " de la etapa " +
|
||||
change.Etapa + ".");
|
||||
|
||||
auditEvent.Campos = new List<BitacoraCampoEventoModel>
|
||||
{
|
||||
Field("EsAprobado", change.EsAprobadoAnterior, change.EsAprobado),
|
||||
Field("ComentarioAdministrativo", change.ComentarioAdministrativoAnterior, change.ComentarioAdministrativo),
|
||||
Field("CveUsuarioRevisa", change.CveUsuarioRevisaAnterior, change.CveUsuarioRevisa),
|
||||
Field("FechaRevision", change.FechaRevisionAnterior, change.FechaRevision)
|
||||
};
|
||||
|
||||
if (change.EsAprobado == true && change.FechaRevision.HasValue)
|
||||
{
|
||||
auditEvent.CveUsuarioAutoriza = change.CveUsuarioRevisa;
|
||||
auditEvent.FechaAutorizacion = change.FechaRevision;
|
||||
}
|
||||
|
||||
return auditEvent;
|
||||
}
|
||||
|
||||
public static BitacoraEventoModel Delete(
|
||||
TramiteDocumentoDeleteResultModel change)
|
||||
{
|
||||
return BaseEvent(
|
||||
change.CveDocumentoSolicitud,
|
||||
change.CveSolicitud,
|
||||
change.CveCliente,
|
||||
change.CveFraccionamiento,
|
||||
change.CveFraccionamientoEtapa,
|
||||
BitacoraTipoMovimiento.Eliminado,
|
||||
"Se eliminó el registro del documento " +
|
||||
change.TipoDocumento + " del trámite " +
|
||||
change.TipoTramite + " de la etapa " +
|
||||
change.Etapa + ".");
|
||||
}
|
||||
|
||||
private static string BuildUploadDescription(
|
||||
TramiteDocumentoSaveResultModel change)
|
||||
{
|
||||
if (change.EsNuevo)
|
||||
{
|
||||
return "Se agregó el documento " + change.TipoDocumento +
|
||||
" al trámite " + change.TipoTramite +
|
||||
" de la etapa " + change.Etapa + ".";
|
||||
}
|
||||
|
||||
bool teniaRevision =
|
||||
change.EsAprobadoAnterior.HasValue ||
|
||||
change.FechaRevisionAnterior.HasValue ||
|
||||
!string.IsNullOrWhiteSpace(
|
||||
change.ComentarioAdministrativoAnterior);
|
||||
|
||||
return "Se actualizó el documento " + change.TipoDocumento +
|
||||
" del trámite " + change.TipoTramite +
|
||||
" de la etapa " + change.Etapa +
|
||||
(teniaRevision
|
||||
? ". La revisión anterior se eliminó y el documento quedó pendiente nuevamente."
|
||||
: ". El documento quedó pendiente de revisión.");
|
||||
}
|
||||
|
||||
private static BitacoraEventoModel BaseEvent(
|
||||
int documentRequestId,
|
||||
int requestId,
|
||||
int clientId,
|
||||
int developmentId,
|
||||
int stageId,
|
||||
BitacoraTipoMovimiento movement,
|
||||
string description)
|
||||
{
|
||||
var auditEvent = new BitacoraEventoModel
|
||||
{
|
||||
NombreTablaSQL = "Tra_DocumentosSolicitud",
|
||||
TipoMovimiento = movement,
|
||||
LlaveRegistro = Convert.ToString(documentRequestId),
|
||||
DescripcionMovimiento = description,
|
||||
DiscriminarCamposSinCambios = true
|
||||
};
|
||||
|
||||
auditEvent.Relaciones.Add(
|
||||
Relation(
|
||||
BitacoraTipoRelacion.Directa,
|
||||
"Tra_DocumentosSolicitud",
|
||||
"CveDocumentoSolicitud",
|
||||
documentRequestId,
|
||||
"Documento de la solicitud."));
|
||||
auditEvent.Relaciones.Add(
|
||||
Relation(
|
||||
BitacoraTipoRelacion.Relacionada,
|
||||
"Tra_Solicitudes",
|
||||
"CveSolicitud",
|
||||
requestId,
|
||||
"Solicitud del documento."));
|
||||
auditEvent.Relaciones.Add(
|
||||
Relation(
|
||||
BitacoraTipoRelacion.Relacionada,
|
||||
"Clientes",
|
||||
"CveCliente",
|
||||
clientId,
|
||||
"Cliente propietario de la solicitud."));
|
||||
auditEvent.Relaciones.Add(
|
||||
Relation(
|
||||
BitacoraTipoRelacion.Relacionada,
|
||||
"Fraccionamientos",
|
||||
"CveFraccionamiento",
|
||||
developmentId,
|
||||
"Fraccionamiento de la solicitud."));
|
||||
auditEvent.Relaciones.Add(
|
||||
Relation(
|
||||
BitacoraTipoRelacion.Relacionada,
|
||||
"FraccionamientosEtapas",
|
||||
"CveFraccionamientoEtapa",
|
||||
stageId,
|
||||
"Etapa de la solicitud."));
|
||||
|
||||
return auditEvent;
|
||||
}
|
||||
|
||||
private static BitacoraCampoEventoModel Field(
|
||||
string name,
|
||||
object previous,
|
||||
object current)
|
||||
{
|
||||
return new BitacoraCampoEventoModel
|
||||
{
|
||||
NombreCampoSQL = name,
|
||||
ValorAnterior = previous,
|
||||
ValorNuevo = current
|
||||
};
|
||||
}
|
||||
|
||||
private static BitacoraRelacionEventoModel Relation(
|
||||
BitacoraTipoRelacion relationType,
|
||||
string tableName,
|
||||
string fieldName,
|
||||
object value,
|
||||
string description)
|
||||
{
|
||||
return new BitacoraRelacionEventoModel
|
||||
{
|
||||
TipoRelacion = relationType,
|
||||
NombreTablaSQL = tableName,
|
||||
NombreCampoSQL = fieldName,
|
||||
Valor = value,
|
||||
VisibleDesarrollador = true,
|
||||
DescripcionRelacion = description
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,277 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Web.Hosting;
|
||||
using SIG.Web.AppCode.Contracts.Documentos;
|
||||
using SIG.Web.AppCode.Models.Documentos;
|
||||
|
||||
namespace SIG.Web.AppCode.Services.Documentos
|
||||
{
|
||||
public sealed class TramiteDocumentoFileStore
|
||||
: ITramiteDocumentoFileStore
|
||||
{
|
||||
public TramiteDocumentoPreparedFile Prepare(
|
||||
TramiteDocumentoUploadContextModel context,
|
||||
Stream source,
|
||||
string previousRelativePath)
|
||||
{
|
||||
if (context == null)
|
||||
{
|
||||
throw new ArgumentNullException("context");
|
||||
}
|
||||
|
||||
if (source == null)
|
||||
{
|
||||
throw new ArgumentNullException("source");
|
||||
}
|
||||
|
||||
string root = GetDocumentsRoot();
|
||||
string relativeDirectory = Path.Combine(
|
||||
"Clientes",
|
||||
context.CveCliente.ToString(CultureInfo.InvariantCulture),
|
||||
"Solicitudes",
|
||||
context.CveSolicitud.ToString(CultureInfo.InvariantCulture));
|
||||
string directory = Path.Combine(root, relativeDirectory);
|
||||
|
||||
Directory.CreateDirectory(directory);
|
||||
|
||||
string physicalFileName = string.Format(
|
||||
CultureInfo.InvariantCulture,
|
||||
"doc-{0}-{1}.bin",
|
||||
context.CveSolicitud,
|
||||
context.CveTipoDocumento);
|
||||
string relativePath = Path.Combine(
|
||||
relativeDirectory,
|
||||
physicalFileName);
|
||||
string finalPath = SafeResolve(relativePath);
|
||||
string temporaryPath = Path.Combine(
|
||||
directory,
|
||||
"." + physicalFileName + "." +
|
||||
Guid.NewGuid().ToString("N") + ".tmp");
|
||||
|
||||
if (source.CanSeek)
|
||||
{
|
||||
source.Position = 0;
|
||||
}
|
||||
|
||||
using (var target = new FileStream(
|
||||
temporaryPath,
|
||||
FileMode.CreateNew,
|
||||
FileAccess.Write,
|
||||
FileShare.None))
|
||||
{
|
||||
source.CopyTo(target);
|
||||
target.Flush();
|
||||
}
|
||||
|
||||
return new TramiteDocumentoPreparedFile
|
||||
{
|
||||
NombreArchivoFisico = physicalFileName,
|
||||
RutaArchivo = relativePath.Replace('\\', '/'),
|
||||
TemporaryPath = temporaryPath,
|
||||
FinalPath = finalPath,
|
||||
PreviousPath = ResolveExistingPath(previousRelativePath),
|
||||
Promoted = false
|
||||
};
|
||||
}
|
||||
|
||||
public void Promote(TramiteDocumentoPreparedFile preparedFile)
|
||||
{
|
||||
ValidatePrepared(preparedFile);
|
||||
|
||||
if (!File.Exists(preparedFile.TemporaryPath))
|
||||
{
|
||||
throw new FileNotFoundException(
|
||||
"No se encontró el archivo temporal preparado.",
|
||||
preparedFile.TemporaryPath);
|
||||
}
|
||||
|
||||
string finalDirectory = Path.GetDirectoryName(
|
||||
preparedFile.FinalPath);
|
||||
Directory.CreateDirectory(finalDirectory);
|
||||
|
||||
if (File.Exists(preparedFile.FinalPath))
|
||||
{
|
||||
preparedFile.BackupPath = preparedFile.FinalPath + "." +
|
||||
Guid.NewGuid().ToString("N") + ".bak";
|
||||
File.Move(
|
||||
preparedFile.FinalPath,
|
||||
preparedFile.BackupPath);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
File.Move(
|
||||
preparedFile.TemporaryPath,
|
||||
preparedFile.FinalPath);
|
||||
preparedFile.Promoted = true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(preparedFile.BackupPath) &&
|
||||
File.Exists(preparedFile.BackupPath) &&
|
||||
!File.Exists(preparedFile.FinalPath))
|
||||
{
|
||||
File.Move(
|
||||
preparedFile.BackupPath,
|
||||
preparedFile.FinalPath);
|
||||
}
|
||||
|
||||
preparedFile.BackupPath = null;
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public void Rollback(TramiteDocumentoPreparedFile preparedFile)
|
||||
{
|
||||
if (preparedFile == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (preparedFile.Promoted &&
|
||||
!string.IsNullOrWhiteSpace(preparedFile.FinalPath) &&
|
||||
File.Exists(preparedFile.FinalPath))
|
||||
{
|
||||
File.Delete(preparedFile.FinalPath);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(preparedFile.BackupPath) &&
|
||||
File.Exists(preparedFile.BackupPath))
|
||||
{
|
||||
File.Move(
|
||||
preparedFile.BackupPath,
|
||||
preparedFile.FinalPath);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(preparedFile.TemporaryPath) &&
|
||||
File.Exists(preparedFile.TemporaryPath))
|
||||
{
|
||||
File.Delete(preparedFile.TemporaryPath);
|
||||
}
|
||||
|
||||
preparedFile.Promoted = false;
|
||||
}
|
||||
|
||||
public void Complete(TramiteDocumentoPreparedFile preparedFile)
|
||||
{
|
||||
if (preparedFile == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(preparedFile.BackupPath) &&
|
||||
File.Exists(preparedFile.BackupPath))
|
||||
{
|
||||
File.Delete(preparedFile.BackupPath);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(preparedFile.TemporaryPath) &&
|
||||
File.Exists(preparedFile.TemporaryPath))
|
||||
{
|
||||
File.Delete(preparedFile.TemporaryPath);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(preparedFile.PreviousPath) &&
|
||||
!PathsEqual(preparedFile.PreviousPath, preparedFile.FinalPath) &&
|
||||
File.Exists(preparedFile.PreviousPath))
|
||||
{
|
||||
File.Delete(preparedFile.PreviousPath);
|
||||
}
|
||||
}
|
||||
|
||||
public Stream OpenRead(string relativePath)
|
||||
{
|
||||
string path = SafeResolve(relativePath);
|
||||
|
||||
return new FileStream(
|
||||
path,
|
||||
FileMode.Open,
|
||||
FileAccess.Read,
|
||||
FileShare.Read);
|
||||
}
|
||||
|
||||
private static string GetDocumentsRoot()
|
||||
{
|
||||
string root = HostingEnvironment.MapPath("~/Documentos/");
|
||||
|
||||
if (string.IsNullOrWhiteSpace(root))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"No fue posible resolver el directorio Documentos.");
|
||||
}
|
||||
|
||||
Directory.CreateDirectory(root);
|
||||
return Path.GetFullPath(root);
|
||||
}
|
||||
|
||||
private static string SafeResolve(string storedPath)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(storedPath))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"La ruta del documento está vacía.");
|
||||
}
|
||||
|
||||
string root = GetDocumentsRoot();
|
||||
string path = Path.IsPathRooted(storedPath)
|
||||
? Path.GetFullPath(storedPath)
|
||||
: Path.GetFullPath(
|
||||
Path.Combine(
|
||||
root,
|
||||
storedPath.Replace('/', Path.DirectorySeparatorChar)));
|
||||
|
||||
string rootPrefix = root.TrimEnd(
|
||||
Path.DirectorySeparatorChar,
|
||||
Path.AltDirectorySeparatorChar) +
|
||||
Path.DirectorySeparatorChar;
|
||||
|
||||
if (!path.StartsWith(
|
||||
rootPrefix,
|
||||
StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"La ruta del documento está fuera del directorio permitido.");
|
||||
}
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
private static string ResolveExistingPath(string storedPath)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(storedPath))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
return SafeResolve(storedPath);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static bool PathsEqual(string left, string right)
|
||||
{
|
||||
return string.Equals(
|
||||
Path.GetFullPath(left ?? string.Empty),
|
||||
Path.GetFullPath(right ?? string.Empty),
|
||||
StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
private static void ValidatePrepared(
|
||||
TramiteDocumentoPreparedFile preparedFile)
|
||||
{
|
||||
if (preparedFile == null ||
|
||||
string.IsNullOrWhiteSpace(preparedFile.TemporaryPath) ||
|
||||
string.IsNullOrWhiteSpace(preparedFile.FinalPath))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"El archivo preparado no contiene rutas válidas.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
577
SIG.Web/App_Code/Services/Documentos/TramiteDocumentoService.cs
Normal file
577
SIG.Web/App_Code/Services/Documentos/TramiteDocumentoService.cs
Normal file
@@ -0,0 +1,577 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SIG.Web.AppCode.Contracts.Bitacora;
|
||||
using SIG.Web.AppCode.Contracts.Documentos;
|
||||
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;
|
||||
|
||||
namespace SIG.Web.AppCode.Services.Documentos
|
||||
{
|
||||
public sealed class TramiteDocumentoService
|
||||
: ITramiteDocumentoService
|
||||
{
|
||||
private const int GisDocumentTypeId = 2;
|
||||
|
||||
private readonly ITramiteDocumentoRepository _repository;
|
||||
private readonly ITramiteDocumentoFileStore _fileStore;
|
||||
private readonly IBitacoraService _bitacoraService;
|
||||
|
||||
public TramiteDocumentoService(
|
||||
ITramiteDocumentoRepository repository,
|
||||
ITramiteDocumentoFileStore fileStore,
|
||||
IBitacoraService bitacoraService)
|
||||
{
|
||||
if (repository == null)
|
||||
{
|
||||
throw new ArgumentNullException("repository");
|
||||
}
|
||||
|
||||
if (fileStore == null)
|
||||
{
|
||||
throw new ArgumentNullException("fileStore");
|
||||
}
|
||||
|
||||
if (bitacoraService == null)
|
||||
{
|
||||
throw new ArgumentNullException("bitacoraService");
|
||||
}
|
||||
|
||||
_repository = repository;
|
||||
_fileStore = fileStore;
|
||||
_bitacoraService = bitacoraService;
|
||||
}
|
||||
|
||||
public DbResult<List<TramiteDocumentoSolicitudModel>> ListForDevelopment(
|
||||
int developmentId,
|
||||
int? stageId,
|
||||
int? procedureTypeId,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
if (developmentId <= 0)
|
||||
{
|
||||
return Fail<List<TramiteDocumentoSolicitudModel>>(
|
||||
"Seleccione un fraccionamiento válido.");
|
||||
}
|
||||
|
||||
return _repository.ListForDevelopment(
|
||||
developmentId,
|
||||
NormalizeId(stageId),
|
||||
NormalizeId(procedureTypeId),
|
||||
executingUser,
|
||||
domainName);
|
||||
}
|
||||
|
||||
public DbResult<TramiteDocumentoUploadContextModel> GetUploadContext(
|
||||
int developmentId,
|
||||
int requestId,
|
||||
int documentTypeId,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
if (developmentId <= 0 || requestId <= 0 || documentTypeId <= 0)
|
||||
{
|
||||
return Fail<TramiteDocumentoUploadContextModel>(
|
||||
"Seleccione un documento válido.");
|
||||
}
|
||||
|
||||
if (documentTypeId == GisDocumentTypeId)
|
||||
{
|
||||
return Fail<TramiteDocumentoUploadContextModel>(
|
||||
"El archivo GIS se administra desde la opción Administrar GIS de la etapa.");
|
||||
}
|
||||
|
||||
return _repository.GetUploadContext(
|
||||
developmentId,
|
||||
requestId,
|
||||
documentTypeId,
|
||||
executingUser,
|
||||
domainName);
|
||||
}
|
||||
|
||||
public DbResult<TramiteDocumentoSaveResultModel> Upload(
|
||||
int developmentId,
|
||||
int requestId,
|
||||
int documentTypeId,
|
||||
string originalFileName,
|
||||
string contentType,
|
||||
Stream content,
|
||||
long contentLength,
|
||||
string clientComment,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
if (content == null || contentLength <= 0)
|
||||
{
|
||||
return Fail<TramiteDocumentoSaveResultModel>(
|
||||
"Seleccione un archivo válido.");
|
||||
}
|
||||
|
||||
DbResult<TramiteDocumentoUploadContextModel> contextResult =
|
||||
GetUploadContext(
|
||||
developmentId,
|
||||
requestId,
|
||||
documentTypeId,
|
||||
executingUser,
|
||||
domainName);
|
||||
|
||||
if (!contextResult.Success || contextResult.Data == null)
|
||||
{
|
||||
return CopyFailure<TramiteDocumentoUploadContextModel, TramiteDocumentoSaveResultModel>(
|
||||
contextResult,
|
||||
"No fue posible obtener el contexto del documento.");
|
||||
}
|
||||
|
||||
TramiteDocumentoUploadContextModel uploadContext =
|
||||
contextResult.Data;
|
||||
|
||||
string validation = ValidateFile(
|
||||
uploadContext,
|
||||
originalFileName,
|
||||
contentLength);
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(validation))
|
||||
{
|
||||
return Fail<TramiteDocumentoSaveResultModel>(validation);
|
||||
}
|
||||
|
||||
TramiteDocumentoPreparedFile preparedFile = null;
|
||||
|
||||
try
|
||||
{
|
||||
preparedFile = _fileStore.Prepare(
|
||||
uploadContext,
|
||||
content,
|
||||
uploadContext.RutaArchivoAnterior);
|
||||
|
||||
DbResult<TramiteDocumentoSaveResultModel> saveResult;
|
||||
|
||||
using (var transaction = new TransactionLogic())
|
||||
{
|
||||
saveResult = _repository.SaveUpload(
|
||||
developmentId,
|
||||
requestId,
|
||||
documentTypeId,
|
||||
Path.GetFileName(originalFileName),
|
||||
preparedFile.NombreArchivoFisico,
|
||||
preparedFile.RutaArchivo,
|
||||
NormalizeContentType(contentType),
|
||||
contentLength,
|
||||
TrimOrNull(clientComment),
|
||||
executingUser,
|
||||
domainName);
|
||||
|
||||
if (!saveResult.Success || saveResult.Data == null)
|
||||
{
|
||||
_fileStore.Rollback(preparedFile);
|
||||
return saveResult;
|
||||
}
|
||||
|
||||
DbResult<long> auditResult =
|
||||
_bitacoraService.Registrar(
|
||||
TramiteDocumentoBitacoraFactory.Upload(
|
||||
saveResult.Data));
|
||||
|
||||
if (!auditResult.Success)
|
||||
{
|
||||
_fileStore.Rollback(preparedFile);
|
||||
return DbResult<TramiteDocumentoSaveResultModel>.Fail(
|
||||
auditResult.UserMessage,
|
||||
auditResult.TechnicalMessage,
|
||||
auditResult.Exception);
|
||||
}
|
||||
|
||||
_fileStore.Promote(preparedFile);
|
||||
transaction.Commit();
|
||||
}
|
||||
|
||||
_fileStore.Complete(preparedFile);
|
||||
return saveResult;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
try
|
||||
{
|
||||
_fileStore.Rollback(preparedFile);
|
||||
}
|
||||
catch (Exception rollbackException)
|
||||
{
|
||||
ExceptionLogger.Log(
|
||||
rollbackException,
|
||||
"TramiteDocumentoService.Upload.Rollback",
|
||||
"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.";
|
||||
|
||||
ExceptionLogger.Log(
|
||||
ex,
|
||||
"TramiteDocumentoService.Upload",
|
||||
message);
|
||||
|
||||
return DbResult<TramiteDocumentoSaveResultModel>.Fail(
|
||||
message,
|
||||
ex.Message,
|
||||
ex);
|
||||
}
|
||||
}
|
||||
|
||||
public DbResult<TramiteDocumentoReviewResultModel> Review(
|
||||
int developmentId,
|
||||
int documentRequestId,
|
||||
bool approved,
|
||||
string note,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
if (developmentId <= 0 || documentRequestId <= 0)
|
||||
{
|
||||
return Fail<TramiteDocumentoReviewResultModel>(
|
||||
"Seleccione un documento válido.");
|
||||
}
|
||||
|
||||
note = TrimOrNull(note);
|
||||
|
||||
if (!approved && string.IsNullOrWhiteSpace(note))
|
||||
{
|
||||
return Fail<TramiteDocumentoReviewResultModel>(
|
||||
"Capture la nota o motivo del rechazo.");
|
||||
}
|
||||
|
||||
using (var transaction = new TransactionLogic())
|
||||
{
|
||||
DbResult<TramiteDocumentoReviewResultModel> result =
|
||||
_repository.Review(
|
||||
developmentId,
|
||||
documentRequestId,
|
||||
approved,
|
||||
note,
|
||||
executingUser,
|
||||
domainName);
|
||||
|
||||
if (!result.Success || result.Data == null)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
if (result.Data.HuboCambio)
|
||||
{
|
||||
DbResult<long> auditResult =
|
||||
_bitacoraService.Registrar(
|
||||
TramiteDocumentoBitacoraFactory.Review(
|
||||
result.Data));
|
||||
|
||||
if (!auditResult.Success)
|
||||
{
|
||||
return DbResult<TramiteDocumentoReviewResultModel>.Fail(
|
||||
auditResult.UserMessage,
|
||||
auditResult.TechnicalMessage,
|
||||
auditResult.Exception);
|
||||
}
|
||||
}
|
||||
|
||||
transaction.Commit();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
public DbResult<TramiteDocumentoFileModel> Open(
|
||||
int developmentId,
|
||||
int documentRequestId,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
DbResult<TramiteDocumentoDownloadContextModel> result =
|
||||
_repository.GetDownloadContext(
|
||||
developmentId,
|
||||
documentRequestId,
|
||||
executingUser,
|
||||
domainName);
|
||||
|
||||
if (!result.Success || result.Data == null)
|
||||
{
|
||||
return CopyFailure<TramiteDocumentoDownloadContextModel, TramiteDocumentoFileModel>(
|
||||
result,
|
||||
"No fue posible obtener el documento.");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
return DbResult<TramiteDocumentoFileModel>.Ok(
|
||||
new TramiteDocumentoFileModel
|
||||
{
|
||||
NombreArchivo = result.Data.NombreArchivo,
|
||||
ContentType = NormalizeContentType(
|
||||
result.Data.ContentType),
|
||||
Content = _fileStore.OpenRead(
|
||||
result.Data.RutaArchivo)
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
const string message =
|
||||
"No fue posible abrir el documento; favor de contactar a Sistemas.";
|
||||
ExceptionLogger.Log(
|
||||
ex,
|
||||
"TramiteDocumentoService.Open",
|
||||
message);
|
||||
return DbResult<TramiteDocumentoFileModel>.Fail(
|
||||
message,
|
||||
ex.Message,
|
||||
ex);
|
||||
}
|
||||
}
|
||||
|
||||
public DbResult<TramiteDocumentoSaveResultModel> RegisterExternalStageFile(
|
||||
int stageId,
|
||||
int procedureTypeId,
|
||||
int documentTypeId,
|
||||
string originalFileName,
|
||||
string physicalFileName,
|
||||
string relativePath,
|
||||
string contentType,
|
||||
long contentLength,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
DbResult<TramiteDocumentoUploadContextModel> contextResult =
|
||||
_repository.GetStageUploadContext(
|
||||
stageId,
|
||||
procedureTypeId,
|
||||
documentTypeId,
|
||||
executingUser,
|
||||
domainName);
|
||||
|
||||
if (!contextResult.Success || contextResult.Data == null)
|
||||
{
|
||||
return CopyFailure<TramiteDocumentoUploadContextModel, TramiteDocumentoSaveResultModel>(
|
||||
contextResult,
|
||||
"No fue posible obtener la solicitud asociada a la etapa.");
|
||||
}
|
||||
|
||||
TramiteDocumentoUploadContextModel uploadContext =
|
||||
contextResult.Data;
|
||||
|
||||
using (var transaction = new TransactionLogic())
|
||||
{
|
||||
DbResult<TramiteDocumentoSaveResultModel> result =
|
||||
_repository.SaveUpload(
|
||||
uploadContext.CveFraccionamiento,
|
||||
uploadContext.CveSolicitud,
|
||||
documentTypeId,
|
||||
Path.GetFileName(originalFileName),
|
||||
physicalFileName,
|
||||
relativePath,
|
||||
NormalizeContentType(contentType),
|
||||
contentLength,
|
||||
null,
|
||||
executingUser,
|
||||
domainName);
|
||||
|
||||
if (!result.Success || result.Data == null)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
DbResult<long> auditResult =
|
||||
_bitacoraService.Registrar(
|
||||
TramiteDocumentoBitacoraFactory.Upload(
|
||||
result.Data));
|
||||
|
||||
if (!auditResult.Success)
|
||||
{
|
||||
return DbResult<TramiteDocumentoSaveResultModel>.Fail(
|
||||
auditResult.UserMessage,
|
||||
auditResult.TechnicalMessage,
|
||||
auditResult.Exception);
|
||||
}
|
||||
|
||||
transaction.Commit();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
public DbResult<bool> RemoveExternalStageFile(
|
||||
int stageId,
|
||||
int procedureTypeId,
|
||||
int documentTypeId,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
DbResult<TramiteDocumentoUploadContextModel> contextResult =
|
||||
_repository.GetStageUploadContext(
|
||||
stageId,
|
||||
procedureTypeId,
|
||||
documentTypeId,
|
||||
executingUser,
|
||||
domainName);
|
||||
|
||||
if (!contextResult.Success || contextResult.Data == null)
|
||||
{
|
||||
return CopyFailure<TramiteDocumentoUploadContextModel, bool>(
|
||||
contextResult,
|
||||
"No fue posible obtener la solicitud asociada a la etapa.");
|
||||
}
|
||||
|
||||
if (contextResult.Data.CveDocumentoSolicitud <= 0)
|
||||
{
|
||||
return DbResult<bool>.Ok(true);
|
||||
}
|
||||
|
||||
using (var transaction = new TransactionLogic())
|
||||
{
|
||||
DbResult<TramiteDocumentoDeleteResultModel> deleteResult =
|
||||
_repository.Delete(
|
||||
contextResult.Data.CveFraccionamiento,
|
||||
contextResult.Data.CveDocumentoSolicitud,
|
||||
executingUser,
|
||||
domainName);
|
||||
|
||||
if (!deleteResult.Success || deleteResult.Data == null)
|
||||
{
|
||||
return DbResult<bool>.Fail(
|
||||
deleteResult.UserMessage,
|
||||
deleteResult.TechnicalMessage,
|
||||
deleteResult.Exception);
|
||||
}
|
||||
|
||||
DbResult<long> auditResult =
|
||||
_bitacoraService.Registrar(
|
||||
TramiteDocumentoBitacoraFactory.Delete(
|
||||
deleteResult.Data));
|
||||
|
||||
if (!auditResult.Success)
|
||||
{
|
||||
return DbResult<bool>.Fail(
|
||||
auditResult.UserMessage,
|
||||
auditResult.TechnicalMessage,
|
||||
auditResult.Exception);
|
||||
}
|
||||
|
||||
transaction.Commit();
|
||||
return DbResult<bool>.Ok(true);
|
||||
}
|
||||
}
|
||||
|
||||
private static string ValidateFile(
|
||||
TramiteDocumentoUploadContextModel context,
|
||||
string originalFileName,
|
||||
long contentLength)
|
||||
{
|
||||
string extension = Path.GetExtension(
|
||||
originalFileName ?? string.Empty);
|
||||
|
||||
if (string.IsNullOrWhiteSpace(extension))
|
||||
{
|
||||
return "El archivo seleccionado no tiene una extensión válida.";
|
||||
}
|
||||
|
||||
if (!IsExtensionAllowed(
|
||||
extension,
|
||||
context.ExtensionesPermitidas))
|
||||
{
|
||||
return string.IsNullOrWhiteSpace(
|
||||
context.ExtensionesPermitidas)
|
||||
? "La extensión del archivo no está permitida."
|
||||
: "La extensión del archivo no está permitida. Use: " +
|
||||
context.ExtensionesPermitidas + ".";
|
||||
}
|
||||
|
||||
if (context.TamanoMaximoMb.HasValue &&
|
||||
context.TamanoMaximoMb.Value > 0)
|
||||
{
|
||||
long maxBytes =
|
||||
(long)context.TamanoMaximoMb.Value *
|
||||
1024L * 1024L;
|
||||
|
||||
if (contentLength > maxBytes)
|
||||
{
|
||||
return "El archivo no puede exceder " +
|
||||
context.TamanoMaximoMb.Value + " MB.";
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static bool IsExtensionAllowed(
|
||||
string extension,
|
||||
string allowed)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(allowed))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
string normalized = extension.Trim();
|
||||
if (!normalized.StartsWith(".", StringComparison.Ordinal))
|
||||
{
|
||||
normalized = "." + normalized;
|
||||
}
|
||||
|
||||
return allowed
|
||||
.Split(new[] { ',', ';', '|', ' ' },
|
||||
StringSplitOptions.RemoveEmptyEntries)
|
||||
.Select(item => item.Trim())
|
||||
.Select(item => item.StartsWith(".", StringComparison.Ordinal)
|
||||
? item
|
||||
: "." + item)
|
||||
.Any(item => string.Equals(
|
||||
item,
|
||||
normalized,
|
||||
StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
|
||||
private static int? NormalizeId(int? value)
|
||||
{
|
||||
return value.HasValue && value.Value > 0
|
||||
? value
|
||||
: null;
|
||||
}
|
||||
|
||||
private static string NormalizeContentType(string contentType)
|
||||
{
|
||||
return string.IsNullOrWhiteSpace(contentType)
|
||||
? "application/octet-stream"
|
||||
: contentType.Trim();
|
||||
}
|
||||
|
||||
private static string TrimOrNull(string value)
|
||||
{
|
||||
return string.IsNullOrWhiteSpace(value)
|
||||
? null
|
||||
: value.Trim();
|
||||
}
|
||||
|
||||
private static DbResult<T> Fail<T>(string message)
|
||||
{
|
||||
return DbResult<T>.Fail(
|
||||
message,
|
||||
string.Empty,
|
||||
null);
|
||||
}
|
||||
|
||||
private static DbResult<TOut> CopyFailure<TIn, TOut>(
|
||||
DbResult<TIn> source,
|
||||
string fallback)
|
||||
{
|
||||
if (source == null)
|
||||
{
|
||||
return Fail<TOut>(fallback);
|
||||
}
|
||||
|
||||
return DbResult<TOut>.Fail(
|
||||
string.IsNullOrWhiteSpace(source.UserMessage)
|
||||
? fallback
|
||||
: source.UserMessage,
|
||||
source.TechnicalMessage,
|
||||
source.Exception);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using SIG.Web.AppCode.Contracts.Bitacora;
|
||||
using SIG.Web.AppCode.Contracts.Documentos;
|
||||
using SIG.Web.AppCode.Contracts.Fraccionamientos;
|
||||
using SIG.Web.AppCode.Infrastructure.Transactions;
|
||||
using SIG.Web.AppCode.Models.Bitacora;
|
||||
@@ -21,11 +22,13 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
private readonly IFraccionamientoGisRepository _repository;
|
||||
private readonly IFraccionamientoGisFileStore _fileStore;
|
||||
private readonly IBitacoraService _bitacoraService;
|
||||
private readonly ITramiteDocumentoService _tramiteDocumentoService;
|
||||
|
||||
public FraccionamientoGisService(
|
||||
IFraccionamientoGisRepository repository,
|
||||
IFraccionamientoGisFileStore fileStore,
|
||||
IBitacoraService bitacoraService)
|
||||
IBitacoraService bitacoraService,
|
||||
ITramiteDocumentoService tramiteDocumentoService)
|
||||
{
|
||||
if (repository == null)
|
||||
{
|
||||
@@ -42,9 +45,15 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
throw new ArgumentNullException("bitacoraService");
|
||||
}
|
||||
|
||||
if (tramiteDocumentoService == null)
|
||||
{
|
||||
throw new ArgumentNullException("tramiteDocumentoService");
|
||||
}
|
||||
|
||||
_repository = repository;
|
||||
_fileStore = fileStore;
|
||||
_bitacoraService = bitacoraService;
|
||||
_tramiteDocumentoService = tramiteDocumentoService;
|
||||
}
|
||||
|
||||
public DbResult<FraccionamientoGisViewModel> Get(
|
||||
@@ -260,6 +269,41 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
{
|
||||
_fileStore.Save(gisContext, content);
|
||||
fileWasWritten = true;
|
||||
|
||||
string physicalFileName = Path.GetFileName(
|
||||
_fileStore.GetPhysicalPath(gisContext));
|
||||
string relativePath = string.Format(
|
||||
System.Globalization.CultureInfo.InvariantCulture,
|
||||
"Clientes/{0}/{1}",
|
||||
gisContext.CveCliente,
|
||||
physicalFileName);
|
||||
|
||||
DbResult<SIG.Web.AppCode.Models.Documentos.TramiteDocumentoSaveResultModel> documentResult =
|
||||
_tramiteDocumentoService.RegisterExternalStageFile(
|
||||
stageId,
|
||||
1,
|
||||
2,
|
||||
originalFileName,
|
||||
physicalFileName,
|
||||
relativePath,
|
||||
GisContentType,
|
||||
contentLength,
|
||||
executingUser,
|
||||
domainName);
|
||||
|
||||
if (!documentResult.Success)
|
||||
{
|
||||
RestorePreviousFile(
|
||||
gisContext,
|
||||
hadFile,
|
||||
previousFile);
|
||||
fileWasWritten = false;
|
||||
|
||||
return DbResult<FraccionamientoGisSaveResultModel>.Fail(
|
||||
documentResult.UserMessage,
|
||||
documentResult.TechnicalMessage,
|
||||
documentResult.Exception);
|
||||
}
|
||||
}
|
||||
|
||||
bool linksChanged = !LinksEqual(previousLinks, links);
|
||||
@@ -428,6 +472,31 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
||||
fileWasDeleted = true;
|
||||
}
|
||||
|
||||
DbResult<bool> documentDeleteResult =
|
||||
_tramiteDocumentoService.RemoveExternalStageFile(
|
||||
stageId,
|
||||
1,
|
||||
2,
|
||||
executingUser,
|
||||
domainName);
|
||||
|
||||
if (!documentDeleteResult.Success)
|
||||
{
|
||||
if (fileWasDeleted && previousFile != null)
|
||||
{
|
||||
using (var backup = new MemoryStream(previousFile, false))
|
||||
{
|
||||
_fileStore.Save(gisContext, backup);
|
||||
}
|
||||
fileWasDeleted = false;
|
||||
}
|
||||
|
||||
return DbResult<FraccionamientoGisSaveResultModel>.Fail(
|
||||
documentDeleteResult.UserMessage,
|
||||
documentDeleteResult.TechnicalMessage,
|
||||
documentDeleteResult.Exception);
|
||||
}
|
||||
|
||||
DbResult<long> auditResult =
|
||||
_bitacoraService.Registrar(
|
||||
FraccionamientoBitacoraFactory.CreateStageGisFileDelete(
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Models.Bitacora;
|
||||
using SIG.Web.AppCode.Models.Tramites;
|
||||
|
||||
namespace SIG.Web.AppCode.Services.Tramites
|
||||
{
|
||||
internal static class TramiteSolicitudBitacoraFactory
|
||||
{
|
||||
public static BitacoraEventoModel StatusChange(
|
||||
TramiteSolicitudStatusChangeModel change)
|
||||
{
|
||||
bool visibleDeveloper =
|
||||
change.EsClienteAnterior &&
|
||||
change.EsCliente;
|
||||
|
||||
var auditEvent = new BitacoraEventoModel
|
||||
{
|
||||
NombreTablaSQL = "Tra_Solicitudes",
|
||||
TipoMovimiento = BitacoraTipoMovimiento.Editado,
|
||||
LlaveRegistro = Convert.ToString(change.CveSolicitud),
|
||||
DescripcionMovimiento =
|
||||
"Se cambió el estatus de la solicitud " +
|
||||
change.Folio + " de " +
|
||||
change.EstatusSolicitudAnterior + " a " +
|
||||
change.EstatusSolicitud + ".",
|
||||
DiscriminarCamposSinCambios = true,
|
||||
Campos = new List<BitacoraCampoEventoModel>
|
||||
{
|
||||
new BitacoraCampoEventoModel
|
||||
{
|
||||
NombreCampoSQL = "CveEstatusSolicitud",
|
||||
ValorAnterior = change.CveEstatusSolicitudAnterior,
|
||||
ValorNuevo = change.CveEstatusSolicitud
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
auditEvent.Relaciones.Add(
|
||||
Relation(
|
||||
BitacoraTipoRelacion.Directa,
|
||||
"Tra_Solicitudes",
|
||||
"CveSolicitud",
|
||||
change.CveSolicitud,
|
||||
visibleDeveloper,
|
||||
"Solicitud cuyo estatus fue modificado."));
|
||||
|
||||
auditEvent.Relaciones.Add(
|
||||
Relation(
|
||||
BitacoraTipoRelacion.Relacionada,
|
||||
"Clientes",
|
||||
"CveCliente",
|
||||
change.CveCliente,
|
||||
visibleDeveloper,
|
||||
"Cliente propietario de la solicitud."));
|
||||
|
||||
auditEvent.Relaciones.Add(
|
||||
Relation(
|
||||
BitacoraTipoRelacion.Relacionada,
|
||||
"Fraccionamientos",
|
||||
"CveFraccionamiento",
|
||||
change.CveFraccionamiento,
|
||||
visibleDeveloper,
|
||||
"Fraccionamiento de la solicitud."));
|
||||
|
||||
auditEvent.Relaciones.Add(
|
||||
Relation(
|
||||
BitacoraTipoRelacion.Relacionada,
|
||||
"FraccionamientosEtapas",
|
||||
"CveFraccionamientoEtapa",
|
||||
change.CveFraccionamientoEtapa,
|
||||
visibleDeveloper,
|
||||
"Etapa de la solicitud."));
|
||||
|
||||
return auditEvent;
|
||||
}
|
||||
|
||||
private static BitacoraRelacionEventoModel Relation(
|
||||
BitacoraTipoRelacion relationType,
|
||||
string tableName,
|
||||
string fieldName,
|
||||
object value,
|
||||
bool visibleDeveloper,
|
||||
string description)
|
||||
{
|
||||
return new BitacoraRelacionEventoModel
|
||||
{
|
||||
TipoRelacion = relationType,
|
||||
NombreTablaSQL = tableName,
|
||||
NombreCampoSQL = fieldName,
|
||||
Valor = value,
|
||||
VisibleDesarrollador = visibleDeveloper,
|
||||
DescripcionRelacion = description
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
157
SIG.Web/App_Code/Services/Tramites/TramiteSolicitudService.cs
Normal file
157
SIG.Web/App_Code/Services/Tramites/TramiteSolicitudService.cs
Normal file
@@ -0,0 +1,157 @@
|
||||
using System.Collections.Generic;
|
||||
using SIG.Web.AppCode.Contracts.Bitacora;
|
||||
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.Tramites;
|
||||
|
||||
namespace SIG.Web.AppCode.Services.Tramites
|
||||
{
|
||||
public sealed class TramiteSolicitudService
|
||||
: ITramiteSolicitudService
|
||||
{
|
||||
private readonly ITramiteSolicitudRepository _repository;
|
||||
private readonly IBitacoraService _bitacoraService;
|
||||
|
||||
public TramiteSolicitudService(
|
||||
ITramiteSolicitudRepository repository,
|
||||
IBitacoraService bitacoraService)
|
||||
{
|
||||
_repository = repository;
|
||||
_bitacoraService = bitacoraService;
|
||||
}
|
||||
|
||||
public DbResult<List<TramiteSolicitudModel>> ListForDevelopment(
|
||||
int developmentId,
|
||||
int? stageId,
|
||||
int? procedureTypeId,
|
||||
int? statusId,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
if (developmentId <= 0)
|
||||
{
|
||||
return Fail<List<TramiteSolicitudModel>>(
|
||||
"Seleccione un fraccionamiento válido.");
|
||||
}
|
||||
|
||||
return _repository.ListForDevelopment(
|
||||
developmentId,
|
||||
NormalizeId(stageId),
|
||||
NormalizeId(procedureTypeId),
|
||||
NormalizeId(statusId),
|
||||
executingUser,
|
||||
domainName);
|
||||
}
|
||||
|
||||
public DbResult<TramiteSolicitudModel> Get(
|
||||
int requestId,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
if (requestId <= 0)
|
||||
{
|
||||
return Fail<TramiteSolicitudModel>(
|
||||
"Seleccione una solicitud válida.");
|
||||
}
|
||||
|
||||
return _repository.Get(
|
||||
requestId,
|
||||
executingUser,
|
||||
domainName);
|
||||
}
|
||||
|
||||
public DbResult<List<TramiteSolicitudEstatusOptionModel>> ListStatusOptions(
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
return _repository.ListStatusOptions(
|
||||
executingUser,
|
||||
domainName);
|
||||
}
|
||||
|
||||
public DbResult<TramiteSolicitudStatusChangeModel> ChangeStatus(
|
||||
int requestId,
|
||||
int statusId,
|
||||
int executingUser,
|
||||
string domainName)
|
||||
{
|
||||
if (requestId <= 0)
|
||||
{
|
||||
return Fail<TramiteSolicitudStatusChangeModel>(
|
||||
"Seleccione una solicitud válida.");
|
||||
}
|
||||
|
||||
if (statusId <= 0)
|
||||
{
|
||||
return Fail<TramiteSolicitudStatusChangeModel>(
|
||||
"Seleccione un estatus válido.");
|
||||
}
|
||||
|
||||
using (var transaction = new TransactionLogic())
|
||||
{
|
||||
DbResult<TramiteSolicitudStatusChangeModel> result =
|
||||
_repository.ChangeStatus(
|
||||
requestId,
|
||||
statusId,
|
||||
executingUser,
|
||||
domainName);
|
||||
|
||||
if (!result.Success || result.Data == null)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
if (result.Data.HuboCambio)
|
||||
{
|
||||
if (_bitacoraService == null)
|
||||
{
|
||||
return Fail<TramiteSolicitudStatusChangeModel>(
|
||||
"El servicio de bitácora no está configurado.");
|
||||
}
|
||||
|
||||
BitacoraEventoModel auditEvent =
|
||||
TramiteSolicitudBitacoraFactory.StatusChange(
|
||||
result.Data);
|
||||
|
||||
if (result.Data.FechaAutorizacion.HasValue)
|
||||
{
|
||||
auditEvent.CveUsuarioAutoriza = executingUser;
|
||||
auditEvent.FechaAutorizacion =
|
||||
result.Data.FechaAutorizacion;
|
||||
}
|
||||
|
||||
DbResult<long> auditResult =
|
||||
_bitacoraService.Registrar(auditEvent);
|
||||
|
||||
if (!auditResult.Success)
|
||||
{
|
||||
return DbResult<TramiteSolicitudStatusChangeModel>.Fail(
|
||||
auditResult.UserMessage,
|
||||
auditResult.TechnicalMessage,
|
||||
auditResult.Exception);
|
||||
}
|
||||
}
|
||||
|
||||
transaction.Commit();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
private static int? NormalizeId(int? value)
|
||||
{
|
||||
return value.HasValue && value.Value > 0
|
||||
? value
|
||||
: null;
|
||||
}
|
||||
|
||||
private static DbResult<T> Fail<T>(string message)
|
||||
{
|
||||
return DbResult<T>.Fail(
|
||||
message,
|
||||
string.Empty,
|
||||
null);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,7 @@ namespace SIG.Web.AppCode.SigControls
|
||||
public string Nombre { get; set; }
|
||||
public string Titulo { get; set; }
|
||||
public string Descripcion { get; set; }
|
||||
public string Valor { get; set; }
|
||||
public int Orden { get; set; }
|
||||
public bool Visible { get; set; } = true;
|
||||
}
|
||||
|
||||
@@ -324,46 +324,7 @@
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="fraction-content-card">
|
||||
<div class="fraction-card-heading">
|
||||
<h3>Últimos trámites</h3>
|
||||
|
||||
<asp:LinkButton ID="BtnNewProcedure"
|
||||
runat="server"
|
||||
CssClass="btn btn-outline blue"
|
||||
CausesValidation="false"
|
||||
OnClick="BtnNewProcedure_Click">
|
||||
<i class="fa fa-plus"></i>
|
||||
Agregar trámite
|
||||
</asp:LinkButton>
|
||||
</div>
|
||||
|
||||
<div class="fraction-table-scroll">
|
||||
<asp:GridView ID="GvProcedures"
|
||||
runat="server"
|
||||
AutoGenerateColumns="false"
|
||||
GridLines="None"
|
||||
CssClass="table table-hover Widthall">
|
||||
<Columns>
|
||||
<asp:BoundField DataField="TipoTramite" HeaderText="Trámite" />
|
||||
<asp:BoundField DataField="Folio" HeaderText="Folio" />
|
||||
<asp:BoundField DataField="Etapa" HeaderText="Etapa" />
|
||||
<asp:BoundField DataField="EstatusSolicitud" HeaderText="Estatus" />
|
||||
<asp:BoundField DataField="FechaUltimoEstatus"
|
||||
HeaderText="Última actualización"
|
||||
DataFormatString="{0:dd/MM/yyyy HH:mm}" />
|
||||
</Columns>
|
||||
<EmptyDataTemplate>
|
||||
<div class="fraction-empty-state">
|
||||
<span class="fraction-empty-icon">
|
||||
<i class="fa fa-clipboard"></i>
|
||||
</span>
|
||||
<span>No hay trámites registrados para las etapas.</span>
|
||||
</div>
|
||||
</EmptyDataTemplate>
|
||||
</asp:GridView>
|
||||
</div>
|
||||
</section>
|
||||
</ContentTemplate>
|
||||
</ajax:TabPanel>
|
||||
|
||||
@@ -590,10 +551,85 @@
|
||||
</span>
|
||||
</HeaderTemplate>
|
||||
<ContentTemplate>
|
||||
<div class="fraction-empty-panel">
|
||||
<i class="fa fa-clipboard"></i>
|
||||
<p>Los trámites recientes se muestran en la pestaña Etapas.</p>
|
||||
</div>
|
||||
<section class="fraction-content-card">
|
||||
<div class="fraction-card-heading">
|
||||
<h3>Trámites del fraccionamiento</h3>
|
||||
</div>
|
||||
|
||||
<sig:Filtros ID="UcProcedureFilters"
|
||||
runat="server"
|
||||
EmptyText="No hay filtros aplicados"
|
||||
OnMostrarFiltrosClick="UcProcedureFilters_MostrarFiltrosClick"
|
||||
OnFiltrosChanged="UcProcedureFilters_FiltrosChanged"
|
||||
OnConsultar="UcProcedureFilters_Consultar" />
|
||||
|
||||
<div class="fraction-table-scroll">
|
||||
<asp:GridView ID="GvProcedures"
|
||||
runat="server"
|
||||
AutoGenerateColumns="false"
|
||||
GridLines="None"
|
||||
DataKeyNames="CveSolicitud"
|
||||
CssClass="table table-hover Widthall"
|
||||
OnRowCommand="GvProcedures_RowCommand">
|
||||
<Columns>
|
||||
<asp:BoundField
|
||||
DataField="Folio"
|
||||
HeaderText="Folio" />
|
||||
|
||||
<asp:BoundField
|
||||
DataField="TipoTramite"
|
||||
HeaderText="Tipo de trámite" />
|
||||
|
||||
<asp:BoundField
|
||||
DataField="Etapa"
|
||||
HeaderText="Etapa" />
|
||||
|
||||
<asp:TemplateField HeaderText="Estatus">
|
||||
<ItemTemplate>
|
||||
<%#: GetProcedureStatusText(Eval("EstatusSolicitud")) %>
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
|
||||
<asp:BoundField
|
||||
DataField="FechaInicio"
|
||||
HeaderText="Fecha inicio"
|
||||
DataFormatString="{0:dd/MM/yyyy HH:mm}"
|
||||
HtmlEncode="false" />
|
||||
|
||||
<asp:BoundField
|
||||
DataField="FechaAutorizacion"
|
||||
HeaderText="Fecha autorización"
|
||||
DataFormatString="{0:dd/MM/yyyy HH:mm}"
|
||||
HtmlEncode="false" />
|
||||
|
||||
<asp:TemplateField
|
||||
HeaderText="Acciones"
|
||||
ItemStyle-Width="150">
|
||||
<ItemTemplate>
|
||||
<asp:LinkButton ID="BtnChangeProcedureStatus"
|
||||
runat="server"
|
||||
CssClass="btn btn-sm blue"
|
||||
CausesValidation="false"
|
||||
Visible='<%# ConvertToBoolean(Eval("PuedeCambiarEstatus")) %>'
|
||||
CommandName="ChangeStatus"
|
||||
CommandArgument='<%# Eval("CveSolicitud") %>'>
|
||||
<i class="fa fa-exchange"></i>
|
||||
Cambiar estatus
|
||||
</asp:LinkButton>
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
</Columns>
|
||||
<EmptyDataTemplate>
|
||||
<div class="fraction-empty-state">
|
||||
<span class="fraction-empty-icon">
|
||||
<i class="fa fa-clipboard"></i>
|
||||
</span>
|
||||
<span>No hay trámites que coincidan con los filtros seleccionados.</span>
|
||||
</div>
|
||||
</EmptyDataTemplate>
|
||||
</asp:GridView>
|
||||
</div>
|
||||
</section>
|
||||
</ContentTemplate>
|
||||
</ajax:TabPanel>
|
||||
|
||||
@@ -618,12 +654,137 @@
|
||||
<HeaderTemplate>
|
||||
<i class="fa fa-file-text-o"></i>
|
||||
Documentos
|
||||
<span class="badge">
|
||||
<asp:Literal ID="LitDocumentCount" runat="server" />
|
||||
</span>
|
||||
</HeaderTemplate>
|
||||
<ContentTemplate>
|
||||
<div class="fraction-empty-panel">
|
||||
<i class="fa fa-file-text-o"></i>
|
||||
<p>No hay documentos registrados.</p>
|
||||
</div>
|
||||
<section class="fraction-content-card">
|
||||
<div class="fraction-card-heading">
|
||||
<h3>Documentos del fraccionamiento</h3>
|
||||
</div>
|
||||
|
||||
<sig:Filtros ID="UcDocumentFilters"
|
||||
runat="server"
|
||||
EmptyText="No hay filtros aplicados"
|
||||
OnMostrarFiltrosClick="UcDocumentFilters_MostrarFiltrosClick"
|
||||
OnFiltrosChanged="UcDocumentFilters_FiltrosChanged"
|
||||
OnConsultar="UcDocumentFilters_Consultar" />
|
||||
|
||||
<div class="fraction-table-scroll">
|
||||
<asp:GridView ID="GvDocuments"
|
||||
runat="server"
|
||||
AutoGenerateColumns="false"
|
||||
GridLines="None"
|
||||
CssClass="table table-hover Widthall"
|
||||
OnRowCommand="GvDocuments_RowCommand">
|
||||
<Columns>
|
||||
<asp:TemplateField HeaderText="Archivo">
|
||||
<ItemTemplate>
|
||||
<asp:HyperLink ID="LnkDocumentDownload"
|
||||
runat="server"
|
||||
Visible='<%# ConvertToBoolean(Eval("TieneArchivo")) %>'
|
||||
NavigateUrl='<%# GetDocumentDownloadUrl(Eval("CveDocumentoSolicitud")) %>'
|
||||
Text='<%# EncodeDisplayValue(Convert.ToString(Eval("NombreArchivo"))) %>' />
|
||||
<asp:Literal ID="LitDocumentMissing"
|
||||
runat="server"
|
||||
Visible='<%# !ConvertToBoolean(Eval("TieneArchivo")) %>'
|
||||
Text="Sin cargar" />
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
|
||||
<asp:BoundField
|
||||
DataField="TipoDocumento"
|
||||
HeaderText="Tipo de documento" />
|
||||
|
||||
<asp:BoundField
|
||||
DataField="TipoTramite"
|
||||
HeaderText="Trámite" />
|
||||
|
||||
<asp:BoundField
|
||||
DataField="Etapa"
|
||||
HeaderText="Etapa" />
|
||||
|
||||
<asp:TemplateField HeaderText="Es aprobado">
|
||||
<ItemTemplate>
|
||||
<span class='<%# GetDocumentStatusCss(Eval("EstadoDocumento")) %>'>
|
||||
<%#: Convert.ToString(Eval("EstadoDocumento")) %>
|
||||
</span>
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
|
||||
<asp:TemplateField HeaderText="Nota">
|
||||
<ItemTemplate>
|
||||
<%#: GetDocumentNoteText(Eval("Nota")) %>
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
|
||||
<asp:BoundField
|
||||
DataField="FechaRevision"
|
||||
HeaderText="Fecha revisión"
|
||||
DataFormatString="{0:dd/MM/yyyy HH:mm}"
|
||||
HtmlEncode="false" />
|
||||
|
||||
<asp:TemplateField HeaderText="Acciones" ItemStyle-Width="330">
|
||||
<ItemTemplate>
|
||||
<asp:LinkButton ID="BtnDocumentUpload"
|
||||
runat="server"
|
||||
CssClass="btn btn-sm blue"
|
||||
CausesValidation="false"
|
||||
Visible='<%# ConvertToBoolean(Eval("PuedeActualizarArchivo")) %>'
|
||||
CommandName="Upload"
|
||||
CommandArgument='<%# string.Format("{0}|{1}", Eval("CveSolicitud"), Eval("CveTipoDocumento")) %>'>
|
||||
<i class="fa fa-upload"></i>
|
||||
<%#: GetDocumentUploadButtonText(Eval("TieneArchivo")) %>
|
||||
</asp:LinkButton>
|
||||
|
||||
<asp:LinkButton ID="BtnDocumentGis"
|
||||
runat="server"
|
||||
CssClass="btn btn-sm blue"
|
||||
CausesValidation="false"
|
||||
Visible='<%# ConvertToBoolean(Eval("PuedeAdministrarGis")) %>'
|
||||
CommandName="ManageGis"
|
||||
CommandArgument='<%# Eval("CveFraccionamientoEtapa") %>'>
|
||||
<i class="fa fa-map-o"></i>
|
||||
Administrar GIS
|
||||
</asp:LinkButton>
|
||||
|
||||
<asp:LinkButton ID="BtnDocumentApprove"
|
||||
runat="server"
|
||||
CssClass="btn btn-sm green"
|
||||
CausesValidation="false"
|
||||
Visible='<%# ConvertToBoolean(Eval("PuedeRevisar")) %>'
|
||||
CommandName="Approve"
|
||||
CommandArgument='<%# Eval("CveDocumentoSolicitud") %>'
|
||||
OnClientClick="return confirm('¿Aprobar este documento?');">
|
||||
<i class="fa fa-check"></i>
|
||||
Aprobar
|
||||
</asp:LinkButton>
|
||||
|
||||
<asp:LinkButton ID="BtnDocumentReject"
|
||||
runat="server"
|
||||
CssClass="btn btn-sm red"
|
||||
CausesValidation="false"
|
||||
Visible='<%# ConvertToBoolean(Eval("PuedeRevisar")) %>'
|
||||
CommandName="Reject"
|
||||
CommandArgument='<%# Eval("CveDocumentoSolicitud") %>'>
|
||||
<i class="fa fa-times"></i>
|
||||
Rechazar
|
||||
</asp:LinkButton>
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
</Columns>
|
||||
<EmptyDataTemplate>
|
||||
<div class="fraction-empty-state">
|
||||
<span class="fraction-empty-icon">
|
||||
<i class="fa fa-file-text-o"></i>
|
||||
</span>
|
||||
<span>No hay documentos que coincidan con los filtros seleccionados.</span>
|
||||
</div>
|
||||
</EmptyDataTemplate>
|
||||
</asp:GridView>
|
||||
</div>
|
||||
</section>
|
||||
</ContentTemplate>
|
||||
</ajax:TabPanel>
|
||||
|
||||
@@ -647,10 +808,253 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="ModalProcedureFilters"
|
||||
class="modal fade fraction-modal"
|
||||
tabindex="-1"
|
||||
role="dialog"
|
||||
aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<asp:UpdatePanel ID="UpProcedureFiltersModal"
|
||||
runat="server"
|
||||
UpdateMode="Conditional"
|
||||
ChildrenAsTriggers="false">
|
||||
<ContentTemplate>
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button"
|
||||
class="close"
|
||||
data-dismiss="modal"
|
||||
aria-label="Cerrar">
|
||||
×
|
||||
</button>
|
||||
<h4 class="modal-title">
|
||||
<i class="fa fa-filter"></i>
|
||||
Filtros de trámites
|
||||
</h4>
|
||||
</div>
|
||||
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label>Estatus</label>
|
||||
<asp:DropDownList ID="DdlProcedureStatus"
|
||||
runat="server"
|
||||
CssClass="form-control select2me Widthall"
|
||||
Style="width:100%;" />
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Tipo de trámite</label>
|
||||
<asp:DropDownList ID="DdlProcedureType"
|
||||
runat="server"
|
||||
CssClass="form-control select2me Widthall"
|
||||
Style="width:100%;" />
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Etapa</label>
|
||||
<asp:DropDownList ID="DdlProcedureStage"
|
||||
runat="server"
|
||||
CssClass="form-control select2me Widthall"
|
||||
Style="width:100%;" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<button type="button"
|
||||
class="btn default"
|
||||
data-dismiss="modal">
|
||||
Cancelar
|
||||
</button>
|
||||
|
||||
<asp:LinkButton ID="BtnApplyProcedureFilters"
|
||||
runat="server"
|
||||
CssClass="btn blue"
|
||||
CausesValidation="false"
|
||||
OnClick="BtnApplyProcedureFilters_Click">
|
||||
<i class="fa fa-filter"></i>
|
||||
Filtrar
|
||||
</asp:LinkButton>
|
||||
</div>
|
||||
</div>
|
||||
</ContentTemplate>
|
||||
<Triggers>
|
||||
<asp:AsyncPostBackTrigger
|
||||
ControlID="BtnApplyProcedureFilters"
|
||||
EventName="Click" />
|
||||
</Triggers>
|
||||
</asp:UpdatePanel>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="ModalDocumentFilters"
|
||||
class="modal fade fraction-modal"
|
||||
tabindex="-1"
|
||||
role="dialog"
|
||||
aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<asp:UpdatePanel ID="UpDocumentFiltersModal"
|
||||
runat="server"
|
||||
UpdateMode="Conditional"
|
||||
ChildrenAsTriggers="false">
|
||||
<ContentTemplate>
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Cerrar">×</button>
|
||||
<h4 class="modal-title"><i class="fa fa-filter"></i> Filtros de documentos</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label>Tipo de trámite</label>
|
||||
<asp:DropDownList ID="DdlDocumentProcedureType"
|
||||
runat="server"
|
||||
CssClass="form-control select2me Widthall"
|
||||
Style="width:100%;" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Etapa</label>
|
||||
<asp:DropDownList ID="DdlDocumentStage"
|
||||
runat="server"
|
||||
CssClass="form-control select2me Widthall"
|
||||
Style="width:100%;" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn default" data-dismiss="modal">Cancelar</button>
|
||||
<asp:LinkButton ID="BtnApplyDocumentFilters"
|
||||
runat="server"
|
||||
CssClass="btn blue"
|
||||
CausesValidation="false"
|
||||
OnClick="BtnApplyDocumentFilters_Click">
|
||||
<i class="fa fa-filter"></i> Filtrar
|
||||
</asp:LinkButton>
|
||||
</div>
|
||||
</div>
|
||||
</ContentTemplate>
|
||||
<Triggers>
|
||||
<asp:AsyncPostBackTrigger ControlID="BtnApplyDocumentFilters" EventName="Click" />
|
||||
</Triggers>
|
||||
</asp:UpdatePanel>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="ModalDocumentUpload"
|
||||
class="modal fade fraction-modal"
|
||||
tabindex="-1"
|
||||
role="dialog"
|
||||
aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<asp:UpdatePanel ID="UpDocumentUploadModal"
|
||||
runat="server"
|
||||
UpdateMode="Conditional">
|
||||
<ContentTemplate>
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Cerrar">×</button>
|
||||
<h4 class="modal-title">
|
||||
<i class="fa fa-upload"></i>
|
||||
<asp:Literal ID="LitDocumentUploadTitle" runat="server" />
|
||||
</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<asp:Label ID="LblDocumentUploadMessage"
|
||||
runat="server"
|
||||
CssClass="alert alert-danger"
|
||||
Visible="false" />
|
||||
|
||||
<div class="well well-sm">
|
||||
<strong><asp:Literal ID="LitDocumentUploadType" runat="server" /></strong><br />
|
||||
<span><asp:Literal ID="LitDocumentUploadContext" runat="server" /></span>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Archivo</label>
|
||||
<asp:FileUpload ID="FuDocument"
|
||||
runat="server"
|
||||
CssClass="form-control" />
|
||||
<span class="help-block">
|
||||
<asp:Literal ID="LitDocumentUploadRules" runat="server" />
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Comentario</label>
|
||||
<asp:TextBox ID="TxtDocumentClientComment"
|
||||
runat="server"
|
||||
CssClass="form-control"
|
||||
TextMode="MultiLine"
|
||||
Rows="3"
|
||||
MaxLength="1000" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn default" data-dismiss="modal">Cancelar</button>
|
||||
<asp:Button ID="BtnSaveDocumentUpload"
|
||||
runat="server"
|
||||
CssClass="btn blue"
|
||||
Text="Guardar archivo"
|
||||
OnClick="BtnSaveDocumentUpload_Click" />
|
||||
</div>
|
||||
</div>
|
||||
</ContentTemplate>
|
||||
<Triggers>
|
||||
<asp:PostBackTrigger ControlID="BtnSaveDocumentUpload" />
|
||||
</Triggers>
|
||||
</asp:UpdatePanel>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="ModalDocumentReject"
|
||||
class="modal fade fraction-modal"
|
||||
tabindex="-1"
|
||||
role="dialog"
|
||||
aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<asp:UpdatePanel ID="UpDocumentRejectModal"
|
||||
runat="server"
|
||||
UpdateMode="Conditional">
|
||||
<ContentTemplate>
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Cerrar">×</button>
|
||||
<h4 class="modal-title"><i class="fa fa-times"></i> Rechazar documento</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<asp:Label ID="LblDocumentRejectMessage"
|
||||
runat="server"
|
||||
CssClass="alert alert-danger"
|
||||
Visible="false" />
|
||||
<p>Capture la nota o motivo del rechazo. Esta nota se mostrará en la lista de documentos.</p>
|
||||
<div class="form-group">
|
||||
<label>Nota</label>
|
||||
<asp:TextBox ID="TxtDocumentRejectNote"
|
||||
runat="server"
|
||||
CssClass="form-control"
|
||||
TextMode="MultiLine"
|
||||
Rows="4"
|
||||
MaxLength="1000" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn default" data-dismiss="modal">Cancelar</button>
|
||||
<asp:LinkButton ID="BtnConfirmDocumentReject"
|
||||
runat="server"
|
||||
CssClass="btn red"
|
||||
CausesValidation="false"
|
||||
OnClick="BtnConfirmDocumentReject_Click">
|
||||
<i class="fa fa-times"></i> Rechazar
|
||||
</asp:LinkButton>
|
||||
</div>
|
||||
</div>
|
||||
</ContentTemplate>
|
||||
</asp:UpdatePanel>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<sig:BitacoraGrid ID="UcBitacoraDetalle"
|
||||
runat="server"
|
||||
Titulo="Bitácora"
|
||||
Descripcion="Historial del fraccionamiento, sus etapas y lotes"
|
||||
Descripcion="Historial del fraccionamiento, sus etapas, lotes, trámites y documentos"
|
||||
TextoVacio="No hay movimientos registrados para este fraccionamiento."
|
||||
RegistrosPorPagina="20"
|
||||
ScrollsParaCambiarPagina="3" />
|
||||
@@ -925,6 +1329,76 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="ModalProcedureStatus"
|
||||
class="modal fade fraction-modal"
|
||||
tabindex="-1"
|
||||
role="dialog"
|
||||
aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<asp:UpdatePanel ID="UpProcedureStatusModal"
|
||||
runat="server"
|
||||
UpdateMode="Conditional"
|
||||
ChildrenAsTriggers="false">
|
||||
<ContentTemplate>
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button"
|
||||
class="close"
|
||||
data-dismiss="modal"
|
||||
aria-label="Cerrar">
|
||||
×
|
||||
</button>
|
||||
<h4 class="modal-title">Cambiar estatus del trámite</h4>
|
||||
</div>
|
||||
|
||||
<div class="modal-body">
|
||||
<asp:Label ID="LblProcedureStatusMessage"
|
||||
runat="server"
|
||||
CssClass="alert alert-danger sig-modal-message"
|
||||
role="alert"
|
||||
Visible="false" />
|
||||
|
||||
<div class="fraction-selected-stage">
|
||||
<span>Solicitud</span>
|
||||
<strong>
|
||||
<asp:Literal ID="LitProcedureStatusFolio"
|
||||
runat="server" />
|
||||
</strong>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label>Estatus *</label>
|
||||
<asp:DropDownList ID="DdlProcedureNewStatus"
|
||||
runat="server"
|
||||
CssClass="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<button type="button"
|
||||
class="btn default"
|
||||
data-dismiss="modal">
|
||||
Cancelar
|
||||
</button>
|
||||
|
||||
<asp:Button ID="BtnSaveProcedureStatus"
|
||||
runat="server"
|
||||
CssClass="btn blue"
|
||||
Text="Guardar estatus"
|
||||
CausesValidation="false"
|
||||
OnClick="BtnSaveProcedureStatus_Click" />
|
||||
</div>
|
||||
</div>
|
||||
</ContentTemplate>
|
||||
<Triggers>
|
||||
<asp:AsyncPostBackTrigger
|
||||
ControlID="BtnSaveProcedureStatus"
|
||||
EventName="Click" />
|
||||
</Triggers>
|
||||
</asp:UpdatePanel>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="ModalStageGis"
|
||||
class="modal fade fraction-modal"
|
||||
tabindex="-1"
|
||||
@@ -1383,6 +1857,14 @@
|
||||
window.SIGDetail.hideModal('#ModalStageProgress');
|
||||
};
|
||||
|
||||
window.SIGDetail.showProcedureStatus = function () {
|
||||
window.SIGDetail.initializeModal('#ModalProcedureStatus');
|
||||
};
|
||||
|
||||
window.SIGDetail.hideProcedureStatus = function () {
|
||||
window.SIGDetail.hideModal('#ModalProcedureStatus');
|
||||
};
|
||||
|
||||
window.SIGDetail.showStageGis = function () {
|
||||
window.SIGDetail.initializeModal('#ModalStageGis');
|
||||
};
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
923
SIG.Web/Pages/Fraccionamientos/FraccionamientoDetalle.aspx.designer.cs
generated
Normal file
923
SIG.Web/Pages/Fraccionamientos/FraccionamientoDetalle.aspx.designer.cs
generated
Normal file
@@ -0,0 +1,923 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace SIG.Web.Pages.Fraccionamientos
|
||||
{
|
||||
|
||||
|
||||
public partial class FraccionamientoDetalle
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// LnkBack control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.HyperLink LnkBack;
|
||||
|
||||
/// <summary>
|
||||
/// BtnEditStageProgress control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.LinkButton BtnEditStageProgress;
|
||||
|
||||
/// <summary>
|
||||
/// UpSummary control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.UpdatePanel UpSummary;
|
||||
|
||||
/// <summary>
|
||||
/// LitDevelopmentName control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Literal LitDevelopmentName;
|
||||
|
||||
/// <summary>
|
||||
/// LblDevelopmentActive control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Label LblDevelopmentActive;
|
||||
|
||||
/// <summary>
|
||||
/// BtnDelete control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.LinkButton BtnDelete;
|
||||
|
||||
/// <summary>
|
||||
/// LitSummaryClient control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Literal LitSummaryClient;
|
||||
|
||||
/// <summary>
|
||||
/// LitSummaryHectares control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Literal LitSummaryHectares;
|
||||
|
||||
/// <summary>
|
||||
/// LitSummaryLocation control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Literal LitSummaryLocation;
|
||||
|
||||
/// <summary>
|
||||
/// LitSummaryOpeningDate control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Literal LitSummaryOpeningDate;
|
||||
|
||||
/// <summary>
|
||||
/// LitSummaryGlobalProgress control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Literal LitSummaryGlobalProgress;
|
||||
|
||||
/// <summary>
|
||||
/// PnlSummaryGlobalProgressBar control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Panel PnlSummaryGlobalProgressBar;
|
||||
|
||||
/// <summary>
|
||||
/// LblSummaryStatus control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Label LblSummaryStatus;
|
||||
|
||||
/// <summary>
|
||||
/// UpDetailTabs control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.UpdatePanel UpDetailTabs;
|
||||
|
||||
/// <summary>
|
||||
/// TabsFractionDetail control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::AjaxControlToolkit.TabContainer TabsFractionDetail;
|
||||
|
||||
/// <summary>
|
||||
/// TabStages control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::AjaxControlToolkit.TabPanel TabStages;
|
||||
|
||||
/// <summary>
|
||||
/// LitStageCount control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Literal LitStageCount;
|
||||
|
||||
/// <summary>
|
||||
/// BtnNewStage control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.LinkButton BtnNewStage;
|
||||
|
||||
/// <summary>
|
||||
/// GvStages control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.GridView GvStages;
|
||||
|
||||
/// <summary>
|
||||
/// HfStageOrderMove control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.HiddenField HfStageOrderMove;
|
||||
|
||||
/// <summary>
|
||||
/// BtnStageOrderMove control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.LinkButton BtnStageOrderMove;
|
||||
|
||||
/// <summary>
|
||||
/// GvProcedures control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.GridView GvProcedures;
|
||||
|
||||
/// <summary>
|
||||
/// TabLots control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::AjaxControlToolkit.TabPanel TabLots;
|
||||
|
||||
/// <summary>
|
||||
/// LitLotCount control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Literal LitLotCount;
|
||||
|
||||
/// <summary>
|
||||
/// DdlLotsStage control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.DropDownList DdlLotsStage;
|
||||
|
||||
/// <summary>
|
||||
/// BtnClearStageLots control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.LinkButton BtnClearStageLots;
|
||||
|
||||
/// <summary>
|
||||
/// PnlLotsStageRequired control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Panel PnlLotsStageRequired;
|
||||
|
||||
/// <summary>
|
||||
/// PnlLotsStageContext control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Panel PnlLotsStageContext;
|
||||
|
||||
/// <summary>
|
||||
/// LitLotsSelectedStage control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Literal LitLotsSelectedStage;
|
||||
|
||||
/// <summary>
|
||||
/// LitLotsSelectedStageProgress control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Literal LitLotsSelectedStageProgress;
|
||||
|
||||
/// <summary>
|
||||
/// PnlLotsSelectedStageProgressBar control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Panel PnlLotsSelectedStageProgressBar;
|
||||
|
||||
/// <summary>
|
||||
/// PhStageGisMissing control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.PlaceHolder PhStageGisMissing;
|
||||
|
||||
/// <summary>
|
||||
/// BtnAddStageGis control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.LinkButton BtnAddStageGis;
|
||||
|
||||
/// <summary>
|
||||
/// PhStageGisExistingActions control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.PlaceHolder PhStageGisExistingActions;
|
||||
|
||||
/// <summary>
|
||||
/// BtnManageStageGis control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.LinkButton BtnManageStageGis;
|
||||
|
||||
/// <summary>
|
||||
/// PnlStageGisExisting control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Panel PnlStageGisExisting;
|
||||
|
||||
/// <summary>
|
||||
/// LitStageGisName control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Literal LitStageGisName;
|
||||
|
||||
/// <summary>
|
||||
/// LitStageGisUpdatedAt control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Literal LitStageGisUpdatedAt;
|
||||
|
||||
/// <summary>
|
||||
/// LnkStageGisOpen control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.HyperLink LnkStageGisOpen;
|
||||
|
||||
/// <summary>
|
||||
/// GvLots control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.GridView GvLots;
|
||||
|
||||
/// <summary>
|
||||
/// TabProcedures control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::AjaxControlToolkit.TabPanel TabProcedures;
|
||||
|
||||
/// <summary>
|
||||
/// LitProcedureCount control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Literal LitProcedureCount;
|
||||
|
||||
/// <summary>
|
||||
/// UcProcedureFilters control.
|
||||
/// </summary>
|
||||
protected global::SIG.Web.AppCode.SigControls.Filtros UcProcedureFilters;
|
||||
|
||||
/// <summary>
|
||||
/// UpProcedureFiltersModal control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.UpdatePanel UpProcedureFiltersModal;
|
||||
|
||||
/// <summary>
|
||||
/// DdlProcedureStatus control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.DropDownList DdlProcedureStatus;
|
||||
|
||||
/// <summary>
|
||||
/// DdlProcedureType control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.DropDownList DdlProcedureType;
|
||||
|
||||
/// <summary>
|
||||
/// DdlProcedureStage control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.DropDownList DdlProcedureStage;
|
||||
|
||||
/// <summary>
|
||||
/// BtnApplyProcedureFilters control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.LinkButton BtnApplyProcedureFilters;
|
||||
|
||||
/// <summary>
|
||||
/// TabPayments control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::AjaxControlToolkit.TabPanel TabPayments;
|
||||
|
||||
/// <summary>
|
||||
/// TabDocuments control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::AjaxControlToolkit.TabPanel TabDocuments;
|
||||
|
||||
/// <summary>
|
||||
/// LitDocumentCount control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Literal LitDocumentCount;
|
||||
|
||||
/// <summary>
|
||||
/// UcDocumentFilters control.
|
||||
/// </summary>
|
||||
protected global::SIG.Web.AppCode.SigControls.Filtros UcDocumentFilters;
|
||||
|
||||
/// <summary>
|
||||
/// GvDocuments control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.GridView GvDocuments;
|
||||
|
||||
/// <summary>
|
||||
/// UpDocumentFiltersModal control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.UpdatePanel UpDocumentFiltersModal;
|
||||
|
||||
/// <summary>
|
||||
/// DdlDocumentProcedureType control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.DropDownList DdlDocumentProcedureType;
|
||||
|
||||
/// <summary>
|
||||
/// DdlDocumentStage control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.DropDownList DdlDocumentStage;
|
||||
|
||||
/// <summary>
|
||||
/// BtnApplyDocumentFilters control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.LinkButton BtnApplyDocumentFilters;
|
||||
|
||||
/// <summary>
|
||||
/// UpDocumentUploadModal control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.UpdatePanel UpDocumentUploadModal;
|
||||
|
||||
/// <summary>
|
||||
/// LitDocumentUploadTitle control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Literal LitDocumentUploadTitle;
|
||||
|
||||
/// <summary>
|
||||
/// LblDocumentUploadMessage control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Label LblDocumentUploadMessage;
|
||||
|
||||
/// <summary>
|
||||
/// LitDocumentUploadType control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Literal LitDocumentUploadType;
|
||||
|
||||
/// <summary>
|
||||
/// LitDocumentUploadContext control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Literal LitDocumentUploadContext;
|
||||
|
||||
/// <summary>
|
||||
/// FuDocument control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.FileUpload FuDocument;
|
||||
|
||||
/// <summary>
|
||||
/// LitDocumentUploadRules control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Literal LitDocumentUploadRules;
|
||||
|
||||
/// <summary>
|
||||
/// TxtDocumentClientComment control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.TextBox TxtDocumentClientComment;
|
||||
|
||||
/// <summary>
|
||||
/// BtnSaveDocumentUpload control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Button BtnSaveDocumentUpload;
|
||||
|
||||
/// <summary>
|
||||
/// UpDocumentRejectModal control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.UpdatePanel UpDocumentRejectModal;
|
||||
|
||||
/// <summary>
|
||||
/// LblDocumentRejectMessage control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Label LblDocumentRejectMessage;
|
||||
|
||||
/// <summary>
|
||||
/// TxtDocumentRejectNote control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.TextBox TxtDocumentRejectNote;
|
||||
|
||||
/// <summary>
|
||||
/// BtnConfirmDocumentReject control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.LinkButton BtnConfirmDocumentReject;
|
||||
|
||||
/// <summary>
|
||||
/// TabNotes control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::AjaxControlToolkit.TabPanel TabNotes;
|
||||
|
||||
/// <summary>
|
||||
/// UpDevelopmentModal control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.UpdatePanel UpDevelopmentModal;
|
||||
|
||||
/// <summary>
|
||||
/// LblEditMessage control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Label LblEditMessage;
|
||||
|
||||
/// <summary>
|
||||
/// DdlClient control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.DropDownList DdlClient;
|
||||
|
||||
/// <summary>
|
||||
/// TxtDevelopment control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.TextBox TxtDevelopment;
|
||||
|
||||
/// <summary>
|
||||
/// TxtHectares control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.TextBox TxtHectares;
|
||||
|
||||
/// <summary>
|
||||
/// DdlStatus control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.DropDownList DdlStatus;
|
||||
|
||||
/// <summary>
|
||||
/// TxtLocation control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.TextBox TxtLocation;
|
||||
|
||||
/// <summary>
|
||||
/// ChkActive control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.CheckBox ChkActive;
|
||||
|
||||
/// <summary>
|
||||
/// BtnSave control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Button BtnSave;
|
||||
|
||||
/// <summary>
|
||||
/// UpStageModal control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.UpdatePanel UpStageModal;
|
||||
|
||||
/// <summary>
|
||||
/// LitStageTitle control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Literal LitStageTitle;
|
||||
|
||||
/// <summary>
|
||||
/// LblStageMessage control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Label LblStageMessage;
|
||||
|
||||
/// <summary>
|
||||
/// TxtStage control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.TextBox TxtStage;
|
||||
|
||||
/// <summary>
|
||||
/// TxtStageHectares control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.TextBox TxtStageHectares;
|
||||
|
||||
/// <summary>
|
||||
/// ChkStageActive control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.CheckBox ChkStageActive;
|
||||
|
||||
/// <summary>
|
||||
/// BtnSaveStage control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Button BtnSaveStage;
|
||||
|
||||
/// <summary>
|
||||
/// UpStageProgressModal control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.UpdatePanel UpStageProgressModal;
|
||||
|
||||
/// <summary>
|
||||
/// LblStageProgressMessage control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Label LblStageProgressMessage;
|
||||
|
||||
/// <summary>
|
||||
/// DdlStageProgress control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.DropDownList DdlStageProgress;
|
||||
|
||||
/// <summary>
|
||||
/// PnlStageProgressCapture control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Panel PnlStageProgressCapture;
|
||||
|
||||
/// <summary>
|
||||
/// TxtStageProgress control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.TextBox TxtStageProgress;
|
||||
|
||||
/// <summary>
|
||||
/// BtnSaveStageProgress control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Button BtnSaveStageProgress;
|
||||
|
||||
/// <summary>
|
||||
/// UpProcedureStatusModal control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.UpdatePanel UpProcedureStatusModal;
|
||||
|
||||
/// <summary>
|
||||
/// LblProcedureStatusMessage control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Label LblProcedureStatusMessage;
|
||||
|
||||
/// <summary>
|
||||
/// LitProcedureStatusFolio control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Literal LitProcedureStatusFolio;
|
||||
|
||||
/// <summary>
|
||||
/// DdlProcedureNewStatus control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.DropDownList DdlProcedureNewStatus;
|
||||
|
||||
/// <summary>
|
||||
/// BtnSaveProcedureStatus control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Button BtnSaveProcedureStatus;
|
||||
|
||||
/// <summary>
|
||||
/// UpStageGisModal control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.UpdatePanel UpStageGisModal;
|
||||
|
||||
/// <summary>
|
||||
/// LitStageGisModalTitle control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Literal LitStageGisModalTitle;
|
||||
|
||||
/// <summary>
|
||||
/// LblStageGisMessage control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Label LblStageGisMessage;
|
||||
|
||||
/// <summary>
|
||||
/// LitStageGisStageName control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Literal LitStageGisStageName;
|
||||
|
||||
/// <summary>
|
||||
/// HdStageGisId control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.HiddenField HdStageGisId;
|
||||
|
||||
/// <summary>
|
||||
/// BtnRefreshStageGis control.
|
||||
/// </summary>
|
||||
protected global::System.Web.UI.WebControls.Button BtnRefreshStageGis;
|
||||
|
||||
/// <summary>
|
||||
/// UpLotsModal control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.UpdatePanel UpLotsModal;
|
||||
|
||||
/// <summary>
|
||||
/// LblLotMessage control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Label LblLotMessage;
|
||||
|
||||
/// <summary>
|
||||
/// LitLotStageName control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Literal LitLotStageName;
|
||||
|
||||
/// <summary>
|
||||
/// TxtLotQuantity control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.TextBox TxtLotQuantity;
|
||||
|
||||
/// <summary>
|
||||
/// TxtLotBaseName control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.TextBox TxtLotBaseName;
|
||||
|
||||
/// <summary>
|
||||
/// ChkLotAddIdentifier control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.CheckBox ChkLotAddIdentifier;
|
||||
|
||||
/// <summary>
|
||||
/// TxtLotStartNumber control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.TextBox TxtLotStartNumber;
|
||||
|
||||
/// <summary>
|
||||
/// LnkDownloadLotTemplate control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.HyperLink LnkDownloadLotTemplate;
|
||||
|
||||
/// <summary>
|
||||
/// FileLots control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.FileUpload FileLots;
|
||||
|
||||
/// <summary>
|
||||
/// BtnImportLots control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Button BtnImportLots;
|
||||
|
||||
/// <summary>
|
||||
/// BtnSaveLots control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Button BtnSaveLots;
|
||||
|
||||
/// <summary>
|
||||
/// UpEditLotModal control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.UpdatePanel UpEditLotModal;
|
||||
|
||||
/// <summary>
|
||||
/// LblEditLotMessage control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Label LblEditLotMessage;
|
||||
|
||||
/// <summary>
|
||||
/// LitEditLotStage control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Literal LitEditLotStage;
|
||||
|
||||
/// <summary>
|
||||
/// TxtEditLotName control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.TextBox TxtEditLotName;
|
||||
|
||||
/// <summary>
|
||||
/// TxtEditLotType control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.TextBox TxtEditLotType;
|
||||
|
||||
/// <summary>
|
||||
/// TxtEditLotStreet control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.TextBox TxtEditLotStreet;
|
||||
|
||||
/// <summary>
|
||||
/// TxtEditLotCadastre control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.TextBox TxtEditLotCadastre;
|
||||
|
||||
/// <summary>
|
||||
/// TxtEditLotSquareMeters control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.TextBox TxtEditLotSquareMeters;
|
||||
|
||||
/// <summary>
|
||||
/// TxtEditLotDuplicate control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.TextBox TxtEditLotDuplicate;
|
||||
|
||||
/// <summary>
|
||||
/// ChkEditLotActive control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.CheckBox ChkEditLotActive;
|
||||
|
||||
/// <summary>
|
||||
/// BtnSaveLot control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Button BtnSaveLot;
|
||||
/// <summary>
|
||||
/// UcBitacoraDetalle control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::SIG.Web.AppCode.SigControls.BitacoraGrid UcBitacoraDetalle;
|
||||
}
|
||||
}
|
||||
1
SIG.Web/Pages/Fraccionamientos/TramiteDocumento.ashx
Normal file
1
SIG.Web/Pages/Fraccionamientos/TramiteDocumento.ashx
Normal file
@@ -0,0 +1 @@
|
||||
<%@ WebHandler Language="C#" Class="SIG.Web.Pages.Fraccionamientos.TramiteDocumentoHandler" %>
|
||||
Reference in New Issue
Block a user