package br.com.centralit.citcorpore.negocio;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import br.com.centralit.citcorpore.bean.FornecedorProdutoDTO;
import br.com.centralit.citcorpore.bean.RelacionamentoProdutoDTO;
import br.com.centralit.citcorpore.bean.TipoProdutoDTO;
import br.com.centralit.citcorpore.integracao.FornecedorProdutoDao;
import br.com.centralit.citcorpore.integracao.RelacionamentoProdutoDao;
import br.com.centralit.citcorpore.integracao.TipoProdutoDao;
import br.com.citframework.dto.IDto;
import br.com.citframework.excecao.LogicException;
import br.com.citframework.excecao.ServiceException;
import br.com.citframework.integracao.TransactionControler;
import br.com.citframework.integracao.TransactionControlerImpl;
import br.com.citframework.service.CrudServiceImpl;
import br.com.citframework.util.UtilDatas;
@SuppressWarnings("unchecked")
public class TipoProdutoServiceEjb extends CrudServiceImpl implements TipoProdutoService {
private TipoProdutoDao dao;
@Override
protected TipoProdutoDao getDao() {
if (dao == null) {
dao = new TipoProdutoDao();
}
return dao;
}
@Override
public List<TipoProdutoDTO> findByIdCategoria(final Integer idCategoria) throws Exception {
return this.getDao().findByIdCategoria(idCategoria);
}
@Override
public boolean consultarTiposProdutos(final TipoProdutoDTO tipoProdutoDTO) throws Exception {
return this.getDao().consultarTiposProdutos(tipoProdutoDTO);
}
@Override
public IDto create(final IDto model, final HttpServletRequest request) throws Exception {
final TransactionControler tc = new TransactionControlerImpl(this.getDao().getAliasDB());
try {
TipoProdutoDTO tipoProdutoDTO = (TipoProdutoDTO) model;
this.getDao().setTransactionControler(tc);
final RelacionamentoProdutoDao relacionamentoProdutoDao = new RelacionamentoProdutoDao();
relacionamentoProdutoDao.setTransactionControler(tc);
final FornecedorProdutoDao fornecedorProdutoDao = new FornecedorProdutoDao();
fornecedorProdutoDao.setTransactionControler(tc);
tc.start();
tipoProdutoDTO = (TipoProdutoDTO) this.getDao().create(tipoProdutoDTO);
final ArrayList<RelacionamentoProdutoDTO> listaRelacionamentos = (ArrayList<RelacionamentoProdutoDTO>) br.com.citframework.util.WebUtil
.deserializeCollectionFromRequest(RelacionamentoProdutoDTO.class, "relacionamentosSerializados", request);
final ArrayList<FornecedorProdutoDTO> listaFornecedores = (ArrayList<FornecedorProdutoDTO>) br.com.citframework.util.WebUtil.deserializeCollectionFromRequest(
FornecedorProdutoDTO.class, "fornecedoresSerializados", request);
if (listaRelacionamentos != null && !listaRelacionamentos.isEmpty()) {
for (final RelacionamentoProdutoDTO relacionamentoProdutoDTO : listaRelacionamentos) {
relacionamentoProdutoDTO.setIdTipoProduto(tipoProdutoDTO.getIdTipoProduto());
final RelacionamentoProdutoDTO relacionamentoprodutoAux = (RelacionamentoProdutoDTO) relacionamentoProdutoDao.restore(relacionamentoProdutoDTO);
if (relacionamentoprodutoAux == null) {
relacionamentoProdutoDao.create(relacionamentoProdutoDTO);
}
}
}
if (listaFornecedores != null && !listaFornecedores.isEmpty()) {
for (final FornecedorProdutoDTO fornecedorProdutoDTO : listaFornecedores) {
fornecedorProdutoDTO.setDataInicio(UtilDatas.getDataAtual());
fornecedorProdutoDTO.setIdTipoProduto(tipoProdutoDTO.getIdTipoProduto());
final FornecedorProdutoDTO fornecedorProdutoDTOAux = fornecedorProdutoDao.findByIdTipoProdutoAndFornecedor(fornecedorProdutoDTO.getIdTipoProduto(),
fornecedorProdutoDTO.getIdFornecedor());
if (fornecedorProdutoDTOAux == null) {
fornecedorProdutoDao.create(fornecedorProdutoDTO);
}
}
}
tc.commit();
tc.close();
} catch (final Exception e) {
e.printStackTrace();
this.rollbackTransaction(tc, e);
}
return null;
}
@SuppressWarnings("rawtypes")
@Override
public void update(final IDto model, final HttpServletRequest request) throws ServiceException, LogicException {
final TransactionControler tc = new TransactionControlerImpl(this.getDao().getAliasDB());
try {
Collection<FornecedorProdutoDTO> colFornecedorProdutoDTO = new ArrayList();
final TipoProdutoDTO tipoProdutoDTO = (TipoProdutoDTO) model;
this.getDao().setTransactionControler(tc);
final FornecedorProdutoDao fornecedorProdutoDao = new FornecedorProdutoDao();
fornecedorProdutoDao.setTransactionControler(tc);
final RelacionamentoProdutoDao relacionamentoProdutoDao = new RelacionamentoProdutoDao();
relacionamentoProdutoDao.setTransactionControler(tc);
tc.start();
this.getDao().update(tipoProdutoDTO);
relacionamentoProdutoDao.deleteByIdTipoProduto(tipoProdutoDTO.getIdTipoProduto());
final ArrayList<RelacionamentoProdutoDTO> listaRelacionamentos = (ArrayList<RelacionamentoProdutoDTO>) br.com.citframework.util.WebUtil
.deserializeCollectionFromRequest(RelacionamentoProdutoDTO.class, "relacionamentosSerializados", request);
final ArrayList<FornecedorProdutoDTO> listaFornecedores = (ArrayList<FornecedorProdutoDTO>) br.com.citframework.util.WebUtil.deserializeCollectionFromRequest(
FornecedorProdutoDTO.class, "fornecedoresSerializados", request);
if (listaRelacionamentos != null && !listaRelacionamentos.isEmpty()) {
for (final RelacionamentoProdutoDTO relacionamentoProdutoDTO : listaRelacionamentos) {
relacionamentoProdutoDTO.setIdTipoProduto(tipoProdutoDTO.getIdTipoProduto());
final RelacionamentoProdutoDTO relacionamentoprodutoAux = (RelacionamentoProdutoDTO) relacionamentoProdutoDao.restore(relacionamentoProdutoDTO);
if (relacionamentoprodutoAux == null) {
relacionamentoProdutoDao.create(relacionamentoProdutoDTO);
}
}
}
colFornecedorProdutoDTO = fornecedorProdutoDao.findByIdTipoProduto(tipoProdutoDTO.getIdTipoProduto());
if (listaFornecedores != null && !listaFornecedores.isEmpty()) {
for (final FornecedorProdutoDTO fornecedorProdutoDTO : listaFornecedores) {
if (colFornecedorProdutoDTO != null && !colFornecedorProdutoDTO.isEmpty()) {
for (final FornecedorProdutoDTO fornecedor : colFornecedorProdutoDTO) {
if (fornecedorProdutoDTO.getIdFornecedor().equals(fornecedor.getIdFornecedor())) {
fornecedorProdutoDTO.setDataInicio(fornecedor.getDataInicio());
fornecedorProdutoDTO.setIdTipoProduto(tipoProdutoDTO.getIdTipoProduto());
fornecedorProdutoDTO.setIdFornecedorProduto(fornecedor.getIdFornecedorProduto());
fornecedorProdutoDao.update(fornecedorProdutoDTO);
break;
}
}
}
if (fornecedorProdutoDTO.getIdTipoProduto() == null) {
fornecedorProdutoDTO.setDataInicio(UtilDatas.getDataAtual());
fornecedorProdutoDTO.setIdTipoProduto(tipoProdutoDTO.getIdTipoProduto());
final FornecedorProdutoDTO fornecedorProdutoDTOAux = fornecedorProdutoDao.findByIdTipoProdutoAndFornecedor(fornecedorProdutoDTO.getIdTipoProduto(),
fornecedorProdutoDTO.getIdFornecedor());
if (fornecedorProdutoDTOAux == null) {
fornecedorProdutoDao.create(fornecedorProdutoDTO);
}
}
}
}
tc.commit();
tc.close();
} catch (final Exception e) {
e.printStackTrace();
this.rollbackTransaction(tc, e);
}
}
}