Hola!.. después de varios días buscando solución a mi problema, y sin encontrarla, decidí solicitar ayuda en el foro. La situación es la siguiente: Contamos dentro de un formulario con dos ef_editable_fecha, el primero representa a una fecha de inicio y el segundo a una fecha de finalización, el sistema requiere que al colocar estas dos fechas se complete un tercer campo que es un ef_editable_numero en donde debe aparecer la cantidad de meses que existen entre una fecha y la otra.
En un primer momento recurrí a Javascript, al evento validar de la segunda fecha, de esta manera cuando el usuario selecciona a través del almanaque la fecha se dispara el evento y todo funciona bien, pero!.. si el usuario en lugar de ingresar la fecha con el almanaque lo hace manualmente… el evento no se ejecuta…y no pasa nada, además de esto… funciona correctamente si estoy por ingresar a un nuevo registro (llegue a través del botón agregar), pero si voy por el modificar…se completa el formulario con todos los datos del registro que seleccione pero al intentar moverme sobre cualquier otro componente (Por ej ir a otra pestaña) me salta un error que adjunto en una imagen, donde me dice que la fecha final es nula cuando no es asi. Adjunto tambien el código javascript que utilice.
Después se me ocurrió colocar un botón al lado de la segunda fecha que diga “Calcular” y busque en el foro como acomodarlo donde yo quiero…vi algo de redefinir el método generar_botones en una subclase del formulario…la busque, la encontre en
proyectos/toba/2.1.0/php/nucleo/componentes/interface/toba_ei.php pero no veo sencilla la solución.
También podría colocar un check para que el usuario lo tilde y se dispare el evento de calcular, pero no lo veo como una forma elegante para el usuario. Acepto sugerencias y/o correcciones. Gracias!
Estamos trabajando con la versión de toba 2.1.0, sobre Ubuntu 10.10.
function extender_objeto_js()
{
echo "
{$this->objeto_js}.evt__fechabajaoriginal__validar = function()
{
function DateDiff(d1,d2) {
var d1Y = d1.getFullYear();
var d2Y = d2.getFullYear();
var d1M = fechaalta.getMonth();
var d2M = fechahasta.getMonth();
return ((d2M+12*d2Y)-(d1M+12*d1Y));
}
var fechaalta= this.ef('fechaaltacienciaytecnica').fecha();
var fechahasta= this.ef('fechabajaoriginal').fecha();
if (this.ef('fechaaltacienciaytecnica').tiene_estado ()){
if ((fechahasta-fechaalta)<0){
alert ('Fecha de Alta del proyecto debe ser menor que la fecha de finalización');
}else{
this.ef('duracion').set_estado(DateDiff(fechaalta,fechahasta));
this.ef('fechabaja').set_estado(this.ef('fechabajaoriginal').get_estado());
}
}else {
alert ('Primero debe ingresar la fecha de alta del proyecto');
}
}
";
}