documentos
This commit is contained in:
@@ -45,9 +45,11 @@ namespace SIG.Web.AppCode.Configuration
|
|||||||
public static IUserAdministrationService UserAdministrationService { get; private set; }
|
public static IUserAdministrationService UserAdministrationService { get; private set; }
|
||||||
public static IGeneralCatalogRepository GeneralCatalogRepository { get; private set; }
|
public static IGeneralCatalogRepository GeneralCatalogRepository { get; private set; }
|
||||||
public static IClienteDocumentoService ClienteDocumentoService { 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 IFraccionamientoService FraccionamientoService { get; private set; }
|
||||||
public static IFraccionamientoGisService FraccionamientoGisService { get; private set; }
|
public static IFraccionamientoGisService FraccionamientoGisService { get; private set; }
|
||||||
public static ITramiteCatalogService TramiteCatalogService { 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 ICfdiTimbradoService CfdiTimbradoService { get; private set; }
|
||||||
public static IPublicRegistrationService PublicRegistrationService { get; private set; }
|
public static IPublicRegistrationService PublicRegistrationService { get; private set; }
|
||||||
public static ILoginAttemptRepository LoginAttemptRepository { get; private set; }
|
public static ILoginAttemptRepository LoginAttemptRepository { get; private set; }
|
||||||
@@ -90,9 +92,22 @@ namespace SIG.Web.AppCode.Configuration
|
|||||||
GeneralCatalogRepository = new GeneralCatalogRepository(DbExecutor);
|
GeneralCatalogRepository = new GeneralCatalogRepository(DbExecutor);
|
||||||
ClienteDocumentoService = new ClienteDocumentoService(
|
ClienteDocumentoService = new ClienteDocumentoService(
|
||||||
new ClienteDocumentoRepository(DbExecutor));
|
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(
|
FraccionamientoService = new FraccionamientoService(
|
||||||
new FraccionamientoRepository(DbExecutor),
|
new FraccionamientoRepository(DbExecutor),
|
||||||
new TramiteSolicitudRepository(DbExecutor),
|
tramiteSolicitudRepository,
|
||||||
BitacoraService);
|
BitacoraService);
|
||||||
|
|
||||||
IFraccionamientoGisRepository gisRepository =
|
IFraccionamientoGisRepository gisRepository =
|
||||||
@@ -102,10 +117,14 @@ namespace SIG.Web.AppCode.Configuration
|
|||||||
FraccionamientoGisService = new FraccionamientoGisService(
|
FraccionamientoGisService = new FraccionamientoGisService(
|
||||||
gisRepository,
|
gisRepository,
|
||||||
gisFileStore,
|
gisFileStore,
|
||||||
BitacoraService);
|
BitacoraService,
|
||||||
|
TramiteDocumentoService);
|
||||||
TramiteCatalogService = new TramiteCatalogService(
|
TramiteCatalogService = new TramiteCatalogService(
|
||||||
new TramiteCatalogRepository(DbExecutor),
|
new TramiteCatalogRepository(DbExecutor),
|
||||||
BitacoraService);
|
BitacoraService);
|
||||||
|
TramiteSolicitudService = new TramiteSolicitudService(
|
||||||
|
tramiteSolicitudRepository,
|
||||||
|
BitacoraService);
|
||||||
CfdiTimbradoService = new CfdiTimbradoService(
|
CfdiTimbradoService = new CfdiTimbradoService(
|
||||||
new CfdiRepository(DbExecutor),
|
new CfdiRepository(DbExecutor),
|
||||||
new ProfactCfdi40XmlBuilder(),
|
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.Common;
|
||||||
|
using SIG.Web.AppCode.Models.Tramites;
|
||||||
|
|
||||||
namespace SIG.Web.AppCode.Contracts.Tramites
|
namespace SIG.Web.AppCode.Contracts.Tramites
|
||||||
{
|
{
|
||||||
@@ -9,5 +11,28 @@ namespace SIG.Web.AppCode.Contracts.Tramites
|
|||||||
int procedureTypeId,
|
int procedureTypeId,
|
||||||
int executingUser,
|
int executingUser,
|
||||||
string domainName);
|
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 System.Data;
|
||||||
using SIG.Web.AppCode.Contracts.Database;
|
using SIG.Web.AppCode.Contracts.Database;
|
||||||
using SIG.Web.AppCode.Contracts.Tramites;
|
using SIG.Web.AppCode.Contracts.Tramites;
|
||||||
using SIG.Web.AppCode.Models.Common;
|
using SIG.Web.AppCode.Models.Common;
|
||||||
|
using SIG.Web.AppCode.Models.Tramites;
|
||||||
using SIG.Web.AppCode.Repositories.Database;
|
using SIG.Web.AppCode.Repositories.Database;
|
||||||
|
|
||||||
namespace SIG.Web.AppCode.Repositories.Tramites
|
namespace SIG.Web.AppCode.Repositories.Tramites
|
||||||
@@ -39,5 +41,94 @@ namespace SIG.Web.AppCode.Repositories.Tramites
|
|||||||
DbType.Int32);
|
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.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using SIG.Web.AppCode.Contracts.Bitacora;
|
using SIG.Web.AppCode.Contracts.Bitacora;
|
||||||
|
using SIG.Web.AppCode.Contracts.Documentos;
|
||||||
using SIG.Web.AppCode.Contracts.Fraccionamientos;
|
using SIG.Web.AppCode.Contracts.Fraccionamientos;
|
||||||
using SIG.Web.AppCode.Infrastructure.Transactions;
|
using SIG.Web.AppCode.Infrastructure.Transactions;
|
||||||
using SIG.Web.AppCode.Models.Bitacora;
|
using SIG.Web.AppCode.Models.Bitacora;
|
||||||
@@ -21,11 +22,13 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
|||||||
private readonly IFraccionamientoGisRepository _repository;
|
private readonly IFraccionamientoGisRepository _repository;
|
||||||
private readonly IFraccionamientoGisFileStore _fileStore;
|
private readonly IFraccionamientoGisFileStore _fileStore;
|
||||||
private readonly IBitacoraService _bitacoraService;
|
private readonly IBitacoraService _bitacoraService;
|
||||||
|
private readonly ITramiteDocumentoService _tramiteDocumentoService;
|
||||||
|
|
||||||
public FraccionamientoGisService(
|
public FraccionamientoGisService(
|
||||||
IFraccionamientoGisRepository repository,
|
IFraccionamientoGisRepository repository,
|
||||||
IFraccionamientoGisFileStore fileStore,
|
IFraccionamientoGisFileStore fileStore,
|
||||||
IBitacoraService bitacoraService)
|
IBitacoraService bitacoraService,
|
||||||
|
ITramiteDocumentoService tramiteDocumentoService)
|
||||||
{
|
{
|
||||||
if (repository == null)
|
if (repository == null)
|
||||||
{
|
{
|
||||||
@@ -42,9 +45,15 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
|||||||
throw new ArgumentNullException("bitacoraService");
|
throw new ArgumentNullException("bitacoraService");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tramiteDocumentoService == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("tramiteDocumentoService");
|
||||||
|
}
|
||||||
|
|
||||||
_repository = repository;
|
_repository = repository;
|
||||||
_fileStore = fileStore;
|
_fileStore = fileStore;
|
||||||
_bitacoraService = bitacoraService;
|
_bitacoraService = bitacoraService;
|
||||||
|
_tramiteDocumentoService = tramiteDocumentoService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DbResult<FraccionamientoGisViewModel> Get(
|
public DbResult<FraccionamientoGisViewModel> Get(
|
||||||
@@ -260,6 +269,41 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
|||||||
{
|
{
|
||||||
_fileStore.Save(gisContext, content);
|
_fileStore.Save(gisContext, content);
|
||||||
fileWasWritten = true;
|
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);
|
bool linksChanged = !LinksEqual(previousLinks, links);
|
||||||
@@ -428,6 +472,31 @@ namespace SIG.Web.AppCode.Services.Fraccionamientos
|
|||||||
fileWasDeleted = true;
|
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 =
|
DbResult<long> auditResult =
|
||||||
_bitacoraService.Registrar(
|
_bitacoraService.Registrar(
|
||||||
FraccionamientoBitacoraFactory.CreateStageGisFileDelete(
|
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 Nombre { get; set; }
|
||||||
public string Titulo { get; set; }
|
public string Titulo { get; set; }
|
||||||
public string Descripcion { get; set; }
|
public string Descripcion { get; set; }
|
||||||
|
public string Valor { get; set; }
|
||||||
public int Orden { get; set; }
|
public int Orden { get; set; }
|
||||||
public bool Visible { get; set; } = true;
|
public bool Visible { get; set; } = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -324,46 +324,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</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>
|
</ContentTemplate>
|
||||||
</ajax:TabPanel>
|
</ajax:TabPanel>
|
||||||
|
|
||||||
@@ -590,10 +551,85 @@
|
|||||||
</span>
|
</span>
|
||||||
</HeaderTemplate>
|
</HeaderTemplate>
|
||||||
<ContentTemplate>
|
<ContentTemplate>
|
||||||
<div class="fraction-empty-panel">
|
<section class="fraction-content-card">
|
||||||
<i class="fa fa-clipboard"></i>
|
<div class="fraction-card-heading">
|
||||||
<p>Los trámites recientes se muestran en la pestaña Etapas.</p>
|
<h3>Trámites del fraccionamiento</h3>
|
||||||
</div>
|
</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>
|
</ContentTemplate>
|
||||||
</ajax:TabPanel>
|
</ajax:TabPanel>
|
||||||
|
|
||||||
@@ -618,12 +654,137 @@
|
|||||||
<HeaderTemplate>
|
<HeaderTemplate>
|
||||||
<i class="fa fa-file-text-o"></i>
|
<i class="fa fa-file-text-o"></i>
|
||||||
Documentos
|
Documentos
|
||||||
|
<span class="badge">
|
||||||
|
<asp:Literal ID="LitDocumentCount" runat="server" />
|
||||||
|
</span>
|
||||||
</HeaderTemplate>
|
</HeaderTemplate>
|
||||||
<ContentTemplate>
|
<ContentTemplate>
|
||||||
<div class="fraction-empty-panel">
|
<section class="fraction-content-card">
|
||||||
<i class="fa fa-file-text-o"></i>
|
<div class="fraction-card-heading">
|
||||||
<p>No hay documentos registrados.</p>
|
<h3>Documentos del fraccionamiento</h3>
|
||||||
</div>
|
</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>
|
</ContentTemplate>
|
||||||
</ajax:TabPanel>
|
</ajax:TabPanel>
|
||||||
|
|
||||||
@@ -647,10 +808,253 @@
|
|||||||
</div>
|
</div>
|
||||||
</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"
|
<sig:BitacoraGrid ID="UcBitacoraDetalle"
|
||||||
runat="server"
|
runat="server"
|
||||||
Titulo="Bitácora"
|
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."
|
TextoVacio="No hay movimientos registrados para este fraccionamiento."
|
||||||
RegistrosPorPagina="20"
|
RegistrosPorPagina="20"
|
||||||
ScrollsParaCambiarPagina="3" />
|
ScrollsParaCambiarPagina="3" />
|
||||||
@@ -925,6 +1329,76 @@
|
|||||||
</div>
|
</div>
|
||||||
</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"
|
<div id="ModalStageGis"
|
||||||
class="modal fade fraction-modal"
|
class="modal fade fraction-modal"
|
||||||
tabindex="-1"
|
tabindex="-1"
|
||||||
@@ -1383,6 +1857,14 @@
|
|||||||
window.SIGDetail.hideModal('#ModalStageProgress');
|
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.showStageGis = function () {
|
||||||
window.SIGDetail.initializeModal('#ModalStageGis');
|
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