- Se añadió a la tabla de recibos una nueva columna que contiene solamente un checkbox para cada fila, este para que el usuario pueda seleccionar los recibos que quiere pagar. Para hacer esto solamente fue necesario añadir el siguiente código:
<asp:TemplateField HeaderText="" ShowHeader="False">
<ItemTemplate>
<asp:CheckBox runat="server" ID="checkBoxRecibo"/>
</ItemTemplate>
<ItemStyle Width="3%"/>
</asp:TemplateField>
- Este código se añade dentro de la etiqueta columna del gridView.
- Se añadió un botón para pagar los recibos, este se encuentra bajo la tabla de recibos al lado derecho.
<asp:Button runat="server" CssClass="botonRecibos" ID="botonPagarRecibos" onClick="botonPagarRecibos_Click" Text="Pagar"/>
- Se añadio el siguiente codigo css para este boton:
.botonRecibos {
width: 7%;
margin-left: 93%;
margin-top: 1%;
background-color: #6c7ae0;
color: white;
border: none;
}
- Se añadió un nuevo div que contiene una nueva tabla, esta no está visible inicialmente ya que solo se utiliza para cuando el usuario va a confirmar los recibos que desea pagar.
- Cuando el usuario selecciona los recibos a pagar se muestra este div junto con la tabla que contiene todos los recibos seleccionados mas los moratorio.
- Bajo la tabla se muestra un botón de pagar y uno de cancelar, si el usuario cancela el pago se oculta el div y se llama al SP correspondiente. En caso de que el usuario de click en pagar, se llama al SP correspondiente, se oculta el div y se actualiza la tablade recibos pendientes.
- Estos dos botones se añadieron en un mismo div, el cual tiene la propiedad "display-flex" y "justify-content: flex-end;", esto para que ambos botones aparezcan bajo la tabla, al mismo nivel y al lado derecho.
- En la función que se llama al dar click en el botón de pagar se añadió código para recorrer toda la tabla y tomar los recibos que el usuario marco para pagar. Por ahora no se verifica que no haya fechas viejas sin pagar.
- Se hizo usa de la pagina https://www.cssmatic.com/box-shadow para crear un efecto de sombra alrededor del div para confirmar el pago.
- Inicialmente se tenia planeado utilizar un json para guardar los id de los recibos que el usuario iba a pagar. Esto resulto complicado porque la libreria que se estaba usando no generaba el json de la manera en que lo necesitábamos.
- Inicialmente el json iba seguir el formato "id=1, id=2..." pero al investigar un poco se encontro que en los json no se debe usar el mismo nombre en la llave varias veces, en su lugar lo que se hace es colocar la llave solo una vez, y que su valor sea un arreglo, de esta manera "id=[1,2,3...,n]".
- Otro problema que surgió es como manejar el jason del lado de la base de datos, no se encontraba cual era el formato correcto que utilizaba sql server, en un el SP lo que hacia era tomar cada pareja de llave y valor como un solo valor, por esto se decidió que lo mejor era pasar como parámetro una tabla que tuviera los id de los recibos.
- Para crear la tabla en la parte lógica se utilizo código que ya ha sido mencionado en publicaciones anteriores.
DataTable idRecibos = new DataTable();
idRecibos.Columns.Add(new DataColumn("id", typeof(int)) { AutoIncrement = true, AutoIncrementSeed = 1, AutoIncrementStep = 1 }) ;
idRecibos.Columns.Add("idRecibo", typeof(int));
foreach (GridViewRow row in GridRecibos.Rows)
{
CheckBox checkBoxPagar = (CheckBox)row.FindControl("checkBoxRecibo");
if (checkBoxPagar.Checked)
{
int rowIndex = Convert.ToInt32(row.RowIndex);
int idRecibo = Convert.ToInt32(GridRecibos.DataKeys[rowIndex]["id"]);
DataRow newRow = idRecibos.NewRow();
newRow["idRecibo"] = idRecibo;
idRecibos.Rows.Add(newRow);
}
}
- Este código saca de la tabla de recibos pendientes todos los recibos que el usuario haya marcado, pero no toma en cuenta si quedaron recibos intermedios sin seleccionar.
- Algo importante que no se había mencionado antes es la forma en que se crea una columna identity, como se puede ver, para hacer esto solo se pasan tres parámetros a la creación de la columna, siendo el primero el que indica que queremos que se autoincremente, el segundo el valor inicial, y el tercero el incremento.
- Esta tabla solo se debe añadir como parámetro a la llamada del SP de la siguiente manera:
cmd.Parameters.Add("@inIdRecibos", SqlDbType.Structured).Value = idRecibos;
- Se conectaron los sp que calculan los recibos moratorios, el sp que cancela el pago, y el sp que confirma el pago.
- La llamar al primer SP se muestra correctamente en la parte web los recibos seleccionados, junto con los moratorios
- Se encontró un problema en los SP que confirman y cancelan el pago, el problema se dio porque al llamar al primer SP se usaba una tabla variable para guardar los recibos que el usuario había seleccionado. El problema con esta tabla temporal es que cuando el cliente cierra la conexión con la base de datos la tabla es eliminada.
- La solución para este problema fue crear una tabla normal y utilizar en lugar de la tabla temporal
- Después de este arreglo los SP de confirmar pago y cancelar pago funcionan correctamente.
Se trabajo durante 6 horas.
Referencias:
No hay comentarios:
Publicar un comentario