Form for a different model

Asked

Viewed 38 times

2

I’m using Cakephp 2.6.4.

I have two tables in the database: despesas and receitas. I have the CRUD methods of spending and revenue. I created the controller RelatoriosController for detailed reports of expenses and revenues, but I want to reuse the model Despesa and Receita, besides the callbacks (afterFind, beforeFind, etc.).

How do I do that?

My control Despesas is as follows:

Redundant controller

<?php
public

function inserirDespesa()
{
 if ($this->request->isPost())
 {
  if ($this->Despesa->save($this->request->data))
  {
   $this->Session->setFlash("Despesa inserida");
   $this->redirect(array(
    'action' => 'inserirDespesa'
   ));
  }
  else
  {
   $this->Session->setFlash("Despesa não inserida");
  }
 }
}

public

function consultarDespesa()
{
 if ($this->request->is("post"))
 {
  $despesas = $this->Despesa->afterFind($this->Despesa->query("select despesas.id_despesa, despesas.despesa, despesas.valor_despesa, despesas.data_despesa, despesas.local_despesa, tipos.tipo from despesas inner join tipos on despesas.fk_id_tipo=tipos.id_tipo where year(data_despesa)='{$this->request->data['Despesa']['ano']}' and month(data_despesa)='{$this->request->data['Despesa']['mes']}'"));
  if ($despesas == null)
  {
   $this->Session->setFlash("Sua pesquisa não retornou nenhum resultado.");
  }
  else
  {
   $totalReceitas = $this->somarReceitasParaLiquido($this->request->data);
   $this->exibirDespesas($despesas, $totalReceitas);
  }
 }
}

Modal Despesa:

<?php
class Despesa extends AppModel

{
 public $name = 'Despesa';

 public $useTable = 'despesas';

 public $primaryKey = 'id_despesa';

 public $validate = array(

  'despesa' => array(
   'rule' => array(
    'notEmpty',
    'message' => 'O campo despesa deve ser informado'
   )
  )
 );
 public

 function beforeSave($options = Array())
 {
  $this->data['Despesa']['valor_despesa'] = $this->valor($this->data['Despesa']['valor_despesa']);
  $this->data['Despesa']['data_despesa'] = $this->converterDataParaEN($this->data['Despesa']['data_despesa']);
  return true;
 }

 public

 function afterFind($despesas, $primary = false)
 {
  foreach($despesas as $despesa => $campo)
  {
   $despesas[$despesa]['Despesa']['valor_despesa'] = $this->valor($campo['Despesa']['valor_despesa']);
   $despesas[$despesa]['Despesa']['data_despesa'] = $this->converterDataParaPT($campo['Despesa']['data_despesa']);
  }

  return $despesas;
 }
}

?>

insertion form:

<?php  
echo $this->Form->create('Despesa');  

echo $this->Form->input('despesa', array('label'=>'* Despesa:', 'maxlength'=>'30'));  

//campo valor_despesa do tipo texto para aceitar a "," (vírgula).  
echo $this->Form->input('valor_despesa', array('label'=>'* Valor (apenas números, incluindo os centavos. Coloque 00 quando não houver centavos):', 'maxlength'=>'10', 'type'=>'text', 'onkeypress'=>"mascara(this, valor)"));  

//data_despesa com type=text para possibilitar a digitação e o símbolo de "/".
echo $this->Form->input('data_despesa', array('label'=>'* Data:', 'type'=>'text', 'maxlength'=>'10', 'onkeypress'=>"mascara(this, data)" ));  

echo $this->Form->input('local_despesa', array('label'=>'Local da despesa', 'maxlength'=>'15'));  
echo $this->Form->input('fk_id_tipo', array('label'=>'Forma de pagamento:', 'type'=>'select', 'options'=>array('transacional'=>'Transacional', 'em espécie'=>'Em espécie')));  

//id do usuário para foreign key na despesa  
echo $this->Form->input('fk_id_user', array('value'=>$this->Session->read('Auth.User.id'), 'type'=>'hidden'));  

echo "<p>";  
echo $this->Form->submit('Inserir despesa');  
echo $this->Form->button('Limpar', array('type'=>'reset'));  
echo $this->Form->end();  

How I make a form in another view that passes in the model and in the controler of expense? That is, in the view /relatorio/buscar.cpp, when submitted, would pass the model Despesa to use the callbacks afterFind and return the result to /relatorio/exibir.cpp.

Can someone help me?

  • Could you put in the code of controller of expenditure and revenue and how it calls them in the model?

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.