Package br.com.lawoffice.custas.lancamento

Source Code of br.com.lawoffice.custas.lancamento.LancamentoServiceBean

/**
*
*/
package br.com.lawoffice.custas.lancamento;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateful;

import br.com.lawoffice.caixa.CaixaServiceLocal;
import br.com.lawoffice.dominio.Cliente;
import br.com.lawoffice.dominio.Colaborador;
import br.com.lawoffice.dominio.Custa;
import br.com.lawoffice.dominio.Lancamento;
import br.com.lawoffice.persistencia.LancamentoDao;
import br.com.lawoffice.persistencia.PessoaDao;

/**
*  implementacao para o serviço de lancamento utilizando tecnologia EJB.
*
* @author robson
*
*/
@Stateful
@Local(LancamentoServiceLocal.class)
@Remote(LancamentoServiceRemote.class)
public class LancamentoServiceBean implements LancamentoService {
 
 
  /**
   * Caixa para fechamento do lançamento , debito para o cliente , credito para o colaborador
   */
  @EJB
  private CaixaServiceLocal caixaService;
 

  @EJB
  private PessoaDao pessoaDao;
 
 
  @EJB
  private LancamentoDao lancamentoDao;
 
 
  /**
   *  Mapa com os laçamentos 
   */
  private Map<ChaveLancamento, Lancamento> mapsLacamentos = new HashMap<ChaveLancamento, Lancamento>();
 
 

  @Override
  public Custa adicionarCusta(Custa custa, Cliente cliente, Colaborador colaborador, Date data){
    validarParametros(custa,cliente,colaborador,data);
   
    cliente =
        pessoaDao.localizar(Cliente.class, cliente);
   
    if(cliente == null)
      throw new IllegalArgumentException("Cliente na encontrado nao base de dados");
   
   
    colaborador =
        pessoaDao.localizar(Colaborador.class, colaborador);
   
   
    if(colaborador == null)
      throw new IllegalArgumentException("Colaborador nao encontrado na base de dados");
   
   
    return custa.addLancamento(
        getLancamento(
          new ChaveLancamento(
              cliente,
              colaborador,
              data
            )
          ).addCusta(custa)
      );
  }
 


  @Override
  public void fecharLacamento(){
   
    if(mapsLacamentos.isEmpty())
      throw new IllegalStateException("Não há lançamento(s) para fechar");

   
    List<Lancamento> lancamentos = 
        new ArrayList<Lancamento>(mapsLacamentos.values());
   
   
    for (Lancamento lancamento : lancamentos){
     
      caixaService.creditar(
        lancamento.getColaborador().getConta(),
        lancamento.getTotal(),
        lancamento.getDataLancamento()
      );
     
      caixaService.debitar(
        lancamento.getCliente().getConta(),
        lancamento.getTotal(),
        lancamento.getDataLancamento()
      );
     
      lancamentoDao.salvar(lancamento);         
    }
   
    mapsLacamentos.clear();
  }
 
 
  @Override
  public void removerCusta(Custa custa){
    validarCusta(custa);
   
    Lancamento lancamento = 
      mapsLacamentos.get(
        new ChaveLancamento(
          custa.getLancamento().getCliente(),
          custa.getLancamento().getColaborador(),
          custa.getLancamento().getDataLancamento()
        )
      );
   
    if(lancamento  == null)
      throw new IllegalStateException("O Lançamento da custa não está na sessão do Bean");   
   
    lancamento.getCustas().remove(custa);
  }
 
 
  /**
   * Retorna o Lançamento para a chave passada, caso nao haja lancamento para a chave um novo sera criado.
   *
   *
   * @param cliente
   * @param colaborador
   * @return
   */
  private Lancamento getLancamento(ChaveLancamento  chaveLancamento){ 
 
    if( !mapsLacamentos.containsKey(chaveLancamento))
      mapsLacamentos.put(
          chaveLancamento,
          new Lancamento()
            .adicionarCliente(chaveLancamento.getCliente())
            .adicionarColaborador(chaveLancamento.getColaborador())
            .adicionarDataLancamento(chaveLancamento.getData())
        );
   
    return mapsLacamentos.get(chaveLancamento);
  }
 

 

 
 
 
  /**
   * valida os paramentros de entrada do servico.
   *
   * @param custa - a ser validada.
   * @param cliente - a ser validado.
   * @param colaborador - a ser validado.
   * @param data - a ser validada.
   * @throws IllegalArgumentException quando algum parametro noa estiver  correto.
   */
  private void validarParametros(Custa custa, Cliente cliente, Colaborador colaborador, Date data) {
    if(custa == null)
      throw new IllegalArgumentException("Custa está nula");
    if(cliente == null || cliente.getId() == null)
      throw new IllegalArgumentException("Cliente está nulo ou id cliente nulo");
    if(colaborador == null || colaborador.getId() == null)
      throw new IllegalArgumentException("Colaborador está nulo ou id colaborador nulo");
    if(data == null)
      throw new IllegalArgumentException("Data está nula");
  }
 

 
 

  /**
   * valida uma custa
   *
   * @param custa - a ser validada.
   * @throws IllegalArgumentException quando a custa estiver ou nao estar associada a um lancamento.
   */
  private void validarCusta(Custa custa) {
    if(custa == null)
      throw new IllegalArgumentException("Custa está nula");
    if(custa.getLancamento() == null)
      throw new IllegalArgumentException("Custa não está associada a um lancamento");
 


  public void setCaixaService(CaixaServiceLocal caixaService) {
    this.caixaService = caixaService;
  }



  public void setPessoaDao(PessoaDao pessoaDao) {
    this.pessoaDao = pessoaDao;
  }



  public void setLancamentoDao(LancamentoDao lancamentoDao) {
    this.lancamentoDao = lancamentoDao;
  }
 
}
TOP

Related Classes of br.com.lawoffice.custas.lancamento.LancamentoServiceBean

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.