Continuación: archivo
bin/class.selector.servicios.php
Lo invoco para que cambie los valores de cada combo. Es invocado en
mods/cambio.servicios.php y en
mods/combos.cambio.servicios.php Código PHP:
<?php
class SelectorProgramaServicios {
public $seleccion = 0;
public $programa = 0;
public $origen = 0;
public $datos = array();
public $bases = array();
//SERVICIO BASE...
public function ServicioBase($cn) {
$origen = $this->origen;
switch ($origen) {
case 1:
$this->ProgramaServicio($cn);
break;
default:
$this->Proveedor($cn);
$this->Ciudad($cn);
$this->TipoServicio($cn);
$this->CategoriaServicio($cn);
$this->Servicio($cn);
$this->Acomodaciones($cn);
break;
}
return $this->datos;
}
//SELECCION DE DATOS DEL SERVICIO...
public function Selecciones($cn) {
$seleccion = $this->seleccion;
switch ($seleccion) {
case 1:
$this->Ciudad($cn);
$this->TipoServicio($cn);
$this->CategoriaServicio($cn);
$this->Servicio($cn);
$this->Acomodaciones($cn);
break;
case 2:
$this->TipoServicio($cn);
$this->CategoriaServicio($cn);
$this->Servicio($cn);
$this->Acomodaciones($cn);
break;
case 3:
$this->CategoriaServicio($cn);
$this->Servicio($cn);
$this->Acomodaciones($cn);
break;
case 4:
$this->Servicio($cn);
$this->Acomodaciones($cn);
break;
case 5:
$this->Acomodaciones($cn);
break;
}
return $this->datos;
}
//PROVEEDOR...
private function Proveedor($cn) {
$datos = $this->datos;
$origen = $this->origen;
$llaves = array_keys($datos["Servicios"]);
foreach ($llaves as $llave) {
$PVSID = $llave;
}
switch ($origen) {
case 1:
$limite = "AND s.tiposervicio NOT IN (2)";
break;
default:
$limite = "";
break;
}
$bloques = array(
0 => "SELECT DISTINCT p.id AS id",
1 => "FROM proveedores p INNER JOIN servicios s ON (s.proveedor = p.id)",
2 => "INNER JOIN tarifarios t ON (s.id = t.servicio) WHERE s.estado = 1 AND s.eliminado = 0",
3 => "{$limite}",
4 => "ORDER BY p.nombrecomercial LIMIT 1"
);
$sql = implode(" ", $bloques);
$rs = mysql_query($sql, $cn);
while ($ma = mysql_fetch_array($rs)) {
$datos["Servicios"][$PVSID]["Proveedor"] = $ma["id"];
}
$ma = "";
mysql_free_result($rs);
$this->datos = $datos;
}
//CIUDAD...
private function Ciudad($cn) {
$datos = $this->datos;
$origen = $this->origen;
$llaves = array_keys($datos["Servicios"]);
foreach ($llaves as $llave) {
$PVSID = $llave;
}
switch ($origen) {
case 1:
$limite = "AND s.tiposervicio NOT IN (2)";
break;
default:
$limite = "";
break;
}
$bloques = array(
0 => "SELECT DISTINCT c.id AS id",
1 => "FROM ciudades c INNER JOIN servicios s ON (s.ciudad = c.id)",
2 => "INNER JOIN tarifarios t ON (s.id = t.servicio) WHERE s.estado = 1",
3 => "AND s.eliminado = 0 AND s.proveedor = {$datos["Servicios"][$PVSID]["Proveedor"]}",
4 => "{$limite}",
5 => "ORDER BY c.nombre LIMIT 1"
);
$sql = implode(" ", $bloques);
$rs = mysql_query($sql, $cn);
while ($ma = mysql_fetch_array($rs)) {
$datos["Servicios"][$PVSID]["Ciudad"] = $ma["id"];
}
$ma = "";
mysql_free_result($rs);
$this->datos = $datos;
}
//TIPO DE SERVICIO...
private function TipoServicio($cn) {
$datos = $this->datos;
$origen = $this->origen;
$llaves = array_keys($datos["Servicios"]);
foreach ($llaves as $llave) {
$PVSID = $llave;
}
switch ($origen) {
case 1:
$limite = "AND ts.id NOT IN (2)";
break;
default:
$limite = "";
break;
}
$bloques = array(
0 => "SELECT DISTINCT ts.id AS id",
1 => "FROM tiposservicio ts INNER JOIN servicios s ON (s.tiposervicio = ts.id)",
2 => "INNER JOIN tarifarios t ON (s.id = t.servicio) WHERE s.estado = 1 AND",
3 => "s.eliminado = 0 AND s.proveedor = {$datos["Servicios"][$PVSID]["Proveedor"]} AND",
4 => "s.ciudad = {$datos["Servicios"][$PVSID]["Ciudad"]}",
5 => "{$limite}",
6 => "ORDER BY ts.nombre LIMIT 1"
);
$sql = implode(" ", $bloques);
$rs = mysql_query($sql, $cn);
while ($ma = mysql_fetch_array($rs)) {
$datos["Servicios"][$PVSID]["TipoServicio"] = $ma["id"];
}
$ma = "";
mysql_free_result($rs);
$this->datos = $datos;
}
//CATEGORIA DEL SERVICIO...
private function CategoriaServicio($cn) {
$datos = $this->datos;
$llaves = array_keys($datos["Servicios"]);
foreach ($llaves as $llave) {
$PVSID = $llave;
}
$bloques = array(
0 => "SELECT DISTINCT cs.id AS id FROM categoriasservicio cs",
1 => "INNER JOIN servicios s ON (s.categoriaservicio = cs.id) INNER JOIN tarifarios t ON (s.id = t.servicio)",
2 => "WHERE s.estado = 1 AND s.eliminado = 0 AND s.proveedor = {$datos["Servicios"][$PVSID]["Proveedor"]}",
3 => "AND s.ciudad = {$datos["Servicios"][$PVSID]["Ciudad"]} AND s.tiposervicio = {$datos["Servicios"][$PVSID]["TipoServicio"]}",
4 => "ORDER BY cs.id DESC LIMIT 1"
);
$sql = implode(" ", $bloques);
$rs = mysql_query($sql, $cn);
while ($ma = mysql_fetch_array($rs)) {
$datos["Servicios"][$PVSID]["CategoriaServicio"] = $ma["id"];
}
$ma = "";
mysql_free_result($rs);
if ($datos["Servicios"][$PVSID]["CategoriaServicio"]) {
//TODO OK...
} else {
$datos["Servicios"][$PVSID]["CategoriaServicio"] = 0;
}
$this->datos = $datos;
}
//SERVICIO...
private function Servicio($cn) {
$datos = $this->datos;
$llaves = array_keys($datos["Servicios"]);
foreach ($llaves as $llave) {
$PVSID = $llave;
}
$bloques = array(
0 => "SELECT DISTINCT s.id AS id, s.valorservicio AS valorservicio, s.precioobligatorio AS obligatorio",
1 => "FROM servicios s INNER JOIN tarifarios t ON (s.id = t.servicio) WHERE s.estado = 1 AND",
2 => "s.eliminado = 0 AND s.proveedor = {$datos["Servicios"][$PVSID]["Proveedor"]}",
3 => "AND s.ciudad = {$datos["Servicios"][$PVSID]["Ciudad"]}",
4 => "AND s.tiposervicio = {$datos["Servicios"][$PVSID]["TipoServicio"]}",
5 => "AND s.categoriaservicio = {$datos["Servicios"][$PVSID]["CategoriaServicio"]}",
5 => "ORDER BY s.descripcion LIMIT 1"
);
$sql = implode(" ", $bloques);
$rs = mysql_query($sql, $cn);
while ($ma = mysql_fetch_array($rs)) {
$datos["Servicios"][$PVSID]["Servicio"] = $ma["id"];
$datos["Servicios"][$PVSID]["ValorServicio"] = $ma["valorservicio"];
$datos["Servicios"][$PVSID]["Obligatorio"] = $ma["obligatorio"];
}
$ma = "";
mysql_free_result($rs);
$this->datos = $datos;
}
//HABITACION / ACOMODACION...
private function Acomodaciones($cn) {
$datos = $this->datos;
$llaves = array_keys($datos["Servicios"]);
foreach ($llaves as $llave) {
$PVSID = $llave;
}
$bloques = array(
0 => "SELECT DISTINCT ac.id AS id FROM acomodaciones ac INNER JOIN tarifarios t",
1 => "ON (t.acomodacion = ac.id) INNER JOIN servicios s ON (t.servicio = s.id) WHERE s.estado = 1 AND s.eliminado = 0",
2 => "AND s.proveedor = {$datos["Servicios"][$PVSID]["Proveedor"]} AND s.ciudad = {$datos["Servicios"][$PVSID]["Ciudad"]}",
3 => "AND s.tiposervicio = {$datos["Servicios"][$PVSID]["TipoServicio"]} AND s.categoriaservicio = {$datos["Servicios"][$PVSID]["CategoriaServicio"]}",
4 => "AND s.id = {$datos["Servicios"][$PVSID]["Servicio"]} ORDER BY ac.nombre LIMIT 1"
);
$sql = implode(" ", $bloques);
$rs = mysql_query($sql, $cn);
while ($ma = mysql_fetch_array($rs)) {
$datos["Servicios"][$PVSID]["Acomodacion"] = $ma["id"];
}
$ma = "";
mysql_free_result($rs);
$this->datos = $datos;
}
}
?>
Bueno, después de haber publicado todos los archivos necesarios, el punto es que al llamar a la funcion
$("#lb_proveedor").change() en JQuery, lo hace bien, pero solo lo hace una vez, lo mismo para con
$("#lb_ciudad").change(), basta que se invoque a cualquiera de los dos, ya no vuelve a ejecutarse el
$.post. Todo eso es desde
servicios.php. El resultado del JQuery se imprime en un div de nombre
"frm_servicios".
No completé el resto de los eventos para cada combo, ya que si funciona una sola vez, es que hay algo que está mal. Agradesco toda respuesta de antemano a mi consulta...
Saludos...