viernes, 24 de julio de 2009

Problemas con Javascript

Hay veces que la programación y diseño de sistemas web es divertido. Otras veces, no lo es. Y hoy es un día que realmente no lo fue. Todo por culpa del maldito JAVASCRIPT.

Estaba laburando en el rediseño del funcionamiento del sistema de boleterías de VIATICKET, unidad de negocio de la empresa donde me desempeño laboralmente. Desde ayer que estaba desdoblando el pago del importe final en dos: el importe de las entradas, y el importe del Cargo por Servicio (el famoso Service Charge). Eso es fácil, ya que tengo que crear un campo mas en el HTML para guardar este dato. Hasta este punto vamos bien.

El problema surge cuando quiero aplicar el descuento. La onda es que el descuento se aplica en el importe de los tickets y no en el service charge. Bien. O sea: aplico descuento en el importe de las entradas y luego sumo el cargo por servicio. Bien. La teoria esta perfecta. Pongo manos a la obra. Este es el codigo antes de los cambios:

function CalculaDescuento() {
....var subtotal_local = form.SubTotal.value
....var descuento_local = form.Descuento.value
....var importe_con_descuento = subtotal_local - (subtotal_local * descuento_local / 100)
....form.Total.value = (Math.round(importe_con_descuento*100)/100).toFixed(2);
....if (descuento_local == 0) {
........form.Total.value = (Math.round(subtotal_local*100)/100).toFixed(2);
....}
}

Con toda felicidad, aplico los cambios en el formulario y cambio el Javascript para que haga esto. Bien. Seguimos con las pruebas. Lo pruebo y... no anda. Bueno, lo reviso. Pero esta todo bien. Lo reviso nuevamente y miro a ver que falla. Y esta todo bien. La felicidad dejo de estar en mi cara.

Hoy estoy toda la mañana con el puto Javascript y nada. Cambio la función para que o haga de otra manera, y nada. Aplico los métodos 'int()' y 'parseInt()' para convertir la variable en formato numérico (por si el idiota no entiende el formato de lo obtenido), y nada. Convierto todas las variables en 'int', y nada. Uso el método 'alert' por todos lados para debugear, y no veo nada malo. Ya me estaba desesperando y empezando a putear al jodido codigo.

Estuve googleando por todos lados y lo que estaba haciendo era lo correcto. Entonces: ¿por que mierda estaba fallando?

Ya cerca de la desesperación y agarrar el monitor para revolearlo por las escaleras del décimo piso mientras lo voy escupiendo, hago lo que se hace en casos donde la lógica no tiene sentido: aplicar cosas que seguramente no sirven.

Entre tantas cosas probadas, se me da por multiplicar la variable conflictiva y que deberia ser tomada, por 1. Quedando la linea de la siguiente manera:

var importe_con_descuento = cargos_local*1 + subtotal_local*1 - (subtotal_local * descuento_local / 100)

¿Y que paso? El hijo de puta funcionó. Si, funcionó. Con ese cambio boludo, funciono. Este es el codigo final:

function CalculaDescuento() {
....var cargos_local = form.TotalCargos.value
....var subtotal_local = form.SubTotal.value
....var descuento_local = form.Descuento.value
....var importe_con_descuento = cargos_local*1 + subtotal_local*1 - (subtotal_local * descuento_local / 100)
....form.Total.value = (Math.round(importe_con_descuento*100)/100).toFixed(2);
....if (descuento_local == 0) {
........form.Total.value = (Math.round((subtotal_local*1 + cargos_local*1)*100)/100).toFixed(2);
...}
}

La verdad no me gusta como quedó. Pero anda. Tengo que seguir con otras cosas, asi que no lo voy a depurar ahora. Pero cuando pueda, lo retoco para que quede mejor.

Y espero que funcione bien...

No hay comentarios.: