app/javascript/controllers/edad_controller.js
import { Controller } from "@hotwired/stimulus"
// Calcula edad, edadactual y rango dada fecha de nacimiento o viceversa
import Msip__Motor from "../msip/motor"
// Conecta con data-controller="sivel2-gen--edad"
export default class extends Controller {
static targets = [
"anionac",
"dianac",
"edad",
"edadactual",
"mesnac",
"rangoedad"
]
connect() {
console.log("Conexion de controlador edades establecida")
}
obtenerNumeroMes(nombreMes) {
return Msip__Motor.MESES.indexOf(nombreMes.toLowerCase());
}
actualizarEdad(event){
let anio = parseInt(this.anionacTarget.value);
let mes = parseInt(this.mesnacTarget.value) - 1;
let dia = parseInt(this.dianacTarget.value);
if (isNaN(mes)) {
mes = 0
}
if (isNaN(dia)) {
dia = 1
}
let formatoFecha = window.formato_fecha;
let selectorCampoFechaCaso =
typeof window.selectorCampoFechaCaso != "undefined" ?
window.selectorCampoFechaCaso : "#caso_fecha"
let campoFechaCaso = document.querySelector(selectorCampoFechaCaso);
if (campoFechaCaso == null) {
alert("No se encontrĂ³ campo con la fecha del caso");
}
let anioCaso, mesCaso, diaCaso;
[anioCaso, mesCaso, diaCaso] = Msip__Motor.partirFechaLocalizada(
campoFechaCaso.value, formatoFecha
);
const hoy = new Date();
let fechaCaso = new Date(anioCaso, mesCaso, diaCaso);
let fechaNacimiento = new Date(anio, mes, dia);
// El campo cambiado fue edad
if (event.target.dataset['sivel2Gen-EdadTarget'] == 'edad') {
let edad = parseInt(this.edadTarget.value)
anio = fechaCaso.getFullYear() - edad
mes = 0
dia = 1
this.anionacTarget.value = anio
}
// El campo cambiado fue edadactual
if (event.target.dataset['sivel2Gen-EdadTarget'] == 'edadactual') {
let edadactual = parseInt(this.edadactualTarget.value)
anio = hoy.getFullYear() - edadactual
mes = 0
dia = 1
this.anionacTarget.value = anio
}
fechaNacimiento = new Date(anio, mes, dia);
let edadactual = hoy.getFullYear() - anio;
let edad = fechaCaso.getFullYear() - anio;
if (hoy.getMonth() < fechaNacimiento.getMonth() ||
(hoy.getMonth() === fechaNacimiento.getMonth() &&
hoy.getDate() < fechaNacimiento.getDate())
) {
edadactual--;
}
if (fechaCaso.getMonth() < fechaNacimiento.getMonth() ||
(fechaCaso.getMonth() === fechaNacimiento.getMonth() &&
fechaCaso.getDate() < fechaNacimiento.getDate())
) {
edad--;
}
if (edad > 0) {
this.edadTarget.value = edad;
} else {
this.edadTarget.value = 0;
}
if (this.hasEdadactualTarget) {
if (edadactual > 0 ) {
this.edadactualTarget.value = edadactual;
} else {
this.edadactualTarget.value = 0;
}
}
const opcionesRangoedad = this.rangoedadTarget.options;
for (let i = 0; i < opcionesRangoedad.length; i++) {
let opcion = this.rangoedadTarget.options[i].text;
let rango = opcion.match(/\d+/g).map(Number);
if (rango.length == 2 && edad >= rango[0] &&
edad <= rango[1]) {
this.rangoedadTarget.selectedIndex = i;
break;
}
if (rango.length == 1 && edad >= rango[0]) {
this.rangoedadTarget.selectedIndex = i;
break;
}
}
}
blanquearFechanac(){
if (event.target.dataset['sivel2Gen-EdadTarget'] == 'rangoedad') {
this.edadTarget.value = null
this.edadactualTarget.value = null
}
if (event.target.dataset['sivel2Gen-EdadTarget'] == 'edad') {
this.rangoedadTarget.value = null
this.edadactualTarget.value = null
}
if (event.target.dataset['sivel2Gen-EdadTarget'] == 'edadactual') {
this.edadTarget.value = null
this.rangoedadTarget.value = null
}
this.anionacTarget.value = null
}
}