<?php
class userActions extends wtActions
{
    public function executeIndex()
    {
        
    }
    
    public function executeList()
    {
       
    	$this->block = $this->getRequestParameter( 'block' );
    }

    public function executeDetPtoVta()
    {
        $this->block = $this->getRequestParameter( 'block' );
        $this->i_Id  = $this->getRequestParameter( 'i_Id' );
        $this->s_TipoProc  = $this->getRequestParameter( 's_TipoProc' );
        
        $this->s_Titulo = "Editar Usuario";
        
        $o_UsuarioFN = new SEG_UsuarioFN();
        $this->o_UsuarioBN = $o_UsuarioFN->selectByPK( $this->i_Id );
        
        $o_RolFN = new SEG_RolFN();
        $this->o_RolBN = $o_RolFN->selectByPK( $this->o_UsuarioBN->getIdRol() );

        /*
        $o_GSS_UsuarioSucuDocumentoFN = new GSS_UsuarioSucuDocumentoFN();
        $o_GSS_UsuarioSucuDocumentoFN->setIdUsuario( $this->i_Id );
        $o_GSS_UsuarioSucuDocumentoFN->addOrderBy( GSS_UsuarioSucuDocumentoFN::IdCompania );
        $o_GSS_UsuarioSucuDocumentoFN->addOrderBy( GSS_UsuarioSucuDocumentoFN::SerieDocumento );
        $this->a_GSS_UsuarioSucuDocumento = $o_GSS_UsuarioSucuDocumentoFN->select();
        */
       
        $o_GSS_CompaniaFN = new GSS_CompaniaFN();
        $o_GSS_CompaniaFN->setEstado( 'A' );
        $o_GSS_CompaniaFN->addOrderBy( GSS_CompaniaFN::IdCompania, true );
        $this->a_GSS_Compania = $o_GSS_CompaniaFN->select();
        
        $o_GSS_SucursalFN = new GSS_SucursalFN();
        //$o_GSS_SucursalFN->setIdCompania( $this->o_UsuarioBN->getIdCompania() );
        $o_GSS_SucursalFN->addOrderBy( GSS_SucursalFN::IdSucursal );
        $a_GSS_Sucursal = $o_GSS_SucursalFN->select();
        $this->a_LstSucursal = array();
        foreach ( $a_GSS_Sucursal as $o_GSS_SucursalBN )
        {
            $this->a_LstSucursal[$o_GSS_SucursalBN->getIdCompania()][$o_GSS_SucursalBN->getIdSucursal()] = $o_GSS_SucursalBN;
        }

        $o_GSS_SucursalDocumentoFN = new GSS_SucursalDocumentoFN();
        $o_GSS_SucursalDocumentoFN->addOrderBy( GSS_SucursalDocumentoFN::IdCompania );
        $o_GSS_SucursalDocumentoFN->addOrderBy( GSS_SucursalDocumentoFN::IdSucursal );
        $o_GSS_SucursalDocumentoFN->addOrderBy( GSS_SucursalDocumentoFN::SerieFormato );
        $a_GSS_SucursalDocumento = $o_GSS_SucursalDocumentoFN->select();
        foreach ( $a_GSS_SucursalDocumento as $o_GSS_SucursalDocumentoBN )
        {
            $this->a_LstSucursalDocumento[$o_GSS_SucursalDocumentoBN->getIdCompania()][$o_GSS_SucursalDocumentoBN->getIdSucursal()][] = $o_GSS_SucursalDocumentoBN;
        }
        //pr( $this->a_LstSucursalDocumento );
    }
    
    public function executeGrid()
    {
        $block = $this->getRequestParameter( 'block' );
        $page  = $this->getRequestParameter( 'page' );
        
        $NombreUser  = $this->getRequestParameter( 'NombreUser' );
        $FechaInicio = $this->getRequestParameter( 'FechaInicio' );
        $FechaFin    = $this->getRequestParameter( 'FechaFin' );
        
        try
        {
            $o_ObjClass = new SEG_UsuarioFN();
            
            if( $NombreUser )
            {
                $o_ObjClass->addCondition( SEG_UsuarioFN::UsuarioNombre, "LIKE", "%$NombreUser%" );
                $o_ObjClass->addCondition( SEG_UsuarioFN::SysInsAt, ">=", $FechaInicio );
                $o_ObjClass->addCondition( SEG_UsuarioFN::SysInsAt, ">=", $FechaFin );
            }
            
            $tamanioPag = 15;
            if( !$page ) $page = 1;
            $limitInf   = ( $page - 1 ) * $tamanioPag;
            
            $a_ObjClass = $o_ObjClass->select( $limitInf, $tamanioPag );
            $i_NumReg   = $o_ObjClass->selectNumRows();
            
            $o_navigation = new navigation();
            $o_navigation->setPaginaActual( $page );
            $o_navigation->setTamanioPagina( $tamanioPag );
            $o_navigation->setTotalRegistros( $i_NumReg );
            
            $i_TotalPagina = $o_navigation->getTotalPagina();
            
            $a_ResultJson['page']    = $page;
            $a_ResultJson['total']   = $i_TotalPagina;
            $a_ResultJson['records'] = $i_NumReg;
            
            foreach ( $a_ObjClass as $iKey => $o_ObjClassBN )
            {
                $a_Rs[] = array(
                                    "IdCompania"        => $o_ObjClassBN->getIdCompania(),
                                    "IdUsuario"       	=> ( string ) $o_ObjClassBN->getIdUsuario(),
                                    "IdRol"  		    => $o_ObjClassBN->getIdRol(),
                                    "UsuarioNombre"     => $o_ObjClassBN->getUsuarioNombre(),
                                    "Correo"            => $o_ObjClassBN->getCorreo(),
                                    "FechaCreacion"     => $o_ObjClassBN->getFechaCreacion(),
                                    "Estado"            => $o_ObjClassBN->getTipoUsoUsuario()
                               );
            }
            
            $a_ResultJson['rows'] = $a_Rs;
            echo json_encode( $a_ResultJson );
            
        }
        catch ( Exception $o_Exception )
        {
            pr( $o_Exception );
        }
        //ViewResponse::getInstance()->setMethodAjax();
        return ViewResponse::NONE;
    }
    
    public function executeAdd()
    {
        $this->block = $this->getRequestParameter( 'block' );
        $this->i_Id  = $this->getRequestParameter( 'i_Id' );
        $this->s_TipoProc  = $this->getRequestParameter( 's_TipoProc' );
        
        $o_RolFN = new SEG_RolFN();
        $this->a_Rol = $o_RolFN->select();
        
        $this->o_UsuarioBN = new SEG_UsuarioBN();
        $this->s_Titulo = "Nueva Usuario";
        if( $this->s_TipoProc == "upd" )
        {
            $this->s_Titulo = "Editar Usuario";
            $o_UsuarioFN = new SEG_UsuarioFN();
            $this->o_UsuarioBN = $o_UsuarioFN->selectByPK( $this->i_Id );
        }
    }
    
    public function executeSaveUser()
    {
        $block      = $this->getRequestParameter( 'block' );
        $s_TipoProc = $this->getRequestParameter( 's_TipoProc' );
        $i_Id       = $this->getRequestParameter( 'i_Id' );
        
        $IdCompaniaAnt      = $this->getRequestParameter( 'IdCompaniaAnt' );
        $IdCompania         = $this->getRequestParameter( 'IdCompania' );
        $CompaniaNombre     = $this->getRequestParameter( 'CompaniaNombre' );
        $IdRol              = $this->getRequestParameter( 'IdRol' );
        $UsuarioNombre      = $this->getRequestParameter( 'UsuarioNombre' );
        $IdUsuario          = $this->getRequestParameter( 'IdUsuario' );
        $Correo             = $this->getRequestParameter( 'Correo' );
        $UsuarioPassword    = $this->getRequestParameter( 'UsuarioPassword' );
        $UsuarioPassword2   = $this->getRequestParameter( 'UsuarioPassword2' );
        $DeshabilitadoFlg   = $this->getRequestParameter( 'DeshabilitadoFlg' );
        $PermisoAdPwd       = $this->getRequestParameter( 'PermisoAdPwd' ) ? 1 : 0;
        $EnUso              = $this->getRequestParameter( 'EnUso' );

        try 
        {
            $o_UsuarioDP = new SEG_UsuarioDP();
            
            $o_UsuarioDP->setIdRol( $IdRol );
            $o_UsuarioDP->setIdCompania( ( int ) $IdCompania );
            $o_UsuarioDP->setUsuarioNombre( $UsuarioNombre );
            $o_UsuarioDP->setPermisoAdPwd( $PermisoAdPwd );
            $o_UsuarioDP->setDeshabilitadoFlg( $DeshabilitadoFlg ); //por defecto
            $o_UsuarioDP->setCorreo( $Correo );
            $o_UsuarioDP->setEnUso( $EnUso );
            if( $EnUso == "Y" )
            {
                $o_UsuarioDP->setContadorPwd( 0 );
            }

            if( $PermisoAdPwd )
            {
                //ahora se agrega una validacion, la contraseña no debe ser igual, osea es unica -> 2021-09-15
                if( $s_TipoProc == "nvo" )
                {
                    $o_SEG_UsuarioFN = new SEG_UsuarioFN();
                    $o_SEG_UsuarioFN->setUsuarioContrasenia( $UsuarioPassword );
                    $a_SEG_Usuario = $o_SEG_UsuarioFN->select();
                    if( $a_SEG_Usuario )
                    {
                        throw new Exception( "La contrase&ntilde;a que digito, ya se encuentra registrada, la contraseña es unica para el modo Autorizacion." );
                    }
                }
                else
                {
                    if( $UsuarioPassword != "" || $UsuarioPassword2 != "" )
                    {
                        if( $UsuarioPassword == $UsuarioPassword2 )
                        {
                            $s_UsuarioContrasenia = $UsuarioPassword;
                        }
                    }
                    else
                    {
                        $o_SEG_UsuarioFN     = new SEG_UsuarioFN();
                        $o_TMP_SEG_UsuarioBN = $o_SEG_UsuarioFN->selectByPK( $i_Id );
                        if( $o_TMP_SEG_UsuarioBN )
                        {
                            $s_UsuarioContrasenia = $o_TMP_SEG_UsuarioBN->getUsuarioContrasenia();
                        }
                    }

                    $o_SEG_UsuarioFN = new SEG_UsuarioFN();
                    $o_SEG_UsuarioFN->setUsuarioContrasenia( $s_UsuarioContrasenia );
                    $o_SEG_UsuarioFN->addCondition( SEG_UsuarioFN::IdUsuario, "<>", $i_Id );
                    $a_SEG_Usuario = $o_SEG_UsuarioFN->select();
                    if( $a_SEG_Usuario )
                    {
                        throw new Exception( "La contrase&ntilde;a ingresada, ya se encuentra registrada, la contraseña es unica para el modo Autorizacion." );
                    }
                }
            }

            if( $s_TipoProc == "nvo" )
            {
                if( $UsuarioPassword == "" || $UsuarioPassword2 == "" )
                {
                    throw new Exception( "Debe de ingresar la contraseña." );
                }
                if( $UsuarioPassword != $UsuarioPassword2 )
                {
                    throw new Exception( "La contrase&ntilde;a no son iguales." );
                }

                $o_UsuarioDP->setUsuarioPassword( md5( $UsuarioPassword ) );
                $o_UsuarioDP->setUsuarioContrasenia( $UsuarioPassword );

                $o_UsuarioDP->setIdUsuario( $IdUsuario );
                $o_UsuarioDP->setUsuarioCreacion( myUser::getUser()->getUserId() );
                $o_UsuarioDP->setFechaCreacion( date( "Y-m-d H:i:s" ) );
                $o_UsuarioDP->setUsuarioModificacion( myUser::getUser()->getUserId() );
                $o_UsuarioDP->setFechaModificacion( date( "Y-m-d H:i:s" ) );
                $o_UsuarioDP->setEnUso( "Y" );
                $o_UsuarioDP->setInicioFecha( date( "Y-m-d" ) );
                $b_Result = $o_UsuarioDP->save();
                
                $b_Result = SEG_UsuarioDP::asociarUsuarioCompania( $IdCompania, $IdUsuario );
                
                $i_Id = $IdUsuario;
            }
            else 
            {
                if( $this->getRequestParameter( 'TypeSubForm2' ) == "file_to_upload" )
                {
                    //aqui solo se carga la imagen del usuario
                    if ( isset( $_FILES['file_upload'] ) ) 
                    {
                        $PATH_UPLOAD_IMAGES_ROUTE    = $_SERVER['DOCUMENT_ROOT'].Constantes::ROOT_DIR_IMG."perfil/";

                        $fileTmpPath   = $_FILES['file_upload']['tmp_name'];
                        $fileName      = $_FILES['file_upload']['name'];
                        $fileSize      = $_FILES['file_upload']['size'];
                        $fileType      = $_FILES['file_upload']['type'];
                        $fileNameCmps  = explode( ".", $fileName );
                        $fileExtension = strtolower( end( $fileNameCmps ) );

                        $newFileName   = $i_Id.".".$fileExtension;

                        $uploadFileDir = $PATH_UPLOAD_IMAGES_ROUTE;
                        $dest_path     = $uploadFileDir . $newFileName;
                        $s_DestinoUrl  = Constantes::ROOT_DIR_IMG."perfil/".$newFileName;
                         
                        //if( move_uploaded_file( $fileTmpPath, $dest_path ) )
                        if ( copy( $fileTmpPath, $dest_path ) ) 
                        {
                            //$message ='File is successfully uploaded.';
                            //aqui se atualiza la url de la imagen
                            $o_UsuarioDP = new SEG_UsuarioDP();
                            $o_UsuarioDP->setIdUsuario( $i_Id );
                            $o_UsuarioDP->setUsuarioImagen( $s_DestinoUrl );
                            $o_UsuarioDP->setUsuarioModificacion( myUser::getUser()->getUserId() );
                            $o_UsuarioDP->setFechaModificacion( date( "Y-m-d H:i:s" ) );
                            $b_Result = $o_UsuarioDP->update();
                        }
                        else
                        {
                        }
                    }
                    //redirect
                    $s_Dir = Constantes::ROOT_DIR_APP;
                    header( "Location:".$s_Dir."seg.php/user/add/block/001/s_TipoProc/upd/i_Id/".$i_Id );
                }
                elseif ( $this->getRequestParameter( 'TypeSubForm2' ) == "file_to_upload_del" ) 
                {
                    $s_DestinoUrl  = Constantes::ROOT_DIR_IMG."perfil/perfil.jpg";

                    $o_UsuarioDP = new SEG_UsuarioDP();
                    $o_UsuarioDP->setIdUsuario( $i_Id );
                    $o_UsuarioDP->setUsuarioImagen( $s_DestinoUrl );
                    $o_UsuarioDP->setUsuarioModificacion( myUser::getUser()->getUserId() );
                    $o_UsuarioDP->setFechaModificacion( date( "Y-m-d H:i:s" ) );
                    $b_Result = $o_UsuarioDP->update();

                    //redirect
                    $s_Dir = Constantes::ROOT_DIR_APP;
                    header( "Location:".$s_Dir."seg.php/user/add/block/001/s_TipoProc/upd/i_Id/".$i_Id );
                }
                else
                {
                    if( $UsuarioPassword != "" || $UsuarioPassword2 != "" )
                    {
                        if( $UsuarioPassword == "" || $UsuarioPassword2 == "" )
                        {
                            throw new Exception( "Debe de ingresar la contraseña." );
                        }
                        if( $UsuarioPassword != $UsuarioPassword2 )
                        {
                            throw new Exception( "La contrase&ntilde;a no son iguales." );
                        }

                        $o_UsuarioDP->setUsuarioPassword( md5( $UsuarioPassword ) );
                        $o_UsuarioDP->setUsuarioContrasenia( $UsuarioPassword );

                        $o_UsuarioDP->setFechaCambioPwd( date( "Y-m-d H:i:s" ) );
                        $o_UsuarioDP->setHoraCambioPwd( date( "Y-m-d H:i:s" ) );
                    }

                    if( $DeshabilitadoFlg == "Y" )
                    {
                        $o_UsuarioDP->setFinFecha( date( "Y-m-d H:i:s" ) );
                    }

                    $o_UsuarioDP->setIdUsuario( $i_Id );
                    //$o_UsuarioDP->setEnUso( "Y" );
                    //$o_UsuarioDP->setInicioFecha( date( "Y-m-d" ) );
                    $o_UsuarioDP->setUsuarioModificacion( myUser::getUser()->getUserId() );
                    $o_UsuarioDP->setFechaModificacion( date( "Y-m-d H:i:s" ) );
                    //pr( $o_UsuarioDP ); exit;

                    $b_Result = $o_UsuarioDP->update();
                    
                    $b_Result = SEG_UsuarioDP::eliminarGrupoUsuario( $i_Id, $IdCompaniaAnt );
                    $b_Result = SEG_UsuarioDP::asociarUsuarioCompania( $IdCompania, $i_Id );
                }
            }
            $a_Rs['type_sub'] = $s_TipoProc;
            $a_Rs['error']   = false;
            $a_Rs['id']      = $i_Id;
        }
        catch ( Exception $o_Exception )
        {
            $a_Rs['error']        = true;
            $a_Rs['mensaje_error'] = $o_Exception->getMessage();
        }
        echo json_encode( $a_Rs );
        return ViewResponse::NONE;
    }
    
    public function executeFindComp()
    {
        $this->block = $this->getRequestParameter( 'block' );
    }
    
    public function executeFindTrabjador()
    {
        $this->block = $this->getRequestParameter( 'block' );
    }
    
    public function executeCompGrid()
    {
        set_header_utf8();
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        $o_GridAction = new GridAction();
        $o_GridAction->setClassFind( new GSS_CompaniaFN() );
    
        $o_GridAction->addAssignFilter( "IdCompania" );
    
        $o_GridAction->addConditionFilter( "DescripcionCorta", GSS_CompaniaFN::DescripcionCorta, "LIKE", "%%s%" );
    
        //$o_GridAction->addOrder( "Codigo",           GSS_CompaniaFN::Codigo );
        //$o_GridAction->addOrder( "DescripcionCorta", GSS_CompaniaFN::DescripcionCorta );
        //$o_GridAction->addOrder( "Ruc",              GSS_CompaniaFN::Ruc );
    
        $o_GridAction->addOrderDefault( GSS_CompaniaFN::IdCompania, true );
    
        $o_GridAction->addRowsToShow( "IdCompania", "DescripcionCorta" );
    
        $o_GridAction->setNumberRecordsShow( 15 );
    
        $o_GridAction->initialize();
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
        $a_ResultJson['page']    = $o_GridAction->getPage();
        $a_ResultJson['total']   = $o_GridAction->getTotalPage();
        $a_ResultJson['records'] = $o_GridAction->getTotalRecords();
        $a_ResultJson['rows']    = $o_GridAction->getResultArray();
        //pr( $a_ResultJson );
        echo json_encode( $a_ResultJson );
    
        return ViewResponse::NONE;
    }
    
    public function executeTrabaGrid()
    {
        set_header_utf8();
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        $o_GridAction = new GridAction();
        $o_GridAction->setClassFind( new MST_PersonaMastFN() );
    
        ParameterWR::getInstance()->setVar( "EsEmpleado", "SI" );
        $o_GridAction->addAssignFilter( "EsEmpleado" );
        
        $o_GridAction->addMethodDefault( MST_PersonaMastFN::IdUsuario, array( 'Condition'=>'<>', 'Value'=> "''" ) );
        $o_GridAction->addMethodDefault( "( SELECT count(*) FROM SEG_Usuario where DeshabilitadoFlg='N' and IdUsuario=MST_PersonaMast.IdUsuario )", array( 'Condition'=>'=', 'Value'=> "0" ) );

        //$o_GridAction->addAssignFilter( "IdCompania" );
    
        //$o_GridAction->addConditionFilter( "DescripcionCorta", GSS_CompaniaFN::DescripcionCorta, "LIKE", "%%s%" );
    
        //$o_GridAction->addOrder( "Codigo",           GSS_CompaniaFN::Codigo );
        //$o_GridAction->addOrder( "DescripcionCorta", GSS_CompaniaFN::DescripcionCorta );
        //$o_GridAction->addOrder( "Ruc",              GSS_CompaniaFN::Ruc );
    
        $o_GridAction->addOrderDefault( MST_PersonaMastFN::Nombres, true );
    
        $o_GridAction->addRowsToShow( "IdPersona", "UsuarioLogin", "NombreConcatenado", "Email" );
    
        $o_GridAction->setNumberRecordsShow( 15 );
    
        $o_GridAction->initialize();
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
        $a_ResultJson['page']    = $o_GridAction->getPage();
        $a_ResultJson['total']   = $o_GridAction->getTotalPage();
        $a_ResultJson['records'] = $o_GridAction->getTotalRecords();
        $a_ResultJson['rows']    = $o_GridAction->getResultArray();
        //pr( $a_ResultJson );
        echo json_encode( $a_ResultJson );
    
        return ViewResponse::NONE;
    }
    
    public function executeViewdel()
    {
        $this->block = $this->getRequestParameter( 'block' );
        $this->i_Id  = $this->getRequestParameter( 'i_Id' );
        $this->s_TipoProc  = $this->getRequestParameter( 's_TipoProc' );
        
        $o_RolFN = new SEG_RolFN();
        $this->a_Rol = $o_RolFN->select();
        
        $o_UsuarioFN = new SEG_UsuarioFN();
        $this->o_UsuarioBN = $o_UsuarioFN->selectByPK( $this->i_Id );
    }
    
    public function executeDeleteRow()
    {
        $block      = $this->getRequestParameter( 'block' );
        $i_Id       = $this->getRequestParameter( 'i_Id' );
        $s_TipoProc = $this->getRequestParameter( 's_TipoProc' );
        
        $IdCompania = $this->getRequestParameter( 'IdCompania' );
        $IdRol = $this->getRequestParameter( 'IdRol' );
        $UsuarioNombre = $this->getRequestParameter( 'UsuarioNombre' );
        
        try 
        {
            $o_UsuarioDP = new UsuarioDP();
            $o_UsuarioDP->setIdUsuario( $i_Id );
            $o_UsuarioDP->setIdCompania( ( int ) $IdCompania );
            $o_UsuarioDP->setRolId( $IdRol );
            
            $o_UsuarioDP->setUsuarioNombre( $UsuarioNombre );
            $o_UsuarioDP->setDeshabilitadoFlg( "Y" ); //por defecto
            $o_UsuarioDP->setEnUso( "N" );
            $o_UsuarioDP->setInicioFecha( date( "Y-m-d" ) );
            $o_UsuarioDP->setSysInsUsr( myUser::getUser()->getUserId() );
            $o_UsuarioDP->setSysInsAt( date( "Y-m-d H:i:s" ) );
            $o_UsuarioDP->setSysLstUpdUsr( myUser::getUser()->getUserId() );
            $o_UsuarioDP->setSysLstUpdAt( date( "Y-m-d H:i:s" ) );
            $o_UsuarioDP->setUsuarioPwd( md5( "000" ) );
            $b_Result = $o_UsuarioDP->update();
            
            $a_Rs['error']   = false;
            $a_Rs['id']      = $i_Id;
        }
        catch ( Exception $o_Exception )
        {
            $a_Rs['error']   = true;
            $a_Rs['mensaje_error_ex'] = $o_Exception->getMessage();
            $a_Rs['mensaje_error'] = "No se pudo eliminar el registro.";
        }
        echo json_encode( $a_Rs );
        return ViewResponse::NONE;
    }
    
    public function executeDetail()
    {
        $this->block = $this->getRequestParameter( 'block' );
        $this->i_Id  = $this->getRequestParameter( 'i_Id' );
        $this->s_TipoProc  = $this->getRequestParameter( 's_TipoProc' );
        
        $this->s_Titulo = "Editar Usuario";
        
        $o_UsuarioFN = new SEG_UsuarioFN();
        $this->o_UsuarioBN = $o_UsuarioFN->selectByPK( $this->i_Id );
        
        $o_RolFN = new SEG_RolFN();
        $this->o_RolBN = $o_RolFN->selectByPK( $this->o_UsuarioBN->getIdRol() );
        
        $o_GSS_CompaniaFN = new GSS_CompaniaFN();
        $o_GSS_CompaniaFN->setEstado( 'A' );
        $o_GSS_CompaniaFN->addOrderBy( GSS_CompaniaFN::IdCompania, true );
        $this->a_GSS_Compania = $o_GSS_CompaniaFN->select();
        
        $o_GSS_SucursalFN = new GSS_SucursalFN();
        //$o_GSS_SucursalFN->setIdCompania( $this->o_UsuarioBN->getIdCompania() );
        $o_GSS_SucursalFN->addOrderBy( GSS_SucursalFN::IdSucursal );
        $a_GSS_Sucursal = $o_GSS_SucursalFN->select();
        $this->a_LstSucursal = array();
        foreach ( $a_GSS_Sucursal as $o_GSS_SucursalBN )
        {
            $this->a_LstSucursal[$o_GSS_SucursalBN->getIdCompania()][$o_GSS_SucursalBN->getIdSucursal()] = $o_GSS_SucursalBN;
        }
    }
    
    public function executeSaveUserComp()
    {
        $block        = $this->getRequestParameter( 'block' );
        $s_TipoProc   = $this->getRequestParameter( 's_TipoProc' );
        $i_Id         = $this->getRequestParameter( 'i_Id' );
        $i_IdCompania = $this->getRequestParameter( 'i_IdCompania' );
        
        $a_lst_companias  = $this->getRequestParameter( 'a_lst_companias' );
        $a_lst_sucursales = $this->getRequestParameter( 'a_lst_sucursales' );
        
        try 
        {
            SEG_UsuarioCompaniaDP::deletePorIdUsuario( $i_Id );
            SEG_SucursalUsuarioDP::deletePorIdUsuario( $i_Id, null );

            if( $a_lst_companias )
            {
                if( !is_array( $a_lst_sucursales ) )
                {
                    $a_lst_sucursales = array();
                }

                foreach ( $a_lst_companias as $i_Key => $s_Value )
                {
                    $SEG_UsuarioCompaniaDP = new SEG_UsuarioCompaniaDP();
                    $SEG_UsuarioCompaniaDP->setIdUsuario( $i_Id );
                    $SEG_UsuarioCompaniaDP->setIdCompania( ( int ) $s_Value );
                    $SEG_UsuarioCompaniaDP->save();

                    if( isset( $a_lst_sucursales[$s_Value] ) )
                    {
                        foreach ( $a_lst_sucursales[$s_Value] as $i_Key2 => $s_Value2 )
                        {
                            
                            //UsuarioDP::asociarUsuarioCompania( $s_Value2, $i_Id );
                            $o_SEG_SucursalUsuarioDP = new SEG_SucursalUsuarioDP();
                            $o_SEG_SucursalUsuarioDP->setIdUsuario( $i_Id );
                            $o_SEG_SucursalUsuarioDP->setIdSucursal( ( int ) $s_Value2 );
                            $o_SEG_SucursalUsuarioDP->setIdCompania( ( int ) $s_Value );
                            $o_SEG_SucursalUsuarioDP->setEstado( "A" );
                            $o_SEG_SucursalUsuarioDP->setUsuarioCreacion( myUser::getUser()->getUserId() );
                            $o_SEG_SucursalUsuarioDP->setFechaCreacion( date( "Y-m-d H:i:s" ) );
                            $o_SEG_SucursalUsuarioDP->save();
                        }
                    }
                }
            }

            /*
            if( $a_lst_sucursales )
            {
                //$b_Result = SEG_SucursalUsuarioDP::deletePorIdUsuario( $i_Id );
                foreach ( $a_lst_sucursales as $i_Key => $s_Value )
                {
                    //$b_Result = UsuarioDP::asociarUsuarioCompania( $s_Value, $i_Id );
                    $o_SEG_SucursalUsuarioDP = new SEG_SucursalUsuarioDP();
                    $o_SEG_SucursalUsuarioDP->setIdUsuario( $i_Id );
                    $o_SEG_SucursalUsuarioDP->setIdSucursal( ( int ) $s_Value );
                    $o_SEG_SucursalUsuarioDP->setEstado( "A" );
                    $o_SEG_SucursalUsuarioDP->setUsuarioCreacion( myUser::getUser()->getUserId() );
                    $o_SEG_SucursalUsuarioDP->setFechaCreacion( date( "Y-m-d H:i:s" ) );
                    $o_SEG_SucursalUsuarioDP->save();
                }
            }
            */
            
            $a_Rs['type_sub'] = $s_TipoProc;
            $a_Rs['error']   = false;
            $a_Rs['id']      = $i_Id;
        }
        catch ( Exception $o_Exception )
        {
            $a_Rs['error']        = true;
            $a_Rs['mensaje_error'] = $o_Exception->getMessage();
        }
        
        echo json_encode( $a_Rs );
        return ViewResponse::NONE;
    }
}