<?php
class unidadActions extends wtActions
{
    public function executeIndex()
    {
    }
    
    public function executeList()
    {
        LayoutTemplate::getInstance()->setUseBootstrap();
        
    	$this->block = $this->getRequestParameter( 'block' );
    }
    
    public function executeGrid()
    {
        $block = $this->getRequestParameter( 'block' );
        $page  = $this->getRequestParameter( 'page' );
        
         set_header_utf8();
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        $o_GridAction = new GridAction();
        $o_GridAction->setClassFind( new MST_UnidadMastFN() );
        $o_GridAction->addAssignFilter( "Estado" );
        $o_GridAction->addConditionFilter( "DescripcionCorta", MST_UnidadMastFN::DescripcionCorta, "LIKE", "%%s%" );
        
        $o_GridAction->addOrder( "DescripcionCorta", MST_UnidadMastFN::DescripcionCorta );
        $o_GridAction->addOrder( "UnidadTipo",           MST_UnidadMastFN::UnidadTipo );
        $o_GridAction->addOrder( "NumeroDecimales", MST_UnidadMastFN::NumeroDecimales );
        $o_GridAction->addOrder( "Estado", MST_UnidadMastFN::Estado );
        
        $o_GridAction->addOrderDefault( MST_UnidadMastFN::IdUnidad , true );
        
        $o_GridAction->addRowsToShow( "IdUnidad", "CodigoSunat", "DescripcionCorta", "UnidadTipo", 'NumeroDecimales',   "Estado", "DescripcionExtranjera" );
              
        $o_GridAction->setNumberRecordsShow( 100 );
        
        $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 executeAddedit()
    {
        LayoutTemplate::getInstance()->setUseBootstrap();
        
        $this->block      = $this->getRequestParameter( 'block' );
        $this->i_Id       = $this->getRequestParameter( 'i_Id' );
        $this->s_TipoProc = $this->getRequestParameter( 's_TipoProc' );
        
        $this->s_Titulo = "Nueva Unidad de Medida";
        
        /************/
        
        $o_MST_UnidadMastBN = new MST_UnidadMastBN();
        $o_MST_UnidadMastBN->setEstado('A');
        $this->o_MST_UnidadMastBN = $o_MST_UnidadMastBN;

        //$this->o_MST_UnidadConversionMastBN = new MST_UnidadConversionMastBN();
        $this->a_MST_UnidadConversionMast = array();
        
        /*************/
        //$this->o_MST_UnidadMastBN = new MST_UnidadMastBN();
        if( $this->s_TipoProc == "upd" )
        {
            $this->s_Titulo = "Editar Unidad de Medida";
            $o_MST_UnidadMastFN = new MST_UnidadMastFN();
            $this->o_MST_UnidadMastBN = $o_MST_UnidadMastFN->selectByPK( $this->i_Id );

            //$this->o_MST_UnidadConversionMastBN = MST_UnidadConversionMastFN::buscarUnidadConversion( $this->i_Id );
            $o_MST_UnidadConversionMastFN = new MST_UnidadConversionMastFN();
            $o_MST_UnidadConversionMastFN->setIdUnidad( $this->i_Id );
            $o_MST_UnidadConversionMastFN->addOrderBy( MST_UnidadConversionMastFN::Secuencia );
            $this->a_MST_UnidadConversionMast = $o_MST_UnidadConversionMastFN->select();
            /*if( !$this->o_MST_UnidadConversionMastBN )
            {
                $this->o_MST_UnidadConversionMastBN = new MST_UnidadConversionMastBN();
            }*/
        }
    }
    
    public function executeSaveAddEdit()
    {
        $block      = $this->getRequestParameter( 'block' );
        $i_Id       = $this->getRequestParameter( 'i_Id' );
        $s_TipoProc = $this->getRequestParameter( 's_TipoProc' );
        $TypeSub    = $this->getRequestParameter( 'TypeSub' );
        
        //$IdUnidad        = $this->getRequestParameter( 'IdUnidad' );
        $CodigoSunat     = $this->getRequestParameter( 'CodigoSunat' );
        $Descripcion     = $this->getRequestParameter( 'DescripcionCorta' );
        $UnidadTipo      = $this->getRequestParameter( 'UnidadTipo' );
        $NumeroDecimales = $this->getRequestParameter( 'NumeroDecimales' );
        $Estado          = $this->getRequestParameter( 'Estado' );

        $UsoFraccionFlag       = $this->getRequestParameter( 'UsoFraccionFlag' ) ? 1 : 0;
        $UnidadEquivalenteFlag = $this->getRequestParameter( 'UnidadEquivalenteFlag' ) ? 1 : 0;
        $EsUnidadMinimaFlag    = $this->getRequestParameter( 'EsUnidadMinima' ) ? 1 : 0;
        $DescripcionExtranjera = $this->getRequestParameter( 'DescripcionExtranjera' );

        $IdUnidadEquivalente  = $this->getRequestParameter( 'IdUnidadEquivalente' );
        $CantidadEquivalente  = $this->getRequestParameter( 'CantidadEquivalente' );
        try 
        {
            myUser::getUser()->validar_session();
            
            $o_MST_UnidadMastDP = new MST_UnidadMastDP();
            $o_MST_UnidadMastDP->setCodigoSunat( $CodigoSunat );
            $o_MST_UnidadMastDP->setDescripcionExtranjera( $DescripcionExtranjera );
            $o_MST_UnidadMastDP->setDescripcionCorta( $Descripcion );
            $o_MST_UnidadMastDP->setUnidadTipo( $UnidadTipo );
            $o_MST_UnidadMastDP->setNumeroDecimales( ( int ) $NumeroDecimales );
            $o_MST_UnidadMastDP->setEstado( $Estado );
            $o_MST_UnidadMastDP->setUsoFraccionFlag( $UsoFraccionFlag );
            $o_MST_UnidadMastDP->setUnidadEquivalenteFlag( $UnidadEquivalenteFlag );
            $o_MST_UnidadMastDP->setEsUnidadMinimaFlag( $EsUnidadMinimaFlag );
            if( $s_TipoProc == "nvo" )
            {
                //NUEVO
                $IdUnidad = MST_UnidadMastDP::recuperarId();
                $o_MST_UnidadMastDP->setIdUnidad( ( string ) $IdUnidad );
                $o_MST_UnidadMastDP->setFechaCreacion( date( "Y-m-d H:i:s" ) );
                $o_MST_UnidadMastDP->setUsuarioCreacion( myUser::getUser()->getUserId() );
                $o_MST_UnidadMastDP->setFechaModificacion( date( "Y-m-d H:i:s" ) );
                $o_MST_UnidadMastDP->setUsuarioModificacion( myUser::getUser()->getUserId() );
                $b_Result = $o_MST_UnidadMastDP->save();
                $i_Id = $IdUnidad;
            }
            else 
            {
                //UPDATE
                $o_MST_UnidadMastDP->setIdUnidad( $i_Id );
                $o_MST_UnidadMastDP->setFechaModificacion( date( "Y-m-d H:i:s" ) );
                $o_MST_UnidadMastDP->setUsuarioModificacion( myUser::getUser()->getUserId() );
                $b_Result = $o_MST_UnidadMastDP->update();
            }

            if( $b_Result )
            {
                if( $UsoFraccionFlag || $UnidadEquivalenteFlag )
                {
                    $o_MST_UnidadConversionMastDP = new MST_UnidadConversionMastDP();
                    $o_MST_UnidadConversionMastDP->setIdUnidad( $i_Id );
                    $o_MST_UnidadConversionMastDP->delete_by_unidad();

                    if( $IdUnidadEquivalente )
                    {
                        foreach ( $IdUnidadEquivalente as $s_Key => $s_Value ) 
                        {
                            $o_MST_UnidadConversionMastDP = new MST_UnidadConversionMastDP();
                            $o_MST_UnidadConversionMastDP->setIdUnidad( $i_Id );
                            $o_MST_UnidadConversionMastDP->setIdUnidadEquivalente( $s_Value );
                            if( isset( $CantidadEquivalente[$s_Key] ) && trim( $CantidadEquivalente[$s_Key] ) != "" )
                            {
                                $o_MST_UnidadConversionMastDP->setCantidadEquivalente( floatval( $CantidadEquivalente[$s_Key] ) );
                            }
                            $o_MST_UnidadConversionMastDP->setSecuencia( $s_Key );
                            $o_MST_UnidadConversionMastDP->setEstado( "A" );
                            $o_MST_UnidadConversionMastDP->setFechaCreacion( date( "Y-m-d H:i:s" ) );
                            $o_MST_UnidadConversionMastDP->setUsuarioCreacion( myUser::getUser()->getUserId() );
                            $o_MST_UnidadConversionMastDP->save();
                        }
                    }
                }
            }

            $a_Rs['type_sub'] = $TypeSub;
            $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 executeAudi()
    {
        $block          = $this->getRequestParameter( 'block' );
        $i_Id           = $this->getRequestParameter( 'i_Id' );
        $this->s_Topico = "Unidad de Medida";
        $o_MST_UnidadMastFN = new MST_UnidadMastFN();
        $this->o_ObjectBN = $o_MST_UnidadMastFN->selectByPK( $i_Id );
    }
    
    public function executeViewdel()
    {
        $this->block      = $this->getRequestParameter( 'block' );
        $this->i_Id       = $this->getRequestParameter( 'i_Id' );
        $this->s_TipoProc = $this->getRequestParameter( 's_TipoProc' );
        
        $o_MST_UnidadMastFN = new MST_UnidadMastFN();
        $this->o_MST_UnidadMastBN = $o_MST_UnidadMastFN->selectByPK( $this->i_Id );
    }
    
    public function executeDeleteRow()
    {
        $block      = $this->getRequestParameter( 'block' );
        $i_Id       = $this->getRequestParameter( 'i_Id' );
        $s_TipoProc = $this->getRequestParameter( 's_TipoProc' );
        try 
        {
            $o_MST_UnidadMastDP = new MST_UnidadMastDP();
            $o_MST_UnidadMastDP->setIdUnidad( $i_Id );
            $o_MST_UnidadMastDP->setEstado( "I" );
            $o_MST_UnidadMastDP->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;
    }
}