<?php
class SaveClieCustomAction extends wtActions 
{
    public function execute()
    {
        $a_lst = array( "error" => false );

        $con = Conexion::getConexion();
        $con->begin();
        try
        {
            $ClasePersona   = $this->getRequestParameter( 'ClasePersona' );
            $Direccion      = $this->getRequestParameter( 'Direccion' );
            $Documento      = trim( $this->getRequestParameter( 'Documento' ) );
            $Email          = $this->getRequestParameter( 'Email' );
            $NombreCompleto = $this->getRequestParameter( 'NombreCompleto' );
            $TipoDocumento  = $this->getRequestParameter( 'TipoDocumento' );

            $ApellidoMaterno = $this->getRequestParameter( 'ApellidoMaterno' );
            $ApellidoPaterno = $this->getRequestParameter( 'ApellidoPaterno' );
            $Nombres         = $this->getRequestParameter( 'Nombres' );
            $Sexo            = $this->getRequestParameter( 'Sexo' );
            $PaisId          =  "9589";
            $Nacionalidad    = "1";

            $EsAgenteRetenedor = $this->getRequestParameter( 'EsAgenteRetenedor' );
            $IdRetencion       = $this->getRequestParameter( 'IdRetencion' );

            $o_MST_PersonaMastBN = MST_PersonaMastFN::buscarClientePorNroDocumento( $Documento );
            if( $o_MST_PersonaMastBN )
            {
                if( is_array( $o_MST_PersonaMastBN ) )
                {
                    throw new Exception( "El Cliente tiene multiple Registro con el numero de Documento [{$a_Result["ruc"]}] Por favor Revisar." );
                }
                $con->commit();
                $a_lst['id'] = $o_MST_PersonaMastBN->getIdPersona();
                echo json_encode( $a_lst );
                return ViewResponse::NONE;
            }

            if( $ClasePersona == "N" )
            {
                if( $TipoDocumento == "RUC" )
                {
                    if( trim( $DocumentoIdentidad ) == "" )
                    {
                        //throw new Exception( "Por favor registre su Documento de Identidad." );
                    }
                }
                $NombreCompleto = $Nombres." ".$ApellidoPaterno." ".$ApellidoMaterno;
            }

            $o_MST_PaisFN = new MST_PaisFN();
            $o_MST_PaisBN = $o_MST_PaisFN->selectByPK( $PaisId );

            $o_MST_PersonaMastDP = new MST_PersonaMastDP();
            $o_MST_PersonaMastDP->setTipoPersona( $ClasePersona );
            $o_MST_PersonaMastDP->setNombreCompleto( $NombreCompleto );
            $o_MST_PersonaMastDP->setNombres( $Nombres );
            $o_MST_PersonaMastDP->setApellidoPaterno( $ApellidoPaterno );
            $o_MST_PersonaMastDP->setApellidoMaterno( $ApellidoMaterno );
            $o_MST_PersonaMastDP->setSexo( $Sexo );
            $o_MST_PersonaMastDP->setEmail( $Email );
            $o_MST_PersonaMastDP->setTipoDocumento( $TipoDocumento );
            $o_MST_PersonaMastDP->setDocumento( $Documento );
            //$o_MST_PersonaMastDP->setFechaNacimiento( $a_Result["fecha_actividad"] );
            $o_MST_PersonaMastDP->setEsCliente( "SI" );
            $o_MST_PersonaMastDP->setEsProveedor( "NO" );
            $o_MST_PersonaMastDP->setEsEmpleado( "NO" );
            $o_MST_PersonaMastDP->setEsOtro( "NO" );
            $o_MST_PersonaMastDP->setDireccion( $Direccion );
            $o_MST_PersonaMastDP->setEstado( "A" );

            $o_MST_PersonaMastDP->setPaisId( $o_MST_PaisBN->getId() );
            $o_MST_PersonaMastDP->setPaisDesc( $o_MST_PaisBN->getNombre() );
            $o_MST_PersonaMastDP->setNacionalidad( $Nacionalidad );

            $o_MST_PersonaMastDP->setEsAgenteRetenedor( ( int ) $EsAgenteRetenedor );
            $o_MST_PersonaMastDP->setIdRetencion( ( int ) $IdRetencion );

            $i_Id = MST_PersonaMastFN::recuperarId();
            $o_MST_PersonaMastDP->setIdPersona( ( int ) $i_Id );
            $o_MST_PersonaMastDP->setIdCompania( myUser::getUser()->getIdBusiness() );
            $o_MST_PersonaMastDP->setFechaCreacion( date( "Y-m-d H:i:s" ) );
            $o_MST_PersonaMastDP->setUsuarioCreacion( myUser::getUser()->getUserId() );
            $o_MST_PersonaMastDP->setFechaModificacion( date( "Y-m-d H:i:s" ) );
            $o_MST_PersonaMastDP->setUsuarioModificacion( myUser::getUser()->getUserId() );
            //pr( $o_MST_PersonaMastDP );
            $b_Result = $o_MST_PersonaMastDP->save();

            //se recuperar el Vendedor
            $o_MST_PersonaMastBN = MST_PersonaMastFN::buscarPersonaPorIdUsuario( myUser::getUser()->getUserId() );
            if( is_array( $o_MST_PersonaMastBN ) )
            {
                throw new Exception( "11: El Usuario Vendedor tiene multiple Registro con el ID de Usuario [{myUser::getUser()->getUserId()}] Por favor Revisar." );
            }

            $DivisionId    = "1";
            $NivelPrecioId = "1";
            $cboVendedorId = $o_MST_PersonaMastBN->getIdPersona();
            $CreditoHold   = "NO";

            $o_MST_ClienteMastFN = new MST_ClienteMastFN();
            $o_MST_ClienteMastBN = $o_MST_ClienteMastFN->selectByPK( $i_Id );
            if( $o_MST_ClienteMastBN )
            {
                //pr( "upd" );
                //SE ACTUALIZA
                $o_MST_ClienteMastDP = new MST_ClienteMastDP();
                $o_MST_ClienteMastDP->setIdCliente( ( int ) $i_Id );
                $o_MST_ClienteMastDP->setCodCanal( $DivisionId );
                $o_MST_ClienteMastDP->setTipoVenta( $NivelPrecioId );
                $o_MST_ClienteMastDP->setVendedor( ( int ) $cboVendedorId );
                $o_MST_ClienteMastDP->setVendedorCod( myUser::getUser()->getUserId() );
                $o_MST_ClienteMastDP->setCreditoHold( $CreditoHold );
                $o_MST_ClienteMastDP->setUsuarioModificacion( myUser::getUser()->getUserId());
                $o_MST_ClienteMastDP->setFechaModificacion( date( "Y-m-d H:i:s" ));
                $b_Result = $o_MST_ClienteMastDP->update();
            }
            else 
            {
                //pr( "ins" );
                //SE INGRESA NUEVO REGISTRO
                $o_MST_ClienteMastDP = new MST_ClienteMastDP();
                $o_MST_ClienteMastDP->setIdCliente( ( int ) $i_Id );
                $o_MST_ClienteMastDP->setCodCanal( $DivisionId );
                $o_MST_ClienteMastDP->setTipoVenta( $NivelPrecioId );
                $o_MST_ClienteMastDP->setVendedor( ( int ) $cboVendedorId );
                $o_MST_ClienteMastDP->setVendedorCod( myUser::getUser()->getUserId() );
                $o_MST_ClienteMastDP->setCreditoHold( $CreditoHold );
                $o_MST_ClienteMastDP->setUsuarioCreacion( myUser::getUser()->getUserId() );
                $o_MST_ClienteMastDP->setFechaCreacion( date( "Y-m-d H:i:s" ) );
                $o_MST_ClienteMastDP->setUsuarioModificacion( myUser::getUser()->getUserId() );
                $o_MST_ClienteMastDP->setFechaModificacion( date( "Y-m-d H:i:s" ) );
                $b_Result = $o_MST_ClienteMastDP->save();
            }
            //pr( $o_MST_ClienteMastDP );
            $a_lst['id'] = $i_Id;

            $con->commit();
        }
        catch( Exception $o_Exception )
        {
            $con->rollback();
            $a_lst['error']         = true;
            $a_lst['mensaje_error'] = $o_Exception->getMessage();
        }

        echo json_encode( $a_lst );
        return ViewResponse::NONE;
    }
}