<?php

class updateDatosRetiroAction extends sfAction{


  public function handleError(){

    // Reversar paso del wizard
    $sv = new sessionValidate($this);
    $sv->setSessionAtt('sirevih_web', 'encuesta', 800);

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

  }


  public function validate(){

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

    $solicitud_solicitud_id = $this->getRequestParameter('solicitud_solicitud_id');
    $monto_saldo = $this->getRequestParameter('monto_saldo');
    $monto_calculado = $this->getRequestParameter('monto_calculado');
    $geo_estado_id = $this->getRequestParameter('geo_estado_id');
    $geo_municipio_id = $this->getRequestParameter('geo_municipio_id');
    $geo_parroquia_id = $this->getRequestParameter('geo_parroquia_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');
    $zona_postal = $this->getRequestParameter('zona_postal');

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

    // init valor de retorno
    $retorno = true;

    // $datos_vivienda = 0 ==> No se piden datos de la vivienda
    // $datos_vivienda = 1 ==> Se piden datos de la vivienda
    $datos_vivienda = 0;

    // objeto request
    $request = $this->getRequest();
	

    // Objeto SolicitudSolicitud
    $solicitud_solicitud = SolicitudSolicitudPeer::retrieveByPk($solicitud_solicitud_id);
	$atencion_especial = $solicitud_solicitud->getAtencionEspecial();

    $producto_producto_id = $solicitud_solicitud->getProductoProductoId();

    if ($monto_calculado) {

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

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

        $retorno = false;

      }
      else {

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

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

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

          $retorno = false;

        }

      }

      if ($retorno) {

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

        if ($monto_calculado > $monto_saldo) {

          $this->getRequest()->setError('monto_calculado','Este monto sobrepasa el monto del saldo');

          $retorno = false;

        }
		
		$monto_maximo = $monto_saldo * ($constantes["porcentaje_maximo"]/100);
		$monto_maximo2 = $monto_saldo * ($constantes["porcentaje_maximo2"]/100); //Nueva linea pao
		
		if ($atencion_especial) {
		
			if ($monto_calculado > $monto_saldo) {

			  $this->getRequest()->setError('monto_calculado','Este monto sobrepasa el monto del saldo');

			  $retorno = false;

			}
			
		}else{
		
			 if (($producto_producto_id == $constantes["producto_retiro_mejora"]) ||  
				 ($producto_producto_id == $constantes["producto_retiro_autoconstruccion"]) ||
				 ($producto_producto_id == $constantes["producto_retiro_adquisicion"]) ||
				 ($producto_producto_id == $constantes["producto_retiro_amortizacion"]) ||
				 ($producto_producto_id == $constantes["producto_retiro_cesion"])) {
				 
					if (round($monto_calculado,2) > round($monto_maximo,2)) {

					  $this->getRequest()->setError('monto_calculado','Este monto sobrepasa el monto disponible para el tipo de solicitud. El monto maximo disponible es: <strong>'.number_format($monto_maximo,2,',','').'</strong>');
					  																															
					  $retorno = false;

					}
			 }
		// pao
		
					 if (($producto_producto_id == $constantes["producto_retiro_adquisicion_recursos_propios"]) ||  
				 ($producto_producto_id == $constantes["producto_retiro_pagocredito_recursos_propios"])) {
				 
					if ($monto_calculado > $monto_maximo2) {

					  $this->getRequest()->setError('monto_calculado','Este monto sobrepasa el monto disponible para el tipo de solicitud. El monto maximo disponible es: <strong>'.number_format($monto_maximo,2,',','').'</strong>');
					  $retorno = false;

					}
			
			
			//hasta aqui
			
			}elseif($monto_calculado > $monto_saldo){
				$this->getRequest()->setError('monto_calculado','Este monto sobrepasa el monto del saldo');
				$retorno = false;		
			}
		}
		
        if ($monto_calculado <= 0) {

          $this->getRequest()->setError('monto_calculado','Este monto debe ser mayor a cero');

          $retorno = false;

        }

      }

    }
    elseif ($monto_calculado == 0) {

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

      $retorno = false;

    }

    if (($producto_producto_id == $constantes["producto_retiro_adquisicion"]) || 
        ($producto_producto_id == $constantes["producto_retiro_mejora"]) || 
        ($producto_producto_id == $constantes["producto_retiro_amortizacion"]) || 
        ($producto_producto_id == $constantes["producto_retiro_autoconstruccion"])) {

      $datos_vivienda = 1;

      // Se valida que llene los datos de la vivienda
      if (!$geo_estado_id) {

	$this->getRequest()->setError('geo_estado_id','Falta el estado');

	$retorno = false;

      }

      if (!$geo_municipio_id) {

	$this->getRequest()->setError('geo_municipio_id','Falta el municipio');

	$retorno = false;

      }

      if (!$geo_parroquia_id) {

	$this->getRequest()->setError('geo_parroquia_id','Falta la parroquia');

	$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)){

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

        $retorno = false;

      }
      else {

        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)){

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

        $retorno = false;

      }
      else {

        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)){

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

        $retorno = false;

      }
      else {

        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;

        }

      }

      if (!trim($zona_postal)){

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

        $retorno = false;

      }
      else {

        if (!preg_match($constantes["validacion_entero"], $zona_postal)) {

          $this->getRequest()->setError('zona_postal','Debe ser entero');

          $retorno = false;

        }

      }

    }

    if ($producto_producto_id == $constantes["producto_retiro_cesion"]) {

      if (!$solicitud_solicitud->getPersonaBeneficiarioId()) {

	$this->getRequest()->setError('cedula','Debe agregar el beneficiario de la cesión');

	$retorno = false;

      }

    }

    $request->setParameter('datos_vivienda', $datos_vivienda);

    return $retorno;

  }


  public function execute(){

    // Ahora estamos en el paso 1000
    $sv = new sessionValidate($this);
    $sv->setSessionAtt('sirevih_web', 'encuesta', 1000);

    $solicitud_solicitud_id = $this->getRequestParameter('solicitud_solicitud_id');
    $gen_operador_financiero_id = $this->getRequestParameter('gen_operador_financiero_id');
    $monto_calculado = $this->getRequestParameter('monto_calculado');
    $geo_estado_id = $this->getRequestParameter('geo_estado_id');
    $geo_municipio_id = $this->getRequestParameter('geo_municipio_id');
    $geo_parroquia_id = $this->getRequestParameter('geo_parroquia_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');
    $zona_postal = $this->getRequestParameter('zona_postal');

    // Parámetro seteado en el validate
    $datos_vivienda = $this->getRequestParameter('datos_vivienda');

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

    if (!$geo_estado_id) {

      // sanity
      $geo_estado_id = 0;

    }

    if (!$geo_municipio_id) {

      // sanity
      $geo_municipio_id = 0;

    }

    if (!$geo_parroquia_id) {

      // sanity
      $geo_parroquia_id = 0;

    }

    if (!$urban_barrio) {

      // sanity
      $urban_barrio = 0;

    }

    if (!$av_calle_esq_carr) {

      // sanity
      $av_calle_esq_carr = 0;

    }

    if (!$zona) {

      // sanity
      $zona = 0;

    }

    if (!$ver_cam_carret) {

      // sanity
      $ver_cam_carret = 0;

    }

    if (!$edif_qta_casa) {

      // sanity
      $edif_qta_casa = 0;

    }

    if (!$piso_nivel) {

      // sanity
      $piso_nivel = 0;

    }

    if (!$num_apto) {

      // sanity
      $num_apto = 0;

    }

    if (!$pto_referencia) {

      // sanity
      $pto_referencia = 0;

    }

    if (!$zona_postal) {

      // sanity
      $zona_postal = 0;

    }

    $this->redirect('encuesta/mostrarDatosRetiro?solicitud_solicitud_id='.$solicitud_solicitud_id.'&gen_operador_financiero_id='.$gen_operador_financiero_id.'&monto_calculado='.$monto_calculado.'&geo_estado_id='.$geo_estado_id.'&geo_municipio_id='.$geo_municipio_id.'&geo_parroquia_id='.$geo_parroquia_id.'&urban_barrio='.$urban_barrio.'&av_calle_esq_carr='.$av_calle_esq_carr.'&zona='.$zona.'&ver_cam_carret='.$ver_cam_carret.'&edif_qta_casa='.$edif_qta_casa.'&piso_nivel='.$piso_nivel.'&num_apto='.$num_apto.'&pto_referencia='.$pto_referencia.'&zona_postal='.$zona_postal.'&datos_vivienda='.$datos_vivienda);

  }


}
