public function proceso_reservaRQ($args)
 {
     $args = (array) $args;
     $usuarioRQ = trim($args["Credenciales"]->usuario);
     $passwordRQ = trim($args["Credenciales"]->password);
     //Cargando el modelo usuarios
     $usuarios = $this->loadModel('usuario');
     $var_getUser = $usuarios->getUsuario($usuarioRQ);
     if ($var_getUser == false) {
         throw new SoapFault("Sin registros", null, "Usuario o password son incorrectos");
     } else {
         if (trim($var_getUser[0]->getUsuario()) == $usuarioRQ) {
             if (trim($var_getUser[0]->getClave()) == $passwordRQ) {
                 $reserva = $this->loadModel('reserva');
                 $nombre_principal = trim($args["Parametros"]->nombre_principal);
                 $email_principal = trim($args["Parametros"]->email_principal);
                 $telefono_principal = trim($args["Parametros"]->telefono_principal);
                 /* validacion de la persona que realizo la reserva */
                 if ($nombre_principal == '' || $email_principal == '' || $telefono_principal == '') {
                     throw new SoapFault("Error", 7, "Faltan datos de la persona que realizo la reserva");
                 }
                 //validamos el mail
                 if (!Funciones::validaCorreo($email_principal)) {
                     throw new SoapFault("Error", 8, "No es un email valido");
                 }
                 $id_prog = trim($args["Parametros"]->id_prog);
                 $id_opcion = trim($args["Parametros"]->id_opcion);
                 $nota = trim($args["Parametros"]->nota);
                 $fecha_in = trim($args["Parametros"]->fecha_in);
                 $id_agen = trim($args["Credenciales"]->usuario);
                 $codigo_ope_oris = trim($args["Parametros"]->codigo_ope_oris);
                 //validacion para que los campos principales no esten en blanco
                 if ($id_prog == '' || $id_opcion == '' || $fecha_in == '') {
                     throw new SoapFault("Error", 9, "Complete todo los campos");
                 }
                 $sql = "exec H2H_CREA_FILE '{$id_prog}', '{$id_opcion}'," . " '{$nota}','{$fecha_in}','{$id_agen}'," . "'{$codigo_ope_oris}'";
                 $MC_numHab = $this->IntConvert($args["Parametros"]->numHabitaciones);
                 //validamos que al menos se elija una habitacion
                 if ($MC_numHab == 0) {
                     throw new SoapFault("Error", 10, "Debe elegir al menos una habitacion");
                 }
                 $sql .= ", '{$MC_numHab}' ";
                 $sql .= ", '" . $this->IntConvert($args["Parametros"]->numAdlHab_1) . "' ";
                 // validamos que por lo se elija un adulto
                 if ($this->IntConvert($args["Parametros"]->numAdlHab_1) == 0) {
                     throw new SoapFault("Error", 11, "Debe ir al menos un adulto");
                 }
                 /* validamos que la cantidad de pasajeros cuadre con los datos de ellos */
                 $adultos[] = $this->IntConvert($args["Parametros"]->numAdlHab_1);
                 $adultos[] = $this->IntConvert($args["Parametros"]->numAdlHab_2);
                 $adultos[] = $this->IntConvert($args["Parametros"]->numAdlHab_3);
                 $childs[] = $this->IntConvert($args["Parametros"]->cantidadChildHab_1);
                 $childs[] = $this->IntConvert($args["Parametros"]->cantidadChildHab_2);
                 $childs[] = $this->IntConvert($args["Parametros"]->cantidadChildHab_3);
                 $infant[] = $this->IntConvert($args["Parametros"]->numInfHab_1);
                 $infant[] = $this->IntConvert($args["Parametros"]->numInfHab_2);
                 $infant[] = $this->IntConvert($args["Parametros"]->numInfHab_3);
                 for ($i = 0; $i <= 2; $i++) {
                     //se suma la cantidad de pasajeros totales
                     $cantidadPsajeros = $cantidadPsajeros + $adultos[$i] + $childs[$i];
                     //validamos que la cantidad no sea mayor a 2 de los child
                     if ($childs[$i] > 2) {
                         throw new SoapFault("Error", 12, "No puede ingresar mas de 2 child");
                     }
                 }
                 //validamos que la cantidad de datos sea la misma con la de pasajeros
                 if (count($args["Parametros"]->Pasajeros->Pasajero) != $cantidadPsajeros) {
                     throw new SoapFault("Error", 13, "No puede enviar una cantidad de datos distinta de la cantidad de pasajeros");
                 }
                 /* solo validamos si hay mas de 1 pasajero */
                 if (count($args["Parametros"]->Pasajeros->Pasajero) > 1) {
                     $ctn = 0;
                     for ($xd = 0; $xd <= 2; $xd++) {
                         //validamos los adultos
                         for ($y = 0; $y < $adultos[$xd]; $y++) {
                             $tipo = $args["Parametros"]->Pasajeros->Pasajero[$ctn]->TipoPasajero;
                             $TipoDocumento = $args["Parametros"]->Pasajeros->Pasajero[$ctn]->TipoDocumento;
                             $NombrePasajero = $args["Parametros"]->Pasajeros->Pasajero[$ctn]->NombrePasajero;
                             $Rut = $args["Parametros"]->Pasajeros->Pasajero[$ctn]->Rut;
                             $F_nacimiento = $args["Parametros"]->Pasajeros->Pasajero[$ctn]->F_nacimiento;
                             $tratoPax = $args["Parametros"]->Pasajeros->Pasajero[$ctn]->tratoPax;
                             if ($tipo == '' || $TipoDocumento == '' || $NombrePasajero == '' || $Rut == '' || $F_nacimiento == '' || $tratoPax == '') {
                                 throw new SoapFault("Error", 24, "Debe ingresar todos los campos");
                             }
                             $NombrePasajero_Inf = $args["Parametros"]->Pasajeros->Pasajero[$ctn]->NombrePasajero_Inf;
                             $Rut_Inf = $args["Parametros"]->Pasajeros->Pasajero[$ctn]->Rut_Inf;
                             $F_nacimiento_Inf = $args["Parametros"]->Pasajeros->Pasajero[$ctn]->F_nacimiento_Inf;
                             if ($y == 0) {
                                 if ($infant[$xd] > 0) {
                                     if ($NombrePasajero_Inf == '' || $Rut_Inf == '' || $F_nacimiento_Inf == '') {
                                         throw new SoapFault("Error", 25, "Debe ingresar todos los campos del infant");
                                     }
                                 } else {
                                     if ($NombrePasajero_Inf != '' || $Rut_Inf != '' || $F_nacimiento_Inf != '') {
                                         throw new SoapFault("Error", 27, "No ingreso ninguna cantidad de infant");
                                     }
                                 }
                             } else {
                                 if ($infant[$xd] > 0) {
                                     $NombrePasajero_Inf = $args["Parametros"]->Pasajeros->Pasajero[$ctn]->NombrePasajero_Inf;
                                     $Rut_Inf = $args["Parametros"]->Pasajeros->Pasajero[$ctn]->Rut_Inf;
                                     $F_nacimiento_Inf = $args["Parametros"]->Pasajeros->Pasajero[$ctn]->F_nacimiento_Inf;
                                     if ($NombrePasajero_Inf != '' || $Rut_Inf != '' || $F_nacimiento_Inf != '') {
                                         throw new SoapFault("Error", 26, "Datos de infant deben ir en el primer pasajero");
                                     }
                                 }
                             }
                             if (strtolower($tipo) != 'a') {
                                 throw new SoapFault("Error", 14, "Error en el ingreso de adulto");
                             }
                             $ctn++;
                         }
                         //validamos los child
                         for ($i = 0; $i < $childs[$xd]; $i++) {
                             $tipo = $args["Parametros"]->Pasajeros->Pasajero[$ctn]->TipoPasajero;
                             $TipoDocumento = $args["Parametros"]->Pasajeros->Pasajero[$ctn]->TipoDocumento;
                             $NombrePasajero = $args["Parametros"]->Pasajeros->Pasajero[$ctn]->NombrePasajero;
                             $Rut = $args["Parametros"]->Pasajeros->Pasajero[$ctn]->Rut;
                             $F_nacimiento = $args["Parametros"]->Pasajeros->Pasajero[$ctn]->F_nacimiento;
                             $tratoPax = $args["Parametros"]->Pasajeros->Pasajero[$ctn]->tratoPax;
                             if ($tipo == '' || $TipoDocumento == '' || $NombrePasajero == '' || $Rut == '' || $F_nacimiento == '' || $tratoPax == '') {
                                 throw new SoapFault("Error", 24, "Debe ingresar todos los campos");
                             }
                             if (strtolower($tipo) != 'c') {
                                 throw new SoapFault("Error", 14, "Error en el ingreso de child");
                             } else {
                                 $edad = Funciones::getEdad(str_replace('-', '/', $args["Parametros"]->Pasajeros->Pasajero[$ctn]->F_nacimiento), str_replace('-', '/', $args["Parametros"]->fecha_in));
                                 // validamos que el child no tenga edad superior a 12 o inferior a 2
                                 if ($edad < 2) {
                                     throw new SoapFault("Error", 15, "Child menor a 2 ");
                                 }
                                 $edades[$xd][$i] = $edad;
                                 //c1 o c2
                             }
                             $ctn++;
                         }
                     }
                 } else {
                     $tipo = $args["Parametros"]->Pasajeros->Pasajero->TipoPasajero;
                     $TipoDocumento = $args["Parametros"]->Pasajeros->Pasajero->TipoDocumento;
                     $NombrePasajero = $args["Parametros"]->Pasajeros->Pasajero->NombrePasajero;
                     $Rut = $args["Parametros"]->Pasajeros->Pasajero->Rut;
                     $F_nacimiento = $args["Parametros"]->Pasajeros->Pasajero->F_nacimiento;
                     $tratoPax = $args["Parametros"]->Pasajeros->Pasajero->tratoPax;
                     if ($tipo == '' || $TipoDocumento == '' || $NombrePasajero == '' || $Rut == '' || $F_nacimiento == '' || $tratoPax == '') {
                         throw new SoapFault("Error", 24, "Debe ingresar todos los campos");
                     }
                     $NombrePasajero_Inf = $args["Parametros"]->Pasajeros->Pasajero->NombrePasajero_Inf;
                     $Rut_Inf = $args["Parametros"]->Pasajeros->Pasajero->Rut_Inf;
                     $F_nacimiento_Inf = $args["Parametros"]->Pasajeros->Pasajero->F_nacimiento_Inf;
                     if ($infant[0] > 0) {
                         if ($NombrePasajero_Inf == '' || $Rut_Inf == '' || $F_nacimiento_Inf == '') {
                             throw new SoapFault("Error", 25, "Debe ingresar todos los campos del infant");
                         }
                     } else {
                         if ($NombrePasajero_Inf != '' || $Rut_Inf != '' || $F_nacimiento_Inf != '') {
                             throw new SoapFault("Error", 27, "No ingreso ninguna cantidad de infant");
                         }
                     }
                     //validamos que sea un child solo
                     if (strtolower($tipo) != 'a') {
                         throw new SoapFault("Error", 16, "No puede ir solo un child");
                     }
                 }
                 for ($i = 0; $i <= 2; $i++) {
                     if ($this->IntConvert($edades[$i][0]) > 0) {
                         $validar = $reserva->validaChild($id_opcion, $this->IntConvert($edades[$i][0]), $this->IntConvert($edades[$i][1]));
                         if ($validar) {
                             throw new SoapFault("Error", 17, $validar);
                         }
                     }
                 }
                 for ($i = 0; $i < 2; $i++) {
                     $sql .= ", '" . $this->IntConvert($edades[0][$i]) . "' ";
                 }
                 if ($this->IntConvert($args["Parametros"]->numInfHab_1) > 1 || $this->IntConvert($args["Parametros"]->numInfHab_2) > 1 || $this->IntConvert($args["Parametros"]->numInfHab_3) > 1) {
                     throw new SoapFault("Error", 18, "El maximo de infant es 1");
                 }
                 $sql .= ", '" . $this->IntConvert($args["Parametros"]->numInfHab_1) . "' ";
                 if ($MC_numHab == 3) {
                     $sql .= ", '" . $this->IntConvert($args["Parametros"]->numAdlHab_2) . "' ";
                     for ($i = 0; $i < 2; $i++) {
                         $sql .= ", '" . $this->IntConvert($edades[1][$i]) . "' ";
                     }
                     $sql .= ", '" . $this->IntConvert($args["Parametros"]->numInfHab_2) . "' ";
                     $sql .= ", '" . $this->IntConvert($args["Parametros"]->numAdlHab_3) . "' ";
                     for ($i = 0; $i < 2; $i++) {
                         $sql .= ", '" . $this->IntConvert($edades[2][$i]) . "' ";
                     }
                     $sql .= ", '" . $this->IntConvert($args["Parametros"]->numInfHab_3) . "' ";
                 } else {
                     if ($MC_numHab == 2) {
                         $sql .= ", '" . $this->IntConvert($args["Parametros"]->numAdlHab_2) . "' ";
                         for ($i = 0; $i < 2; $i++) {
                             $sql .= ", '" . $this->IntConvert($edades[1][$i]) . "' ";
                         }
                         $sql .= ", '" . $this->IntConvert($args["Parametros"]->numInfHab_2) . "' ";
                         $sql .= ", '0', '0', '0','0' ";
                     } else {
                         $sql .= ", '0', '0', '0', '0', '0', '0','0','0' ";
                     }
                 }
                 /* PASAJEROS */
                 for ($i = 0; $i < 10; $i++) {
                     if (count($args["Parametros"]->Pasajeros->Pasajero) > 1) {
                         $MC_nombreAdl = mb_convert_encoding($args["Parametros"]->Pasajeros->Pasajero[$i]->NombrePasajero, "ISO-8859-1", "UTF-8");
                         $MC_rut = $args["Parametros"]->Pasajeros->Pasajero[$i]->Rut;
                         //validamos que el rut sea valido
                         if (strtolower($args["Parametros"]->Pasajeros->Pasajero[$i]->TipoDocumento) == 'r') {
                             if (!Funciones::validaRut($MC_rut)) {
                                 throw new SoapFault("Error", 19, "Rut no Valido");
                             }
                         }
                         $MC_fNac = $args["Parametros"]->Pasajeros->Pasajero[$i]->F_nacimiento;
                         $MC_tipoPas = $args["Parametros"]->Pasajeros->Pasajero[$i]->TipoPasajero;
                         $MC_nombreInf = mb_convert_encoding($args["Parametros"]->Pasajeros->Pasajero[$i]->NombrePasajero_Inf, "ISO-8859-1", "UTF-8");
                         $MC_rutInf = $args["Parametros"]->Pasajeros->Pasajero[$i]->Rut_Inf;
                         $MC_fNacInf = $args["Parametros"]->Pasajeros->Pasajero[$i]->F_nacimiento_Inf;
                         //validamos que no sea mayor a 2 aƱos
                         if ($MC_fNacInf != '') {
                             $infanteEdad = Funciones::getEdad(str_replace('-', '/', $MC_fNacInf), str_replace('-', '/', $args["Parametros"]->fecha_in));
                             if ($infanteEdad > 2) {
                                 throw new SoapFault("Error", 20, "No es un infant edad mayor a 2");
                             }
                         }
                         $MC_tratoPax = $args["Parametros"]->Pasajeros->Pasajero[$i]->tratoPax;
                         $sql .= ", '{$MC_nombreAdl}', '{$MC_rut}', '{$MC_fNac}', '{$MC_tipoPas}', '{$MC_nombreInf}', '{$MC_rutInf}', '{$MC_fNacInf}', '{$MC_tratoPax}' ";
                     } else {
                         if ($i < 1) {
                             $MC_nombreAdl = mb_convert_encoding($args["Parametros"]->Pasajeros->Pasajero->NombrePasajero, "ISO-8859-1", "UTF-8");
                             $MC_rut = $args["Parametros"]->Pasajeros->Pasajero->Rut;
                             if (strtolower($args["Parametros"]->Pasajeros->Pasajero->TipoDocumento) == 'r') {
                                 if (!Funciones::validaRut($MC_rut)) {
                                     throw new SoapFault("Error", 19, "Rut no Valido");
                                 }
                             }
                             $MC_fNac = $args["Parametros"]->Pasajeros->Pasajero->F_nacimiento;
                             $MC_tipoPas = $args["Parametros"]->Pasajeros->Pasajero->TipoPasajero;
                             $MC_nombreInf = mb_convert_encoding($args["Parametros"]->Pasajeros->Pasajero->NombrePasajero_Inf, "ISO-8859-1", "UTF-8");
                             $MC_rutInf = $args["Parametros"]->Pasajeros->Pasajero->Rut_Inf;
                             $MC_fNacInf = $args["Parametros"]->Pasajeros->Pasajero->F_nacimiento_Inf;
                             if ($MC_fNacInf != '') {
                                 $infanteEdad = Funciones::getEdad(str_replace('-', '/', $MC_fNacInf), str_replace('-', '/', $args["Parametros"]->fecha_in));
                                 if ($infanteEdad >= 2) {
                                     throw new SoapFault("Error", 20, "No es un infant edad mayor a 2");
                                 }
                             }
                             $MC_tratoPax = $args["Parametros"]->Pasajeros->Pasajero->tratoPax;
                         } else {
                             $MC_nombreAdl = '';
                             $MC_rut = '';
                             $MC_fNac = '';
                             $MC_tipoPas = '';
                             $MC_nombreInf = '';
                             $MC_rutInf = '';
                             $MC_fNacInf = '';
                             $MC_tratoPax = '';
                         }
                         $sql .= ", '{$MC_nombreAdl}', '{$MC_rut}', '{$MC_fNac}', '{$MC_tipoPas}', '{$MC_nombreInf}', '{$MC_rutInf}', '{$MC_fNacInf}', '{$MC_tratoPax}' ";
                     }
                 }
                 $sql .= ", '" . $this->IntConvert($args["Parametros"]->totventa) . "' ";
                 $totalVentaFinal = $this->IntConvert($args["Parametros"]->totventa);
                 $procesoReserva = $reserva->H2H_CREA_FILE($sql);
                 //echo $sql; exit;
                 if ($procesoReserva) {
                     $mC_TC_codigo = trim($procesoReserva->getCodigo());
                     $mC_TC_mensaje = mb_convert_encoding(trim($procesoReserva->getMensaje()), "UTF-8");
                     $mC_TC_file = trim($procesoReserva->getFile());
                     $mC_TC_venta = '';
                     $mC_TC_tipo_moneda = '';
                     ${$mC_TC_cambio} = '';
                     //RESERVA EXITOSA
                     if ($mC_TC_codigo == 1) {
                         //CARGA MODELO DE RESERVA
                         $LM_reserva = $this->loadModel('reserva');
                         $reserva->insertPagos($mC_TC_file, $totalVentaFinal, $nombre_principal, $email_principal, $telefono_principal);
                         //$mC_TC_file='190306'; $MC_CodigoBloqueo='2014FLN019';
                         //TRAER DATOS DE LA TABLA FILE
                         $reserFinal = $reserva->getFileOK($mC_TC_file);
                         if ($reserFinal) {
                             $mC_TC_venta = $reserFinal->getTotVenta();
                             $mC_TC_tipo_moneda = $reserFinal->getMoneda();
                             $mC_TC_cambio = $reserFinal->getCambio();
                             $reserva->insertLog($mC_TC_codigo, $mC_TC_mensaje, $mC_TC_file, $mC_TC_venta, $mC_TC_tipo_moneda, $id_agen);
                             include ROOT . 'views' . DS . 'cartas' . DS . 'parseCarta.php';
                             $this->loadDTO('usuarioH2h');
                             $correo = $reserva->getCorreo($id_agen);
                             //PARSEA INFORME HTML
                             $this->getLibrary('class.phpmailer');
                             $mail = new PHPMailer();
                             $mail->IsSMTP();
                             $mail->Host = MAIL_HOST;
                             $mail->Port = 25;
                             $mail->From = MAIL_USER;
                             $mail->FromName = 'Panamericana Online H2H';
                             $mail->CharSet = 'UTF-8';
                             $mail->Subject = 'Confirmacion de reserva online: ' . $mC_TC_file;
                             $mail->MsgHTML($mC_HTML);
                             //$mail->AltBody = 'Su servidor de correo no soporta html';
                             if ($correo->getCorreoVendedor() != '') {
                                 $mail->AddAddress($correo->getCorreoVendedor(), "");
                             }
                             //$mail->AddAddress("*****@*****.**","Nombre 02");
                             if ($correo->getCorreoEjecutivo() != '') {
                                 $mail->AddCC($correo->getCorreoEjecutivo());
                             }
                             //$mail->AddBCC($MC_correoOculto);
                             $mail->SMTPAuth = MAIL_AUT;
                             $mail->Username = MAIL_USER;
                             $mail->Password = MAIL_PASS;
                             $mail->Send();
                         } else {
                             $mC_HTML = 'Error al enviar el mail';
                         }
                     }
                     $xmlResponse = array("CODIGO" => $mC_TC_codigo, "MENSAJE" => $mC_TC_mensaje, "FILE" => $mC_TC_file, "VENTA" => $mC_TC_venta, "TIPO_MONEDA" => $mC_TC_tipo_moneda, "CAMBIO" => $mC_TC_cambio);
                     return $xmlResponse;
                 } else {
                     throw new SoapFault("Sin registros", null, "Error al realizar la reserva");
                 }
             } else {
                 throw new SoapFault("Sin registros", null, "Usuario o password son incorrectos");
             }
         } else {
             throw new SoapFault("Sin registros", null, "Usuario o password son incorrectos");
         }
     }
 }