<?php

/**
 * user actions.
 *
 * @package    comisiones
 * @subpackage user
 * @author     Software House LTDA <gerencia@sofhouse.net>
 * @version    SVN: $Id: actions.class.php 9301 2008-05-27 01:08:46Z dwhittle $
 */
class userActions extends sfActions
{
  /**
   * Executes index action
   *
   * @param sfRequest $request A request object
   */
  public function executeIndex($request)
  {
    $userERP=$request->getParameter('Usuario');
    if($userERP!=null && $userERP!=""){//si recibimos el usuario de websafi por request
	    echo "Ingreso el usuario de ERP ".$userERP;
	    $c = new Criteria();
	    $c->add(UsuariosPeer::USERNAME,$userERP);//consulto sin la clave
	    $c->add(UsuariosPeer::ESTADO,1);
	    $c->add(UsuariosPeer::ESTADO,1);
	    if(UsuariosPeer::doCount($c) > 0)://si la consulta me dio q existe algun registro
	    	//usuario encontrado
		    $usuarios = UsuariosPeer::doSelectJoinTerceros($c);//
		    if(!$usuarios){//Si paso la primera validacion pero aun asi no tiene Join de la tabla Terceros
			echo "<script>
					alert('Verifique que el usuario existe como comisionado y en la tabla de terceros');
			     </script>";
			sleep(2);//se le muestra una alerta para que sepa cual es el error y se pueda solucionar
			echo "<script>
					window.location='/websafiERP/web/index.php';
			     </script>";//Se redirige a la pagina de login websafi
		    }
		    foreach($usuarios as $usuario)://recorro
			    $c = new Criteria();//cargo datos
			    $c->add(PerfilesCredencialesPeer::ID_PERFIL,$usuario->getIdPerfil());
			    $c->add(PerfilesCredencialesPeer::ESTADO,1);
			    $c->addAscendingOrderByColumn(CredencialesPeer::ID_MENU);
			    $c->addJoin(PerfilesCredencialesPeer::ID_CREDENCIAL, CredencialesPeer::ID);//carga credenciales
			    if(PerfilesCredencialesPeer::doCount($c) > 0)://si el perfil tiene permisos 
				    $credenciales = PerfilesCredencialesPeer::doSelectJoinAll($c);
				    $this->getUser()->setAttribute('nombres', $usuario->getTerceros()->getRazsoc());
				    $this->getUser()->setAttribute('correo', $usuario->getTerceros()->getEmail());
				    $this->getUser()->setAttribute('perfil', $usuario->getIdPerfil());
				    $this->getUser()->setAttribute('id', $usuario->getId());
				    $this->getUser()->setAuthenticated(true);
				
				    //Se agregan las credenciales encontradas
				    foreach($credenciales as $credencial):
				    	$this->getUser()->addCredential($credencial->getCredenciales()->getName());
				    endforeach;
			   else://si no tiene permisos lo mas seguro es que sea un perfil nuevo, le permitimos el acceso pero sin acceso a nada
				    $credenciales = PerfilesCredencialesPeer::doSelectJoinAll($c);
				    $this->getUser()->setAttribute('nombres', $usuario->getTerceros()->getRazsoc());
				    $this->getUser()->setAttribute('correo', $usuario->getTerceros()->getEmail());
				    $this->getUser()->setAttribute('perfil', $usuario->getIdPerfil());
				    $this->getUser()->setAttribute('id', $usuario->getId());
				    $this->getUser()->setAuthenticated(true);
			    endif;
				
		    endforeach;
		    
		    //grabar al log
			$logEvent = new Log();
			$logEvent->setStamp(time());
			$logEvent->setUsername($this->getUser()->getAttribute('username'));
			$logEvent->setAccion('Login');
			$logEvent->setIp($_SERVER['REMOTE_ADDR']);
			$logEvent->save();
		else://si no se encontro ningun usuario en la autenticacion 
			echo "<script>
					alert('Usuario de websafiERP, no se encuentra en comisiones, contacte con el administrador');
			     </script>";//se le muestra la alerta al usuario
			sleep(2);
			//intento fallido
			//grabar al log
			$logEvent = new Log();
			$logEvent->setStamp(time());
			$logEvent->setUsername($this->getUser()->getAttribute('username'));
			$logEvent->setAccion('Login fallido. Usuario: '.$request->getParameter('username'));
			$logEvent->setIp($_SERVER['REMOTE_ADDR']);
			$logEvent->save();
			$this->getUser()->setFlash('message', '<p class="error">Usuario de websafiERP, no se encuentra en comisiones, contacte con el administrador</p>');
			echo "<script>
					window.location='/websafiERP/web/index.php';
			     </script>";//se redirige a la pagina de login de websafi
	    endif;
    }
    if($this->getUser()->isAuthenticated()){
	    return $this->redirect('detalle_comisionado/index');
    }
    $this->titulo = "Sistema de ingreso";
    if($request->isMethod('POST')):
	    $c = new Criteria();
	    $c->add(UsuariosPeer::USERNAME,$request->getParameter('username'));
	    $c->add(UsuariosPeer::PASS,sha1($request->getParameter('pass')));
	    $c->add(UsuariosPeer::ESTADO,1);
	    $c->add(TercerosPeer::ESTADO,1);
	    
	    if(UsuariosPeer::doCount($c) > 0):
		
		
	    	//usuario encontrado
		    $usuarios = UsuariosPeer::doSelectJoinTerceros($c);
		    
		

		    foreach($usuarios as $usuario):

			
		
			    $c = new Criteria();
			    $c->add(PerfilesCredencialesPeer::ID_PERFIL,$usuario->getIdPerfil());
			    $c->add(PerfilesCredencialesPeer::ESTADO,1);
			    $c->addAscendingOrderByColumn(CredencialesPeer::ID_MENU);
			    $c->addJoin(PerfilesCredencialesPeer::ID_CREDENCIAL, CredencialesPeer::ID);
			    
			    if(PerfilesCredencialesPeer::doCount($c) > 0):
				    $credenciales = PerfilesCredencialesPeer::doSelectJoinAll($c);
				    $this->getUser()->setAttribute('nombres', $usuario->getTerceros()->getRazsoc());
				    $this->getUser()->setAttribute('correo', $usuario->getTerceros()->getEmail());
				    $this->getUser()->setAttribute('perfil', $usuario->getIdPerfil());
				    $this->getUser()->setAttribute('id', $usuario->getId());
				    $this->getUser()->setAuthenticated(true);
				
				    //Se agregan las credenciales encontradas
				    foreach($credenciales as $credencial):
				    	$this->getUser()->addCredential($credencial->getCredenciales()->getName());
				    endforeach;
			    endif;

			
		    endforeach;
		    
		    //grabar al log
			$logEvent = new Log();
			$logEvent->setStamp(time());
			$logEvent->setUsername($this->getUser()->getAttribute('username'));
			$logEvent->setAccion('Login');
			$logEvent->setIp($_SERVER['REMOTE_ADDR']);
			$logEvent->save();
		else:
			//intento fallido
			//grabar al log
			$logEvent = new Log();
			$logEvent->setStamp(time());
			$logEvent->setUsername($this->getUser()->getAttribute('username'));
			$logEvent->setAccion('Login fallido. Usuario: '.$request->getParameter('username'));
			$logEvent->setIp($_SERVER['REMOTE_ADDR']);
			$logEvent->save();
				
			$this->getUser()->setFlash('message', '<p class="error">Nombre de usuario o contrase&ntilde;a incorrecta</p>');

	    endif;
    endif;

    
  }

  public function executeLogout()
  {
    //grabar al log
	$logEvent = new Log();
	$logEvent->setStamp(time());
	$logEvent->setUsername($this->getUser()->getAttribute('username'));
	$logEvent->setAccion('Logout');
	$logEvent->setIp($_SERVER['REMOTE_ADDR']);
	$logEvent->save();
	//quitar propiedades
    $this->getUser()->setAttribute('nombres',array());
    $this->getUser()->setAttribute('apellidos',array());
    $this->getUser()->setAttribute('correo',array());
    $this->getUser()->setAttribute('perfil',array());
    $this->getUser()->setAttribute('id',array());
    $this->getUser()->clearCredentials();
    $this->getUser()->setAuthenticated(false);
        
    if($this->getUser()->isAuthenticated()):
	echo "<script>
		  window.location='/websafiERP/web/index.php';
	      </script>";
    endif;
	echo "<script>
		  window.location='/websafiERP/web/index.php';
	      </script>";
	die();
  }
}
