package br.edu.ifrn.conta.servico;

import br.edu.ifrn.conta.dominio.ContaPatrimonio;
import br.edu.ifrn.conta.dominio.Dono;
import br.edu.ifrn.conta.dominio.Lancamento;
import br.edu.ifrn.conta.persistencia.LancamentoRepository;
import java.math.BigDecimal;
import javax.inject.Inject;
import javax.inject.Named;

@Named
public class LancamentoServico extends AbstratoServico<Lancamento, Long> {
    private LancamentoRepository lancamentoRepository;
    
    @Inject
    public LancamentoServico(LancamentoRepository lancamentoRepository) {
        super();
        this.lancamentoRepository = lancamentoRepository;
    }
    
    public BigDecimal saldo(Dono dono, ContaPatrimonio contaPatrimonio) {
        return lancamentoRepository.saldo(dono, contaPatrimonio);
    }    
}

@@ -29,16 +29,109 @@
 rvico;%0A%0A
+import br.edu.ifrn.conta.dominio.ContaDebito;%0Aimport br.edu.ifrn.conta.dominio.ContaCredito;%0A
 import b
@@ -172,16 +172,16 @@
 imonio;%0A
-
 import b
@@ -345,16 +345,39 @@
 ecimal;%0A
+import java.util.Date;%0A
 import j
@@ -878,16 +878,16 @@
 monio);%0A
-
     %7D   
@@ -887,11 +887,1382 @@
    %7D    
+%0A%0A    @Override%0A    public void save(Lancamento objeto) %7B%0A        objeto.verificarAtributos();%0A        %0A        super.save(objeto);%0A    %7D%0A    %0A    public void transferir(BigDecimal valor%0A        , Dono donoDebito, ContaDebito contaDebito, ContaPatrimonio contaPatrimonioADebitar%0A        , Dono donoCredito, ContaPatrimonio contaPatrimonioACreditar, ContaCredito contaCredito) %7B%0A        %0A        if (donoCredito.equals(donoDebito)) %7B%0A            throw new IllegalArgumentException(%22Donos das contas devem ser diferentes: %22%0A                + donoDebito + %22 = %22 + donoCredito);%0A        %7D%0A        %0A        Date data = new Date();%0A        %0A        Lancamento lancamentoComDespesa = Lancamento.builder()%0A            .contaEntrada(contaDebito)%0A            .contaSaida(contaPatrimonioADebitar)%0A            .dono(donoDebito)%0A            .valor(valor)%0A            .data(data)%0A            .descricao(%22Lan%C3%A7amento de d%C3%A9bito de uma transfer%C3%AAncia%22)%0A            .build();%0A        save(lancamentoComDespesa);%0A        %0A        Lancamento lancamentoComReceita = Lancamento.builder()%0A            .contaEntrada(contaPatrimonioACreditar)%0A            .contaSaida(contaCredito)%0A            .dono(donoCredito)%0A            .valor(valor)%0A            .data(data)%0A            .descricao(%22Lan%C3%A7amento de cr%C3%A9dito de uma transfer%C3%AAncia%22)%0A            .build();%0A        save(lancamentoComReceita);    %0A    %7D
 %0A%7D%0A

fix #62 regra de negócio verificarAtributos no save de LancamentoServico verificada