one-to-many:Como atualizar classe do lado one?
08/02/2010 00:00
1
Olá, pessoal!
Estou com a seguinte necessidade:
Tenho duas classes de domínio: RequisicaoDespesa e RequisicaoDespesaItem, que representam, respectivamente uma requisição de despesas e os dotação orçamentária e seus itens.
A classe RequisicaoDespesa possui o seguinte código:
class RequisicaoDespesa {
int numeroRequisicao;
Date dataRequisicao;
double custoEstimado;
double custoFinal;
String descricaoDetalhada;
String justificativa;
String observacoes;

String toString(){
return this.numeroRequisicao + " de " + this.dataRequisicao.format("dd/MM/yyyy");
}
static hasMany = [itens:RequisicaoDespesaItem];
}

A classe RequisicaoDespesaItem possui o seguinte código:
class RequisicaoDespesaItem {
RequisicaoDespesa requisicaoDespesa;
String descricao;
double quantidade=0.00;
String unidade="";
Date prazoRealizacao;
double custoEstimado=0.00;
double custoFinal=0.00;

String toString() {
return this.descricao;
}
}


Pode ser observado que as duas classes possuem o atributo custoEstimado.
A diferença é que o atributo da classe "pai" RequisicaoDespesa deverá conter o valor da somatória do 'custo estimado' de todos o "filhos" RequisicaoDespesaItem.
Preciso principalmente que esta somatória fique armazenada no banco de dados, para facilitar a emissão de alguns relatórios.

Eu tenho uma página separada para adicionar e remover cada RequisicaoDespesaItem.

Então, como faço para quando eu adicionar, alterar ou remover um item de uma requisição de despesa o valor de RequisicaoDespesa.custoEstimado corresponda à soma dos respectivos valores dos itens desta requisicao?

Valeu pessoal!
Tags: Mundo Grails


1
Pessoal, logo depois que postei a dúvida consegui resolver o meu problema.

A minha RequisicaoDespesaItem ficou da seguinte forma:

class RequisicaoDespesaItem {

RequisicaoDespesa requisicaoDespesa;
String descricao;
double quantidade=0.00;
String unidade="";
Date prazoRealizacao;
double custoEstimado=0.00;
double custoFinal=0.00;

[b]....[/b]

/*
* ATUALIZAÇÃO DOS TOTALIZADORES NA Requisicao
*/
private double dOriginalCustoEstimado = 0.00;
private double dOriginalCustoFinal = 0.00;
def afterLoad = {
dOriginalCustoEstimado = this.custoEstimado;
dOriginalCustoFinal = this.custoFinal;
}

def afterUpdate = {
requisicaoDespesa.custoEstimado = (requisicaoDespesa.custoEstimado - dOriginalCustoEstimado) + this.custoEstimado;
requisicaoDespesa.custoFinal = (requisicaoDespesa.custoFinal - dOriginalCustoFinal) + this.custoFinal;
requisicaoDespesa.save();
}
def afterInsert = {
requisicaoDespesa.custoEstimado += this.custoEstimado;
requisicaoDespesa.custoFinal += this.custoFinal;
requisicaoDespesa.save();
}
def afterDelete = {
requisicaoDespesa.custoEstimado -= this.custoEstimado;
requisicaoDespesa.custoFinal -= this.custoFinal;
requisicaoDespesa.save();
}
}


A CLASSE RequisicaoDespesa ficou assim:
class RequisicaoDespesa {

int numeroRequisicao;
Usuario requisitante;
DotacaoOrcamentaria dotacaoOrcamentaria;
Date dataRequisicao;
double custoEstimado;
double custoFinal;
String descricaoResumida;
String descricaoDetalhada;
String justificativa;
String observacoes;

String toString(){
return this.numeroRequisicao + " de " + this.dataRequisicao?.format("dd/MM/yyyy") + " : " + this.descricaoResumida?.toString();
}
static belongsTo = DotacaoOrcamentaria;
static hasMany = [itens:RequisicaoDespesaItem];
static mapping = {
[b]...[/b]
}

static constraints = {
[b]...[/b]
}

}


é isso aí.
02/06/2010 00:00


0
Olá!

Não entendi o afterLoad e afterUpdate. Por que AfterUpdate() é necessário? AfterInsert e AfterDelete não são necessários?
26/03/2012 02:39


0
suficientes*?
26/03/2012 02:39



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto