Dúvida de inserção do objeto na coleção
21/10/2010 00:00
def periodo= Periodo.get(1) //TEU PERIODO
periodo.addToRegistros(name:"nome").save() //ADICIONA O REGISTRO PRO PERIODO E SALVA ELE ADICIONANDO O REGISTRO AO BANCO DE DADOS.
Setembro-2010
------------------------------------------------------------------------
DATA | HISTORICO | RECEITA | DESPESA | TOTAL
- | saldo anterior | | | 0
10/09/2010 | salario | 500 | | 500
14/09/2010 | viagem | | 200 | 300
20/09/2010 | livro | | 50 | 250
-------------------------------------------------------------------------
total | - | 500 | 250 | 250
class Periodo {
Date data
Integer totalReceita
Integer totalDespesa
Integer liquido
static hasMany = [registros : Registro]
}
class Registro {
Date data
String tipo //Será ou despesa ou receita. 'D' ou 'R'
String descricao
Integer valor
static belongsTo = [periodo : Periodo]
}
class RegistroController {
def save = {
def registroInstance = new Registro(params)
** registroInstance = PeriodoService.inserePeriodo(registroInstance)
if (registroInstance.save(flush: true)) {
** PeriodoService.atualizaPeriodo(registroInstance)
redirect(action: "show", id: registroInstance.id)
} else {
render(view: "create", model: [registroInstance: registroInstance])
}
}
def update = {
def registroInstance = Registro.get(params.id)
if (registroInstance) {
if (params.version) {
def version = params.version.toLong()
if (registroInstance.version > version) {
registroInstance.errors.rejectValue("version", "default.optimistic.locking.failure", [message(code: 'registro.label', default: 'Registro')] as Object[], "Another user has updated this Registro while you were editing")
render(view: "edit", model: [registroInstance: registroInstance])
return
}
}
registroInstance.properties = params
** registroInstance = PeriodoService.inserePeriodo(registroInstance)
if (!registroInstance.hasErrors() && registroInstance.save(flush: true)) {
** PeriodoService.atualizaPeriodo(registroInstance)
flash.message = "${message(code: 'default.updated.message', args: [message(code: 'registro.label', default: 'Registro'), registroInstance.id])}"
redirect(action: "show", id: registroInstance.id)
}
else {
render(view: "edit", model: [registroInstance: registroInstance])
}
}
else {
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'registro.label', default: 'Registro'), params.id])}"
redirect(action: "list")
}
}
def delete = {
def registroInstance = Registro.get(params.id)
if (registroInstance) {
try {
registroInstance.delete(flush: true)
** PeriodoService.atualizaPeriodo(registroInstance)
flash.message = "${message(code: 'default.deleted.message', args: [message(code: 'registro.label', default: 'Registro'), params.id])}"
redirect(action: "list")
}
catch (org.springframework.dao.DataIntegrityViolationException e) {
flash.message = "${message(code: 'default.not.deleted.message', args: [message(code: 'registro.label', default: 'Registro'), params.id])}"
redirect(action: "show", id: params.id)
}
}
else {
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'registro.label', default: 'Registro'), params.id])}"
redirect(action: "list")
}
}
}
class PeriodoService {
def static inserePeriodo(Registro registro) {
def periodo = existePeriodo(registro)
if(!periodo) {
periodo = new Periodo()
periodo.data = new Date(registro.data.year, registro.data.month, 1)
periodo.save(flush: true)
registro.periodo = Periodo.findByData(periodo.data)
}
else
registro.periodo = periodo
return registro
}
def static existePeriodo(Registro registro) {
def periodos = Periodo.list()
for(periodo in periodos)
if(registro.data.month == periodo.data.month)
return periodo
return null
}
def static atualizaPeriodo(Registro reg) {
def periodo = reg.periodo
periodo.totalReceita = 0
periodo.totalDespesa = 0
periodo = Periodo.get(periodo.id)
//periodo.addToRegistros(registro)
for(registro in periodo.registros) {
if(registro.tipo == 'D')
periodo.totalDespesa += registro.valor
else
periodo.totalReceita += registro.valor
}
periodo.liquido = periodo.totalReceita - periodo.totalDespesa
periodo.save(flush: true)
}
}
Para se registrar, clique aqui.