Commit b8f36bb7e34450e815e4c5e82424bf24b0a0c1b7

Authored by Erick.sato
2 parents 00e6fa5c 38bf80fa
Exists in master

Merge branch 'tarefa-3822' into adm-1.16.0

# Conflicts:
#	cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/RequisicaoConsumoDao.java
#	cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/impl/RequisicaoConsumoDaoHibernate.java
#	cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/RequisicaoConsumoItemService.java
#	cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/RequisicaoConsumoService.java
#	cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/EntradaAlmoxarifadoItemServiceImpl.java
#	cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/RequisicaoConsumoServiceImpl.java
#	cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/AtendimentoRequisicaoConsumoListController.js
#	cit-almoxarifado-web/src/main/webapp/html/atendimentoRequisicaoConsumo/atendimentoRequisicaoConsumoList.html
Showing 53 changed files with 2551 additions and 629 deletions   Show diff stats
cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/AtendimentoRequisicaoConsumoFIFODao.java 0 → 100644
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
  1 +package br.com.centralit.api.dao;
  2 +
  3 +import br.com.centralit.framework.dao.arquitetura.CitGenericDAO;
  4 +
  5 +public interface AtendimentoRequisicaoConsumoFIFODao extends CitGenericDAO {}
cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/MaterialEstoqueFIFOItemDao.java
1 package br.com.centralit.api.dao; 1 package br.com.centralit.api.dao;
2 2
  3 +import java.util.List;
  4 +
  5 +import br.com.centralit.api.model.MaterialEstoqueFIFOItem;
3 import br.com.centralit.framework.dao.arquitetura.CitGenericDAO; 6 import br.com.centralit.framework.dao.arquitetura.CitGenericDAO;
4 7
5 public interface MaterialEstoqueFIFOItemDao extends CitGenericDAO { 8 public interface MaterialEstoqueFIFOItemDao extends CitGenericDAO {
  9 +
  10 + List<MaterialEstoqueFIFOItem> findFIFOsByMaterial(long idMaterial);
6 11
7 } 12 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/MovimentoEstoqueDao.java
1 package br.com.centralit.api.dao; 1 package br.com.centralit.api.dao;
2 2
3 import java.math.BigDecimal; 3 import java.math.BigDecimal;
  4 +import java.util.ArrayList;
4 import java.util.Calendar; 5 import java.util.Calendar;
5 import java.util.Collection; 6 import java.util.Collection;
6 import java.util.List; 7 import java.util.List;
7 -import java.util.Map;  
8 8
9 import br.com.centralit.api.model.EstruturaOrganizacional; 9 import br.com.centralit.api.model.EstruturaOrganizacional;
10 import br.com.centralit.api.model.MaterialConsumo; 10 import br.com.centralit.api.model.MaterialConsumo;
@@ -116,7 +116,7 @@ public interface MovimentoEstoqueDao extends CitGenericDAO { @@ -116,7 +116,7 @@ public interface MovimentoEstoqueDao extends CitGenericDAO {
116 * @param dataFim 116 * @param dataFim
117 * @return 117 * @return
118 */ 118 */
119 - List<Map<String, Object>> getQuantidadeMaterialAtendido(MaterialConsumo materialConsumo, EstruturaOrganizacional almoxarifado, EstruturaOrganizacional unidadeRequisitante, Calendar dataInicio, Calendar dataFim, List<Long> idsDominiosTipoStatusRequisicao); 119 + List<ArrayList<Object>> getQuantidadeMaterialAtendido(MaterialConsumo materialConsumo, EstruturaOrganizacional almoxarifado, EstruturaOrganizacional unidadeRequisitante, Calendar dataInicio, Calendar dataFim, List<Long> idsDominiosTipoStatusRequisicao);
120 120
121 /** 121 /**
122 * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p> 122 * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p>
cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/RequisicaoConsumoDao.java
@@ -4,9 +4,12 @@ import java.util.Calendar; @@ -4,9 +4,12 @@ import java.util.Calendar;
4 import java.util.Collection; 4 import java.util.Collection;
5 import java.util.List; 5 import java.util.List;
6 6
  7 +import com.googlecode.genericdao.search.SearchResult;
  8 +
7 import br.com.centralit.api.model.EstruturaOrganizacional; 9 import br.com.centralit.api.model.EstruturaOrganizacional;
8 import br.com.centralit.api.model.MaterialConsumo; 10 import br.com.centralit.api.model.MaterialConsumo;
9 import br.com.centralit.api.model.RequisicaoConsumo; 11 import br.com.centralit.api.model.RequisicaoConsumo;
  12 +import br.com.centralit.api.viewHelper.AtendimentoVH;
10 import br.com.centralit.api.viewHelper.RequisicaoVH; 13 import br.com.centralit.api.viewHelper.RequisicaoVH;
11 import br.com.centralit.framework.dao.arquitetura.CitGenericDAO; 14 import br.com.centralit.framework.dao.arquitetura.CitGenericDAO;
12 15
@@ -117,4 +120,9 @@ public interface RequisicaoConsumoDao extends CitGenericDAO { @@ -117,4 +120,9 @@ public interface RequisicaoConsumoDao extends CitGenericDAO {
117 List<Object> getMateriaisForReport(Long requisicaoId,boolean isFIFO); 120 List<Object> getMateriaisForReport(Long requisicaoId,boolean isFIFO);
118 String findtipoStatusRequisicaoPorMaterial(Long requisicaoId); 121 String findtipoStatusRequisicaoPorMaterial(Long requisicaoId);
119 122
  123 + SearchResult filtrarRequisicoesAtendimento(AtendimentoVH atendimentoVH);
  124 +
  125 + List<RequisicaoConsumo> findRequisicoesParaAtendimento(AtendimentoVH atendimentoVH);
  126 +
  127 +
120 } 128 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/RequisicaoConsumoItemDao.java
@@ -26,7 +26,9 @@ public interface RequisicaoConsumoItemDao extends CitGenericDAO { @@ -26,7 +26,9 @@ public interface RequisicaoConsumoItemDao extends CitGenericDAO {
26 * @param statusFinalizado 26 * @param statusFinalizado
27 * @return 27 * @return
28 */ 28 */
29 - Long findRequisicaoAnteriorPorMaterial(MaterialConsumo materialConsumo, EstruturaOrganizacional unidadeRequisitante, Dominio statusFinalizado, Dominio statusParcialmenteAtendida, Dominio statusAtendida); 29 + Long findRequisicaoAnteriorPorMaterial(MaterialConsumo materialConsumo, EstruturaOrganizacional unidadeRequisitante, Dominio statusFinalizado, Dominio statusParcialmenteAtendida);
  30 +
  31 + List<RequisicaoConsumoItem> findItensRequisicaoPorMaterial(Long idRequisicao, Long idMaterial);
30 32
31 List<RequisicaoConsumoItem> listarRequisicaoCosumoItemByIdRequisicao(Long requisicaoId); 33 List<RequisicaoConsumoItem> listarRequisicaoCosumoItemByIdRequisicao(Long requisicaoId);
32 34
cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/impl/AtendimentoRequisicaoConsumoFIFODaoHibernate.java 0 → 100644
@@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
  1 +package br.com.centralit.api.dao.impl;
  2 +
  3 +import org.springframework.stereotype.Repository;
  4 +
  5 +import br.com.centralit.api.dao.AtendimentoRequisicaoConsumoFIFODao;
  6 +import br.com.centralit.api.model.AtendimentoRequisicaoConsumoItemFIFO;
  7 +import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl;
  8 +
  9 +@Repository("atendimentoRequisicaoConsumoFIFODao")
  10 +public class AtendimentoRequisicaoConsumoFIFODaoHibernate extends CitGenericDAOImpl implements AtendimentoRequisicaoConsumoFIFODao {
  11 + public AtendimentoRequisicaoConsumoFIFODaoHibernate() {
  12 + super(AtendimentoRequisicaoConsumoItemFIFO.class);
  13 + }
  14 +}
cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/impl/MaterialEstoqueFIFOItemDaoHibernate.java
1 package br.com.centralit.api.dao.impl; 1 package br.com.centralit.api.dao.impl;
2 2
  3 +import java.util.List;
  4 +
3 import org.springframework.stereotype.Repository; 5 import org.springframework.stereotype.Repository;
4 6
  7 +import com.googlecode.genericdao.search.Sort;
  8 +
5 import br.com.centralit.api.dao.MaterialEstoqueFIFOItemDao; 9 import br.com.centralit.api.dao.MaterialEstoqueFIFOItemDao;
6 import br.com.centralit.api.model.MaterialEstoqueFIFOItem; 10 import br.com.centralit.api.model.MaterialEstoqueFIFOItem;
7 import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl; 11 import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl;
  12 +import br.com.centralit.framework.dao.arquitetura.SearchSeven;
8 13
9 @Repository("materialEstoqueFIFOItemDao") 14 @Repository("materialEstoqueFIFOItemDao")
10 public class MaterialEstoqueFIFOItemDaoHibernate extends CitGenericDAOImpl implements MaterialEstoqueFIFOItemDao { 15 public class MaterialEstoqueFIFOItemDaoHibernate extends CitGenericDAOImpl implements MaterialEstoqueFIFOItemDao {
@@ -12,5 +17,17 @@ public class MaterialEstoqueFIFOItemDaoHibernate extends CitGenericDAOImpl imple @@ -12,5 +17,17 @@ public class MaterialEstoqueFIFOItemDaoHibernate extends CitGenericDAOImpl imple
12 public MaterialEstoqueFIFOItemDaoHibernate() { 17 public MaterialEstoqueFIFOItemDaoHibernate() {
13 super(MaterialEstoqueFIFOItem.class); 18 super(MaterialEstoqueFIFOItem.class);
14 } 19 }
  20 +
  21 + @Override
  22 + public List<MaterialEstoqueFIFOItem> findFIFOsByMaterial(long idMaterial) {
  23 +
  24 + SearchSeven search = new SearchSeven(this.persistentClass);
  25 +
  26 + search.addFilterEqual("material.id", idMaterial);
  27 +
  28 + search.addSort(Sort.asc("id"));
  29 +
  30 + return this.search(search, this.persistentClass);
  31 + }
15 32
16 } 33 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/impl/MovimentoEstoqueDaoHibernate.java
1 package br.com.centralit.api.dao.impl; 1 package br.com.centralit.api.dao.impl;
2 2
3 import java.math.BigDecimal; 3 import java.math.BigDecimal;
  4 +import java.util.ArrayList;
4 import java.util.Calendar; 5 import java.util.Calendar;
5 import java.util.Collection; 6 import java.util.Collection;
  7 +import java.util.HashMap;
6 import java.util.List; 8 import java.util.List;
7 import java.util.Map; 9 import java.util.Map;
8 10
@@ -13,6 +15,7 @@ import org.springframework.stereotype.Repository; @@ -13,6 +15,7 @@ import org.springframework.stereotype.Repository;
13 15
14 import br.com.centralit.api.dao.MovimentoEstoqueDao; 16 import br.com.centralit.api.dao.MovimentoEstoqueDao;
15 import br.com.centralit.api.model.DominioAlmoxarifado; 17 import br.com.centralit.api.model.DominioAlmoxarifado;
  18 +import br.com.centralit.api.model.DominioMaterial;
16 import br.com.centralit.api.model.EstruturaOrganizacional; 19 import br.com.centralit.api.model.EstruturaOrganizacional;
17 import br.com.centralit.api.model.MaterialConsumo; 20 import br.com.centralit.api.model.MaterialConsumo;
18 import br.com.centralit.api.model.MovimentoEstoque; 21 import br.com.centralit.api.model.MovimentoEstoque;
@@ -25,8 +28,6 @@ import br.com.centralit.framework.util.UtilColecao; @@ -25,8 +28,6 @@ import br.com.centralit.framework.util.UtilColecao;
25 import br.com.centralit.framework.util.UtilObjeto; 28 import br.com.centralit.framework.util.UtilObjeto;
26 29
27 import com.googlecode.genericdao.search.Field; 30 import com.googlecode.genericdao.search.Field;
28 -import com.googlecode.genericdao.search.Filter;  
29 -import com.googlecode.genericdao.search.Search;  
30 31
31 /** 32 /**
32 * <p> 33 * <p>
@@ -173,38 +174,71 @@ public class MovimentoEstoqueDaoHibernate extends CitGenericDAOImpl implements M @@ -173,38 +174,71 @@ public class MovimentoEstoqueDaoHibernate extends CitGenericDAOImpl implements M
173 /** 174 /**
174 * {@inheritDoc} 175 * {@inheritDoc}
175 */ 176 */
  177 + @SuppressWarnings("unchecked")
176 @Override 178 @Override
177 - public List<Map<String, Object>> getQuantidadeMaterialAtendido(MaterialConsumo materialConsumo, EstruturaOrganizacional almoxarifado, EstruturaOrganizacional unidadeRequisitante, Calendar dataInicio, Calendar dataFim, List<Long> idsDominiosTipoStatusRequisicao) {  
178 -  
179 - SearchSeven search = new SearchSeven(); 179 + public List<ArrayList<Object>> getQuantidadeMaterialAtendido(MaterialConsumo materialConsumo, EstruturaOrganizacional almoxarifado, EstruturaOrganizacional unidadeRequisitante, Calendar dataInicio, Calendar dataFim, List<Long> idsDominiosTipoStatusRequisicao) {
180 180
181 - search.setResultMode(Search.RESULT_MAP); 181 + Map<String, Object> parametros = new HashMap<String, Object>();
  182 + StringBuilder sql = new StringBuilder();
182 183
183 - search.addField("atendimentoRequisicaoConsumoItem.quantidade"); 184 + sql.append("select atendimento.dataAtendimento, ");
  185 + sql.append(" (select sum(quantidade) from alm_rc_at_item_endereco where alm_rc_at_item_endereco.at_req_consumoitem_id = atendimentoItem.id) as quantidade ");
  186 + sql.append(" from alm_me_movimentoestoque me ");
  187 + sql.append(" inner join dominio dominio on dominio.id = me.dominioClasseReferencia_id ");
  188 + sql.append(" left join alm_rc_atendimentoitem atendimentoItem on atendimentoItem.id = me.idClasseReferencia ");
  189 + sql.append(" left join alm_rc_atendimento atendimento on atendimento.id = atendimentoItem.AtendimentoReqConsumo_Id ");
  190 + sql.append(" left join alm_rc_item rci on rci.id = atendimentoItem.requisicaoConsumoItem_id ");
  191 + sql.append(" left join alm_requisicaoconsumo rc on rc.id = rci.requisicaoConsumo_id ");
184 192
185 - search.addField("atendimentoRequisicaoConsumoItem.atendimentoRequisicaoConsumo.dataAtendimento"); 193 + sql.append(" where dominio.codigo = :codigoDominio and dominio.chave = :chaveDominio ");
186 194
187 - search.addFilterEqual("material.id", materialConsumo.getId()); 195 + parametros.put("codigoDominio", DominioMaterial.REFERENCIA_ATENDIMENTO_ALMOXARIFADO_ITEM);
  196 + parametros.put("chaveDominio", "classeReferencia");
188 197
189 - search.addFilterEqual("atendimentoRequisicaoConsumoItem.requisicaoConsumoItem.requisicaoConsumo.almoxarifado.id", almoxarifado.getId()); 198 + sql.append(" and me.material_id = :materialConsumoId ");
  199 + parametros.put("materialConsumoId", materialConsumo.getId());
  200 +
  201 + sql.append(" and rc.almoxarifado_id = :almoxarifadoId ");
  202 + parametros.put("almoxarifadoId", almoxarifado.getId());
190 203
191 if(UtilObjeto.isReferencia(unidadeRequisitante)){ 204 if(UtilObjeto.isReferencia(unidadeRequisitante)){
192 205
193 - search.addFilterEqual("atendimentoRequisicaoConsumoItem.requisicaoConsumoItem.requisicaoConsumo.unidadeRequisitante.id", unidadeRequisitante.getId()); 206 + sql.append(" and rc.unidadeRequisitante_id = :unidadeRequisitanteId ");
  207 + parametros.put("unidadeRequisitanteId", unidadeRequisitante.getId());
194 } 208 }
195 209
196 if(!UtilColecao.isVazio(idsDominiosTipoStatusRequisicao)){ 210 if(!UtilColecao.isVazio(idsDominiosTipoStatusRequisicao)){
197 - search.addFilterIn("atendimentoRequisicaoConsumoItem.requisicaoConsumoItem.requisicaoConsumo.tipoStatusRequisicao.id", idsDominiosTipoStatusRequisicao); 211 +
  212 + sql.append(" and rc.tipoStatusRequisicao_id in ").append(addFilterIn(idsDominiosTipoStatusRequisicao));
198 } 213 }
199 214
200 if(UtilObjeto.isReferencia(dataInicio) && UtilObjeto.isReferencia(dataFim)){ 215 if(UtilObjeto.isReferencia(dataInicio) && UtilObjeto.isReferencia(dataFim)){
201 216
202 - search.addFilterAnd(  
203 - Filter.greaterOrEqual("atendimentoRequisicaoConsumoItem.atendimentoRequisicaoConsumo.dataAtendimento", dataInicio),  
204 - Filter.lessOrEqual("atendimentoRequisicaoConsumoItem.atendimentoRequisicaoConsumo.dataAtendimento", dataFim)); 217 + sql.append(" and (atendimento.dataAtendimento >= :dataInicio and atendimento.dataAtendimento <= :dataFim) ");
  218 + parametros.put("dataInicio", dataInicio);
  219 + parametros.put("dataFim", dataFim);
  220 + }
  221 +
  222 + Query query = em().createNativeQuery(sql.toString());
  223 +
  224 + for(java.util.Map.Entry<String, Object> parametro : parametros.entrySet()){
  225 + query.setParameter(parametro.getKey(), parametro.getValue());
205 } 226 }
206 227
207 - return this.search(search); 228 + return query.getResultList();
  229 + }
  230 +
  231 + private String addFilterIn(List<Long> ids){
  232 + String in = "(";
  233 +
  234 + for (Long id : ids) {
  235 + in += id + ",";
  236 + }
  237 +
  238 + in = in.substring(0, in.length() - 1);
  239 +
  240 + in += ")";
  241 + return in;
208 } 242 }
209 243
210 @Override 244 @Override
@@ -254,7 +288,7 @@ public class MovimentoEstoqueDaoHibernate extends CitGenericDAOImpl implements M @@ -254,7 +288,7 @@ public class MovimentoEstoqueDaoHibernate extends CitGenericDAOImpl implements M
254 SearchSeven search = new SearchSeven(); 288 SearchSeven search = new SearchSeven();
255 289
256 search.addFilterEqual("dominioClasseReferencia.id", classeReferencia.getId()); 290 search.addFilterEqual("dominioClasseReferencia.id", classeReferencia.getId());
257 - search.addFilterEqual("idClasseReferencia", idReferencia); 291 + search.addFilterEqual("idClasseReferencia", null);
258 292
259 return search(search); 293 return search(search);
260 } 294 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/impl/RequisicaoConsumoDaoHibernate.java
1 package br.com.centralit.api.dao.impl; 1 package br.com.centralit.api.dao.impl;
2 2
3 import java.math.BigDecimal; 3 import java.math.BigDecimal;
  4 +import java.util.ArrayList;
4 import java.util.Calendar; 5 import java.util.Calendar;
5 import java.util.Collection; 6 import java.util.Collection;
6 import java.util.HashSet; 7 import java.util.HashSet;
@@ -9,6 +10,12 @@ import java.util.Set; @@ -9,6 +10,12 @@ import java.util.Set;
9 10
10 import org.springframework.stereotype.Repository; 11 import org.springframework.stereotype.Repository;
11 12
  13 +import com.googlecode.genericdao.search.Field;
  14 +import com.googlecode.genericdao.search.Filter;
  15 +import com.googlecode.genericdao.search.Search;
  16 +import com.googlecode.genericdao.search.SearchResult;
  17 +import com.googlecode.genericdao.search.Sort;
  18 +
12 import br.com.centralit.api.dao.RequisicaoConsumoDao; 19 import br.com.centralit.api.dao.RequisicaoConsumoDao;
13 import br.com.centralit.api.model.AtendimentoRequisicaoConsumo; 20 import br.com.centralit.api.model.AtendimentoRequisicaoConsumo;
14 import br.com.centralit.api.model.DominioAlmoxarifado; 21 import br.com.centralit.api.model.DominioAlmoxarifado;
@@ -16,6 +23,7 @@ import br.com.centralit.api.model.EstruturaOrganizacional; @@ -16,6 +23,7 @@ import br.com.centralit.api.model.EstruturaOrganizacional;
16 import br.com.centralit.api.model.MaterialConsumo; 23 import br.com.centralit.api.model.MaterialConsumo;
17 import br.com.centralit.api.model.RequisicaoConsumo; 24 import br.com.centralit.api.model.RequisicaoConsumo;
18 import br.com.centralit.api.model.RequisicaoConsumoItem; 25 import br.com.centralit.api.model.RequisicaoConsumoItem;
  26 +import br.com.centralit.api.viewHelper.AtendimentoVH;
19 import br.com.centralit.api.viewHelper.RequisicaoVH; 27 import br.com.centralit.api.viewHelper.RequisicaoVH;
20 import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl; 28 import br.com.centralit.framework.dao.arquitetura.CitGenericDAOImpl;
21 import br.com.centralit.framework.dao.arquitetura.SearchSeven; 29 import br.com.centralit.framework.dao.arquitetura.SearchSeven;
@@ -23,9 +31,6 @@ import br.com.centralit.framework.util.UtilColecao; @@ -23,9 +31,6 @@ import br.com.centralit.framework.util.UtilColecao;
23 import br.com.centralit.framework.util.UtilObjeto; 31 import br.com.centralit.framework.util.UtilObjeto;
24 import br.com.centralit.framework.util.UtilString; 32 import br.com.centralit.framework.util.UtilString;
25 33
26 -import com.googlecode.genericdao.search.Filter;  
27 -import com.googlecode.genericdao.search.Sort;  
28 -  
29 /** 34 /**
30 * <p> 35 * <p>
31 * <img src="http://centralit.com.br/images/logo_central.png"> 36 * <img src="http://centralit.com.br/images/logo_central.png">
@@ -369,4 +374,67 @@ public class RequisicaoConsumoDaoHibernate extends CitGenericDAOImpl implements @@ -369,4 +374,67 @@ public class RequisicaoConsumoDaoHibernate extends CitGenericDAOImpl implements
369 374
370 return (List<Object>) resultListNativeQuery(sql.toString()); 375 return (List<Object>) resultListNativeQuery(sql.toString());
371 } 376 }
  377 +
  378 +@SuppressWarnings({ "unchecked", "rawtypes" })
  379 + @Override
  380 + public SearchResult filtrarRequisicoesAtendimento(AtendimentoVH atendimentoVH) {
  381 +
  382 + SearchSeven searchSeven = new SearchSeven(atendimentoVH.getSearchParams());
  383 + searchSeven.setResultMode(Search.RESULT_SINGLE);
  384 +
  385 + searchSeven.setDistinct(true);
  386 +
  387 + addFilterMaterialConsumo(atendimentoVH, searchSeven);
  388 + addFilterUnidadeRequisitante(atendimentoVH, searchSeven);
  389 +
  390 + List<Field> fields = new ArrayList<Field>();
  391 + List<Sort> sorts = new ArrayList<Sort>();
  392 + fields.add(new Field("id"));
  393 + sorts.add(new Sort("id"));
  394 + searchSeven.setFields(fields);
  395 + searchSeven.setSorts(sorts);
  396 + List<Long> ids = this.search(searchSeven);
  397 +
  398 + SearchResult result = new SearchResult();
  399 + result.setTotalCount(this.count(searchSeven));
  400 +
  401 + fields = new ArrayList<Field>();
  402 + searchSeven = new SearchSeven(atendimentoVH.getSearchParams());
  403 + searchSeven.setResultMode(Search.RESULT_MAP);
  404 + for (String field : atendimentoVH.getSearchParams().getFields()) {
  405 + fields.add(new Field(field));
  406 + }
  407 + searchSeven.setFields(fields);
  408 + searchSeven.addFilterIn("id", ids);
  409 + searchSeven.setFirstResult(0);
  410 + result.setResult(this.search(searchSeven));
  411 +
  412 + return result;
  413 + }
  414 +
  415 + private void addFilterUnidadeRequisitante(AtendimentoVH atendimentoVH, SearchSeven searchSeven) {
  416 + if(!UtilColecao.isVazio(atendimentoVH.getIdsUnidadesRequisitantes())){
  417 + searchSeven.addFilterIn("unidadeRequisitante.id", atendimentoVH.getIdsUnidadesRequisitantes());
  418 + }
  419 + }
  420 +
  421 + private void addFilterMaterialConsumo(AtendimentoVH atendimentoVH, SearchSeven searchSeven) {
  422 + if(!UtilColecao.isVazio(atendimentoVH.getIdsMaterais())){
  423 + searchSeven.addFilterIn("requisicaoConsumoItens.materialConsumo.id", atendimentoVH.getIdsMaterais());
  424 + }
  425 + }
  426 +
  427 + @Override
  428 + public List<RequisicaoConsumo> findRequisicoesParaAtendimento(AtendimentoVH atendimentoVH) {
  429 +
  430 + SearchSeven searchSeven = new SearchSeven();
  431 +
  432 + if (!UtilColecao.isVazio(atendimentoVH.getIdsRequisicao())) {
  433 +
  434 + searchSeven.addFilterIn("id", atendimentoVH.getIdsRequisicao());
  435 + }
  436 +
  437 + return this.search(searchSeven);
  438 + }
  439 +
372 } 440 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/dao/impl/RequisicaoConsumoItemDaoHibernate.java
@@ -166,13 +166,13 @@ public class RequisicaoConsumoItemDaoHibernate extends CitGenericDAOImpl impleme @@ -166,13 +166,13 @@ public class RequisicaoConsumoItemDaoHibernate extends CitGenericDAOImpl impleme
166 * {@inheritDoc} 166 * {@inheritDoc}
167 */ 167 */
168 @Override 168 @Override
169 - public Long findRequisicaoAnteriorPorMaterial(MaterialConsumo materialConsumo, EstruturaOrganizacional unidadeRequisitante, Dominio statusFinalizado, Dominio statusParcialmenteAtendida, Dominio statusAtendida) { 169 + public Long findRequisicaoAnteriorPorMaterial(MaterialConsumo materialConsumo, EstruturaOrganizacional unidadeRequisitante, Dominio statusFinalizado, Dominio statusParcialmenteAtendida) {
170 170
171 StringBuilder str = new StringBuilder(); 171 StringBuilder str = new StringBuilder();
172 str.append("select RequisicaoConsumo.id "); 172 str.append("select RequisicaoConsumo.id ");
173 - str.append("from RequisicaoConsumoItem as RequisicaoConsumoItem ");  
174 - str.append("inner join RequisicaoConsumo RequisicaoConsumo on RequisicaoConsumo.id = RequisicaoConsumoItem.requisicaoconsumo_id ");  
175 - str.append("where (RequisicaoConsumo.tipostatusrequisicao_id = :dominioFinalizado OR RequisicaoConsumo.tipostatusrequisicao_id = :dominioParcialmenteAtendida OR RequisicaoConsumo.tipostatusrequisicao_id = :dominioAtendida) AND RequisicaoConsumoItem.materialConsumo_id = :idMaterial AND RequisicaoConsumo.unidaderequisitante_id = :idUnidadeRequisitante "); 173 + str.append("from alm_rc_item as RequisicaoConsumoItem ");
  174 + str.append("inner join alm_requisicaoconsumo RequisicaoConsumo on RequisicaoConsumo.id = RequisicaoConsumoItem.requisicaoconsumo_id ");
  175 + str.append("where (RequisicaoConsumo.tipostatusrequisicao_id = :dominioFinalizado OR RequisicaoConsumo.tipostatusrequisicao_id = :dominioParcialmenteAtendida) AND RequisicaoConsumoItem.materialConsumo_id = :idMaterial AND RequisicaoConsumo.unidaderequisitante_id = :idUnidadeRequisitante ");
176 str.append("order by RequisicaoConsumo.id desc"); 176 str.append("order by RequisicaoConsumo.id desc");
177 177
178 Query query = em().createNativeQuery(str.toString()); 178 Query query = em().createNativeQuery(str.toString());
@@ -181,7 +181,6 @@ public class RequisicaoConsumoItemDaoHibernate extends CitGenericDAOImpl impleme @@ -181,7 +181,6 @@ public class RequisicaoConsumoItemDaoHibernate extends CitGenericDAOImpl impleme
181 query.setParameter("idUnidadeRequisitante", unidadeRequisitante.getId()); 181 query.setParameter("idUnidadeRequisitante", unidadeRequisitante.getId());
182 query.setParameter("dominioFinalizado", statusFinalizado.getId()); 182 query.setParameter("dominioFinalizado", statusFinalizado.getId());
183 query.setParameter("dominioParcialmenteAtendida", statusParcialmenteAtendida.getId()); 183 query.setParameter("dominioParcialmenteAtendida", statusParcialmenteAtendida.getId());
184 - query.setParameter("dominioAtendida", statusAtendida.getId());  
185 184
186 query.setMaxResults(1); 185 query.setMaxResults(1);
187 186
@@ -196,5 +195,18 @@ public class RequisicaoConsumoItemDaoHibernate extends CitGenericDAOImpl impleme @@ -196,5 +195,18 @@ public class RequisicaoConsumoItemDaoHibernate extends CitGenericDAOImpl impleme
196 return UtilObjeto.isReferencia(result) ? result.longValue() : null; 195 return UtilObjeto.isReferencia(result) ? result.longValue() : null;
197 } 196 }
198 197
  198 + @Override
  199 + public List<RequisicaoConsumoItem> findItensRequisicaoPorMaterial(Long idRequisicao, Long idMaterial) {
  200 +
  201 + SearchSeven searchSeven = new SearchSeven();
  202 +
  203 + searchSeven.addFilterEqual("requisicaoConsumo.id", idRequisicao);
  204 +
  205 + searchSeven.addFilterEqual("materialConsumo.id", idMaterial);
  206 +
  207 + return this.search(searchSeven);
  208 +
  209 + }
  210 +
199 211
200 } 212 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/AtendimentoRequisicaoConsumo.java
@@ -11,13 +11,17 @@ import javax.persistence.FetchType; @@ -11,13 +11,17 @@ import javax.persistence.FetchType;
11 import javax.persistence.GeneratedValue; 11 import javax.persistence.GeneratedValue;
12 import javax.persistence.GenerationType; 12 import javax.persistence.GenerationType;
13 import javax.persistence.Id; 13 import javax.persistence.Id;
14 -import javax.persistence.ManyToOne;  
15 import javax.persistence.OneToMany; 14 import javax.persistence.OneToMany;
  15 +import javax.persistence.OneToOne;
16 import javax.persistence.Table; 16 import javax.persistence.Table;
17 import javax.persistence.Temporal; 17 import javax.persistence.Temporal;
18 import javax.persistence.TemporalType; 18 import javax.persistence.TemporalType;
19 import javax.persistence.Transient; 19 import javax.persistence.Transient;
20 20
  21 +import org.hibernate.envers.AuditTable;
  22 +import org.hibernate.envers.Audited;
  23 +
  24 +import br.com.centralit.api.framework.json.ViewsAdmMateriais;
21 import br.com.centralit.api.framework.json.ViewsAlmoxarifado; 25 import br.com.centralit.api.framework.json.ViewsAlmoxarifado;
22 import br.com.centralit.framework.json.JsonCalendarSimpleDateDeserializer; 26 import br.com.centralit.framework.json.JsonCalendarSimpleDateDeserializer;
23 import br.com.centralit.framework.json.JsonCalendarSimpleDateSerializer; 27 import br.com.centralit.framework.json.JsonCalendarSimpleDateSerializer;
@@ -61,6 +65,8 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; @@ -61,6 +65,8 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
61 * @author rogerio.costa 65 * @author rogerio.costa
62 * 66 *
63 */ 67 */
  68 +@Audited
  69 +@AuditTable(value = "alm_rc_atendimento_aud")
64 @Entity 70 @Entity
65 @Table(name="alm_rc_atendimento") 71 @Table(name="alm_rc_atendimento")
66 @JsonIgnoreProperties({"$selecionarRequisicoes", "$dataFinalizacao"}) 72 @JsonIgnoreProperties({"$selecionarRequisicoes", "$dataFinalizacao"})
@@ -88,13 +94,13 @@ public class AtendimentoRequisicaoConsumo extends PersistentObjectAuditOrganizac @@ -88,13 +94,13 @@ public class AtendimentoRequisicaoConsumo extends PersistentObjectAuditOrganizac
88 private String numeroAtendimento; 94 private String numeroAtendimento;
89 95
90 /** Atributo requisicaoConsumo. */ 96 /** Atributo requisicaoConsumo. */
91 - @ManyToOne(fetch = FetchType.LAZY, optional = false) 97 + @OneToOne(fetch = FetchType.LAZY, optional = false)
92 @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoListView.class }) 98 @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoListView.class })
93 private RequisicaoConsumo requisicaoConsumo; 99 private RequisicaoConsumo requisicaoConsumo;
94 100
95 /** Atributo atendimentoRequisicaoConsumoItems. */ 101 /** Atributo atendimentoRequisicaoConsumoItems. */
96 - @OneToMany(fetch = FetchType.LAZY, mappedBy = "atendimentoRequisicaoConsumo", cascade = CascadeType.ALL, orphanRemoval = true)  
97 - @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoEditView.class }) 102 + @OneToMany(fetch = FetchType.LAZY, mappedBy = "atendimentoRequisicaoConsumo", cascade = CascadeType.ALL)
  103 + @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoEditView.class, ViewsAdmMateriais.RequisicaoConsumoEditView.class })
98 private Collection<AtendimentoRequisicaoConsumoItem> atendimentoRequisicaoConsumoItems; 104 private Collection<AtendimentoRequisicaoConsumoItem> atendimentoRequisicaoConsumoItems;
99 105
100 @Transient 106 @Transient
cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/AtendimentoRequisicaoConsumoItem.java
1 package br.com.centralit.api.model; 1 package br.com.centralit.api.model;
2 2
3 import java.math.BigDecimal; 3 import java.math.BigDecimal;
  4 +import java.util.Collection;
4 5
  6 +import javax.persistence.CascadeType;
5 import javax.persistence.Entity; 7 import javax.persistence.Entity;
6 import javax.persistence.FetchType; 8 import javax.persistence.FetchType;
7 import javax.persistence.GeneratedValue; 9 import javax.persistence.GeneratedValue;
@@ -9,8 +11,13 @@ import javax.persistence.GenerationType; @@ -9,8 +11,13 @@ import javax.persistence.GenerationType;
9 import javax.persistence.Id; 11 import javax.persistence.Id;
10 import javax.persistence.JoinColumn; 12 import javax.persistence.JoinColumn;
11 import javax.persistence.ManyToOne; 13 import javax.persistence.ManyToOne;
  14 +import javax.persistence.OneToMany;
12 import javax.persistence.Table; 15 import javax.persistence.Table;
13 16
  17 +import org.hibernate.envers.AuditTable;
  18 +import org.hibernate.envers.Audited;
  19 +
  20 +import br.com.centralit.api.framework.json.ViewsAdmMateriais;
14 import br.com.centralit.api.framework.json.ViewsAlmoxarifado; 21 import br.com.centralit.api.framework.json.ViewsAlmoxarifado;
15 import br.com.centralit.framework.json.Views; 22 import br.com.centralit.framework.json.Views;
16 import br.com.centralit.framework.model.arquitetura.PersistentObjectAuditOrganizacao; 23 import br.com.centralit.framework.model.arquitetura.PersistentObjectAuditOrganizacao;
@@ -50,9 +57,11 @@ import com.fasterxml.jackson.annotation.JsonView; @@ -50,9 +57,11 @@ import com.fasterxml.jackson.annotation.JsonView;
50 * @author rogerio.costa 57 * @author rogerio.costa
51 * 58 *
52 */ 59 */
  60 +@Audited
  61 +@AuditTable(value = "alm_rc_atenditem_aud")
53 @Entity 62 @Entity
54 -@Table(name="alm_rc_atendimentoitem")  
55 -@JsonIgnoreProperties({"$info", "$verInfo", "$quantidade"}) 63 +@Table(name = "alm_rc_atendimentoitem")
  64 +@JsonIgnoreProperties({ "$info", "$verInfo", "$quantidade", "$locaisEstoque", "$hasError", "$somaQtdAtendida" })
56 public class AtendimentoRequisicaoConsumoItem extends PersistentObjectAuditOrganizacao { 65 public class AtendimentoRequisicaoConsumoItem extends PersistentObjectAuditOrganizacao {
57 66
58 /** Atributo serialVersionUID. */ 67 /** Atributo serialVersionUID. */
@@ -67,21 +76,30 @@ public class AtendimentoRequisicaoConsumoItem extends PersistentObjectAuditOrgan @@ -67,21 +76,30 @@ public class AtendimentoRequisicaoConsumoItem extends PersistentObjectAuditOrgan
67 /** Atributo atendimentoRequisicaoConsumo. */ 76 /** Atributo atendimentoRequisicaoConsumo. */
68 @ManyToOne(fetch = FetchType.LAZY, optional = false) 77 @ManyToOne(fetch = FetchType.LAZY, optional = false)
69 @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoItem.class, Views.MaterialConsultaInfo.class }) 78 @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoItem.class, Views.MaterialConsultaInfo.class })
70 - @JoinColumn(name="AtendimentoReqConsumo_Id") 79 + @JoinColumn(name = "AtendimentoReqConsumo_Id")
71 private AtendimentoRequisicaoConsumo atendimentoRequisicaoConsumo; 80 private AtendimentoRequisicaoConsumo atendimentoRequisicaoConsumo;
72 81
73 - @ManyToOne(fetch = FetchType.LAZY, optional = false)  
74 - @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoItem.class, ViewsAlmoxarifado.AtendimentoRequisicaoConsumoEditView.class, Views.MaterialConsultaInfo.class }) 82 + @ManyToOne(fetch = FetchType.LAZY)
  83 + @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoItem.class,
  84 + ViewsAlmoxarifado.AtendimentoRequisicaoConsumoEditView.class, Views.MaterialConsultaInfo.class,
  85 + ViewsAdmMateriais.RequisicaoConsumoEditView.class })
75 private RequisicaoConsumoItem requisicaoConsumoItem; 86 private RequisicaoConsumoItem requisicaoConsumoItem;
76 87
77 /** Atributo material. */ 88 /** Atributo material. */
78 @ManyToOne(fetch = FetchType.LAZY, optional = false) 89 @ManyToOne(fetch = FetchType.LAZY, optional = false)
79 - @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoItem.class, ViewsAlmoxarifado.AtendimentoRequisicaoConsumoEditView.class }) 90 + @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoItem.class,
  91 + ViewsAlmoxarifado.AtendimentoRequisicaoConsumoEditView.class,
  92 + ViewsAdmMateriais.RequisicaoConsumoEditView.class })
80 private MaterialConsumo material; 93 private MaterialConsumo material;
81 94
82 - /** Atributo quantidade. */  
83 - @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoItem.class, ViewsAlmoxarifado.AtendimentoRequisicaoConsumoEditView.class, Views.MaterialConsultaInfo.class })  
84 - private BigDecimal quantidade; 95 + @OneToMany(fetch = FetchType.LAZY, mappedBy = "atendimentoRequisicaoConsumoItem", cascade = CascadeType.ALL, orphanRemoval = true)
  96 + @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoEditView.class,
  97 + ViewsAdmMateriais.RequisicaoConsumoEditView.class })
  98 + private Collection<AtendimentoRequisicaoConsumoItemEndereco> atendimentoRequisicaoConsumoItemEnderecos;
  99 +
  100 + @OneToMany(fetch = FetchType.LAZY, mappedBy = "atendimentoRequisicaoConsumoItem", cascade = CascadeType.ALL)
  101 + @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoEditView.class })
  102 + private Collection<AtendimentoRequisicaoConsumoItemFIFO> atendimentoRequisicaoConsumoItemFIFOs;
85 103
86 /** 104 /**
87 * Retorna o valor do atributo <code>id</code> 105 * Retorna o valor do atributo <code>id</code>
@@ -144,26 +162,6 @@ public class AtendimentoRequisicaoConsumoItem extends PersistentObjectAuditOrgan @@ -144,26 +162,6 @@ public class AtendimentoRequisicaoConsumoItem extends PersistentObjectAuditOrgan
144 } 162 }
145 163
146 /** 164 /**
147 - * Retorna o valor do atributo <code>quantidade</code>  
148 - *  
149 - * @return <code>BigDecimal</code>  
150 - */  
151 - public BigDecimal getQuantidade() {  
152 -  
153 - return quantidade;  
154 - }  
155 -  
156 - /**  
157 - * Define o valor do atributo <code>quantidade</code>.  
158 - *  
159 - * @param quantidade  
160 - */  
161 - public void setQuantidade(BigDecimal quantidade) {  
162 -  
163 - this.quantidade = quantidade;  
164 - }  
165 -  
166 - /**  
167 * Retorna o valor do atributo <code>requisicaoConsumoItem</code> 165 * Retorna o valor do atributo <code>requisicaoConsumoItem</code>
168 * 166 *
169 * @return <code>RequisicaoConsumoItem</code> 167 * @return <code>RequisicaoConsumoItem</code>
@@ -183,4 +181,35 @@ public class AtendimentoRequisicaoConsumoItem extends PersistentObjectAuditOrgan @@ -183,4 +181,35 @@ public class AtendimentoRequisicaoConsumoItem extends PersistentObjectAuditOrgan
183 this.requisicaoConsumoItem = requisicaoConsumoItem; 181 this.requisicaoConsumoItem = requisicaoConsumoItem;
184 } 182 }
185 183
  184 + public Collection<AtendimentoRequisicaoConsumoItemEndereco> getAtendimentoRequisicaoConsumoItemEnderecos() {
  185 + return atendimentoRequisicaoConsumoItemEnderecos;
  186 + }
  187 +
  188 + public void setAtendimentoRequisicaoConsumoItemEnderecos(
  189 + Collection<AtendimentoRequisicaoConsumoItemEndereco> atendimentoRequisicaoConsumoItemEnderecos) {
  190 + this.atendimentoRequisicaoConsumoItemEnderecos = atendimentoRequisicaoConsumoItemEnderecos;
  191 + }
  192 +
  193 + public BigDecimal getQuantidade() {
  194 + BigDecimal quantidade = BigDecimal.ZERO;
  195 +
  196 + if (atendimentoRequisicaoConsumoItemEnderecos != null) {
  197 + for (AtendimentoRequisicaoConsumoItemEndereco itemEndereco : atendimentoRequisicaoConsumoItemEnderecos) {
  198 + quantidade = quantidade
  199 + .add(itemEndereco.getQuantidade() != null ? itemEndereco.getQuantidade() : BigDecimal.ZERO);
  200 + }
  201 + }
  202 +
  203 + return quantidade;
  204 + }
  205 +
  206 + public Collection<AtendimentoRequisicaoConsumoItemFIFO> getAtendimentoRequisicaoConsumoItemFIFOs() {
  207 + return atendimentoRequisicaoConsumoItemFIFOs;
  208 + }
  209 +
  210 + public void setAtendimentoRequisicaoConsumoItemFIFOs(
  211 + Collection<AtendimentoRequisicaoConsumoItemFIFO> atendimentoRequisicaoConsumoItemFIFOs) {
  212 + this.atendimentoRequisicaoConsumoItemFIFOs = atendimentoRequisicaoConsumoItemFIFOs;
  213 + }
  214 +
186 } 215 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/AtendimentoRequisicaoConsumoItemEndereco.java 0 → 100644
@@ -0,0 +1,110 @@ @@ -0,0 +1,110 @@
  1 +package br.com.centralit.api.model;
  2 +
  3 +import java.math.BigDecimal;
  4 +
  5 +import javax.persistence.Entity;
  6 +import javax.persistence.FetchType;
  7 +import javax.persistence.GeneratedValue;
  8 +import javax.persistence.GenerationType;
  9 +import javax.persistence.Id;
  10 +import javax.persistence.JoinColumn;
  11 +import javax.persistence.ManyToOne;
  12 +import javax.persistence.Table;
  13 +import javax.persistence.Transient;
  14 +
  15 +import org.hibernate.envers.AuditTable;
  16 +import org.hibernate.envers.Audited;
  17 +
  18 +import br.com.centralit.api.framework.json.ViewsAdmMateriais;
  19 +import br.com.centralit.api.framework.json.ViewsAlmoxarifado;
  20 +import br.com.centralit.framework.json.Views;
  21 +import br.com.centralit.framework.model.arquitetura.PersistentObject;
  22 +
  23 +import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
  24 +import com.fasterxml.jackson.annotation.JsonView;
  25 +
  26 +@Audited
  27 +@AuditTable(value = "alm_rc_at_item_end_aud")
  28 +@Entity
  29 +@Table(name = "alm_rc_at_item_endereco")
  30 +@JsonIgnoreProperties({"$hasError"})
  31 +public class AtendimentoRequisicaoConsumoItemEndereco extends PersistentObject {
  32 +
  33 + private static final long serialVersionUID = 1L;
  34 +
  35 + @Id
  36 + @GeneratedValue(strategy = GenerationType.AUTO)
  37 + @JsonView({ Views.GenericView.class })
  38 + private Long id;
  39 +
  40 + @JsonView({Views.GenericView.class })
  41 + private BigDecimal quantidade;
  42 +
  43 + @ManyToOne(fetch = FetchType.LAZY, optional = false)
  44 + @JsonView({ViewsAlmoxarifado.AtendimentoRequisicaoConsumoEditView.class, ViewsAdmMateriais.RequisicaoConsumoEditView.class})
  45 + private MaterialLocalEstoque materialLocalEstoque;
  46 +
  47 + @ManyToOne(fetch = FetchType.LAZY, optional = false)
  48 + @JsonView({ViewsAlmoxarifado.AtendimentoRequisicaoConsumoEditView.class})
  49 + @JoinColumn(name = "at_req_consumoitem_id")
  50 + private AtendimentoRequisicaoConsumoItem atendimentoRequisicaoConsumoItem;
  51 +
  52 + @Transient
  53 + @JsonView({ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAlmoxarifado.AtendimentoRequisicaoConsumoEditView.class })
  54 + private BigDecimal quantidadeAnterior;
  55 +
  56 + @Override
  57 + public Long getId() {
  58 + return this.id;
  59 + }
  60 +
  61 + public void setId(Long id) {
  62 + this.id = id;
  63 + }
  64 +
  65 + public BigDecimal getQuantidade() {
  66 + return quantidade;
  67 + }
  68 +
  69 + public void setQuantidade(BigDecimal quantidade) {
  70 + this.quantidade = quantidade;
  71 + }
  72 +
  73 + public MaterialLocalEstoque getMaterialLocalEstoque() {
  74 + return materialLocalEstoque;
  75 + }
  76 +
  77 + public void setMaterialLocalEstoque(MaterialLocalEstoque materialLocalEstoque) {
  78 + this.materialLocalEstoque = materialLocalEstoque;
  79 + }
  80 +
  81 + public AtendimentoRequisicaoConsumoItem getAtendimentoRequisicaoConsumoItem() {
  82 + return atendimentoRequisicaoConsumoItem;
  83 + }
  84 +
  85 + public void setAtendimentoRequisicaoConsumoItem(
  86 + AtendimentoRequisicaoConsumoItem atendimentoRequisicaoConsumoItem) {
  87 + this.atendimentoRequisicaoConsumoItem = atendimentoRequisicaoConsumoItem;
  88 + }
  89 +
  90 + public BigDecimal getQuantidadeAnterior() {
  91 + if(quantidadeAnterior == null){
  92 + if(quantidade == null){
  93 + quantidadeAnterior = BigDecimal.ZERO;
  94 + }else{
  95 + if(atendimentoRequisicaoConsumoItem == null || atendimentoRequisicaoConsumoItem.getAtendimentoRequisicaoConsumo() == null || atendimentoRequisicaoConsumoItem.getAtendimentoRequisicaoConsumo().getDataInativo() != null){
  96 + quantidadeAnterior = BigDecimal.ZERO;
  97 + }else{
  98 + quantidadeAnterior = quantidade;
  99 + }
  100 + }
  101 + }
  102 +
  103 + return quantidadeAnterior;
  104 + }
  105 +
  106 + public void setQuantidadeAnterior(BigDecimal quantidadeAnterior) {
  107 + this.quantidadeAnterior = quantidadeAnterior;
  108 + }
  109 +
  110 +}
cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/AtendimentoRequisicaoConsumoItemFIFO.java 0 → 100644
@@ -0,0 +1,90 @@ @@ -0,0 +1,90 @@
  1 +package br.com.centralit.api.model;
  2 +
  3 +import java.math.BigDecimal;
  4 +
  5 +import javax.persistence.Column;
  6 +import javax.persistence.Entity;
  7 +import javax.persistence.FetchType;
  8 +import javax.persistence.GeneratedValue;
  9 +import javax.persistence.GenerationType;
  10 +import javax.persistence.Id;
  11 +import javax.persistence.JoinColumn;
  12 +import javax.persistence.ManyToOne;
  13 +import javax.persistence.Table;
  14 +
  15 +import org.hibernate.envers.AuditTable;
  16 +import org.hibernate.envers.Audited;
  17 +
  18 +import com.fasterxml.jackson.annotation.JsonView;
  19 +
  20 +import br.com.centralit.api.framework.json.ViewsAlmoxarifado;
  21 +import br.com.centralit.framework.json.Views;
  22 +import br.com.centralit.framework.model.arquitetura.PersistentObjectAuditOrganizacao;
  23 +
  24 +@Audited
  25 +@AuditTable(value = "alm_rc_atitfifo_aud")
  26 +@Entity
  27 +@Table(name = "alm_rc_atendimentoitemfifo")
  28 +public class AtendimentoRequisicaoConsumoItemFIFO extends PersistentObjectAuditOrganizacao {
  29 +
  30 + /** Atributo serialVersionUID. */
  31 + private static final long serialVersionUID = -1011361588461933352L;
  32 +
  33 + /** Atributo id. */
  34 + @Id
  35 + @GeneratedValue(strategy = GenerationType.AUTO)
  36 + @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoItem.class, Views.GenericView.class })
  37 + private Long id;
  38 +
  39 + @ManyToOne(fetch = FetchType.LAZY, optional = true)
  40 + private MaterialEstoqueFIFOItem materialEstoqueFIFOItem;
  41 +
  42 + @Column(precision = 20, scale = 4, nullable = false)
  43 + private BigDecimal quantidadeUtilizada;
  44 +
  45 + @ManyToOne(fetch = FetchType.LAZY, optional = false)
  46 + @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoEditView.class })
  47 + @JoinColumn(name = "at_req_consumoitem_id")
  48 + private AtendimentoRequisicaoConsumoItem atendimentoRequisicaoConsumoItem;
  49 +
  50 + public AtendimentoRequisicaoConsumoItemFIFO(){};
  51 +
  52 + public AtendimentoRequisicaoConsumoItemFIFO(AtendimentoRequisicaoConsumoItem atendimentoRequisicaoConsumoItem, MaterialEstoqueFIFOItem materialEstoqueFIFOItem, BigDecimal quantidadeMovimentada) {
  53 + this.atendimentoRequisicaoConsumoItem = atendimentoRequisicaoConsumoItem;
  54 + this.materialEstoqueFIFOItem = materialEstoqueFIFOItem;
  55 + this.quantidadeUtilizada = quantidadeMovimentada;
  56 + }
  57 +
  58 + public Long getId() {
  59 + return id;
  60 + }
  61 +
  62 + public void setId(Long id) {
  63 + this.id = id;
  64 + }
  65 +
  66 + public MaterialEstoqueFIFOItem getMaterialEstoqueFIFOItem() {
  67 + return materialEstoqueFIFOItem;
  68 + }
  69 +
  70 + public void setMaterialEstoqueFIFOItem(MaterialEstoqueFIFOItem materialEstoqueFIFOItem) {
  71 + this.materialEstoqueFIFOItem = materialEstoqueFIFOItem;
  72 + }
  73 +
  74 + public BigDecimal getQuantidadeUtilizada() {
  75 + return quantidadeUtilizada;
  76 + }
  77 +
  78 + public void setQuantidadeUtilizada(BigDecimal quantidadeUtilizada) {
  79 + this.quantidadeUtilizada = quantidadeUtilizada;
  80 + }
  81 +
  82 + public AtendimentoRequisicaoConsumoItem getAtendimentoRequisicaoConsumoItem() {
  83 + return atendimentoRequisicaoConsumoItem;
  84 + }
  85 +
  86 + public void setAtendimentoRequisicaoConsumoItem(AtendimentoRequisicaoConsumoItem atendimentoRequisicaoConsumoItem) {
  87 + this.atendimentoRequisicaoConsumoItem = atendimentoRequisicaoConsumoItem;
  88 + }
  89 +
  90 +}
cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/DominioAlmoxarifado.java
@@ -25,17 +25,17 @@ public class DominioAlmoxarifado { @@ -25,17 +25,17 @@ public class DominioAlmoxarifado {
25 /** Atributo TIPO_STATUS_REQUISICAO. */ 25 /** Atributo TIPO_STATUS_REQUISICAO. */
26 public static final String TIPO_STATUS_REQUISICAO = "tipoStatusRequisicao"; 26 public static final String TIPO_STATUS_REQUISICAO = "tipoStatusRequisicao";
27 27
28 - /** Atributo TIPO_STATUS_NAO_CONCLUIDA. */  
29 - public static final Long TIPO_STATUS_NAO_CONCLUIDA = 1L;  
30 - 28 + /** Atributo TIPO_STATUS_ATENDIDA_PARCIALMENTE. */
  29 + public static final Long TIPO_STATUS_ATENDIDA_PARCIALMENTE = 1L;
  30 +
31 /** Atributo TIPO_STATUS_PRONTA_PARA_ATENDIMENTO. */ 31 /** Atributo TIPO_STATUS_PRONTA_PARA_ATENDIMENTO. */
32 public static final Long TIPO_STATUS_PRONTA_PARA_ATENDIMENTO = 2L; 32 public static final Long TIPO_STATUS_PRONTA_PARA_ATENDIMENTO = 2L;
  33 +
  34 + /** Atributo TIPO_STATUS_NAO_CONCLUIDA. */
  35 + public static final Long TIPO_STATUS_NAO_CONCLUIDA = 3L;
33 36
34 - /** Atributo TIPO_STATUS_ATENDIDA_PARCIALMENTE. */  
35 - public static final Long TIPO_STATUS_ATENDIDA_PARCIALMENTE = 3L;  
36 -  
37 - /** Atributo TIPO_STATUS_ATENDIDA. */  
38 - public static final Long TIPO_STATUS_ATENDIDA = 4L; 37 + /** Atributo TIPO_STATUS_DEVOLVIDA. */
  38 + public static final Long TIPO_STATUS_DEVOLVIDA = 4L;
39 39
40 /** Atributo TIPO_STATUS_FINALIZADA. */ 40 /** Atributo TIPO_STATUS_FINALIZADA. */
41 public static final Long TIPO_STATUS_FINALIZADA = 5L; 41 public static final Long TIPO_STATUS_FINALIZADA = 5L;
cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/EnderecoEstoque.java
@@ -85,7 +85,7 @@ public class EnderecoEstoque extends PersistentObjectAuditOrganizacao { @@ -85,7 +85,7 @@ public class EnderecoEstoque extends PersistentObjectAuditOrganizacao {
85 private String sigla; 85 private String sigla;
86 86
87 @Column(name = "descricao", length = 400, nullable = false) 87 @Column(name = "descricao", length = 400, nullable = false)
88 - @JsonView({ ViewsAdmMateriais.EnderecoEstoqueView.class, Views.MaterialLocalEstoqueView.class, ViewsAdmMateriais.TransferenciaEnderecoEstoqueView.class }) 88 + @JsonView({ ViewsAdmMateriais.EnderecoEstoqueView.class, Views.MaterialLocalEstoqueView.class, ViewsAdmMateriais.TransferenciaEnderecoEstoqueView.class, ViewsAdmMateriais.RequisicaoConsumoEditView.class })
89 private String descricao; 89 private String descricao;
90 90
91 @ManyToOne(fetch = FetchType.LAZY, optional = true) 91 @ManyToOne(fetch = FetchType.LAZY, optional = true)
cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/MaterialEstoque.java
@@ -18,6 +18,7 @@ import org.hibernate.envers.Audited; @@ -18,6 +18,7 @@ import org.hibernate.envers.Audited;
18 18
19 import com.fasterxml.jackson.annotation.JsonView; 19 import com.fasterxml.jackson.annotation.JsonView;
20 20
  21 +import br.com.centralit.api.framework.json.ViewsAdmMateriais;
21 import br.com.centralit.framework.json.Views; 22 import br.com.centralit.framework.json.Views;
22 import br.com.centralit.framework.model.arquitetura.PersistentObjectAuditOrganizacao; 23 import br.com.centralit.framework.model.arquitetura.PersistentObjectAuditOrganizacao;
23 import br.com.centralit.framework.util.UtilObjeto; 24 import br.com.centralit.framework.util.UtilObjeto;
@@ -71,7 +72,7 @@ public class MaterialEstoque extends PersistentObjectAuditOrganizacao { @@ -71,7 +72,7 @@ public class MaterialEstoque extends PersistentObjectAuditOrganizacao {
71 72
72 /** Atributo material. */ 73 /** Atributo material. */
73 @OneToOne(fetch = FetchType.LAZY, optional = false) 74 @OneToOne(fetch = FetchType.LAZY, optional = false)
74 - @JsonView({ Views.MaterialLocalEstoqueView.class }) 75 + @JsonView({ Views.MaterialLocalEstoqueView.class, ViewsAdmMateriais.RequisicaoConsumoEditView.class })
75 private MaterialConsumo material; 76 private MaterialConsumo material;
76 77
77 /** Atributo locaisEstoque. */ 78 /** Atributo locaisEstoque. */
cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/MaterialEstoqueFIFOItem.java
@@ -18,18 +18,30 @@ import br.com.centralit.framework.model.arquitetura.PersistentObjectAuditOrganiz @@ -18,18 +18,30 @@ import br.com.centralit.framework.model.arquitetura.PersistentObjectAuditOrganiz
18 18
19 /** 19 /**
20 * 20 *
21 - * <p><img src="http://centralit.com.br/images/logo_central.png"></p> 21 + * <p>
  22 + * <img src="http://centralit.com.br/images/logo_central.png">
  23 + * </p>
22 * 24 *
23 - * <p><b>Company: </b> Central IT - Governança Corporativa - </p> 25 + * <p>
  26 + * <b>Company: </b> Central IT - Governança Corporativa -
  27 + * </p>
24 * 28 *
25 - * <p><b>Title: </b></p> 29 + * <p>
  30 + * <b>Title: </b>
  31 + * </p>
26 * 32 *
27 - * <p><b>Description: </b></p> 33 + * <p>
  34 + * <b>Description: </b>
  35 + * </p>
28 * 36 *
29 - * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p> 37 + * <p>
  38 + * <b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a>
  39 + * </p>
30 * 40 *
31 - * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>  
32 - * 41 + * <p>
  42 + * <b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a>
  43 + * </p>
  44 + *
33 * @since 29/04/2016 - 15:55:15 45 * @since 29/04/2016 - 15:55:15
34 * 46 *
35 * @version 1.0.0 47 * @version 1.0.0
@@ -45,16 +57,16 @@ public class MaterialEstoqueFIFOItem extends PersistentObjectAuditOrganizacao { @@ -45,16 +57,16 @@ public class MaterialEstoqueFIFOItem extends PersistentObjectAuditOrganizacao {
45 /** Atributo serialVersionUID. */ 57 /** Atributo serialVersionUID. */
46 private static final long serialVersionUID = 1170228299223134768L; 58 private static final long serialVersionUID = 1170228299223134768L;
47 private static int SCALE_DIVISOR_DECIMAL = 4; 59 private static int SCALE_DIVISOR_DECIMAL = 4;
48 - 60 +
49 /** Atributo id. */ 61 /** Atributo id. */
50 @Id 62 @Id
51 @GeneratedValue(strategy = GenerationType.AUTO) 63 @GeneratedValue(strategy = GenerationType.AUTO)
52 private Long id; 64 private Long id;
53 - 65 +
54 /** Atributo material. */ 66 /** Atributo material. */
55 @ManyToOne(fetch = FetchType.LAZY, optional = false) 67 @ManyToOne(fetch = FetchType.LAZY, optional = false)
56 private MaterialConsumo material; 68 private MaterialConsumo material;
57 - 69 +
58 /** Atributo materialEstoque. */ 70 /** Atributo materialEstoque. */
59 @ManyToOne(fetch = FetchType.LAZY, optional = true) 71 @ManyToOne(fetch = FetchType.LAZY, optional = true)
60 private MaterialEstoque materialEstoque; 72 private MaterialEstoque materialEstoque;
@@ -62,7 +74,7 @@ public class MaterialEstoqueFIFOItem extends PersistentObjectAuditOrganizacao { @@ -62,7 +74,7 @@ public class MaterialEstoqueFIFOItem extends PersistentObjectAuditOrganizacao {
62 /** Atributo materialEstoqueInativo. */ 74 /** Atributo materialEstoqueInativo. */
63 @ManyToOne(fetch = FetchType.LAZY, optional = true) 75 @ManyToOne(fetch = FetchType.LAZY, optional = true)
64 private MaterialEstoque materialEstoqueInativo; 76 private MaterialEstoque materialEstoqueInativo;
65 - 77 +
66 /** Atributo quantidadeInicial. */ 78 /** Atributo quantidadeInicial. */
67 @Column(precision = 20, scale = 4, nullable = false) 79 @Column(precision = 20, scale = 4, nullable = false)
68 private BigDecimal quantidadeInicial; 80 private BigDecimal quantidadeInicial;
@@ -70,7 +82,7 @@ public class MaterialEstoqueFIFOItem extends PersistentObjectAuditOrganizacao { @@ -70,7 +82,7 @@ public class MaterialEstoqueFIFOItem extends PersistentObjectAuditOrganizacao {
70 /** Atributo quantidadeRestante. */ 82 /** Atributo quantidadeRestante. */
71 @Column(precision = 20, scale = 4, nullable = false) 83 @Column(precision = 20, scale = 4, nullable = false)
72 private BigDecimal quantidadeRestante; 84 private BigDecimal quantidadeRestante;
73 - 85 +
74 /** Atributo valorUnitario. */ 86 /** Atributo valorUnitario. */
75 @Column(precision = 20, scale = 4, nullable = false) 87 @Column(precision = 20, scale = 4, nullable = false)
76 private BigDecimal valorUnitario; 88 private BigDecimal valorUnitario;
@@ -78,20 +90,20 @@ public class MaterialEstoqueFIFOItem extends PersistentObjectAuditOrganizacao { @@ -78,20 +90,20 @@ public class MaterialEstoqueFIFOItem extends PersistentObjectAuditOrganizacao {
78 /** Atributo valorSobra. */ 90 /** Atributo valorSobra. */
79 @Column(precision = 20, scale = 4, nullable = false) 91 @Column(precision = 20, scale = 4, nullable = false)
80 private BigDecimal valorSobra; 92 private BigDecimal valorSobra;
81 - 93 +
82 /** Atributo valorTotal. */ 94 /** Atributo valorTotal. */
83 @Column(precision = 20, scale = 4, nullable = false) 95 @Column(precision = 20, scale = 4, nullable = false)
84 private BigDecimal valorTotal; 96 private BigDecimal valorTotal;
85 - 97 +
86 @ManyToOne(fetch = FetchType.EAGER, optional = false) 98 @ManyToOne(fetch = FetchType.EAGER, optional = false)
87 private EntradaAlmoxarifadoItem entradaItem; 99 private EntradaAlmoxarifadoItem entradaItem;
88 -  
89 - 100 +
90 protected MaterialEstoqueFIFOItem() { 101 protected MaterialEstoqueFIFOItem() {
91 super(); 102 super();
92 } 103 }
93 104
94 - public MaterialEstoqueFIFOItem( MaterialEstoque materialEstoque, BigDecimal quantidadeInicial, BigDecimal valorTotal, EntradaAlmoxarifadoItem entradaItem ) { 105 + public MaterialEstoqueFIFOItem(MaterialEstoque materialEstoque, BigDecimal quantidadeInicial, BigDecimal valorTotal,
  106 + EntradaAlmoxarifadoItem entradaItem) {
95 super(); 107 super();
96 this.material = materialEstoque.getMaterial(); 108 this.material = materialEstoque.getMaterial();
97 this.materialEstoque = materialEstoque; 109 this.materialEstoque = materialEstoque;
@@ -99,7 +111,7 @@ public class MaterialEstoqueFIFOItem extends PersistentObjectAuditOrganizacao { @@ -99,7 +111,7 @@ public class MaterialEstoqueFIFOItem extends PersistentObjectAuditOrganizacao {
99 this.quantidadeRestante = quantidadeInicial; 111 this.quantidadeRestante = quantidadeInicial;
100 this.valorTotal = valorTotal; 112 this.valorTotal = valorTotal;
101 this.valorUnitario = valorTotal.divide(quantidadeInicial, SCALE_DIVISOR_DECIMAL, RoundingMode.CEILING); 113 this.valorUnitario = valorTotal.divide(quantidadeInicial, SCALE_DIVISOR_DECIMAL, RoundingMode.CEILING);
102 - this.valorSobra = valorTotal.min(this.valorUnitario.multiply(quantidadeInicial)); 114 + this.valorSobra = valorTotal.subtract(this.valorUnitario.multiply(quantidadeInicial));
103 this.entradaItem = entradaItem; 115 this.entradaItem = entradaItem;
104 } 116 }
105 117
@@ -123,70 +135,63 @@ public class MaterialEstoqueFIFOItem extends PersistentObjectAuditOrganizacao { @@ -123,70 +135,63 @@ public class MaterialEstoqueFIFOItem extends PersistentObjectAuditOrganizacao {
123 this.id = id; 135 this.id = id;
124 } 136 }
125 137
126 -  
127 /** 138 /**
128 * Retorna o valor do atributo <code>material</code> 139 * Retorna o valor do atributo <code>material</code>
129 * 140 *
130 * @return <code>MaterialConsumo</code> 141 * @return <code>MaterialConsumo</code>
131 */ 142 */
132 public MaterialConsumo getMaterial() { 143 public MaterialConsumo getMaterial() {
133 - 144 +
134 return material; 145 return material;
135 } 146 }
136 147
137 -  
138 /** 148 /**
139 * Define o valor do atributo <code>material</code>. 149 * Define o valor do atributo <code>material</code>.
140 * 150 *
141 - * @param material 151 + * @param material
142 */ 152 */
143 public void setMaterial(MaterialConsumo material) { 153 public void setMaterial(MaterialConsumo material) {
144 - 154 +
145 this.material = material; 155 this.material = material;
146 } 156 }
147 157
148 -  
149 -  
150 /** 158 /**
151 * Retorna o valor do atributo <code>materialEstoque</code> 159 * Retorna o valor do atributo <code>materialEstoque</code>
152 * 160 *
153 * @return <code>MaterialEstoque</code> 161 * @return <code>MaterialEstoque</code>
154 */ 162 */
155 public MaterialEstoque getMaterialEstoque() { 163 public MaterialEstoque getMaterialEstoque() {
156 - 164 +
157 return materialEstoque; 165 return materialEstoque;
158 } 166 }
159 167
160 -  
161 /** 168 /**
162 * Define o valor do atributo <code>materialEstoque</code>. 169 * Define o valor do atributo <code>materialEstoque</code>.
163 * 170 *
164 - * @param materialEstoque 171 + * @param materialEstoque
165 */ 172 */
166 public void setMaterialEstoque(MaterialEstoque materialEstoque) { 173 public void setMaterialEstoque(MaterialEstoque materialEstoque) {
167 - 174 +
168 this.materialEstoque = materialEstoque; 175 this.materialEstoque = materialEstoque;
169 } 176 }
170 177
171 -  
172 /** 178 /**
173 * Retorna o valor do atributo <code>materialEstoqueInativo</code> 179 * Retorna o valor do atributo <code>materialEstoqueInativo</code>
174 * 180 *
175 * @return <code>MaterialEstoque</code> 181 * @return <code>MaterialEstoque</code>
176 */ 182 */
177 public MaterialEstoque getMaterialEstoqueInativo() { 183 public MaterialEstoque getMaterialEstoqueInativo() {
178 - 184 +
179 return materialEstoqueInativo; 185 return materialEstoqueInativo;
180 } 186 }
181 187
182 -  
183 /** 188 /**
184 * Define o valor do atributo <code>materialEstoqueInativo</code>. 189 * Define o valor do atributo <code>materialEstoqueInativo</code>.
185 * 190 *
186 - * @param materialEstoqueInativo 191 + * @param materialEstoqueInativo
187 */ 192 */
188 public void setMaterialEstoqueInativo(MaterialEstoque materialEstoqueInativo) { 193 public void setMaterialEstoqueInativo(MaterialEstoque materialEstoqueInativo) {
189 - 194 +
190 this.materialEstoqueInativo = materialEstoqueInativo; 195 this.materialEstoqueInativo = materialEstoqueInativo;
191 } 196 }
192 197
@@ -196,128 +201,117 @@ public class MaterialEstoqueFIFOItem extends PersistentObjectAuditOrganizacao { @@ -196,128 +201,117 @@ public class MaterialEstoqueFIFOItem extends PersistentObjectAuditOrganizacao {
196 * @return <code>BigDecimal</code> 201 * @return <code>BigDecimal</code>
197 */ 202 */
198 public BigDecimal getQuantidadeInicial() { 203 public BigDecimal getQuantidadeInicial() {
199 - 204 +
200 return quantidadeInicial; 205 return quantidadeInicial;
201 } 206 }
202 207
203 -  
204 /** 208 /**
205 * Define o valor do atributo <code>quantidadeInicial</code>. 209 * Define o valor do atributo <code>quantidadeInicial</code>.
206 * 210 *
207 - * @param quantidadeInicial 211 + * @param quantidadeInicial
208 */ 212 */
209 public void setQuantidadeInicial(BigDecimal quantidadeInicial) { 213 public void setQuantidadeInicial(BigDecimal quantidadeInicial) {
210 - 214 +
211 this.quantidadeInicial = quantidadeInicial; 215 this.quantidadeInicial = quantidadeInicial;
212 } 216 }
213 217
214 -  
215 /** 218 /**
216 * Retorna o valor do atributo <code>quantidadeRestante</code> 219 * Retorna o valor do atributo <code>quantidadeRestante</code>
217 * 220 *
218 * @return <code>BigDecimal</code> 221 * @return <code>BigDecimal</code>
219 */ 222 */
220 public BigDecimal getQuantidadeRestante() { 223 public BigDecimal getQuantidadeRestante() {
221 - 224 +
222 return quantidadeRestante; 225 return quantidadeRestante;
223 } 226 }
224 227
225 -  
226 /** 228 /**
227 * Define o valor do atributo <code>quantidadeRestante</code>. 229 * Define o valor do atributo <code>quantidadeRestante</code>.
228 * 230 *
229 - * @param quantidadeRestante 231 + * @param quantidadeRestante
230 */ 232 */
231 public void setQuantidadeRestante(BigDecimal quantidadeRestante) { 233 public void setQuantidadeRestante(BigDecimal quantidadeRestante) {
232 - 234 +
233 this.quantidadeRestante = quantidadeRestante; 235 this.quantidadeRestante = quantidadeRestante;
234 } 236 }
235 237
236 -  
237 /** 238 /**
238 * Retorna o valor do atributo <code>valorUnitario</code> 239 * Retorna o valor do atributo <code>valorUnitario</code>
239 * 240 *
240 * @return <code>BigDecimal</code> 241 * @return <code>BigDecimal</code>
241 */ 242 */
242 public BigDecimal getValorUnitario() { 243 public BigDecimal getValorUnitario() {
243 - 244 +
244 return valorUnitario; 245 return valorUnitario;
245 } 246 }
246 247
247 -  
248 /** 248 /**
249 * Define o valor do atributo <code>valorUnitario</code>. 249 * Define o valor do atributo <code>valorUnitario</code>.
250 * 250 *
251 - * @param valorUnitario 251 + * @param valorUnitario
252 */ 252 */
253 public void setValorUnitario(BigDecimal valorUnitario) { 253 public void setValorUnitario(BigDecimal valorUnitario) {
254 - 254 +
255 this.valorUnitario = valorUnitario; 255 this.valorUnitario = valorUnitario;
256 } 256 }
257 257
258 -  
259 /** 258 /**
260 * Retorna o valor do atributo <code>valorSobra</code> 259 * Retorna o valor do atributo <code>valorSobra</code>
261 * 260 *
262 * @return <code>BigDecimal</code> 261 * @return <code>BigDecimal</code>
263 */ 262 */
264 public BigDecimal getValorSobra() { 263 public BigDecimal getValorSobra() {
265 - 264 +
266 return valorSobra; 265 return valorSobra;
267 } 266 }
268 267
269 -  
270 /** 268 /**
271 * Define o valor do atributo <code>valorSobra</code>. 269 * Define o valor do atributo <code>valorSobra</code>.
272 * 270 *
273 - * @param valorSobra 271 + * @param valorSobra
274 */ 272 */
275 public void setValorSobra(BigDecimal valorSobra) { 273 public void setValorSobra(BigDecimal valorSobra) {
276 - 274 +
277 this.valorSobra = valorSobra; 275 this.valorSobra = valorSobra;
278 } 276 }
279 277
280 -  
281 /** 278 /**
282 * Retorna o valor do atributo <code>valorTotal</code> 279 * Retorna o valor do atributo <code>valorTotal</code>
283 * 280 *
284 * @return <code>BigDecimal</code> 281 * @return <code>BigDecimal</code>
285 */ 282 */
286 public BigDecimal getValorTotal() { 283 public BigDecimal getValorTotal() {
287 - 284 +
288 return valorTotal; 285 return valorTotal;
289 } 286 }
290 287
291 -  
292 /** 288 /**
293 * Define o valor do atributo <code>valorTotal</code>. 289 * Define o valor do atributo <code>valorTotal</code>.
294 * 290 *
295 - * @param valorTotal 291 + * @param valorTotal
296 */ 292 */
297 public void setValorTotal(BigDecimal valorTotal) { 293 public void setValorTotal(BigDecimal valorTotal) {
298 - 294 +
299 this.valorTotal = valorTotal; 295 this.valorTotal = valorTotal;
300 } 296 }
301 297
302 -  
303 /** 298 /**
304 * Retorna o valor do atributo <code>entradaItem</code> 299 * Retorna o valor do atributo <code>entradaItem</code>
305 * 300 *
306 * @return <code>EntradaAlmoxarifadoItem</code> 301 * @return <code>EntradaAlmoxarifadoItem</code>
307 */ 302 */
308 public EntradaAlmoxarifadoItem getEntradaItem() { 303 public EntradaAlmoxarifadoItem getEntradaItem() {
309 - 304 +
310 return entradaItem; 305 return entradaItem;
311 } 306 }
312 307
313 -  
314 /** 308 /**
315 * Define o valor do atributo <code>entradaItem</code>. 309 * Define o valor do atributo <code>entradaItem</code>.
316 * 310 *
317 - * @param entradaItem 311 + * @param entradaItem
318 */ 312 */
319 public void setEntradaItem(EntradaAlmoxarifadoItem entradaItem) { 313 public void setEntradaItem(EntradaAlmoxarifadoItem entradaItem) {
320 - 314 +
321 this.entradaItem = entradaItem; 315 this.entradaItem = entradaItem;
322 } 316 }
323 317
cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/MaterialLocalEstoque.java
@@ -68,7 +68,7 @@ public class MaterialLocalEstoque extends PersistentObjectAuditOrganizacao { @@ -68,7 +68,7 @@ public class MaterialLocalEstoque extends PersistentObjectAuditOrganizacao {
68 68
69 /** Atributo materialEstoque. */ 69 /** Atributo materialEstoque. */
70 @ManyToOne(fetch = FetchType.LAZY, optional = false, cascade = CascadeType.PERSIST) 70 @ManyToOne(fetch = FetchType.LAZY, optional = false, cascade = CascadeType.PERSIST)
71 - @JsonView({ Views.MaterialLocalEstoqueView.class, ViewsAdmMateriais.TransferenciaEnderecoEstoqueView.class }) 71 + @JsonView({Views.MaterialLocalEstoqueView.class, ViewsAdmMateriais.TransferenciaEnderecoEstoqueView.class, ViewsAdmMateriais.RequisicaoConsumoEditView.class })
72 private MaterialEstoque materialEstoque; 72 private MaterialEstoque materialEstoque;
73 73
74 /** Atributo materialEstoqueInativo. */ 74 /** Atributo materialEstoqueInativo. */
@@ -77,7 +77,7 @@ public class MaterialLocalEstoque extends PersistentObjectAuditOrganizacao { @@ -77,7 +77,7 @@ public class MaterialLocalEstoque extends PersistentObjectAuditOrganizacao {
77 77
78 /** Atributo endereco. */ 78 /** Atributo endereco. */
79 @ManyToOne(fetch = FetchType.LAZY, optional = false) 79 @ManyToOne(fetch = FetchType.LAZY, optional = false)
80 - @JsonView({ Views.MaterialLocalEstoqueView.class, ViewsAdmMateriais.TransferenciaEnderecoEstoqueView.class }) 80 + @JsonView({ Views.MaterialLocalEstoqueView.class, ViewsAdmMateriais.TransferenciaEnderecoEstoqueView.class, ViewsAdmMateriais.RequisicaoConsumoEditView.class })
81 private EnderecoEstoque endereco; 81 private EnderecoEstoque endereco;
82 82
83 /** Atributo enderecoInativo. */ 83 /** Atributo enderecoInativo. */
@@ -88,7 +88,7 @@ public class MaterialLocalEstoque extends PersistentObjectAuditOrganizacao { @@ -88,7 +88,7 @@ public class MaterialLocalEstoque extends PersistentObjectAuditOrganizacao {
88 private BigDecimal capacidade; 88 private BigDecimal capacidade;
89 89
90 /** Atributo quantidade. */ 90 /** Atributo quantidade. */
91 - @JsonView({ Views.MaterialLocalEstoqueView.class, ViewsAdmMateriais.TransferenciaEnderecoEstoqueView.class }) 91 + @JsonView({ Views.MaterialLocalEstoqueView.class, ViewsAdmMateriais.TransferenciaEnderecoEstoqueView.class, ViewsAdmMateriais.RequisicaoConsumoEditView.class })
92 private BigDecimal quantidade = BigDecimal.ZERO; 92 private BigDecimal quantidade = BigDecimal.ZERO;
93 93
94 /** Atributo unidadeMedidaEntrada. */ 94 /** Atributo unidadeMedidaEntrada. */
@@ -255,4 +255,28 @@ public class MaterialLocalEstoque extends PersistentObjectAuditOrganizacao { @@ -255,4 +255,28 @@ public class MaterialLocalEstoque extends PersistentObjectAuditOrganizacao {
255 this.capacidade = capacidade; 255 this.capacidade = capacidade;
256 } 256 }
257 257
  258 + @Override
  259 + public int hashCode() {
  260 + final int prime = 31;
  261 + int result = super.hashCode();
  262 + result = prime * result + ((id == null) ? 0 : id.hashCode());
  263 + return result;
  264 + }
  265 +
  266 + @Override
  267 + public boolean equals(Object obj) {
  268 + if (this == obj)
  269 + return true;
  270 + if (!super.equals(obj))
  271 + return false;
  272 + if (getClass() != obj.getClass())
  273 + return false;
  274 + MaterialLocalEstoque other = (MaterialLocalEstoque) obj;
  275 + if (id == null) {
  276 + if (other.id != null)
  277 + return false;
  278 + } else if (!id.equals(other.id))
  279 + return false;
  280 + return true;
  281 + }
258 } 282 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/RequisicaoConsumo.java
@@ -10,18 +10,25 @@ import javax.persistence.FetchType; @@ -10,18 +10,25 @@ import javax.persistence.FetchType;
10 import javax.persistence.GeneratedValue; 10 import javax.persistence.GeneratedValue;
11 import javax.persistence.GenerationType; 11 import javax.persistence.GenerationType;
12 import javax.persistence.Id; 12 import javax.persistence.Id;
  13 +import javax.persistence.JoinColumn;
13 import javax.persistence.ManyToOne; 14 import javax.persistence.ManyToOne;
14 import javax.persistence.OneToMany; 15 import javax.persistence.OneToMany;
  16 +import javax.persistence.OneToOne;
15 import javax.persistence.Table; 17 import javax.persistence.Table;
16 import javax.persistence.Temporal; 18 import javax.persistence.Temporal;
17 import javax.persistence.TemporalType; 19 import javax.persistence.TemporalType;
18 20
  21 +import org.hibernate.envers.AuditTable;
  22 +import org.hibernate.envers.Audited;
  23 +import org.hibernate.envers.NotAudited;
  24 +
19 import br.com.centralit.api.framework.json.ViewsAdmMateriais; 25 import br.com.centralit.api.framework.json.ViewsAdmMateriais;
20 import br.com.centralit.api.framework.json.ViewsAlmoxarifado; 26 import br.com.centralit.api.framework.json.ViewsAlmoxarifado;
21 import br.com.centralit.framework.json.JsonCalendarSimpleDateDeserializer; 27 import br.com.centralit.framework.json.JsonCalendarSimpleDateDeserializer;
22 import br.com.centralit.framework.json.JsonCalendarSimpleDateSerializer; 28 import br.com.centralit.framework.json.JsonCalendarSimpleDateSerializer;
23 import br.com.centralit.framework.json.Views; 29 import br.com.centralit.framework.json.Views;
24 import br.com.centralit.framework.model.Dominio; 30 import br.com.centralit.framework.model.Dominio;
  31 +import br.com.centralit.framework.model.Usuario;
25 import br.com.centralit.framework.model.arquitetura.PersistentObjectAuditOrganizacao; 32 import br.com.centralit.framework.model.arquitetura.PersistentObjectAuditOrganizacao;
26 33
27 import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 34 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@@ -61,9 +68,11 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; @@ -61,9 +68,11 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
61 * @author rogerio.costa 68 * @author rogerio.costa
62 * 69 *
63 */ 70 */
  71 +@Audited
  72 +@AuditTable(value = "alm_requisicaoconsumo_aud")
64 @Entity 73 @Entity
65 -@Table(name="alm_requisicaoconsumo")  
66 -@JsonIgnoreProperties({"$checked"}) 74 +@Table(name = "alm_requisicaoconsumo")
  75 +@JsonIgnoreProperties({ "$checked" })
67 public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao { 76 public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao {
68 77
69 public static final Long TIPO_STATUS_REQUISICAO_NAO_CONCLUIDA_CODIGO = 1L; 78 public static final Long TIPO_STATUS_REQUISICAO_NAO_CONCLUIDA_CODIGO = 1L;
@@ -82,17 +91,23 @@ public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao { @@ -82,17 +91,23 @@ public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao {
82 /** Atributo id. */ 91 /** Atributo id. */
83 @Id 92 @Id
84 @GeneratedValue(strategy = GenerationType.AUTO) 93 @GeneratedValue(strategy = GenerationType.AUTO)
85 - @JsonView({ Views.GenericView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class }) 94 + @JsonView({ Views.GenericView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class,
  95 + ViewsAlmoxarifado.DevolucaoEditView.class })
86 private Long id; 96 private Long id;
87 97
88 /** Atributo almoxaifado. */ 98 /** Atributo almoxaifado. */
89 @ManyToOne(fetch = FetchType.LAZY, optional = false) 99 @ManyToOne(fetch = FetchType.LAZY, optional = false)
90 - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoListView.class, ViewsAlmoxarifado.DevolucaoEditView.class, Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumo.class }) 100 + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class,
  101 + ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoListView.class,
  102 + ViewsAlmoxarifado.DevolucaoEditView.class, Views.MaterialConsultaInfo.class,
  103 + ViewsAdmMateriais.RequisicaoConsumo.class })
91 private EstruturaOrganizacional almoxarifado; 104 private EstruturaOrganizacional almoxarifado;
92 105
93 /** Atributo centroCusto. */ 106 /** Atributo centroCusto. */
  107 + @NotAudited
94 @ManyToOne(fetch = FetchType.LAZY) 108 @ManyToOne(fetch = FetchType.LAZY)
95 - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumo.class }) 109 + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, Views.MaterialConsultaInfo.class,
  110 + ViewsAdmMateriais.RequisicaoConsumo.class })
96 private CentroCusto centroCusto; 111 private CentroCusto centroCusto;
97 112
98 /** Atributo dataRequisicao. */ 113 /** Atributo dataRequisicao. */
@@ -100,47 +115,68 @@ public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao { @@ -100,47 +115,68 @@ public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao {
100 @Temporal(TemporalType.TIMESTAMP) 115 @Temporal(TemporalType.TIMESTAMP)
101 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class) 116 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class)
102 @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class) 117 @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class)
103 - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class,  
104 - ViewsAlmoxarifado.DevolucaoListView.class, ViewsAdmMateriais.RequisicaoConsumo.class }) 118 + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class,
  119 + ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class,
  120 + ViewsAlmoxarifado.DevolucaoListView.class, ViewsAdmMateriais.RequisicaoConsumo.class })
105 private Calendar dataRequisicao; 121 private Calendar dataRequisicao;
106 122
107 @Column(name = "dataFinalizacaoAtendimento", nullable = true) 123 @Column(name = "dataFinalizacaoAtendimento", nullable = true)
108 @Temporal(TemporalType.TIMESTAMP) 124 @Temporal(TemporalType.TIMESTAMP)
109 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class) 125 @JsonSerialize(using = JsonCalendarSimpleDateSerializer.class)
110 @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class) 126 @JsonDeserialize(using = JsonCalendarSimpleDateDeserializer.class)
111 - @JsonView({ ViewsAlmoxarifado.DevolucaoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoListView.class,  
112 - Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAdmMateriais.RequisicaoConsumo.class }) 127 + @JsonView({ ViewsAlmoxarifado.DevolucaoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class,
  128 + ViewsAlmoxarifado.DevolucaoListView.class, Views.MaterialConsultaInfo.class,
  129 + ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAdmMateriais.RequisicaoConsumo.class })
113 private Calendar dataFinalizacaoAtendimento; 130 private Calendar dataFinalizacaoAtendimento;
114 131
115 /** Atributo materiais. */ 132 /** Atributo materiais. */
116 - @OneToMany(fetch = FetchType.LAZY, mappedBy = "requisicaoConsumo", cascade = CascadeType.ALL, orphanRemoval = true)  
117 - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class,  
118 - Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumo.class }) 133 + @OneToMany(fetch = FetchType.LAZY, mappedBy = "requisicaoConsumo", cascade = CascadeType.ALL)
  134 + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class,
  135 + ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class,
  136 + Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumo.class })
119 private Collection<RequisicaoConsumoItem> requisicaoConsumoItens; 137 private Collection<RequisicaoConsumoItem> requisicaoConsumoItens;
120 138
121 /** Atributo numeroRequisicao. */ 139 /** Atributo numeroRequisicao. */
122 @Column(length = 30) 140 @Column(length = 30)
123 - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class,  
124 - ViewsAlmoxarifado.DevolucaoListView.class, Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumo.class }) 141 + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class,
  142 + ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoEditView.class,
  143 + ViewsAlmoxarifado.DevolucaoListView.class, Views.MaterialConsultaInfo.class,
  144 + ViewsAdmMateriais.RequisicaoConsumo.class })
125 private String numeroRequisicao; 145 private String numeroRequisicao;
126 146
127 /** Atributo observacoes. */ 147 /** Atributo observacoes. */
  148 + @NotAudited
128 @OneToMany(fetch = FetchType.LAZY, mappedBy = "requisicaoConsumo", cascade = CascadeType.ALL, orphanRemoval = true) 149 @OneToMany(fetch = FetchType.LAZY, mappedBy = "requisicaoConsumo", cascade = CascadeType.ALL, orphanRemoval = true)
129 @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAdmMateriais.RequisicaoConsumo.class }) 150 @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAdmMateriais.RequisicaoConsumo.class })
130 private Collection<RequisicaoObservacao> observacoes; 151 private Collection<RequisicaoObservacao> observacoes;
131 152
132 /** Atributo statusRequisicao. */ 153 /** Atributo statusRequisicao. */
133 @ManyToOne(fetch = FetchType.LAZY, optional = false) 154 @ManyToOne(fetch = FetchType.LAZY, optional = false)
134 - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAdmMateriais.AtendimentoRequisicaoConsumoItemView.class, Views.MaterialConsultaInfo.class,  
135 - ViewsAdmMateriais.RequisicaoConsumo.class }) 155 + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class,
  156 + ViewsAdmMateriais.AtendimentoRequisicaoConsumoItemView.class, Views.MaterialConsultaInfo.class,
  157 + ViewsAdmMateriais.RequisicaoConsumo.class })
136 private Dominio tipoStatusRequisicao; 158 private Dominio tipoStatusRequisicao;
137 159
138 /** Atributo unidadeRequisitante. */ 160 /** Atributo unidadeRequisitante. */
139 @ManyToOne(fetch = FetchType.LAZY, optional = false) 161 @ManyToOne(fetch = FetchType.LAZY, optional = false)
140 - @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class, ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoListView.class,  
141 - ViewsAlmoxarifado.DevolucaoEditView.class, Views.MaterialConsultaInfo.class, ViewsAdmMateriais.RequisicaoConsumo.class }) 162 + @JsonView({ ViewsAdmMateriais.RequisicaoConsumoEditView.class,
  163 + ViewsAlmoxarifado.RequisicaoConsumoAutoCompleteView.class, ViewsAlmoxarifado.DevolucaoListView.class,
  164 + ViewsAlmoxarifado.DevolucaoEditView.class, Views.MaterialConsultaInfo.class,
  165 + ViewsAdmMateriais.RequisicaoConsumo.class })
142 private EstruturaOrganizacional unidadeRequisitante; 166 private EstruturaOrganizacional unidadeRequisitante;
143 167
  168 + @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoEditView.class })
  169 + private boolean emAtendimento;
  170 +
  171 + @ManyToOne(fetch = FetchType.LAZY)
  172 + @JoinColumn(name = "atendente_id")
  173 + @JsonView({ ViewsAlmoxarifado.AtendimentoRequisicaoConsumoEditView.class })
  174 + private Usuario atendente;
  175 +
  176 + @OneToOne(mappedBy = "requisicaoConsumo", fetch = FetchType.LAZY)
  177 + @JsonView({ViewsAlmoxarifado.AtendimentoRequisicaoConsumoEditView.class, ViewsAdmMateriais.RequisicaoConsumoEditView.class})
  178 + private AtendimentoRequisicaoConsumo atendimentoRequisicaoConsumo;
  179 +
144 /** 180 /**
145 * Retorna o valor do atributo <code>id</code> 181 * Retorna o valor do atributo <code>id</code>
146 * 182 *
@@ -344,4 +380,28 @@ public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao { @@ -344,4 +380,28 @@ public class RequisicaoConsumo extends PersistentObjectAuditOrganizacao {
344 this.dataFinalizacaoAtendimento = dataFinalizacaoAtendimento; 380 this.dataFinalizacaoAtendimento = dataFinalizacaoAtendimento;
345 } 381 }
346 382
  383 + public boolean isEmAtendimento() {
  384 + return emAtendimento;
  385 + }
  386 +
  387 + public void setEmAtendimento(boolean emAtendimento) {
  388 + this.emAtendimento = emAtendimento;
  389 + }
  390 +
  391 + public Usuario getAtendente() {
  392 + return atendente;
  393 + }
  394 +
  395 + public void setAtendente(Usuario atendente) {
  396 + this.atendente = atendente;
  397 + }
  398 +
  399 + public AtendimentoRequisicaoConsumo getAtendimentoRequisicaoConsumo() {
  400 + return atendimentoRequisicaoConsumo;
  401 + }
  402 +
  403 + public void setAtendimentoRequisicaoConsumo(
  404 + AtendimentoRequisicaoConsumo atendimentoRequisicaoConsumo) {
  405 + this.atendimentoRequisicaoConsumo = atendimentoRequisicaoConsumo;
  406 + }
347 } 407 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/RequisicaoConsumoItem.java
@@ -10,6 +10,9 @@ import javax.persistence.Id; @@ -10,6 +10,9 @@ import javax.persistence.Id;
10 import javax.persistence.ManyToOne; 10 import javax.persistence.ManyToOne;
11 import javax.persistence.Table; 11 import javax.persistence.Table;
12 12
  13 +import org.hibernate.envers.AuditTable;
  14 +import org.hibernate.envers.Audited;
  15 +
13 import br.com.centralit.api.framework.json.ViewsAdmMateriais; 16 import br.com.centralit.api.framework.json.ViewsAdmMateriais;
14 import br.com.centralit.api.framework.json.ViewsAlmoxarifado; 17 import br.com.centralit.api.framework.json.ViewsAlmoxarifado;
15 import br.com.centralit.framework.json.Views; 18 import br.com.centralit.framework.json.Views;
@@ -51,6 +54,8 @@ import com.fasterxml.jackson.annotation.JsonView; @@ -51,6 +54,8 @@ import com.fasterxml.jackson.annotation.JsonView;
51 * @author rogerio.costa 54 * @author rogerio.costa
52 * 55 *
53 */ 56 */
  57 +@Audited
  58 +@AuditTable(value = "alm_rc_item_aud")
54 @JsonIgnoreProperties({ "$quantidadeAtendida", "$quantidadeADevolver", "$TIPO_DECIMAL", "$index" }) 59 @JsonIgnoreProperties({ "$quantidadeAtendida", "$quantidadeADevolver", "$TIPO_DECIMAL", "$index" })
55 @Entity 60 @Entity
56 @Table(name="alm_rc_item") 61 @Table(name="alm_rc_item")
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/AtendimentoRequisicaoConsumoFIFOService.java 0 → 100644
@@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
  1 +package br.com.centralit.api.service;
  2 +
  3 +import br.com.centralit.api.model.AtendimentoRequisicaoConsumoItemFIFO;
  4 +import br.com.centralit.framework.service.arquitetura.GenericService;
  5 +
  6 +public interface AtendimentoRequisicaoConsumoFIFOService extends GenericService<AtendimentoRequisicaoConsumoItemFIFO, Long> {
  7 +}
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/AtendimentoRequisicaoConsumoService.java
@@ -4,6 +4,7 @@ import java.util.List; @@ -4,6 +4,7 @@ import java.util.List;
4 4
5 import br.com.centralit.api.model.AtendimentoRequisicaoConsumo; 5 import br.com.centralit.api.model.AtendimentoRequisicaoConsumo;
6 import br.com.centralit.api.viewHelper.InformacoesAtendimentoVH; 6 import br.com.centralit.api.viewHelper.InformacoesAtendimentoVH;
  7 +import br.com.centralit.api.viewHelper.ValidacaoAtendimentoRequisicaoConsumoVH;
7 import br.com.centralit.framework.service.arquitetura.GenericService; 8 import br.com.centralit.framework.service.arquitetura.GenericService;
8 9
9 /** 10 /**
@@ -65,4 +66,10 @@ public interface AtendimentoRequisicaoConsumoService extends GenericService&lt;Aten @@ -65,4 +66,10 @@ public interface AtendimentoRequisicaoConsumoService extends GenericService&lt;Aten
65 66
66 boolean removerAtendimentoRequisicao(String idsRequisicaoConsumo, Long idOrganizacao); 67 boolean removerAtendimentoRequisicao(String idsRequisicaoConsumo, Long idOrganizacao);
67 68
  69 + Boolean finalizarRequisicoes(List<Long> idsRequisicao, Long idOrganizacao);
  70 +
  71 + Boolean excluirAtendimentos(List<Long> idsRequisicao, Long idOrganizacao);
  72 +
  73 + ValidacaoAtendimentoRequisicaoConsumoVH validarQuantidadesAtendidas(AtendimentoRequisicaoConsumo entity);
  74 +
68 } 75 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/EntradaAlmoxarifadoItemService.java
@@ -139,4 +139,6 @@ public interface EntradaAlmoxarifadoItemService extends GenericService&lt;EntradaAl @@ -139,4 +139,6 @@ public interface EntradaAlmoxarifadoItemService extends GenericService&lt;EntradaAl
139 public List<EntradaAlmoxarifadoItem> findItensPorEntradaId(Long idEntrada); 139 public List<EntradaAlmoxarifadoItem> findItensPorEntradaId(Long idEntrada);
140 140
141 Boolean existeItemVinculadoAMaterialLocalEstoque(Long idMaterialLocalEstoque); 141 Boolean existeItemVinculadoAMaterialLocalEstoque(Long idMaterialLocalEstoque);
  142 +
  143 + public BigDecimal getValorFIFOPorMaterial(MaterialConsumo materialConsumo, BigDecimal quantidadeMovimentada);
142 } 144 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/MaterialEstoqueFIFOItemService.java
1 package br.com.centralit.api.service; 1 package br.com.centralit.api.service;
2 2
  3 +import java.util.List;
  4 +
3 import br.com.centralit.api.model.MaterialEstoqueFIFOItem; 5 import br.com.centralit.api.model.MaterialEstoqueFIFOItem;
4 import br.com.centralit.framework.service.arquitetura.GenericService; 6 import br.com.centralit.framework.service.arquitetura.GenericService;
5 7
6 public interface MaterialEstoqueFIFOItemService extends GenericService<MaterialEstoqueFIFOItem, Long> { 8 public interface MaterialEstoqueFIFOItemService extends GenericService<MaterialEstoqueFIFOItem, Long> {
  9 +
  10 + List<MaterialEstoqueFIFOItem> findFIFOsByMaterial(long idMaterial);
7 11
8 } 12 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/RequisicaoConsumoItemService.java
@@ -45,4 +45,6 @@ public interface RequisicaoConsumoItemService extends GenericService&lt;RequisicaoC @@ -45,4 +45,6 @@ public interface RequisicaoConsumoItemService extends GenericService&lt;RequisicaoC
45 45
46 List<RequisicaoConsumoItem> listarRequisicaoCosumoItemByIdRequisicao(Long requisicaoId); 46 List<RequisicaoConsumoItem> listarRequisicaoCosumoItemByIdRequisicao(Long requisicaoId);
47 47
  48 + List<RequisicaoConsumoItem> findItensRequisicaoPorMaterial(Long idRequisicao, Long idMaterial);
  49 +
48 } 50 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/RequisicaoConsumoService.java
@@ -4,9 +4,12 @@ import java.util.Calendar; @@ -4,9 +4,12 @@ import java.util.Calendar;
4 import java.util.Collection; 4 import java.util.Collection;
5 import java.util.List; 5 import java.util.List;
6 6
  7 +import com.googlecode.genericdao.search.SearchResult;
  8 +
7 import br.com.centralit.api.model.EstruturaOrganizacional; 9 import br.com.centralit.api.model.EstruturaOrganizacional;
8 import br.com.centralit.api.model.MaterialConsumo; 10 import br.com.centralit.api.model.MaterialConsumo;
9 import br.com.centralit.api.model.RequisicaoConsumo; 11 import br.com.centralit.api.model.RequisicaoConsumo;
  12 +import br.com.centralit.api.viewHelper.AtendimentoVH;
10 import br.com.centralit.api.viewHelper.RequisicaoVH; 13 import br.com.centralit.api.viewHelper.RequisicaoVH;
11 import br.com.centralit.framework.model.Dominio; 14 import br.com.centralit.framework.model.Dominio;
12 import br.com.centralit.framework.service.arquitetura.GenericService; 15 import br.com.centralit.framework.service.arquitetura.GenericService;
@@ -127,4 +130,12 @@ public interface RequisicaoConsumoService extends GenericService&lt;RequisicaoConsu @@ -127,4 +130,12 @@ public interface RequisicaoConsumoService extends GenericService&lt;RequisicaoConsu
127 List<Object> getResumoContabilForReport(Long requisicaoId,boolean isFIFO); 130 List<Object> getResumoContabilForReport(Long requisicaoId,boolean isFIFO);
128 List<Object> getMateriaisForReport(Long requisicaoId,boolean isFIFO); 131 List<Object> getMateriaisForReport(Long requisicaoId,boolean isFIFO);
129 String findtipoStatusRequisicaoPorMaterial(Long requisicaoId); 132 String findtipoStatusRequisicaoPorMaterial(Long requisicaoId);
  133 + SearchResult filtrarRequisicoesAtendimento(AtendimentoVH atendimentoVH);
  134 +
  135 + List<RequisicaoConsumo> findRequisicoesParaAtendimento(AtendimentoVH atendimentoVH);
  136 +
  137 + Boolean atualizarSituacaoAtendimento(Long idRequisicao, boolean situacaoAtendimento);
  138 +
  139 + Boolean atualizarSituacaoAtendimentoRequisicoes(RequisicaoVH requisicaoVH);
  140 +
130 } 141 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/AtendimentoRequisicaoConsumoFIFOServiceImpl.java 0 → 100644
@@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
  1 +package br.com.centralit.api.service.impl;
  2 +
  3 +import org.springframework.beans.factory.annotation.Autowired;
  4 +import org.springframework.stereotype.Service;
  5 +
  6 +import br.com.centralit.api.dao.AtendimentoRequisicaoConsumoFIFODao;
  7 +import br.com.centralit.api.model.AtendimentoRequisicaoConsumoItemFIFO;
  8 +import br.com.centralit.api.service.AtendimentoRequisicaoConsumoFIFOService;
  9 +import br.com.centralit.framework.service.arquitetura.GenericServiceImpl;
  10 +
  11 +@Service("atendimentoRequisicaoConsumoFIFOService")
  12 +public class AtendimentoRequisicaoConsumoFIFOServiceImpl extends GenericServiceImpl<AtendimentoRequisicaoConsumoItemFIFO, Long> implements AtendimentoRequisicaoConsumoFIFOService {
  13 +
  14 + private AtendimentoRequisicaoConsumoFIFODao atendimentoRequisicaoConsumoFIFODao;
  15 +
  16 + @Autowired
  17 + public AtendimentoRequisicaoConsumoFIFOServiceImpl(AtendimentoRequisicaoConsumoFIFODao atendimentoRequisicaoConsumoFIFODao) {
  18 + this.dao = atendimentoRequisicaoConsumoFIFODao;
  19 + this.atendimentoRequisicaoConsumoFIFODao = atendimentoRequisicaoConsumoFIFODao;
  20 + }
  21 +
  22 +}
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/AtendimentoRequisicaoConsumoItemServiceImpl.java
@@ -149,7 +149,6 @@ public class AtendimentoRequisicaoConsumoItemServiceImpl extends GenericServiceI @@ -149,7 +149,6 @@ public class AtendimentoRequisicaoConsumoItemServiceImpl extends GenericServiceI
149 public void superRemove(AtendimentoRequisicaoConsumoItem atendimentoRequisicaoConsumoItem) { 149 public void superRemove(AtendimentoRequisicaoConsumoItem atendimentoRequisicaoConsumoItem) {
150 150
151 AtendimentoRequisicaoConsumoItem entity = this.find(atendimentoRequisicaoConsumoItem.getId()); 151 AtendimentoRequisicaoConsumoItem entity = this.find(atendimentoRequisicaoConsumoItem.getId());
152 -  
153 super.remove(entity); 152 super.remove(entity);
154 } 153 }
155 154
@@ -164,8 +163,6 @@ public class AtendimentoRequisicaoConsumoItemServiceImpl extends GenericServiceI @@ -164,8 +163,6 @@ public class AtendimentoRequisicaoConsumoItemServiceImpl extends GenericServiceI
164 idsDominiosTipoStatusRequisicao.add(statusFinalizado.getId()); 163 idsDominiosTipoStatusRequisicao.add(statusFinalizado.getId());
165 Dominio statusParcialmenteAtendida = this.dominioService.findByChaveAndCodigo(DominioAlmoxarifado.TIPO_STATUS_REQUISICAO, DominioAlmoxarifado.TIPO_STATUS_ATENDIDA_PARCIALMENTE); 164 Dominio statusParcialmenteAtendida = this.dominioService.findByChaveAndCodigo(DominioAlmoxarifado.TIPO_STATUS_REQUISICAO, DominioAlmoxarifado.TIPO_STATUS_ATENDIDA_PARCIALMENTE);
166 idsDominiosTipoStatusRequisicao.add(statusParcialmenteAtendida.getId()); 165 idsDominiosTipoStatusRequisicao.add(statusParcialmenteAtendida.getId());
167 - Dominio statusAtendida = this.dominioService.findByChaveAndCodigo(DominioAlmoxarifado.TIPO_STATUS_REQUISICAO, DominioAlmoxarifado.TIPO_STATUS_ATENDIDA);  
168 - idsDominiosTipoStatusRequisicao.add(statusAtendida.getId());  
169 166
170 RequisicaoConsumoItem requisicaoConsumoItem = this.requisicaoConsumoItemService.find(atendimentoRequisicaoConsumoItem.getRequisicaoConsumoItem().getId()); 167 RequisicaoConsumoItem requisicaoConsumoItem = this.requisicaoConsumoItemService.find(atendimentoRequisicaoConsumoItem.getRequisicaoConsumoItem().getId());
171 168
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/AtendimentoRequisicaoConsumoServiceImpl.java
@@ -2,10 +2,13 @@ package br.com.centralit.api.service.impl; @@ -2,10 +2,13 @@ package br.com.centralit.api.service.impl;
2 2
3 import java.math.BigDecimal; 3 import java.math.BigDecimal;
4 import java.util.ArrayList; 4 import java.util.ArrayList;
  5 +import java.util.Collection;
5 import java.util.HashMap; 6 import java.util.HashMap;
6 import java.util.List; 7 import java.util.List;
7 import java.util.Map; 8 import java.util.Map;
  9 +import java.util.Map.Entry;
8 10
  11 +import org.apache.commons.lang3.StringUtils;
9 import org.springframework.beans.factory.annotation.Autowired; 12 import org.springframework.beans.factory.annotation.Autowired;
10 import org.springframework.beans.factory.annotation.Qualifier; 13 import org.springframework.beans.factory.annotation.Qualifier;
11 import org.springframework.stereotype.Service; 14 import org.springframework.stereotype.Service;
@@ -14,19 +17,32 @@ import org.springframework.validation.Validator; @@ -14,19 +17,32 @@ import org.springframework.validation.Validator;
14 import br.com.centralit.api.dao.AtendimentoRequisicaoConsumoDao; 17 import br.com.centralit.api.dao.AtendimentoRequisicaoConsumoDao;
15 import br.com.centralit.api.model.AtendimentoRequisicaoConsumo; 18 import br.com.centralit.api.model.AtendimentoRequisicaoConsumo;
16 import br.com.centralit.api.model.AtendimentoRequisicaoConsumoItem; 19 import br.com.centralit.api.model.AtendimentoRequisicaoConsumoItem;
  20 +import br.com.centralit.api.model.AtendimentoRequisicaoConsumoItemEndereco;
  21 +import br.com.centralit.api.model.AtendimentoRequisicaoConsumoItemFIFO;
17 import br.com.centralit.api.model.DominioAlmoxarifado; 22 import br.com.centralit.api.model.DominioAlmoxarifado;
  23 +import br.com.centralit.api.model.DominioMaterial;
  24 +import br.com.centralit.api.model.MaterialEstoqueFIFOItem;
  25 +import br.com.centralit.api.model.MaterialLocalEstoque;
  26 +import br.com.centralit.api.model.MovimentoEstoque;
  27 +import br.com.centralit.api.model.RequisicaoConsumoItem;
  28 +import br.com.centralit.api.service.AtendimentoRequisicaoConsumoFIFOService;
18 import br.com.centralit.api.service.AtendimentoRequisicaoConsumoItemService; 29 import br.com.centralit.api.service.AtendimentoRequisicaoConsumoItemService;
19 import br.com.centralit.api.service.AtendimentoRequisicaoConsumoService; 30 import br.com.centralit.api.service.AtendimentoRequisicaoConsumoService;
  31 +import br.com.centralit.api.service.ConfiguracaoParametroSistemaService;
20 import br.com.centralit.api.service.ContaContabilMovimentoService; 32 import br.com.centralit.api.service.ContaContabilMovimentoService;
21 import br.com.centralit.api.service.DominioService; 33 import br.com.centralit.api.service.DominioService;
  34 +import br.com.centralit.api.service.InternacionalizacaoService;
22 import br.com.centralit.api.service.MaterialConsumoService; 35 import br.com.centralit.api.service.MaterialConsumoService;
  36 +import br.com.centralit.api.service.MaterialEstoqueFIFOItemService;
  37 +import br.com.centralit.api.service.MaterialLocalEstoqueService;
23 import br.com.centralit.api.service.MovimentoEstoqueService; 38 import br.com.centralit.api.service.MovimentoEstoqueService;
24 -import br.com.centralit.api.service.ConfiguracaoParametroSistemaService;  
25 import br.com.centralit.api.service.RequisicaoConsumoItemService; 39 import br.com.centralit.api.service.RequisicaoConsumoItemService;
26 import br.com.centralit.api.service.RequisicaoConsumoService; 40 import br.com.centralit.api.service.RequisicaoConsumoService;
27 import br.com.centralit.api.viewHelper.InformacoesAtendimentoVH; 41 import br.com.centralit.api.viewHelper.InformacoesAtendimentoVH;
  42 +import br.com.centralit.api.viewHelper.ValidacaoAtendimentoRequisicaoConsumoVH;
28 import br.com.centralit.framework.exception.BusinessException; 43 import br.com.centralit.framework.exception.BusinessException;
29 import br.com.centralit.framework.exception.CodigoErro; 44 import br.com.centralit.framework.exception.CodigoErro;
  45 +import br.com.centralit.framework.model.Dominio;
30 import br.com.centralit.framework.service.arquitetura.GenericServiceImpl; 46 import br.com.centralit.framework.service.arquitetura.GenericServiceImpl;
31 import br.com.centralit.framework.util.UtilColecao; 47 import br.com.centralit.framework.util.UtilColecao;
32 import br.com.centralit.framework.util.UtilDate; 48 import br.com.centralit.framework.util.UtilDate;
@@ -98,7 +114,28 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl&lt; @@ -98,7 +114,28 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;
98 114
99 @Autowired 115 @Autowired
100 private ContaContabilMovimentoService contaContabilMovimentoService; 116 private ContaContabilMovimentoService contaContabilMovimentoService;
  117 +
  118 + @Autowired
  119 + private InternacionalizacaoService internacionalizacaoService;
  120 +
  121 + @Autowired
  122 + private MaterialLocalEstoqueService materialLocalEstoqueService;
  123 +
  124 + @Autowired
  125 + private MaterialEstoqueFIFOItemService materialEstoqueFIFOItemService;
  126 +
  127 + @Autowired
  128 + private AtendimentoRequisicaoConsumoFIFOService atendimentoRequisicaoConsumoFIFOService;
101 129
  130 + private Dominio idioma;
  131 +
  132 + private Dominio getIdioma() {
  133 + if(!UtilObjeto.isReferencia(idioma)){
  134 + idioma = this.dominioService.findByChaveAndCodigo("tipoIdioma", Dominio.TIPO_IDIOMA_PT_BR_CODIGO);
  135 + }
  136 + return idioma;
  137 + }
  138 +
102 /** 139 /**
103 * Responsável pela criação de novas instâncias desta classe. 140 * Responsável pela criação de novas instâncias desta classe.
104 * 141 *
@@ -119,35 +156,99 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl&lt; @@ -119,35 +156,99 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;
119 @Override 156 @Override
120 public AtendimentoRequisicaoConsumo save(AtendimentoRequisicaoConsumo entity) { 157 public AtendimentoRequisicaoConsumo save(AtendimentoRequisicaoConsumo entity) {
121 158
122 -// this.validarEntidade(entity, this.validator);  
123 - 159 + this.validarEntidade(entity, this.validator);
  160 +
  161 + ValidacaoAtendimentoRequisicaoConsumoVH validacao = this.validarQuantidadesAtendidas(entity);
  162 + if(StringUtils.isNotBlank(validacao.getMensagemErro())){
  163 + throw new BusinessException(validacao.getMensagemErro(), CodigoErro.REGRA_NEGOCIO.getValue());
  164 + }
  165 +
124 if (!UtilColecao.isVazio(entity.getAtendimentos())) { 166 if (!UtilColecao.isVazio(entity.getAtendimentos())) {
125 167
126 for (AtendimentoRequisicaoConsumo atendimento : entity.getAtendimentos()) { 168 for (AtendimentoRequisicaoConsumo atendimento : entity.getAtendimentos()) {
127 - 169 +
128 if(atendimento.getId() == null && atendimento.getDataAtendimento() == null){ 170 if(atendimento.getId() == null && atendimento.getDataAtendimento() == null){
129 atendimento.setDataAtendimento(entity.getDataAtendimento()); 171 atendimento.setDataAtendimento(entity.getDataAtendimento());
  172 +
  173 + atendimento.setRequisicaoConsumo(this.requisicaoConsumoService.find(atendimento.getRequisicaoConsumo().getId()));
  174 +
  175 + this.validarDataAtendimento(atendimento);
  176 +
  177 + this.montarEntidade(atendimento);
  178 +
  179 + this.atualizarStatusRquisicao(atendimento);
  180 +
  181 + if(atendimento.getId() == null){
  182 + configurarNumeroAtendimento(atendimento);
  183 + }
  184 +
  185 + super.save(atendimento);
  186 +
  187 + this.movimentoEstoqueService.gerarMovimentoAtendimento(atendimento);
  188 +
  189 + this.requisicaoConsumoService.atualizarSituacaoAtendimento(atendimento.getRequisicaoConsumo().getId(), false);
  190 +
  191 + }else{
  192 + boolean registroExcluido = false;
  193 + if(atendimento.getDataInativo() != null){
  194 + atendimento.setDataInativo(null);
  195 + registroExcluido = true;
  196 + }
  197 + atendimento.setDataAtendimento(entity.getDataAtendimento());
  198 + this.merge(atendimento, registroExcluido);
130 } 199 }
  200 + }
131 201
132 - this.montarEntidade(atendimento);  
133 -  
134 - this.validarDataAtendimento(atendimento); 202 + }
135 203
136 - this.atualizarStatusRquisicao(atendimento); 204 + return new AtendimentoRequisicaoConsumo();
  205 + }
137 206
138 - if(atendimento.getId() == null){  
139 - configurarNumeroAtendimento(atendimento); 207 + @Override
  208 + public ValidacaoAtendimentoRequisicaoConsumoVH validarQuantidadesAtendidas(AtendimentoRequisicaoConsumo entity) {
  209 + final int QUANTIDADE_ATENDIDA = 0;
  210 + final int QUANTIDADE_ATENDIDA_ANTERIOR = 1;
  211 +
  212 + Map<MaterialLocalEstoque, BigDecimal[]> somatorioQuantidadesAtentidasPorMaterial = new HashMap<MaterialLocalEstoque, BigDecimal[]>();
  213 +
  214 + for(AtendimentoRequisicaoConsumo atendimento : entity.getAtendimentos()){
  215 + for(AtendimentoRequisicaoConsumoItem atendimentoItem : atendimento.getAtendimentoRequisicaoConsumoItems()){
  216 + for(AtendimentoRequisicaoConsumoItemEndereco itemEndereco : atendimentoItem.getAtendimentoRequisicaoConsumoItemEnderecos()){
  217 + if(itemEndereco.getQuantidade() != null){
  218 + if(somatorioQuantidadesAtentidasPorMaterial.containsKey(itemEndereco.getMaterialLocalEstoque())){
  219 +
  220 + somatorioQuantidadesAtentidasPorMaterial.put(itemEndereco.getMaterialLocalEstoque(),
  221 + new BigDecimal[]{somatorioQuantidadesAtentidasPorMaterial.get(itemEndereco.getMaterialLocalEstoque())[QUANTIDADE_ATENDIDA].add(itemEndereco.getQuantidade()), itemEndereco.getQuantidadeAnterior()});
  222 +
  223 + }else{
  224 + somatorioQuantidadesAtentidasPorMaterial.put(itemEndereco.getMaterialLocalEstoque(), new BigDecimal[]{itemEndereco.getQuantidade(), itemEndereco.getQuantidadeAnterior()});
  225 + }
  226 + }
140 } 227 }
141 -  
142 - super.save(atendimento);  
143 -  
144 - this.movimentoEstoqueService.gerarMovimentoAtendimento(atendimento);  
145 -  
146 } 228 }
147 -  
148 } 229 }
149 -  
150 - return new AtendimentoRequisicaoConsumo(); 230 +
  231 + List<MaterialLocalEstoque> materiaisRejeitados = new ArrayList<MaterialLocalEstoque>();
  232 +
  233 + for(Entry<MaterialLocalEstoque, BigDecimal[]> somaItem : somatorioQuantidadesAtentidasPorMaterial.entrySet()){
  234 +
  235 + if(somaItem.getValue()[QUANTIDADE_ATENDIDA].compareTo(somaItem.getKey().getQuantidade().add(somaItem.getValue()[QUANTIDADE_ATENDIDA_ANTERIOR])) > 0){
  236 + materiaisRejeitados.add(materialLocalEstoqueService.find(somaItem.getKey().getId()));
  237 + }
  238 + }
  239 +
  240 + String mensagem = "";
  241 + if(!materiaisRejeitados.isEmpty()){
  242 + mensagem = internacionalizacaoService.getTranslate("ALMOXARIFADO.VALIDACAO.SOMA_ITENS_ATENDER_MAIOR_ESTOQUE", getIdioma());
  243 + mensagem += "<br/><br/><ul>";
  244 + for(MaterialLocalEstoque materialLocalEstoque: materiaisRejeitados){
  245 + mensagem += "<li>Material: <b>" + materialLocalEstoque.getMaterialEstoque().getMaterial().getDescricao() + "</b></li>";
  246 + mensagem += "<li>Endereço de estoque: <b>" + materialLocalEstoque.getEndereco().getDescricao() + "</b></li><br/>";
  247 + }
  248 + mensagem += "</ul>";
  249 + }
  250 +
  251 + return new ValidacaoAtendimentoRequisicaoConsumoVH(materiaisRejeitados, mensagem);
151 } 252 }
152 253
153 /** 254 /**
@@ -157,42 +258,66 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl&lt; @@ -157,42 +258,66 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;
157 * @author wilker.machado 258 * @author wilker.machado
158 * 259 *
159 * @param entity 260 * @param entity
  261 + * @param registroExcluido
160 * @return 262 * @return
161 */ 263 */
162 - @Override  
163 - public AtendimentoRequisicaoConsumo merge(AtendimentoRequisicaoConsumo entity) { 264 + public AtendimentoRequisicaoConsumo merge(AtendimentoRequisicaoConsumo entity, boolean registroExcluido) {
164 265
165 - if (this.movimentoEstoqueService.existeMovimentacaoDepois(entity, "atendimentoRequisicaoConsumoItem.atendimentoRequisicaoConsumo.id")) { 266 + if (this.movimentoEstoqueService.existeMovimentacaoDepois(entity, "idClasseReferencia")) {
166 267
167 throw new BusinessException(VALIDACAO_ERRO_EDICAO_EXISTE_MOVIMENTACAO, CodigoErro.REGRA_NEGOCIO.getValue()); 268 throw new BusinessException(VALIDACAO_ERRO_EDICAO_EXISTE_MOVIMENTACAO, CodigoErro.REGRA_NEGOCIO.getValue());
168 } 269 }
  270 +
  271 + if(!registroExcluido){
  272 + removerLancamentosPassados(entity);
  273 + }
169 274
170 - if (!UtilColecao.isVazio(entity.getAtendimentos())) { 275 + entity.setRequisicaoConsumo(this.requisicaoConsumoService.find(entity.getRequisicaoConsumo().getId()));
  276 + this.validarDataAtendimento(entity);
  277 +
  278 + this.montarEntidade(entity);
171 279
172 - for (AtendimentoRequisicaoConsumo atendimento : entity.getAtendimentos()) { 280 + this.atualizarStatusRquisicao(entity);
173 281
174 - this.montarEntidade(atendimento); 282 + super.merge(entity);
175 283
176 - this.validarDataAtendimento(atendimento); 284 + this.movimentoEstoqueService.gerarMovimentoAtendimento(entity);
177 285
178 - this.atualizarStatusRquisicao(atendimento); 286 + this.requisicaoConsumoService.atualizarSituacaoAtendimento(entity.getRequisicaoConsumo().getId(), false);
179 287
180 - AtendimentoRequisicaoConsumo atendimentoRequisicaoConsumo = super.merge(atendimento);  
181 288
182 - //Apaga movimentos de estoque  
183 - this.movimentoEstoqueService.removerMovimentosAtendimento(atendimentoRequisicaoConsumo); 289 + return entity;
184 290
185 - //Apaga movimentos contabeis  
186 - for (AtendimentoRequisicaoConsumoItem atendimentoItem : atendimento.getAtendimentoRequisicaoConsumoItems()){  
187 - this.contaContabilMovimentoService.removerMovimentosAtendimento(atendimentoItem.getId());  
188 - }  
189 - this.movimentoEstoqueService.gerarMovimentoAtendimento(atendimentoRequisicaoConsumo);  
190 - } 291 + }
191 292
  293 + private void removerLancamentosPassados(AtendimentoRequisicaoConsumo atendimento) {
  294 +
  295 + Collection<AtendimentoRequisicaoConsumoItem> listaItensTemp = this.find(atendimento.getId()).getAtendimentoRequisicaoConsumoItems();
  296 + for (AtendimentoRequisicaoConsumoItem atendimentoRequisicaoConsumoItem : listaItensTemp) {
  297 + AtendimentoRequisicaoConsumoItem item = this.atendimentoRequisicaoConsumoItemService.find(atendimentoRequisicaoConsumoItem.getId());
  298 +
  299 + for (AtendimentoRequisicaoConsumoItemFIFO atendimentoRequisicaoConsumoItemFIFO : item.getAtendimentoRequisicaoConsumoItemFIFOs()) {
  300 + MaterialEstoqueFIFOItem materialEstoqueFIFOItem = this.materialEstoqueFIFOItemService.find(atendimentoRequisicaoConsumoItemFIFO.getMaterialEstoqueFIFOItem().getId());
  301 + materialEstoqueFIFOItem.setQuantidadeRestante(materialEstoqueFIFOItem.getQuantidadeRestante().add(atendimentoRequisicaoConsumoItemFIFO.getQuantidadeUtilizada()));
  302 + materialEstoqueFIFOItem.setValorSobra(materialEstoqueFIFOItem.getQuantidadeRestante().multiply(materialEstoqueFIFOItem.getValorUnitario()));
  303 + this.materialEstoqueFIFOItemService.merge(materialEstoqueFIFOItem);
  304 + }
  305 +
  306 + for (AtendimentoRequisicaoConsumoItemEndereco atendimentoRequisicaoConsumoItemEndereco : atendimentoRequisicaoConsumoItem.getAtendimentoRequisicaoConsumoItemEnderecos()) {
  307 + MaterialLocalEstoque materialLocalEstoque = this.materialLocalEstoqueService.find(atendimentoRequisicaoConsumoItemEndereco.getMaterialLocalEstoque().getId());
  308 + materialLocalEstoque.setQuantidade(materialLocalEstoque.getQuantidade().add(atendimentoRequisicaoConsumoItemEndereco.getQuantidade()));
  309 + this.materialLocalEstoqueService.merge(materialLocalEstoque);
  310 +
  311 + }
  312 +
  313 + Collection<MovimentoEstoque> movimentosEstoque = this.movimentoEstoqueService.findAllByClasseReferencia(this.dominioService.findByChaveAndCodigo(DominioMaterial.CLASSE_REFERENCIA, DominioMaterial.REFERENCIA_ATENDIMENTO_ALMOXARIFADO_ITEM), atendimentoRequisicaoConsumoItem.getId());
  314 + for (MovimentoEstoque movimentoEstoque : movimentosEstoque) {
  315 + this.movimentoEstoqueService.remove(movimentoEstoque);
  316 + }
  317 +
  318 + atendimentoRequisicaoConsumoFIFOService.removeList(new ArrayList(item.getAtendimentoRequisicaoConsumoItemFIFOs()));
  319 +
192 } 320 }
193 -  
194 - return new AtendimentoRequisicaoConsumo();  
195 -  
196 } 321 }
197 322
198 /** 323 /**
@@ -218,34 +343,8 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl&lt; @@ -218,34 +343,8 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;
218 * @param entity 343 * @param entity
219 */ 344 */
220 private void atualizarStatusRquisicao(AtendimentoRequisicaoConsumo entity) { 345 private void atualizarStatusRquisicao(AtendimentoRequisicaoConsumo entity) {
221 -  
222 - Boolean atendidoCompletamente = Boolean.TRUE;  
223 -  
224 - for (AtendimentoRequisicaoConsumoItem atendimentoItem : entity.getAtendimentoRequisicaoConsumoItems()) {  
225 -  
226 - if(atendimentoItem.getQuantidade() == null){  
227 - continue;  
228 - }  
229 -  
230 - if (atendimentoItem.getQuantidade().add(atendimentoItem.getRequisicaoConsumoItem().getQuantidadeAtendida()).doubleValue() != atendimentoItem.getRequisicaoConsumoItem().getQuantidade().doubleValue()) {  
231 -  
232 - atendidoCompletamente = Boolean.FALSE;  
233 - }  
234 -  
235 - atendimentoItem.getRequisicaoConsumoItem().setQuantidadeAtendida(atendimentoItem.getRequisicaoConsumoItem().getQuantidadeAtendida().add(atendimentoItem.getQuantidade()));  
236 -  
237 - }  
238 -  
239 - if (atendidoCompletamente) {  
240 -  
241 - entity.getRequisicaoConsumo().setTipoStatusRequisicao(this.dominioService.findByChaveAndCodigo(DominioAlmoxarifado.TIPO_STATUS_REQUISICAO, DominioAlmoxarifado.TIPO_STATUS_ATENDIDA));  
242 -  
243 - } else {  
244 -  
245 - entity.getRequisicaoConsumo().setTipoStatusRequisicao(this.dominioService.findByChaveAndCodigo(DominioAlmoxarifado.TIPO_STATUS_REQUISICAO, DominioAlmoxarifado.TIPO_STATUS_ATENDIDA_PARCIALMENTE));  
246 -  
247 - }  
248 - 346 +
  347 + entity.getRequisicaoConsumo().setTipoStatusRequisicao(this.dominioService.findByChaveAndCodigo(DominioAlmoxarifado.TIPO_STATUS_REQUISICAO, DominioAlmoxarifado.TIPO_STATUS_ATENDIDA_PARCIALMENTE));
249 } 348 }
250 349
251 /** 350 /**
@@ -257,58 +356,62 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl&lt; @@ -257,58 +356,62 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;
257 */ 356 */
258 private void montarEntidade(AtendimentoRequisicaoConsumo entity) { 357 private void montarEntidade(AtendimentoRequisicaoConsumo entity) {
259 358
260 - entity.setRequisicaoConsumo(this.requisicaoConsumoService.find(entity.getRequisicaoConsumo().getId()));  
261 -  
262 - List<AtendimentoRequisicaoConsumoItem> listaSemAtendimentosComQuantidadeZero = new ArrayList<AtendimentoRequisicaoConsumoItem>();  
263 -  
264 - for (AtendimentoRequisicaoConsumoItem atendimentoItem : entity.getAtendimentoRequisicaoConsumoItems()) {  
265 - if(atendimentoItem.getQuantidade() == null){  
266 - continue;  
267 - }else{  
268 - listaSemAtendimentosComQuantidadeZero.add(atendimentoItem); 359 + if(entity.getRequisicaoConsumo().getRequisicaoConsumoItens().size() != entity.getAtendimentoRequisicaoConsumoItems().size()){
  360 + for (RequisicaoConsumoItem reqItem : entity.getRequisicaoConsumo().getRequisicaoConsumoItens()) {
  361 + if(reqItem.getDataInativo() != null){
  362 + continue;
  363 + }
  364 + boolean addItem = false;
  365 + for (AtendimentoRequisicaoConsumoItem atendReqItem : entity.getAtendimentoRequisicaoConsumoItems()) {
  366 + if(atendReqItem.getMaterial().getId().doubleValue() != reqItem.getMaterialConsumo().getId().doubleValue()){
  367 + addItem = true;
  368 + }else{
  369 + addItem = false;
  370 + break;
  371 + }
  372 + }
  373 + if(addItem){
  374 + AtendimentoRequisicaoConsumoItem atendimentoRequisicaoConsumoItem = new AtendimentoRequisicaoConsumoItem();
  375 + atendimentoRequisicaoConsumoItem.setMaterial(reqItem.getMaterialConsumo());
  376 + atendimentoRequisicaoConsumoItem.setRequisicaoConsumoItem(reqItem);
  377 +
  378 + AtendimentoRequisicaoConsumoItemEndereco itemEndereco = new AtendimentoRequisicaoConsumoItemEndereco();
  379 + itemEndereco.setMaterialLocalEstoque(this.materialLocalEstoqueService.buscarLocaisEstoquePorIdMaterial(reqItem.getMaterialConsumo().getId()).get(0));
  380 + List<AtendimentoRequisicaoConsumoItemEndereco> endItem = new ArrayList<>();
  381 + endItem.add(itemEndereco);
  382 + atendimentoRequisicaoConsumoItem.setAtendimentoRequisicaoConsumoItemEnderecos(endItem);
  383 + entity.getAtendimentoRequisicaoConsumoItems().add(atendimentoRequisicaoConsumoItem);
  384 + }
269 } 385 }
270 } 386 }
271 -  
272 - entity.setAtendimentoRequisicaoConsumoItems(new ArrayList<AtendimentoRequisicaoConsumoItem>());  
273 -  
274 - for (AtendimentoRequisicaoConsumoItem atendimentoItem : listaSemAtendimentosComQuantidadeZero) { 387 +
  388 + boolean todosItensSemQuantidade = true;
  389 + for (AtendimentoRequisicaoConsumoItem atendimentoItem : entity.getAtendimentoRequisicaoConsumoItems()) {
  390 +
  391 + atendimentoItem.setDataInativo(null);
  392 + RequisicaoConsumoItem requisicaoConsumoItem = this.requisicaoConsumoItemService.find(atendimentoItem.getRequisicaoConsumoItem().getId());
  393 + requisicaoConsumoItem.setQuantidadeAtendida(atendimentoItem.getQuantidade());
  394 +
275 atendimentoItem.setAtendimentoRequisicaoConsumo(entity); 395 atendimentoItem.setAtendimentoRequisicaoConsumo(entity);
276 atendimentoItem.setOrganizacao(getUsuario().getOrganizacao()); 396 atendimentoItem.setOrganizacao(getUsuario().getOrganizacao());
277 - atendimentoItem.setRequisicaoConsumoItem(this.requisicaoConsumoItemService.find(atendimentoItem.getRequisicaoConsumoItem().getId()));  
278 -  
279 - atendimentoItem.setMaterial(this.materialConsumoService.find(atendimentoItem.getMaterial().getId()));  
280 - BigDecimal qtdMaterialEmEstoque = this.materialConsumoService.getQuantidadeAtualMaterial(atendimentoItem.getMaterial().getId(), getUsuario().getOrganizacao().getId());  
281 -  
282 - if (!atendimentoItem.isNew()) {  
283 -  
284 - AtendimentoRequisicaoConsumoItem atendimentoRequisicaoConsumoItemOld = this.atendimentoRequisicaoConsumoItemService.find(atendimentoItem.getId());  
285 -  
286 - atendimentoItem.getRequisicaoConsumoItem().setQuantidadeAtendida(atendimentoItem.getRequisicaoConsumoItem().getQuantidadeAtendida().subtract(atendimentoRequisicaoConsumoItemOld.getQuantidade()));  
287 -  
288 - qtdMaterialEmEstoque = qtdMaterialEmEstoque.add(atendimentoRequisicaoConsumoItemOld.getQuantidade());  
289 -  
290 - }  
291 - if (!UtilObjeto.isReferencia(qtdMaterialEmEstoque) || qtdMaterialEmEstoque.compareTo(atendimentoItem.getQuantidade()) < 0) {  
292 -  
293 - throw new BusinessException(VALIDACAO_QUANTIDADE_A_ATENDER_SUPERIOR_A_QTD_ESTOQUE, CodigoErro.REGRA_NEGOCIO.getValue(), atendimentoItem.getMaterial().getDescricao());  
294 -  
295 - }  
296 -  
297 - if (atendimentoItem.getRequisicaoConsumoItem().getQuantidade().compareTo(atendimentoItem.getQuantidade().add(atendimentoItem.getRequisicaoConsumoItem().getQuantidadeAtendida())) < 0) {  
298 -  
299 - throw new BusinessException(VALIDACAO_QUANTIDADE_ATENDIDA_E_QUANTIDADE_SUPERIOR, CodigoErro.REGRA_NEGOCIO.getValue());  
300 - 397 + atendimentoItem.setRequisicaoConsumoItem(requisicaoConsumoItem);
  398 +
  399 + for (AtendimentoRequisicaoConsumoItemEndereco atendimentoRequisicaoConsumoItemEndereco : atendimentoItem.getAtendimentoRequisicaoConsumoItemEnderecos()) {
  400 +
  401 + atendimentoRequisicaoConsumoItemEndereco.setAtendimentoRequisicaoConsumoItem(atendimentoItem);
  402 + if(atendimentoRequisicaoConsumoItemEndereco.getQuantidade() == null || atendimentoRequisicaoConsumoItemEndereco.getQuantidade().compareTo(new BigDecimal("0")) == 0){
  403 + atendimentoRequisicaoConsumoItemEndereco.setQuantidade(new BigDecimal(0));
  404 + }else{
  405 + todosItensSemQuantidade = false;
  406 + }
  407 +
301 } 408 }
302 -  
303 -// if (!UtilObjeto.isReferencia(atendimentoItem.getQuantidade()) || atendimentoItem.getQuantidade().doubleValue() <= 0) {  
304 -//  
305 -// throw new BusinessException(VALIDACAO_QUANTIDADE_ZERADA_NEGATIVA, CodigoErro.REGRA_NEGOCIO.getValue(), atendimentoItem.getMaterial().getDescricao());  
306 -// }  
307 -  
308 - entity.getAtendimentoRequisicaoConsumoItems().add(atendimentoItem);  
309 - 409 +
  410 + this.requisicaoConsumoItemService.merge(requisicaoConsumoItem);
  411 + }
  412 + if(todosItensSemQuantidade){
  413 + throw new BusinessException("ALMOXARIFADO.VALIDACAO.TODAS_QUANTIDADE_ATENDIDA_EM_BRANCO", CodigoErro.REGRA_NEGOCIO.getValue());
310 } 414 }
311 -  
312 } 415 }
313 416
314 /** 417 /**
@@ -316,42 +419,24 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl&lt; @@ -316,42 +419,24 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;
316 */ 419 */
317 @Override 420 @Override
318 public boolean remove(AtendimentoRequisicaoConsumo entity) { 421 public boolean remove(AtendimentoRequisicaoConsumo entity) {
  422 +
  423 + entity.setRequisicaoConsumo(this.requisicaoConsumoService.find(entity.getRequisicaoConsumo().getId()));
319 424
320 this.validarDataAtendimento(entity); 425 this.validarDataAtendimento(entity);
321 -  
322 - if (this.movimentoEstoqueService.existeMovimentacaoDepois(entity, "atendimentoRequisicaoConsumoItem.atendimentoRequisicaoConsumo.id")) {  
323 -  
324 - throw new BusinessException(VALIDACAO_ERRO_EXCLUSAO_EXISTE_MOVIMENTACAO, CodigoErro.REGRA_NEGOCIO.getValue());  
325 - }  
326 -  
327 - Boolean prontaParaAtendimento = Boolean.TRUE; 426 +
  427 + removerLancamentosPassados(entity);
328 428
329 for (AtendimentoRequisicaoConsumoItem atendimentoRequisicaoConsumoItem : entity.getAtendimentoRequisicaoConsumoItems()) { 429 for (AtendimentoRequisicaoConsumoItem atendimentoRequisicaoConsumoItem : entity.getAtendimentoRequisicaoConsumoItems()) {
330 430
331 - this.atendimentoRequisicaoConsumoItemService.superRemove(atendimentoRequisicaoConsumoItem);  
332 -  
333 atendimentoRequisicaoConsumoItem.getRequisicaoConsumoItem().setQuantidadeAtendida(atendimentoRequisicaoConsumoItem.getRequisicaoConsumoItem().getQuantidadeAtendida().subtract(atendimentoRequisicaoConsumoItem.getQuantidade())); 431 atendimentoRequisicaoConsumoItem.getRequisicaoConsumoItem().setQuantidadeAtendida(atendimentoRequisicaoConsumoItem.getRequisicaoConsumoItem().getQuantidadeAtendida().subtract(atendimentoRequisicaoConsumoItem.getQuantidade()));
  432 + this.atendimentoRequisicaoConsumoItemService.superRemove(atendimentoRequisicaoConsumoItem);
334 433
335 - if (atendimentoRequisicaoConsumoItem.getRequisicaoConsumoItem().getQuantidadeAtendida().compareTo(BigDecimal.valueOf(0)) == 0) {  
336 -  
337 - prontaParaAtendimento = Boolean.FALSE;  
338 - }  
339 434
340 - //Remove movimentos contacontabil  
341 - this.contaContabilMovimentoService.removerMovimentosAtendimento(atendimentoRequisicaoConsumoItem.getId());  
342 } 435 }
343 436
344 - if (prontaParaAtendimento) { 437 + entity.getRequisicaoConsumo().setTipoStatusRequisicao(this.dominioService.findByChaveAndCodigo(DominioAlmoxarifado.TIPO_STATUS_REQUISICAO, DominioAlmoxarifado.TIPO_STATUS_PRONTA_PARA_ATENDIMENTO));
345 438
346 - entity.getRequisicaoConsumo().setTipoStatusRequisicao(this.dominioService.findByChaveAndCodigo(DominioAlmoxarifado.TIPO_STATUS_REQUISICAO, DominioAlmoxarifado.TIPO_STATUS_PRONTA_PARA_ATENDIMENTO));  
347 -  
348 - } else {  
349 -  
350 - entity.getRequisicaoConsumo().setTipoStatusRequisicao(this.dominioService.findByChaveAndCodigo(DominioAlmoxarifado.TIPO_STATUS_REQUISICAO, DominioAlmoxarifado.TIPO_STATUS_ATENDIDA_PARCIALMENTE));  
351 - }  
352 -  
353 - //Remove movimentos estoque  
354 - this.movimentoEstoqueService.removerMovimentosAtendimento(entity); 439 + this.requisicaoConsumoService.atualizarSituacaoAtendimento(entity.getRequisicaoConsumo().getId(), false);
355 440
356 return super.remove(entity); 441 return super.remove(entity);
357 } 442 }
@@ -421,20 +506,7 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl&lt; @@ -421,20 +506,7 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;
421 */ 506 */
422 private void configurarNumeroAtendimento(AtendimentoRequisicaoConsumo entity) { 507 private void configurarNumeroAtendimento(AtendimentoRequisicaoConsumo entity) {
423 508
424 - if(entity.getOrganizacao() == null && entity.getRequisicaoConsumo() != null && entity.getRequisicaoConsumo().getOrganizacao() != null){  
425 - entity.setOrganizacao(entity.getRequisicaoConsumo().getOrganizacao());  
426 - }  
427 -  
428 - AtendimentoRequisicaoConsumo ultimoRegistro =  
429 - (AtendimentoRequisicaoConsumo) atendimentoRequisicaoConsumoDao.buscarUltimoRegistroComOrdenadoParametrizada("numeroAtendimento", entity.getOrganizacao().getId());  
430 -  
431 - Long sequencial = null;  
432 - if (UtilObjeto.isReferencia(ultimoRegistro)) {  
433 - sequencial = ultimoRegistro.getNumeroAtendimento() == null ? null : Long.parseLong(ultimoRegistro.getNumeroAtendimento());  
434 - }  
435 - String codigo = configuracaoParametroSistemaService.gerarNumeroIdentificacao(sequencial, entity.getOrganizacao());  
436 -  
437 - entity.setNumeroAtendimento(codigo); 509 + entity.setNumeroAtendimento(entity.getRequisicaoConsumo().getNumeroRequisicao());
438 } 510 }
439 511
440 @Override 512 @Override
@@ -453,7 +525,34 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl&lt; @@ -453,7 +525,34 @@ public class AtendimentoRequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;
453 arrayLong[i] = Long.parseLong(array[i]); 525 arrayLong[i] = Long.parseLong(array[i]);
454 } 526 }
455 } 527 }
456 - for (Long idRequisicao : arrayLong) { 528 + if(arrayLong != null){
  529 + for (Long idRequisicao : arrayLong) {
  530 + List<AtendimentoRequisicaoConsumo> listaAtendimentoPorRequisicaoConsumo = this.listaAtendimentoPorRequisicaoConsumo(idRequisicao, idOrganizacao);
  531 + for (AtendimentoRequisicaoConsumo atendimentoRequisicaoConsumo : listaAtendimentoPorRequisicaoConsumo) {
  532 + this.remove(atendimentoRequisicaoConsumo);
  533 + }
  534 + }
  535 + }
  536 + return true;
  537 + }
  538 +
  539 + @Override
  540 + public Boolean finalizarRequisicoes(List<Long> idsRequisicao, Long idOrganizacao) {
  541 + for (Long idRequisicao : idsRequisicao) {
  542 + List<AtendimentoRequisicaoConsumo> listaAtendimentoPorRequisicaoConsumo = this.listaAtendimentoPorRequisicaoConsumo(idRequisicao, idOrganizacao);
  543 + for (AtendimentoRequisicaoConsumo atendimentoRequisicaoConsumo : listaAtendimentoPorRequisicaoConsumo) {
  544 + atendimentoRequisicaoConsumo.getRequisicaoConsumo().setTipoStatusRequisicao(this.dominioService.findByChaveAndCodigo(DominioAlmoxarifado.TIPO_STATUS_REQUISICAO, DominioAlmoxarifado.TIPO_STATUS_FINALIZADA));
  545 + atendimentoRequisicaoConsumo.getRequisicaoConsumo().setDataFinalizacaoAtendimento(UtilDate.getDataAtualCalendar());
  546 + super.merge(atendimentoRequisicaoConsumo);
  547 + this.requisicaoConsumoService.atualizarSituacaoAtendimento(atendimentoRequisicaoConsumo.getRequisicaoConsumo().getId(), false);
  548 + }
  549 + }
  550 + return true;
  551 + }
  552 +
  553 + @Override
  554 + public Boolean excluirAtendimentos(List<Long> idsRequisicao, Long idOrganizacao) {
  555 + for (Long idRequisicao : idsRequisicao) {
457 List<AtendimentoRequisicaoConsumo> listaAtendimentoPorRequisicaoConsumo = this.listaAtendimentoPorRequisicaoConsumo(idRequisicao, idOrganizacao); 556 List<AtendimentoRequisicaoConsumo> listaAtendimentoPorRequisicaoConsumo = this.listaAtendimentoPorRequisicaoConsumo(idRequisicao, idOrganizacao);
458 for (AtendimentoRequisicaoConsumo atendimentoRequisicaoConsumo : listaAtendimentoPorRequisicaoConsumo) { 557 for (AtendimentoRequisicaoConsumo atendimentoRequisicaoConsumo : listaAtendimentoPorRequisicaoConsumo) {
459 this.remove(atendimentoRequisicaoConsumo); 558 this.remove(atendimentoRequisicaoConsumo);
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/ConfiguracaoNotificacaoRessuprimentoServiceImpl.java
@@ -321,13 +321,17 @@ public class ConfiguracaoNotificacaoRessuprimentoServiceImpl extends GenericServ @@ -321,13 +321,17 @@ public class ConfiguracaoNotificacaoRessuprimentoServiceImpl extends GenericServ
321 Date previousExecution = cron.getTimeAfter(date); 321 Date previousExecution = cron.getTimeAfter(date);
322 long timeMili = previousExecution.getTime() - date.getTime(); 322 long timeMili = previousExecution.getTime() - date.getTime();
323 if(timeMili <= 0 || timeMili > (horasDia * minutoHora * segundoMinuto * milisegundos)){ 323 if(timeMili <= 0 || timeMili > (horasDia * minutoHora * segundoMinuto * milisegundos)){
324 - timeMili = 4 * minutoHora * segundoMinuto * milisegundos; 324 + timeMili = getMilisegundosCron(minutoHora, segundoMinuto, milisegundos);
325 } 325 }
326 entity.setMilissegundoCron(timeMili + (5 * 1000)); 326 entity.setMilissegundoCron(timeMili + (5 * 1000));
327 } catch (ParseException e) { 327 } catch (ParseException e) {
328 - entity.setMilissegundoCron(4l * minutoHora * segundoMinuto * milisegundos); 328 + entity.setMilissegundoCron(getMilisegundosCron(minutoHora, segundoMinuto, milisegundos));
329 } 329 }
330 } 330 }
  331 +
  332 + private long getMilisegundosCron(int minutoHora, int segundoMinuto, int milisegundos){
  333 + return new Long((4 * minutoHora * segundoMinuto * milisegundos));
  334 + }
331 335
332 /** 336 /**
333 * <p> 337 * <p>
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/EntradaAlmoxarifadoItemServiceImpl.java
@@ -15,6 +15,7 @@ import br.com.centralit.api.model.ContaContabilMovimento; @@ -15,6 +15,7 @@ import br.com.centralit.api.model.ContaContabilMovimento;
15 import br.com.centralit.api.model.EntradaAlmoxarifadoItem; 15 import br.com.centralit.api.model.EntradaAlmoxarifadoItem;
16 import br.com.centralit.api.model.EstruturaOrganizacional; 16 import br.com.centralit.api.model.EstruturaOrganizacional;
17 import br.com.centralit.api.model.MaterialConsumo; 17 import br.com.centralit.api.model.MaterialConsumo;
  18 +import br.com.centralit.api.model.MaterialEstoqueFIFOItem;
18 import br.com.centralit.api.model.MaterialEstoque; 19 import br.com.centralit.api.model.MaterialEstoque;
19 import br.com.centralit.api.model.MovimentoEstoque; 20 import br.com.centralit.api.model.MovimentoEstoque;
20 import br.com.centralit.api.service.ConfiguracaoParametroSistemaService; 21 import br.com.centralit.api.service.ConfiguracaoParametroSistemaService;
@@ -22,6 +23,7 @@ import br.com.centralit.api.service.ContaContabilMovimentoAlmoxarifadoService; @@ -22,6 +23,7 @@ import br.com.centralit.api.service.ContaContabilMovimentoAlmoxarifadoService;
22 import br.com.centralit.api.service.EntradaAlmoxarifadoItemService; 23 import br.com.centralit.api.service.EntradaAlmoxarifadoItemService;
23 import br.com.centralit.api.service.EstruturaOrganizacionalService; 24 import br.com.centralit.api.service.EstruturaOrganizacionalService;
24 import br.com.centralit.api.service.MaterialConsumoService; 25 import br.com.centralit.api.service.MaterialConsumoService;
  26 +import br.com.centralit.api.service.MaterialEstoqueFIFOItemService;
25 import br.com.centralit.api.service.MaterialEstoqueService; 27 import br.com.centralit.api.service.MaterialEstoqueService;
26 import br.com.centralit.api.service.MovimentoEstoqueService; 28 import br.com.centralit.api.service.MovimentoEstoqueService;
27 import br.com.centralit.framework.exception.BusinessException; 29 import br.com.centralit.framework.exception.BusinessException;
@@ -78,6 +80,8 @@ public class EntradaAlmoxarifadoItemServiceImpl extends GenericServiceImpl&lt;Entra @@ -78,6 +80,8 @@ public class EntradaAlmoxarifadoItemServiceImpl extends GenericServiceImpl&lt;Entra
78 80
79 @Autowired 81 @Autowired
80 private ContaContabilMovimentoAlmoxarifadoService contaContabilMovimentoAlmoxarifadoService; 82 private ContaContabilMovimentoAlmoxarifadoService contaContabilMovimentoAlmoxarifadoService;
  83 + @Autowired
  84 + private MaterialEstoqueFIFOItemService materialEstoqueFIFOItemService;
81 85
82 @Autowired 86 @Autowired
83 private MaterialEstoqueService materialEstoqueService; 87 private MaterialEstoqueService materialEstoqueService;
@@ -204,6 +208,37 @@ public class EntradaAlmoxarifadoItemServiceImpl extends GenericServiceImpl&lt;Entra @@ -204,6 +208,37 @@ public class EntradaAlmoxarifadoItemServiceImpl extends GenericServiceImpl&lt;Entra
204 public Collection<EntradaAlmoxarifadoItem> obterEntradaItemComSaldoPorMaterial(Long idMaterial) { 208 public Collection<EntradaAlmoxarifadoItem> obterEntradaItemComSaldoPorMaterial(Long idMaterial) {
205 return this.entradaAlmoxarifadoItemDao.obterEntradaItemComSaldoPorMaterial(idMaterial); 209 return this.entradaAlmoxarifadoItemDao.obterEntradaItemComSaldoPorMaterial(idMaterial);
206 } 210 }
  211 +
  212 + public BigDecimal getValorFIFOPorMaterial(MaterialConsumo materialConsumo, BigDecimal quantidadeMovimentada) {
  213 + BigDecimal retorno = BigDecimal.ZERO;
  214 +
  215 + List<MaterialEstoqueFIFOItem> fifOsByMaterial = this.materialEstoqueFIFOItemService.findFIFOsByMaterial(materialConsumo.getId());
  216 +
  217 + for (MaterialEstoqueFIFOItem materialEstoqueFIFOItem : fifOsByMaterial) {
  218 +
  219 + if (materialEstoqueFIFOItem.getQuantidadeRestante().compareTo(quantidadeMovimentada) > 0) {
  220 + retorno = retorno.add(quantidadeMovimentada.multiply(materialEstoqueFIFOItem.getValorUnitario()));
  221 + materialEstoqueFIFOItem.setQuantidadeRestante(materialEstoqueFIFOItem.getQuantidadeRestante().subtract(quantidadeMovimentada));
  222 + materialEstoqueFIFOItem.setValorSobra(materialEstoqueFIFOItem.getQuantidadeRestante().multiply(materialEstoqueFIFOItem.getValorUnitario()));
  223 + this.materialEstoqueFIFOItemService.merge(materialEstoqueFIFOItem);
  224 + break;
  225 +
  226 + } else if (materialEstoqueFIFOItem.getQuantidadeRestante().compareTo(quantidadeMovimentada) == 0) {
  227 + retorno = retorno.add(materialEstoqueFIFOItem.getValorSobra()).add(materialEstoqueFIFOItem.getValorSobra());
  228 + materialEstoqueFIFOItem.setQuantidadeRestante(materialEstoqueFIFOItem.getQuantidadeRestante().subtract(quantidadeMovimentada));
  229 + materialEstoqueFIFOItem.setValorSobra(materialEstoqueFIFOItem.getQuantidadeRestante().multiply(materialEstoqueFIFOItem.getValorUnitario()));
  230 + this.materialEstoqueFIFOItemService.merge(materialEstoqueFIFOItem);
  231 + break;
  232 +
  233 + } else {
  234 + retorno = retorno.add((materialEstoqueFIFOItem.getQuantidadeRestante().multiply(materialEstoqueFIFOItem.getValorUnitario()))).add(materialEstoqueFIFOItem.getValorSobra());
  235 + quantidadeMovimentada = quantidadeMovimentada.subtract(materialEstoqueFIFOItem.getQuantidadeRestante());
  236 + materialEstoqueFIFOItem.setQuantidadeRestante(BigDecimal.ZERO);
  237 + this.materialEstoqueFIFOItemService.merge(materialEstoqueFIFOItem);
  238 + }
  239 + }
  240 + return retorno;
  241 + }
207 242
208 /** 243 /**
209 * {@inheritDoc} 244 * {@inheritDoc}
@@ -213,24 +248,29 @@ public class EntradaAlmoxarifadoItemServiceImpl extends GenericServiceImpl&lt;Entra @@ -213,24 +248,29 @@ public class EntradaAlmoxarifadoItemServiceImpl extends GenericServiceImpl&lt;Entra
213 public BigDecimal realizaMovimentoSaida(MaterialConsumo materialConsumo, BigDecimal quantidadeMovimentada) { 248 public BigDecimal realizaMovimentoSaida(MaterialConsumo materialConsumo, BigDecimal quantidadeMovimentada) {
214 BigDecimal retorno = BigDecimal.ZERO; 249 BigDecimal retorno = BigDecimal.ZERO;
215 250
216 - /*Collection<EntradaAlmoxarifadoItem> entradaAlmoxarifadoItems = this.obterEntradaItemComSaldoPorMaterial(materialConsumo.getId()); 251 + /* Collection<EntradaAlmoxarifadoItem> entradaAlmoxarifadoItems = this.obterEntradaItemComSaldoPorMaterial(materialConsumo.getId());
217 252
218 for (EntradaAlmoxarifadoItem itemEntrada : entradaAlmoxarifadoItems) { 253 for (EntradaAlmoxarifadoItem itemEntrada : entradaAlmoxarifadoItems) {
219 - if (itemEntrada.getQuantidadeSaldo().compareTo(quantidadeMovimentada) > 0) { 254 +
  255 +
  256 + if (itemEntrada.getMaterialLocalEstoque().getQuantidade().compareTo(quantidadeMovimentada) > 0) {
220 retorno = retorno.add(quantidadeMovimentada.multiply(itemEntrada.getValorUnitario())); 257 retorno = retorno.add(quantidadeMovimentada.multiply(itemEntrada.getValorUnitario()));
221 - itemEntrada.setQuantidadeSaldo(itemEntrada.getQuantidadeSaldo().subtract(quantidadeMovimentada)); 258 + itemEntrada.getMaterialLocalEstoque().setQuantidade(itemEntrada.getMaterialLocalEstoque().getQuantidade().subtract(quantidadeMovimentada));
222 this.save(itemEntrada); 259 this.save(itemEntrada);
223 break; 260 break;
224 - } else if (itemEntrada.getQuantidadeSaldo().compareTo(quantidadeMovimentada) == 0) { 261 +
  262 + } else if (itemEntrada.getMaterialLocalEstoque().getQuantidade().compareTo(quantidadeMovimentada) == 0) {
225 retorno = retorno.add((quantidadeMovimentada.multiply(itemEntrada.getValorUnitario())).add(itemEntrada.getValorSobra())); 263 retorno = retorno.add((quantidadeMovimentada.multiply(itemEntrada.getValorUnitario())).add(itemEntrada.getValorSobra()));
226 - itemEntrada.setQuantidadeSaldo(itemEntrada.getQuantidadeSaldo().subtract(quantidadeMovimentada)); 264 + itemEntrada.getMaterialLocalEstoque().setQuantidade(itemEntrada.getMaterialLocalEstoque().getQuantidade().subtract(quantidadeMovimentada));
227 this.save(itemEntrada); 265 this.save(itemEntrada);
228 break; 266 break;
  267 +
229 } else { 268 } else {
230 - retorno = retorno.add((itemEntrada.getQuantidadeSaldo().multiply(itemEntrada.getValorUnitario())).add(itemEntrada.getValorSobra()));  
231 - quantidadeMovimentada = quantidadeMovimentada.subtract(itemEntrada.getQuantidadeSaldo());  
232 - itemEntrada.setQuantidadeSaldo(BigDecimal.ZERO); 269 + retorno = retorno.add((itemEntrada.getMaterialLocalEstoque().getQuantidade().multiply(itemEntrada.getValorUnitario())).add(itemEntrada.getValorSobra()));
  270 + quantidadeMovimentada = quantidadeMovimentada.subtract(itemEntrada.getMaterialLocalEstoque().getQuantidade());
  271 + itemEntrada.getMaterialLocalEstoque().setQuantidade(BigDecimal.ZERO);
233 this.save(itemEntrada); 272 this.save(itemEntrada);
  273 +
234 } 274 }
235 }*/ 275 }*/
236 276
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/MaterialEstoqueFIFOItemServiceImpl.java
1 package br.com.centralit.api.service.impl; 1 package br.com.centralit.api.service.impl;
2 2
  3 +import java.util.List;
  4 +
3 import org.springframework.beans.factory.annotation.Autowired; 5 import org.springframework.beans.factory.annotation.Autowired;
4 import org.springframework.beans.factory.annotation.Qualifier; 6 import org.springframework.beans.factory.annotation.Qualifier;
5 import org.springframework.stereotype.Service; 7 import org.springframework.stereotype.Service;
@@ -32,4 +34,9 @@ public class MaterialEstoqueFIFOItemServiceImpl extends GenericServiceImpl&lt;Mater @@ -32,4 +34,9 @@ public class MaterialEstoqueFIFOItemServiceImpl extends GenericServiceImpl&lt;Mater
32 return super.remove(fifoItem); 34 return super.remove(fifoItem);
33 } 35 }
34 36
  37 + @Override
  38 + public List<MaterialEstoqueFIFOItem> findFIFOsByMaterial(long idMaterial) {
  39 + return materialEstoqueFIFOItemDao.findFIFOsByMaterial(idMaterial);
  40 + }
  41 +
35 } 42 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/MaterialLocalEstoqueServiceImpl.java
@@ -68,9 +68,14 @@ public class MaterialLocalEstoqueServiceImpl extends GenericServiceImpl&lt;Material @@ -68,9 +68,14 @@ public class MaterialLocalEstoqueServiceImpl extends GenericServiceImpl&lt;Material
68 }else{ 68 }else{
69 if(entity.getLocalPrincipal()){ 69 if(entity.getLocalPrincipal()){
70 for (MaterialLocalEstoque materialLocalEstoque : locaisParMaterial) { 70 for (MaterialLocalEstoque materialLocalEstoque : locaisParMaterial) {
71 - if(materialLocalEstoque.getId() != entity.getId()){ 71 + if(entity.getId() != null){
  72 + if(materialLocalEstoque.getId().doubleValue() != entity.getId().doubleValue()){
  73 + materialLocalEstoque.setLocalPrincipal(Boolean.FALSE);
  74 + this.merge(materialLocalEstoque);
  75 + }
  76 + }else{
72 materialLocalEstoque.setLocalPrincipal(Boolean.FALSE); 77 materialLocalEstoque.setLocalPrincipal(Boolean.FALSE);
73 - this.merge(materialLocalEstoque); 78 + this.merge(materialLocalEstoque);
74 } 79 }
75 } 80 }
76 } 81 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/MovimentoEstoqueServiceImpl.java
@@ -2,6 +2,7 @@ package br.com.centralit.api.service.impl; @@ -2,6 +2,7 @@ package br.com.centralit.api.service.impl;
2 2
3 import java.math.BigDecimal; 3 import java.math.BigDecimal;
4 import java.math.RoundingMode; 4 import java.math.RoundingMode;
  5 +import java.sql.Timestamp;
5 import java.util.ArrayList; 6 import java.util.ArrayList;
6 import java.util.Calendar; 7 import java.util.Calendar;
7 import java.util.Collection; 8 import java.util.Collection;
@@ -19,6 +20,8 @@ import org.springframework.validation.Validator; @@ -19,6 +20,8 @@ import org.springframework.validation.Validator;
19 import br.com.centralit.api.dao.MovimentoEstoqueDao; 20 import br.com.centralit.api.dao.MovimentoEstoqueDao;
20 import br.com.centralit.api.model.AtendimentoRequisicaoConsumo; 21 import br.com.centralit.api.model.AtendimentoRequisicaoConsumo;
21 import br.com.centralit.api.model.AtendimentoRequisicaoConsumoItem; 22 import br.com.centralit.api.model.AtendimentoRequisicaoConsumoItem;
  23 +import br.com.centralit.api.model.AtendimentoRequisicaoConsumoItemEndereco;
  24 +import br.com.centralit.api.model.AtendimentoRequisicaoConsumoItemFIFO;
22 import br.com.centralit.api.model.BaixaAlmoxarifado; 25 import br.com.centralit.api.model.BaixaAlmoxarifado;
23 import br.com.centralit.api.model.BaixaAlmoxarifadoItem; 26 import br.com.centralit.api.model.BaixaAlmoxarifadoItem;
24 import br.com.centralit.api.model.Devolucao; 27 import br.com.centralit.api.model.Devolucao;
@@ -33,6 +36,7 @@ import br.com.centralit.api.model.MaterialEstoque; @@ -33,6 +36,7 @@ import br.com.centralit.api.model.MaterialEstoque;
33 import br.com.centralit.api.model.MaterialEstoqueFIFOItem; 36 import br.com.centralit.api.model.MaterialEstoqueFIFOItem;
34 import br.com.centralit.api.model.MaterialLocalEstoque; 37 import br.com.centralit.api.model.MaterialLocalEstoque;
35 import br.com.centralit.api.model.MovimentoEstoque; 38 import br.com.centralit.api.model.MovimentoEstoque;
  39 +import br.com.centralit.api.service.AtendimentoRequisicaoConsumoFIFOService;
36 import br.com.centralit.api.service.AtendimentoRequisicaoConsumoItemService; 40 import br.com.centralit.api.service.AtendimentoRequisicaoConsumoItemService;
37 import br.com.centralit.api.service.BaixaAlmoxarifadoItemService; 41 import br.com.centralit.api.service.BaixaAlmoxarifadoItemService;
38 import br.com.centralit.api.service.ConfiguracaoParametroSistemaService; 42 import br.com.centralit.api.service.ConfiguracaoParametroSistemaService;
@@ -54,6 +58,7 @@ import br.com.centralit.framework.model.Usuario; @@ -54,6 +58,7 @@ import br.com.centralit.framework.model.Usuario;
54 import br.com.centralit.framework.model.arquitetura.PersistentObjectAudit; 58 import br.com.centralit.framework.model.arquitetura.PersistentObjectAudit;
55 import br.com.centralit.framework.service.arquitetura.GenericServiceImpl; 59 import br.com.centralit.framework.service.arquitetura.GenericServiceImpl;
56 import br.com.centralit.framework.util.UtilColecao; 60 import br.com.centralit.framework.util.UtilColecao;
  61 +import br.com.centralit.framework.util.UtilDate;
57 import br.com.centralit.framework.util.UtilObjeto; 62 import br.com.centralit.framework.util.UtilObjeto;
58 63
59 /** 64 /**
@@ -89,9 +94,9 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst @@ -89,9 +94,9 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst
89 94
90 private static int SCALE_DIVISOR_DECIMAL = 4; 95 private static int SCALE_DIVISOR_DECIMAL = 4;
91 96
92 - private static final String ATENDIMENTO_REQUISICAO_CONSUMO_ITEM_ATENDIMENTO_REQUISICAO_CONSUMO_DATA_ATENDIMENTO = "atendimentoRequisicaoConsumoItem.atendimentoRequisicaoConsumo.dataAtendimento"; 97 + private static final int ATENDIMENTO_REQUISICAO_CONSUMO_ITEM_ATENDIMENTO_REQUISICAO_CONSUMO_DATA_ATENDIMENTO = 0;
93 98
94 - private static final String ATENDIMENTO_REQUISICAO_CONSUMO_ITEM_QUANTIDADE = "atendimentoRequisicaoConsumoItem.quantidade"; 99 + private static final int ATENDIMENTO_REQUISICAO_CONSUMO_ITEM_QUANTIDADE = 1;
95 100
96 /** Atributo movimentoEstoqueDao. */ 101 /** Atributo movimentoEstoqueDao. */
97 private MovimentoEstoqueDao movimentoEstoqueDao; 102 private MovimentoEstoqueDao movimentoEstoqueDao;
@@ -140,6 +145,9 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst @@ -140,6 +145,9 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst
140 @Autowired 145 @Autowired
141 private MaterialEstoqueFIFOItemService materialEstoqueFIFOItemService; 146 private MaterialEstoqueFIFOItemService materialEstoqueFIFOItemService;
142 147
  148 + @Autowired
  149 + private AtendimentoRequisicaoConsumoFIFOService atendimentoRequisicaoConsumoFIFOService;
  150 +
143 151
144 /** 152 /**
145 * Responsável pela criação de novas instâncias desta classe. 153 * Responsável pela criação de novas instâncias desta classe.
@@ -373,6 +381,10 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst @@ -373,6 +381,10 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst
373 } 381 }
374 } else if (movimentoEstoque.getDominioClasseReferencia().getCodigo().equals(DominioMaterial.REFERENCIA_ATENDIMENTO_ALMOXARIFADO_ITEM)) { 382 } else if (movimentoEstoque.getDominioClasseReferencia().getCodigo().equals(DominioMaterial.REFERENCIA_ATENDIMENTO_ALMOXARIFADO_ITEM)) {
375 383
  384 +
  385 +
  386 +
  387 +
376 throw new NotImplementedException(); 388 throw new NotImplementedException();
377 } else if (movimentoEstoque.getDominioClasseReferencia().getCodigo().equals(DominioMaterial.REFERENCIA_BAIXA_ALMOXARIFADO_ITEM)) { 389 } else if (movimentoEstoque.getDominioClasseReferencia().getCodigo().equals(DominioMaterial.REFERENCIA_BAIXA_ALMOXARIFADO_ITEM)) {
378 390
@@ -414,36 +426,82 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst @@ -414,36 +426,82 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst
414 List<MovimentoEstoque> movimentos = new ArrayList<MovimentoEstoque>(); 426 List<MovimentoEstoque> movimentos = new ArrayList<MovimentoEstoque>();
415 427
416 for (AtendimentoRequisicaoConsumoItem atendimentoRequisicaoConsumoItem : atendimento.getAtendimentoRequisicaoConsumoItems()) { 428 for (AtendimentoRequisicaoConsumoItem atendimentoRequisicaoConsumoItem : atendimento.getAtendimentoRequisicaoConsumoItems()) {
417 -  
418 - if(atendimentoRequisicaoConsumoItem.getQuantidade() == null){  
419 - atendimentoRequisicaoConsumoItem.setQuantidade(new BigDecimal(0));; 429 +
  430 + BigDecimal valorMovimentoFIFO = processaFIFOAtendimentoRequisicao(atendimentoRequisicaoConsumoItem);
  431 + BigDecimal valorMovimentoMediaMovel = this.materialEstoqueService.findByIdMaterial(atendimentoRequisicaoConsumoItem.getMaterial().getId()).getValorUnitarioMedio();
  432 +
  433 + for (AtendimentoRequisicaoConsumoItemEndereco atendimentoRequisicaoConsumoItemEndereco : atendimentoRequisicaoConsumoItem.getAtendimentoRequisicaoConsumoItemEnderecos()) {
  434 +
  435 + MovimentoEstoque movimentoEstoque = new MovimentoEstoque(atendimento.getDataAtendimento(), atendimentoRequisicaoConsumoItemEndereco.getQuantidade().multiply(BigDecimal.valueOf(-1)),
  436 + valorMovimentoFIFO.multiply(BigDecimal.valueOf(-1)), valorMovimentoMediaMovel.multiply(BigDecimal.valueOf(-1)), tipoMovimento); //Movimentos negativos pois o valor esta saindo do estoque.
  437 +
  438 + movimentoEstoque.setDominioClasseReferencia(classeReferenciaAtendimento);
  439 + movimentoEstoque.setIdClasseReferencia(atendimentoRequisicaoConsumoItem.getId());
  440 + movimentoEstoque.setMaterialLocalEstoque(atendimentoRequisicaoConsumoItemEndereco.getMaterialLocalEstoque());
  441 + movimentoEstoque.setMaterialEstoque(movimentoEstoque.getMaterialEstoque());
  442 + movimentoEstoque.setMaterial(atendimentoRequisicaoConsumoItem.getMaterial());
  443 +
  444 + String tipoAvaliacao = this.configuracaoParametroSistemaService.getParametro("TIPO_AVALIACAO_MONETARIA_ESTOQUE", atendimento.getOrganizacao()).getValor();
  445 +
  446 + MaterialConsumo materialConsumo = this.materialConsumoService.find(movimentoEstoque.getMaterial().getId());
  447 +
  448 + if (DominioAlmoxarifado.TIPO_AVALIACAO_MONETARIA_FIFO_NOME == tipoAvaliacao) { //Realiza movimento de saida em conta contábil baseado em FIFO se estiver configurado como tal.
  449 + this.contaContabilMovimentoService.salvaMovimentoSaidaAtendimento(materialConsumo.getContaContabil(), valorMovimentoFIFO, classeReferenciaAtendimento, atendimentoRequisicaoConsumoItem.getId());
  450 + } else { //Realiza movimento de saida em conta contábil baseado em Média Móvel (Padrão)
  451 + this.contaContabilMovimentoService.salvaMovimentoSaidaAtendimento(materialConsumo.getContaContabil(), valorMovimentoMediaMovel, classeReferenciaAtendimento, atendimentoRequisicaoConsumoItem.getId());
  452 + }
  453 +
  454 + MaterialLocalEstoque materialLocalEstoque = this.materialLocalEstoqueService.find(atendimentoRequisicaoConsumoItemEndereco.getMaterialLocalEstoque().getId());
  455 + materialLocalEstoque.setQuantidade(materialLocalEstoque.getQuantidade().subtract(atendimentoRequisicaoConsumoItemEndereco.getQuantidade()));
  456 + this.materialLocalEstoqueService.merge(materialLocalEstoque);
  457 +
  458 + movimentos.add(movimentoEstoque);
420 } 459 }
421 -  
422 - BigDecimal valorMovimentoFIFO = this.entradaAlmoxarifadoItemService.realizaMovimentoSaida(atendimentoRequisicaoConsumoItem.getMaterial(), atendimentoRequisicaoConsumoItem.getQuantidade());  
423 - BigDecimal valorMovimentoMediaMovel = BigDecimal.ZERO;//BigDecimal valorMovimentoMediaMovel = this.materialEstoqueSaldoMedioService.realizaMovimentoSaida(atendimentoRequisicaoConsumoItem.getMaterial(), atendimentoRequisicaoConsumoItem.getQuantidade());  
424 -  
425 - MovimentoEstoque movimentoEstoque = new MovimentoEstoque(atendimento.getDataAtendimento(), atendimentoRequisicaoConsumoItem.getQuantidade().multiply(BigDecimal.valueOf(-1)),  
426 - valorMovimentoFIFO.multiply(BigDecimal.valueOf(-1)), valorMovimentoMediaMovel.multiply(BigDecimal.valueOf(-1)), tipoMovimento); //Movimentos negativos pois o valor esta saindo do estoque.  
427 -  
428 - //TODO Corrigir movimento de atendimento com versão nova  
429 460
430 - /*movimentoEstoque.setAtendimentoRequisicaoConsumoItem(atendimentoRequisicaoConsumoItem);  
431 - movimentoEstoque.setLocalEstoque(this.materialLocalEstoqueService.find(getUsuario().getOrganizacao().getId()));  
432 - movimentoEstoque.setMaterial(atendimentoRequisicaoConsumoItem.getMaterial());*/ 461 + }
433 462
434 - movimentos.add(movimentoEstoque); 463 + this.saveList(movimentos);
435 464
436 - String tipoAvaliacao = this.configuracaoParametroSistemaService.getParametro("TIPO_AVALIACAO_MONETARIA_ESTOQUE", atendimento.getOrganizacao()).getValor(); 465 + }
437 466
438 - if (DominioAlmoxarifado.TIPO_AVALIACAO_MONETARIA_FIFO_NOME == tipoAvaliacao) { //Realiza movimento de saida em conta contábil baseado em FIFO se estiver configurado como tal.  
439 - this.contaContabilMovimentoService.salvaMovimentoSaidaAtendimento(movimentoEstoque.getMaterial().getContaContabil(), valorMovimentoFIFO, classeReferenciaAtendimento, atendimentoRequisicaoConsumoItem.getId());  
440 - } else { //Realiza movimento de saida em conta contábil baseado em Média Móvel (Padrão)  
441 - this.contaContabilMovimentoService.salvaMovimentoSaidaAtendimento(movimentoEstoque.getMaterial().getContaContabil(), valorMovimentoMediaMovel, classeReferenciaAtendimento, atendimentoRequisicaoConsumoItem.getId()); 467 + private BigDecimal processaFIFOAtendimentoRequisicao(AtendimentoRequisicaoConsumoItem atendimentoRequisicaoConsumoItem) {
  468 + BigDecimal retorno = BigDecimal.ZERO;
  469 +
  470 + List<MaterialEstoqueFIFOItem> fifOsByMaterial = this.materialEstoqueFIFOItemService.findFIFOsByMaterial(atendimentoRequisicaoConsumoItem.getMaterial().getId());
  471 + BigDecimal quantidadeMovimentada = atendimentoRequisicaoConsumoItem.getQuantidade();
  472 + List<AtendimentoRequisicaoConsumoItemFIFO> itemFIFOs = new ArrayList<AtendimentoRequisicaoConsumoItemFIFO>();
  473 +
  474 + for (MaterialEstoqueFIFOItem materialEstoqueFIFOItem : fifOsByMaterial) {
  475 +
  476 + if (materialEstoqueFIFOItem.getQuantidadeRestante().compareTo(atendimentoRequisicaoConsumoItem.getQuantidade()) > 0) {
  477 + retorno = retorno.add(quantidadeMovimentada.multiply(materialEstoqueFIFOItem.getValorUnitario()));
  478 + materialEstoqueFIFOItem.setQuantidadeRestante(materialEstoqueFIFOItem.getQuantidadeRestante().subtract(quantidadeMovimentada));
  479 + materialEstoqueFIFOItem.setValorSobra(materialEstoqueFIFOItem.getQuantidadeRestante().multiply(materialEstoqueFIFOItem.getValorUnitario()));
  480 + this.materialEstoqueFIFOItemService.merge(materialEstoqueFIFOItem);
  481 + itemFIFOs.add(new AtendimentoRequisicaoConsumoItemFIFO(atendimentoRequisicaoConsumoItem, materialEstoqueFIFOItem, quantidadeMovimentada));
  482 + break;
  483 +
  484 + } else if (materialEstoqueFIFOItem.getQuantidadeRestante().compareTo(quantidadeMovimentada) == 0) {
  485 + retorno = retorno.add(materialEstoqueFIFOItem.getValorSobra()).add(materialEstoqueFIFOItem.getValorSobra());
  486 + materialEstoqueFIFOItem.setQuantidadeRestante(materialEstoqueFIFOItem.getQuantidadeRestante().subtract(quantidadeMovimentada));
  487 + materialEstoqueFIFOItem.setValorSobra(materialEstoqueFIFOItem.getQuantidadeRestante().multiply(materialEstoqueFIFOItem.getValorUnitario()));
  488 + this.materialEstoqueFIFOItemService.merge(materialEstoqueFIFOItem);
  489 + itemFIFOs.add(new AtendimentoRequisicaoConsumoItemFIFO(atendimentoRequisicaoConsumoItem, materialEstoqueFIFOItem, quantidadeMovimentada));
  490 + break;
  491 +
  492 + } else {
  493 + retorno = retorno.add((materialEstoqueFIFOItem.getQuantidadeRestante().multiply(materialEstoqueFIFOItem.getValorUnitario()))).add(materialEstoqueFIFOItem.getValorSobra());
  494 + quantidadeMovimentada = quantidadeMovimentada.subtract(materialEstoqueFIFOItem.getQuantidadeRestante());
  495 + materialEstoqueFIFOItem.setQuantidadeRestante(BigDecimal.ZERO);
  496 + this.materialEstoqueFIFOItemService.merge(materialEstoqueFIFOItem);
  497 + itemFIFOs.add(new AtendimentoRequisicaoConsumoItemFIFO(atendimentoRequisicaoConsumoItem, materialEstoqueFIFOItem, quantidadeMovimentada));
442 } 498 }
443 } 499 }
444 -  
445 - this.saveList(movimentos);  
446 - 500 +
  501 + itemFIFOs = this.atendimentoRequisicaoConsumoFIFOService.saveList(itemFIFOs);
  502 + atendimentoRequisicaoConsumoItem.setAtendimentoRequisicaoConsumoItemFIFOs(itemFIFOs);
  503 +
  504 + return retorno;
447 } 505 }
448 506
449 @Override 507 @Override
@@ -489,7 +547,10 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst @@ -489,7 +547,10 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst
489 547
490 MovimentoEstoque ultimoMovimentoAtendimento = this.movimentoEstoqueDao.ultimoMovimento(entity, joinClass); 548 MovimentoEstoque ultimoMovimentoAtendimento = this.movimentoEstoqueDao.ultimoMovimento(entity, joinClass);
491 549
492 - return this.movimentoEstoqueDao.existeMovimentacaoDepoisDoMovimento(ultimoMovimentoAtendimento, usuarioLogado.getOrganizacao()); 550 + if(ultimoMovimentoAtendimento != null){
  551 + return this.movimentoEstoqueDao.existeMovimentacaoDepoisDoMovimento(ultimoMovimentoAtendimento, usuarioLogado.getOrganizacao());
  552 + }
  553 + return false;
493 } 554 }
494 555
495 /** 556 /**
@@ -500,28 +561,22 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst @@ -500,28 +561,22 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst
500 561
501 BigDecimal result = BigDecimal.valueOf(0); 562 BigDecimal result = BigDecimal.valueOf(0);
502 563
503 - List<Map<String, Object>> valoresAtendidos = this.movimentoEstoqueDao.getQuantidadeMaterialAtendido(materialConsumo, almoxarifado, unidadeRequisitante, dataInicio, dataFim, idsDominiosTipoStatusRequisicao); 564 + List<ArrayList<Object>> valoresAtendidos = this.movimentoEstoqueDao.getQuantidadeMaterialAtendido(materialConsumo, almoxarifado, unidadeRequisitante, dataInicio, dataFim, idsDominiosTipoStatusRequisicao);
504 565
505 if (!UtilColecao.isVazio(valoresAtendidos)) { 566 if (!UtilColecao.isVazio(valoresAtendidos)) {
506 567
507 Map<String, List<BigDecimal>> mapaDeMesesPorQuantidade = new HashMap<String, List<BigDecimal>>(); 568 Map<String, List<BigDecimal>> mapaDeMesesPorQuantidade = new HashMap<String, List<BigDecimal>>();
508 569
509 - for (Map<String, Object> mapaPropriedades : valoresAtendidos) {  
510 - 570 + for (Object list : valoresAtendidos) {
  571 + Object[] listaPropriedades = (Object[]) list;
511 if (mensal) { 572 if (mensal) {
512 573
513 - this.divideValoresPorMesEAno(mapaPropriedades, mapaDeMesesPorQuantidade); 574 + this.divideValoresPorMesEAno(listaPropriedades, mapaDeMesesPorQuantidade);
514 575
515 } else { 576 } else {
  577 +
  578 + result = result.add(listaPropriedades[ATENDIMENTO_REQUISICAO_CONSUMO_ITEM_QUANTIDADE] != null ? (BigDecimal) listaPropriedades[ATENDIMENTO_REQUISICAO_CONSUMO_ITEM_QUANTIDADE] : BigDecimal.ZERO);
516 579
517 - for (String chave : mapaPropriedades.keySet()) {  
518 -  
519 - if (chave.equalsIgnoreCase(ATENDIMENTO_REQUISICAO_CONSUMO_ITEM_QUANTIDADE)) {  
520 -  
521 - result = result.add((BigDecimal) mapaPropriedades.get(chave));  
522 -  
523 - }  
524 - }  
525 } 580 }
526 } 581 }
527 582
@@ -555,7 +610,7 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst @@ -555,7 +610,7 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst
555 610
556 for(BigDecimal valor : mapaDeMesesPorQuantidade.get(chave)){ 611 for(BigDecimal valor : mapaDeMesesPorQuantidade.get(chave)){
557 612
558 - valorSomadoMensal = valorSomadoMensal.add(valor); 613 + valorSomadoMensal = valorSomadoMensal.add(valor != null ? valor : BigDecimal.ZERO);
559 614
560 } 615 }
561 616
@@ -577,9 +632,9 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst @@ -577,9 +632,9 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst
577 * @param mapaDeMesesPorQuantidade2 632 * @param mapaDeMesesPorQuantidade2
578 * @return 633 * @return
579 */ 634 */
580 - private void divideValoresPorMesEAno(Map<String, Object> mapaPropriedades, Map<String, List<BigDecimal>> mapaDeMesesPorQuantidade) {  
581 -  
582 - Calendar data = (Calendar) mapaPropriedades.get(ATENDIMENTO_REQUISICAO_CONSUMO_ITEM_ATENDIMENTO_REQUISICAO_CONSUMO_DATA_ATENDIMENTO); 635 + private void divideValoresPorMesEAno(Object[] listaPropriedades, Map<String, List<BigDecimal>> mapaDeMesesPorQuantidade) {
  636 +
  637 + Calendar data = UtilDate.getCalendarDoTimestamp((Timestamp) listaPropriedades[ATENDIMENTO_REQUISICAO_CONSUMO_ITEM_ATENDIMENTO_REQUISICAO_CONSUMO_DATA_ATENDIMENTO]);
583 638
584 Integer mes = data.get(Calendar.MONTH); 639 Integer mes = data.get(Calendar.MONTH);
585 640
@@ -592,7 +647,7 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst @@ -592,7 +647,7 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst
592 mapaDeMesesPorQuantidade.put(chave, new ArrayList<BigDecimal>()); 647 mapaDeMesesPorQuantidade.put(chave, new ArrayList<BigDecimal>());
593 } 648 }
594 649
595 - BigDecimal valor = (BigDecimal) mapaPropriedades.get(ATENDIMENTO_REQUISICAO_CONSUMO_ITEM_QUANTIDADE); 650 + BigDecimal valor = (BigDecimal) listaPropriedades[ATENDIMENTO_REQUISICAO_CONSUMO_ITEM_QUANTIDADE];
596 651
597 mapaDeMesesPorQuantidade.get(chave).add(valor); 652 mapaDeMesesPorQuantidade.get(chave).add(valor);
598 653
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/RequisicaoConsumoItemServiceImpl.java
@@ -116,7 +116,11 @@ public class RequisicaoConsumoItemServiceImpl extends GenericServiceImpl&lt;Requisi @@ -116,7 +116,11 @@ public class RequisicaoConsumoItemServiceImpl extends GenericServiceImpl&lt;Requisi
116 requisicaoConsumoItem.setRequisicaoConsumo(requisicaoConsumo); 116 requisicaoConsumoItem.setRequisicaoConsumo(requisicaoConsumo);
117 requisicaoConsumoItem.setMaterialConsumo(materialConsumo); 117 requisicaoConsumoItem.setMaterialConsumo(materialConsumo);
118 requisicaoConsumoItem.setQuantidade(requisicaoConsumoItemTransient.getQuantidade()); 118 requisicaoConsumoItem.setQuantidade(requisicaoConsumoItemTransient.getQuantidade());
119 - 119 +
  120 + if(requisicaoConsumoItemTransient.getId() != null){
  121 + requisicaoConsumoItem.setId(requisicaoConsumoItemTransient.getId());
  122 + }
  123 +
120 return requisicaoConsumoItem; 124 return requisicaoConsumoItem;
121 } 125 }
122 126
@@ -142,10 +146,15 @@ public class RequisicaoConsumoItemServiceImpl extends GenericServiceImpl&lt;Requisi @@ -142,10 +146,15 @@ public class RequisicaoConsumoItemServiceImpl extends GenericServiceImpl&lt;Requisi
142 public Long findRequisicaoAnteriorPorMaterial(MaterialConsumo materialConsumo, EstruturaOrganizacional unidadeRequisitante) { 146 public Long findRequisicaoAnteriorPorMaterial(MaterialConsumo materialConsumo, EstruturaOrganizacional unidadeRequisitante) {
143 147
144 Dominio statusFinalizado = this.dominioService.findByChaveAndCodigo(DominioAlmoxarifado.TIPO_STATUS_REQUISICAO, DominioAlmoxarifado.TIPO_STATUS_FINALIZADA); 148 Dominio statusFinalizado = this.dominioService.findByChaveAndCodigo(DominioAlmoxarifado.TIPO_STATUS_REQUISICAO, DominioAlmoxarifado.TIPO_STATUS_FINALIZADA);
145 - Dominio statusAtendida = this.dominioService.findByChaveAndCodigo(DominioAlmoxarifado.TIPO_STATUS_REQUISICAO, DominioAlmoxarifado.TIPO_STATUS_ATENDIDA);  
146 Dominio statusParcialmenteAtendida = this.dominioService.findByChaveAndCodigo(DominioAlmoxarifado.TIPO_STATUS_REQUISICAO, DominioAlmoxarifado.TIPO_STATUS_ATENDIDA_PARCIALMENTE); 149 Dominio statusParcialmenteAtendida = this.dominioService.findByChaveAndCodigo(DominioAlmoxarifado.TIPO_STATUS_REQUISICAO, DominioAlmoxarifado.TIPO_STATUS_ATENDIDA_PARCIALMENTE);
147 150
148 - return this.requisicaoConsumoItemDao.findRequisicaoAnteriorPorMaterial(materialConsumo, unidadeRequisitante, statusFinalizado, statusParcialmenteAtendida, statusAtendida); 151 + return this.requisicaoConsumoItemDao.findRequisicaoAnteriorPorMaterial(materialConsumo, unidadeRequisitante, statusFinalizado, statusParcialmenteAtendida);
  152 + }
  153 +
  154 +
  155 + @Override
  156 + public List<RequisicaoConsumoItem> findItensRequisicaoPorMaterial(Long idRequisicao, Long idMaterial) {
  157 + return this.requisicaoConsumoItemDao.findItensRequisicaoPorMaterial(idRequisicao, idMaterial);
149 } 158 }
150 159
151 160
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/RequisicaoConsumoServiceImpl.java
@@ -11,6 +11,8 @@ import org.springframework.security.core.context.SecurityContextHolder; @@ -11,6 +11,8 @@ import org.springframework.security.core.context.SecurityContextHolder;
11 import org.springframework.stereotype.Service; 11 import org.springframework.stereotype.Service;
12 import org.springframework.validation.Validator; 12 import org.springframework.validation.Validator;
13 13
  14 +import com.googlecode.genericdao.search.SearchResult;
  15 +
14 import br.com.centralit.api.dao.RequisicaoConsumoDao; 16 import br.com.centralit.api.dao.RequisicaoConsumoDao;
15 import br.com.centralit.api.model.DominioAlmoxarifado; 17 import br.com.centralit.api.model.DominioAlmoxarifado;
16 import br.com.centralit.api.model.EstruturaOrganizacional; 18 import br.com.centralit.api.model.EstruturaOrganizacional;
@@ -27,6 +29,7 @@ import br.com.centralit.api.service.ModuloService; @@ -27,6 +29,7 @@ import br.com.centralit.api.service.ModuloService;
27 import br.com.centralit.api.service.RequisicaoConsumoItemService; 29 import br.com.centralit.api.service.RequisicaoConsumoItemService;
28 import br.com.centralit.api.service.RequisicaoConsumoService; 30 import br.com.centralit.api.service.RequisicaoConsumoService;
29 import br.com.centralit.api.service.UsuarioService; 31 import br.com.centralit.api.service.UsuarioService;
  32 +import br.com.centralit.api.viewHelper.AtendimentoVH;
30 import br.com.centralit.api.viewHelper.RequisicaoVH; 33 import br.com.centralit.api.viewHelper.RequisicaoVH;
31 import br.com.centralit.framework.exception.BusinessException; 34 import br.com.centralit.framework.exception.BusinessException;
32 import br.com.centralit.framework.exception.CodigoErro; 35 import br.com.centralit.framework.exception.CodigoErro;
@@ -109,7 +112,7 @@ public class RequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;RequisicaoC @@ -109,7 +112,7 @@ public class RequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;RequisicaoC
109 /** Atributo centroCustoService. */ 112 /** Atributo centroCustoService. */
110 @Autowired 113 @Autowired
111 private CentroCustoService centroCustoService; 114 private CentroCustoService centroCustoService;
112 - 115 +
113 @Autowired 116 @Autowired
114 public RequisicaoConsumoServiceImpl( RequisicaoConsumoDao requisicaoConsumoDao, @Qualifier("requisicaoConsumoValidator") Validator validator ) { 117 public RequisicaoConsumoServiceImpl( RequisicaoConsumoDao requisicaoConsumoDao, @Qualifier("requisicaoConsumoValidator") Validator validator ) {
115 118
@@ -287,6 +290,12 @@ public class RequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;RequisicaoC @@ -287,6 +290,12 @@ public class RequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;RequisicaoC
287 throw new BusinessException("PORTAL.MSG.MN020", CodigoErro.REGRA_NEGOCIO.getValue()); 290 throw new BusinessException("PORTAL.MSG.MN020", CodigoErro.REGRA_NEGOCIO.getValue());
288 291
289 } 292 }
  293 +
  294 + RequisicaoConsumo requisicaoConsumo = this.find(idRequisicaoConsumo);
  295 +
  296 + for (RequisicaoConsumoItem requisicaoConsumoItem : requisicaoConsumo.getRequisicaoConsumoItens()) {
  297 + this.requisicaoConsumoItemService.remove(requisicaoConsumoItem);
  298 + }
290 299
291 return super.removeById(idRequisicaoConsumo); 300 return super.removeById(idRequisicaoConsumo);
292 301
@@ -343,7 +352,10 @@ public class RequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;RequisicaoC @@ -343,7 +352,10 @@ public class RequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;RequisicaoC
343 private void montarEntidade(RequisicaoConsumo requisicaoConsumo) { 352 private void montarEntidade(RequisicaoConsumo requisicaoConsumo) {
344 353
345 // MONTA OS DADOS RELACIONADOS MATERIAL DE CONSUMO 354 // MONTA OS DADOS RELACIONADOS MATERIAL DE CONSUMO
346 - this.requisicaoConsumoItemService.montarRequisicaoConsumoItemMateriaisConsumo(requisicaoConsumo); 355 + for (RequisicaoConsumoItem requisicaoConsumoItem : requisicaoConsumo.getRequisicaoConsumoItens()) {
  356 + requisicaoConsumoItem.setRequisicaoConsumo(requisicaoConsumo);
  357 + }
  358 +// this.requisicaoConsumoItemService.montarRequisicaoConsumoItemMateriaisConsumo(requisicaoConsumo);
347 359
348 // TRANSIENT OBSERVACOES 360 // TRANSIENT OBSERVACOES
349 if (!UtilColecao.isVazio(requisicaoConsumo.getObservacoes())) { 361 if (!UtilColecao.isVazio(requisicaoConsumo.getObservacoes())) {
@@ -358,6 +370,11 @@ public class RequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;RequisicaoC @@ -358,6 +370,11 @@ public class RequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;RequisicaoC
358 } 370 }
359 371
360 requisicaoConsumo.setCentroCusto(UtilObjeto.isReferencia(requisicaoConsumo.getCentroCusto()) ? this.centroCustoService.find(requisicaoConsumo.getCentroCusto().getId()) : null); 372 requisicaoConsumo.setCentroCusto(UtilObjeto.isReferencia(requisicaoConsumo.getCentroCusto()) ? this.centroCustoService.find(requisicaoConsumo.getCentroCusto().getId()) : null);
  373 +
  374 + if(requisicaoConsumo.getOrganizacao() == null){
  375 + Usuario usuarioLogado = (Usuario) usuarioService.find(( (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal() ).getId());
  376 + requisicaoConsumo.setOrganizacao(usuarioLogado.getOrganizacao());
  377 + }
361 } 378 }
362 379
363 /** 380 /**
@@ -531,4 +548,58 @@ public class RequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;RequisicaoC @@ -531,4 +548,58 @@ public class RequisicaoConsumoServiceImpl extends GenericServiceImpl&lt;RequisicaoC
531 public String findtipoStatusRequisicaoPorMaterial(Long requisicaoId) { 548 public String findtipoStatusRequisicaoPorMaterial(Long requisicaoId) {
532 return requisicaoConsumoDao.findtipoStatusRequisicaoPorMaterial(requisicaoId); 549 return requisicaoConsumoDao.findtipoStatusRequisicaoPorMaterial(requisicaoId);
533 } 550 }
  551 +@Override
  552 + public SearchResult filtrarRequisicoesAtendimento(AtendimentoVH atendimentoVH) {
  553 + return this.requisicaoConsumoDao.filtrarRequisicoesAtendimento(atendimentoVH);
  554 + }
  555 +
  556 + @Override
  557 + public List<RequisicaoConsumo> findRequisicoesParaAtendimento(AtendimentoVH atendimentoVH) {
  558 + List<RequisicaoConsumo> requisicoes = this.requisicaoConsumoDao.findRequisicoesParaAtendimento(atendimentoVH);
  559 + if(atendimentoVH.isBloquearAtendimento()){
  560 + this.atualizarStatusAtendimento(requisicoes);
  561 + }
  562 +
  563 + for (RequisicaoConsumo requisicaoConsumo : requisicoes) {
  564 + List<RequisicaoConsumoItem> listaItens = new ArrayList<>();
  565 + for (RequisicaoConsumoItem requisicaoConsumoItem : requisicaoConsumo.getRequisicaoConsumoItens()) {
  566 + if(requisicaoConsumoItem.getDataInativo() == null){
  567 + listaItens.add(requisicaoConsumoItem);
  568 + }
  569 + }
  570 + requisicaoConsumo.setRequisicaoConsumoItens(listaItens);
  571 + }
  572 +
  573 + return requisicoes;
  574 + }
  575 +
  576 + private void atualizarStatusAtendimento(List<RequisicaoConsumo> requisicoes) {
  577 + Usuario usuarioLogado = (Usuario) usuarioService.find(( (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal() ).getId());
  578 + for (RequisicaoConsumo requisicaoConsumo : requisicoes) {
  579 + requisicaoConsumo.setEmAtendimento(Boolean.TRUE);
  580 + requisicaoConsumo.setAtendente(usuarioLogado);
  581 + super.merge(requisicaoConsumo);
  582 + flush();
  583 + }
  584 +
  585 + }
  586 +
  587 + @Override
  588 + public Boolean atualizarSituacaoAtendimento(Long idRequisicao, boolean situacaoAtendimento) {
  589 + RequisicaoConsumo requisicaoConsumo = this.find(idRequisicao);
  590 + requisicaoConsumo.setEmAtendimento(situacaoAtendimento);
  591 + if(!situacaoAtendimento){
  592 + requisicaoConsumo.setAtendente(null);
  593 + }
  594 + super.merge(requisicaoConsumo);
  595 + return true;
  596 + }
  597 +
  598 + @Override
  599 + public Boolean atualizarSituacaoAtendimentoRequisicoes(RequisicaoVH requisicaoVH) {
  600 + for (Long idRequisicao : requisicaoVH.getIdsRequisicoes()) {
  601 + this.atualizarSituacaoAtendimento(idRequisicao, requisicaoVH.getStatusAtendimentoRequsicao());
  602 + }
  603 + return true;
  604 + }
534 } 605 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/validation/AtendimentoRequisicaoConsumoItemValidator.java
@@ -22,7 +22,7 @@ public class AtendimentoRequisicaoConsumoItemValidator implements Validator { @@ -22,7 +22,7 @@ public class AtendimentoRequisicaoConsumoItemValidator implements Validator {
22 22
23 ValidationUtils.rejectIfEmpty(errors, "atendimentoRequisicaoConsumo", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.ATENDIMENTOREQUISICAOCONSUMO"); 23 ValidationUtils.rejectIfEmpty(errors, "atendimentoRequisicaoConsumo", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.ATENDIMENTOREQUISICAOCONSUMO");
24 24
25 - ValidationUtils.rejectIfEmpty(errors, "materialConsumo", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.MATERIALCONSUMO"); 25 + ValidationUtils.rejectIfEmpty(errors, "material", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.MATERIALCONSUMO");
26 26
27 ValidationUtils.rejectIfEmpty(errors, "quantidade", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.QUANTIDADE"); 27 ValidationUtils.rejectIfEmpty(errors, "quantidade", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.QUANTIDADE");
28 28
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/validation/RequisicaoConsumoItemValidator.java
@@ -22,7 +22,7 @@ public class RequisicaoConsumoItemValidator implements Validator { @@ -22,7 +22,7 @@ public class RequisicaoConsumoItemValidator implements Validator {
22 22
23 ValidationUtils.rejectIfEmpty(errors, "requisicaoConsumo", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.REQUISICAOCONSUMO"); 23 ValidationUtils.rejectIfEmpty(errors, "requisicaoConsumo", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.REQUISICAOCONSUMO");
24 24
25 - ValidationUtils.rejectIfEmpty(errors, "material", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.MATERIAL"); 25 + ValidationUtils.rejectIfEmpty(errors, "materialConsumo", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.MATERIAL");
26 26
27 ValidationUtils.rejectIfEmpty(errors, "quantidade", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.QUANTIDADE"); 27 ValidationUtils.rejectIfEmpty(errors, "quantidade", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.QUANTIDADE");
28 28
cit-almoxarifado-api/src/main/java/br/com/centralit/api/viewHelper/ValidacaoAtendimentoRequisicaoConsumoVH.java 0 → 100644
@@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
  1 +package br.com.centralit.api.viewHelper;
  2 +
  3 +import java.util.List;
  4 +
  5 +import br.com.centralit.api.model.MaterialLocalEstoque;
  6 +import br.com.centralit.framework.json.Views;
  7 +
  8 +import com.fasterxml.jackson.annotation.JsonView;
  9 +
  10 +public class ValidacaoAtendimentoRequisicaoConsumoVH {
  11 +
  12 + @JsonView({ Views.GenericView.class })
  13 + private List<MaterialLocalEstoque> materiaisLocalEstoque;
  14 +
  15 + @JsonView({ Views.GenericView.class })
  16 + private String mensagemErro;
  17 +
  18 + public ValidacaoAtendimentoRequisicaoConsumoVH(List<MaterialLocalEstoque> materiaisLocalEstoque, String mensagemErro) {
  19 + super();
  20 + this.materiaisLocalEstoque = materiaisLocalEstoque;
  21 + this.mensagemErro = mensagemErro;
  22 + }
  23 +
  24 + public List<MaterialLocalEstoque> getMateriaisLocalEstoque() {
  25 + return materiaisLocalEstoque;
  26 + }
  27 +
  28 + public void setMateriaisLocalEstoque(
  29 + List<MaterialLocalEstoque> materiaisLocalEstoque) {
  30 + this.materiaisLocalEstoque = materiaisLocalEstoque;
  31 + }
  32 +
  33 + public String getMensagemErro() {
  34 + return mensagemErro;
  35 + }
  36 +
  37 + public void setMensagemErro(String mensagemErro) {
  38 + this.mensagemErro = mensagemErro;
  39 + }
  40 +}
cit-almoxarifado-web/src/main/java/br/com/centralit/controller/AtendimentoRequisicaoConsumoController.java
1 package br.com.centralit.controller; 1 package br.com.centralit.controller;
2 2
  3 +import java.util.List;
  4 +
3 import org.apache.commons.lang3.SerializationUtils; 5 import org.apache.commons.lang3.SerializationUtils;
4 import org.hibernate.exception.ConstraintViolationException; 6 import org.hibernate.exception.ConstraintViolationException;
5 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.beans.factory.annotation.Autowired;
@@ -10,10 +12,15 @@ import org.springframework.web.bind.annotation.RequestMethod; @@ -10,10 +12,15 @@ import org.springframework.web.bind.annotation.RequestMethod;
10 import org.springframework.web.bind.annotation.RequestParam; 12 import org.springframework.web.bind.annotation.RequestParam;
11 import org.springframework.web.bind.annotation.ResponseBody; 13 import org.springframework.web.bind.annotation.ResponseBody;
12 14
  15 +import com.googlecode.genericdao.search.Search;
  16 +import com.googlecode.genericdao.search.SearchResult;
  17 +
13 import br.com.centralit.api.framework.json.ViewsAlmoxarifado; 18 import br.com.centralit.api.framework.json.ViewsAlmoxarifado;
14 import br.com.centralit.api.model.AtendimentoRequisicaoConsumo; 19 import br.com.centralit.api.model.AtendimentoRequisicaoConsumo;
  20 +import br.com.centralit.api.model.AtendimentoRequisicaoConsumoItem;
15 import br.com.centralit.api.model.RequisicaoConsumo; 21 import br.com.centralit.api.model.RequisicaoConsumo;
16 import br.com.centralit.api.service.AtendimentoRequisicaoConsumoService; 22 import br.com.centralit.api.service.AtendimentoRequisicaoConsumoService;
  23 +import br.com.centralit.api.viewHelper.AtendimentoVH;
17 import br.com.centralit.api.viewHelper.InformacoesAtendimentoVH; 24 import br.com.centralit.api.viewHelper.InformacoesAtendimentoVH;
18 import br.com.centralit.framework.controller.GenericController; 25 import br.com.centralit.framework.controller.GenericController;
19 import br.com.centralit.framework.dao.arquitetura.SearchSeven; 26 import br.com.centralit.framework.dao.arquitetura.SearchSeven;
@@ -23,9 +30,6 @@ import br.com.centralit.framework.model.SearchParams; @@ -23,9 +30,6 @@ import br.com.centralit.framework.model.SearchParams;
23 import br.com.centralit.framework.view.GridVH; 30 import br.com.centralit.framework.view.GridVH;
24 import br.com.centralit.framework.view.ResultResponseVH; 31 import br.com.centralit.framework.view.ResultResponseVH;
25 32
26 -import com.googlecode.genericdao.search.Search;  
27 -import com.googlecode.genericdao.search.SearchResult;  
28 -  
29 /** 33 /**
30 * <p><img src="http://centralit.com.br/images/logo_central.png"></p> 34 * <p><img src="http://centralit.com.br/images/logo_central.png"></p>
31 * 35 *
@@ -195,5 +199,46 @@ public class AtendimentoRequisicaoConsumoController extends GenericController&lt;At @@ -195,5 +199,46 @@ public class AtendimentoRequisicaoConsumoController extends GenericController&lt;At
195 199
196 return new ResponseBodyWrapper(this.atendimentoRequisicaoConsumoService.removerAtendimentoRequisicao(idsRequisicaoConsumo, idOrganizacao), this.getEditView()); 200 return new ResponseBodyWrapper(this.atendimentoRequisicaoConsumoService.removerAtendimentoRequisicao(idsRequisicaoConsumo, idOrganizacao), this.getEditView());
197 } 201 }
  202 +
  203 + @RequestMapping(value = "/finalizarRequisicoes", method = RequestMethod.POST, produces = "application/json")
  204 + @ResponseBody
  205 + public Boolean finalizarRequisicoes(@RequestBody AtendimentoVH atendimentoVH) {
  206 +
  207 + return this.atendimentoRequisicaoConsumoService.finalizarRequisicoes(atendimentoVH.getIdsRequisicao(), atendimentoVH.getIdOrganizacao());
  208 +
  209 + }
  210 +
  211 + @RequestMapping(value = "/validarFinalizacaoRequisicoes", method = RequestMethod.POST, produces = "application/json")
  212 + @ResponseBody
  213 + public Boolean validarFinalizacaoRequisicoes(@RequestBody AtendimentoVH atendimentoVH) {
  214 +
  215 + for (Long idRequisicaoConsumo : atendimentoVH.getIdsRequisicao()) {
  216 + List<AtendimentoRequisicaoConsumo> listaAtendimentoPorRequisicaoConsumo = this.atendimentoRequisicaoConsumoService.listaAtendimentoPorRequisicaoConsumo(idRequisicaoConsumo, atendimentoVH.getIdOrganizacao());
  217 + for (AtendimentoRequisicaoConsumo atendimentoRequisicaoConsumo : listaAtendimentoPorRequisicaoConsumo) {
  218 + for (AtendimentoRequisicaoConsumoItem atendimentoRequisicaoConsumoItem : atendimentoRequisicaoConsumo.getAtendimentoRequisicaoConsumoItems()) {
  219 + if(atendimentoRequisicaoConsumoItem.getRequisicaoConsumoItem().getQuantidade().compareTo(atendimentoRequisicaoConsumoItem.getQuantidade()) > 0){
  220 + return false;
  221 + }
  222 + }
  223 + }
  224 + }
  225 + return true;
  226 + }
  227 +
  228 + @RequestMapping(value = "/excluirAtendimentos", method = RequestMethod.POST, produces = "application/json")
  229 + @ResponseBody
  230 + public Boolean excluirAtendimentos(@RequestBody AtendimentoVH atendimentoVH) {
  231 +
  232 + return this.atendimentoRequisicaoConsumoService.excluirAtendimentos(atendimentoVH.getIdsRequisicao(), atendimentoVH.getIdOrganizacao());
  233 +
  234 + }
  235 +
  236 + @RequestMapping(value = "/validaQuantidadesAtendidas", method = RequestMethod.POST)
  237 + @ResponseBody
  238 + public ResponseBodyWrapper validaQuantidadesAtendidas(@RequestBody AtendimentoRequisicaoConsumo entity){
  239 +
  240 + return new ResponseBodyWrapper(this.atendimentoRequisicaoConsumoService.validarQuantidadesAtendidas(entity), this.getEditView());
  241 +
  242 + }
198 243
199 } 244 }
cit-almoxarifado-web/src/main/java/br/com/centralit/controller/RequisicaoConsumoController.java
1 package br.com.centralit.controller; 1 package br.com.centralit.controller;
2 2
3 -import java.util.Collection; 3 +import java.util.ArrayList;
4 import java.util.List; 4 import java.util.List;
5 5
6 import org.apache.commons.lang3.SerializationUtils; 6 import org.apache.commons.lang3.SerializationUtils;
7 import org.hibernate.exception.ConstraintViolationException; 7 import org.hibernate.exception.ConstraintViolationException;
8 import org.springframework.beans.factory.annotation.Autowired; 8 import org.springframework.beans.factory.annotation.Autowired;
9 import org.springframework.stereotype.Controller; 9 import org.springframework.stereotype.Controller;
  10 +import org.springframework.web.bind.annotation.PathVariable;
10 import org.springframework.web.bind.annotation.RequestBody; 11 import org.springframework.web.bind.annotation.RequestBody;
11 import org.springframework.web.bind.annotation.RequestMapping; 12 import org.springframework.web.bind.annotation.RequestMapping;
12 import org.springframework.web.bind.annotation.RequestMethod; 13 import org.springframework.web.bind.annotation.RequestMethod;
13 import org.springframework.web.bind.annotation.RequestParam; 14 import org.springframework.web.bind.annotation.RequestParam;
14 import org.springframework.web.bind.annotation.ResponseBody; 15 import org.springframework.web.bind.annotation.ResponseBody;
15 16
  17 +import com.googlecode.genericdao.search.SearchResult;
  18 +
16 import br.com.centralit.api.framework.json.ViewsAdmMateriais; 19 import br.com.centralit.api.framework.json.ViewsAdmMateriais;
17 import br.com.centralit.api.framework.json.ViewsAlmoxarifado; 20 import br.com.centralit.api.framework.json.ViewsAlmoxarifado;
18 import br.com.centralit.api.model.RequisicaoConsumo; 21 import br.com.centralit.api.model.RequisicaoConsumo;
  22 +import br.com.centralit.api.model.RequisicaoConsumoItem;
  23 +import br.com.centralit.api.service.RequisicaoConsumoItemService;
19 import br.com.centralit.api.service.RequisicaoConsumoService; 24 import br.com.centralit.api.service.RequisicaoConsumoService;
  25 +import br.com.centralit.api.viewHelper.AtendimentoVH;
20 import br.com.centralit.api.viewHelper.RequisicaoVH; 26 import br.com.centralit.api.viewHelper.RequisicaoVH;
21 import br.com.centralit.framework.controller.GenericController; 27 import br.com.centralit.framework.controller.GenericController;
22 import br.com.centralit.framework.json.ResponseBodyWrapper; 28 import br.com.centralit.framework.json.ResponseBodyWrapper;
23 import br.com.centralit.framework.json.Views; 29 import br.com.centralit.framework.json.Views;
  30 +import br.com.centralit.framework.util.UtilColecao;
  31 +import br.com.centralit.framework.view.GridVH;
  32 +import br.com.centralit.framework.view.ResultResponseVH;
24 33
25 /** 34 /**
26 * <p> 35 * <p>
@@ -60,6 +69,9 @@ public class RequisicaoConsumoController extends GenericController&lt;RequisicaoCon @@ -60,6 +69,9 @@ public class RequisicaoConsumoController extends GenericController&lt;RequisicaoCon
60 69
61 /** Atributo requisicaoConsumoService. */ 70 /** Atributo requisicaoConsumoService. */
62 private RequisicaoConsumoService requisicaoConsumoService; 71 private RequisicaoConsumoService requisicaoConsumoService;
  72 +
  73 + @Autowired
  74 + private RequisicaoConsumoItemService requisicaoConsumoItemService;
63 75
64 @Autowired 76 @Autowired
65 public RequisicaoConsumoController(RequisicaoConsumoService requisicaoConsumoService) { 77 public RequisicaoConsumoController(RequisicaoConsumoService requisicaoConsumoService) {
@@ -192,10 +204,78 @@ public class RequisicaoConsumoController extends GenericController&lt;RequisicaoCon @@ -192,10 +204,78 @@ public class RequisicaoConsumoController extends GenericController&lt;RequisicaoCon
192 */ 204 */
193 @RequestMapping(value = "/atenderRequisicoes", method = RequestMethod.POST, produces = "application/json") 205 @RequestMapping(value = "/atenderRequisicoes", method = RequestMethod.POST, produces = "application/json")
194 @ResponseBody 206 @ResponseBody
195 - public ResponseBodyWrapper atenderRequisicoes (@RequestBody Collection<Long> requisicoesIds) { 207 + public ResponseBodyWrapper atenderRequisicoes (@RequestBody AtendimentoVH atendimentoVH) {
  208 +
  209 + List<RequisicaoConsumo> requisicoes = this.requisicaoConsumoService.findRequisicoesParaAtendimento(atendimentoVH);
  210 +
  211 + if(!UtilColecao.isVazio(atendimentoVH.getIdsMaterais())){
  212 + for (RequisicaoConsumo requisicaoConsumo : requisicoes) {
  213 + List<RequisicaoConsumoItem> itens = new ArrayList<RequisicaoConsumoItem>();
  214 + for (Long idMaterial : atendimentoVH.getIdsMaterais()) {
  215 + itens.addAll(this.requisicaoConsumoItemService.findItensRequisicaoPorMaterial(requisicaoConsumo.getId(), idMaterial));
  216 +
  217 + }
  218 + requisicaoConsumo.setRequisicaoConsumoItens(itens);
  219 + }
  220 + }
  221 +
  222 + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(requisicoes, ViewsAdmMateriais.RequisicaoConsumoEditView.class);
  223 +
  224 + return responseBody;
  225 + }
  226 +
  227 + @RequestMapping(value = "/filtrarRequisicoesAtendimento", method = RequestMethod.POST, produces = "application/json")
  228 + @ResponseBody
  229 + public ResponseBodyWrapper filtrarRequisicoesAtendimento(@RequestBody AtendimentoVH atendimentoVH) {
  230 + SearchResult searchResult = requisicaoConsumoService.filtrarRequisicoesAtendimento(atendimentoVH);
  231 +
  232 + GridVH gridVH = new GridVH();
  233 + gridVH.setObjects(searchResult.getResult());
  234 + gridVH.addTotalItensTotalPages(atendimentoVH.getSearchParams(), Long.valueOf(searchResult.getTotalCount()));
  235 +
  236 + ResultResponseVH resultResponseVH = new ResultResponseVH(gridVH);
  237 +
  238 + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(resultResponseVH, this.getListView());
  239 +
  240 + return responseBody;
  241 + }
  242 +
  243 + @RequestMapping(value = "/atualizarSituacaoAtendimento", method = RequestMethod.GET, produces = "application/json")
  244 + @ResponseBody
  245 + public ResponseBodyWrapper atualizarSituacaoAtendimento(@RequestParam(value = "idRequisicao") Long idRequisicao, @RequestParam(value = "situacaoAtendimento") boolean situacaoAtendimento) {
  246 +
  247 + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(this.requisicaoConsumoService.atualizarSituacaoAtendimento(idRequisicao, situacaoAtendimento), getEditView());
  248 +
  249 + return responseBody;
  250 + }
  251 +
  252 + @RequestMapping(value = "/atualizarSituacaoAtendimentoRequisicoes", method = RequestMethod.POST, produces = "application/json")
  253 + @ResponseBody
  254 + public Boolean atualizarSituacaoAtendimentoRequisicoes(@RequestBody RequisicaoVH requisicaoVH) {
  255 +
  256 + return this.requisicaoConsumoService.atualizarSituacaoAtendimentoRequisicoes(requisicaoVH);
  257 +
  258 + }
  259 +
  260 + @RequestMapping(value = "/{id}", method = RequestMethod.GET)
  261 + @ResponseBody
  262 + public ResponseBodyWrapper getObject(@PathVariable("id") Long id) {
  263 +
  264 + RequisicaoConsumo requisicaoConsumo = this.requisicaoConsumoService.getReference(id);
  265 +
  266 + List<RequisicaoConsumoItem> itens = new ArrayList<>();
  267 +
  268 + for (RequisicaoConsumoItem requisicaoConsumoItem : requisicaoConsumo.getRequisicaoConsumoItens()) {
  269 + if(requisicaoConsumoItem.getDataInativo() == null){
  270 + itens.add(requisicaoConsumoItem);
  271 + }
  272 + }
  273 +
  274 + requisicaoConsumo.setRequisicaoConsumoItens(itens);
  275 +
  276 + ResultResponseVH<RequisicaoConsumo> resultResponseVH = new ResultResponseVH<RequisicaoConsumo>(requisicaoConsumo);
196 277
197 - ResponseBodyWrapper responseBody = new ResponseBodyWrapper(this.requisicaoConsumoService.findList((List<Long>) requisicoesIds),  
198 - ViewsAdmMateriais.RequisicaoConsumoEditView.class); 278 + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(resultResponseVH, this.getEditView());
199 279
200 return responseBody; 280 return responseBody;
201 } 281 }
cit-almoxarifado-web/src/main/java/br/com/centralit/listener/StartupListenerAlmoxarifado.java
@@ -322,6 +322,23 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat @@ -322,6 +322,23 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat
322 322
323 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ATENDIMENTO_S", "Atendimento(s)", dominio, modulo)); 323 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ATENDIMENTO_S", "Atendimento(s)", dominio, modulo));
324 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.BAIXA_S", "Baixa(s)", dominio, modulo)); 324 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.BAIXA_S", "Baixa(s)", dominio, modulo));
  325 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.EXCLUIR_ATENDIMENTO", "Excluir atendimento", dominio, modulo));
  326 +
  327 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.STATUS_ATUAL", "Status atual", dominio, modulo));
  328 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.FILTRAR", "Filtrar", dominio, modulo));
  329 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.LIMPAR_BUSCA_AVANCADA", "Limpar busca avançada", dominio, modulo));
  330 +
  331 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ATENDIMENTO_REQUISICAO", "Atendimento de requisição consumo", dominio, modulo));
  332 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ATENDIMENTO_INICIADO", "Atendimento iniciado", dominio, modulo));
  333 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.INTERROMPER_ATENDIMENTO_INICIADO", "Interromper atendimento iniciado", dominio, modulo));
  334 +
  335 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ENDERECOS_ESTOQUE", "Endereços de estoque", dominio, modulo));
  336 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.MULTIPLOS_ENDERECOS", "Multiplos Endereços", dominio, modulo));
  337 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ATENDIMENTO_INICIADO_USUARIO", "Atendimento iniciado por", dominio, modulo));
  338 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.CANCELAR_ATENDIMENTO_INICIADO", "Cancelar atendimento", dominio, modulo));
  339 +
  340 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.MOSTRAR_ATENDIMENTOS_CONCLUIDOS", "Mostrar materiais já atendidos por completo", dominio, modulo));
  341 +
325 } 342 }
326 343
327 private void gerarValidacao(Dominio dominio, Modulo modulo, List<Internacionalizacao> internacionalizacaoList) { 344 private void gerarValidacao(Dominio dominio, Modulo modulo, List<Internacionalizacao> internacionalizacaoList) {
@@ -358,12 +375,20 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat @@ -358,12 +375,20 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat
358 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.EXCLUSAO_ENTRADA_IMPOSSIVEL", "Já houve movimentação com os materiais provenientes dessa entrada, ela não poderá mais ser excluída do sistema.", dominio, modulo)); 375 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.EXCLUSAO_ENTRADA_IMPOSSIVEL", "Já houve movimentação com os materiais provenientes dessa entrada, ela não poderá mais ser excluída do sistema.", dominio, modulo));
359 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.ENDERECO_ESTOQUE_NEGADA_ALTERAR_ACOMODA_MATERIAL", "Não é permitido alterar esse endereço para não acomoda materiais, pois o endereço já está vinculado a materiais de consumo.", dominio, modulo)); 376 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.ENDERECO_ESTOQUE_NEGADA_ALTERAR_ACOMODA_MATERIAL", "Não é permitido alterar esse endereço para não acomoda materiais, pois o endereço já está vinculado a materiais de consumo.", dominio, modulo));
360 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.CONTABILIZAR_ENTRADA_ITEM_SEM_ENDERECO", "Não é possível contabilizar a entrada pois existem materiais sem endereço de estoque definido!", dominio, modulo)); 377 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.CONTABILIZAR_ENTRADA_ITEM_SEM_ENDERECO", "Não é possível contabilizar a entrada pois existem materiais sem endereço de estoque definido!", dominio, modulo));
  378 +
  379 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.SOMA_ITENS_ATENDER_MAIOR_ESTOQUE", "A soma das quantidades informadas para atendimento ultrapassam o saldo disponivel no endereço de estoque selecionado no(s) seguinte(s) material(ais):", dominio, modulo));
  380 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.SOMA_ITENS_ATENDER_MAIOR_ESTOQUE_TOOLTIP", "A soma das quantidades à atender informadas para este material ultrapassaram o saldo disponivel no(s) endereço(s) de estoque.", dominio, modulo));
  381 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.QUANTIDADE_ATENDER_SUPERIOR_SALDO_ESTOQUE", "A quantidade a ser atendida é superior ao saldo disponível no(s) seguinte(s) endereço(s) de estoque: ", dominio, modulo));
  382 +
  383 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.QUANTIDADE_ATENDIDA_MAIOR_REQUISITADA", "A quantidade a ser atendida é superior a quantidade requisitada.", dominio, modulo));
  384 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.TODAS_QUANTIDADE_ATENDIDA_EM_BRANCO", "Ao menos um item 'Atender' deve ser preenchido para registrar o atendimento.", dominio, modulo));
  385 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.REMOVER_TODOS_ITENS_REQUISICAO_CONSUMO", "Não é permitido remover todos os materiais de consumo.", dominio, modulo));
361 } 386 }
362 387
363 private void gerarMensagem(Dominio dominio, Modulo modulo, List<Internacionalizacao> internacionalizacaoList) { 388 private void gerarMensagem(Dominio dominio, Modulo modulo, List<Internacionalizacao> internacionalizacaoList) {
364 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.ATENDA_AO_MENOS_UMA_REQUISICAO", "Por favor, atenda ao menos uma requisição antes de continuar.", dominio, modulo)); 389 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.ATENDA_AO_MENOS_UMA_REQUISICAO", "Por favor, atenda ao menos uma requisição antes de continuar.", dominio, modulo));
365 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.CATALOGOS_CADASTRADOS_OPCOES", "Os seguintes catálogos existem no sistema com a mesma lista de materiais que você selecionou no seu cadastro, você pode selecionar uma das opções ou continuar salvando o cadastro atual.", dominio, modulo)); 390 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.CATALOGOS_CADASTRADOS_OPCOES", "Os seguintes catálogos existem no sistema com a mesma lista de materiais que você selecionou no seu cadastro, você pode selecionar uma das opções ou continuar salvando o cadastro atual.", dominio, modulo));
366 - internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.CONFIRMA_FINALIZAR_REQUISICOES", "Confirma a operação de finzalizar a(s) requisição(ões)?", dominio, modulo)); 391 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.CONFIRMA_FINALIZAR_REQUISICOES", "Confirma a operação de finalizar a(s) requisição(ões)?", dominio, modulo));
367 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.MATERIAIS_CONSUMO_REQUISICAO_OBRIGATORIO", "Materiais de consumo são obrigatórios!", dominio, modulo)); 392 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.MATERIAIS_CONSUMO_REQUISICAO_OBRIGATORIO", "Materiais de consumo são obrigatórios!", dominio, modulo));
368 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.MATERIAIS_QUANTIDADE_ZERO", "A quantidade dos itens que estão selecionados para baixa não pode ser zero!", dominio, modulo)); 393 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.MATERIAIS_QUANTIDADE_ZERO", "A quantidade dos itens que estão selecionados para baixa não pode ser zero!", dominio, modulo));
369 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.MATERIAL_ESTOQUE_SEM_ESTOQUE", "O material selecionado não contém saldo no estoque", dominio, modulo)); 394 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.MATERIAL_ESTOQUE_SEM_ESTOQUE", "O material selecionado não contém saldo no estoque", dominio, modulo));
@@ -397,6 +422,26 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat @@ -397,6 +422,26 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat
397 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.ENTRADA_ENDERECOS_ESTOQUE_DESVINCULADOS_MATERIAL", "Todos os materiais desta entrada tiveram seu endereço de estoque retirados!", dominio, modulo)); 422 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.ENTRADA_ENDERECOS_ESTOQUE_DESVINCULADOS_MATERIAL", "Todos os materiais desta entrada tiveram seu endereço de estoque retirados!", dominio, modulo));
398 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.ENTRADA_ENDERECOS_ESTOQUE_PADRAO_VINCULADOS_MATERIAL", "Todos os materiais desta entrada que tinham endereços padrões neste almoxarifado foram vinculados a ele!", dominio, modulo)); 423 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.ENTRADA_ENDERECOS_ESTOQUE_PADRAO_VINCULADOS_MATERIAL", "Todos os materiais desta entrada que tinham endereços padrões neste almoxarifado foram vinculados a ele!", dominio, modulo));
399 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.EXCLUSAO_ULTIMO_ITEM_ENTRADA", "É necessário existir ao menos um item nesta lista, para continuar exclua a entrada inteira ou adicione outro item primeiro!", dominio, modulo)); 424 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.EXCLUSAO_ULTIMO_ITEM_ENTRADA", "É necessário existir ao menos um item nesta lista, para continuar exclua a entrada inteira ou adicione outro item primeiro!", dominio, modulo));
  425 +
  426 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.FINALIZAR_ATENDIMENTO_SOMENTE_ATENDIMENTO_PARCIAL", "A finalização de atendimento somente é permitido para requisições com a situação igual a 'Atendida parcialmente'.", dominio, modulo));
  427 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.EXCLUIR_ATENDIMENTO_SOMENTE_ATENDIMENTO_PARCIAL_FINALIZADA", "A exclusão de atendimento somente é permitido para requisições com a situação igual a 'Atendida parcialmente' ou 'Finalizada'.", dominio, modulo));
  428 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.CONFIRMA_FINALIZAR_REQUISICAO", "Confirma finalização das requisições selecionados?", dominio, modulo));
  429 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.CONFIRMA_EXCLUSAO_ATENDIMENTO_REQUISICAO", "Confirma exclusão dos atendimentos selecionados?", dominio, modulo));
  430 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.NAO_PERMITIDO_ATENDER_REQUISICAO_FINALIZADA", "Atendimento não permitido pois há requisições finalizadas selecionadas para atendimento. Desmarque as requisições finalizadas e clique novamente em 'Atender'.", dominio, modulo));
  431 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.DATA_FINALIZACAO_FORA_REFERENCIA", "Exclusão não permitida. Data de finalização da requisição %s fora da referência vigente.", dominio, modulo));
  432 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.INFO_FILTRO_MATERIAL_REQUISICAO", "O atendimento será realizado para os materiais selecionados na busca avançada.", dominio, modulo));
  433 +
  434 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.REMOVER_REQUISICAO_ATENDIMENTO", "Remover requisição deste atendimento", dominio, modulo));
  435 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.REQUISICAO_EM_ATENDIMENTO", "está em atendimento pelo atendente ", dominio, modulo));
  436 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.DESMARQUE_REQUISICAO_EM_ATENDIMENTO", "Desmarque esta requisição de consumo para prosseguir o atendimento.", dominio, modulo));
  437 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.ATENDER_MAIS_DE_UM_ENDERECO", "Atender utilizando mais de um endereco", dominio, modulo));
  438 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.INTERROMPER_ATENDIMENTO_NAO_INICIADO", "Somente é permitido realizar essa ação para requisições que foram iniciadas o atendimento por você. Desmarque as requisições que não foram iniciadas o atendimento para prosseguir.", dominio, modulo));
  439 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.INTERROMPER_ATENDIMENTO_INICIADO_OUTRO_ATENDENTE", "Somente é permitido realizar essa ação para requisições que foram iniciadas o atendimento por você. Desmarque as requisições que foram iniciadas por outros atendentes para prosseguir.", dominio, modulo));
  440 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.CONFIRMA_FINALIZAR_REQUISICAO_NAO_ATENDIDA_COMPLETAMENTE", "Há requisições selecionados que não tiveram o atendimento completo, deseja realmente finalizar essas requisições?", dominio, modulo));
  441 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.CONFIRMA_ALERTA_EXCLUSAO_ATENDIMENTO_REQUISICAO", "Deseja mesmo excluir o atendimento da requisição selecionada? Essa ação devolverá a quantidade de materiais fornecida para o estoque, bem como seus os movimentos financeiros e retornará a requisição para o status ‘Pronta para atendimento’.", dominio, modulo));
  442 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.CONFIRMA_SALVAR_FINALIZAR_REQUISICAO", "Confirma a operação de finalizar a requisição?", dominio, modulo));
  443 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.INFO_ATENDIMENTOS_INICIADOS", "Os atendimentos destas requisições estão disponíveis apenas para você até você salvar ou cancelar as mesmas. Outro usuário não poderá acessá-las enquanto isso.", dominio, modulo));
  444 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.INFO_ATENDIMENTO_INICIADO", "O atendimento dessa requisição está disponível apenas para você até você salvar ou cancelar a mesma. Outro usuário não poderá acessá-la enquanto isso.", dominio, modulo));
400 } 445 }
401 } 446 }
402 447
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/AtendimentoRequisicaoConsumoController.js
@@ -10,6 +10,7 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;, @@ -10,6 +10,7 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;,
10 'RequisicaoConsumoRepository', 10 'RequisicaoConsumoRepository',
11 'EstruturaOrganizacionalAlmoxarifadoRepository', 11 'EstruturaOrganizacionalAlmoxarifadoRepository',
12 'DominioRepository', 'EstruturaOrganizacionalPatrimonioRepository', 12 'DominioRepository', 'EstruturaOrganizacionalPatrimonioRepository',
  13 + 'MaterialLocalEstoqueRepository',
13 function AtendimentoRequisicaoConsumoController($scope, 14 function AtendimentoRequisicaoConsumoController($scope,
14 $translate, 15 $translate,
15 $timeout, 16 $timeout,
@@ -18,16 +19,15 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;, @@ -18,16 +19,15 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;,
18 AtendimentoRequisicaoConsumoItemRepository, 19 AtendimentoRequisicaoConsumoItemRepository,
19 RequisicaoConsumoRepository, 20 RequisicaoConsumoRepository,
20 EstruturaOrganizacionalAlmoxarifadoRepository, 21 EstruturaOrganizacionalAlmoxarifadoRepository,
21 - DominioRepository, EstruturaOrganizacionalPatrimonioRepository) { 22 + DominioRepository, EstruturaOrganizacionalPatrimonioRepository,
  23 + MaterialLocalEstoqueRepository) {
22 24
23 $scope.TIPO_STATUS_REQUISICAO = "tipoStatusRequisicao"; 25 $scope.TIPO_STATUS_REQUISICAO = "tipoStatusRequisicao";
24 26
  27 + $scope.TIPO_STATUS_ATENDIDA_PARCIALMENTE = 1;
  28 +
25 $scope.TIPO_STATUS_PRONTA_PARA_ATENDIMENTO = 2; 29 $scope.TIPO_STATUS_PRONTA_PARA_ATENDIMENTO = 2;
26 30
27 - $scope.TIPO_STATUS_ATENDIDA_PARCIALMENTE = 3;  
28 -  
29 - $scope.TIPO_STATUS_ATENDIDA = 4;  
30 -  
31 $scope.TIPO_STATUS_FINALIZADA = 5; 31 $scope.TIPO_STATUS_FINALIZADA = 5;
32 32
33 $scope.atendimentoRequisicaoConsumo = {}; 33 $scope.atendimentoRequisicaoConsumo = {};
@@ -56,7 +56,13 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;, @@ -56,7 +56,13 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;,
56 56
57 // Atualiza pagina de pesquisa 57 // Atualiza pagina de pesquisa
58 $scope.atualizaPaginaPesquisa = function () { 58 $scope.atualizaPaginaPesquisa = function () {
  59 +
  60 + var requisicaoVH = { idsRequisicoes : $scope.idsRequisicoesSelecionados, statusAtendimentoRequsicao : false};
  61 +
  62 + RequisicaoConsumoRepository.atualizarSituacaoAtendimentoRequisicoes(requisicaoVH).then(function(result) {
59 angular.element('#searchAtendimentoRequisicaoConsumo').scope().fetchResult(); 63 angular.element('#searchAtendimentoRequisicaoConsumo').scope().fetchResult();
  64 + });
  65 +
60 }; 66 };
61 67
62 $scope.removerAtendimentoRequisicao = function(){ 68 $scope.removerAtendimentoRequisicao = function(){
@@ -83,6 +89,24 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;, @@ -83,6 +89,24 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;,
83 } 89 }
84 }); 90 });
85 }; 91 };
  92 +
  93 + $scope.removerRequisicaoDoAtendimento = function(index){
  94 + $scope.$openModalConfirm({
  95 + message: $translate.instant('MSG.CONFIRMA_EXCLUSAO'),
  96 + callback: function(){
  97 + var requisicaoRemover = $scope.atendimentos[index];
  98 + RequisicaoConsumoRepository.atualizarSituacaoAtendimento(requisicaoRemover.requisicaoConsumo.id, false).then(function(result) {
  99 + $scope.atendimentos.splice(index, 1);
  100 + $scope.$modalConfirmInstance.dismiss('cancel');
  101 + if($scope.atendimentos.length == 0){
  102 + $scope.$showPageSearchWorkspace($scope.workspace);
  103 + $scope.atualizaPaginaPesquisa();
  104 + }
  105 + });
  106 +
  107 + }
  108 + });
  109 + };
86 110
87 111
88 // Limpa o formulario preenchido 112 // Limpa o formulario preenchido
@@ -208,17 +232,6 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;, @@ -208,17 +232,6 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;,
208 angular.copy(filterCriteriaTemp, $scope.filterCriteria); 232 angular.copy(filterCriteriaTemp, $scope.filterCriteria);
209 233
210 234
211 -// EstruturaOrganizacionalPatrimonioRepository.getAlmoxarifadoPadrao($scope.usuarioLogado.organizacao.id).then(function(result){  
212 -// $scope.estruturaAlmoxarifadoPadrao = {};  
213 -// if(result.originalElement.estruturaOrganizacional){  
214 -// $scope.estruturaAlmoxarifadoPadrao = result.originalElement.estruturaOrganizacional;  
215 -// }  
216 -// });  
217 -  
218 -  
219 - DominioRepository.buscaDominioByCodigoAndChave($scope.TIPO_STATUS_ATENDIDA ,$scope.TIPO_STATUS_REQUISICAO).then(function(result) {  
220 - $scope.tipoStatusRequisicaoAtendida = result.originalElement;  
221 - });  
222 DominioRepository.buscaDominioByCodigoAndChave($scope.TIPO_STATUS_ATENDIDA_PARCIALMENTE ,$scope.TIPO_STATUS_REQUISICAO).then(function(result) { 235 DominioRepository.buscaDominioByCodigoAndChave($scope.TIPO_STATUS_ATENDIDA_PARCIALMENTE ,$scope.TIPO_STATUS_REQUISICAO).then(function(result) {
223 $scope.tipoStatusRequisicaoAtendidaParcialmente = result.originalElement; 236 $scope.tipoStatusRequisicaoAtendidaParcialmente = result.originalElement;
224 }); 237 });
@@ -271,62 +284,115 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;, @@ -271,62 +284,115 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;,
271 }); 284 });
272 }; 285 };
273 286
274 - $scope.prepararAtendimentoRequisicoes = function(listaSelecionados) {  
275 - $scope.edit = true; 287 + $scope.prepararAtendimentoRequisicoes = function(atendimentoVH, edit) {
  288 + $scope.edit = edit;
276 $scope.atendimentos = []; 289 $scope.atendimentos = [];
277 $scope.idsRequisicoesSelecionados = []; 290 $scope.idsRequisicoesSelecionados = [];
  291 + $scope.atendimentoRequisicaoConsumo.dataAtendimento = new Date();
278 $scope.requisicoesSelecionadas = []; 292 $scope.requisicoesSelecionadas = [];
279 - $scope.requisicoesSelecionadas = listaSelecionados;  
280 - listaSelecionados.forEach(function(requisicao){  
281 - $scope.idsRequisicoesSelecionados.push(requisicao.id);  
282 - }); 293 + $scope.requisicoesSelecionadas = atendimentoVH.requisicoesSelecionadas;
  294 +
  295 + delete atendimentoVH.requisicoesSelecionadas;
  296 +
  297 + $scope.idsRequisicoesSelecionados = atendimentoVH.idsRequisicao;
  298 +
283 if ($scope.idsRequisicoesSelecionados && $scope.requisicoesSelecionadas && $scope.idsRequisicoesSelecionados.length > 0) { 299 if ($scope.idsRequisicoesSelecionados && $scope.requisicoesSelecionadas && $scope.idsRequisicoesSelecionados.length > 0) {
284 -  
285 - if (verificarSelecaoRequisicaoAtendida()) {  
286 - $scope.showAlert("warning", $translate.instant('ALMOXARIFADO.MSG.REQUISICAO_JA_ATENDIDA'));  
287 - } else {  
288 - iniciarAtendimentoRequisicoes();  
289 - } 300 + atendimentoVH.bloquearAtendimento = $scope.edit;
  301 + iniciarAtendimentoRequisicoes(atendimentoVH);
290 } else { 302 } else {
291 $scope.showAlert("warning", $translate.instant('MSG.NENHUM_ITEM_SELECIONADO')); 303 $scope.showAlert("warning", $translate.instant('MSG.NENHUM_ITEM_SELECIONADO'));
292 } 304 }
293 }; 305 };
294 306
295 - function verificarSelecaoRequisicaoAtendida() {  
296 - var hasRequisicaoAtendida = false;  
297 - $scope.requisicoesSelecionadas.forEach(function (requisicao) {  
298 - if (requisicao["tipoStatusRequisicao.codigo"] == $scope.TIPO_STATUS_ATENDIDA) {  
299 - hasRequisicaoAtendida = true;  
300 - return;  
301 - }  
302 - });  
303 -  
304 - return hasRequisicaoAtendida;  
305 - }  
306 -  
307 - function iniciarAtendimentoRequisicoes() { 307 + function iniciarAtendimentoRequisicoes(atendimentoVH) {
308 $scope.setLoadingPesquisa(true); 308 $scope.setLoadingPesquisa(true);
309 - RequisicaoConsumoRepository.atenderRequisicoes($scope.idsRequisicoesSelecionados).then(function(result){ 309 + RequisicaoConsumoRepository.atenderRequisicoes(atendimentoVH).then(function(result){
310 result.forEach(function (requisicao) { 310 result.forEach(function (requisicao) {
311 $scope.addRequisicaoConsumoAoAtendimento(requisicao.originalElement); 311 $scope.addRequisicaoConsumoAoAtendimento(requisicao.originalElement);
312 }); 312 });
313 - $scope.$openModal('/cit-almoxarifado-web/html/atendimentoRequisicaoConsumo/atendimentoRequisicaoConsumoEditModal.html', 'lg'); 313 + //$scope.$openModal('/cit-almoxarifado-web/html/atendimentoRequisicaoConsumo/atendimentoRequisicaoConsumoEditModal.html', 'lg');
  314 + $scope.$showPageEditWorkspace($scope.workspace);
314 $scope.setLoading(false); 315 $scope.setLoading(false);
315 }); 316 });
316 } 317 }
317 318
318 $scope.addRequisicaoConsumoAoAtendimento = function(req){ 319 $scope.addRequisicaoConsumoAoAtendimento = function(req){
319 - var atendimento = {requisicaoConsumo : req};  
320 - if(atendimento.requisicaoConsumo.tipoStatusRequisicao.codigo == $scope.TIPO_STATUS_PRONTA_PARA_ATENDIMENTO  
321 - || atendimento.requisicaoConsumo.tipoStatusRequisicao.codigo == $scope.TIPO_STATUS_ATENDIDA_PARCIALMENTE){ 320 + if(req.atendimentoRequisicaoConsumo){
  321 + var atendimento = req.atendimentoRequisicaoConsumo;
  322 + delete req.atendimentoRequisicaoConsumo;
  323 +
  324 + atendimento.requisicaoConsumo = req;
  325 +
  326 +
  327 + var contem = false;
  328 + for(var index = atendimento.atendimentoRequisicaoConsumoItems.length - 1; index >= 0; index--){
  329 + atendimento.requisicaoConsumo.requisicaoConsumoItens.forEach(function(item){
  330 + if(item.id === atendimento.atendimentoRequisicaoConsumoItems[index].requisicaoConsumoItem.id){
  331 + contem = true;
  332 + }
  333 + });
  334 +
  335 + if(!contem){
  336 + atendimento.atendimentoRequisicaoConsumoItems.splice(index, 1);
  337 + }else{
  338 + contem = false;
  339 + }
  340 + }
  341 +
  342 + atendimento.atendimentoRequisicaoConsumoItems.forEach(function(atendimentoItem){
  343 + atendimentoItem.$locaisEstoque = [];
  344 + MaterialLocalEstoqueRepository.buscarLocaisEstoquePorIdMaterialIdAlmoxarifado(atendimentoItem.material.id, req.almoxarifado.id).then(function(result) {
  345 + result.forEach(function(localEstoque){
  346 + var atendimentoRequisicaoConsumoItemEndereco = {
  347 + materialLocalEstoque: localEstoque.originalElement
  348 + };
  349 +
  350 + atendimentoItem.$locaisEstoque.push(atendimentoRequisicaoConsumoItemEndereco);
  351 + });
  352 + });
  353 +
  354 + atendimentoItem.$somaQtdAtendida = 0;
  355 + if(atendimentoItem.atendimentoRequisicaoConsumoItemEnderecos.length > 1){
  356 + atendimentoItem.atendimentoRequisicaoConsumoItemEnderecos.forEach(function(atendimentoItemEndereco){
  357 + atendimentoItem.$somaQtdAtendida += parseFloat(atendimentoItemEndereco.quantidade);
  358 + });
  359 + }
  360 +
  361 + buscarInformacoesParaAtendimento(atendimentoItem);
  362 + });
  363 + $scope.atendimentos.push(atendimento);
  364 +
  365 + }else{
  366 + var atendimento = {requisicaoConsumo : req};
  367 +
322 atendimento.requisicaoConsumo.requisicaoConsumoItens.forEach(function (requisicaoConsumoItem) { 368 atendimento.requisicaoConsumo.requisicaoConsumoItens.forEach(function (requisicaoConsumoItem) {
323 if(!atendimento.atendimentoRequisicaoConsumoItems){ 369 if(!atendimento.atendimentoRequisicaoConsumoItems){
324 atendimento.atendimentoRequisicaoConsumoItems = []; 370 atendimento.atendimentoRequisicaoConsumoItems = [];
325 } 371 }
  372 +
326 var atendimentoItem = { 373 var atendimentoItem = {
327 material : requisicaoConsumoItem.materialConsumo, 374 material : requisicaoConsumoItem.materialConsumo,
328 - requisicaoConsumoItem : requisicaoConsumoItem 375 + requisicaoConsumoItem : requisicaoConsumoItem,
  376 + $locaisEstoque: [],
  377 + atendimentoRequisicaoConsumoItemEnderecos: []
329 }; 378 };
  379 +
  380 + MaterialLocalEstoqueRepository.buscarLocaisEstoquePorIdMaterialIdAlmoxarifado(requisicaoConsumoItem.materialConsumo.id, req.almoxarifado.id).then(function(result) {
  381 + result.forEach(function(localEstoque){
  382 + var atendimentoRequisicaoConsumoItemEndereco = {
  383 + materialLocalEstoque: localEstoque.originalElement
  384 + };
  385 +
  386 + atendimentoItem.$locaisEstoque.push(atendimentoRequisicaoConsumoItemEndereco);
  387 +
  388 + if(localEstoque.localPrincipal){
  389 + atendimentoItem.atendimentoRequisicaoConsumoItemEnderecos.push(atendimentoRequisicaoConsumoItemEndereco);
  390 + }
  391 + });
  392 + });
  393 +
  394 + buscarInformacoesParaAtendimento(atendimentoItem);
  395 +
330 atendimento.atendimentoRequisicaoConsumoItems.push(atendimentoItem); 396 atendimento.atendimentoRequisicaoConsumoItems.push(atendimentoItem);
331 }); 397 });
332 $scope.atendimentos.push(atendimento); 398 $scope.atendimentos.push(atendimento);
@@ -352,16 +418,39 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;, @@ -352,16 +418,39 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;,
352 $scope.finalizarRequisicoes($scope.atendimentoRequisicaoConsumo); 418 $scope.finalizarRequisicoes($scope.atendimentoRequisicaoConsumo);
353 } else { 419 } else {
354 $scope.setLoadingSalva(true); 420 $scope.setLoadingSalva(true);
355 - AtendimentoRequisicaoConsumoRepository.save($scope.atendimentoRequisicaoConsumo).then(function(result) {  
356 - $scope.resetForm();  
357 - $scope.listaSelecionados = [];  
358 - $scope.showAlert("success", $translate.instant('MSG.REGISTRO_SALVO'));  
359 - $scope.atendimentoRequisicaoConsumoForm.$submitted = false;  
360 - $scope.$modalInstance.dismiss('cancel');  
361 - angular.element('#searchAtendimentoRequisicaoConsumo').scope().fetchResult();  
362 - $scope.resetForm();  
363 - $scope.setLoading(false);  
364 - }); 421 + AtendimentoRequisicaoConsumoRepository.validaQuantidadesAtendidas($scope.atendimentoRequisicaoConsumo).then(function(result){
  422 + if(result.materiaisLocalEstoque.length > 0){
  423 + $scope.atendimentos.forEach(function(atendimento){
  424 + atendimento.atendimentoRequisicaoConsumoItems.forEach(function(atendimentoItem){
  425 + atendimentoItem.atendimentoRequisicaoConsumoItemEnderecos.forEach(function(itemEndereco){
  426 + result.materiaisLocalEstoque.forEach(function(localEstoque){
  427 + if(itemEndereco.materialLocalEstoque.id === localEstoque.id){
  428 + atendimentoItem.$hasError = true;
  429 + itemEndereco.$hasError = true;
  430 + }
  431 + });
  432 +
  433 + });
  434 + });
  435 + });
  436 + $scope.showAlert("error", result.mensagemErro, " ", false);
  437 + $scope.setLoading(false);
  438 + }else{
  439 + AtendimentoRequisicaoConsumoRepository.save($scope.atendimentoRequisicaoConsumo).then(function(result) {
  440 + $scope.resetForm();
  441 + $scope.listaSelecionados = [];
  442 + $scope.showAlert("success", $translate.instant('MSG.REGISTRO_SALVO'));
  443 + $scope.atendimentoRequisicaoConsumoForm.$submitted = false;
  444 + angular.element('#searchAtendimentoRequisicaoConsumo').scope().fetchResult();
  445 + $scope.resetForm();
  446 +
  447 + $scope.$showPageSearchWorkspace($scope.workspace);
  448 + $scope.atualizaPaginaPesquisa();
  449 +
  450 + $scope.setLoading(false);
  451 + });
  452 + }
  453 + });
365 } 454 }
366 } else { 455 } else {
367 $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.MSG.ATENDA_AO_MENOS_UMA_REQUISICAO'), " ", false); 456 $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.MSG.ATENDA_AO_MENOS_UMA_REQUISICAO'), " ", false);
@@ -371,6 +460,70 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;, @@ -371,6 +460,70 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;,
371 } 460 }
372 461
373 }; 462 };
  463 +
  464 + $scope.validarQuantidadesAtendidas = function(){
  465 + $scope.setLoading(true);
  466 + $scope.atendimentoRequisicaoConsumo.atendimentos = [];
  467 + angular.copy($scope.atendimentos, $scope.atendimentoRequisicaoConsumo.atendimentos);
  468 +
  469 + limparLinhasComErro();
  470 +
  471 + AtendimentoRequisicaoConsumoRepository.validaQuantidadesAtendidas($scope.atendimentoRequisicaoConsumo).then(function(result){
  472 + if(result.materiaisLocalEstoque.length > 0){
  473 + $scope.atendimentos.forEach(function(atendimento){
  474 + atendimento.atendimentoRequisicaoConsumoItems.forEach(function(atendimentoItem){
  475 + atendimentoItem.atendimentoRequisicaoConsumoItemEnderecos.forEach(function(itemEndereco){
  476 + result.materiaisLocalEstoque.forEach(function(localEstoque){
  477 + if(itemEndereco.materialLocalEstoque.id === localEstoque.id){
  478 + atendimentoItem.$hasError = true;
  479 + itemEndereco.$hasError = true;
  480 + }
  481 + });
  482 + });
  483 + });
  484 + });
  485 + $scope.showAlert("error", result.mensagemErro, " ", false);
  486 + $scope.setLoading(false);
  487 + }
  488 +
  489 + $scope.setLoading(false);
  490 + });
  491 + }
  492 +
  493 + $scope.validarQuantidadeAtendidaMaiorQuantidadeRequisitada = function(atendimentoItem){
  494 + atendimentoItem.$somaQtdAtendida = 0;
  495 + atendimentoItem.atendimentoRequisicaoConsumoItemEnderecos.forEach(function(atendimentoItemEndereco){
  496 + atendimentoItem.$somaQtdAtendida += parseFloat(atendimentoItemEndereco.quantidade);
  497 + });
  498 +
  499 + if(atendimentoItem.$somaQtdAtendida > atendimentoItem.requisicaoConsumoItem.quantidade){
  500 + atendimentoItem.$hasError = true;
  501 + $scope.showAlert("error", $translate.instant('ALMOXARIFADO.VALIDACAO.QUANTIDADE_ATENDIDA_MAIOR_REQUISITADA'), " ", false);
  502 + }
  503 + }
  504 +
  505 + $scope.validarQuantidades = function(atendimentoItem){
  506 + $scope.validarQuantidadesAtendidas();
  507 + $scope.validarQuantidadeAtendidaMaiorQuantidadeRequisitada(atendimentoItem);
  508 + }
  509 +
  510 + function limparLinhasComErro(){
  511 + $scope.atendimentos.forEach(function(atendimento){
  512 + atendimento.atendimentoRequisicaoConsumoItems.forEach(function(atendimentoItem){
  513 + atendimentoItem.atendimentoRequisicaoConsumoItemEnderecos.forEach(function(itemEndereco){
  514 + atendimentoItem.$hasError = false;
  515 + itemEndereco.$hasError = false;
  516 + });
  517 + });
  518 + });
  519 + }
  520 +
  521 + $scope.teste = function(item){
  522 + if(item){
  523 + $scope.aplicarValidacaoDecimal(item);
  524 + $scope.validarQuantidadesAtendidas();
  525 + }
  526 + }
374 527
375 $scope.saveEdit = function(isFinalizado){ 528 $scope.saveEdit = function(isFinalizado){
376 $scope.atendimentoRequisicaoConsumoForm.$submitted = true; 529 $scope.atendimentoRequisicaoConsumoForm.$submitted = true;
@@ -451,8 +604,9 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;, @@ -451,8 +604,9 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;,
451 $scope.finalizarRequisicoes = function(atendimentoRequisicaoConsumo){ 604 $scope.finalizarRequisicoes = function(atendimentoRequisicaoConsumo){
452 if($scope.idsRequisicoesSelecionados && $scope.idsRequisicoesSelecionados.length > 0){ 605 if($scope.idsRequisicoesSelecionados && $scope.idsRequisicoesSelecionados.length > 0){
453 $scope.$openModalConfirm({ 606 $scope.$openModalConfirm({
454 - message: $translate.instant('ALMOXARIFADO.MSG.CONFIRMA_FINALIZAR_REQUISICOES'), 607 + message: $translate.instant('ALMOXARIFADO.MSG.CONFIRMA_SALVAR_FINALIZAR_REQUISICAO'),
455 callback: function () { 608 callback: function () {
  609 + $scope.$modalConfirmInstance.dismiss('cancel');
456 $scope.setLoadingSalva(true); 610 $scope.setLoadingSalva(true);
457 AtendimentoRequisicaoConsumoRepository.save(atendimentoRequisicaoConsumo).then(function(result) { 611 AtendimentoRequisicaoConsumoRepository.save(atendimentoRequisicaoConsumo).then(function(result) {
458 var idsRequisicoesSelecionados = []; 612 var idsRequisicoesSelecionados = [];
@@ -462,13 +616,13 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;, @@ -462,13 +616,13 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;,
462 RequisicaoConsumoRepository.finalizarRequisicoes({idsRequisicoes : idsRequisicoesSelecionados, 616 RequisicaoConsumoRepository.finalizarRequisicoes({idsRequisicoes : idsRequisicoesSelecionados,
463 dataFinalizacao : atendimentoRequisicaoConsumo.$dataFinalizacao}).then(function() { 617 dataFinalizacao : atendimentoRequisicaoConsumo.$dataFinalizacao}).then(function() {
464 angular.element('#searchAtendimentoRequisicaoConsumo').scope().fetchResult(); 618 angular.element('#searchAtendimentoRequisicaoConsumo').scope().fetchResult();
465 - $scope.$modalConfirmInstance.dismiss('cancel');  
466 - $scope.$modalInstance.dismiss('cancel');  
467 $scope.listaSelecionados = []; 619 $scope.listaSelecionados = [];
468 $scope.resetForm(); 620 $scope.resetForm();
469 $scope.showAlert("success", $translate.instant('MSG.REGISTRO_SALVO')); 621 $scope.showAlert("success", $translate.instant('MSG.REGISTRO_SALVO'));
470 $scope.atendimentoRequisicaoConsumoForm.$submitted = false; 622 $scope.atendimentoRequisicaoConsumoForm.$submitted = false;
471 $scope.setLoading(false); 623 $scope.setLoading(false);
  624 + $scope.$showPageSearchWorkspace($scope.workspace);
  625 + $scope.atualizaPaginaPesquisa();
472 }); 626 });
473 }); 627 });
474 } 628 }
@@ -478,21 +632,94 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;, @@ -478,21 +632,94 @@ citApp.controller( &#39;AtendimentoRequisicaoConsumoController&#39;,
478 } 632 }
479 }; 633 };
480 634
481 - $scope.buscarInformacoesParaAtendimento = function(atendimentoRequisicaoConsumoItem){ 635 + function buscarInformacoesParaAtendimento(atendimentoRequisicaoConsumoItem){
482 atendimentoRequisicaoConsumoItem.organizacao = $scope.estruturaAlmoxarifadoPadrao; 636 atendimentoRequisicaoConsumoItem.organizacao = $scope.estruturaAlmoxarifadoPadrao;
483 - atendimentoRequisicaoConsumoItem.$verInfo = !atendimentoRequisicaoConsumoItem.$verInfo;  
484 - if(atendimentoRequisicaoConsumoItem.$verInfo){  
485 - $scope.setLoadingPesquisa(true);  
486 - AtendimentoRequisicaoConsumoItemRepository.getInformacoesParaRequisicao(atendimentoRequisicaoConsumoItem).then(function(result) {  
487 - atendimentoRequisicaoConsumoItem.$info = result.originalElement;  
488 - $scope.scrollToCadastro('#tableAtendimentos');  
489 - $scope.setLoading(false);  
490 - });  
491 - } 637 + AtendimentoRequisicaoConsumoItemRepository.getInformacoesParaRequisicao(atendimentoRequisicaoConsumoItem).then(function(result) {
  638 + atendimentoRequisicaoConsumoItem.$info = result.originalElement;
  639 + });
492 }; 640 };
493 641
494 $scope.apresentarInfoAtendimentoItem = function(atendimento){ 642 $scope.apresentarInfoAtendimentoItem = function(atendimento){
495 atendimento.$verInfo = !atendimento.$verInfo; 643 atendimento.$verInfo = !atendimento.$verInfo;
496 }; 644 };
  645 +
  646 + $scope.openModalEnderecosMaterial = function(enderecosItem, enderecosAdicionados, atendimento, atendimentoItem){
  647 + $scope.atendimentoEmEdicao = atendimento;
  648 + $scope.atendimentoItemEmEdicao = atendimentoItem;
  649 +
  650 + $scope.listaEnderecosSelect = [];
  651 +
  652 + if(enderecosAdicionados[0] && enderecosAdicionados[0].materialLocalEstoque){
  653 + if(enderecosAdicionados.length > 0){
  654 + enderecosItem.forEach(function(enderecoItem){
  655 + var contem = false;
  656 + enderecosAdicionados.forEach(function(enderecoAdicionado){
  657 + if(enderecoItem.materialLocalEstoque.id === enderecoAdicionado.materialLocalEstoque.id){
  658 + contem = true;
  659 + }
  660 + });
  661 +
  662 + if(!contem){
  663 + $scope.listaEnderecosSelect.push(enderecoItem);
  664 + }else{
  665 + contem = false;
  666 + }
  667 + });
  668 + }else{
  669 + $scope.listaEnderecosSelect = angular.copy(enderecosItem);
  670 + }
  671 + }else{
  672 + enderecosAdicionados = [];
  673 + $scope.listaEnderecosSelect = angular.copy(enderecosItem);
  674 + }
  675 +
  676 + $scope.listaEnderecosAdicionados = enderecosAdicionados;
  677 + $scope.$openModal('modal-atendimento-item-enderecos.html', 'md');
  678 + }
  679 +
  680 + $scope.addEnderecoToList = function(item){
  681 + if($scope.listaEnderecosAdicionados.indexOf(item) == -1){
  682 + $scope.listaEnderecosAdicionados.push(item);
  683 + $scope.listaEnderecosSelect.splice($scope.listaEnderecosSelect.indexOf(item), 1);
  684 + }
  685 + };
  686 +
  687 + $scope.selectAllEnderecos = function(check){
  688 + $scope.listaEnderecosAdicionados.forEach(function (item) {
  689 + item.$checkedChBox = check;
  690 + });
  691 + };
  692 +
  693 + $scope.removeEnderecoFromList = function(){
  694 + for(var i = $scope.listaEnderecosAdicionados.length - 1; i >= 0; i--){
  695 + if($scope.listaEnderecosAdicionados[i].$checkedChBox){
  696 + $scope.listaEnderecosSelect.push($scope.listaEnderecosAdicionados[i]);
  697 + $scope.listaEnderecosAdicionados.splice(i, 1);
  698 + }
  699 + }
  700 + }
  701 +
  702 + $scope.saveListaEnderecos = function(){
  703 + var hasError = false;
  704 + var mensagemErro = $translate.instant('ALMOXARIFADO.VALIDACAO.QUANTIDADE_ATENDER_SUPERIOR_SALDO_ESTOQUE');
  705 + $scope.atendimentoItemEmEdicao.$somaQtdAtendida = 0;
  706 + $scope.listaEnderecosAdicionados.forEach(function(item){
  707 + if(item.materialLocalEstoque.quantidade + parseFloat(item.quantidadeAnterior) < parseFloat(item.quantidade)){
  708 + hasError = true;
  709 + mensagemErro += "<br />" + item.materialLocalEstoque.endereco.descricao;
  710 + }
  711 +
  712 + if(item.quantidade && !hasError){
  713 + $scope.atendimentoItemEmEdicao.$somaQtdAtendida += parseFloat(item.quantidade);
  714 + }
  715 + });
  716 +
  717 + if(!hasError){
  718 + $scope.atendimentoItemEmEdicao.atendimentoRequisicaoConsumoItemEnderecos = angular.copy($scope.listaEnderecosAdicionados);
  719 + $scope.$modalInstance.dismiss('cancel');
  720 + }else{
  721 + $scope.showAlert('error', mensagemErro, " ", false);
  722 + }
  723 + }
497 724
498 }]); 725 }]);
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/AtendimentoRequisicaoConsumoListController.js
1 'use strict'; 1 'use strict';
2 2
3 -citApp.controller('AtendimentoRequisicaoConsumoListController', ['$scope', 'AtendimentoRequisicaoConsumoRepository', '$translate', '$timeout', 'DominioRepository', 'RequisicaoConsumoRepository',  
4 - function AtendimentoRequisicaoConsumoListController($scope, AtendimentoRequisicaoConsumoRepository, $translate, $timeout, DominioRepository, RequisicaoConsumoRepository) { 3 +citApp.controller('AtendimentoRequisicaoConsumoListController', ['$scope', 'AtendimentoRequisicaoConsumoRepository', '$translate',
  4 + '$timeout', 'DominioRepository', 'RequisicaoConsumoRepository',
  5 + 'EstruturaOrganizacionalAlmoxarifadoRepository','MaterialConsumoRepository','$filter',
  6 + function AtendimentoRequisicaoConsumoListController($scope, AtendimentoRequisicaoConsumoRepository, $translate,
  7 + $timeout, DominioRepository, RequisicaoConsumoRepository, EstruturaOrganizacionalAlmoxarifadoRepository, MaterialConsumoRepository, $filter) {
5 $scope.$showAdvancedFilters = false; 8 $scope.$showAdvancedFilters = false;
  9 + $scope.permiteInterromperAtendimento = false;
6 $scope.listaSelecionados = []; 10 $scope.listaSelecionados = [];
7 $scope.resetForm = function() { 11 $scope.resetForm = function() {
8 angular.element("#editAtendimentoRequisicaoConsumo").scope().resetForm(); 12 angular.element("#editAtendimentoRequisicaoConsumo").scope().resetForm();
@@ -10,38 +14,51 @@ citApp.controller(&#39;AtendimentoRequisicaoConsumoListController&#39;, [&#39;$scope&#39;, &#39;Aten @@ -10,38 +14,51 @@ citApp.controller(&#39;AtendimentoRequisicaoConsumoListController&#39;, [&#39;$scope&#39;, &#39;Aten
10 14
11 $scope.recarregar = function() { 15 $scope.recarregar = function() {
12 16
  17 + $scope.filtrarCustomizado = false;
  18 + $scope.atendimentoVH = {};
  19 + $scope.listaUnidadesRequisitantesSelecionadas = [];
  20 + $scope.listaMateriaisConsumoSelecionados = [];
  21 + $scope.listaSelecionados = [];
13 // DEFINE CABEÇALHOS DA LISTAGEM 22 // DEFINE CABEÇALHOS DA LISTAGEM
14 $scope.headers = [ {title : $translate.instant('ALMOXARIFADO.LABEL.NUMERO_REQUISICAO'), value : 'numeroRequisicao' } , 23 $scope.headers = [ {title : $translate.instant('ALMOXARIFADO.LABEL.NUMERO_REQUISICAO'), value : 'numeroRequisicao' } ,
15 {title : $translate.instant('ALMOXARIFADO.LABEL.STATUS_REQUISICAO'), value : 'tipoStatusRequisicao.descricao' } , 24 {title : $translate.instant('ALMOXARIFADO.LABEL.STATUS_REQUISICAO'), value : 'tipoStatusRequisicao.descricao' } ,
16 - {title : $translate.instant('ALMOXARIFADO.LABEL.DATA_REQUISICAO'), value : 'dataRequisicao' , filter : 'dateBR'} , 25 + {title : $translate.instant('ALMOXARIFADO.LABEL.DATA_REQUISICAO'), value : 'dataRequisicao' , filter : 'dateBR', tamanho : 28} ,
17 {title : $translate.instant('ALMOXARIFADO.LABEL.UNIDADE_REQUISITANTE'), value : 'unidadeRequisitante.nome' } , 26 {title : $translate.instant('ALMOXARIFADO.LABEL.UNIDADE_REQUISITANTE'), value : 'unidadeRequisitante.nome' } ,
18 - {title : $translate.instant('ALMOXARIFADO.LABEL.ALMOXARIFADO'), value : 'almoxarifado.nome' } ,  
19 - {title : $translate.instant('ALMOXARIFADO.LABEL.CENTRO_CUSTO'), value : 'centroCusto.descricao' }]; 27 + {title : $translate.instant('ALMOXARIFADO.LABEL.ALMOXARIFADO'), value : 'almoxarifado.nome' },
  28 + {title : $translate.instant('ALMOXARIFADO.LABEL.ATENDIMENTO_INICIADO_USUARIO'), value : 'atendente.username'}];
20 // DIFINE FILTROS DE PESQUISA E CAMPOS QUE DEVEM SER APRESENTADOS NA LISTAGEM 29 // DIFINE FILTROS DE PESQUISA E CAMPOS QUE DEVEM SER APRESENTADOS NA LISTAGEM
21 $scope.filterCriteria = { 30 $scope.filterCriteria = {
22 start : 1, 31 start : 1,
23 dir : 'asc', 32 dir : 'asc',
24 - sort : 'id', 33 + sort : 'desc:numeroRequisicao;tipoStatusRequisicao.codigo',
25 limit : 10, 34 limit : 10,
26 - fields: ['id', 'numeroRequisicao', 'tipoStatusRequisicao.descricao', 'dataRequisicao', 'unidadeRequisitante.nome', 'almoxarifado.nome', 'centroCusto.descricao', 'tipoStatusRequisicao.codigo'], 35 + fields: ['id', 'numeroRequisicao', 'tipoStatusRequisicao.descricao', 'dataRequisicao', 'unidadeRequisitante.nome', 'almoxarifado.nome', 'tipoStatusRequisicao.codigo',
  36 + 'emAtendimento', 'atendente.id', 'atendente.username'],
27 filters : [ {type : 'numeric-range', field : 'numeroRequisicao' } , 37 filters : [ {type : 'numeric-range', field : 'numeroRequisicao' } ,
28 {type : 'dominio', field : 'tipoStatusRequisicao.descricao', listaDominio : []} , 38 {type : 'dominio', field : 'tipoStatusRequisicao.descricao', listaDominio : []} ,
29 {type : 'date-range', field : 'dataRequisicao' } , 39 {type : 'date-range', field : 'dataRequisicao' } ,
30 {type : 'string', field : 'unidadeRequisitante.nome' } , 40 {type : 'string', field : 'unidadeRequisitante.nome' } ,
31 - {type : 'string', field : 'almoxarifado.nome' } ,  
32 - {type : 'string', field : 'centroCusto.descricao' }] 41 + {type : 'string', field : 'almoxarifado.nome' },
  42 + {type : 'string', field : 'atendente.username' }]
33 }; 43 };
34 -  
35 - $scope.filterCriteria.filters.push({type: 'string', field: 'tipoStatusRequisicao.nome', value: 'FINALIZADA', comparison: 'ne', notFilter : true}); 44 +
  45 + $scope.filterCriteria.filters.push({type: 'string', field: 'tipoStatusRequisicao.nome', value: 'DEVOLVIDA', comparison: 'ne', notFilter : true});
36 $scope.filterCriteria.filters.push({type: 'string', field: 'tipoStatusRequisicao.nome', value: 'NAO_CONCLUIDA', comparison: 'ne', notFilter : true}); 46 $scope.filterCriteria.filters.push({type: 'string', field: 'tipoStatusRequisicao.nome', value: 'NAO_CONCLUIDA', comparison: 'ne', notFilter : true});
  47 +
37 }; 48 };
38 49
39 $scope.recarregar(); 50 $scope.recarregar();
  51 +
  52 + $scope.limparBuscaAvancada = function(){
  53 + $scope.atendimentoVH = {};
  54 + $scope.listaUnidadesRequisitantesSelecionadas = [];
  55 + $scope.listaMateriaisConsumoSelecionados = [];
  56 + };
40 57
41 DominioRepository.findAllDominio('tipoStatusRequisicao').then(function(result) { 58 DominioRepository.findAllDominio('tipoStatusRequisicao').then(function(result) {
42 var listaDominio = []; 59 var listaDominio = [];
43 angular.forEach(result, function(dominio){ 60 angular.forEach(result, function(dominio){
44 - if(dominio.nome != 'FINALIZADA' && dominio.nome != 'NAO_CONCLUIDA'){ 61 + if(dominio.nome != 'NAO_CONCLUIDA' && dominio.nome != 'DEVOLVIDA'){
45 listaDominio.push(dominio) 62 listaDominio.push(dominio)
46 } 63 }
47 64
@@ -50,15 +67,22 @@ citApp.controller(&#39;AtendimentoRequisicaoConsumoListController&#39;, [&#39;$scope&#39;, &#39;Aten @@ -50,15 +67,22 @@ citApp.controller(&#39;AtendimentoRequisicaoConsumoListController&#39;, [&#39;$scope&#39;, &#39;Aten
50 }); 67 });
51 68
52 // ABRI AtendimentoRequisicaoConsumo SELECIONADA 69 // ABRI AtendimentoRequisicaoConsumo SELECIONADA
53 - $scope.abrirVisualizar = function(edit){  
54 - var requisicaoConsumo = $scope.atendimentoRequisicaoConsumoChecked;  
55 -  
56 - if(!requisicaoConsumo) {  
57 - $scope.showAlert('warning', !edit ? $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_VISUALIZACAO') : $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_EDICAO')); 70 + $scope.abrirVisualizar = function(){
  71 +
  72 + if($scope.listaSelecionados && $scope.listaSelecionados.length == 0) {
  73 + $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_AO_MENOS_UM_ITEM'));
58 return; 74 return;
59 } 75 }
60 - angular.element('#editAtendimentoRequisicaoConsumo').scope().getAtendimentoRequisicaoConsumo(requisicaoConsumo, edit);  
61 - $scope.$showPageEditWorkspace($scope.workspace); 76 +
  77 + var idsRequisicoesSelecionados = [];
  78 + $scope.listaSelecionados.forEach(function(requisicao){
  79 + idsRequisicoesSelecionados.push(requisicao.id);
  80 + });
  81 + $scope.atendimentoVH.idsRequisicao = idsRequisicoesSelecionados;
  82 + $scope.atendimentoVH.requisicoesSelecionadas = $scope.listaSelecionados;
  83 + $scope.listaSelecionados = [];
  84 + angular.element('#editAtendimentoRequisicaoConsumo').scope().prepararAtendimentoRequisicoes($scope.atendimentoVH, false);
  85 + $scope.recarregar();
62 }; 86 };
63 87
64 $scope.removerAtendimentoRequisicao = function(){ 88 $scope.removerAtendimentoRequisicao = function(){
@@ -85,13 +109,308 @@ citApp.controller(&#39;AtendimentoRequisicaoConsumoListController&#39;, [&#39;$scope&#39;, &#39;Aten @@ -85,13 +109,308 @@ citApp.controller(&#39;AtendimentoRequisicaoConsumoListController&#39;, [&#39;$scope&#39;, &#39;Aten
85 }; 109 };
86 110
87 $scope.iniciarAtendimento = function(){ 111 $scope.iniciarAtendimento = function(){
88 - angular.element('#editAtendimentoRequisicaoConsumo').scope().prepararAtendimentoRequisicoes($scope.listaSelecionados); 112 +
  113 + if($scope.listaSelecionados && $scope.listaSelecionados.length == 0) {
  114 + $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_AO_MENOS_UM_ITEM'));
  115 + return;
  116 + }
  117 +
  118 + var permiteAtender = true;
  119 + angular.forEach($scope.listaSelecionados, function (requisicaoSelecionado) {
  120 + if(requisicaoSelecionado['tipoStatusRequisicao.codigo'] == 5){
  121 + permiteAtender = false;
  122 + $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.MSG.NAO_PERMITIDO_ATENDER_REQUISICAO_FINALIZADA'));
  123 + }
  124 + if(requisicaoSelecionado.emAtendimento && requisicaoSelecionado['atendente.id'] != $scope.usuarioLogado.id){
  125 + permiteAtender = false;
  126 + $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.LABEL.REQUISICAO_CONSUMO') + ' ' + requisicaoSelecionado.numeroRequisicao
  127 + + ' ' + $translate.instant('ALMOXARIFADO.MSG.REQUISICAO_EM_ATENDIMENTO') + ' ' + requisicaoSelecionado['atendente.username']
  128 + + ' ' + $translate.instant('ALMOXARIFADO.MSG.DESMARQUE_REQUISICAO_EM_ATENDIMENTO'));
  129 + return;
  130 + }
  131 + });
  132 +
  133 + if(permiteAtender){
  134 +
  135 + var idsRequisicoesSelecionados = [];
  136 + $scope.listaSelecionados.forEach(function(requisicao){
  137 + idsRequisicoesSelecionados.push(requisicao.id);
  138 + });
  139 + $scope.atendimentoVH.idsRequisicao = idsRequisicoesSelecionados;
  140 + $scope.atendimentoVH.requisicoesSelecionadas = $scope.listaSelecionados;
  141 + $scope.listaSelecionados = [];
  142 + angular.element('#editAtendimentoRequisicaoConsumo').scope().prepararAtendimentoRequisicoes($scope.atendimentoVH, true);
  143 + $scope.recarregar();
  144 + }
  145 + };
  146 + function getIdsRequisicao(){
  147 + $scope.idsSelecionados = [];
  148 + angular.forEach($scope.listaSelecionados, function (requisicaoSelecionado) {
  149 + $scope.idsSelecionados.push(requisicaoSelecionado.id);
  150 + });
  151 + }
  152 +
  153 + $scope.finalizarRequisicao = function(){
  154 +
  155 + if($scope.listaSelecionados && $scope.listaSelecionados.length == 0) {
  156 + $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_AO_MENOS_UM_ITEM'));
  157 + return;
  158 + }
  159 +
  160 + var permiteFinalizar = true;
  161 + angular.forEach($scope.listaSelecionados, function (requisicaoSelecionado) {
  162 + if(requisicaoSelecionado['tipoStatusRequisicao.codigo'] != 1){
  163 + permiteFinalizar = false;
  164 + $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.MSG.FINALIZAR_ATENDIMENTO_SOMENTE_ATENDIMENTO_PARCIAL'));
  165 + return;
  166 + }
  167 + });
  168 +
  169 + if(permiteFinalizar){
  170 +
  171 + getIdsRequisicao();
  172 + var atendimentoVH = {idsRequisicao : $scope.idsSelecionados, idOrganizacao : $scope.usuarioLogado.organizacao.id};
  173 +
  174 + AtendimentoRequisicaoConsumoRepository.validarFinalizacaoRequisicoes(atendimentoVH).then(function(result) {
  175 + if(result){
  176 + $scope.$openModalConfirm({
  177 + message: $translate.instant('ALMOXARIFADO.MSG.CONFIRMA_FINALIZAR_REQUISICAO'),
  178 + callback: function () {
  179 +
  180 + var atendimentoVH = {idsRequisicao : $scope.idsSelecionados, idOrganizacao : $scope.usuarioLogado.organizacao.id};
  181 + AtendimentoRequisicaoConsumoRepository.finalizarRequisicoes(atendimentoVH).then(function(result) {
  182 + $scope.$modalConfirmInstance.dismiss('cancel');
  183 + $scope.showAlert('success', $translate.instant('MSG.MG001'), " ", false);
  184 + $scope.recarregar();
  185 + angular.element("#searchAtendimentoRequisicaoConsumo").scope().fetchResult();
  186 + });
  187 + }
  188 + });
  189 + }else{
  190 + $scope.$openModalConfirm({
  191 + message: $translate.instant('ALMOXARIFADO.MSG.CONFIRMA_FINALIZAR_REQUISICAO_NAO_ATENDIDA_COMPLETAMENTE'),
  192 + callback: function () {
  193 +
  194 + var atendimentoVH = {idsRequisicao : $scope.idsSelecionados, idOrganizacao : $scope.usuarioLogado.organizacao.id};
  195 + AtendimentoRequisicaoConsumoRepository.finalizarRequisicoes(atendimentoVH).then(function(result) {
  196 + $scope.$modalConfirmInstance.dismiss('cancel');
  197 + $scope.showAlert('success', $translate.instant('MSG.MG001'), " ", false);
  198 + $scope.recarregar();
  199 + angular.element("#searchAtendimentoRequisicaoConsumo").scope().fetchResult();
  200 + });
  201 + }
  202 + });
  203 + }
  204 + });
  205 +
  206 + }
  207 +
  208 + };
  209 +
  210 + $scope.excluirAtendimento = function(){
  211 +
  212 + if($scope.listaSelecionados && $scope.listaSelecionados.length == 0) {
  213 + $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_AO_MENOS_UM_ITEM'));
  214 + return;
  215 + }
  216 +
  217 + var permiteExcluir = true;
  218 + angular.forEach($scope.listaSelecionados, function (requisicaoSelecionado) {
  219 + if(requisicaoSelecionado['tipoStatusRequisicao.codigo'] != 1 && requisicaoSelecionado['tipoStatusRequisicao.codigo'] != 5){
  220 + permiteExcluir = false;
  221 + $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.MSG.EXCLUIR_ATENDIMENTO_SOMENTE_ATENDIMENTO_PARCIAL_FINALIZADA'));
  222 + return;
  223 + }
  224 + });
  225 +
  226 + if(permiteExcluir){
  227 + $scope.$openModalConfirm({
  228 + message: $translate.instant('ALMOXARIFADO.MSG.CONFIRMA_ALERTA_EXCLUSAO_ATENDIMENTO_REQUISICAO'),
  229 + callback: function () {
  230 +
  231 + getIdsRequisicao();
  232 + var atendimentoVH = {idsRequisicao : $scope.idsSelecionados, idOrganizacao : $scope.usuarioLogado.organizacao.id};
  233 + $scope.$modalConfirmInstance.dismiss('cancel');
  234 + AtendimentoRequisicaoConsumoRepository.excluirAtendimentos(atendimentoVH).then(function(result) {
  235 + $scope.showAlert('success', $translate.instant('MSG.MG001'), " ", false);
  236 + $scope.recarregar();
  237 + angular.element("#searchAtendimentoRequisicaoConsumo").scope().fetchResult();
  238 + });
  239 + }
  240 + });
  241 + }
  242 +
  243 + };
  244 +
  245 + $scope.findEstruturaOrganizacionalUR = function(value){
  246 + return EstruturaOrganizacionalAlmoxarifadoRepository.findEstruturaOrganizacionalUR(value,
  247 + $scope.usuarioLogado.organizacao.id).then(function(result) {
  248 + return $filter('idNotEqual')(result, $scope.listaUnidadesRequisitantesSelecionadas, 'id');
  249 + });
  250 + };
  251 +
  252 + $scope.findMateriaisConsumoByOrganizacao = function(value){
  253 + return MaterialConsumoRepository.findMateriaisConsumoByOrganizacao(value, $scope.usuarioLogado.organizacao.id).then(function(result) {
  254 + return $filter('idNotEqual')(result, $scope.listaMateriaisConsumoSelecionados, "id");
  255 + });
  256 + };
  257 +
  258 + $scope.setUnidadeRequisitante = function(item){
  259 + $scope.listaUnidadesRequisitantesSelecionadas.push(item);
  260 + $timeout(function(){
  261 + $scope.filtroAtendimento.unidadeRequisitanteSelecao = null;
  262 + });
  263 + };
  264 +
  265 + $scope.selectAllUnidadesRequisitantes = function(check){
  266 + angular.forEach($scope.listaUnidadesRequisitantesSelecionadas, function (item) {
  267 + item.$checkedChBox = $scope.filtroAtendimento.unidadeRequisitanteSelectedAll;
  268 + });
  269 + };
  270 +
  271 + $scope.selectAllMaterialConsumo = function(check){
  272 + angular.forEach($scope.listaMateriaisConsumoSelecionados, function (item) {
  273 + item.$checkedChBox = $scope.filtroAtendimento.materialConsumoSelectedAll;
  274 + });
  275 + };
  276 +
  277 + $scope.setMaterialConsumoItens = function(item){
  278 + $scope.listaMateriaisConsumoSelecionados.push(item);
  279 + $timeout(function(){
  280 + $scope.filtroAtendimento.materialConsumoItem = null;
  281 + });
  282 + };
  283 +
  284 + $scope.removerUnidadeRequisitanteSelecionada = function(){
  285 +
  286 + if($scope.filtroAtendimento.unidadeRequisitanteSelectedAll){
  287 + $scope.listaUnidadesRequisitantesSelecionadas = [];
  288 + $scope.filtroAtendimento.unidadeRequisitanteSelectedAll = false;
  289 + }else{
  290 + $scope.listaUnidadesRequisitantesSelecionadas.forEach(function(item, key) {
  291 + if (item.$checkedChBox) {
  292 + $scope.listaUnidadesRequisitantesSelecionadas.splice($scope.listaUnidadesRequisitantesSelecionadas.indexOf(item), 1);
  293 + }
  294 + });
  295 + }
  296 +
  297 + };
  298 +
  299 + $scope.removerMaterialConsumoSelecionado = function(){
  300 +
  301 + if($scope.filtroAtendimento.materialConsumoSelectedAll){
  302 + $scope.listaMateriaisConsumoSelecionados = [];
  303 + $scope.filtroAtendimento.materialConsumoSelectedAll = false;
  304 + }else{
  305 + angular.forEach($scope.listaMateriaisConsumoSelecionados, function (value) {
  306 + if(value.$checkedChBox){
  307 + $scope.listaMateriaisConsumoSelecionados.splice($scope.listaMateriaisConsumoSelecionados.indexOf(value), 1);
  308 + }
  309 + });
  310 + }
  311 + };
  312 +
  313 +
  314 + $scope.atendimentoAvancado = function(){
  315 + $scope.filtroAtendimento = {unidadeRequisitanteSelectedAll : false , materialConsumoSelectedAll : false};
  316 + if(!$scope.listaUnidadesRequisitantesSelecionadas){
  317 + $scope.listaUnidadesRequisitantesSelecionadas = [];
  318 + }
  319 + if(!$scope.listaMateriaisConsumoSelecionados){
  320 + $scope.listaMateriaisConsumoSelecionados = [];
  321 + }
  322 + $scope.$openModal('modal-busca-avancada-requisicao.html', 'md');
  323 + };
  324 +
  325 + $scope.filtrarRequisicoes = function(){
  326 + $scope.setLoading(true);
  327 + $scope.atendimentoVH = {searchParams : $scope.filterCriteria};
  328 + var idsUnidadeRequisitante = [];
  329 +
  330 + if($scope.listaUnidadesRequisitantesSelecionadas && $scope.listaUnidadesRequisitantesSelecionadas.length > 0){
  331 + angular.forEach($scope.listaUnidadesRequisitantesSelecionadas, function (value) {
  332 + idsUnidadeRequisitante.push(value.id);
  333 + });
  334 + $scope.atendimentoVH.idsUnidadesRequisitantes = idsUnidadeRequisitante;
  335 + }
  336 +
  337 + var idsMateriaisConsumo = [];
  338 +
  339 + if($scope.listaMateriaisConsumoSelecionados && $scope.listaMateriaisConsumoSelecionados.length > 0){
  340 + angular.forEach($scope.listaMateriaisConsumoSelecionados, function (value) {
  341 + idsMateriaisConsumo.push(value.id);
  342 + });
  343 + $scope.atendimentoVH.idsMaterais = idsMateriaisConsumo;
  344 + }
  345 +
  346 + return RequisicaoConsumoRepository.filtrarRequisicoesAtendimento($scope.atendimentoVH).then(function(result){
  347 + if(result){
  348 + $scope.listaSelecionados = [];
  349 + $scope.atendimentoRequisicaoConsumoList = result.originalElement.objects;
  350 +
  351 +
  352 +
  353 + $scope.setTotalPages = result.originalElement.totalPages;
  354 + $scope.setTotalItens = result.originalElement.totalItens;
  355 +
  356 + if(!$scope.filtersCopy){
  357 + $scope.filtersCopy = angular.copy($scope.filterCriteria.filters);
  358 + }
  359 + $scope.filtrarCustomizado = true;
  360 + if($scope.setTotalItens == 0){
  361 + $scope.showAlert('warning', $translate.instant('MSG.NENHUM_REGISTRO_ENCONTRADO'), " ", false);
  362 + }
  363 +
  364 + } else {
  365 + $scope.showAlert('warning', $translate.instant('MSG.NENHUM_REGISTRO_ENCONTRADO'), " ", false);
  366 + }
  367 + $scope.$modalInstance.dismiss('cancel');
  368 + $scope.setLoading(false);
  369 + });
  370 +
  371 + };
  372 +
  373 + $scope.interromperAtendimentoIniciado = function(){
  374 +
  375 + if($scope.listaSelecionados && $scope.listaSelecionados.length == 0) {
  376 + $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_AO_MENOS_UM_ITEM'));
  377 + return;
  378 + }
  379 +
  380 + var permiteInterromperAtendimentoIniciado = true;
  381 + angular.forEach($scope.listaSelecionados, function (requisicaoSelecionado) {
  382 + if(!requisicaoSelecionado.emAtendimento){
  383 + permiteInterromperAtendimentoIniciado = false;
  384 + $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.MSG.INTERROMPER_ATENDIMENTO_NAO_INICIADO'));
  385 + }
  386 + if(requisicaoSelecionado.emAtendimento && requisicaoSelecionado['atendente.id'] != $scope.usuarioLogado.id){
  387 + permiteInterromperAtendimentoIniciado = false;
  388 + $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.MSG.INTERROMPER_ATENDIMENTO_INICIADO_OUTRO_ATENDENTE'));
  389 + return;
  390 + }
  391 + });
  392 +
  393 + if(permiteInterromperAtendimentoIniciado){
  394 + $scope.setLoading(true);
  395 +
  396 + var idsRequisicoesSelecionados = [];
  397 + $scope.listaSelecionados.forEach(function(requisicao){
  398 + idsRequisicoesSelecionados.push(requisicao.id);
  399 + });
  400 +
  401 + var requisicaoVH = { idsRequisicoes : idsRequisicoesSelecionados, statusAtendimentoRequsicao : false};
  402 +
  403 + RequisicaoConsumoRepository.atualizarSituacaoAtendimentoRequisicoes(requisicaoVH).then(function(result) {
  404 + $scope.setLoading(false);
  405 + $scope.recarregar();
  406 + angular.element("#searchAtendimentoRequisicaoConsumo").scope().fetchResult();
  407 + });
  408 + }
89 }; 409 };
90 410
91 //METODO REFERENTE AO RELATORIO 411 //METODO REFERENTE AO RELATORIO
92 $scope.gerar = function() { 412 $scope.gerar = function() {
93 -  
94 - if($scope.listaSelecionados.length == 0 || $scope.listaSelecionados.length > 1) 413 + if($scope.listaSelecionados.length == 0 || $scope.listaSelecionados.length > 1)
95 $scope.showAlert("warning", $translate.instant("MSG.SELECIONE_UM_ITEM_PARA_RELATORIO") + " ", false ); 414 $scope.showAlert("warning", $translate.instant("MSG.SELECIONE_UM_ITEM_PARA_RELATORIO") + " ", false );
96 else{ 415 else{
97 var ids = ''; 416 var ids = '';
@@ -109,5 +428,4 @@ citApp.controller(&#39;AtendimentoRequisicaoConsumoListController&#39;, [&#39;$scope&#39;, &#39;Aten @@ -109,5 +428,4 @@ citApp.controller(&#39;AtendimentoRequisicaoConsumoListController&#39;, [&#39;$scope&#39;, &#39;Aten
109 $scope.visualizarRelatorio($scope.url, $translate.instant("ALMOXARIFADO.LABEL.RELATORIO_GUIA_REMESSA")); 428 $scope.visualizarRelatorio($scope.url, $translate.instant("ALMOXARIFADO.LABEL.RELATORIO_GUIA_REMESSA"));
110 } 429 }
111 }; 430 };
112 -  
113 }]); 431 }]);
114 \ No newline at end of file 432 \ No newline at end of file
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/RequisicaoConsumoController.js
1 'use strict'; 1 'use strict';
2 2
3 -citApp.controller('RequisicaoConsumoController', ['$scope', '$filter', 'RequisicaoConsumoRepository', '$translate', '$timeout', 'DominioRepository', 'EstruturaOrganizacionalAlmoxarifadoRepository', 'CatalogoMaterialRepository', 'CatalogoMaterialItemRepository', 'CatalogoMaterialUnidadeConsumidoraRequisitanteItemRepository', 'MaterialConsumoRepository', 'AtendimentoRequisicaoConsumoRepository',  
4 - function RequisicaoConsumoController($scope, $filter, RequisicaoConsumoRepository, $translate, $timeout, DominioRepository, EstruturaOrganizacionalAlmoxarifadoRepository, CatalogoMaterialRepository, CatalogoMaterialItemRepository, CatalogoMaterialUnidadeConsumidoraRequisitanteItemRepository, MaterialConsumoRepository, AtendimentoRequisicaoConsumoRepository) { 3 +citApp.controller('RequisicaoConsumoController', ['$scope', '$filter', 'RequisicaoConsumoRepository', '$translate', '$timeout', 'DominioRepository', 'EstruturaOrganizacionalAlmoxarifadoRepository', 'CatalogoMaterialRepository', 'CatalogoMaterialItemRepository',
  4 + 'CatalogoMaterialUnidadeConsumidoraRequisitanteItemRepository', 'MaterialConsumoRepository', 'AtendimentoRequisicaoConsumoRepository','RequisicaoConsumoItemRepository',
  5 + function RequisicaoConsumoController($scope, $filter, RequisicaoConsumoRepository, $translate, $timeout, DominioRepository, EstruturaOrganizacionalAlmoxarifadoRepository, CatalogoMaterialRepository, CatalogoMaterialItemRepository,
  6 + CatalogoMaterialUnidadeConsumidoraRequisitanteItemRepository, MaterialConsumoRepository, AtendimentoRequisicaoConsumoRepository, RequisicaoConsumoItemRepository) {
5 7
6 // CONSTANTES DOMINIO 8 // CONSTANTES DOMINIO
7 var TIPO_STATUS_REQUISICAO = 'tipoStatusRequisicao'; 9 var TIPO_STATUS_REQUISICAO = 'tipoStatusRequisicao';
8 - var NAO_CONCLUIDA = 1; 10 + var NAO_CONCLUIDA = 3;
9 var PRONTA_PARA_ATENDIMENTO = 2; 11 var PRONTA_PARA_ATENDIMENTO = 2;
10 12
11 $scope.requisicaoConsumo = {}; 13 $scope.requisicaoConsumo = {};
@@ -485,7 +487,13 @@ citApp.controller(&#39;RequisicaoConsumoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;Requisic @@ -485,7 +487,13 @@ citApp.controller(&#39;RequisicaoConsumoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;Requisic
485 487
486 // REMOVE ITEM DA REQUISICAO 488 // REMOVE ITEM DA REQUISICAO
487 $scope.removerRequisicaoConsumoItem = function(){ 489 $scope.removerRequisicaoConsumoItem = function(){
  490 +
  491 + if($scope.requisicaoConsumo.requisicaoConsumoItens.length == 1 && $scope.requisicaoConsumo.id){
  492 + $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.VALIDACAO.REMOVER_TODOS_ITENS_REQUISICAO_CONSUMO'));
488 493
  494 + return;
  495 + }
  496 +
489 if(!$scope.requisicaoConsumoItemChecked) { 497 if(!$scope.requisicaoConsumoItemChecked) {
490 498
491 $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_SER_REMOVIDO')); 499 $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_SER_REMOVIDO'));
@@ -499,12 +507,22 @@ citApp.controller(&#39;RequisicaoConsumoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;Requisic @@ -499,12 +507,22 @@ citApp.controller(&#39;RequisicaoConsumoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;Requisic
499 message: $translate.instant('MSG.DESEJA_EXCLUIR_ITENS'), 507 message: $translate.instant('MSG.DESEJA_EXCLUIR_ITENS'),
500 callback: function () { 508 callback: function () {
501 509
502 - $scope.$modalConfirmInstance.dismiss('cancel');  
503 -  
504 - $scope.requisicaoConsumo.requisicaoConsumoItens.splice($scope.requisicaoConsumoItemChecked.$index, 1);  
505 -  
506 - $scope.showAlert("success", $translate.instant('MSG.REGISTRO_EXCLUIDO'));  
507 - 510 + if($scope.requisicaoConsumoItemChecked.id){
  511 + RequisicaoConsumoItemRepository.remove($scope.requisicaoConsumoItemChecked).then(function(result) {
  512 + $scope.requisicaoConsumo.requisicaoConsumoItens.splice($scope.requisicaoConsumoItemChecked.$index, 1);
  513 + $scope.changeListRequisicaoConsumoItem();
  514 + $scope.$modalConfirmInstance.dismiss('cancel');
  515 +
  516 + $scope.showAlert("success", $translate.instant('MSG.REGISTRO_EXCLUIDO'));
  517 + });
  518 + }else{
  519 + $scope.requisicaoConsumo.requisicaoConsumoItens.splice($scope.requisicaoConsumoItemChecked.$index, 1);
  520 + $scope.changeListRequisicaoConsumoItem();
  521 + $scope.$modalConfirmInstance.dismiss('cancel');
  522 +
  523 + $scope.showAlert("success", $translate.instant('MSG.REGISTRO_EXCLUIDO'));
  524 + }
  525 +
508 } 526 }
509 527
510 }); 528 });
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/RequisicaoConsumoListController.js
@@ -58,7 +58,7 @@ citApp.controller(&#39;RequisicaoConsumoListController&#39;, [&#39;$scope&#39;, &#39;RequisicaoConsu @@ -58,7 +58,7 @@ citApp.controller(&#39;RequisicaoConsumoListController&#39;, [&#39;$scope&#39;, &#39;RequisicaoConsu
58 58
59 } else { 59 } else {
60 60
61 - if(requisicaoConsumo !== null && requisicaoConsumo['tipoStatusRequisicao.codigo'] !== 1 && requisicaoConsumo !== null && requisicaoConsumo['tipoStatusRequisicao.codigo'] !== 2){ 61 + if(requisicaoConsumo !== null && requisicaoConsumo['tipoStatusRequisicao.codigo'] !== 3 && requisicaoConsumo !== null && requisicaoConsumo['tipoStatusRequisicao.codigo'] !== 2){
62 62
63 $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.MSG.REQUISICAO_DIFERENTE_NAO_CONCLUIDA_PRONTA_ATENDIMENTO')); 63 $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.MSG.REQUISICAO_DIFERENTE_NAO_CONCLUIDA_PRONTA_ATENDIMENTO'));
64 return; 64 return;
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/repository/AtendimentoRequisicaoConsumoRepository.js
@@ -21,7 +21,23 @@ citApp.factory(&#39;AtendimentoRequisicaoConsumoRepository&#39;, [&#39;RestangularAlmoxarifa @@ -21,7 +21,23 @@ citApp.factory(&#39;AtendimentoRequisicaoConsumoRepository&#39;, [&#39;RestangularAlmoxarifa
21 this.removerAtendimentoRequisicao = function (idsRequisicaoConsumo, idOrganizacao) { 21 this.removerAtendimentoRequisicao = function (idsRequisicaoConsumo, idOrganizacao) {
22 return this.restangular.one(this.route +'/removerAtendimentoRequisicao').get({idsRequisicaoConsumo : idsRequisicaoConsumo, idOrganizacao : idOrganizacao}).then(); 22 return this.restangular.one(this.route +'/removerAtendimentoRequisicao').get({idsRequisicaoConsumo : idsRequisicaoConsumo, idOrganizacao : idOrganizacao}).then();
23 }; 23 };
24 - 24 +
  25 + this.finalizarRequisicoes = function(atendimentoVH){
  26 + return restangularAlmoxarifado.all(this.route + '/finalizarRequisicoes').post(atendimentoVH).then();
  27 + };
  28 +
  29 + this.excluirAtendimentos = function(atendimentoVH){
  30 + return restangularAlmoxarifado.all(this.route + '/excluirAtendimentos').post(atendimentoVH).then();
  31 + };
  32 +
  33 + this.validaQuantidadesAtendidas = function(atendimentoRequisicaoConsumo){
  34 + return restangularAlmoxarifado.all(this.route + "/validaQuantidadesAtendidas").post(atendimentoRequisicaoConsumo).then();
  35 + };
  36 +
  37 + this.validarFinalizacaoRequisicoes = function(atendimentoVH){
  38 + return restangularAlmoxarifado.all(this.route + '/validarFinalizacaoRequisicoes').post(atendimentoVH).then();
  39 + };
  40 +
25 } 41 }
26 42
27 AbstractRepository.extend(AtendimentoRequisicaoConsumoRepository); 43 AbstractRepository.extend(AtendimentoRequisicaoConsumoRepository);
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/repository/RequisicaoConsumoRepository.js
@@ -19,8 +19,20 @@ citApp.factory(&#39;RequisicaoConsumoRepository&#39;, [&#39;RestangularAlmoxarifado&#39;, &#39;Abstr @@ -19,8 +19,20 @@ citApp.factory(&#39;RequisicaoConsumoRepository&#39;, [&#39;RestangularAlmoxarifado&#39;, &#39;Abstr
19 return restangularAlmoxarifado.all(this.route + "/finalizarRequisicoes").post(requisicaoVH).then(); 19 return restangularAlmoxarifado.all(this.route + "/finalizarRequisicoes").post(requisicaoVH).then();
20 }; 20 };
21 21
22 - this.atenderRequisicoes = function(idsRequisicaoConsumo){  
23 - return restangularAlmoxarifado.all(this.route + "/atenderRequisicoes").post(idsRequisicaoConsumo).then(); 22 + this.atenderRequisicoes = function(atendimentoVH){
  23 + return restangularAlmoxarifado.all(this.route + "/atenderRequisicoes").post(atendimentoVH).then();
  24 + };
  25 +
  26 + this.filtrarRequisicoesAtendimento = function(atendimentoVH) {
  27 + return this.restangular.all(this.route+ "/filtrarRequisicoesAtendimento").post(atendimentoVH);
  28 + };
  29 +
  30 + this.atualizarSituacaoAtendimento = function(idRequisicao, situacaoAtendimento){
  31 + return this.restangular.one(this.route + "/atualizarSituacaoAtendimento").get({'idRequisicao': idRequisicao, 'situacaoAtendimento': situacaoAtendimento}).then();
  32 + };
  33 +
  34 + this.atualizarSituacaoAtendimentoRequisicoes = function(requisicaoVH) {
  35 + return restangularAlmoxarifado.all(this.route + "/atualizarSituacaoAtendimentoRequisicoes").post(requisicaoVH).then();
24 }; 36 };
25 } 37 }
26 38
cit-almoxarifado-web/src/main/webapp/html/atendimentoRequisicaoConsumo/atendimentoRequisicaoConsumoEdit.html
@@ -9,25 +9,22 @@ @@ -9,25 +9,22 @@
9 </button> 9 </button>
10 <ul class="dropdown-menu-center dropdown-menu dropdown-caret" role="menu"> 10 <ul class="dropdown-menu-center dropdown-menu dropdown-caret" role="menu">
11 <li> 11 <li>
12 - <a href="#void" ng-click="saveEdit(false)" ><i class="fa fa-file-text-o red"></i> <translate>ALMOXARIFADO.LABEL.SALVAR_APENAS</translate></a> 12 + <a href="#void" ng-click="saveOrUpdate(false, atendimentoRequisicaoConsumoForm)" ><i class="fa fa-file-text-o red"></i> <translate>ALMOXARIFADO.LABEL.SALVAR_APENAS</translate></a>
13 </li> 13 </li>
14 <li> 14 <li>
15 - <a href="#void" ng-click="saveEdit(true)" ><i class="fa fa-file-text green"></i> <translate>ALMOXARIFADO.LABEL.SALVAR_E_FINALIZAR_REQUISICOES</translate></a> 15 + <a href="#void" ng-click="saveOrUpdate(true, atendimentoRequisicaoConsumoForm)" ><i class="fa fa-file-text green"></i> <translate>ALMOXARIFADO.LABEL.SALVAR_E_FINALIZAR_REQUISICOES</translate></a>
16 </li> 16 </li>
17 </ul> 17 </ul>
18 </div> 18 </div>
19 - <button class="btn btn-clear" ng-show="!edit" ng-click="edit = true">  
20 - <i class="fa fa-pencil blue"></i>  
21 - <translate>LABEL.EDITAR</translate> 19 + <button ng-show="edit" class="btn btn-clear" ng-click="$showPageSearchWorkspace(workspace); atualizaPaginaPesquisa();">
  20 + <i class="fa fa-reply"></i>
  21 + <translate>ALMOXARIFADO.LABEL.CANCELAR_ATENDIMENTO_INICIADO</translate>
22 </button> 22 </button>
23 -<!-- <button class="btn btn-clear" ng-click="removerAtendimentoRequisicao();" ng-show="edit"> -->  
24 -<!-- <i class="fa fa-times red"></i> -->  
25 -<!-- <translate>LABEL.REMOVER</translate> -->  
26 -<!-- </button> -->  
27 - <button class="btn btn-clear" ng-click="$showPageSearchWorkspace(workspace); atualizaPaginaPesquisa();"> 23 + <button ng-show="!edit" class="btn btn-clear" ng-click="$showPageSearchWorkspace(workspace); atualizaPaginaPesquisa();">
28 <i class="fa fa-search"></i> 24 <i class="fa fa-search"></i>
29 <translate>LABEL.PESQUISAR</translate> 25 <translate>LABEL.PESQUISAR</translate>
30 </button> 26 </button>
  27 +
31 </div><!-- .col --> 28 </div><!-- .col -->
32 <div class="col-sm-4 text-right"> 29 <div class="col-sm-4 text-right">
33 <favorito /> 30 <favorito />
@@ -43,120 +40,229 @@ @@ -43,120 +40,229 @@
43 </p> 40 </p>
44 <div class="modal-body"> 41 <div class="modal-body">
45 42
46 - <fieldset>  
47 - <legend><translate>ALMOXARIFADO.LABEL.DADOS_REQUISICAO_CONSUMO</translate></legend>  
48 - <div class="row">  
49 - <div class="col-md-4">  
50 - <label-input-number ng-id="requisicaoConsumo.numeroRequisicao" ng-label="ALMOXARIFADO.LABEL.NUMERO_REQUISICAO"  
51 - ng-model="requisicaoConsumo.numeroRequisicao"  
52 - ng-obrigatorio="false" ng-disabled="true" />  
53 - </div>  
54 - <div class="col-md-4">  
55 - <label-input ng-id="requisicaoConsumo.tipoStatusRequisicao.descricao" ng-label="LABEL.SITUACAO"  
56 - ng-model="requisicaoConsumo.tipoStatusRequisicao.descricao" ng-disabled="true" />  
57 - </div>  
58 - <div class="col-md-4">  
59 - <label-input-data ng-id="requisicaoConsumo.dataRequisicao" ng-label="ALMOXARIFADO.LABEL.DATA_REQUISICAO"  
60 - ng-model="requisicaoConsumo.dataRequisicao" ng-disabled="true"  
61 - ng-mode="day" ng-format="dd/MM/yyyy" />  
62 - </div>  
63 - </div>  
64 - <div class="col-sm-12" style="margin-top: 20px">  
65 - <div class="row margin-top">  
66 - <div class="col-sm-12">  
67 - <div class="panel panel-default">  
68 - <!-- .panel-heading -->  
69 - <table class="table table-striped table-bordered table-hover">  
70 - <thead>  
71 - <tr>  
72 - <th width="45%" class="text-center"><translate>LABEL.DESCRICAO</translate></th>  
73 - <th width="25%" class="text-center"><translate>LABEL.UNIDADE_MEDIDA</translate></th>  
74 - <th width="25%" class="text-center"><translate>ALMOXARIFADO.LABEL.QUANTIDADE_REQUERIDA</translate></th>  
75 -  
76 - </tr>  
77 - </thead>  
78 - <tbody>  
79 - <tr ng-repeat="requisicaoConsumoItem in requisicaoConsumo.requisicaoConsumoItens">  
80 - <td class="text-center">{{requisicaoConsumoItem.materialConsumo.descricao}}</td>  
81 - <td class="text-center">{{requisicaoConsumoItem.materialConsumo.unidadeArmazenamento.descricao}}</td>  
82 - <td>  
83 - <div class="col-md-12">  
84 - <label-input-decimal ng-id="requisicaoConsumoItem.quantidade$index"  
85 - ng-model="requisicaoConsumoItem.quantidade" form="requisicaoConsumoForm" ng-disabled="true" ng-custom-maxlength="14"  
86 - ng-precisao="requisicaoConsumoItem.materialConsumo.unidadeArmazenamento.tipoNumerico.codigo === 1 ? 0 : 2"/>  
87 - </div>  
88 - </td>  
89 - </tr>  
90 - <tr ng-hide="requisicaoConsumo.requisicaoConsumoItens.length > 0">  
91 - <td colspan="4" class="text-center"><translate>LABEL.TABELA_VAZIA</translate></td>  
92 - </tr>  
93 - </tbody>  
94 - </table>  
95 - <div class="row">  
96 - <div class="col-sm-4 text-left">  
97 - <a ng-href="#top"></a> 43 + <fieldset id="tableAtendimentos" ng-show="atendimentos.length > 0">
  44 + <legend id="top">
  45 + <label ng-class="{'has-error' : atendimentoRequisicaoConsumoForm.$submitted && atendimentos && atendimentos.length < 1}">
  46 + <translate>ALMOXARIFADO.LABEL.DADOS_ATENDIMENTO_REQUISICAO_CONSUMO</translate>
  47 + <span class='red'>*</span> <i ng-show="atendimentoRequisicaoConsumoForm.$submitted && atendimentos && atendimentos.length < 1"
  48 + class='fa fa-warning red'
  49 + tooltip="{{$translate.instant('DADOS_ATENDIMENTO_REQUISICAO_CONSUMO') + ' ' +$translate.instant('LABEL.CAMPO_OBRIGATORIO')}}"
  50 + tooltip-placement='top'></i>
  51 + </label>
  52 + </legend>
  53 + <!-- <div class="row"> -->
  54 + <!-- <div class="col-sm-12"> -->
  55 + <!-- <auto-complete ng-id="almoxarifado" ng-label="ALMOXARIFADO.LABEL.ALMOXARIFADO" ng-model="estruturaAlmoxarifadoPadrao" ng-obrigatorio="true" ng-find="findAutoCompleteAlmoxarifado(value)" ng-item="item.nome + ' - ' + item.classificacao" /> -->
  56 + <!-- </div> -->
  57 + <!-- </div> -->
  58 + <div class="row">
  59 + <div class="col-md-6">
  60 + <label-input-data ng-id="atendimentoRequisicaoConsumo.dataAtendimento" ng-label="ALMOXARIFADO.LABEL.DATA_ATENDIMENTO"
  61 + ng-model="atendimentoRequisicaoConsumo.dataAtendimento" form="atendimentoRequisicaoConsumoForm" ng-obrigatorio="true"
  62 + ng-show="edit" ng-mode="day" ng-format="dd/MM/yyyy" />
  63 + </div>
  64 + <div class="col-md-6" ng-if="atendimentos.length == 1">
  65 + <p>
  66 + <small><span class="red" ><translate>ALMOXARIFADO.MSG.INFO_ATENDIMENTO_INICIADO</translate></span></small>
  67 + </p>
  68 + </div>
  69 + <div class="col-md-6" ng-if="atendimentos.length > 1">
  70 + <p>
  71 + <small><span class="red"><translate>ALMOXARIFADO.MSG.INFO_ATENDIMENTOS_INICIADOS</translate></span></small>
  72 + </p>
  73 + </div>
  74 + </div>
  75 + <div style="margin-top: 20px;" ng-repeat="atendimento in atendimentos">
  76 + <div class="widget-box margin-bottom">
  77 + <div class="widget-header">
  78 + <h2 class="widget-title" style="font-size: 16px !important">
  79 + <label><translate>ALMOXARIFADO.LABEL.REQUISICAO</translate>: {{atendimento.requisicaoConsumo.numeroRequisicao}}</label>
  80 + </h2>
  81 + <div class="widget-toolbar">
  82 + <a href="#void" ng-click="widgetAtendimentoCollapsed = !widgetAtendimentoCollapsed">
  83 + <i class="fa" ng-class="{'fa-chevron-up': widgetAtendimentoCollapsed, 'fa-chevron-down': !widgetAtendimentoCollapsed}"></i>
  84 + </a>
  85 + <a href="#void" style="margin-left: 3px" ng-click="removerRequisicaoDoAtendimento($index)" ng-show="edit">
  86 + <i class="fa fa-trash-o bigger-130 red" tooltip="{{$translate.instant('ALMOXARIFADO.MSG.REMOVER_REQUISICAO_ATENDIMENTO')}}"></i>
  87 + </a>
  88 + </div>
  89 + </div>
  90 + <div collapse="!widgetAtendimentoCollapsed" class="widget-body">
  91 + <div class="widget-main clearfix">
  92 + <div class="row">
  93 + <div class="col-md-3">
  94 + <label-input-number ng-id="atendimento.requisicaoConsumo.numeroRequisicao$index" ng-label="ALMOXARIFADO.LABEL.NUMERO_ATENDIMENTO"
  95 + ng-model="atendimento.requisicaoConsumo.numeroRequisicao" ng-disabled="true" />
  96 + </div>
  97 + <div class="col-md-3">
  98 + <label-input ng-type="text" ng-id="atendimento.requisicaoConsumo.tipoStatusRequisicao.descricao$index" ng-label="ALMOXARIFADO.LABEL.STATUS_ATUAL"
  99 + ng-model="atendimento.requisicaoConsumo.tipoStatusRequisicao.descricao" ng-disabled="true" />
  100 + </div>
  101 + <div class="col-md-3">
  102 + <label-input ng-type="text" ng-id="atendimento.requisicaoConsumo.dataRequisicao$index" ng-label="ALMOXARIFADO.LABEL.DATA_REQUISICAO"
  103 + ng-model="atendimento.requisicaoConsumo.dataRequisicao" ng-disabled="true" />
  104 + </div>
  105 + </div>
  106 + <div class="row">
  107 + <div class="col-md-6">
  108 + <label-input ng-type="text" ng-id="atendimento.requisicaoConsumo.almoxarifado.codigoENome$index" ng-label="ALMOXARIFADO.LABEL.ALMOXARIFADO"
  109 + ng-model="atendimento.requisicaoConsumo.almoxarifado.codigoENome" ng-disabled="true" />
  110 + </div>
  111 + <div class="col-md-6">
  112 + <label-input ng-type="text" ng-id="atendimento.requisicaoConsumo.unidadeRequisitante.codigoENome$index" ng-label="ALMOXARIFADO.LABEL.UNIDADE_REQUISITANTE"
  113 + ng-model="atendimento.requisicaoConsumo.unidadeRequisitante.codigoENome" ng-disabled="true" />
  114 + </div>
  115 + </div>
  116 + <div class="row" ng-show="edit">
  117 + <div class="col-md-12">
  118 + <input type="checkbox" ng-model="exibirCompletos">
  119 + <label><translate>ALMOXARIFADO.LABEL.MOSTRAR_ATENDIMENTOS_CONCLUIDOS</translate>
  120 + </div>
  121 + </div>
  122 + <div class="row margin-top">
  123 + <div class="col-sm-12">
  124 + <div class="panel panel-default">
  125 + <!-- .panel-heading -->
  126 + <table class="table table-striped table-bordered table-hover">
  127 + <thead>
  128 + <tr>
  129 + <th class="text-center" ng-show="edit"><translate>ALMOXARIFADO.LABEL.INFO</translate></th>
  130 + <th class="text-center" width="20%"><translate>LABEL.MATERIAL</translate></th>
  131 + <th class="text-center"><translate>LABEL.UNIDADE_MEDIDA</translate></th>
  132 + <th class="text-center"><translate>ALMOXARIFADO.LABEL.QTD_EM_ESTOQUE</translate></th>
  133 + <th class="text-center"><translate>ALMOXARIFADO.LABEL.QTD_FORNECIDA_REQUISICAO</translate></th>
  134 + <th class="text-center"><translate>ALMOXARIFADO.LABEL.QUANTIDADE_PEDIDA</translate></th>
  135 + <th class="text-center"><translate>ALMOXARIFADO.LABEL.QUANTIDADE_ATENDIDA</translate></th>
  136 + <th class="text-center" width="20%"><translate>ALMOXARIFADO.LABEL.ENDERECO_ESTOQUE</translate></th>
  137 + <th class="text-center"><translate>ALMOXARIFADO.LABEL.ATENDER</translate><span class="red"> *</span></th>
  138 + </tr>
  139 + </thead>
  140 + <tbody>
  141 + <tr ng-repeat-start="atendimentoRequisicaoConsumoItem in atendimento.atendimentoRequisicaoConsumoItems"
  142 + ng-class="atendimentoRequisicaoConsumoItem.$hasError ? 'danger' : ''" ng-hide="atendimentoRequisicaoConsumoItem.requisicaoConsumoItem.quantidade == atendimentoRequisicaoConsumoItem.requisicaoConsumoItem.quantidadeAtendida && !exibirCompletos && edit"
  143 + tooltip="{{atendimentoRequisicaoConsumoItem.$hasError ? $translate.instant('ALMOXARIFADO.VALIDACAO.SOMA_ITENS_ATENDER_MAIOR_ESTOQUE_TOOLTIP') : ''}}">
  144 +
  145 + <td class="text-center" ng-show="edit">
  146 + <button type="button" ng-click="atendimentoRequisicaoConsumoItem.$verInfo = !atendimentoRequisicaoConsumoItem.$verInfo">
  147 + <i class="ace-icon fa {{atendimentoRequisicaoConsumoItem.$verInfo ? 'fa-minus' : 'fa-plus'}} bigger-125"></i>
  148 + </button>
  149 + </td>
  150 + <td class="text-center">{{atendimentoRequisicaoConsumoItem.material.descricao}}</td>
  151 + <td class="text-center">{{atendimentoRequisicaoConsumoItem.material.unidadeArmazenamento.sigla}}</td>
  152 + <td class="text-center">{{atendimentoRequisicaoConsumoItem.$info.qtdEstoque}}</td>
  153 + <td class="text-center">{{atendimentoRequisicaoConsumoItem.$info.qtdFornecidaUltimaRequisicao ? atendimentoRequisicaoConsumoItem.$info.qtdFornecidaUltimaRequisicao : "-"}}</td>
  154 + <td class="text-center">{{atendimentoRequisicaoConsumoItem.requisicaoConsumoItem.quantidade}}</td>
  155 + <td class="text-center" ng-show="novoAtendimento">{{atendimentoRequisicaoConsumoItem.requisicaoConsumoItem.quantidadeAtendida
  156 + ? atendimentoRequisicaoConsumoItem.requisicaoConsumoItem.quantidadeAtendida : 0}}</td>
  157 + <td class="text-center" ng-hide="novoAtendimento">{{atendimentoRequisicaoConsumoItem.requisicaoConsumoItem.quantidadeAtendida
  158 + - atendimentoRequisicaoConsumoItem.$quantidade}}</td>
  159 +
  160 + <td class="text-center">
  161 + <table style="width: 100%">
  162 + <tr>
  163 + <td ng-show="atendimentoRequisicaoConsumoItem.atendimentoRequisicaoConsumoItemEnderecos.length <= 1">
  164 + <label-select ng-id="atendimentoRequisicaoConsumoItem.materialLocalEstoque$index" ng-obrigatorio="true" ng-disabled="!edit"
  165 + ng-model="atendimentoRequisicaoConsumoItem.atendimentoRequisicaoConsumoItemEnderecos[0]" ng-list="atendimentoRequisicaoConsumoItem.$locaisEstoque"
  166 + form="atendimentoRequisicaoConsumoForm" track-by="track by atendimentoRequisicaoConsumoItemEndereco.materialLocalEstoque.id"
  167 + ng-custom-options="atendimentoRequisicaoConsumoItemEndereco as atendimentoRequisicaoConsumoItemEndereco.materialLocalEstoque.endereco.descricao for atendimentoRequisicaoConsumoItemEndereco"></label-select>
  168 + </td>
  169 + <td ng-show="atendimentoRequisicaoConsumoItem.atendimentoRequisicaoConsumoItemEnderecos.length > 1">
  170 + <translate>ALMOXARIFADO.LABEL.MULTIPLOS_ENDERECOS</translate>
  171 + </td>
  172 + <td style="padding-left: 8px; text-align: right;">
  173 + <i class="fa fa-plus green" style="cursor: pointer;"
  174 + ng-click="openModalEnderecosMaterial(atendimentoRequisicaoConsumoItem.$locaisEstoque, atendimentoRequisicaoConsumoItem.atendimentoRequisicaoConsumoItemEnderecos, atendimento, atendimentoRequisicaoConsumoItem)"
  175 + tooltip="{{$translate.instant('ALMOXARIFADO.MSG.ATENDER_MAIS_DE_UM_ENDERECO')}}"/>
  176 + </td>
  177 + </tr>
  178 + </table>
  179 + </td>
  180 +
  181 + <td ng-if="atendimentoRequisicaoConsumoItem.atendimentoRequisicaoConsumoItemEnderecos.length <= 1" class="text-center">
  182 + <label-input-decimal ng-id="atendimentoRequisicaoConsumoItem.quantidade$index" ng-evento-blur="aplicarValidacaoDecimal" ng-evento-keyup="validarQuantidades(atendimentoRequisicaoConsumoItem)"
  183 + ng-model="atendimentoRequisicaoConsumoItem.atendimentoRequisicaoConsumoItemEnderecos[0].quantidade" form="atendimentoRequisicaoConsumoForm" ng-disabled="!edit" ng-custom-maxlength="{{atendimentoRequisicaoConsumoItem.material.unidadeArmazenamento.tipoNumerico.codigo === 1 ? 4 : 11}}"
  184 + ng-precisao="{{atendimentoRequisicaoConsumoItem.material.unidadeArmazenamento.tipoNumerico.codigo === 1 ? 0 : 'decimal'}}" />
  185 + </td>
  186 + <td ng-if="atendimentoRequisicaoConsumoItem.atendimentoRequisicaoConsumoItemEnderecos.length > 1">
  187 + <label-input ng-type="text" ng-model="atendimentoRequisicaoConsumoItem.$somaQtdAtendida" ng-disabled="true"></label-input>
  188 + </td>
  189 +
  190 + </tr>
  191 + <tr ng-show="atendimentoRequisicaoConsumoItem.$verInfo == true" class="table-subgrid" ng-repeat-end>
  192 + <td colspan="9">
  193 + <table class="table table-bordered table-striped">
  194 + <thead>
  195 + <tr>
  196 + <th class="text-center" colspan="1"><translate>LABEL.GERAL</translate></th>
  197 + <th class="text-center" colspan="8"><translate>ALMOXARIFADO.LABEL.UNIDADE_REQUISITANTE</translate></th>
  198 + </tr>
  199 + <tr>
  200 + <th class="text-center"><translate>ALMOXARIFADO.LABEL.CONSUMO_MEDIO_MENSAL</translate></th>
  201 + <th class="text-center"><translate>ALMOXARIFADO.LABEL.CONSUMO_EXERCICIO_ANTERIOR</translate></th>
  202 + <th class="text-center"><translate>ALMOXARIFADO.LABEL.CONSUMO_EXERCICIO_ATUAL</translate></th>
  203 + <th class="text-center"><translate>ALMOXARIFADO.LABEL.CONSUMO_12_MESES</translate></th>
  204 + <th class="text-center"><translate>ALMOXARIFADO.LABEL.CONSUMO_MEDIO_MENSAL</translate></th>
  205 + <th class="text-center"><translate>ALMOXARIFADO.LABEL.NUMERO_ULTIMA_REQUISICAO</translate></th>
  206 + <th class="text-center"><translate>ALMOXARIFADO.LABEL.DATA_ULTIMA_REQUISICAO</translate></th>
  207 + <th class="text-center"><translate>ALMOXARIFADO.LABEL.QTD_REQUERIDA_REQUISICAO</translate></th>
  208 + <th class="text-center"><translate>ALMOXARIFADO.LABEL.QTD_FORNECIDA_REQUISICAO</translate></th>
  209 + </tr>
  210 + </thead>
  211 + <tbody>
  212 + <td class="text-center">{{atendimentoRequisicaoConsumoItem.$info.consumoMedioMensalMaterial}}</td>
  213 + <td class="text-center">{{atendimentoRequisicaoConsumoItem.$info.consumoExercicioAnterior}}</td>
  214 + <td class="text-center">{{atendimentoRequisicaoConsumoItem.$info.consumoExercicioAtual}}</td>
  215 + <td class="text-center">{{atendimentoRequisicaoConsumoItem.$info.consumo12meses}}</td>
  216 + <td class="text-center">{{atendimentoRequisicaoConsumoItem.$info.consumoMedioMensalUR}}</td>
  217 + <td class="text-center">
  218 + {{atendimentoRequisicaoConsumoItem.$info.numeroUltimaRequisicao ? atendimentoRequisicaoConsumoItem.$info.numeroUltimaRequisicao : "-"}}
  219 + </td>
  220 + <td class="text-center">
  221 + {{atendimentoRequisicaoConsumoItem.$info.dataUltimaRequisicao ? (atendimentoRequisicaoConsumoItem.$info.dataUltimaRequisicao | dateBR) : "-"}}
  222 + </td>
  223 + <td class="text-center">
  224 + {{atendimentoRequisicaoConsumoItem.$info.qtdRequeridaUltimaRequisicao ? atendimentoRequisicaoConsumoItem.$info.qtdRequeridaUltimaRequisicao : "-"}}
  225 + </td>
  226 + <td class="text-center">
  227 + {{atendimentoRequisicaoConsumoItem.$info.qtdFornecidaUltimaRequisicao ? atendimentoRequisicaoConsumoItem.$info.qtdFornecidaUltimaRequisicao : "-"}}
  228 + </td>
  229 + </tbody>
  230 + </table>
  231 + <table class="table table-bordered table-striped">
  232 + <thead>
  233 + <tr>
  234 + <th class="text-center"><translate>ALMOXARIFADO.LABEL.ENDERECO_ESTOQUE</translate></th>
  235 + <th class="text-center"><translate>ALMOXARIFADO.LABEL.SALDO_ENDERECO</translate></th>
  236 + <th class="text-center"><translate>LABEL.CAPACIDADE</translate></th>
  237 + </tr>
  238 + </thead>
  239 + <tbody ng-repeat="enderecoEstoque in atendimentoRequisicaoConsumoItem.$locaisEstoque">
  240 + <td class="text-center">{{enderecoEstoque.materialLocalEstoque.endereco.descricao}}</td>
  241 + <td class="text-center">{{enderecoEstoque.materialLocalEstoque.quantidade}}</td>
  242 + <td class="text-center">{{enderecoEstoque.materialLocalEstoque.capacidade}}</td>
  243 + </tbody>
  244 + </table>
  245 + </td>
  246 + </tr>
  247 + </tbody>
  248 + </table>
  249 + <div class="row">
  250 + <div class="col-sm-4 text-left">
  251 + <a ng-href="#top"></a>
  252 + </div>
  253 + </div>
  254 + </div>
  255 + </div>
98 </div> 256 </div>
99 </div> 257 </div>
100 </div> 258 </div>
101 </div> 259 </div>
102 </div> 260 </div>
103 - </div>  
104 - </fieldset>  
105 -  
106 - <fieldset>  
107 -  
108 - <legend id="top">  
109 - <label ng-class="{'has-error' : formDialogAtendimento.$submitted && atendimentos && atendimentos.length < 1}">  
110 - <translate>ALMOXARIFADO.LABEL.DADOS_ATENDIMENTO</translate>  
111 - <span class='red'>*</span> <i ng-show="formDialogAtendimento.$submitted && atendimentos && atendimentos.length < 1"  
112 - class='fa fa-warning red'  
113 - tooltip="{{$translate.instant('DADOS_ATENDIMENTO_REQUISICAO_CONSUMO') + ' ' +$translate.instant('LABEL.CAMPO_OBRIGATORIO')}}"  
114 - tooltip-placement='top'></i>  
115 - </label>  
116 - </legend>  
117 - <div class="row">  
118 - <table class="table table-striped table-bordered table-hover">  
119 - <thead>  
120 - <tr>  
121 - <th width="5%" class="text-center"> </th>  
122 - <th class="text-center"><translate>ALMOXARIFADO.LABEL.NUMERO_ATENDIMENTO</translate></th>  
123 - <th class="text-center"><translate>ALMOXARIFADO.LABEL.DATA_ATENDIMENTO</translate></th>  
124 - </tr>  
125 - </thead>  
126 - <tbody>  
127 - <tr ng-repeat-start="atendimento in atendimentos">  
128 - <td class="text-center">  
129 - <button type="button" ng-click="apresentarInfoAtendimentoItem(atendimento)">  
130 - <i class="ace-icon fa {{atendimento.$verInfo ? 'fa-minus' : 'fa-plus'}} bigger-125"></i>  
131 - </button>  
132 - </td>  
133 - <td class="text-center">{{atendimento.numeroAtendimento}}</td>  
134 - <td class="text-center">{{atendimento.dataAtendimento}}</td>  
135 - </tr>  
136 - <tr ng-show="atendimento.$verInfo == true" class="table-subgrid" ng-repeat-end>  
137 - <td colspan="6">  
138 - <table class="table table-bordered table-striped">  
139 - <thead>  
140 - <tr>  
141 - <th class="text-center"><translate>LABEL.MATERIAL</translate></th>  
142 - <th class="text-center"><translate>ALMOXARIFADO.LABEL.QUANTIDADE_ATENDIDA</translate></th>  
143 - </tr>  
144 - </thead>  
145 - <tbody>  
146 - <tr ng-repeat="atendimentoItem in atendimento.atendimentoRequisicaoConsumoItems">  
147 - <td style="width: 56%" class="text-center">{{atendimentoItem.material.descricao}}</td>  
148 - <td class="text-center"><label-input-decimal ng-id="atendimentoItem.quantidade$index" ng-obrigatorio="true"  
149 - ng-model="atendimentoItem.quantidade" ng-custom-maxlength="14" ng-disabled="!edit"  
150 - ng-precisao="atendimentoItem.material.unidadeArmazenamento.tipoNumerico.codigo === 1 ? 0 : 2" /></td>  
151 - </tr>  
152 - </tbody>  
153 - </table>  
154 - </td>  
155 - </tr>  
156 - </tbody>  
157 - </table>  
158 - </div>  
159 - </fieldset>  
160 - </div> 261 + </fieldset>
  262 + </div>
  263 + <script type="text/ng-template" id="modal-atendimento-item-enderecos.html">
  264 + <div ng-include src="'/cit-almoxarifado-web/html/atendimentoRequisicaoConsumo/dialog_atendimento_item_enderecos.html'" />
  265 + </script>
161 </form> 266 </form>
162 </div> 267 </div>
  268 +
cit-almoxarifado-web/src/main/webapp/html/atendimentoRequisicaoConsumo/atendimentoRequisicaoConsumoEditModal.html
@@ -13,10 +13,9 @@ @@ -13,10 +13,9 @@
13 </li> 13 </li>
14 </ul> 14 </ul>
15 </div> 15 </div>
16 - <button ng-click="$dismiss('cancel');" class="btn btn-clear">  
17 - <i class="fa fa-times red"></i>  
18 - <translate>LABEL.FECHAR</translate>  
19 - </button> 16 + <button class="btn btn-clear" ng-click="$showPageSearchWorkspace(workspace); atualizaPaginaPesquisa();">
  17 + <i class="fa fa-search"></i> <translate>LABEL.PESQUISAR</translate>
  18 + </button>
20 </div><!-- .modal-header --> 19 </div><!-- .modal-header -->
21 20
22 <div class="modal-body"> 21 <div class="modal-body">
@@ -56,7 +55,7 @@ @@ -56,7 +55,7 @@
56 <thead> 55 <thead>
57 <tr> 56 <tr>
58 <th class="text-center" ng-show="edit"><translate>ALMOXARIFADO.LABEL.INFO</translate></th> 57 <th class="text-center" ng-show="edit"><translate>ALMOXARIFADO.LABEL.INFO</translate></th>
59 - <th class="text-center" width="30%"><translate>LABEL.MATERIAL</translate></th> 58 + <th class="text-center" width="20%"><translate>LABEL.MATERIAL</translate></th>
60 <th class="text-center"><translate>LABEL.UNIDADE_MEDIDA</translate></th> 59 <th class="text-center"><translate>LABEL.UNIDADE_MEDIDA</translate></th>
61 <th class="text-center"><translate>ALMOXARIFADO.LABEL.QUANTIDADE_PEDIDA</translate></th> 60 <th class="text-center"><translate>ALMOXARIFADO.LABEL.QUANTIDADE_PEDIDA</translate></th>
62 <th class="text-center"><translate>ALMOXARIFADO.LABEL.QUANTIDADE_ATENDIDA</translate></th> 61 <th class="text-center"><translate>ALMOXARIFADO.LABEL.QUANTIDADE_ATENDIDA</translate></th>
cit-almoxarifado-web/src/main/webapp/html/atendimentoRequisicaoConsumo/atendimentoRequisicaoConsumoList.html
@@ -5,32 +5,29 @@ @@ -5,32 +5,29 @@
5 5
6 <button class="btn btn-clear" ng-click="iniciarAtendimento();"> 6 <button class="btn btn-clear" ng-click="iniciarAtendimento();">
7 <i class="fa fa-plus-circle yellow-dark"></i> 7 <i class="fa fa-plus-circle yellow-dark"></i>
8 - <translate>ALMOXARIFADO.LABEL.INICIAR_ATENDIMENTO</translate> 8 + <translate>ALMOXARIFADO.LABEL.ATENDER</translate>
9 </button> 9 </button>
10 10
11 - <button title="{{$translate.instant('ALMOXARIFADO.LABEL.RELATORIO_GUIA_REMESSA')}}"  
12 - alt="{{$translate.instant('ALMOXARIFADO.LABEL.RELATORIO_GUIA_REMESSA')}}"  
13 - class="btn btn-clear" type="button" ng-disabled="false"  
14 - ng-click="gerar();">  
15 - <i class="fa fa-print"></i>  
16 - <translate>ALMOXARIFADO.LABEL.RELATORIO_GUIA_REMESSA</translate>  
17 - </button> 11 + <button class="btn btn-clear" ng-click="finalizarRequisicao();">
  12 + <i class="fa fa-file-text-o green"></i>
  13 + <translate>ALMOXARIFADO.LABEL.FINALIZAR_REQUISICAO</translate>
  14 + </button>
  15 +
  16 + <button class="btn btn-clear" ng-click="excluirAtendimento()">
  17 + <i class="fa fa-times red"></i>
  18 + <translate>ALMOXARIFADO.LABEL.EXCLUIR_ATENDIMENTO</translate>
  19 + </button>
18 20
19 - <button ng-show="listaSelecionados.length == 1" class="btn btn-clear" ng-click="abrirVisualizar(false);"> 21 + <button class="btn btn-clear" ng-click="abrirVisualizar();">
20 <i class="fa fa-search blue"></i> 22 <i class="fa fa-search blue"></i>
21 <translate>LABEL.VISUALIZAR</translate> 23 <translate>LABEL.VISUALIZAR</translate>
22 </button> 24 </button>
23 25
24 - <button ng-show="listaSelecionados.length == 1" class="btn btn-clear" ng-click="abrirVisualizar(true);">  
25 - <i class="fa fa-pencil blue"></i>  
26 - <translate>LABEL.EDITAR</translate> 26 + <button class="btn btn-clear" ng-click="interromperAtendimentoIniciado()">
  27 + <i class="fa fa-times-circle-o orange"></i>
  28 + <translate>ALMOXARIFADO.LABEL.INTERROMPER_ATENDIMENTO_INICIADO</translate>
27 </button> 29 </button>
28 30
29 -<!-- <button class="btn btn-clear" ng-click="removerAtendimentoRequisicao();"> -->  
30 -<!-- <i class="fa fa-times red"></i> -->  
31 -<!-- <translate>LABEL.REMOVER</translate> -->  
32 -<!-- </button> -->  
33 -  
34 <span class="divider-vertical"></span> 31 <span class="divider-vertical"></span>
35 32
36 <filtros ng-filter="filterCriteria" ng-workspace="workspace"></filtros> 33 <filtros ng-filter="filterCriteria" ng-workspace="workspace"></filtros>
@@ -48,9 +45,134 @@ @@ -48,9 +45,134 @@
48 </div><!-- .bar-buttons-action --> 45 </div><!-- .bar-buttons-action -->
49 46
50 <breadcrumb ng-workspace="workspace"></breadcrumb> 47 <breadcrumb ng-workspace="workspace"></breadcrumb>
  48 +
  49 + <div class="row" style="margin-bottom: 10px">
  50 + <div class="col-sm-2 text-left">
  51 + <button class="btn btn-sm btn-primary" type="button" ng-click="atendimentoAvancado();" style="margin-top: 26px;">
  52 + <translate>LABEL.BUSCA_AVANCADA</translate>
  53 + </button>
  54 + </div>
  55 + </div>
  56 +
  57 + <div class="alert alert-warning" title="{{$translate.instant('ALMOXARIFADO.LABEL.LIMPAR_BUSCA_AVANCADA')}}" alt="{{$translate.instant('ALMOXARIFADO.LABEL.LIMPAR_BUSCA_AVANCADA')}}"
  58 + role="alert" ng-show="atendimentoVH.idsMaterais && atendimentoVH.idsMaterais.length > 0">
  59 + <a class="close" data-dismiss="alert" ng-click="limparBuscaAvancada()" aria-label="close">&times;</a>
  60 + <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
  61 + <translate>ALMOXARIFADO.MSG.INFO_FILTRO_MATERIAL_REQUISICAO</span></translate>
  62 + </div>
51 63
52 <list-view ng-lista="atendimentoRequisicaoConsumoList" ng-repository="RequisicaoConsumoRepository" ng-use-custom-remove="false" 64 <list-view ng-lista="atendimentoRequisicaoConsumoList" ng-repository="RequisicaoConsumoRepository" ng-use-custom-remove="false"
53 ng-headers="headers" ng-filter-criteria="filterCriteria" ng-item-selecionado="atendimentoRequisicaoConsumoChecked" 65 ng-headers="headers" ng-filter-criteria="filterCriteria" ng-item-selecionado="atendimentoRequisicaoConsumoChecked"
54 - ng-lista-itens-selecionados="listaSelecionados" ng-check-on="true"></list-view> 66 + ng-lista-itens-selecionados="listaSelecionados" ng-check-on="true" ng-exibir-boolean-sim-nao="true"
  67 + set-total-pages="setTotalPages" set-total-itens="setTotalItens" ng-marcar-linha-grid-atributo="emAtendimento"
  68 + use-custom-filter-temp="filtrarCustomizado" ng-custom-filter="filtrarRequisicoes()"></list-view>
55 69
56 </div><!-- .page-content --> 70 </div><!-- .page-content -->
  71 +
  72 +
  73 +<script type="text/ng-template" id="modal-busca-avancada-requisicao.html">
  74 + <form name="formDialogBuscaAvancadaRequisicao" novalidate >
  75 + <div class="modal-header">
  76 + <button class="btn btn-clear" type="button" title="{{$translate.instant('ALMOXARIFADO.LABEL.FILTRAR')}}" alt="{{$translate.instant('ALMOXARIFADO.LABEL.FILTRAR')}}" ng-click="filtrarRequisicoes();">
  77 + <i class="fa fa-plus-circle yellow-dark"></i>
  78 + <translate>ALMOXARIFADO.LABEL.FILTRAR</translate>
  79 + </button>
  80 +
  81 + <button title="{{$translate.instant('LABEL.LIMPAR')}}" alt="{{$translate.instant('LABEL.LIMPAR')}}" ng-click="limparBuscaAvancada()" class="btn btn-clear" type="button">
  82 + <i class="fa fa-eraser"></i>
  83 + <translate>LABEL.LIMPAR</translate>
  84 + </button>
  85 +
  86 + <button title="{{$translate.instant('LABEL.CANCELAR')}}" alt="{{$translate.instant('LABEL.CANCELAR')}}" ng-click="$dismiss('cancel');" class="btn btn-clear" type="button">
  87 + <i class="fa fa-times red"></i>
  88 + <translate>LABEL.CANCELAR</translate>
  89 + </button>
  90 + </div>
  91 +
  92 + <div class="modal-body">
  93 +
  94 + <div class="row">
  95 + <div class="col-md-12">
  96 + <auto-complete ng-id="materialConsumoItem" ng-label="ALMOXARIFADO.LABEL.MATERIAL_CONSUMO" ng-model="filtroAtendimento.materialConsumoItem"
  97 + ng-find="findMateriaisConsumoByOrganizacao(value)" ng-item="item.codigoEDescricao" ng-set-result="setMaterialConsumoItens(item)" />
  98 + </div>
  99 + </div>
  100 + <div class="row" ng-show="listaMateriaisConsumoSelecionados.length > 0">
  101 + <div class="col-sm-12">
  102 + <div class="panel panel-default">
  103 + <div class="panel-heading clearfix">
  104 + <button class="btn btn-clear" type="button" ng-click="removerMaterialConsumoSelecionado(materialConsumoSelectedAll)">
  105 + <i class="fa fa-times red"></i>
  106 + <translate>LABEL.REMOVER</translate>
  107 + </button>
  108 + </div>
  109 + <table class="table table-bordered table-striped">
  110 + <thead>
  111 + <tr>
  112 + <th style="width: 3%;" class="text-center">
  113 + <input type="checkbox" ng-model="filtroAtendimento.materialConsumoSelectedAll" ng-click="selectAllMaterialConsumo(materialConsumoSelectedAll)"/>
  114 + </th>
  115 + <th style="text-align: center">
  116 + <translate>ALMOXARIFADO.LABEL.MATERIAL_CONSUMO</translate>
  117 + </th>
  118 + </tr>
  119 + </thead>
  120 + <tbody ng-repeat="materialConsumoSelecionado in listaMateriaisConsumoSelecionados">
  121 + <tr>
  122 + <td class="text-center">
  123 + <input type="checkbox" ng-checked="materialConsumoSelecionado.$checkedChBox" ng-model="materialConsumoSelecionado.$checkedChBox"/>
  124 + </td>
  125 + <td>
  126 + {{materialConsumoSelecionado.codigoEDescricao}}
  127 + </td>
  128 + </tr>
  129 + </tbody>
  130 + </table>
  131 + </div>
  132 + </div>
  133 + </div>
  134 + <div class="row">
  135 + <div class="col-md-12">
  136 + <auto-complete ng-id="filtroAtendimento.unidadeRequisitanteSelecao" ng-label="ALMOXARIFADO.LABEL.UNIDADE_REQUISITANTE"
  137 + ng-model="filtroAtendimento.unidadeRequisitanteSelecao" form="formDialogBuscaAvancadaRequisicao"
  138 + ng-find="findEstruturaOrganizacionalUR(value)" ng-set-result="setUnidadeRequisitante(item);"
  139 + ng-item="item.nome + ' - ' + item.classificacao" />
  140 + </div>
  141 + </div>
  142 + <div class="row" ng-show="listaUnidadesRequisitantesSelecionadas.length > 0">
  143 + <div class="col-sm-12">
  144 + <div class="panel panel-default">
  145 + <div class="panel-heading clearfix">
  146 + <button class="btn btn-clear" type="button" ng-click="removerUnidadeRequisitanteSelecionada()">
  147 + <i class="fa fa-times red"></i>
  148 + <translate>LABEL.REMOVER</translate>
  149 + </button>
  150 + </div>
  151 + <table class="table table-bordered table-striped">
  152 + <thead>
  153 + <tr>
  154 + <th style="width: 3%;" class="text-center">
  155 + <input type="checkbox" ng-model="filtroAtendimento.unidadeRequisitanteSelectedAll" ng-click="selectAllUnidadesRequisitantes(unidadeRequisitanteSelectedAll)"/>
  156 + </th>
  157 + <th style="text-align: center">
  158 + <translate>ALMOXARIFADO.LABEL.UNIDADE_REQUISITANTE</translate>
  159 + </th>
  160 + </tr>
  161 + </thead>
  162 + <tbody ng-repeat="unidadeRequisitanteSelecionada in listaUnidadesRequisitantesSelecionadas">
  163 + <tr>
  164 + <td class="text-center">
  165 + <input type="checkbox" ng-checked="unidadeRequisitanteSelecionada.$checkedChBox" ng-model="unidadeRequisitanteSelecionada.$checkedChBox"/>
  166 + </td>
  167 + <td>
  168 + {{unidadeRequisitanteSelecionada.nome}}
  169 + </td>
  170 + </tr>
  171 + </tbody>
  172 + </table>
  173 + </div>
  174 + </div>
  175 + </div>
  176 + </div>
  177 + </form>
  178 +</script>
cit-almoxarifado-web/src/main/webapp/html/atendimentoRequisicaoConsumo/dialog_atendimento_item_enderecos.html 0 → 100644
@@ -0,0 +1,68 @@ @@ -0,0 +1,68 @@
  1 +<div class="modal-header">
  2 + <button class="btn btn-clear" type="button" ng-click="saveListaEnderecos()"
  3 + title="{{$translate.instant('LABEL.SALVAR')}}" ng-show="edit"
  4 + alt="{{$translate.instant('LABEL.SALVAR')}}">
  5 + <i class="fa fa-save green"></i>
  6 + <translate>LABEL.SALVAR</translate>
  7 + </button>
  8 +
  9 + <button title="{{$translate.instant('LABEL.CANCELAR')}}"
  10 + alt="{{$translate.instant('LABEL.CANCELAR')}}"
  11 + ng-click="$dismiss('cancel');" class="btn btn-clear" type="button">
  12 + <i class="fa fa-times red"></i>
  13 + <translate>LABEL.CANCELAR</translate>
  14 + </button>
  15 +</div>
  16 +
  17 +<div class="modal-body">
  18 + <legend style="font-size: 20px">
  19 + <translate>ALMOXARIFADO.LABEL.ENDERECOS_ESTOQUE</translate>
  20 + </legend>
  21 +
  22 + <div class="row">
  23 + <div class="col-md-12">
  24 + <label-select ng-model="itemAtendimentoRequisicaoConsumoItemEndereco" ng-list="listaEnderecosSelect" ng-show="edit"
  25 + ng-custom-options="itemAtendimentoRequisicaoConsumoItemEndereco as itemAtendimentoRequisicaoConsumoItemEndereco.materialLocalEstoque.endereco.descricao for itemAtendimentoRequisicaoConsumoItemEndereco"></label-select>
  26 + </div>
  27 + </div>
  28 + <div class="row">
  29 + <div class="col-sm-12">
  30 + <div class="panel panel-default">
  31 + <div class="panel-heading clearfix">
  32 + <button class="btn btn-clear" type="button" ng-disabled="listaEnderecosSelect.length == 0 || !itemAtendimentoRequisicaoConsumoItemEndereco || !edit"
  33 + ng-click="addEnderecoToList(itemAtendimentoRequisicaoConsumoItemEndereco)">
  34 + <i class="fa fa-plus-circle yellow-dark"></i>
  35 + <translate>LABEL.ADICIONAR</translate>
  36 + </button>
  37 + <button class="btn btn-clear" type="button" ng-click="removeEnderecoFromList()" ng-disabled="!edit">
  38 + <i class="fa fa-times red"></i>
  39 + <translate>LABEL.REMOVER</translate>
  40 + </button>
  41 + </div>
  42 + <table class="table table-bordered table-striped">
  43 + <thead>
  44 + <tr>
  45 + <th style="width: 3%;" class="text-center"><input type="checkbox" ng-model="atendimentoRequisicaoConsumoItemEnderecoSelectedAll" ng-click="selectAllEnderecos(atendimentoRequisicaoConsumoItemEnderecoSelectedAll)" /></th>
  46 + <th style="text-align: center"><translate>ALMOXARIFADO.LABEL.ENDERECO_ESTOQUE</translate></th>
  47 + <th style="text-align: center"><translate>ALMOXARIFADO.LABEL.SALDO_ENDERECO</translate></th>
  48 + <th style="text-align: center"><translate>ALMOXARIFADO.LABEL.ATENDER</translate></th>
  49 + </tr>
  50 + </thead>
  51 + <tbody ng-repeat="atendimentoRequisicaoConsumoItemEndereco in listaEnderecosAdicionados">
  52 + <tr ng-class="atendimentoRequisicaoConsumoItemEndereco.$hasError ? 'danger' : ''">
  53 + <td class="text-center"><input type="checkbox" ng-checked="atendimentoRequisicaoConsumoItemEndereco.$checkedChBox" ng-model="atendimentoRequisicaoConsumoItemEndereco.$checkedChBox" /></td>
  54 + <td class="text-center">{{atendimentoRequisicaoConsumoItemEndereco.materialLocalEstoque.endereco.descricao}}</td>
  55 + <td class="text-center">{{atendimentoRequisicaoConsumoItemEndereco.materialLocalEstoque.quantidade}}</td>
  56 + <td class="text-center">
  57 + <label-input-decimal ng-id="atendimentoRequisicaoConsumoItemEndereco.quantidade" ng-obrigatorio="true" ng-evento-blur="aplicarValidacaoDecimal" ng-disabled="!edit"
  58 + ng-model="atendimentoRequisicaoConsumoItemEndereco.quantidade" form="atendimentoRequisicaoConsumoForm" ng-evento-keyup="validarQuantidades(atendimentoItemEmEdicao)"
  59 + ng-custom-maxlength="{{atendimentoRequisicaoConsumoItemEndereco.materialLocalEstoque.materialEstoque.material.unidadeArmazenamento.tipoNumerico.codigo === 1 ? 4 : 11}}"
  60 + ng-precisao="{{atendimentoRequisicaoConsumoItemEndereco.materialLocalEstoque.materialEstoque.material.unidadeArmazenamento.tipoNumerico.codigo === 1 ? 0 : 'decimal'}}" />
  61 + </td>
  62 + </tr>
  63 + </tbody>
  64 + </table>
  65 + </div>
  66 + </div>
  67 + </div>
  68 +</div>
0 \ No newline at end of file 69 \ No newline at end of file