diff --git a/cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/RequisicaoConsumoDao.java b/cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/RequisicaoConsumoDao.java index d14be90..dd8c7bb 100644 --- a/cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/RequisicaoConsumoDao.java +++ b/cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/RequisicaoConsumoDao.java @@ -2,6 +2,7 @@ package br.com.centralit.api.dao; import java.util.Calendar; import java.util.Collection; +import java.util.List; import br.com.centralit.api.model.EstruturaOrganizacional; import br.com.centralit.api.model.MaterialConsumo; @@ -112,4 +113,9 @@ public interface RequisicaoConsumoDao extends CitGenericDAO { */ RequisicaoConsumo findRequisicaoAnteriorPorMaterial(MaterialConsumo materialConsumo, EstruturaOrganizacional unidadeRequisitante); + Object[] getRequisicaoForReport(Long requisicaoId); + List getResumoContabilForReport(Long requisicaoId,boolean isFIFO); + List getMateriaisForReport(Long requisicaoId,boolean isFIFO); + String findtipoStatusRequisicaoPorMaterial(Long requisicaoId); + } diff --git a/cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/impl/RequisicaoConsumoDaoHibernate.java b/cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/impl/RequisicaoConsumoDaoHibernate.java index c999208..19581a0 100644 --- a/cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/impl/RequisicaoConsumoDaoHibernate.java +++ b/cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/impl/RequisicaoConsumoDaoHibernate.java @@ -282,4 +282,88 @@ public class RequisicaoConsumoDaoHibernate extends CitGenericDAOImpl implements return this.searchUnique(searchSeven); } + + @Override + public String findtipoStatusRequisicaoPorMaterial(Long requisicaoId) { + return (String)singleResultNativeQuery("select nome from alm_requisicaoconsumo req left join dominio as dominio on dominio.id = req.tipostatusrequisicao_id where req.id = "+requisicaoId); + } + + @Override + public Object[] getRequisicaoForReport(Long requisicaoId){ + StringBuilder sql = new StringBuilder(); + sql.append("select req_c.numerorequisicao as numerorequisicao,alm.nome as almoxarifado,requisitante.nome as unidadereq,locale.nome as enderecour,"); + sql.append(" usuario.nome as requisitante,c_custo.descricao as centrocustos,req_c.datacriacao as cadem,req_c.datafinalizacaoatendimento as atendidaem from alm_requisicaoconsumo req_c"); + sql.append(" left join estruturaorganizacional alm on req_c.almoxarifado_id = alm.id"); + sql.append(" left join estruturaorganizacional requisitante on req_c.unidadeRequisitante_id = requisitante.id"); + sql.append(" left join localizacao locale on requisitante.localizacao_id = locale.id"); + sql.append(" left join centrocusto c_custo on req_c.centrocusto_id = c_custo.id"); + sql.append(" left join seguranca_usuario usuario on req_c.autor_id = usuario.id"); + sql.append(" where req_c.id = ").append(requisicaoId); + + return (Object[]) singleResultNativeQuery(sql.toString()); + } + + @Override + public List getResumoContabilForReport(Long requisicaoId,boolean isFIFO) { + StringBuilder sql = new StringBuilder(); + sql.append("select distinct contac.codigo,contac.descricao, rc_item.quantidade,"); + if(isFIFO) + sql.append("fifo.valorUnitario"); + else + sql.append("mat_estoque.valorUnitarioMedio"); + + sql.append(" from alm_requisicaoconsumo req_c"); + sql.append(" left join estruturaorganizacional alm on req_c.organizacao_id = alm.id"); + sql.append(" left join alm_rc_item rc_item on rc_item.requisicaoConsumo_id = req_c.id"); + sql.append(" left join alm_materialconsumo mat_c on rc_item.materialconsumo_id = mat_c.id"); + sql.append(" left join material mat on mat_c.id = mat.id"); + + if(isFIFO) + sql.append(" left join alm_me_fifoitem fifo on fifo.material_id = mat.id"); + else + sql.append(" left join alm_materialestoque mat_estoque on mat_estoque.material_id = mat.id"); + + sql.append(" left join contacontabil contac on mat.contacontabil_id = contac.id"); + sql.append(" where req_c.id = ").append(requisicaoId); + if(isFIFO) + sql.append(" and fifo.valorUnitario is not null"); +// sql.append(" and rc_item.quantidadeatendida is not null"); + sql.append(" order by contac.descricao"); + + return (List) resultListNativeQuery(sql.toString()); + } + + @Override + public List getMateriaisForReport(Long requisicaoId,boolean isFIFO) { + + StringBuilder sql = new StringBuilder(); + sql.append("select distinct mat.descricao,umedi.sigla,entrada_item.datavalidade,rc_item.quantidade, rc_item.quantidadeatendida,"); + + if(isFIFO) + sql.append("fifo.valorUnitario"); + else + sql.append("mat_estoque.valorUnitarioMedio"); + + sql.append(" from alm_requisicaoconsumo req_c"); + sql.append(" left join estruturaorganizacional alm on req_c.organizacao_id = alm.id"); + sql.append(" left join alm_rc_item rc_item on rc_item.requisicaoConsumo_id = req_c.id"); + sql.append(" left join alm_materialconsumo mat_c on rc_item.materialconsumo_id = mat_c.id"); + sql.append(" left join material mat on mat_c.id = mat.id"); + sql.append(" left join alm_en_entradaitem entrada_item on entrada_item.material_id = mat.id"); + sql.append(" left join alm_me_localestoque local_estoque on local_estoque.id = entrada_item.materialLocalEstoque_id"); + + if(isFIFO) + sql.append(" left join alm_me_fifoitem fifo on fifo.material_id = mat.id"); + else + sql.append(" left join alm_materialestoque mat_estoque on mat_estoque.material_id = mat.id"); + + sql.append(" left join unidademedida umedi on umedi.id = mat_c.unidadearmazenamento_id"); + sql.append(" where req_c.id =").append(requisicaoId); + if(isFIFO) + sql.append("and fifo.quantidadeRestante > 0"); + + sql.append(" order by mat.descricao"); + + return (List) resultListNativeQuery(sql.toString()); + } } diff --git a/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/RequisicaoConsumoService.java b/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/RequisicaoConsumoService.java index c373308..af3a512 100644 --- a/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/RequisicaoConsumoService.java +++ b/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/RequisicaoConsumoService.java @@ -2,6 +2,7 @@ package br.com.centralit.api.service; import java.util.Calendar; import java.util.Collection; +import java.util.List; import br.com.centralit.api.model.EstruturaOrganizacional; import br.com.centralit.api.model.MaterialConsumo; @@ -122,4 +123,8 @@ public interface RequisicaoConsumoService extends GenericService getResumoContabilForReport(Long requisicaoId,boolean isFIFO); + List getMateriaisForReport(Long requisicaoId,boolean isFIFO); + String findtipoStatusRequisicaoPorMaterial(Long requisicaoId); } diff --git a/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/RequisicaoConsumoServiceImpl.java b/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/RequisicaoConsumoServiceImpl.java index b608c82..88b356d 100644 --- a/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/RequisicaoConsumoServiceImpl.java +++ b/cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/RequisicaoConsumoServiceImpl.java @@ -511,4 +511,24 @@ public class RequisicaoConsumoServiceImpl extends GenericServiceImpl getResumoContabilForReport(Long requisicaoId,boolean isFIFO) { + return requisicaoConsumoDao.getResumoContabilForReport(requisicaoId,isFIFO); + } + + @Override + public List getMateriaisForReport(Long requisicaoId,boolean isFIFO) { + return requisicaoConsumoDao.getMateriaisForReport(requisicaoId,isFIFO); + } + + @Override + public String findtipoStatusRequisicaoPorMaterial(Long requisicaoId) { + return requisicaoConsumoDao.findtipoStatusRequisicaoPorMaterial(requisicaoId); + } } diff --git a/cit-almoxarifado-web/src/main/java/br/com/centralit/controller/BeanMaterial.java b/cit-almoxarifado-web/src/main/java/br/com/centralit/controller/BeanMaterial.java index d07efff..6d3b18d 100644 --- a/cit-almoxarifado-web/src/main/java/br/com/centralit/controller/BeanMaterial.java +++ b/cit-almoxarifado-web/src/main/java/br/com/centralit/controller/BeanMaterial.java @@ -13,6 +13,7 @@ public class BeanMaterial { private String endereco; private BigDecimal qtdeSolicitada; private BigDecimal qtdeFornecida; + private BigDecimal qtdeEstoque; private BigDecimal valorTotal; private BigDecimal valorUnitario; @@ -26,7 +27,7 @@ public class BeanMaterial { this.valorUnitario = (BigDecimal) objArray[5]; setValorTotal(valorUnitario); } - + public Integer getItem() { return item; } @@ -83,6 +84,10 @@ public class BeanMaterial { public void setValorUnitario(BigDecimal valorUnitario) { this.valorUnitario = valorUnitario; } + + public BigDecimal getQtdeEstoque() { + return qtdeEstoque; + } @Override public boolean equals(Object obj) { diff --git a/cit-almoxarifado-web/src/main/java/br/com/centralit/controller/BeanSubReportContaContabil.java b/cit-almoxarifado-web/src/main/java/br/com/centralit/controller/BeanSubReportContaContabil.java index 598ab18..17a1fa4 100644 --- a/cit-almoxarifado-web/src/main/java/br/com/centralit/controller/BeanSubReportContaContabil.java +++ b/cit-almoxarifado-web/src/main/java/br/com/centralit/controller/BeanSubReportContaContabil.java @@ -32,7 +32,8 @@ public class BeanSubReportContaContabil { } public BigDecimal getValorTotal() { - return valorUnitario.multiply(qtde); + valorTotal = valorUnitario.multiply(qtde); + return valorTotal; } public String getCodigo() { return codigo; diff --git a/cit-almoxarifado-web/src/main/java/br/com/centralit/controller/ReportGuiaRemessaAtendimentoConsumoController.java b/cit-almoxarifado-web/src/main/java/br/com/centralit/controller/ReportGuiaRemessaAtendimentoConsumoController.java index e7561fa..008c1e9 100644 --- a/cit-almoxarifado-web/src/main/java/br/com/centralit/controller/ReportGuiaRemessaAtendimentoConsumoController.java +++ b/cit-almoxarifado-web/src/main/java/br/com/centralit/controller/ReportGuiaRemessaAtendimentoConsumoController.java @@ -30,13 +30,11 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import br.com.centralit.api.model.Entrada; -import br.com.centralit.api.model.RequisicaoConsumo; import br.com.centralit.api.service.ConfiguracaoParametroSistemaService; import br.com.centralit.api.service.ConfiguracaoService; import br.com.centralit.api.service.DominioService; import br.com.centralit.api.service.EstruturaOrganizacionalService; import br.com.centralit.api.service.InternacionalizacaoService; -import br.com.centralit.api.service.RequisicaoConsumoItemService; import br.com.centralit.api.service.RequisicaoConsumoService; import br.com.centralit.api.service.UsuarioService; import br.com.centralit.api.viewHelper.BeanReportVH; @@ -84,11 +82,12 @@ public class ReportGuiaRemessaAtendimentoConsumoController extends GenericContro @Autowired private ConfiguracaoParametroSistemaService configuracaoParametroSistemaService; - ; + @Autowired private ReportController reportController; - private String AV_MONETARIA; + private boolean is_FIFO; + private final String FIFO = "1"; /** Atributo idioma. */ Dominio idioma; @@ -130,9 +129,8 @@ public class ReportGuiaRemessaAtendimentoConsumoController extends GenericContro InputStream input = null; InputStream inputSub = null; try { - AV_MONETARIA = configuracaoParametroSistemaService.getParametro("TIPO_AVALIACAO_MONETARIA_ESTOQUE").getValor(); - - final String tipoStatusRequisicao = (String)requisicaoConsumoService.singleResultNativeQuery("select nome from alm_requisicaoconsumo req left join dominio as dominio on dominio.id = req.tipostatusrequisicao_id where req.id = "+requisicaoId); + is_FIFO = configuracaoParametroSistemaService.getParametro("TIPO_AVALIACAO_MONETARIA_ESTOQUE").getValor().equals(FIFO); + final boolean isFinalizada = requisicaoConsumoService.findtipoStatusRequisicaoPorMaterial(requisicaoId).equals("FINALIZADA"); Usuario usuarioLogado = (Usuario) usuarioService.find(((Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal() ).getId()); Long organizacaoId = usuarioLogado.getOrganizacao().getId(); @@ -160,13 +158,16 @@ public class ReportGuiaRemessaAtendimentoConsumoController extends GenericContro List beanReqSubList = new ArrayList(); - BeanRequisicaoSubReport beanSubReport = new BeanRequisicaoSubReport(getRequisicao(requisicaoId)); + BeanRequisicaoSubReport beanSubReport = new BeanRequisicaoSubReport(requisicaoConsumoService.getRequisicaoForReport(requisicaoId)); beanSubReport.setMateriais(getMateriais(requisicaoId)); beanReqSubList.add(beanSubReport); parameters.put("BEAN_SUB_REPORT",new JRBeanCollectionDataSource(beanReqSubList)); - parametersSubReport.put("REQ_CONSUMO", getResumoContabil(requisicaoId)); - parametersSubReport.put("is_asterisco",!tipoStatusRequisicao.equals("ATENDIDA")); + +// if(isFinalizada) + parametersSubReport.put("REQ_CONSUMO", getResumoContabil(requisicaoId)); + + parametersSubReport.put("is_asterisco",!isFinalizada); parameters.put("SUBREPORT_PARAMETERS_MAP",parametersSubReport); @@ -189,23 +190,12 @@ public class ReportGuiaRemessaAtendimentoConsumoController extends GenericContro } private JRBeanCollectionDataSource getMateriais(Long requisicaoId){ - StringBuilder sql = new StringBuilder(); - sql.append("select distinct mat.descricao,umedi.sigla,entrada_item.datavalidade,rc_item.quantidade, rc_item.quantidadeatendida,mat_estoque.valorUnitarioMedio from alm_requisicaoconsumo req_c "); - sql.append(" left join estruturaorganizacional alm on req_c.organizacao_id = alm.id"); - sql.append(" left join alm_rc_item rc_item on rc_item.requisicaoConsumo_id = req_c.id"); - sql.append(" left join alm_materialconsumo mat_c on rc_item.materialconsumo_id = mat_c.id"); - sql.append(" left join material mat on mat_c.id = mat.id"); - sql.append(" left join alm_en_entradaitem entrada_item on entrada_item.material_id = mat.id"); - sql.append(" left join alm_me_localestoque local_estoque on local_estoque.id = entrada_item.materialLocalEstoque_id"); - sql.append(" left join alm_materialestoque mat_estoque on mat_estoque.material_id = mat.id"); - sql.append(" left join unidademedida umedi on umedi.id = mat_c.unidadearmazenamento_id"); - sql.append(" where req_c.id =").append(requisicaoId); - sql.append(" order by mat.descricao"); - - List result = (List) usuarioService.resultListNativeQuery(sql.toString()); + List result; final List materiais = new ArrayList(); List materiaisResult = new ArrayList(); Integer index = 1; + result = requisicaoConsumoService.getMateriaisForReport(requisicaoId,is_FIFO); + for(Object obj : result) materiais.add(new BeanMaterial((Object[]) obj)); @@ -217,21 +207,25 @@ public class ReportGuiaRemessaAtendimentoConsumoController extends GenericContro return new JRBeanCollectionDataSource(materiaisResult); } + + private void calcularFIFOMateriais(final List materiais, BeanMaterial material,BigDecimal qtdFalta) { + for(BeanMaterial mat : materiais) + if(material.getNome().equals(mat.getNome()) && material.getQtdeEstoque().compareTo(mat.getQtdeEstoque()) >=0) + if(mat.getQtdeEstoque().compareTo(qtdFalta) < 0){ + material.setValorUnitario(material.getValorUnitarioBD().add(mat.getValorUnitarioBD())); + material.setValorUnitario(material.getValorUnitarioBD().divide(new BigDecimal(2))); + qtdFalta = qtdFalta.subtract(mat.getQtdeEstoque()); + calcularFIFOMateriais(materiais, material, qtdFalta); + }else{ + material.setValorUnitario(material.getValorUnitarioBD().add(mat.getValorUnitarioBD())); + material.setValorUnitario(material.getValorUnitarioBD().divide(new BigDecimal(2))); + } + + } private JRBeanCollectionDataSource getResumoContabil(Long requisicaoId){ - StringBuilder sql = new StringBuilder(); - sql.append("select distinct contac.codigo,contac.descricao, rc_item.quantidade,mat_estoque.valorUnitarioMedio from alm_requisicaoconsumo req_c"); - sql.append(" left join estruturaorganizacional alm on req_c.organizacao_id = alm.id"); - sql.append(" left join alm_rc_item rc_item on rc_item.requisicaoConsumo_id = req_c.id"); - sql.append(" left join alm_materialconsumo mat_c on rc_item.materialconsumo_id = mat_c.id"); - sql.append(" left join material mat on mat_c.id = mat.id"); - sql.append(" left join alm_materialestoque mat_estoque on mat_estoque.material_id = mat.id"); - sql.append(" left join contacontabil contac on mat.contacontabil_id = contac.id"); - sql.append(" where req_c.id = ").append(requisicaoId); - sql.append(" and rc_item.quantidadeatendida is not null"); - sql.append(" order by contac.descricao"); - List result = (List) usuarioService.resultListNativeQuery(sql.toString()); + List result = requisicaoConsumoService.getResumoContabilForReport(requisicaoId,is_FIFO); final List contas = new ArrayList(); List contasResult = new ArrayList(); @@ -248,21 +242,6 @@ public class ReportGuiaRemessaAtendimentoConsumoController extends GenericContro }else contasResult.add(conta); - return contasResult.isEmpty() ? null : new JRBeanCollectionDataSource(contasResult); } - - private Object[] getRequisicao(Long requisicaoId){ - StringBuilder sql = new StringBuilder(); - sql.append("select req_c.numerorequisicao as numerorequisicao,alm.nome as almoxarifado,requisitante.nome as unidadereq,locale.nome as enderecour,"); - sql.append(" usuario.nome as atendidapor,c_custo.descricao as centrocustos,req_c.datacriacao as cadem,req_c.datafinalizacaoatendimento as atendidaem from alm_requisicaoconsumo req_c"); - sql.append(" left join estruturaorganizacional alm on req_c.almoxarifado_id = alm.id"); - sql.append(" left join estruturaorganizacional requisitante on req_c.unidadeRequisitante_id = requisitante.id"); - sql.append(" left join localizacao locale on requisitante.localizacao_id = locale.id"); - sql.append(" left join centrocusto c_custo on req_c.centrocusto_id = c_custo.id"); - sql.append(" left join seguranca_usuario usuario on req_c.autor_id = usuario.id"); - sql.append(" where req_c.id = ").append(requisicaoId); - - return (Object[])usuarioService.singleResultNativeQuery(sql.toString()); - } } \ No newline at end of file -- libgit2 0.21.2