Xevious
(Xeviousbr)
November 14, 2014, 5:48pm
1
Me passaram pra fazer uma operação de SALVAR E NOVO sendo que iria copiar alguns campos do registro que foi salvo para o novo.
Então resolvi criar um registro novo e depois mostrar ele
mas não ta criando…
O código é este
$model = $this->loadModel($id);
if (isset($_POST['Tarefa'])) {
$model->attributes = $_POST['Tarefa'];
$model->scenario = 'register';
if ($model->save()) {
if ($_POST['Tarefa']['salva_e_novo'] === '1') {
$Nova = new Tarefa('register');
$Nova->Cod_Conta = $model->Cod_Conta;
$Nova->Data_Entrega = $model->Data_Entrega;
$Nova->Cod_Contato = $model->Cod_Contato;
$Nova->Cod_Vendedor = $model->Cod_Vendedor;
$Nova->Cod_Usuario_Cadastrou = $model->Cod_Usuario_Cadastrou;
$Nova->Cod_Usuario_Editou = $model->Cod_Usuario_Editou;
$Nova->scenario = 'register';
$Nova->save();
$nr = $Nova->Cod_Tarefa;
$this->redirect(array('tarefa/update/'.$nr));*/
// Código antigo
// $this->redirect(array('create'));
Ocorre tudo bem (pelo menos até o SAVE) mas vou ver e não é criado o registro…
=====================================================
Obs… Já conseguiu criar ele. (era só passar false dentro so save)
Mas ainda não to conseguindo mostrar ele depois de criado
na mesma operação
a linha que não ta funcionando é esta
$this->redirect(array(‘tarefa/update/’.$nr));
onde nr$ obtenho assim
$nr = $Nova->Cod_Tarefa;
Xevious
(Xeviousbr)
November 25, 2014, 5:43pm
2
UP
Não consegui resolver ainda…
Xevious
(Xeviousbr)
December 8, 2014, 7:47pm
3
Mais uma upadinha, de leve…
ainda não resolvi essa parada
Olá Xavious
Tente utilizar o id do registro:
$this->redirect(array('tarefa/update/'.$id));
Cheers
Xevious
(Xeviousbr)
December 10, 2014, 12:01pm
5
Essa tabela não tem um campo chamado id
no lugar dele tem o Cod_Tarefa
Eu obtenho o nr do novo registro por esta linha
$nr = $Nova->Cod_Tarefa;
E ele traz o nr certo
mas na linha que ele deveria mostrar o registro em modo de edição, não funciona
Olá Xevious,
Poste o seu método "update" de sua Controller "Tarefa" para verificarmos qual é o problema.
Abs
Xevious
(Xeviousbr)
December 11, 2014, 5:37pm
7
eu uso o Create do Controller Tarefa, que antes ao clicar em Salvar e Novo, ele simplesmente abria uma nova página para lançar uma nova tarefa.
Agora eles querem que tenham já alguns campos preenchidos da tarefa que foi salva quando se clicou em SALVAR E NOVO.
public function actionCreate()
{
$model = new Tarefa('register');
$model->Operacional = Yii::app()->user->checkAccess('operacional') ? '1' : NULL;
if (isset($_POST['Tarefa'])) {
$model->attributes = $_POST['Tarefa'];
$model->Cod_Crm = Yii::app()->user->Cod_Crm;
if ($model->save()) {
if ($_POST['Tarefa']['salva_e_novo'] === '1') {
$Nova = new Tarefa('register');
$Nova->Cod_Conta = $model->Cod_Conta;
$Nova->Data_Entrega = $model->Data_Entrega;
$Nova->Cod_Contato = $model->Cod_Contato;
$Nova->Cod_Vendedor = $model->Cod_Vendedor;
$Nova->Cod_Usuario_Cadastrou = $model->Cod_Usuario_Cadastrou;
$Nova->Cod_Usuario_Editou = $model->Cod_Usuario_Editou;
$Nova->scenario = 'register';
$Nova->save();
$nr = $Nova->Cod_Tarefa;
$this->redirect(array(Yii::app()->baseUrl.'/tarefa/update/'.$nr));
// $this->redirect(array('create'));
}
$this->redirect(array('index'));
}
}
// Atalho, na edicao de conta, para cadastro de nova tarefa
if (isset($_GET['Conta'])) {
$conta = Conta::model()->findByPk(array('Cod_Cadastro'=>$_GET['Conta'], 'Cod_Crm'=>Yii::app()->user->Cod_Crm));
if(isset($conta->Cod_Cadastro) && !empty($conta->Cod_Cadastro)) {
$model->Cod_Conta = $conta->Cod_Cadastro;
}
}
$this->render('create',array(
'model'=>$model,
));
}
O trecho novo do código que fiz começa em $Nova = new Tarefa(‘register’);
e termina em $this->redirect(array(Yii::app()->baseUrl.’/tarefa/update/’.$nr));
Atualmente da essa mensagem de erro
Você não está autorizado a realizar essa operação. (C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\web\auth\CAccessControlFilter.php:182)
#0 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\web\auth\CAccessControlFilter.php(145): CAccessControlFilter->accessDenied(Object(WebUser), 'Voc?? n??o est?...')
#1 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\web\filters\CFilter.php(38): CAccessControlFilter->preFilter(Object(CFilterChain))
#2 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\web\CController.php(1145): CFilter->filter(Object(CFilterChain))
#3 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\web\filters\CInlineFilter.php(58): CController->filterAccessControl(Object(CFilterChain))
#4 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\web\filters\CFilterChain.php(130): CInlineFilter->filter(Object(CFilterChain))
#5 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\web\CController.php(291): CFilterChain->run()
#6 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\web\CController.php(265): CController->runActionWithFilters(Object(CInlineAction), Array)
#7 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\web\CWebApplication.php(282): CController->run('error')
#8 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\base\CErrorHandler.php(331): CWebApplication->runController('site/error')
#9 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\base\CErrorHandler.php(204): CErrorHandler->render('error', Array)
#10 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\base\CErrorHandler.php(129): CErrorHandler->handleException(Object(CHttpException))
#11 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\base\CApplication.php(732): CErrorHandler->handle(Object(CExceptionEvent))
#12 [internal function]: CApplication->handleException(Object(CHttpException))
#13 {main}
Xevious, não sei se entendi bem o que você deseja. Você que clicar no NOVO e o sistema automaticamente vai inserir e deixar já na tela alguns campos preenchidos. Se por acaso for isso, você pode fazer assim:
No seu controller na function Create você pode deixar assim:
public function actionCreate() {
$model = new Tarefa;
if (isset($_POST['Tarefa'])) {
$model->attributes = $_POST['Tarefa'];
if ($model->save())
Yii::app()->user->setFlash('success', 'Inserido com Sucesso!');
Yii::app()->user->setFlash('error', 'Atenção! Erro na Inserção..');
$this->redirect(array('create', 'Cod_Conta' => $model->Cod_Conta,
'Data_Entrega' => $model->Data_Entrega,
'Cod_Contato' => $model->Cod_Contato,
'Cod_Vendedor' => $model->Cod_Vendedor,
'Cod_Usuario_Cadastrou' => $model->Cod_Usuario_Cadastrou,
'Cod_Contato' => $model->Cod_Contato,
));
}
$this->render('create', array(
'model' => $model,
));
}
No seu _form você pode incluir as seguintes linhas:
<?php if (Yii::app()->user->hasFlash('success')): ?>
<div class="flash-success">
<?php echo Yii::app()->user->getFlash('success'); ?>
</div>
<?php elseif (Yii::app()->user->hasFlash('error')): ?>
<div class="flash-error">
<?php echo Yii::app()->user->getFlash('error'); ?>
</div>
<?php endif; ?>
<?php echo $form->errorSummary($model); ?>
<?php
if (isset($_GET['Cod_Conta']) && !empty($_GET['Data_Entrega'])&& !empty($_GET['Cod_Contato'])&& !empty($_GET['Cod_Vendedor'])&& !empty($_GET['Cod_Usuario_Cadastrou'])) {
$model->Cod_Conta = $_GET['Cod_Conta'];
$model->Data_Entrega = $_GET['Data_Entrega'];
$model->Cod_Contato = $_GET['Cod_Contato'];
$model->Cod_Vendedor = $_GET['Cod_Vendedor'];
$model->Cod_Usuario_Cadastrou = $_GET['Cod_Usuario_Cadastrou'];
}
?>
Como disse acima, não sei se é isso que querias, mais caso seja fica a dica…
Xevious:
eu uso o Create do Controller Tarefa, que antes ao clicar em Salvar e Novo, ele simplesmente abria uma nova página para lançar uma nova tarefa.
Agora eles querem que tenham já alguns campos preenchidos da tarefa que foi salva quando se clicou em SALVAR E NOVO.
public function actionCreate()
{
$model = new Tarefa('register');
$model->Operacional = Yii::app()->user->checkAccess('operacional') ? '1' : NULL;
if (isset($_POST['Tarefa'])) {
$model->attributes = $_POST['Tarefa'];
$model->Cod_Crm = Yii::app()->user->Cod_Crm;
if ($model->save()) {
if ($_POST['Tarefa']['salva_e_novo'] === '1') {
$Nova = new Tarefa('register');
$Nova->Cod_Conta = $model->Cod_Conta;
$Nova->Data_Entrega = $model->Data_Entrega;
$Nova->Cod_Contato = $model->Cod_Contato;
$Nova->Cod_Vendedor = $model->Cod_Vendedor;
$Nova->Cod_Usuario_Cadastrou = $model->Cod_Usuario_Cadastrou;
$Nova->Cod_Usuario_Editou = $model->Cod_Usuario_Editou;
$Nova->scenario = 'register';
$Nova->save();
$nr = $Nova->Cod_Tarefa;
$this->redirect(array(Yii::app()->baseUrl.'/tarefa/update/'.$nr));
// $this->redirect(array('create'));
}
$this->redirect(array('index'));
}
}
// Atalho, na edicao de conta, para cadastro de nova tarefa
if (isset($_GET['Conta'])) {
$conta = Conta::model()->findByPk(array('Cod_Cadastro'=>$_GET['Conta'], 'Cod_Crm'=>Yii::app()->user->Cod_Crm));
if(isset($conta->Cod_Cadastro) && !empty($conta->Cod_Cadastro)) {
$model->Cod_Conta = $conta->Cod_Cadastro;
}
}
$this->render('create',array(
'model'=>$model,
));
}
O trecho novo do código que fiz começa em $Nova = new Tarefa(‘register’);
e termina em $this->redirect(array(Yii::app()->baseUrl.’/tarefa/update/’.$nr));
Atualmente da essa mensagem de erro
Você não está autorizado a realizar essa operação. (C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\web\auth\CAccessControlFilter.php:182)
#0 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\web\auth\CAccessControlFilter.php(145): CAccessControlFilter->accessDenied(Object(WebUser), 'Voc?? n??o est?...')
#1 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\web\filters\CFilter.php(38): CAccessControlFilter->preFilter(Object(CFilterChain))
#2 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\web\CController.php(1145): CFilter->filter(Object(CFilterChain))
#3 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\web\filters\CInlineFilter.php(58): CController->filterAccessControl(Object(CFilterChain))
#4 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\web\filters\CFilterChain.php(130): CInlineFilter->filter(Object(CFilterChain))
#5 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\web\CController.php(291): CFilterChain->run()
#6 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\web\CController.php(265): CController->runActionWithFilters(Object(CInlineAction), Array)
#7 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\web\CWebApplication.php(282): CController->run('error')
#8 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\base\CErrorHandler.php(331): CWebApplication->runController('site/error')
#9 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\base\CErrorHandler.php(204): CErrorHandler->render('error', Array)
#10 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\base\CErrorHandler.php(129): CErrorHandler->handleException(Object(CHttpException))
#11 C:\xampp\htdocs\studiofiscal2.com.br\crm\yii-1.1.14.f0fee9\framework\base\CApplication.php(732): CErrorHandler->handle(Object(CExceptionEvent))
#12 [internal function]: CApplication->handleException(Object(CHttpException))
#13 {main}
oLÁ dARTH Xevious,
O problema que você postou ocorre porque você está chamando o Action "Update" e deve não tê-la configurado nas regras de acesso do método "Rules" de sua controller(), mude então sua chamada conforme segue abaixo e realize as implementações necessárias no método "Create" de sua Controller:
$this->redirect(array(Yii::app()->baseUrl.'/tarefa/create/'.$nr));
Exemplo Do acessRules apenas para conhecimento caso você mantenha o ‘/update/’ em sua chamada:
public function accessRules()
{
return array(
array('allow',
'actions'=>array('view','create','update'),
'users'=>array('@'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
Abs
Xevious
(Xeviousbr)
December 12, 2014, 12:55pm
10
Deu certo, fiz uns pequenos ajustes mas deu certinho
Obrigado também Davi Crysta l, apesar de não ter chegado a testar tua solução
Já tava quase a um mes com essa tarefa encalhada, simplesmente me esqueci que poderia enviar os dados via GET e coloca-los na tela.
Esta estratégia vai me servir também pra outra tarefa que to fazendo agora