Formulário Validando Duas Vezes

Pessoal, bom dia!

Tenho um formulário que criei uma regra personalizada de validação, porém ele está validando duas vezes, ou seja, tenho que clicar duas vezes no botão de submit para ele enviar mesmo ele não existindo erros.

Segue o código:

_form.php




<div class="form">


<?php $form=$this->beginWidget('CActiveForm', array(

	'id'=>'documento-form',

        'focus' => array($model, 'tp_documento'),

	'enableAjaxValidation'=>false,

        'enableClientValidation' => true,

                    'clientOptions' => array(

                            'validateOnSubmit' => true,

                            'afterValidate' => 'js:checkErrors'

                    ),


));

?>

 <script>

                 function checkErrors(form, data, hasError) {

                      //if (hasError != true) {

                     if($('#Documento_id_responsavel').val()== "")

                     {

                            $(document).ready(function(){ $('#requisicao_fisica').css('display','block').addClass('error');  })    

                            $( "#requisicao_fisica" ).append( "<p class='errorMessage' id='Documento_id_reparticao_em'>Repartição Destino é obrigatória!</p>" );

                            return false;

                        

                    }else if ($('#Documento_id_responsavel').val()== "") {

                            $(document).ready(function(){ $('#requisicao_juridica').css('display','block').addClass('error');  })    

                            $( "#requisicao_juridica" ).append( "<p class='errorMessage' id='Documento_requisicao_juridica_em'>Repartição Externa de Destino é obrigatória!</p>" );

                            return false;

                            

                    }else{

                         $('#requisicao_fisica').addClass('row success');

                         $('#reparticao_destino').css('color', '#555574');

                         $( "#Documento_id_reparticao_em" ).remove();

                         return true;

                     }

                //}

                 

                }


 </script>    

    


	<p class="note">Campos com <span class="required">*</span> são obrigatórios.</p>

        <?php

            foreach(Yii::app()->user->getFlashes() as $key => $message) {

                echo '<div class="flash-' . $key . '">' . $message . "</div>\n";

            }

        ?>

	<?php echo $form->errorSummary($model); ?>


    <?php if ($model->isNewRecord){ ?>  

      

	<div class="row">

		<?php echo $form->labelEx($model,'id_tp_documento'); ?>

		<?php echo CHtml::activeDropDownList($model, 'id_tp_documento', CHtml::listData(TpDocumento::model()->findAll(), 'id_tp_documento', 'nome_tp_documento'),   array ('empty'=>'Selecione o tipo de documento')); ?>

		<?php echo $form->error($model,'id_tp_documento'); ?>

	</div>

        

        <?php

       

           Yii::app()->clientScript->registerScript('', " 

                    $( '#Documento_id_tp_documento' ).change(function() {

                      $('#Documento_id_responsavel').val('');

                      $('#id_reparticao').val('');

                      $('#Documento_id_responsavel_fornecedor').val('');

                      $('#id_responsavel_fornecedor').val('');

                     var valor = $('#Documento_id_tp_documento option:selected').text();

                       if(valor == 'Ofício' || valor == 'Ofício Circular'){

                            $('.requisicao_juridica').show();

                            $('#id_responsavel_fornecedor').focus();

                            $('.requisicao_fisica').hide();

                        }else{

                            $('.requisicao_fisica').show();

                            $('#id_reparticao').focus();

                            $('.requisicao_juridica').hide();

                        }

                    });                  

            ", CClientScript::POS_READY);

        ?>

     

        <div class="requisicao_fisica" id="requisicao_fisica">

            <div class="row">

            <label for="id_reparticao" class="required" id="reparticao_destino">Digite e <b><font color="red">SELECIONE</font></b> o nome/sigla da Repartição</label>

                    <?Php

                        $this->widget('zii.widgets.jui.CJuiAutoComplete',array(

                            'name'=>'id_reparticao',

                            'sourceUrl' => array('Reparticao/BuscaReparticoesResponsaveis'),

                            // additional javascript options for the autocomplete plugin

                            'options'=>array(

                                'minLength'=>'3',

                                'showAnim'=>'fold',

                                'select' => 'js:function(event, ui){  $("#Documento_id_responsavel").val(ui.item.value);                                                   

                                                    $(this).val(ui.item.label);  

                                                    

                                                    return false; }',

                            ),

                            'htmlOptions'=>array(

                                'style'=>'width:800px;',


                            ),

                        ));

                    ?>

            </div>

        </div>

        

           <div class="requisicao_juridica" id="requisicao_juridica">

            <div class="row">

            <label for="id_reparticao" class="required">Digite <b><font color="red">SELECIONE</font></b> o nome do contato externo</label>

                    <?Php

                        $this->widget('zii.widgets.jui.CJuiAutoComplete',array(

                            'name'=>'id_responsavel_fornecedor',

                            'sourceUrl' => array('ContatoExterno/BuscaResponsaveis'),

                            // additional javascript options for the autocomplete plugin

                            'options'=>array(

                                'minLength'=>'3',

                                'showAnim'=>'fold',

                                'select' => 'js:function(event, ui){  $("#Documento_id_responsavel_fornecedor").val(ui.item.value);                                                   

                                                    $(this).val(ui.item.label);      

                                                   

                                                    return false; }',

                            ),

                            'htmlOptions'=>array(

                               

                                'style'=>'width:800px;',


                            ),

                        ));

                    ?>

            </div>

        </div>


	<div class="row">

		<?php// echo $form->labelEx($model,'id_responsavel'); ?>

		<?php echo $form->hiddenField($model,'id_responsavel'); ?>

		<?php echo $form->error($model,'id_responsavel'); ?>

	</div>

        

        <div class="row">

		<?php// echo $form->labelEx($model,'id_responsavel'); ?>

		<?php echo $form->hiddenField($model,'id_responsavel_fornecedor'); ?>

		<?php echo $form->error($model,'id_responsavel_fornecedor'); ?>

	</div>

     

	<div class="row">

            <div class="compactRadioGroup">

                <?php echo $form->labelEx($model, 'entrada_saida'); ?>

                <?php

                echo $form->radioButtonList($model, 'entrada_saida', array('ENTRADA' => 'Entrada',

                    'SAÍDA' => 'Saída',

                      ), array('separator' => "  ")); // choose your own separator text

                ?>

                <?php echo $form->error($model, 'entrada_saida'); ?>

            </div>


        </div>

        

	

    <?Php } ?>

	<div class="row">

		<?php echo $form->labelEx($model,'referencia'); ?>

		<?php echo $form->textField($model,'referencia',array('size'=>60,'maxlength'=>75)); ?>

		<?php echo $form->error($model,'referencia'); ?>

	</div>


	<div class="row">

		<?php echo $form->labelEx($model,'desc_documento'); ?>

		<?php

             $this->widget('application.extensions.eckeditor.ECKEditor', array(

                'model'=>$model,

                'attribute'=>'desc_documento',

                 'config' => array(

                    'toolbar'=>array(

                        array( 'Source', '-', 'Font', 'Bold', 'Italic', 'Underline', 'Strike' ),

                       // array( 'paragraph', 'Image') ,

         

                    ),

                  ),

                )); 

                


               // echo $form->textArea($model,'desc_documento',array('rows'=>6, 'cols'=>50)); ?>

		<?php echo $form->error($model,'desc_documento'); ?>

	</div>

     

        </script>

        <?php if (!$model->isNewRecord){ ?>  

                <div> <b>Anexos:</b> <br />  <?Php $model->buscaAnexos($model->id_documento);  ?></div>

        <?php } ?>

        <div class="row" >

            

            <label for="id_documento_anexo" class="required">Digite o número do documento ou nº/ano que deseja anexar</label>

                    <?Php

                        $this->widget('zii.widgets.jui.CJuiAutoComplete',array(

                            'name'=>'documento[0]',

                            //'id'=>'documento[0]',

                            'sourceUrl' => array('Documento/BuscaPorNumero'),

                            // additional javascript options for the autocomplete plugin

                            'options'=>array(

                                'minLength'=>'1',

                                'showAnim'=>'fold',

                                'select' => 'js:function(event, ui){  

                                    $("#id_documento_anexo").val(ui.item.value+",");                                                   

                                                    $(this).val(ui.item.label);   

                                                    return false; }',

                            ),

                            'htmlOptions'=>array(

                                 'style'=>'width:100px;',


                            ),

                        ));

                        echo CHtml::button("+",array('title'=>"Adicionar", 'id'=>"remove",'onclick'=>'js: add();'));

                      

                        

                    ?>

           

        </div>


        <div id="nova"> </div>

 

        <div class="row">

            <input type="hidden" name="id_documento_anexo[]" id="id_documento_anexo">

        </div>

        

	<div class="row buttons" align="center">

		<?php echo CHtml::submitButton($model->isNewRecord ? 'Salvar' : 'Atualizar');  $imghtml=CHtml::image('images/pdf.png' , 'Gerar PDF', array('title'=>'Gerar PDF'));

                echo " ".CHtml::link($imghtml, array('documento/documento', 'id'=>$model->id_documento, 'id_responsavel_fornecedor'=>$model->id_responsavel_fornecedor ), array('target'=>'_blank'));  ?>

	</div>


<?php $this->endWidget(); ?>


</div><!-- form -->






Documento.php (model)




<?php


/**

 * This is the model class for table "sch_geinfoex.tb_documento".

 *

 * The followings are the available columns in table 'sch_geinfoex.tb_documento':

 * @property integer $id_documento

 * @property integer $numero_documento

 * @property integer $ano

 * @property integer $id_tp_documento

 * @property integer $id_responsavel

 * @property integer $id_usuario

 * @property string $entrada_saida

 * @property string $dt_documento

 * @property string $hr_documento

 * @property string $referencia

 * @property string $desc_documento

 * @property integer $id_responsavel_fornecedor

 * @property integer $id_reparticao_origem

 * @property integer $id_reparticao_destino

 * @property integer $id_contato_externo

 */

class Documento extends CActiveRecordGravaLog

{

         public $total_registros;

         public $id_documento_anexo;

	/**

	 * Returns the static model of the specified AR class.

	 * @param string $className active record class name.

	 * @return Documento the static model class

	 */

	public static function model($className=__CLASS__)

	{

		return parent::model($className);

	}


	/**

	 * @return string the associated database table name

	 */

	public function tableName()

	{

		return 'sch_geinfoex.tb_documento';

	}


	/**

	 * @return array validation rules for model attributes.

	 */

	public function rules()

	{

		// NOTE: you should only define rules for those attributes that

		// will receive user inputs.

		return array(

			array('referencia, desc_documento', 'required'),

			array('id_tp_documento,  entrada_saida', 'required','on'=>'CADASTRAR'),

			array('numero_documento, ano, id_tp_documento, id_responsavel, id_usuario, id_responsavel_fornecedor', 'numerical', 'integerOnly'=>true),

			array('entrada_saida, referencia', 'length', 'max'=>75),

			// The following rule is used by search().

			// Please remove those attributes that should not be searched.

			array('id_documento, numero_documento, ano, id_tp_documento, id_responsavel, id_usuario, entrada_saida, dt_documento, hr_documento, referencia, desc_documento, id_responsavel_fornecedor', 'safe', 'on'=>'search'),

		);

              

                        

                 

	}


	/**

	 * @return array relational rules.

	 */

	public function relations()

	{

		// NOTE: you may need to adjust the relation name and the related

		// class name for the relations automatically generated below.

		return array(

                     'usuarios' => array(self::BELONGS_TO, 'Usuario', 'id_usuario'),

                     'contatosexternos' => array(self::BELONGS_TO, 'ContatoExterno', 'id_contato_externo'),

                     'responsaveis' => array(self::BELONGS_TO, 'Responsavel', 'id_responsavel', 'joinType'=>'LFET JOIN'),

                     'tpdocumentos' => array(self::BELONGS_TO, 'TpDocumento', 'id_tp_documento'),

                     'anexos' => array(self::BELONGS_TO, 'Anexo', 'id_documento'),

		);

	}


	/**

	 * @return array customized attribute labels (name=>label)

	 */

	public function attributeLabels()

	{

		return array(

			'id_documento' => 'Id Documento',

			'numero_documento' => 'Número do Documento',

			'ano' => 'Ano',

			'id_tp_documento' => 'Tipo de Documento',

			'id_responsavel' => 'Destinatário',

			'id_usuario' => 'Usuário',

			'entrada_saida' => 'Entrada/Saída',

			'dt_documento' => 'Data',

			'hr_documento' => 'Hora',

			'referencia' => 'Referência',

			'desc_documento' => 'Descrição',

			'id_responsavel_fornecedor' => 'Contato Externo',

		);

	}


	/**

	 * Retrieves a list of models based on the current search/filter conditions.

	 * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.

	 */

	public function search()

	{

		// Warning: Please modify the following code to remove attributes that

		// should not be searched.


		$criteria=new CDbCriteria;

               

		$criteria->compare('id_documento',$this->id_documento);

		$criteria->compare('numero_documento',$this->numero_documento);

		$criteria->compare('ano',$this->ano);

		$criteria->compare('id_tp_documento',$this->id_tp_documento);

		$criteria->compare('id_responsavel',$this->id_responsavel);

		$criteria->compare('id_usuario',$this->id_usuario);

		$criteria->addSearchCondition('entrada_saida', '%' . $this->entrada_saida . '%', false, 'AND', 'ILIKE');

		 if ($this->dt_documento != NULL) {


                    $this->dt_documento = Yii::app()->dateFormatter->format('yyyy-MM-dd', CDateTimeParser::parse($this->dt_documento, 'dd/MM/yyyy'));

                }

                 $criteria->compare('dt_documento', $this->dt_documento, false);

		$criteria->compare('hr_documento',$this->hr_documento,false);

		$criteria->addSearchCondition('referencia', '%' . $this->referencia . '%', false, 'AND', 'ILIKE');

		$criteria->addSearchCondition('desc_documento', '%' . $this->desc_documento . '%', false, 'AND', 'ILIKE');

		$criteria->compare('id_responsavel_fornecedor',$this->id_responsavel_fornecedor,false);

                $criteria->compare('id_usuario', Yii::app()->user->getId(),  false);

                $criteria->order = 'id_documento DESC';

		return new CActiveDataProvider($this, array(

			'criteria'=>$criteria,

		));

	}

        

         

    

     protected function beforeSave() {

    

        foreach ($this->metadata->tableSchema->columns as $columnName => $column) {

               

          

            if ($column->dbType == 'date') {

                $this->$columnName = date('Y-m-d', CDateTimeParser::parse($this->$columnName, Yii::app()->locale->dateFormat));

     

            } elseif ($column->dbType == 'datetime') {

                $this->$columnName = date('Y-m-d H:i:s', CDateTimeParser::parse($this->$columnName, Yii::app()->locale->dateFormat));

            }  


        }

        return parent::beforeSave();

    }

    

     protected function beforeUpdate() {

        foreach ($this->metadata->tableSchema->columns as $columnName => $column) {

               

          

            if ($column->dbType == 'date') {

               

                $this->$columnName = date('Y-m-d', CDateTimeParser::parse($this->$columnName, Yii::app()->locale->dateFormat));

     

            } elseif ($column->dbType == 'datetime') {

                $this->$columnName = date('Y-m-d H:i:s', CDateTimeParser::parse($this->$columnName, Yii::app()->locale->dateFormat));

            }  


        }

        return parent::beforeUpdate();

    }


    protected function afterFind() {


        foreach ($this->metadata->tableSchema->columns as $columnName => $column) {


            if (!strlen($this->$columnName))

                continue;


            if ($column->dbType == 'date') {

                $this->$columnName = Yii::app()->dateFormatter->formatDateTime(

                        CDateTimeParser::parse($this->$columnName, 'yyyy-MM-dd'), 'medium', null);

            } elseif ($column->dbType == 'datetime') {

                $this->$columnName = Yii::app()->dateFormatter->formatDateTime(

                        CDateTimeParser::parse($this->$columnName, 'yyyy-MM-dd hh:mm:ss'));

            } 

        }

        return true;

    }

    

    public function verificaNumeracaoDocumento($id_secretaria, $ano)

    {

        

        $sql = "SELECT  numeracao_atual from sch_geinfoex.tb_numeracao where id_reparticao=$id_secretaria and ano=$ano";

        $cmd = Yii::app()->db->createCommand($sql);

        $res = $cmd->queryAll();

        

        if(empty($res)){

             

            $sql_insert = "INSERT INTO sch_geinfoex.tb_numeracao (numeracao_atual, ano, id_reparticao) VALUES (1, $ano, $id_secretaria);  ";

            $cmd_insert = Yii::app()->db->createCommand($sql_insert);

            $result_insert = $cmd_insert->queryAll();

            return 1;

            

        }else{

            $sql_update = "UPDATE  sch_geinfoex.tb_numeracao  SET numeracao_atual= numeracao_atual+1 WHERE id_reparticao=$id_secretaria AND ano=$ano";

            $cmd_update = Yii::app()->db->createCommand($sql_update);

            $result_update = $cmd_update->queryAll();

            return $res[0]['numeracao_atual']; 

        }

        

      

        

    }

    

    public function verificaPermisssaoDocumento($id){

       

        $id_documento = $id;

        $id_usuario = Yii::app()->user->id;

        

        if($id_usuario==NULL){

             return false;

        }

        $sql = "SELECT count(*) as total FROM sch_geinfoex.tb_documento WHERE id_usuario=$id_usuario AND id_documento=$id_documento";

       

        $cmd = Yii::app()->db->createCommand($sql);

        $res = $cmd->queryAll();

      

        if((int) $res[0]['total']==1){

          

            return true;

        }else{

        

            return false;

        }

    }

    

     public function buscaPorNumero(){

            

            $_GET[term]=addslashes($_GET[term]);

                        

            $id_usuario = Yii::app()->user->getId();

            

            if (strstr($_GET[term], '/', true))

            { 

                 $numero =  explode('/', $_GET[term], 2);

                  

                 $ano = (string) $numero[1];

                

                 $numero = (string) $numero[0];

             

		

                $sql = "SELECT id_documento, numero_documento, ano FROM sch_geinfoex.tb_documento where numero_documento=$numero AND ano=$ano and id_usuario=$id_usuario ORDER BY ano desc";

            }else{

                

               $sql = "SELECT id_documento, numero_documento, ano FROM sch_geinfoex.tb_documento where numero_documento=$_GET[term] and id_usuario=$id_usuario ORDER BY ano desc";

            }

            

                     

            $cmd = Yii::app()->db->createCommand($sql);

            $res = $cmd->queryAll();

            

            $i = 0;

            $narray = array ();

            foreach ($res as $label => $value){

                            $narray[$i]['label'] = $res[$i]['numero_documento']."/".$res[$i]['ano'];

                            $narray[$i]['value'] = $res[$i]['id_documento'];

                            $i++;

           }

       

           echo json_encode($narray);

         }

    

    public function buscaReparticaoPorIdDocumento($id_documento)

    {

        $sql="SELECT id_reparticao_origem FROM sch_geinfoex.tb_documento WHERE id_documento=$id_documento";

        $sql = Yii::app()->db->createCommand($sql)->query() or die (pg_last_error());

        $d = $sql->read();

       

        return $d['id_reparticao_origem'];

    }

    

    public function buscaDadosDocumentoInternoPorId($id_documento)

    {

       

        $sql="SELECT doc.numero_documento, doc.ano, tpdoc.nome_tp_documento as tp_documento, doc.id_reparticao_destino as id_reparticao_responsavel ,resp.nome_responsavel as nome_responsavel, resp.cargo as cargo, doc.id_reparticao_origem as id_reparticao_origem, usu.nome as nome, usu.funcao as funcao_remetente, rep.sgl_reparticao, doc.dt_documento, doc.hr_documento, upper(doc.referencia) as referencia, doc.desc_documento

        FROM sch_geinfoex.tb_documento doc, sch_geinfoex.tb_tp_documento tpdoc, tb_responsavel resp, sch_geinfoex.tb_usuario usu, tb_reparticao rep

        WHERE

        doc.id_tp_documento=tpdoc.id_tp_documento

        AND

        resp.id_responsavel=doc.id_responsavel

        AND

        usu.id_usuario=doc.id_usuario

        AND

        doc.id_reparticao_origem=rep.id_reparticao

        AND doc.id_documento='$id_documento'";

       

        $sql = Yii::app()->db->createCommand($sql)->query() or die (pg_last_error());

        $d = $sql->read();

     

        return $d;

        

    }

    

    public function buscaDadosDocumentoExternoPorId($id_documento)

    {

      

        $sql="SELECT doc.numero_documento, doc.ano, tpdoc.nome_tp_documento as tp_documento, ce.id_contato_externo as id_reparticao_responsavel, ce.razao_social as contato_externo, ce.end_com_logradouro as ce_logradouro, ce.end_com_numero as ce_numero, ce.end_com_compl as ce_compl, ce.end_com_bairro as ce_bairro, ce.end_com_cidade as ce_cidade, ce.end_com_uf as ce_uf, ce.end_com_cep ce_cep, respf.nome as nome_responsavel, respf.cargo as cargo, doc.id_reparticao_origem as id_reparticao_usuario, usu.nome as nome, usu.funcao as funcao_remetente, rep.sgl_reparticao, doc.dt_documento, doc.hr_documento, upper(doc.referencia) as referencia, doc.desc_documento FROM 

            sch_geinfoex.tb_documento doc,

            sch_geinfoex.tb_tp_documento tpdoc,

            sch_geinfoex.tb_contato_externo ce,

            sch_geinfoex.tb_contato_externo_responsavel cer,

            sch_geinfoex.tb_responsavel_fornecedor respf,

            sch_geinfoex.tb_usuario usu,

            tb_reparticao rep

            WHERE

            doc.id_tp_documento=tpdoc.id_tp_documento

            AND

            doc.id_responsavel_fornecedor=respf.id_responsavel_fornecedor

            AND

            ce.id_contato_externo=cer.id_contato_externo

            AND

            respf.id_responsavel_fornecedor=cer.id_responsavel_fornecedor

            AND

            usu.id_reparticao=rep.id_reparticao

            AND

            usu.id_usuario=doc.id_usuario

            AND

            doc.id_documento='$id_documento'";

   

        $sql = Yii::app()->db->createCommand($sql)->query() or die (pg_last_error());

        $d = $sql->read();

        return $d;

        

    }

    

    public function gravaAnexos($id_documento_origem, $id_documento_anexo)

    {

      //removendo a vírgula do final do array  

      $id_documento_anexo[0] = rtrim($id_documento_anexo[0], ',');

      $id_documento_anexo = explode(',', $id_documento_anexo[0]);

      


         foreach ($id_documento_anexo as $value){

           

             $sql="INSERT INTO sch_geinfoex.tb_anexo (id_documento_origem, id_documento_anexo) VALUES ($id_documento_origem, $value) ";

             $sql = Yii::app()->db->createCommand($sql)->query() or die (pg_last_error());

             $d = $sql->read(); 

         }

        

       

        return $d;

    }

    public function atualizaAnexos($id_documento_origem, $id_documento_anexo){

      

       //removendo a vírgula do final do array  

      $id_documento_anexo[0] = rtrim($id_documento_anexo[0], ',');

      $id_documento_anexo = explode(',', $id_documento_anexo[0]);

      

      $sqld="DELETE FROM sch_geinfoex.tb_anexo WHERE id_documento_origem=$id_documento_origem";

      $sqld = Yii::app()->db->createCommand($sqld)->query() or die (pg_last_error());

      $d = $sqld->read();

      

      foreach ($id_documento_anexo as $value){

           

             $sqli="INSERT INTO sch_geinfoex.tb_anexo (id_documento_origem, id_documento_anexo) VALUES ($id_documento_origem, $value) ";

             $sqli = Yii::app()->db->createCommand($sqli)->query() or die (pg_last_error());

             $d = $sqli->read(); 

         }

        

    }

    public function buscaAnexos($id_documento)

    {

             $sql="SELECT  doc.id_documento, doc.numero_documento, doc.ano, doca.numero_documento, doca.ano FROM sch_geinfoex.tb_anexo a, sch_geinfoex.tb_documento doc, sch_geinfoex.tb_documento doca

                    WHERE

                    a.id_documento_origem=doc.id_documento

                    AND

                    doca.id_documento=a.id_documento_anexo

                    AND

                    doc.id_documento=$id_documento

                    ";

            

            $cmd = Yii::app()->db->createCommand($sql);

            $res = $cmd->queryAll();

            $i = 0;

            foreach ($res as $label => $value){

                            echo $res[$i]['numero_documento']."/".$res[$i]['ano']."<br>";

                             $i++;

                            

           }

           if (empty($res)){

               echo "Não existem anexos para este documento";

           }

             

    }




  

}




Alguém tem alguma idéia do que possa ser? Já alterei as configurações do formulário e não obtive êxito.

Ninguém teria alguma ideia do que teste posso fazer ainda não consegui resolver o problema.

?

Eu? hehehe

Primeira coisa, tira o <script> de dentro do formulário.

Segundo, tenta colocar o return true da sua função fora da condição.

Exemplo:




<script type="text/javascript">

	 function checkErrors(form, data, hasError) {

		  //if (hasError != true) {

		 if($('#Documento_id_responsavel').val()== "")

		 {

				$(document).ready(function(){ $('#requisicao_fisica').css('display','block').addClass('error');  })    

				$( "#requisicao_fisica" ).append( "<p class='errorMessage' id='Documento_id_reparticao_em'>Repartição Destino é obrigatória!</p>" );

				return false;

			

		}else if ($('#Documento_id_responsavel').val()== "") {

				$(document).ready(function(){ $('#requisicao_juridica').css('display','block').addClass('error');  })    

				$( "#requisicao_juridica" ).append( "<p class='errorMessage' id='Documento_requisicao_juridica_em'>Repartição Externa de Destino é obrigatória!</p>" );

				return false;

				

		} else {

			 $('#requisicao_fisica').addClass('row success');

			 $('#reparticao_destino').css('color', '#555574');

			 $( "#Documento_id_reparticao_em" ).remove();

		 }

		 return true;

	//} 

	}

 </script>    



Consegui resolver fazendo as alterações abaixo no javascript, pois havia um conflito com o editor de texto. Baixei o Editme e funcionou até melhor.

Segue:

funcoes.js




function checkErrors(hasError) {

                 

                 

                 var idResp =  $('#Documento_id_responsavel').val();

                 var idRespFornecedor = $('#Documento_id_responsavel_fornecedor').val();

                 var tipo = $('#Documento_id_tp_documento option:selected').text();

                 

                 if ((tipo=="Ofício" || tipo=="Ofício Circular") && idRespFornecedor=="")

                 {  

                   

                    $(document).ready(function(){ $('#requisicao_juridica').css('display','block').addClass('error');  })    

                    if($("#Documento_requisicao_juridica_em").size() == 0){

                        $( "#requisicao_juridica" ).append( "<p class='errorMessage' id='Documento_requisicao_juridica_em'>Repartição Externa de Destino é obrigatória!</p>" );

                    }

                    hasError = true;

                    return false;

                    

                 }else if ((tipo=="Ofício" || tipo=="Ofício Circular") && idRespFornecedor!=""){

                   

                 

                   $('#requisicao_juridica').addClass('row success');

                   $('#reparticao_dest_juridica').css('color', '#555574');

                   $( "#Documento_requisicao_juridica_em" ).remove();

                   hasError = false;

                   return true;

                     

                 }

                 

                 else if ((tipo!="Ofício" && tipo!="Ofício Circular") && idResp=="")

                 {

                    

                    $(document).ready(function(){ $('#requisicao_fisica').css('display','block').addClass('error');  })    

                    if($("#Documento_id_reparticao_em").size() == 0){

                        $( "#requisicao_fisica" ).append( "<p class='errorMessage' id='Documento_id_reparticao_em'>Repartição Destino é obrigatória!</p>" );

                    }

                    hasError = true;

                    return false;

                    

                 }else if ((tipo!="Ofício" && tipo!="Ofício Circular") && idResp!=""){

                     

                   $('#requisicao_fisica').addClass('row success');

                   $('#reparticao_dest_fisica').css('color', '#555574');

                   $( "#Documento_id_reparticao_em" ).remove();

                   hasError = false;

                   return true;

                   

                 }                 

                  return true;   

 }




_form.php




<div class="form">


<?php $form=$this->beginWidget('CActiveForm', array(

	'id'=>'documento-form',

        'focus' => array($model, 'tp_documento'),

	'enableAjaxValidation'=>false,

        'enableClientValidation' => true,

                    'clientOptions' => array(

                            'validateOnSubmit' => true,

                            'afterValidate' => 'js:checkErrors'

                    ),


));

?>

    


	<p class="note">Campos com <span class="required">*</span> são obrigatórios.</p>

        <?php

            foreach(Yii::app()->user->getFlashes() as $key => $message) {

                echo '<div class="flash-' . $key . '">' . $message . "</div>\n";

            }

        ?>

	<?php echo $form->errorSummary($model); ?>


    <?php if ($model->isNewRecord){ ?>  

      

	<div class="row">

		<?php echo $form->labelEx($model,'id_tp_documento'); ?>

		<?php echo CHtml::activeDropDownList($model, 'id_tp_documento', CHtml::listData(TpDocumento::model()->findAll(), 'id_tp_documento', 'nome_tp_documento'),   array ('empty'=>'Selecione o tipo de documento')); ?>

		<?php echo $form->error($model,'id_tp_documento'); ?>

	</div>

        

        <?php

       

           Yii::app()->clientScript->registerScript('', " 

                    $( '#Documento_id_tp_documento' ).change(function() {

                      $('#Documento_id_responsavel').val('');

                      $('#id_reparticao').val('');

                      $('#Documento_id_responsavel_fornecedor').val('');

                      $('#id_responsavel_fornecedor').val('');

                     var valor = $('#Documento_id_tp_documento option:selected').text();

                       if(valor == 'Ofício' || valor == 'Ofício Circular'){

                            $('.requisicao_juridica').show();

                            $('#id_responsavel_fornecedor').focus();

                            $('.requisicao_fisica').hide();

                        }else{

                            $('.requisicao_fisica').show();

                            $('#id_reparticao').focus();

                            $('.requisicao_juridica').hide();

                        }

                    });                  

            ", CClientScript::POS_READY);

        ?>

     

        <div class="requisicao_fisica" id="requisicao_fisica">

            <div class="row">

            <label for="id_reparticao" class="required" id="reparticao_dest_fisica">Digite e <b><font color="red">SELECIONE</font></b> o nome/sigla da Repartição</label>

                    <?Php

                        $this->widget('zii.widgets.jui.CJuiAutoComplete',array(

                            'name'=>'id_reparticao',

                            'sourceUrl' => array('Reparticao/BuscaReparticoesResponsaveis'),

                            // additional javascript options for the autocomplete plugin

                            'options'=>array(

                                'minLength'=>'3',

                                'showAnim'=>'fold',

                                'select' => 'js:function(event, ui){  $("#Documento_id_responsavel").val(ui.item.value);                                                   

                                                    $(this).val(ui.item.label);  

                                                    

                                                    return false; }',

                            ),

                            'htmlOptions'=>array(

                                'style'=>'width:800px;',


                            ),

                        ));

                    ?>

            </div>

        </div>

        

           <div class="requisicao_juridica" id="requisicao_juridica">

            <div class="row">

            <label for="id_reparticao" class="required" id="reparticao_dest_juridica">Digite <b><font color="red">SELECIONE</font></b> o nome do contato externo</label>

                    <?Php

                        $this->widget('zii.widgets.jui.CJuiAutoComplete',array(

                            'name'=>'id_responsavel_fornecedor',

                            'sourceUrl' => array('ContatoExterno/BuscaResponsaveis'),

                            // additional javascript options for the autocomplete plugin

                            'options'=>array(

                                'minLength'=>'3',

                                'showAnim'=>'fold',

                                'select' => 'js:function(event, ui){  $("#Documento_id_responsavel_fornecedor").val(ui.item.value);                                                   

                                                    $(this).val(ui.item.label);      

                                                   

                                                    return false; }',

                            ),

                            'htmlOptions'=>array(

                               

                                'style'=>'width:800px;',


                            ),

                        ));

                    ?>

            </div>

        </div>


	<div class="row">

		<?php// echo $form->labelEx($model,'id_responsavel'); ?>

		<?php echo $form->hiddenField($model,'id_responsavel'); ?>

		<?php echo $form->error($model,'id_responsavel'); ?>

	</div>

        

        <div class="row">

		<?php// echo $form->labelEx($model,'id_responsavel'); ?>

		<?php echo $form->hiddenField($model,'id_responsavel_fornecedor'); ?>

		<?php echo $form->error($model,'id_responsavel_fornecedor'); ?>

	</div>

     

	<div class="row">

            <div class="compactRadioGroup">

                <?php echo $form->labelEx($model, 'entrada_saida'); ?>

                <?php

                echo $form->radioButtonList($model, 'entrada_saida', array('ENTRADA' => 'Entrada',

                    'SAÍDA' => 'Saída',

                      ), array('separator' => "  ")); // choose your own separator text

                ?>

                <?php echo $form->error($model, 'entrada_saida'); ?>

            </div>


        </div>

        

	

    <?Php } ?>

	<div class="row">

		<?php echo $form->labelEx($model,'referencia'); ?>

		<?php echo $form->textField($model,'referencia',array('size'=>60,'maxlength'=>75)); ?>

		<?php echo $form->error($model,'referencia'); ?>

	</div>


	<div class="row">

		<?php echo $form->labelEx($model,'desc_documento'); ?>

            	<?php

                

                    $this->widget('ext.editMe.widgets.ExtEditMe', array(

                    'model'=>$model,

                    'attribute'=>'desc_documento',

                    'width'=>'700',

                    'height'=>'250',

                    'toolbar'=>array(

                        array(

                            'Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'RemoveFormat', 

                        ),

                        array(

                            'NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote',

                            '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock',

                        ),

                        array(

                            'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo', 

                        ),

                        array(

                             'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak',

                        ),

                    )

                ));


                 ?>

		<?php echo $form->error($model,'desc_documento'); ?>

	</div>

     

        </script>

        <?php if (!$model->isNewRecord){ ?>  

                <div> <b>Anexos:</b> <br />  <?Php $model->buscaAnexos($model->id_documento);  ?></div>

        <?php } ?>

        <div class="row" >

            

            <label for="id_documento_anexo" class="required">Digite o número do documento ou nº/ano que deseja anexar</label>

                    <?Php

                        $this->widget('zii.widgets.jui.CJuiAutoComplete',array(

                            'name'=>'documento[0]',

                            //'id'=>'documento[0]',

                            'sourceUrl' => array('Documento/BuscaPorNumero'),

                            // additional javascript options for the autocomplete plugin

                            'options'=>array(

                                'minLength'=>'1',

                                'showAnim'=>'fold',

                                'select' => 'js:function(event, ui){  

                                    $("#id_documento_anexo").val(ui.item.value+",");                                                   

                                                    $(this).val(ui.item.label);   

                                                    return false; }',

                            ),

                            'htmlOptions'=>array(

                                 'style'=>'width:100px;',


                            ),

                        ));

                        

                     

                       

               

                        

                        echo CHtml::button("+",array('title'=>"Adicionar", 'id'=>"remove",'onclick'=>'js: add();'));

                      

                        

                    ?>

           

        </div>


        <div id="nova"> </div>

 

        <div class="row">

            <input type="hidden" name="id_documento_anexo[]" id="id_documento_anexo">

        </div>

        

	<div class="row buttons" align="center">

		<?php echo CHtml::submitButton($model->isNewRecord ? 'Salvar' : 'Atualizar');  $imghtml=CHtml::image('images/pdf.png' , 'Gerar PDF', array('title'=>'Gerar PDF'));

               if (!$model->isNewRecord){

                     echo " ".CHtml::link($imghtml, array('documento/documento', 'id'=>$model->id_documento, 'id_responsavel_fornecedor'=>$model->id_responsavel_fornecedor ), array('target'=>'_blank'));

               

               }  ?>

	</div>


<?php $this->endWidget(); ?>


</div><!-- form -->