Yii Framework Forum: Formulário Validando Duas Vezes - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Formulário Validando Duas Vezes Rate Topic: -----

#1 User is offline   samjf 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 44
  • Joined: 26-June 12

Posted 28 November 2013 - 07:42 AM

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.
0

#2 User is offline   samjf 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 44
  • Joined: 26-June 12

Posted 03 December 2013 - 06:29 AM

View Postsamjf, on 28 November 2013 - 07:42 AM, said:

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 ideia 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.

Quote

Newerton
?
0

#3 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 828
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 05 December 2013 - 09:02 PM

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>    

Newerton Vargas de Araújo
0

#4 User is offline   samjf 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 44
  • Joined: 26-June 12

Posted 16 December 2013 - 02:25 PM

View PostNewerton, on 05 December 2013 - 09:02 PM, said:

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 -->

0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users