I'm using CakePHP 2.6.4.
I have two tables in the database: despesas
and receitas
. I have CRUD's methods of expenditure and revenue. I created the controller RelatoriosController
for detailed expense and revenue reports, but I want to reuse validations in the model Despesa
and Receita
, in addition to callbacks ( afterFind
, beforeFind
, etc).
How do I do this?
My control Despesas
is as follows:
Controller Expenses
<?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 Expense:
<?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 do I make a form in another view that passes on the model and the controler expense? That is, in% view of%, when submitted, would pass in the model /relatorio/buscar.cpp
to use the callbacks Despesa
and return the result for afterFind
.
Can anyone help me?