Procesamiento de Datos desde Formulario de Tipo Control: Utilizando macros de consulta e inserción a Base de Datos
El procesamiento de los datos se puede realizar a nivel de Base de Datos con Procedimientos Almacenados, Triggers, Funciones y demás; o a nivel Aplicación. Dependiendo de qué tan grande sea el volumen de datos a manejar y la interacción que el usuario deba tener una u otra pueden sobresalir como mejor opción en ciertos casos.
El procesamiento de datos que mostraremos como ejemplo es el realizado a nivel Aplicación, para el mismo tomaremos ciertos parámetros de la Base de Datos.
Por otro lado el usuario ingresará otros parametros para luego terminar realizando un cálculo e insertando el resultado en Base de Datos.
Utilizaremos las siguientes Macros Scriptcase para facilitar nuestro trabajo:
- SC_LOOKUP http://www.scriptcase.net/docs/es_es/v81/scriptcase-macros/scriptcase-macros#sc_lookup
- SC_EXEC_SQL http://www.scriptcase.net/docs/es_es/v81/scriptcase-macros/scriptcase-macros#sc_exec_sql
En cuanto a estructura de Base de Datos, tenemos dos tablas las cuales se muestran a continuación:
La tabla “Parameter” que se encuentra en una Base de Datos PostgreSQL.
La tabla “Payment” que se encuentra en una Base de Datos MySQL
El proceso que haremos busca calcular el porcentaje de interés que tendrá que pagar el usuario teniendo como base el monto deseado y la cantidad de cuotas (meses) que desea para devolverlo.
Dentro de la tabla “Parameter” tenemos el porcentaje de interés que abonará el usuario en base a la cantidad de meses que elija en nuestra aplicación.
Ya dentro de nuestro proyecto en el Scriptcase creamos las conexiones que necesitaremos para consultar a la tabla en PostgreSQL (conn_Parameter) e insertar luego en la tabla MySQL (conn_Sales).
Creamos a continuación una aplicación de tipo control de forma a agregar los campos que deseamos mostrar al usuario y luego realizar el proceso que calculará cuando deberá pagar el usuario y cuanto pagará cada mes incluyendo ya los intereses.
El siguiente paso es crear los campos necesarios para que el usuario ingrese su nombre, monto deseado y la cantidad de cuotas. Nuestra aplicación al tener esos datos realizará una consulta a la tabla Parameter y retornará el porcentaje de interés a aplicar para la cantidad de cuotas seleccionada y el total a abonar.
Según lo anterior la aplicación tendrá 5 (cinco) campos, para ello damos clic en Control -> Campos -> “Nuevo Campo”, ingresamos la cantidad de campos a crear y damos clic en “Siguiente”.
Ingresamos los datos para cada campo:
Usuario:
- Tipo: Texto
- Nombre: User
- Etiqueta: User
Monto:
- Tipo: Decimal
- Nombre: Amount
- Etiqueta: Amount
Cantidad de Cuotas (Meses):
- Tipo: Select
- Nombre: Months
- Etiqueta: Months
Interés a abonar:
- Tipo: Decimal
- Nombre: Interest
- Etiqueta: Interest
Total a devolver:
- Tipo: Decimal
- Nombre: Total
- Etiqueta: Total
Por último damos clic en “Crear” de forma a guardar las configuraciones de cada campo creado.
El siguiente paso es marcar como requeridos los campos de Usuario, Monto y Meses; y como solo lectura los campos del Porcentaje de Interés y el Total a devolver, esto lo hacemos desde la opción ubicada en Control -> Editar Campos.
En el campo {Months} debemos mostrar los meses disponibles de forma a que el usuario elija en cuantos meses desea devolver el importe, por ello habíamos seleccionado el tipo de campo SELECT.
De forma a mostrar los datos se debe configurar la sección “Edición de Lookup” primeramente indicando en “Elija la conexión” la conexión a base de datos que queremos utilizar para obtener los datos. Luego damos clic en “Crear Select” y elegimos la tabla en cuestión, el id y el campo a mostrar.
Con esto ya tenemos finalizada la parte visual y podemos empezar a trabajar con los procesos.
Obtener Porcentaje de Interes a aplicar:
En la sección Programación -> Métodos PHP damos clic en “Nuevo Método”, le indicamos el nombre que queremos darle (en nuestro ejemplo “ObtainParameter”) y clic en “Crear”.
Una vez que tengamos la ventana de codificación abierta, para evitar tener que escribir todo el código que necesitamos podemos insertar el código de ejemplo que más se aproxima a nuestro objetivo. Como pueden observar en la siguiente imagen, utilizamos el código de “Selecting fields from another table” (Seleccionando campos de otra tabla) que utiliza la macro SC_LOOKUP y realizamos las modificaciones en base a la misma.
Al código que Scriptcase nos proporciona, modificamos la Sentencia SQL que obtendrá los meses y el interés relacionado, además de agregar como filtro el campo {Months} que hace referencia al mes elegido por el usuario en nuestra aplicación.
Los parámetros que recibe la macro SC_LOOKUP son:
- Nombre del Dataset a crear (en el ejemplo rsMonth).
- Sentencia SQL (en el ejemplo la sentencia está almacenada en la variable $check_sql).
- Conexión a Base de Datos a utilizar (en el ejemplo requerimos conectarnos al Postgres, por lo que la conexión debe ser conn_Parameter).
El siguiente paso es renombrar las variables y campos a ser asignados luego de que retorne los valores la macro y los almacene dentro del Dataset (rsMonth).
Creamos una variable de sesión ([NumofMonths]) de forma a almacenar la cantidad de cuotas o meses elegido, ya que el campo {Months} tiene el id de la tabla.
También asignamos al campo {Interest} el porcentaje de interés que se aplicará según el mes que el usuario eligió.
En caso de que la consulta no retorne valores, le asignaremos por defecto también valores y así prevemos cualquier mal funcionamiento no contemplado.
Calcular Monto Total con el Interés:
Para ello no es necesario realizar consultas a la Base de Datos, ya que asignamos los valores anteriormente obtenidos a los campos de nuestra aplicación.
Ya teniendo las dos funciones PHP que nos permitirán realizar los cálculos deseados, nos queda llamarlos cuando el usuario cambie el monto y/o la cantidad de meses deseados. Ello lo logramos utilizando los Eventos Ajax y eligiendo el evento deseado, para nuestro caso el evento es “onChange” lo que permitirá realizar el cálculo ante cualquier modificación.
Luego seleccionar el campo deseado {Amount} y el evento onChange damos clic en “Crear Evento” de manera a que nos permita editar el mismo. Dentro agregamos la llamada a ambas funciones de forma a que realice ambos procesos.
Lo mismo repetimos con el campo {Months} de forma a que actualice los datos cada vez que cambie la cantidad de meses.
El último paso es codificar el evento onValidateSuccess de manera a que inserte los pagos que el usuario deberá realizar teniendo en cuenta los meses y el importe con interés a abonar a lo largo de ese periodo.
Para ello primero calculamos y asignamos a la variable de sesión [Amount] el importe que deberá abonar cada mes.
Con un ciclo for deberemos recorrer el proceso de inserción tantas veces como meses haya seleccionado el usuario.
En la siguiente imagen se puede apreciar que también tenemos un código de ejemplo para la inserción. Tomando ese código como base, actualizamos los datos de nombre de tabla y columnas según nuestra estructura. Todo esto lo hacemos dentro de un bucle if que nos permitirá controlar que no se trate de la última cuota.
Los parámetros que recibe la macro SC_EXEC_SQL utilizada para la inserción son:
- Sentencia SQL (en el ejemplo la sentencia está almacenada en la variable $insert_sql).
- Conexión a Base de Datos a utilizar (en el ejemplo la tabla Payment está en el MySQL, por lo que la conexión debe ser conn_Sales).
Cabe mencionar que esta macro nos permite ejecutar cualquier Instrucción SQL en el Servidor de Base de Datos, por lo que es muy útil incluso para ejecutar procedimientos almacenados o incluso tareas de mantenimiento.
Para la última cuota daremos un trato especial debido a que el redondeo de la división algunas veces puede no ser exacto, lo que ocasionaría al final que el Total a abonar y la suma de cuotas no sean iguales.
De manera a conseguir que la suma de las cuotas y el total a abonar sean iguales aplicamos a la última cuota la diferencia entre el Total a abonar y la suma de cuotas previamente insertadas.
Luego de terminar de escribir el código, si le damos ejecutar, nos aparecerá la pantalla blanca solicitando que asignemos un valor a las variables utilizadas en la aplicación.
Debido a que nuestras variables son para uso interno y no esperamos recibirlas, debemos cambiar el Tipo de Variable a “Salida”. Con eso evitaremos que nos vuelva a pedir al ejecutar la aplicación.
Ahora sí, al darle ejecutar nos debe mostrar una aplicación similar a la de la siguiente imagen donde nos solicitará ingresar Usuario, Monto y seleccionar la cantidad de meses.
Al dar clic en el botón de confirmación el proceso deberá insertar dentro de la tabla Payment una fila por cada cuota que debe abonar el usuario tal y como vemos en la siguiente imagen.
Vea más contenido en nuestro blog.
También podría gustarte…