gclientes fraccionamientos

This commit is contained in:
Jorge Luis caudillo esparza
2026-09-28 16:36:20 -07:00
parent 24bcb27d07
commit 2f52c96067
9 changed files with 1094 additions and 60 deletions

View File

@@ -18,13 +18,40 @@ namespace SIG.Web.AppCode.Contracts.Clientes
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<int> GuardarFraccionamientoConEtapa(
ModeloFraccionamiento fraccionamiento,
ModeloEtapaFraccionamiento etapa,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<int> GuardarFraccionamiento(
ModeloFraccionamiento fraccionamiento,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<List<ModeloEtapaFraccionamiento>> ListarEtapas(
int cveFraccionamiento,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<ModeloEtapaFraccionamiento> ObtenerEtapa(
int cveFraccionamientoEtapa,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<int> GuardarEtapa(
ModeloEtapaFraccionamiento etapa,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<List<TramiteClienteListado>> ListarTramites(
int cveFraccionamiento,
int cveUsuarioEjecuta,
string nombreDominio);
DbResult<List<TramiteClienteListado>> ListarTramites(
int cveFraccionamiento,
int? cveFraccionamientoEtapa,
int cveUsuarioEjecuta,
string nombreDominio);

View File

@@ -99,6 +99,85 @@ namespace SIG.Web.AppCode.Services.Clientes
return resultado;
}
public DbResult<int> GuardarFraccionamientoConEtapa(
ModeloFraccionamiento fraccionamiento,
ModeloEtapaFraccionamiento etapa,
int cveUsuarioEjecuta,
string nombreDominio)
{
UserSessionModel usuario;
DbResult<bool> acceso = ValidarCliente(
cveUsuarioEjecuta,
out usuario);
if (!acceso.Success)
{
return Fallo<int>(acceso.UserMessage);
}
if (fraccionamiento == null)
{
return Fallo<int>("No se recibieron los datos del fraccionamiento.");
}
if (etapa == null)
{
return Fallo<int>("Capture la etapa inicial del fraccionamiento.");
}
fraccionamiento.CveFraccionamiento = 0;
fraccionamiento.CveCliente = usuario.CveCliente;
fraccionamiento.CveEstatus = 1;
fraccionamiento.EsActivo = true;
etapa.CveFraccionamientoEtapa = 0;
etapa.CveCliente = usuario.CveCliente;
etapa.CveFraccionamiento = 0;
etapa.EsActivo = true;
return _servicioFraccionamiento.GuardarConEtapas(
fraccionamiento,
new List<ModeloEtapaFraccionamiento> { etapa },
cveUsuarioEjecuta,
nombreDominio);
}
public DbResult<int> GuardarFraccionamiento(
ModeloFraccionamiento fraccionamiento,
int cveUsuarioEjecuta,
string nombreDominio)
{
if (fraccionamiento == null ||
fraccionamiento.CveFraccionamiento <= 0)
{
return Fallo<int>("Seleccione un fraccionamiento válido.");
}
DbResult<ModeloFraccionamiento> actual =
ObtenerFraccionamiento(
fraccionamiento.CveFraccionamiento,
cveUsuarioEjecuta,
nombreDominio);
if (!actual.Success || actual.Data == null)
{
return DbResult<int>.Fail(
actual.UserMessage,
actual.TechnicalMessage,
actual.Exception);
}
actual.Data.Fraccionamiento = fraccionamiento.Fraccionamiento;
actual.Data.Ubicacion = fraccionamiento.Ubicacion;
actual.Data.Hectareas = fraccionamiento.Hectareas;
return _servicioFraccionamiento.Guardar(
actual.Data,
cveUsuarioEjecuta,
nombreDominio);
}
public DbResult<List<ModeloEtapaFraccionamiento>> ListarEtapas(
int cveFraccionamiento,
int cveUsuarioEjecuta,
@@ -122,10 +201,93 @@ namespace SIG.Web.AppCode.Services.Clientes
nombreDominio);
}
public DbResult<ModeloEtapaFraccionamiento> ObtenerEtapa(
int cveFraccionamientoEtapa,
int cveUsuarioEjecuta,
string nombreDominio)
{
UserSessionModel usuario;
DbResult<bool> acceso = ValidarCliente(
cveUsuarioEjecuta,
out usuario);
if (!acceso.Success)
{
return Fallo<ModeloEtapaFraccionamiento>(acceso.UserMessage);
}
DbResult<ModeloEtapaFraccionamiento> resultado =
_servicioFraccionamiento.ObtenerEtapa(
cveFraccionamientoEtapa,
cveUsuarioEjecuta,
nombreDominio);
if (!resultado.Success || resultado.Data == null)
{
return resultado;
}
if (resultado.Data.CveCliente != usuario.CveCliente)
{
return Fallo<ModeloEtapaFraccionamiento>(
"No tiene acceso a la etapa seleccionada.");
}
return resultado;
}
public DbResult<int> GuardarEtapa(
ModeloEtapaFraccionamiento etapa,
int cveUsuarioEjecuta,
string nombreDominio)
{
if (etapa == null || etapa.CveFraccionamiento <= 0)
{
return Fallo<int>("Seleccione un fraccionamiento válido.");
}
DbResult<ModeloFraccionamiento> fraccionamiento =
ObtenerFraccionamiento(
etapa.CveFraccionamiento,
cveUsuarioEjecuta,
nombreDominio);
if (!fraccionamiento.Success || fraccionamiento.Data == null)
{
return DbResult<int>.Fail(
fraccionamiento.UserMessage,
fraccionamiento.TechnicalMessage,
fraccionamiento.Exception);
}
etapa.CveFraccionamientoEtapa = 0;
etapa.CveCliente = fraccionamiento.Data.CveCliente;
etapa.EsActivo = true;
return _servicioFraccionamiento.GuardarEtapa(
etapa,
cveUsuarioEjecuta,
nombreDominio);
}
public DbResult<List<TramiteClienteListado>> ListarTramites(
int cveFraccionamiento,
int cveUsuarioEjecuta,
string nombreDominio)
{
return ListarTramites(
cveFraccionamiento,
null,
cveUsuarioEjecuta,
nombreDominio);
}
public DbResult<List<TramiteClienteListado>> ListarTramites(
int cveFraccionamiento,
int? cveFraccionamientoEtapa,
int cveUsuarioEjecuta,
string nombreDominio)
{
UserSessionModel usuario;
DbResult<bool> acceso = ValidarCliente(
@@ -149,10 +311,27 @@ namespace SIG.Web.AppCode.Services.Clientes
fraccionamiento.UserMessage);
}
if (cveFraccionamientoEtapa.HasValue)
{
DbResult<ModeloEtapaFraccionamiento> etapa =
ObtenerEtapa(
cveFraccionamientoEtapa.Value,
cveUsuarioEjecuta,
nombreDominio);
if (!etapa.Success ||
etapa.Data == null ||
etapa.Data.CveFraccionamiento != cveFraccionamiento)
{
return Fallo<List<TramiteClienteListado>>(
"La etapa seleccionada no pertenece al fraccionamiento.");
}
}
DbResult<List<TramiteSolicitudModel>> solicitudes =
_servicioTramites.ListForDevelopment(
cveFraccionamiento,
null,
cveFraccionamientoEtapa,
null,
null,
cveUsuarioEjecuta,
@@ -169,7 +348,7 @@ namespace SIG.Web.AppCode.Services.Clientes
DbResult<List<TramiteDocumentoSolicitudModel>> documentos =
_servicioDocumentos.ListarRequisitos(
cveFraccionamiento,
null,
cveFraccionamientoEtapa,
null,
cveUsuarioEjecuta,
nombreDominio);
@@ -186,7 +365,7 @@ namespace SIG.Web.AppCode.Services.Clientes
_repositorio.ListarPagos(
usuario.CveCliente,
cveFraccionamiento,
null,
cveFraccionamientoEtapa,
null,
cveUsuarioEjecuta,
nombreDominio);

View File

@@ -4,22 +4,56 @@
<asp:Content ID="ContenidoEncabezado" ContentPlaceHolderID="H" runat="server">
<style>
.sig-cliente-desarrollo-cabecera {
.sig-cliente-desarrollos-acciones {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
width: 100%;
justify-content: flex-end;
margin-bottom: 12px;
}
.sig-cliente-desarrollo-cabecera a {
.sig-cliente-fraccionamiento-nombre {
font-weight: 600;
}
.sig-cliente-desarrollo-resumen {
.sig-cliente-fraccionamiento-resumen {
color: #7f8c8d;
font-size: 12px;
margin-left: 8px;
}
.sig-cliente-etapa-enlace {
font-weight: 600;
}
.sig-cliente-fila-fraccionamiento > td {
background: #eef6fb;
vertical-align: middle !important;
}
.sig-cliente-fila-etapa > td:first-child {
padding-left: 30px;
}
.sig-cliente-columna-acciones {
width: 1%;
white-space: nowrap;
text-align: center;
}
.sig-cliente-accion-icono {
align-items: center;
display: inline-flex;
height: 28px;
justify-content: center;
margin: 0 2px;
padding: 0;
width: 28px;
}
.sig-cliente-modal-separador {
border-top: 1px solid #e7ecf1;
margin-top: 15px;
padding-top: 15px;
}
</style>
</asp:Content>
@@ -27,6 +61,15 @@
<asp:UpdatePanel ID="UpDesarrollos" runat="server"
UpdateMode="Conditional" ChildrenAsTriggers="true">
<ContentTemplate>
<div class="sig-cliente-desarrollos-acciones">
<asp:LinkButton ID="BtnNuevoFraccionamiento" runat="server"
CssClass="btn blue" CausesValidation="false"
OnClick="NuevoFraccionamiento_Click">
<i class="fa fa-plus" aria-hidden="true"></i>
Agregar fraccionamiento
</asp:LinkButton>
</div>
<div class="table-responsive">
<asp:GridView ID="GvDesarrollos" runat="server"
AutoGenerateColumns="false"
@@ -34,41 +77,260 @@
CssClass="table table-hover Widthall sig-grid-agrupado"
DataKeyNames="CveFraccionamiento,CveFraccionamientoEtapa,EsFraccionamiento"
EmptyDataText="No tiene fraccionamientos activos."
OnRowDataBound="EnlazarFila">
OnRowDataBound="EnlazarFila"
OnRowCommand="Desarrollos_Comando">
<Columns>
<asp:TemplateField HeaderStyle-CssClass="sig-grid-columna-grupo"
ItemStyle-CssClass="sig-grid-columna-grupo">
<asp:TemplateField HeaderText="Fraccionamiento">
<ItemTemplate>
<div class="sig-cliente-desarrollo-cabecera">
<div>
<asp:HyperLink runat="server"
Text='<%# Server.HtmlEncode(Convert.ToString(Eval("Fraccionamiento"))) %>'
NavigateUrl='<%# UrlDetalleFraccionamiento(Eval("CveFraccionamiento")) %>' />
<span class="sig-cliente-desarrollo-resumen">
<%#: ResumenFraccionamiento(Container.DataItem) %>
</span>
</div>
<asp:Panel runat="server"
Visible='<%# Convert.ToBoolean(Eval("EsFraccionamiento")) %>'>
<button type="button"
class="btn btn-circle btn-sm default sig-grid-alternar-grupo-accion sig-accion-icono"
title="Mostrar u ocultar etapas" aria-label="Mostrar u ocultar etapas"
class="btn btn-circle btn-xs default sig-grid-alternar-grupo-accion sig-cliente-accion-icono"
title="Mostrar u ocultar etapas"
aria-label="Mostrar u ocultar etapas"
aria-expanded="true">
<i class="fa fa-chevron-up sig-grid-icono-agrupacion" aria-hidden="true"></i>
</button>
</div>
<asp:Literal runat="server" Mode="Encode"
Text='<%# Eval("Fraccionamiento") %>' />
<span class="sig-cliente-fraccionamiento-resumen">
<%#: ResumenFraccionamiento(Container.DataItem) %>
</span>
</asp:Panel>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Etapa">
<ItemTemplate>
<asp:HyperLink runat="server"
CssClass="sig-cliente-etapa-enlace"
Visible='<%# !Convert.ToBoolean(Eval("EsFraccionamiento")) %>'
Text='<%# Server.HtmlEncode(Convert.ToString(Eval("Etapa"))) %>'
NavigateUrl='<%# UrlDetalleEtapa(Eval("CveFraccionamientoEtapa")) %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Hectáreas">
<ItemTemplate>
<asp:Literal runat="server" Mode="Encode"
Text='<%# FormatearHectareas(Container.DataItem) %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Fideicomiso">
<ItemTemplate>
<asp:CheckBox runat="server" Enabled="false"
Visible='<%# !Convert.ToBoolean(Eval("EsFraccionamiento")) %>'
Checked='<%# Convert.ToBoolean(Eval("Fideicomiso")) %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Activa">
<ItemTemplate>
<asp:CheckBox runat="server" Enabled="false"
Checked='<%# Convert.ToBoolean(Eval("EsActivo")) %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Acciones"
HeaderStyle-CssClass="sig-cliente-columna-acciones"
ItemStyle-CssClass="sig-cliente-columna-acciones">
<ItemTemplate>
<asp:Panel runat="server"
Visible='<%# Convert.ToBoolean(Eval("EsFraccionamiento")) %>'>
<asp:LinkButton runat="server"
CommandName="EditarFraccionamiento"
CausesValidation="false"
CssClass="btn btn-circle btn-xs blue sig-cliente-accion-icono"
ToolTip="Editar fraccionamiento"
aria-label="Editar fraccionamiento">
<i class="fa fa-pencil" aria-hidden="true"></i>
</asp:LinkButton>
<asp:LinkButton runat="server"
CommandName="AgregarEtapa"
CausesValidation="false"
CssClass="btn btn-circle btn-xs blue sig-cliente-accion-icono"
ToolTip="Agregar etapa"
aria-label="Agregar etapa">
<i class="fa fa-plus" aria-hidden="true"></i>
</asp:LinkButton>
</asp:Panel>
<asp:HyperLink runat="server"
Visible='<%# !Convert.ToBoolean(Eval("EsFraccionamiento")) %>'
NavigateUrl='<%# UrlDetalleEtapa(Eval("CveFraccionamientoEtapa")) %>'
CssClass="btn btn-circle btn-xs blue sig-cliente-accion-icono"
ToolTip="Ver etapa"
aria-label="Ver etapa">
<i class="fa fa-eye" aria-hidden="true"></i>
</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Etapa" HeaderText="Etapa"
ItemStyle-CssClass="sig-grid-columna-dato-principal" />
<asp:BoundField DataField="Hectareas" HeaderText="Hectáreas"
DataFormatString="{0:N2}" />
<asp:CheckBoxField DataField="Fideicomiso" HeaderText="Fideicomiso" />
<asp:CheckBoxField DataField="EsActivo" HeaderText="Activa" />
</Columns>
</asp:GridView>
</div>
</ContentTemplate>
</asp:UpdatePanel>
<div id="ModalFraccionamientoCliente" class="modal fade" tabindex="-1"
role="dialog" aria-labelledby="TituloModalFraccionamientoCliente">
<div class="modal-dialog modal-lg">
<asp:UpdatePanel ID="UpModalFraccionamiento" runat="server"
UpdateMode="Conditional" ChildrenAsTriggers="true">
<ContentTemplate>
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-label="Cerrar">&times;</button>
<h4 id="TituloModalFraccionamientoCliente" class="modal-title">
<asp:Literal ID="LitTituloFraccionamiento" runat="server" Mode="Encode" />
</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="form-group col-md-8">
<asp:Label runat="server" AssociatedControlID="TxtFraccionamiento"
Text="Fraccionamiento *" />
<asp:TextBox ID="TxtFraccionamiento" runat="server"
CssClass="form-control" MaxLength="200" />
</div>
<div class="form-group col-md-4">
<asp:Label runat="server" AssociatedControlID="TxtHectareasFraccionamiento"
Text="Hectáreas" />
<asp:TextBox ID="TxtHectareasFraccionamiento" runat="server"
CssClass="form-control" MaxLength="15" />
</div>
</div>
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="TxtUbicacion"
Text="Ubicación" />
<asp:TextBox ID="TxtUbicacion" runat="server"
CssClass="form-control" MaxLength="500" />
</div>
<asp:Panel ID="PnlEtapaInicial" runat="server"
CssClass="sig-cliente-modal-separador">
<h4>Etapa inicial</h4>
<div class="row">
<div class="form-group col-md-7">
<asp:Label runat="server" AssociatedControlID="TxtEtapaInicial"
Text="Etapa *" />
<asp:TextBox ID="TxtEtapaInicial" runat="server"
CssClass="form-control" MaxLength="150" />
</div>
<div class="form-group col-md-3">
<asp:Label runat="server" AssociatedControlID="TxtHectareasEtapaInicial"
Text="Hectáreas" />
<asp:TextBox ID="TxtHectareasEtapaInicial" runat="server"
CssClass="form-control" MaxLength="15" />
</div>
<div class="form-group col-md-2">
<div class="checkbox">
<asp:CheckBox ID="ChkFideicomisoEtapaInicial" runat="server"
Text=" Fideicomiso" />
</div>
</div>
</div>
</asp:Panel>
</div>
<div class="modal-footer">
<button type="button" class="btn default" data-dismiss="modal">Cerrar</button>
<asp:Button ID="BtnGuardarFraccionamiento" runat="server"
Text="Guardar" CssClass="btn blue"
OnClick="GuardarFraccionamiento_Click" />
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</div>
<div id="ModalEtapaCliente" class="modal fade" tabindex="-1"
role="dialog" aria-labelledby="TituloModalEtapaCliente">
<div class="modal-dialog">
<asp:UpdatePanel ID="UpModalEtapa" runat="server"
UpdateMode="Conditional" ChildrenAsTriggers="true">
<ContentTemplate>
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-label="Cerrar">&times;</button>
<h4 id="TituloModalEtapaCliente" class="modal-title">Agregar etapa</h4>
</div>
<div class="modal-body">
<p>
Fraccionamiento:
<strong><asp:Literal ID="LitFraccionamientoEtapa" runat="server" Mode="Encode" /></strong>
</p>
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="TxtEtapa"
Text="Etapa *" />
<asp:TextBox ID="TxtEtapa" runat="server"
CssClass="form-control" MaxLength="150" />
</div>
<div class="form-group">
<asp:Label runat="server" AssociatedControlID="TxtHectareasEtapa"
Text="Hectáreas" />
<asp:TextBox ID="TxtHectareasEtapa" runat="server"
CssClass="form-control" MaxLength="15" />
</div>
<div class="checkbox">
<asp:CheckBox ID="ChkFideicomisoEtapa" runat="server"
Text=" Fideicomiso" />
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn default" data-dismiss="modal">Cerrar</button>
<asp:Button ID="BtnGuardarEtapa" runat="server"
Text="Guardar etapa" CssClass="btn blue"
OnClick="GuardarEtapa_Click" />
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</div>
</asp:Content>
<asp:Content ID="ContenidoScripts" ContentPlaceHolderID="J" runat="server">
<script>
(function () {
"use strict";
function nombreEtapaPredeterminado(nombreFraccionamiento) {
var nombre = (nombreFraccionamiento || "").trim();
return nombre.length ? nombre + " I" : "";
}
function inicializarNombreEtapa() {
var fraccionamiento = document.getElementById("<%= TxtFraccionamiento.ClientID %>");
var etapa = document.getElementById("<%= TxtEtapaInicial.ClientID %>");
if (!fraccionamiento || !etapa ||
fraccionamiento.getAttribute("data-sig-etapa-inicializada") === "1") {
return;
}
fraccionamiento.setAttribute("data-sig-etapa-inicializada", "1");
fraccionamiento.addEventListener("input", function () {
if (etapa.getAttribute("data-sig-nombre-automatico") === "1") {
etapa.value = nombreEtapaPredeterminado(fraccionamiento.value);
}
});
etapa.addEventListener("input", function () {
etapa.setAttribute("data-sig-nombre-automatico", "0");
});
}
if (window.Sys && Sys.Application) {
Sys.Application.add_load(inicializarNombreEtapa);
} else if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", inicializarNombreEtapa);
} else {
inicializarNombreEtapa();
}
}());
</script>
</asp:Content>

View File

@@ -5,6 +5,7 @@ using System.Web.UI;
using System.Web.UI.WebControls;
using SIG.Web.AppCode.Configuration;
using SIG.Web.AppCode.Infrastructure.WebForms;
using SIG.Web.AppCode.Models.Common;
using SIG.Web.AppCode.Models.Fraccionamientos;
using SIG.Web.AppCode.Security;
@@ -12,6 +13,22 @@ namespace SIG.Web.Pages.Clientes
{
public partial class Desarrollos : ClsPaginaBase
{
#region Propiedades
private int CveFraccionamientoEdicion
{
get { return (int?)ViewState["CveFraccionamientoEdicion"] ?? 0; }
set { ViewState["CveFraccionamientoEdicion"] = value; }
}
private int CveFraccionamientoEtapaActual
{
get { return (int?)ViewState["CveFraccionamientoEtapaActual"] ?? 0; }
set { ViewState["CveFraccionamientoEtapaActual"] = value; }
}
#endregion
protected void Page_Load(object origen, EventArgs argumentos)
{
if (!IsPostBack)
@@ -39,35 +56,227 @@ namespace SIG.Web.Pages.Clientes
if (fila.EsFraccionamiento)
{
argumentos.Row.CssClass = "sig-grid-grupo";
argumentos.Row.CssClass =
(argumentos.Row.CssClass + " sig-grid-grupo sig-cliente-fila-fraccionamiento").Trim();
argumentos.Row.Attributes["data-sig-group-row"] = "1";
argumentos.Row.Attributes["data-sig-group-id"] = grupo;
for (int indiceCelda = 0; indiceCelda < argumentos.Row.Cells.Count; indiceCelda++)
{
string claseCelda = indiceCelda == 0
? "sig-grid-columna-grupo"
: "sig-grid-columna-normal";
argumentos.Row.Cells[indiceCelda].CssClass =
(argumentos.Row.Cells[indiceCelda].CssClass + " " + claseCelda).Trim();
}
argumentos.Row.Attributes["data-sig-level"] = "2";
argumentos.Row.Attributes["data-sig-level"] = "2";
argumentos.Row.Attributes["data-sig-expanded-default"] = "true";
return;
}
argumentos.Row.CssClass =
(argumentos.Row.CssClass + " sig-grid-fila-dato").Trim();
(argumentos.Row.CssClass + " sig-grid-fila-dato sig-cliente-fila-etapa").Trim();
argumentos.Row.Attributes["data-sig-item-row"] = "1";
argumentos.Row.Attributes["data-sig-parent-group"] = grupo;
argumentos.Row.Attributes["data-sig-level"] = "1";
}
protected string UrlDetalleFraccionamiento(object clave)
protected void NuevoFraccionamiento_Click(object origen, EventArgs argumentos)
{
return ResolveUrl("~/Pages/Clientes/FraccionamientoDetalle.aspx?id=") +
Convert.ToInt32(clave).ToString(CultureInfo.InvariantCulture);
CveFraccionamientoEdicion = 0;
LitTituloFraccionamiento.Text = "Agregar fraccionamiento";
TxtFraccionamiento.Text = string.Empty;
TxtUbicacion.Text = string.Empty;
TxtHectareasFraccionamiento.Text = string.Empty;
TxtEtapaInicial.Text = string.Empty;
TxtEtapaInicial.Attributes["data-sig-nombre-automatico"] = "1";
TxtHectareasEtapaInicial.Text = string.Empty;
ChkFideicomisoEtapaInicial.Checked = false;
PnlEtapaInicial.Visible = true;
UpModalFraccionamiento.Update();
RegistraScript("$('#ModalFraccionamientoCliente').modal('show');");
}
protected void Desarrollos_Comando(
object origen,
GridViewCommandEventArgs argumentos)
{
if (argumentos.CommandName != "EditarFraccionamiento" &&
argumentos.CommandName != "AgregarEtapa")
{
return;
}
var control = argumentos.CommandSource as Control;
var fila = control == null
? null
: control.NamingContainer as GridViewRow;
if (fila == null || fila.RowIndex < 0)
{
return;
}
int cveFraccionamiento = Convert.ToInt32(
GvDesarrollos.DataKeys[fila.RowIndex].Values["CveFraccionamiento"]);
DbResult<ModeloFraccionamiento> consulta =
AppServices.ServicioPortalCliente.ObtenerFraccionamiento(
cveFraccionamiento,
CurrentUser.CveUsuario,
CurrentUser.NombreDominio);
if (!consulta.Success || consulta.Data == null)
{
Alert(
consulta.Success
? "No se encontró el fraccionamiento."
: consulta.UserMessage,
TipoMensaje.MsgAdvertencia);
return;
}
if (argumentos.CommandName == "EditarFraccionamiento")
{
AbrirEdicionFraccionamiento(consulta.Data);
return;
}
AbrirAltaEtapa(consulta.Data);
}
protected void GuardarFraccionamiento_Click(object origen, EventArgs argumentos)
{
decimal? hectareasFraccionamiento;
if (!LeerHectareas(
TxtHectareasFraccionamiento.Text,
out hectareasFraccionamiento))
{
Alert("Capture hectáreas válidas.", TipoMensaje.MsgAdvertencia);
return;
}
DbResult<int> resultado;
if (CveFraccionamientoEdicion <= 0)
{
decimal? hectareasEtapa;
if (!LeerHectareas(
TxtHectareasEtapaInicial.Text,
out hectareasEtapa))
{
Alert(
"Capture hectáreas válidas para la etapa.",
TipoMensaje.MsgAdvertencia);
return;
}
string nombreEtapa = TxtEtapaInicial.Text.Trim();
if (nombreEtapa.Length == 0)
{
nombreEtapa = TxtFraccionamiento.Text.Trim() + " I";
}
resultado = AppServices.ServicioPortalCliente.GuardarFraccionamientoConEtapa(
new ModeloFraccionamiento
{
Fraccionamiento = TxtFraccionamiento.Text,
Ubicacion = TxtUbicacion.Text,
Hectareas = hectareasFraccionamiento
},
new ModeloEtapaFraccionamiento
{
Etapa = nombreEtapa,
Hectareas = hectareasEtapa,
Fideicomiso = ChkFideicomisoEtapaInicial.Checked,
EsActivo = true
},
CurrentUser.CveUsuario,
CurrentUser.NombreDominio);
}
else
{
resultado = AppServices.ServicioPortalCliente.GuardarFraccionamiento(
new ModeloFraccionamiento
{
CveFraccionamiento = CveFraccionamientoEdicion,
Fraccionamiento = TxtFraccionamiento.Text,
Ubicacion = TxtUbicacion.Text,
Hectareas = hectareasFraccionamiento
},
CurrentUser.CveUsuario,
CurrentUser.NombreDominio);
}
if (!resultado.Success)
{
Alert(resultado.UserMessage, TipoMensaje.MsgAdvertencia);
return;
}
bool eraNuevo = CveFraccionamientoEdicion <= 0;
CveFraccionamientoEdicion = 0;
Cargar();
RegistraScript("$('#ModalFraccionamientoCliente').modal('hide');");
Alert(
eraNuevo
? "Fraccionamiento registrado."
: "Fraccionamiento actualizado.",
TipoMensaje.ToastExito);
}
protected void GuardarEtapa_Click(object origen, EventArgs argumentos)
{
if (CveFraccionamientoEtapaActual <= 0)
{
Alert(
"Seleccione un fraccionamiento válido.",
TipoMensaje.MsgAdvertencia);
return;
}
decimal? hectareas;
if (!LeerHectareas(TxtHectareasEtapa.Text, out hectareas))
{
Alert("Capture hectáreas válidas.", TipoMensaje.MsgAdvertencia);
return;
}
DbResult<int> resultado = AppServices.ServicioPortalCliente.GuardarEtapa(
new ModeloEtapaFraccionamiento
{
CveFraccionamiento = CveFraccionamientoEtapaActual,
Etapa = TxtEtapa.Text,
Hectareas = hectareas,
Fideicomiso = ChkFideicomisoEtapa.Checked,
EsActivo = true
},
CurrentUser.CveUsuario,
CurrentUser.NombreDominio);
if (!resultado.Success)
{
Alert(resultado.UserMessage, TipoMensaje.MsgAdvertencia);
return;
}
CveFraccionamientoEtapaActual = 0;
Cargar();
RegistraScript("$('#ModalEtapaCliente').modal('hide');");
Alert("Etapa registrada.", TipoMensaje.ToastExito);
}
protected string UrlDetalleEtapa(object clave)
{
if (clave == null || clave == DBNull.Value)
{
return string.Empty;
}
int cveEtapa = Convert.ToInt32(clave, CultureInfo.InvariantCulture);
if (cveEtapa <= 0)
{
return string.Empty;
}
return ResolveUrl("~/Pages/Clientes/EtapaDetalle.aspx?etapa=") +
cveEtapa.ToString(CultureInfo.InvariantCulture);
}
protected string ResumenFraccionamiento(object objeto)
@@ -86,11 +295,56 @@ namespace SIG.Web.Pages.Clientes
fila.NumeroEtapas);
}
protected string FormatearHectareas(object objeto)
{
var fila = objeto as ModeloFilaDesarrollos;
if (fila == null)
{
return string.Empty;
}
decimal? hectareas = fila.EsFraccionamiento
? fila.HectareasFraccionamiento
: fila.Hectareas;
return hectareas.HasValue
? hectareas.Value.ToString("N2", CultureInfo.CurrentCulture)
: string.Empty;
}
private void AbrirEdicionFraccionamiento(ModeloFraccionamiento fraccionamiento)
{
CveFraccionamientoEdicion = fraccionamiento.CveFraccionamiento;
LitTituloFraccionamiento.Text = "Editar fraccionamiento";
TxtFraccionamiento.Text = fraccionamiento.Fraccionamiento;
TxtUbicacion.Text = fraccionamiento.Ubicacion;
TxtHectareasFraccionamiento.Text = fraccionamiento.Hectareas.HasValue
? fraccionamiento.Hectareas.Value.ToString(
CultureInfo.InvariantCulture)
: string.Empty;
PnlEtapaInicial.Visible = false;
UpModalFraccionamiento.Update();
RegistraScript("$('#ModalFraccionamientoCliente').modal('show');");
}
private void AbrirAltaEtapa(ModeloFraccionamiento fraccionamiento)
{
CveFraccionamientoEtapaActual = fraccionamiento.CveFraccionamiento;
LitFraccionamientoEtapa.Text = fraccionamiento.Fraccionamiento;
TxtEtapa.Text = string.Empty;
TxtHectareasEtapa.Text = string.Empty;
ChkFideicomisoEtapa.Checked = false;
UpModalEtapa.Update();
RegistraScript("$('#ModalEtapaCliente').modal('show');");
}
private void Cargar()
{
var resultado = AppServices.ServicioPortalCliente.ListarDesarrollos(
CurrentUser.CveUsuario,
CurrentUser.NombreDominio);
DbResult<List<ModeloFilaDesarrollos>> resultado =
AppServices.ServicioPortalCliente.ListarDesarrollos(
CurrentUser.CveUsuario,
CurrentUser.NombreDominio);
GvDesarrollos.DataSource = resultado.Success
? resultado.Data
@@ -103,5 +357,31 @@ namespace SIG.Web.Pages.Clientes
Alert(resultado.UserMessage, TipoMensaje.MsgAdvertencia);
}
}
private static bool LeerHectareas(string texto, out decimal? hectareas)
{
hectareas = null;
if (string.IsNullOrWhiteSpace(texto))
{
return true;
}
decimal valor;
if (!decimal.TryParse(
texto.Trim(),
NumberStyles.AllowDecimalPoint,
CultureInfo.InvariantCulture,
out valor) ||
valor < 0m ||
valor > 999999999.9999m)
{
return false;
}
hectareas = valor;
return true;
}
}
}

View File

@@ -0,0 +1,92 @@
<%@ Page Title="Detalle de etapa" Language="C#" MasterPageFile="~/Site.master"
AutoEventWireup="true" CodeFile="EtapaDetalle.aspx.cs"
Inherits="SIG.Web.Pages.Clientes.EtapaDetalle" %>
<%@ Register TagPrefix="cliente" TagName="Tramites" Src="~/UserControl/Clientes/TramitesCliente.ascx" %>
<%@ Register TagPrefix="cliente" TagName="Documentos" Src="~/UserControl/Clientes/DocumentosCliente.ascx" %>
<%@ Register TagPrefix="cliente" TagName="Pagos" Src="~/UserControl/Clientes/PagosCliente.ascx" %>
<asp:Content ID="ContenidoEncabezado" ContentPlaceHolderID="H" runat="server">
<style>
.sig-cliente-etapa-resumen {
background: #fff;
border: 1px solid #e7ecf1;
margin-bottom: 15px;
padding: 12px;
}
.sig-cliente-etapa-resumen h3 {
margin-top: 0;
}
.sig-cliente-etapa-datos {
display: flex;
flex-wrap: wrap;
gap: 8px 18px;
}
.sig-cliente-etapa-regresar {
margin-bottom: 10px;
}
</style>
</asp:Content>
<asp:Content ID="ContenidoPrincipal" ContentPlaceHolderID="C" runat="server">
<asp:Panel ID="PanelContenido" runat="server">
<div class="sig-cliente-etapa-regresar">
<asp:HyperLink ID="LnkDesarrollos" runat="server"
NavigateUrl="~/Pages/Clientes/Desarrollos.aspx">
<i class="fa fa-arrow-left" aria-hidden="true"></i>
Regresar a desarrollos
</asp:HyperLink>
</div>
<div class="sig-cliente-etapa-resumen">
<h3>
<asp:Literal ID="LitEtapa" runat="server" Mode="Encode" />
</h3>
<div class="sig-cliente-etapa-datos">
<span>
<strong>Fraccionamiento:</strong>
<asp:HyperLink ID="LnkFraccionamiento" runat="server" />
</span>
<span>
<strong>Hectáreas:</strong>
<asp:Literal ID="LitHectareas" runat="server" Mode="Encode" />
</span>
<span>
<strong>Avance:</strong>
<asp:Literal ID="LitAvance" runat="server" Mode="Encode" />
</span>
<span>
<strong>Fideicomiso:</strong>
<asp:Literal ID="LitFideicomiso" runat="server" Mode="Encode" />
</span>
</div>
</div>
<ajax:TabContainer ID="Pestanas" runat="server"
Width="100%" AutoPostBack="false"
CssClass="ajax__tab_xp">
<ajax:TabPanel ID="PestanaTramites" runat="server" HeaderText="Trámites">
<ContentTemplate>
<cliente:Tramites ID="UcTramites" runat="server" />
</ContentTemplate>
</ajax:TabPanel>
<ajax:TabPanel ID="PestanaDocumentos" runat="server" HeaderText="Documentos">
<ContentTemplate>
<cliente:Documentos ID="UcDocumentos" runat="server" />
</ContentTemplate>
</ajax:TabPanel>
<ajax:TabPanel ID="PestanaPagos" runat="server" HeaderText="Pagos">
<ContentTemplate>
<cliente:Pagos ID="UcPagos" runat="server" />
</ContentTemplate>
</ajax:TabPanel>
</ajax:TabContainer>
</asp:Panel>
</asp:Content>
<asp:Content ID="ContenidoScripts" ContentPlaceHolderID="J" runat="server">
</asp:Content>

View File

@@ -0,0 +1,123 @@
using System;
using System.Globalization;
using SIG.Web.AppCode.Configuration;
using SIG.Web.AppCode.Infrastructure.WebForms;
using SIG.Web.AppCode.Models.Common;
using SIG.Web.AppCode.Models.Fraccionamientos;
using SIG.Web.AppCode.Security;
namespace SIG.Web.Pages.Clientes
{
public partial class EtapaDetalle : ClsPaginaBase
{
#region Propiedades
private int CveFraccionamientoEtapaActual
{
get { return (int?)ViewState["CveFraccionamientoEtapaActual"] ?? 0; }
set { ViewState["CveFraccionamientoEtapaActual"] = value; }
}
#endregion
protected void Page_Load(object origen, EventArgs argumentos)
{
if (IsPostBack)
{
return;
}
int cveFraccionamientoEtapa;
if (!int.TryParse(
Request.QueryString["etapa"],
NumberStyles.Integer,
CultureInfo.InvariantCulture,
out cveFraccionamientoEtapa) ||
cveFraccionamientoEtapa <= 0)
{
PanelContenido.Visible = false;
Alert(
"Seleccione una etapa válida.",
TipoMensaje.MsgAdvertencia);
return;
}
CveFraccionamientoEtapaActual = cveFraccionamientoEtapa;
Cargar();
}
private void Cargar()
{
DbResult<ModeloEtapaFraccionamiento> etapa =
AppServices.ServicioPortalCliente.ObtenerEtapa(
CveFraccionamientoEtapaActual,
CurrentUser.CveUsuario,
CurrentUser.NombreDominio);
if (!etapa.Success || etapa.Data == null)
{
PanelContenido.Visible = false;
Alert(
etapa.Success
? "No se encontró la etapa."
: etapa.UserMessage,
TipoMensaje.MsgAdvertencia);
return;
}
DbResult<ModeloFraccionamiento> fraccionamiento =
AppServices.ServicioPortalCliente.ObtenerFraccionamiento(
etapa.Data.CveFraccionamiento,
CurrentUser.CveUsuario,
CurrentUser.NombreDominio);
if (!fraccionamiento.Success || fraccionamiento.Data == null)
{
PanelContenido.Visible = false;
Alert(
fraccionamiento.Success
? "No se encontró el fraccionamiento."
: fraccionamiento.UserMessage,
TipoMensaje.MsgAdvertencia);
return;
}
ModeloEtapaFraccionamiento datosEtapa = etapa.Data;
ModeloFraccionamiento datosFraccionamiento = fraccionamiento.Data;
LitEtapa.Text = datosEtapa.Etapa;
LitHectareas.Text = datosEtapa.Hectareas.HasValue
? datosEtapa.Hectareas.Value.ToString(
"N2",
CultureInfo.CurrentCulture)
: string.Empty;
LitAvance.Text = datosEtapa.Avance.ToString(
"N2",
CultureInfo.CurrentCulture) + " %";
LitFideicomiso.Text = datosEtapa.Fideicomiso == true
? "Sí"
: "No";
LnkFraccionamiento.Text = datosFraccionamiento.Fraccionamiento;
LnkFraccionamiento.NavigateUrl = ResolveUrl(
"~/Pages/Clientes/FraccionamientoDetalle.aspx?id=") +
datosFraccionamiento.CveFraccionamiento.ToString(
CultureInfo.InvariantCulture);
Page.Title = datosEtapa.Etapa;
UcTramites.Cargar(
datosFraccionamiento.CveFraccionamiento,
datosEtapa.CveFraccionamientoEtapa);
UcDocumentos.Cargar(
datosFraccionamiento.CveFraccionamiento,
datosEtapa.CveFraccionamientoEtapa,
false);
UcPagos.Cargar(
datosFraccionamiento.CveFraccionamiento,
datosEtapa.CveFraccionamientoEtapa,
false);
}
}
}

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
@@ -30,6 +30,12 @@ namespace SIG.Web.UserControl.Clientes
set { ViewState["CveFraccionamientoFijo"] = value; }
}
private int? CveFraccionamientoEtapaFija
{
get { return (int?)ViewState["CveFraccionamientoEtapaFija"]; }
set { ViewState["CveFraccionamientoEtapaFija"] = value; }
}
private bool MostrarFiltrosActual
{
get { return (bool?)ViewState["MostrarFiltrosActual"] ?? false; }
@@ -81,13 +87,27 @@ namespace SIG.Web.UserControl.Clientes
public void Cargar(
int? cveFraccionamiento,
bool mostrarFiltros)
{
Cargar(
cveFraccionamiento,
null,
mostrarFiltros);
}
public void Cargar(
int? cveFraccionamiento,
int? cveFraccionamientoEtapa,
bool mostrarFiltros)
{
CveFraccionamientoFijo = cveFraccionamiento;
CveFraccionamientoEtapaFija = cveFraccionamientoEtapa;
MostrarFiltrosActual = mostrarFiltros;
PanelFiltros.Visible = mostrarFiltros;
FiltroDocumentosCliente filtro = FiltroActual;
filtro.CveFraccionamiento = cveFraccionamiento ?? filtro.CveFraccionamiento;
filtro.CveFraccionamiento =
cveFraccionamiento ?? filtro.CveFraccionamiento;
filtro.CveFraccionamientoEtapa = cveFraccionamientoEtapa;
FiltroActual = filtro;
Refrescar();
@@ -110,8 +130,12 @@ namespace SIG.Web.UserControl.Clientes
{
FiltroActual = new FiltroDocumentosCliente
{
CveFraccionamiento = CveFraccionamientoFijo ?? LeerClave(DdlFraccionamientoFiltro),
CveFraccionamientoEtapa = LeerClave(DdlEtapaFiltro),
CveFraccionamiento =
CveFraccionamientoFijo ??
LeerClave(DdlFraccionamientoFiltro),
CveFraccionamientoEtapa =
CveFraccionamientoEtapaFija ??
LeerClave(DdlEtapaFiltro),
Agrupacion = string.IsNullOrWhiteSpace(DdlAgrupacionFiltro.SelectedValue)
? null
: DdlAgrupacionFiltro.SelectedValue
@@ -132,7 +156,8 @@ namespace SIG.Web.UserControl.Clientes
filtro.CveFraccionamiento = null;
}
if (!nombres.Contains("Etapa"))
if (!nombres.Contains("Etapa") &&
!CveFraccionamientoEtapaFija.HasValue)
{
filtro.CveFraccionamientoEtapa = null;
}

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
@@ -29,6 +29,12 @@ namespace SIG.Web.UserControl.Clientes
set { ViewState["CveFraccionamientoFijo"] = value; }
}
private int? CveFraccionamientoEtapaFija
{
get { return (int?)ViewState["CveFraccionamientoEtapaFija"]; }
set { ViewState["CveFraccionamientoEtapaFija"] = value; }
}
private bool MostrarFiltrosActual
{
get { return (bool?)ViewState["MostrarFiltrosActual"] ?? false; }
@@ -81,13 +87,27 @@ namespace SIG.Web.UserControl.Clientes
public void Cargar(
int? cveFraccionamiento,
bool mostrarFiltros)
{
Cargar(
cveFraccionamiento,
null,
mostrarFiltros);
}
public void Cargar(
int? cveFraccionamiento,
int? cveFraccionamientoEtapa,
bool mostrarFiltros)
{
CveFraccionamientoFijo = cveFraccionamiento;
CveFraccionamientoEtapaFija = cveFraccionamientoEtapa;
MostrarFiltrosActual = mostrarFiltros;
PanelFiltros.Visible = mostrarFiltros;
FiltroPagosCliente filtro = FiltroActual;
filtro.CveFraccionamiento = cveFraccionamiento ?? filtro.CveFraccionamiento;
filtro.CveFraccionamiento =
cveFraccionamiento ?? filtro.CveFraccionamiento;
filtro.CveFraccionamientoEtapa = cveFraccionamientoEtapa;
FiltroActual = filtro;
Refrescar();
@@ -110,8 +130,12 @@ namespace SIG.Web.UserControl.Clientes
{
FiltroActual = new FiltroPagosCliente
{
CveFraccionamiento = CveFraccionamientoFijo ?? LeerClave(DdlFraccionamientoFiltro),
CveFraccionamientoEtapa = LeerClave(DdlEtapaFiltro),
CveFraccionamiento =
CveFraccionamientoFijo ??
LeerClave(DdlFraccionamientoFiltro),
CveFraccionamientoEtapa =
CveFraccionamientoEtapaFija ??
LeerClave(DdlEtapaFiltro),
Agrupacion = string.IsNullOrWhiteSpace(DdlAgrupacionFiltro.SelectedValue)
? null
: DdlAgrupacionFiltro.SelectedValue
@@ -132,7 +156,8 @@ namespace SIG.Web.UserControl.Clientes
filtro.CveFraccionamiento = null;
}
if (!nombres.Contains("Etapa"))
if (!nombres.Contains("Etapa") &&
!CveFraccionamientoEtapaFija.HasValue)
{
filtro.CveFraccionamientoEtapa = null;
}

View File

@@ -32,11 +32,31 @@ namespace SIG.Web.UserControl.Clientes
}
}
private int? CveFraccionamientoEtapaActual
{
get
{
return (int?)ViewState["CveFraccionamientoEtapaActual"];
}
set
{
ViewState["CveFraccionamientoEtapaActual"] = value;
}
}
#endregion
public void Cargar(int cveFraccionamiento)
{
Cargar(cveFraccionamiento, null);
}
public void Cargar(
int cveFraccionamiento,
int? cveFraccionamientoEtapa)
{
CveFraccionamientoActual = cveFraccionamiento;
CveFraccionamientoEtapaActual = cveFraccionamientoEtapa;
Refrescar();
}
@@ -113,6 +133,7 @@ namespace SIG.Web.UserControl.Clientes
var resultado = AppServices.ServicioPortalCliente.ListarTramites(
CveFraccionamientoActual,
CveFraccionamientoEtapaActual,
usuario.CveUsuario,
usuario.NombreDominio);