<?php

class updateDatosPersonalesRetiroAction extends sfAction{

  public function handleError(){

    $sv = new sessionValidate($this);
    $sv->setSessionAtt('sirevih_web', 'encuesta', 600);

    $this->forward('encuesta', 'editDatosPersonalesRetiro');

  }

  public function validate(){

    // Validación de Sesión
    $sv = new sessionValidate($this);
    if(!$sv->valSessionAtt('sirevih_web', 'encuesta', 700)){
      return $this->redirect('encuesta/elegirProducto');
    }

    // Constantes YML
    $constantes = sfYaml::load(sfConfig::get('sf_root_dir').'/config/const.yml');

    // parámetros a validar
    $codigo_movil = $this->getRequestParameter('codigo_movil');
    $telefono_movil = $this->getRequestParameter('telefono_movil');
    $codigo_hab = $this->getRequestParameter('codigo_hab');
    $telefono_hab = $this->getRequestParameter('telefono_hab');
    $codigo3 = $this->getRequestParameter('codigo3');
    $telefono3 = $this->getRequestParameter('telefono3');
    $solicitud_cond_trab_id = $this->getRequestParameter('solicitud_cond_trab_id');
    $nombre_empresa = $this->getRequestParameter('nombre_empresa');
    $cod_empresa = $this->getRequestParameter('cod_empresa');
    $telefono_empresa = $this->getRequestParameter('telefono_empresa');
    $direccion_empresa = $this->getRequestParameter('direccion_empresa');
    $gen_cargo_id = $this->getRequestParameter('gen_cargo_id');
    $anos_ult_trabajo = $this->getRequestParameter('anos_ult_trabajo');
    $anos_experiencia = $this->getRequestParameter('anos_experiencia');
    $ingreso_mensual = $this->getRequestParameter('ingreso_mensual');
    $ingreso_mensual_extraordinario = $this->getRequestParameter('ingreso_mensual_extraordinario');
    $solicitud_fte_ingresoex_id = $this->getRequestParameter('solicitud_fte_ingresoex_id');
    $solicitud_situacion_id = $this->getRequestParameter('solicitud_situacion_id');
    $num_casa_siniestrada = $this->getRequestParameter('num_casa_siniestrada');
    $fecha_situacion = $this->getRequestParameter('fecha_situacion');
    $solicitud_evento_sit_id = $this->getRequestParameter('solicitud_evento_sit_id');
    $urban_barrio = $this->getRequestParameter('urban_barrio');
    $av_calle_esq_carr = $this->getRequestParameter('av_calle_esq_carr');
    $zona = $this->getRequestParameter('zona');
    $ver_cam_carret = $this->getRequestParameter('ver_cam_carret');
    $edif_qta_casa = $this->getRequestParameter('edif_qta_casa');
    $piso_nivel = $this->getRequestParameter('piso_nivel');
    $num_apto = $this->getRequestParameter('num_apto');
    $pto_referencia = $this->getRequestParameter('pto_referencia');

    // init de $retorno
    $retorno = true;

    // Fechas formateadas en YYYY-MM-DD
    list($d, $m, $y) = sfI18N::getDateForCulture($fecha_situacion, $this->getUser()->getCulture());
    $fecha_situacionf = "$y-$m-$d";

    $hoyf = date('Y-m-d');

    // Se validará que se hayan cargado los código de área en caso de cargar los teléfonos
    if (!$telefono_hab) {
      
      $this->getRequest()->setError('telefono_hab','Debe ingresar el teléfono');
      
      $retorno = false;
      
    }
    elseif ($telefono_hab){
      
      if (!$codigo_hab){
        
        $this->getRequest()->setError('telefono_hab','Debe seleccionar el cógido de área');
        
        $retorno = false;
        
      }
      
    }
      
    if ($codigo_movil && !$telefono_movil) {
        
      $this->getRequest()->setError('telefono_movil','Debe ingresar el teléfono');
      
      $retorno = false;
      
    }
    
    if (!$codigo_movil && $telefono_movil){
      
      $this->getRequest()->setError('telefono_hab','Debe seleccionar el cógido de área');
      
      $retorno = false;
      
    }

    if ($codigo3 && !$telefono3) {

      $this->getRequest()->setError('telefono3','Debe ingresar el teléfono');

      $retorno = false;

    }

    if ($telefono3 && !$codigo3){

      $this->getRequest()->setError('telefono3','Debe seleccionar el cógido de área');

      $retorno = false;

    }

    // Se valida que los datos de la empresa sean obligatorios si la condición de trabajo es "Trabajando" o "Trabajando y Estudiando"
    if ($solicitud_cond_trab_id == $constantes["condicion_trabajando"]  || $solicitud_cond_trab_id == $constantes["condicion_estudiando_trabajando"]) {

      if (!trim($nombre_empresa)) {

	$this->getRequest()->setError('nombre_empresa','Debe colocar el nombre de la empresa');

	$retorno =  false;

      }
      else {

        if (!preg_match($constantes["validacion_alfanumspace"], $nombre_empresa)) {

          $this->getRequest()->setError('nombre_empresa','No se permiten caracteres especiales');

          $retorno = false;

        }

      }

      if (!$cod_empresa && !$telefono_empresa){

        $this->getRequest()->setError('telefono_empresa','Debe ingresar el código y teléfono de la empresa');

	$retorno =  false;

      }
      else {

        if ($cod_empresa && !$telefono_empresa) {

          $this->getRequest()->setError('telefono_empresa','Debe ingresar el teléfono de la empresa');

          $retorno =  false;

        }

        if ($telefono_empresa && !$cod_empresa) {

          $this->getRequest()->setError('telefono_empresa','Debe ingresar el código de la empresa');

          $retorno =  false;

        }

      }

      if (!$gen_cargo_id) {

	$this->getRequest()->setError('gen_cargo_id','Debe seleccionar el cargo');

	$retorno =  false;

      }

      if (!trim($direccion_empresa)) {

	$this->getRequest()->setError('direccion_empresa','Debe colocar la dirección de la empresa');

	$retorno =  false;

      }
      else {

        if (!preg_match($constantes["validacion_alfanumspace"], $direccion_empresa)) {

          $this->getRequest()->setError('direccion_empresa','No se permiten caracteres especiales');

          $retorno = false;

        }

      }

    }

    // Se valida que los años de experiencia total no sea menor que los años en su último trabajo
    if ($anos_ult_trabajo > $anos_experiencia) {

      $this->getRequest()->setError('anos_ult_trabajo','Los años en su último trabajo no puede ser mayor a los años de experiencia.');

      $retorno =  false;

    }

    // Los años de experiencia no deben sobrepasar 99
    if ($anos_ult_trabajo > 99) {

      $this->getRequest()->setError('anos_ult_trabajo','Los años en su ultimo trabajo no puede ser mayor a 99');

      $retorno =  false;

    }

    if ($anos_experiencia > 99) {

      $this->getRequest()->setError('anos_experiencia','Los años de experiencia laboral no puede ser mayor a 99');

      $retorno =  false;

    }

    // Se valida el formato de los montos
    if ($ingreso_mensual) {

      if (!preg_match($constantes["validacion_monto_coma"], $ingreso_mensual)) {

        $this->getRequest()->setError('ingreso_mensual','Este monto debe estar en formato 1111111 ó 1111111,11');

        $retorno = false;

      }
      elseif (($ingreso_mensual == 0) || ($ingreso_mensual == '0,00')) {

        $this->getRequest()->setError('ingreso_mensual','Este monto no puede ser cero');

        $retorno = false;

      }
      else {

        $parameters = explode(",", $ingreso_mensual);

        if (strlen($parameters[0]) > $constantes["monto_entero_max"]) {

          $this->getRequest()->setError('ingreso_mensual','Este monto muy largo');

          $retorno = false;

        }

      }

    }
    elseif ($ingreso_mensual == 0) {

      $this->getRequest()->setError('ingreso_mensual','Este monto no puede ser cero o nulo');

      $retorno = false;

    }
    else {

      $this->getRequest()->setError('ingreso_mensual','Debe colocar el ingreso mensual');

      $retorno = false;

    }

    $ingreso_extraordinario_valido = 0;

    if ($ingreso_mensual_extraordinario) {

      if (!preg_match($constantes["validacion_monto_coma"], $ingreso_mensual_extraordinario)) {

        $this->getRequest()->setError('ingreso_mensual_extraordinario','Este monto debe estar en formato 1111111 ó 1111111,11');

        $retorno = false;

      }
      else {

        $parameters = explode(",", $ingreso_mensual_extraordinario);

        if (strlen($parameters[0]) > $constantes["monto_entero_max"]) {

          $this->getRequest()->setError('ingreso_mensual_extraordinario','Este monto muy largo');

          $retorno = false;

        }
        else {

          $ingreso_extraordinario_valido = 1;

        }

      }

      if (!$solicitud_fte_ingresoex_id && $ingreso_extraordinario_valido) {

        $this->getRequest()->setError('solicitud_fte_ingresoex_id','Debe seleccionar la fuente de ingreso extraordinario.');

        $retorno = false;

      }

    }

    if ($solicitud_fte_ingresoex_id && !$ingreso_extraordinario_valido) {

      $this->getRequest()->setError('ingreso_mensual_extraordinario','Debe colocar el monto de ingreso mensual extraordinario.');

      $retorno = false;

    }

    // Si la situación actual es "Damnificado" o "Alto Riesgo" los campos fecha y evento adverso son obligatorios
    if ($solicitud_situacion_id == $constantes["situacion_riesgo"] || $solicitud_situacion_id == $constantes["situacion_damnificado"]) {

      if (!$num_casa_siniestrada) {

	$this->getRequest()->setError('num_casa_siniestrada', 'Debe colocar el número de casa siniestrada');

	$retorno = false;

      }

      if (!$fecha_situacion) {

        $this->getRequest()->setError('fecha_situacion', 'Debe colocar la fecha del evento adverso');

	$retorno = false;

      }
      else {

	if ($fecha_situacionf > $hoyf) {

          $this->getRequest()->setError('fecha_situacion', 'Esta fecha no puede ser futura');

	  $retorno = false;

	}

      }

      if (!$solicitud_evento_sit_id) {

        $this->getRequest()->setError('solicitud_evento_sit_id', 'Debe seleccionar el evento adverso');

	$retorno = false;

      }

    }

    if (!trim($urban_barrio)) {

      $this->getRequest()->setError('urban_barrio','Campo requerido');

      $retorno = false;

    }
    else {

      if (!preg_match($constantes["validacion_alfanumspace"], $urban_barrio)) {

        $this->getRequest()->setError('urban_barrio','No se permiten caracteres especiales');

        $retorno = false;

      }

    }

    if (trim($av_calle_esq_carr)) {

      if (!preg_match($constantes["validacion_alfanumspace"], $av_calle_esq_carr)) {

        $this->getRequest()->setError('av_calle_esq_carr','No se permiten caracteres especiales');

        $retorno = false;

      }

    }

    if (trim($zona)){

      if (!preg_match($constantes["validacion_alfanumspace"], $zona)) {

        $this->getRequest()->setError('zona','No se permiten caracteres especiales');

        $retorno = false;

      }

    }

    if(trim($ver_cam_carret)){

      if (!preg_match($constantes["validacion_alfanumspace"], $ver_cam_carret)) {

        $this->getRequest()->setError('ver_cam_carret','No se permiten caracteres especiales');

        $retorno = false;

      }

    }

    if (trim($edif_qta_casa)){

      if (!preg_match($constantes["validacion_alfanumspace"], $edif_qta_casa)) {

        $this->getRequest()->setError('edif_qta_casa','No se permiten caracteres especiales');

        $retorno = false;

      }

    }

    if(trim($piso_nivel)){

      if (!preg_match($constantes["validacion_alfanumspace"], $piso_nivel)) {

        $this->getRequest()->setError('piso_nivel','No se permiten caracteres especiales');

        $retorno = false;

      }

    }

    if(trim($num_apto)) {

      if (!preg_match($constantes["validacion_alfanumspace"], $num_apto)) {

        $this->getRequest()->setError('num_apto','No se permiten caracteres especiales');

        $retorno = false;

      }

    }

    if (trim($pto_referencia)) {

      if (!preg_match($constantes["validacion_alfanumspace"], $pto_referencia)) {

        $this->getRequest()->setError('pto_referencia','No se permiten caracteres especiales');

        $retorno = false;

      }

    }

    return $retorno;

  }

  public function execute(){

    // Paso 800
    $sv = new sessionValidate($this);
    $sv->setSessionAtt('sirevih_web', 'encuesta', 800);

    // Constantes YML
    $constantes = sfYaml::load(sfConfig::get('sf_root_dir').'/config/const.yml');

    // Parámetros principales
    $solicitud_solicitud_id = $this->getRequestParameter('solicitud_solicitud_id');
    $gen_sexo_id = $this->getRequestParameter('gen_sexo_id');
    $gen_edo_civil_id = $this->getRequestParameter('gen_edo_civil_id');
    $gen_grado_instruccion_id = $this->getRequestParameter('gen_grado_instruccion_id');
    $solicitud_cond_trab_id = $this->getRequestParameter('solicitud_cond_trab_id');
    $gen_cargo_id = $this->getRequestParameter('gen_cargo_id');
    $ingreso_mensual = $this->getRequestParameter('ingreso_mensual');
    $ingreso_mensual_extraordinario = $this->getRequestParameter('ingreso_mensual_extraordinario');
    $solicitud_fte_ingresoex_id = $this->getRequestParameter('solicitud_fte_ingresoex_id');
    $geo_pais_nac_id = $this->getRequestParameter('geo_pais_nac_id');
    $geo_estado_nac_id = $this->getRequestParameter('geo_estado_nac_id');
    $geo_municipio_nac_id = $this->getRequestParameter('geo_municipio_nac_id');
    $solicitud_situacion_id = $this->getRequestParameter('solicitud_situacion_id');
    $fecha_situacion = $this->getRequestParameter('fecha_situacion');
    $solicitud_evento_sit_id = $this->getRequestParameter('solicitud_evento_sit_id');
    $geo_estado_id = $this->getRequestParameter('geo_estado_id');
    $geo_municipio_id = $this->getRequestParameter('geo_municipio_id');
    $geo_parroquia_id = $this->getRequestParameter('geo_parroquia_id');

    // Objeto SolicitudSolicitud
    $solicitud_solicitud = SolicitudSolicitudPeer::retrieveByPk($solicitud_solicitud_id);

    // Objeto SolicitudSolteNat
    $solicitud_solte_nat = SolicitudSolteNatPeer::retrieveByPk($solicitud_solicitud->getSolicitudSolteNatId());

    // Objeto Persona
    $persona = PersonaPeer::retrieveByPk($solicitud_solte_nat->getPersonaId());

    if ($fecha_situacion) {

      // Fechas formateadas en YYYY-MM-DD
      list($d, $m, $y) = sfI18N::getDateForCulture($fecha_situacion, $this->getUser()->getCulture());
      $fecha_situacionf = "$y-$m-$d";

    }

    $hoyf = date('Y-m-d');

    // Se formatea los montos sustituyendo la coma por el punto
    $ingreso_mensual = str_replace(',','.',$ingreso_mensual);
    $ingreso_mensual_extraordinario = str_replace(',','.',$ingreso_mensual_extraordinario);

    // *******************************
    // ACTUALIZAR DATOS DE LA PERSONA
    // *******************************

    $persona->setGenSexoId($gen_sexo_id ? $gen_sexo_id : null);
    $persona->setGenEdoCivilId($gen_edo_civil_id ? $gen_edo_civil_id : null);
    $persona->setTelefonoMovil($this->getRequestParameter('telefono_movil') ? $this->getRequestParameter('telefono_movil') : null);
    $persona->setCodigoMovil($this->getRequestParameter('codigo_movil') ? $this->getRequestParameter('codigo_movil') : null);
    $persona->setTelefonoHab($this->getRequestParameter('telefono_hab') ? $this->getRequestParameter('telefono_hab') : null);
    $persona->setCodigoHab($this->getRequestParameter('codigo_hab') ? $this->getRequestParameter('codigo_hab') : null);
    $persona->setTelefono3($this->getRequestParameter('telefono3') ? $this->getRequestParameter('telefono3') : null);
    $persona->setCodigo3($this->getRequestParameter('codigo3') ? $this->getRequestParameter('codigo3') : null);
    $persona->setCorreoPrincipal($this->getRequestParameter('correo_principal'));
    $persona->setGenGradoInstruccionId($gen_grado_instruccion_id ? $gen_grado_instruccion_id : null);
    $persona->setDiscapacidad($this->getRequestParameter('discapacidad') ? true : false);
    $persona->setGeoPaisNacId($geo_pais_nac_id ? $geo_pais_nac_id : null);

    if ($geo_pais_nac_id == $constantes["Venezuela"]) {

      $persona->setGeoEstadoNacId($geo_estado_nac_id ? $geo_estado_nac_id : null);
      $persona->setGeoMunicipioNacId($geo_estado_nac_id ? $geo_municipio_nac_id ? $geo_municipio_nac_id : null : null);

    }
    else {

      $persona->setGeoEstadoNacId(null);
      $persona->setGeoMunicipioNacId(null);

    }

    $persona->save();

    // *******************************
    // ACTUALIZAR SOLICITUD_SOLTE_NAT
    // *******************************

    $solicitud_solte_nat->setPersonaId($persona->getId());
    $solicitud_solte_nat->setFechaCreacion($hoyf);
    $solicitud_solte_nat->setSolicitudCondTrabId($solicitud_cond_trab_id ? $solicitud_cond_trab_id : null);

    if (($solicitud_cond_trab_id == $constantes["condicion_trabajando"]) || ($solicitud_cond_trab_id == $constantes["condicion_estudiando_trabajando"])){

      $solicitud_solte_nat->setNombreEmpresa($this->getRequestParameter('nombre_empresa'));
      $solicitud_solte_nat->setTelefonoEmpresa($this->getRequestParameter('telefono_empresa'));
      $solicitud_solte_nat->setCodEmpresa($this->getRequestParameter('cod_empresa'));
      $solicitud_solte_nat->setDireccionEmpresa($this->getRequestParameter('direccion_empresa'));
      $solicitud_solte_nat->setGenCargoId($gen_cargo_id ? $gen_cargo_id : null);

    }
    else {

      $solicitud_solte_nat->setNombreEmpresa(null);
      $solicitud_solte_nat->setTelefonoEmpresa(null);
      $solicitud_solte_nat->setCodEmpresa(null);
      $solicitud_solte_nat->setDireccionEmpresa(null);
      $solicitud_solte_nat->setGenCargoId(null);

    }

    $solicitud_solte_nat->setIngresoMensual($ingreso_mensual);
    $solicitud_solte_nat->setIngresoMensualExtraordinario($ingreso_mensual_extraordinario ? $ingreso_mensual_extraordinario : null);
    $solicitud_solte_nat->setSolicitudFteIngresoexId($solicitud_fte_ingresoex_id ? $solicitud_fte_ingresoex_id : null);
    $solicitud_solte_nat->setAnosUltTrabajo($this->getRequestParameter('anos_ult_trabajo'));
    $solicitud_solte_nat->setAnosExperiencia($this->getRequestParameter('anos_experiencia'));
    $solicitud_solte_nat->setSolicitudSituacionId($solicitud_situacion_id ? $solicitud_situacion_id : null);

    if ($solicitud_situacion_id == $constantes["situacion_riesgo"] || $solicitud_situacion_id == $constantes["situacion_damnificado"]) {

      $solicitud_solte_nat->setNumCasaSiniestrada($this->getRequestParameter('num_casa_siniestrada'));
      $solicitud_solte_nat->setFechaSituacion($fecha_situacionf);
      $solicitud_solte_nat->setSolicitudEventoSitId($solicitud_evento_sit_id ? $solicitud_evento_sit_id : null);

    }
    else {

      $solicitud_solte_nat->setNumCasaSiniestrada(null);
      $solicitud_solte_nat->setFechaSituacion(null);
      $solicitud_solte_nat->setSolicitudEventoSitId(null);

    }

    $solicitud_solte_nat->setGeoEstadoId($geo_estado_id ? $geo_estado_id : null);
    $solicitud_solte_nat->setGeoMunicipioId($geo_municipio_id ? $geo_municipio_id : null);
    $solicitud_solte_nat->setGeoParroquiaId($geo_municipio_id ? $geo_parroquia_id ? $geo_parroquia_id : null : null);
    $solicitud_solte_nat->setUrbanBarrio($this->getRequestParameter('urban_barrio'));
    $solicitud_solte_nat->setZona($this->getRequestParameter('zona'));
    $solicitud_solte_nat->setAvCalleEsqCarr($this->getRequestParameter('av_calle_esq_carr'));
    $solicitud_solte_nat->setEdifQtaCasa($this->getRequestParameter('edif_qta_casa'));
    $solicitud_solte_nat->setVerCamCarret($this->getRequestParameter('ver_cam_carret'));
    $solicitud_solte_nat->setPisoNivel($this->getRequestParameter('piso_nivel'));
    $solicitud_solte_nat->setNumApto($this->getRequestParameter('num_apto'));
    $solicitud_solte_nat->setPtoReferencia($this->getRequestParameter('pto_referencia'));
    $solicitud_solte_nat->setZonaPostal($this->getRequestParameter('zona_postal'));
    $solicitud_solte_nat->save();

    return $this->redirect('encuesta/editDatosRetiro?solicitud_solicitud_id='.$solicitud_solicitud->getId());

  }

}
