package br.com.centralit.citcorpore.negocio; import java.sql.Date; import java.util.Collection; import java.util.Iterator; import br.com.centralit.citcorpore.bean.FaturaApuracaoANSDTO; import br.com.centralit.citcorpore.bean.FaturaDTO; import br.com.centralit.citcorpore.bean.FaturaOSDTO; import br.com.centralit.citcorpore.bean.GlosaOSDTO; import br.com.centralit.citcorpore.bean.OSDTO; import br.com.centralit.citcorpore.integracao.FaturaApuracaoANSDao; import br.com.centralit.citcorpore.integracao.FaturaDao; import br.com.centralit.citcorpore.integracao.FaturaOSDao; import br.com.centralit.citcorpore.integracao.GlosaOSDao; import br.com.centralit.citcorpore.integracao.OSDao; import br.com.citframework.dto.IDto; import br.com.citframework.excecao.LogicException; import br.com.citframework.excecao.ServiceException; import br.com.citframework.integracao.CrudDAO; import br.com.citframework.integracao.TransactionControler; import br.com.citframework.integracao.TransactionControlerImpl; import br.com.citframework.service.CrudServiceImpl; import br.com.citframework.util.UtilDatas; public class FaturaServiceEjb extends CrudServiceImpl implements FaturaService { private FaturaDao dao; @Override protected FaturaDao getDao() { if (dao == null) { dao = new FaturaDao(); } return dao; } @Override public Collection findByIdContrato(final Integer parm) throws Exception { try { return this.getDao().findByIdContrato(parm); } catch (final Exception e) { throw new ServiceException(e); } } @Override public void deleteByIdContrato(final Integer parm) throws Exception { try { this.getDao().deleteByIdContrato(parm); } catch (final Exception e) { throw new ServiceException(e); } } @Override public Collection findByIdContratoAndPeriodoAndSituacao(final Integer idContrato, final Date dataInicio, final Date dataFim, final String[] situacao) throws Exception { return this.getDao().findByIdContratoAndPeriodoAndSituacao(idContrato, dataInicio, dataFim, situacao); } @Override public IDto create(IDto model) throws ServiceException, LogicException { // Instancia Objeto controlador de transacao final CrudDAO crudDao = this.getDao(); final FaturaApuracaoANSDao faturaApuracaoANSDao = new FaturaApuracaoANSDao(); final FaturaOSDao faturaOSDao = new FaturaOSDao(); final TransactionControler tc = new TransactionControlerImpl(crudDao.getAliasDB()); try { // Faz validacao, caso exista. this.validaCreate(model); final FaturaDTO faturaDTO = (FaturaDTO) model; // Instancia ou obtem os DAOs necessarios. // Seta o TransactionController para os DAOs crudDao.setTransactionControler(tc); faturaApuracaoANSDao.setTransactionControler(tc); faturaOSDao.setTransactionControler(tc); // Inicia transacao tc.start(); double valorGlosado = 0; // Executa operacoes pertinentes ao negocio. model = crudDao.create(model); if (faturaDTO.getColItens() != null) { for (final Iterator it = faturaDTO.getColItens().iterator(); it.hasNext();) { final FaturaApuracaoANSDTO faturaApuracaoANSDTO = (FaturaApuracaoANSDTO) it.next(); faturaApuracaoANSDTO.setIdFatura(faturaDTO.getIdFatura()); faturaApuracaoANSDTO.setDataApuracao(UtilDatas.getDataAtual()); if (faturaApuracaoANSDTO.getValorGlosa() != null) { valorGlosado = valorGlosado + faturaApuracaoANSDTO.getValorGlosa().doubleValue(); } faturaApuracaoANSDao.create(faturaApuracaoANSDTO); } } if (faturaDTO.getIdOSFatura() != null) { for (int i = 0; i < faturaDTO.getIdOSFatura().length; i++) { final FaturaOSDTO faturaOSDTO = new FaturaOSDTO(); faturaOSDTO.setIdFatura(faturaDTO.getIdFatura()); faturaOSDTO.setIdOs(faturaDTO.getIdOSFatura()[i]); faturaOSDao.create(faturaOSDTO); } } final OSDao osSDao = new OSDao(); final GlosaOSDao glosaOSDao = new GlosaOSDao(); final Collection colOSs = osSDao.listOSByIds(faturaDTO.getIdContrato(), faturaDTO.getIdOSFatura()); double valorPrevistoOS = 0; double valorExecutadoOS = 0; if (colOSs != null) { for (final Iterator itOs = colOSs.iterator(); itOs.hasNext();) { final OSDTO osDto = (OSDTO) itOs.next(); // if (osDto.getGlosaOS() != null){ // valorGlosado = valorGlosado + osDto.getGlosaOS().doubleValue(); // } if (osDto.getCustoOS() != null) { valorPrevistoOS = valorPrevistoOS + osDto.getCustoOS().doubleValue(); } if (osDto.getExecutadoOS() != null) { valorExecutadoOS = valorExecutadoOS + osDto.getExecutadoOS().doubleValue(); } final Collection colGlosasOS = glosaOSDao.findByIdOs(osDto.getIdOS()); if (colGlosasOS != null) { for (final Iterator it = colGlosasOS.iterator(); it.hasNext();) { final GlosaOSDTO glosaOSDTO = (GlosaOSDTO) it.next(); if (glosaOSDTO.getCustoGlosa() != null) { valorGlosado = valorGlosado + glosaOSDTO.getCustoGlosa().doubleValue(); } } } } } faturaDTO.setValorSomaGlosasOS(valorGlosado); faturaDTO.setValorPrevistoSomaOS(valorPrevistoOS); faturaDTO.setValorExecutadoSomaOS(valorExecutadoOS); crudDao.update(faturaDTO); // Faz commit e fecha a transacao. tc.commit(); tc.close(); return model; } catch (final Exception e) { this.rollbackTransaction(tc, e); } return model; } @Override public void update(final IDto model) throws ServiceException, LogicException { // Instancia Objeto controlador de transacao final CrudDAO crudDao = this.getDao(); final FaturaApuracaoANSDao faturaApuracaoANSDao = new FaturaApuracaoANSDao(); final FaturaOSDao faturaOSDao = new FaturaOSDao(); final TransactionControler tc = new TransactionControlerImpl(crudDao.getAliasDB()); try { // Faz validacao, caso exista. this.validaCreate(model); final FaturaDTO faturaDTO = (FaturaDTO) model; // Instancia ou obtem os DAOs necessarios. // Seta o TransactionController para os DAOs crudDao.setTransactionControler(tc); faturaApuracaoANSDao.setTransactionControler(tc); faturaOSDao.setTransactionControler(tc); // Inicia transacao tc.start(); FaturaDTO faturaAux = new FaturaDTO(); faturaAux.setIdFatura(faturaDTO.getIdFatura()); faturaAux = (FaturaDTO) crudDao.restore(faturaAux); if (faturaAux != null) { faturaDTO.setDataCriacao(faturaAux.getDataCriacao()); } double valorGlosado = 0; // Executa operacoes pertinentes ao negocio. crudDao.update(model); faturaApuracaoANSDao.deleteByIdFatura(faturaDTO.getIdFatura()); if (faturaDTO.getColItens() != null) { for (final Iterator it = faturaDTO.getColItens().iterator(); it.hasNext();) { final FaturaApuracaoANSDTO faturaApuracaoANSDTO = (FaturaApuracaoANSDTO) it.next(); faturaApuracaoANSDTO.setIdFatura(faturaDTO.getIdFatura()); faturaApuracaoANSDTO.setDataApuracao(UtilDatas.getDataAtual()); if (faturaApuracaoANSDTO.getValorGlosa() != null) { valorGlosado = valorGlosado + faturaApuracaoANSDTO.getValorGlosa().doubleValue(); } faturaApuracaoANSDao.create(faturaApuracaoANSDTO); } } faturaOSDao.deleteByIdFatura(faturaDTO.getIdFatura()); if (faturaDTO.getIdOSFatura() != null) { for (int i = 0; i < faturaDTO.getIdOSFatura().length; i++) { final FaturaOSDTO faturaOSDTO = new FaturaOSDTO(); faturaOSDTO.setIdFatura(faturaDTO.getIdFatura()); faturaOSDTO.setIdOs(faturaDTO.getIdOSFatura()[i]); faturaOSDao.create(faturaOSDTO); } } final OSDao osSDao = new OSDao(); final GlosaOSDao glosaOSDao = new GlosaOSDao(); final Collection colOSs = osSDao.listOSByIds(faturaDTO.getIdContrato(), faturaDTO.getIdOSFatura()); double valorPrevistoOS = 0; double valorExecutadoOS = 0; if (colOSs != null) { for (final Iterator itOs = colOSs.iterator(); itOs.hasNext();) { final OSDTO osDto = (OSDTO) itOs.next(); // if (osDto.getGlosaOS() != null){ // valorGlosado = valorGlosado + osDto.getGlosaOS().doubleValue(); // } if (osDto.getCustoOS() != null) { valorPrevistoOS = valorPrevistoOS + osDto.getCustoOS().doubleValue(); } if (osDto.getExecutadoOS() != null) { valorExecutadoOS = valorExecutadoOS + osDto.getExecutadoOS().doubleValue(); } final Collection colGlosasOS = glosaOSDao.findByIdOs(osDto.getIdOS()); if (colGlosasOS != null) { for (final Iterator it = colGlosasOS.iterator(); it.hasNext();) { final GlosaOSDTO glosaOSDTO = (GlosaOSDTO) it.next(); if (glosaOSDTO.getCustoGlosa() != null) { valorGlosado = valorGlosado + glosaOSDTO.getCustoGlosa().doubleValue(); } } } } } faturaDTO.setValorSomaGlosasOS(valorGlosado); faturaDTO.setValorPrevistoSomaOS(valorPrevistoOS); faturaDTO.setValorExecutadoSomaOS(valorExecutadoOS); crudDao.update(faturaDTO); // Faz commit e fecha a transacao. tc.commit(); tc.close(); } catch (final Exception e) { this.rollbackTransaction(tc, e); } } @Override public void updateSituacao(final Integer idFatura, final String situacao, final String aprovacaoGestor, final String aprovacaoFiscal) throws Exception { this.getDao().updateSituacao(idFatura, situacao, aprovacaoGestor, aprovacaoFiscal); } }