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?– WMomesso