Commit 3b71ed4503e44e198e871ce89bdf5c903fba71ac

Authored by joyfas.silva
2 parents f7f214f9 e8b19b41
Exists in master

Merge branch 'tarefa-3943' into tarefa-4530

# Conflicts:
#	cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/EntradaAlmoxarifadoController.js
#	cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/dialog_add_materiais.html
Showing 21 changed files with 1196 additions and 532 deletions   Show diff stats
cit-almoxarifado-api/src/main/java/br/com/centralit/api/model/MaterialLocalEstoque.java
@@ -91,7 +91,7 @@ public class MaterialLocalEstoque extends PersistentObjectAuditOrganizacao { @@ -91,7 +91,7 @@ public class MaterialLocalEstoque extends PersistentObjectAuditOrganizacao {
91 @ManyToOne(fetch = FetchType.LAZY, optional = true) 91 @ManyToOne(fetch = FetchType.LAZY, optional = true)
92 private UnidadeMedida unidadeMedidaEntrada; 92 private UnidadeMedida unidadeMedidaEntrada;
93 93
94 - @JsonView({ Views.MaterialLocalEstoqueView.class }) 94 + @JsonView({ Views.GenericView.class })
95 private Boolean localPrincipal; 95 private Boolean localPrincipal;
96 96
97 /** 97 /**
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/EntradaAlmoxarifadoService.java
1 package br.com.centralit.api.service; 1 package br.com.centralit.api.service;
2 2
3 -import java.util.List;  
4 import java.util.Map; 3 import java.util.Map;
5 4
6 import br.com.centralit.api.model.EntradaAlmoxarifado; 5 import br.com.centralit.api.model.EntradaAlmoxarifado;
@@ -10,6 +9,20 @@ public interface EntradaAlmoxarifadoService extends GenericService<EntradaAlmoxa @@ -10,6 +9,20 @@ public interface EntradaAlmoxarifadoService extends GenericService<EntradaAlmoxa
10 9
11 Map<String, String> buscaValoresDocumentoEntrada(Long idEntrada); 10 Map<String, String> buscaValoresDocumentoEntrada(Long idEntrada);
12 11
  12 + /**
  13 + * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p>
  14 + *
  15 + * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
  16 + *
  17 + * Método responsável por concluir uma entrada do almoxarifado
  18 + *
  19 + * @author geovane.filho
  20 + *
  21 + * @param entradaAlmoxarifado
  22 + * @return
  23 + */
  24 + EntradaAlmoxarifado concluir(EntradaAlmoxarifado entradaAlmoxarifado);
  25 +
13 } 26 }
14 27
15 28
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/MovimentoEstoqueService.java
@@ -209,4 +209,18 @@ public interface MovimentoEstoqueService extends GenericService&lt;MovimentoEstoque @@ -209,4 +209,18 @@ public interface MovimentoEstoqueService extends GenericService&lt;MovimentoEstoque
209 */ 209 */
210 public Collection<MovimentoEstoque> findAllByClasseReferencia(Dominio classeReferencia, Long idReferencia); 210 public Collection<MovimentoEstoque> findAllByClasseReferencia(Dominio classeReferencia, Long idReferencia);
211 211
  212 + /**
  213 + * <p><b>Iniciativa(s):</b> <a href="LINK_PORTAL">NUMERO_INICIATIVA</a></p>
  214 + *
  215 + * <p><b>Regra(s) de negócio:</b> <a href="LINK_PORTAL">NUMERO_REGRA_DE_NEGOCIO</a></p>
  216 + *
  217 + * Método responsável por buscar todos os códigos das operações de atendimentos e baixas que ocorreram com materiais da entrada passada como referência
  218 + *
  219 + * @author geovane.filho
  220 + *
  221 + * @param idEntrada
  222 + * @return
  223 + */
  224 + String buscarMovimentosSaidaComMateriaisDaEntrada(Long idEntrada);
  225 +
212 } 226 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/EntradaAlmoxarifadoServiceImpl.java
1 package br.com.centralit.api.service.impl; 1 package br.com.centralit.api.service.impl;
2 2
  3 +import java.util.Calendar;
3 import java.util.HashMap; 4 import java.util.HashMap;
4 import java.util.Map; 5 import java.util.Map;
5 6
@@ -9,7 +10,6 @@ import org.springframework.stereotype.Service; @@ -9,7 +10,6 @@ import org.springframework.stereotype.Service;
9 import org.springframework.validation.Validator; 10 import org.springframework.validation.Validator;
10 11
11 import br.com.centralit.api.dao.EntradaAlmoxarifadoDao; 12 import br.com.centralit.api.dao.EntradaAlmoxarifadoDao;
12 -import br.com.centralit.api.model.BemAlmoxarifadoCaracteristica;  
13 import br.com.centralit.api.model.EntradaAlmoxarifado; 13 import br.com.centralit.api.model.EntradaAlmoxarifado;
14 import br.com.centralit.api.model.EntradaAlmoxarifadoDocumento; 14 import br.com.centralit.api.model.EntradaAlmoxarifadoDocumento;
15 import br.com.centralit.api.model.EntradaAlmoxarifadoItem; 15 import br.com.centralit.api.model.EntradaAlmoxarifadoItem;
@@ -27,6 +27,7 @@ import br.com.centralit.api.service.MovimentoEstoqueService; @@ -27,6 +27,7 @@ import br.com.centralit.api.service.MovimentoEstoqueService;
27 import br.com.centralit.api.service.ParceiroService; 27 import br.com.centralit.api.service.ParceiroService;
28 import br.com.centralit.api.service.UnidadeMedidaService; 28 import br.com.centralit.api.service.UnidadeMedidaService;
29 import br.com.centralit.api.service.UsuarioService; 29 import br.com.centralit.api.service.UsuarioService;
  30 +import br.com.centralit.api.service.validation.EntradaAlmoxarifadoAllValidator;
30 import br.com.centralit.framework.exception.BusinessException; 31 import br.com.centralit.framework.exception.BusinessException;
31 import br.com.centralit.framework.exception.CodigoErro; 32 import br.com.centralit.framework.exception.CodigoErro;
32 import br.com.centralit.framework.model.Dominio; 33 import br.com.centralit.framework.model.Dominio;
@@ -68,12 +69,6 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl @@ -68,12 +69,6 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl
68 /** Atributo VALIDACAO_DATA_FORA_REFERENCIA_EXCLUSAO_ENTRADA. */ 69 /** Atributo VALIDACAO_DATA_FORA_REFERENCIA_EXCLUSAO_ENTRADA. */
69 private static final String VALIDACAO_DATA_FORA_REFERENCIA_EXCLUSAO_ENTRADA = "VALIDACAO.DATA_FORA_REFERENCIA_EXCLUSAO_ENTRADA"; 70 private static final String VALIDACAO_DATA_FORA_REFERENCIA_EXCLUSAO_ENTRADA = "VALIDACAO.DATA_FORA_REFERENCIA_EXCLUSAO_ENTRADA";
70 71
71 - /** Atributo VALIDACAO_DATA_RECEBIMENTO. */  
72 - private static final String VALIDACAO_DATA_RECEBIMENTO = "VALIDACAO.DATA_RECEBIMENTO";  
73 -  
74 - /** Atributo MSG_MN019. */  
75 - private static final String MSG_MN019 = "MSG.MN019";  
76 -  
77 /** Atributo entradaAlmoxarifadoDao. */ 72 /** Atributo entradaAlmoxarifadoDao. */
78 private EntradaAlmoxarifadoDao entradaAlmoxarifadoDao; 73 private EntradaAlmoxarifadoDao entradaAlmoxarifadoDao;
79 74
@@ -109,42 +104,53 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl @@ -109,42 +104,53 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl
109 104
110 @Autowired 105 @Autowired
111 private ConfiguracaoParametroSistemaService configuracaoParametroSistemaService; 106 private ConfiguracaoParametroSistemaService configuracaoParametroSistemaService;
  107 +
  108 + private Validator validatorBasic;
  109 +
  110 + private Validator validatorAll;
112 111
113 /** 112 /**
114 * Responsável pela criação de novas instâncias desta classe. 113 * Responsável pela criação de novas instâncias desta classe.
115 * 114 *
116 * @param entradaAlmoxarifadoDao 115 * @param entradaAlmoxarifadoDao
117 - * @param validator 116 + * @param validatorBasic
118 */ 117 */
119 @Autowired 118 @Autowired
120 - public EntradaAlmoxarifadoServiceImpl( EntradaAlmoxarifadoDao entradaAlmoxarifadoDao, @Qualifier("entradaAlmoxarifadoValidator") Validator validator ) { 119 + public EntradaAlmoxarifadoServiceImpl( EntradaAlmoxarifadoDao entradaAlmoxarifadoDao, @Qualifier("entradaAlmoxarifadoBasicValidator") Validator validatorBasic ) {
121 120
122 this.dao = entradaAlmoxarifadoDao; 121 this.dao = entradaAlmoxarifadoDao;
123 this.entradaAlmoxarifadoDao = entradaAlmoxarifadoDao; 122 this.entradaAlmoxarifadoDao = entradaAlmoxarifadoDao;
124 - this.validator = validator; 123 + this.validatorBasic = validatorBasic;
  124 +
  125 + EntradaAlmoxarifadoAllValidator entradaAlmoxarifadoAllValidator = new EntradaAlmoxarifadoAllValidator(this, movimentoEstoqueService);
  126 +
  127 + this.validatorAll = entradaAlmoxarifadoAllValidator;
  128 +
  129 + this.validator = entradaAlmoxarifadoAllValidator;
125 } 130 }
126 131
127 /** 132 /**
128 * 133 *
129 */ 134 */
130 @Override 135 @Override
131 - public EntradaAlmoxarifado save(EntradaAlmoxarifado entity) {  
132 -  
133 - this.validarEntidade(entity, this.validator);  
134 -  
135 - this.montarEntidade(entity);  
136 -  
137 - this.validarDataContabil(entity);  
138 -  
139 - this.validarDataRecebimento(entity); 136 + public EntradaAlmoxarifado save(EntradaAlmoxarifado entrada) {
  137 +
  138 + this.validarEntidade(entrada, this.validatorBasic);
  139 +
  140 + // validação de se a data contabil esta dentro do mes referencia
  141 + Calendar dataContabil = null;
  142 + if(UtilObjeto.isReferencia(entrada.getDataContabil())){
  143 + dataContabil = Calendar.getInstance();
  144 + dataContabil.setTime(entrada.getDataContabil().getTime());
  145 + }
  146 +
  147 + this.montarEntidade(entrada);
140 148
141 - EntradaAlmoxarifado entradaAlmoxarifado = (EntradaAlmoxarifado) this.entradaAlmoxarifadoDao.save(entity); 149 + EntradaAlmoxarifado entradaAlmoxarifado = (EntradaAlmoxarifado) this.entradaAlmoxarifadoDao.save(entrada);
142 150
143 configurarNotaRecebimento(entradaAlmoxarifado); 151 configurarNotaRecebimento(entradaAlmoxarifado);
144 152
145 - entity.setCodigo(String.valueOf(entradaAlmoxarifado.getNotaRecebimento()));  
146 -  
147 - this.movimentoEstoqueService.gerarMovimento(entradaAlmoxarifado); 153 + entrada.setCodigo(String.valueOf(entradaAlmoxarifado.getNotaRecebimento()));
148 154
149 return entradaAlmoxarifado; 155 return entradaAlmoxarifado;
150 } 156 }
@@ -154,54 +160,55 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl @@ -154,54 +160,55 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl
154 * 160 *
155 * @author wilker.machado 161 * @author wilker.machado
156 * 162 *
157 - * @param entity 163 + * @param entrada
158 */ 164 */
159 - private void montarEntidade(EntradaAlmoxarifado entity) { 165 + private void montarEntidade(EntradaAlmoxarifado entrada) {
160 166
161 - entity.setAlmoxarifado(this.estruturaOrganizacionalService.find(entity.getAlmoxarifado().getId())); 167 + entrada.setAlmoxarifado(this.estruturaOrganizacionalService.find(entrada.getAlmoxarifado().getId()));
162 168
163 - entity.setFornecedor((Fornecedor) this.parceiroService.find(entity.getFornecedor().getId())); 169 + entrada.setFornecedor((Fornecedor) this.parceiroService.find(entrada.getFornecedor().getId()));
164 170
165 - entity.setDominioTipoEntrada(this.dominioService.find(entity.getDominioTipoEntrada().getId())); 171 + entrada.setDominioTipoEntrada(this.dominioService.find(entrada.getDominioTipoEntrada().getId()));
166 172
167 - entity.setDominioTipoRecebimento(this.dominioService.find(entity.getDominioTipoRecebimento().getId())); 173 + entrada.setDominioTipoRecebimento(this.dominioService.find(entrada.getDominioTipoRecebimento().getId()));
168 174
169 - entity.setDominioFinalidade(this.dominioService.findByChaveAndCodigo("tipoFinalidadeMaterial", entity.getDominioFinalidade().getCodigo())); 175 + entrada.setDominioFinalidade(this.dominioService.findByChaveAndCodigo("tipoFinalidadeMaterial", entrada.getDominioFinalidade().getCodigo()));
170 176
171 - if(UtilObjeto.isReferencia(entity.getUnidadeRequisitante()) && UtilObjeto.isReferencia(entity.getUnidadeRequisitante().getId())){ 177 + if(UtilObjeto.isReferencia(entrada.getUnidadeRequisitante()) && UtilObjeto.isReferencia(entrada.getUnidadeRequisitante().getId())){
172 178
173 - entity.setUnidadeRequisitante(this.estruturaOrganizacionalService.find(entity.getUnidadeRequisitante().getId())); 179 + entrada.setUnidadeRequisitante(this.estruturaOrganizacionalService.find(entrada.getUnidadeRequisitante().getId()));
174 180
175 } 181 }
176 182
177 - for (EntradaAlmoxarifadoItem entradaAlmoxarifadoItem : entity.getEntradasItem()) { 183 + for (EntradaAlmoxarifadoItem entradaAlmoxarifadoItem : entrada.getEntradasItem()) {
178 184
179 entradaAlmoxarifadoItem.setMaterial(this.materialConsumoService.find(entradaAlmoxarifadoItem.getMaterial().getId())); 185 entradaAlmoxarifadoItem.setMaterial(this.materialConsumoService.find(entradaAlmoxarifadoItem.getMaterial().getId()));
180 186
181 entradaAlmoxarifadoItem.setUnidadeMedidaEntrada(this.unidadeMedidaService.find(entradaAlmoxarifadoItem.getUnidadeMedidaEntrada().getId())); 187 entradaAlmoxarifadoItem.setUnidadeMedidaEntrada(this.unidadeMedidaService.find(entradaAlmoxarifadoItem.getUnidadeMedidaEntrada().getId()));
182 188
183 - entradaAlmoxarifadoItem.setEntrada(entity); 189 + entradaAlmoxarifadoItem.setEntrada(entrada);
184 190
185 - for (BemAlmoxarifadoCaracteristica bemAlmoxarifadoCaracteristica : entradaAlmoxarifadoItem.getCaracteristicas()) { 191 + //TODO Arrumar caracteristicas
  192 + /*for (BemAlmoxarifadoCaracteristica bemAlmoxarifadoCaracteristica : entradaAlmoxarifadoItem.getCaracteristicas()) {
186 193
187 bemAlmoxarifadoCaracteristica.setMaterialCaracteristica(this.materialCaracteristicaService.find(bemAlmoxarifadoCaracteristica.getMaterialCaracteristica().getId())); 194 bemAlmoxarifadoCaracteristica.setMaterialCaracteristica(this.materialCaracteristicaService.find(bemAlmoxarifadoCaracteristica.getMaterialCaracteristica().getId()));
188 195
189 bemAlmoxarifadoCaracteristica.setCaracteristica(bemAlmoxarifadoCaracteristica.getMaterialCaracteristica().getCaracteristica()); 196 bemAlmoxarifadoCaracteristica.setCaracteristica(bemAlmoxarifadoCaracteristica.getMaterialCaracteristica().getCaracteristica());
190 197
191 bemAlmoxarifadoCaracteristica.setEntradaItem(entradaAlmoxarifadoItem); 198 bemAlmoxarifadoCaracteristica.setEntradaItem(entradaAlmoxarifadoItem);
192 - } 199 + }*/
193 200
194 } 201 }
195 202
196 - for (EntradaAlmoxarifadoObservacao entradaObservacao : entity.getObservacoes()) { 203 + for (EntradaAlmoxarifadoObservacao entradaObservacao : entrada.getObservacoes()) {
197 204
198 entradaObservacao.setAutor(this.usuarioService.find(entradaObservacao.getAutor().getId())); 205 entradaObservacao.setAutor(this.usuarioService.find(entradaObservacao.getAutor().getId()));
199 206
200 - entradaObservacao.setEntrada(entity); 207 + entradaObservacao.setEntrada(entrada);
201 208
202 } 209 }
203 210
204 - for (EntradaAlmoxarifadoDocumento entradaDocumento : entity.getDocumentos()) { 211 + for (EntradaAlmoxarifadoDocumento entradaDocumento : entrada.getDocumentos()) {
205 212
206 entradaDocumento.setDominioTipoDocumento(this.dominioService.find(entradaDocumento.getDominioTipoDocumento().getId())); 213 entradaDocumento.setDominioTipoDocumento(this.dominioService.find(entradaDocumento.getDominioTipoDocumento().getId()));
207 214
@@ -210,38 +217,13 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl @@ -210,38 +217,13 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl
210 entradaDocumento.setEmitente(this.parceiroService.find(entradaDocumento.getEmitente().getId())); 217 entradaDocumento.setEmitente(this.parceiroService.find(entradaDocumento.getEmitente().getId()));
211 } 218 }
212 219
213 - entradaDocumento.setEntrada(entity); 220 + entradaDocumento.setEntrada(entrada);
214 } 221 }
215 -  
216 - }  
217 -  
218 - /**  
219 - * Método responsável por validar se a data de recebimento e menor que a data de cadastro da entrada  
220 - *  
221 - * @author wilker.machado  
222 - *  
223 - * @param entrada  
224 - */  
225 - private void validarDataRecebimento(EntradaAlmoxarifado entrada) {  
226 -  
227 - if (UtilDate.isPrimeiraDataMenorSegundaData(entrada.getDataReferencia(), entrada.getDataRecebimento())) {  
228 -  
229 - throw new BusinessException(VALIDACAO_DATA_RECEBIMENTO, CodigoErro.REGRA_NEGOCIO.getValue());  
230 - }  
231 - }  
232 -  
233 - /**  
234 - * Método responsável por validação de se a data contabil esta dentro do mes referencia  
235 - *  
236 - * @author wilker.machado  
237 - *  
238 - * @param entrada  
239 - */  
240 - private void validarDataContabil(EntradaAlmoxarifado entrada) {  
241 -  
242 - if (!UtilDate.isDentroMes(entrada.getDataContabil(), entrada.getAlmoxarifado().getOrganizacao().getDataReferenciaVigente())) {  
243 -  
244 - throw new BusinessException(MSG_MN019, CodigoErro.REGRA_NEGOCIO.getValue()); 222 +
  223 + if (UtilObjeto.isReferencia(entrada.getDataContabil())) {
  224 + entrada.setIsContabilizada(Boolean.TRUE);
  225 + } else {
  226 + entrada.setIsContabilizada(Boolean.FALSE);
245 } 227 }
246 } 228 }
247 229
@@ -332,4 +314,11 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl @@ -332,4 +314,11 @@ public class EntradaAlmoxarifadoServiceImpl extends GenericServiceImpl&lt;EntradaAl
332 return listaValoresDocumento; 314 return listaValoresDocumento;
333 } 315 }
334 316
  317 + @Override
  318 + public EntradaAlmoxarifado concluir(EntradaAlmoxarifado entradaAlmoxarifado) {
  319 +
  320 + // TODO Auto-generated method stub
  321 + return null;
  322 + }
  323 +
335 } 324 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/impl/MovimentoEstoqueServiceImpl.java
@@ -8,6 +8,7 @@ import java.util.HashMap; @@ -8,6 +8,7 @@ import java.util.HashMap;
8 import java.util.List; 8 import java.util.List;
9 import java.util.Map; 9 import java.util.Map;
10 10
  11 +import org.apache.commons.lang.NotImplementedException;
11 import org.springframework.beans.factory.annotation.Autowired; 12 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.beans.factory.annotation.Qualifier; 13 import org.springframework.beans.factory.annotation.Qualifier;
13 import org.springframework.security.core.context.SecurityContextHolder; 14 import org.springframework.security.core.context.SecurityContextHolder;
@@ -577,4 +578,9 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst @@ -577,4 +578,9 @@ public class MovimentoEstoqueServiceImpl extends GenericServiceImpl&lt;MovimentoEst
577 return this.movimentoEstoqueDao.findAllByClasseReferencia(classeReferencia, idReferencia); 578 return this.movimentoEstoqueDao.findAllByClasseReferencia(classeReferencia, idReferencia);
578 } 579 }
579 580
  581 + @Override
  582 + public String buscarMovimentosSaidaComMateriaisDaEntrada(Long idEntrada) {
  583 + throw new NotImplementedException();
  584 + }
  585 +
580 } 586 }
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/validation/EntradaAlmoxarifadoAllValidator.java 0 → 100644
@@ -0,0 +1,97 @@ @@ -0,0 +1,97 @@
  1 +package br.com.centralit.api.service.validation;
  2 +
  3 +import java.math.BigDecimal;
  4 +
  5 +import org.springframework.beans.factory.annotation.Autowired;
  6 +import org.springframework.stereotype.Component;
  7 +import org.springframework.validation.Errors;
  8 +import org.springframework.validation.ValidationUtils;
  9 +import org.springframework.validation.Validator;
  10 +
  11 +import br.com.centralit.api.model.EntradaAlmoxarifado;
  12 +import br.com.centralit.api.model.EntradaAlmoxarifadoItem;
  13 +import br.com.centralit.api.service.EntradaAlmoxarifadoService;
  14 +import br.com.centralit.api.service.MovimentoEstoqueService;
  15 +import br.com.centralit.framework.exception.CodigoErro;
  16 +import br.com.centralit.framework.util.UtilColecao;
  17 +import br.com.centralit.framework.util.UtilDate;
  18 +import br.com.centralit.framework.util.UtilObjeto;
  19 +
  20 +@Component("entradaAlmoxarifadoAllValidator")
  21 +public class EntradaAlmoxarifadoAllValidator implements Validator {
  22 +
  23 + @Autowired
  24 + private EntradaAlmoxarifadoService entradaAlmoxarifadoService;
  25 +
  26 + @Autowired
  27 + private MovimentoEstoqueService movimentoEstoqueService;
  28 +
  29 + public EntradaAlmoxarifadoAllValidator() {
  30 +
  31 + super();
  32 + }
  33 +
  34 + public EntradaAlmoxarifadoAllValidator(EntradaAlmoxarifadoService entradaAlmoxarifadoService, MovimentoEstoqueService movimentoEstoqueService ) {
  35 + super();
  36 + this.entradaAlmoxarifadoService = entradaAlmoxarifadoService;
  37 + this.movimentoEstoqueService = movimentoEstoqueService;
  38 + }
  39 +
  40 + @Override
  41 + public boolean supports(Class<?> clazz) {
  42 +
  43 + return EntradaAlmoxarifado.class.isAssignableFrom(clazz);
  44 + }
  45 +
  46 + @Override
  47 + public void validate(Object target, Errors errors) {
  48 +
  49 + ValidationUtils.rejectIfEmpty(errors, "dataContabil", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.DATA_CONTABILIZACAO");
  50 +
  51 + EntradaAlmoxarifado entrada = (EntradaAlmoxarifado) target;
  52 +
  53 + EntradaAlmoxarifado entradaOld = this.entradaAlmoxarifadoService.find(entrada.getId());
  54 +
  55 + if (UtilObjeto.isReferencia(entradaOld.getDataContabil())) {
  56 + String codigosMovimentos = this.movimentoEstoqueService.buscarMovimentosSaidaComMateriaisDaEntrada(entradaOld.getId());
  57 + boolean alteracaoData = false;
  58 +
  59 + if (!UtilObjeto.isReferencia(entrada.getDataContabil())) {
  60 + alteracaoData = true;
  61 + } else if (!UtilDate.compareCalendar(entrada.getDataContabil(), entradaOld.getDataContabil())) {
  62 + alteracaoData = true;
  63 + }
  64 +
  65 + if (alteracaoData && !codigosMovimentos.isEmpty()) {
  66 + errors.rejectValue("dataContabil", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.VALIDACAO.DATA_CONTABIL_ALTERADA_SAIDAS");
  67 + }
  68 + }
  69 +
  70 + if (UtilObjeto.isReferencia(entrada.getDataContabil())) {
  71 +
  72 + if (UtilColecao.isVazio(entrada.getDocumentos())) {
  73 + errors.rejectValue("documentos", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "CORPORATIVO.LABEL.ASSOCIAR_DOCUMENTOS");
  74 + }
  75 +
  76 + BigDecimal valorTotalItens = new BigDecimal(0L);
  77 +
  78 + // repetição para verificar a soma de todos os itens da entrada e igual ao valor da nota
  79 + int item = 1;
  80 + for (EntradaAlmoxarifadoItem entradaItem : entrada.getEntradasItem()) {
  81 + if(entradaItem.getQuantidade() == null || entradaItem.getQuantidade() == BigDecimal.ZERO){
  82 + errors.rejectValue("entradasItem", CodigoErro.VALIDACAO_CAMPOS.getValue().toString(),"VALIDACAO.QUANTIDADE_MAIOR_ZERO");
  83 + }
  84 + //TODO validacaoBensCaracteristicasObrigatorias(errors, entradaItem, item);
  85 + valorTotalItens = valorTotalItens.add(entradaItem.getValorTotal());
  86 + item++;
  87 + }
  88 +
  89 + // verificar se os valores da nota e da soma dos itens sao iguais, caso nao seja e lançada uma exceção
  90 + if (UtilObjeto.isReferencia(entrada.getValorTotalNota()) && valorTotalItens.compareTo(entrada.getValorTotalNota()) != 0) {
  91 + errors.rejectValue("valorTotalNota", CodigoErro.VALIDACAO_CAMPOS.getValue().toString(), "ALMOXARIFADO.VALIDACAO.NOTA_FISCAL_IGUAL_VALOR_INFORMADO");
  92 + }
  93 + }
  94 +
  95 + }
  96 +}
  97 +
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/validation/EntradaAlmoxarifadoBasicValidator.java 0 → 100644
@@ -0,0 +1,61 @@ @@ -0,0 +1,61 @@
  1 +package br.com.centralit.api.service.validation;
  2 +
  3 +import org.springframework.stereotype.Component;
  4 +import org.springframework.validation.Errors;
  5 +import org.springframework.validation.ValidationUtils;
  6 +import org.springframework.validation.Validator;
  7 +
  8 +import br.com.centralit.api.model.EntradaAlmoxarifado;
  9 +import br.com.centralit.api.model.EntradaAlmoxarifadoItem;
  10 +import br.com.centralit.framework.exception.CodigoErro;
  11 +import br.com.centralit.framework.util.UtilColecao;
  12 +import br.com.centralit.framework.util.UtilDate;
  13 +import br.com.centralit.framework.util.UtilObjeto;
  14 +
  15 +@Component("entradaAlmoxarifadoBasicValidator")
  16 +public class EntradaAlmoxarifadoBasicValidator implements Validator {
  17 +
  18 + @Override
  19 + public boolean supports(Class<?> clazz) {
  20 +
  21 + return EntradaAlmoxarifado.class.isAssignableFrom(clazz);
  22 + }
  23 +
  24 + @Override
  25 + public void validate(Object target, Errors errors) {
  26 +
  27 + ValidationUtils.rejectIfEmpty(errors, "almoxarifado", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.ALMOXARIFADO");
  28 +
  29 + ValidationUtils.rejectIfEmpty(errors, "fornecedor", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.FORNECEDOR");
  30 +
  31 + ValidationUtils.rejectIfEmpty(errors, "dominioTipoEntrada", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.TIPO_ENTRADA");
  32 +
  33 + ValidationUtils.rejectIfEmpty(errors, "dominioTipoRecebimento", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.TIPO_RECEBIMENTO");
  34 +
  35 + ValidationUtils.rejectIfEmpty(errors, "dataRecebimento", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.DATA_RECEBIMENTO");
  36 +
  37 + ValidationUtils.rejectIfEmpty(errors, "valorTotalNota", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.VALOR_TOTAL_NOTA");
  38 +
  39 + ValidationUtils.rejectIfEmpty(errors, "dominioFinalidade", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.FINALIDADE");
  40 +
  41 + EntradaAlmoxarifado entrada = (EntradaAlmoxarifado) target;
  42 +
  43 + if (UtilDate.isPrimeiraDataMenorSegundaData(entrada.getDataReferencia(), entrada.getDataRecebimento())) {
  44 + errors.rejectValue("dataRecebimento", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "VALIDACAO.DATA_RECEBIMENTO");
  45 + }
  46 +
  47 + if (UtilObjeto.isReferencia(entrada.getDataContabil())) {
  48 + if (!UtilDate.isDentroMes(entrada.getDataContabil(), entrada.getAlmoxarifado().getOrganizacao().getDataReferenciaVigente())) {
  49 + errors.rejectValue("dataContabil", CodigoErro.REGRA_NEGOCIO.getValue().toString(), "MSG.MN019");
  50 + }
  51 + }
  52 +
  53 + ValidationUtils.rejectIfEmpty(errors, "valorTotalNota", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.VALOR_TOTAL_NOTA");
  54 +
  55 + if (UtilColecao.isVazio(entrada.getEntradasItem())) {
  56 + errors.rejectValue("entradasItem", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.MATERIAIS");
  57 + }
  58 +
  59 + }
  60 +}
  61 +
cit-almoxarifado-api/src/main/java/br/com/centralit/api/service/validation/EntradaAlmoxarifadoValidator.java
@@ -1,39 +0,0 @@ @@ -1,39 +0,0 @@
1 -package br.com.centralit.api.service.validation;  
2 -  
3 -import org.springframework.stereotype.Component;  
4 -import org.springframework.validation.Errors;  
5 -import org.springframework.validation.ValidationUtils;  
6 -import org.springframework.validation.Validator;  
7 -  
8 -import br.com.centralit.api.model.EntradaAlmoxarifado;  
9 -import br.com.centralit.framework.exception.CodigoErro;  
10 -  
11 -@Component("entradaAlmoxarifadoValidator")  
12 -public class EntradaAlmoxarifadoValidator implements Validator {  
13 -  
14 - @Override  
15 - public boolean supports(Class<?> clazz) {  
16 -  
17 - return EntradaAlmoxarifado.class.isAssignableFrom(clazz);  
18 - }  
19 -  
20 - @Override  
21 - public void validate(Object target, Errors errors) {  
22 -  
23 - ValidationUtils.rejectIfEmpty(errors, "almoxarifado", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.ALMOXARIFADO");  
24 -  
25 - ValidationUtils.rejectIfEmpty(errors, "dataRecebimento", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.DATA_RECEBIMENTO");  
26 -  
27 - ValidationUtils.rejectIfEmpty(errors, "dataContabil", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.DATA_CONTABILIZACAO");  
28 -  
29 - ValidationUtils.rejectIfEmpty(errors, "dominioTipoEntrada", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.TIPO_ENTRADA");  
30 -  
31 - ValidationUtils.rejectIfEmpty(errors, "dominioTipoRecebimento", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.TIPO_RECEBIMENTO");  
32 -  
33 - ValidationUtils.rejectIfEmpty(errors, "fornecedor", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "LABEL.FORNECEDOR");  
34 -  
35 - ValidationUtils.rejectIfEmpty(errors, "valorTotalNota", CodigoErro.VALIDACAO_CAMPOS_OBRIGATORIOS.getValue().toString(), "ALMOXARIFADO.LABEL.VALOR_TOTAL_NOTA");  
36 -  
37 - }  
38 -}  
39 -  
cit-almoxarifado-web/src/main/java/br/com/centralit/controller/EntradaAlmoxarifadoController.java
@@ -106,5 +106,11 @@ public class EntradaAlmoxarifadoController extends GenericController&lt;EntradaAlmo @@ -106,5 +106,11 @@ public class EntradaAlmoxarifadoController extends GenericController&lt;EntradaAlmo
106 106
107 return responseBody; 107 return responseBody;
108 } 108 }
  109 +
  110 + @RequestMapping(method = RequestMethod.POST, value = "/concluir")
  111 + @ResponseBody
  112 + public ResponseBodyWrapper concluir(@RequestBody EntradaAlmoxarifado entradaAlmoxarifado) {
  113 + return new ResponseBodyWrapper(this.entradaAlmoxarifadoService.concluir(entradaAlmoxarifado), getEditView());
  114 + }
109 115
110 } 116 }
cit-almoxarifado-web/src/main/java/br/com/centralit/listener/StartupListenerAlmoxarifado.java
@@ -253,7 +253,7 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat @@ -253,7 +253,7 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat
253 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.DATA_FIM_REQUISICAO", "Data final requisição", dominio, modulo)); 253 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.DATA_FIM_REQUISICAO", "Data final requisição", dominio, modulo));
254 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.DATA_INICIAL_REQUISICAO", "Data inicial requisição", dominio, modulo)); 254 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.DATA_INICIAL_REQUISICAO", "Data inicial requisição", dominio, modulo));
255 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.DESTINO", "Destino", dominio, modulo)); 255 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.DESTINO", "Destino", dominio, modulo));
256 - internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ENTRADA_ESTOQUE", "Ent. no estoque", dominio, modulo)); 256 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ENTRADA_ESTOQUE", "Ent. no estoque (Qnt.)", dominio, modulo));
257 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ESTRUTURA_ORGANIZACAO", "Estrutura Organizacional - Órgão", dominio, modulo)); 257 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ESTRUTURA_ORGANIZACAO", "Estrutura Organizacional - Órgão", dominio, modulo));
258 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.LIMITE_ESTOQUE", "Limite de estoque", dominio, modulo)); 258 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.LIMITE_ESTOQUE", "Limite de estoque", dominio, modulo));
259 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.LOCAL_ESTOQUE", "Local estoque", dominio, modulo)); 259 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.LOCAL_ESTOQUE", "Local estoque", dominio, modulo));
@@ -293,14 +293,23 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat @@ -293,14 +293,23 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat
293 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.RESTOMEDIO", "Resto médio", dominio, modulo)); 293 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.RESTOMEDIO", "Resto médio", dominio, modulo));
294 294
295 //Endereco Estoque 295 //Endereco Estoque
296 - internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ENDERECO_ESTOQUE", "Endereço de Estoque", dominio, modulo));  
297 - internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ENDERECO_SUPERIOR", "Endereço Superior", dominio, modulo));  
298 - internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ENDERECO_SUPERIOR_DESCRICAO", "Desc. Endereço Superior", dominio, modulo));  
299 - internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ACOMODA_MATERIAL", "Acomoda Materiais", dominio, modulo)); 296 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ENDERECO_ESTOQUE", "Endereço de estoque", dominio, modulo));
  297 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ENDERECO_SUPERIOR", "Endereço superior", dominio, modulo));
  298 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ENDERECO_SUPERIOR_DESCRICAO", "Desc. endereço superior", dominio, modulo));
  299 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ACOMODA_MATERIAL", "Acomoda materiais", dominio, modulo));
300 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ENDERECO_ESTOQUE_TODOS_MATERIAL", "Adicionar endereço para todos os materiais", dominio, modulo)); 300 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ENDERECO_ESTOQUE_TODOS_MATERIAL", "Adicionar endereço para todos os materiais", dominio, modulo));
301 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.MATERAIS_VINCULADOS", "Existe materiais vinculados a este endereço", dominio, modulo)); 301 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.MATERAIS_VINCULADOS", "Existe materiais vinculados a este endereço", dominio, modulo));
302 - internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ENDERECO_ESTOQUE_VINCULADO_SUPERIOR", "Endereço de Estoque: ", dominio, modulo)); 302 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.ENDERECO_ESTOQUE_VINCULADO_SUPERIOR", "Endereço de estoque: ", dominio, modulo));
303 303
  304 + //Entrada de materiais
  305 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.DADOS_ENTRADA", "Dados da entrada", dominio, modulo));
  306 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.DOCUMENTOS", "Documentos", dominio, modulo));
  307 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.VALOR_TOTAL_MATERIAL_SUBTOTAL", "Valor total do material (Subtotal)", dominio, modulo));
  308 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.UN_MEDIDA", "Un. medida", dominio, modulo));
  309 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.CONCLUIR_ENTRADA", "Concluir entrada", dominio, modulo));
  310 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.CONCLUIR_ENTRADA_BTN", "Concluir", dominio, modulo));
  311 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.CONCLUIR_E_CONTABILIZAR_ENTRADA", "Concluir e contabilizar", dominio, modulo));
  312 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.LABEL.CONCLUIR_E_DESCONTABILIZAR_ENTRADA", "Concluir e descontabilizar", dominio, modulo));
304 } 313 }
305 314
306 private void gerarValidacao(Dominio dominio, Modulo modulo, List<Internacionalizacao> internacionalizacaoList) { 315 private void gerarValidacao(Dominio dominio, Modulo modulo, List<Internacionalizacao> internacionalizacaoList) {
@@ -328,6 +337,8 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat @@ -328,6 +337,8 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat
328 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.ENDERECO_ESTOQUE_IS_SUPERIOR_REMOVER", "O endereço de estoque a ser removido, foi vinculado como superior a outros endereço. Caso prossiga com a operação, também será removido todos os endereços vinculados a este. Deseja continuar?", dominio, modulo)); 337 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.ENDERECO_ESTOQUE_IS_SUPERIOR_REMOVER", "O endereço de estoque a ser removido, foi vinculado como superior a outros endereço. Caso prossiga com a operação, também será removido todos os endereços vinculados a este. Deseja continuar?", dominio, modulo));
329 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.ENDERECO_ESTOQUE_TODOS_MATERIAIS", "A definição de endereço de estoque para todos os materias não poderá ser desfeita após salvar o registro. Deseja realmente adicionar este endereço para todos os materiais?", dominio, modulo)); 338 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.ENDERECO_ESTOQUE_TODOS_MATERIAIS", "A definição de endereço de estoque para todos os materias não poderá ser desfeita após salvar o registro. Deseja realmente adicionar este endereço para todos os materiais?", dominio, modulo));
330 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.ENDERECO_ESTOQUE_VINCULO_CICLICO", "Não é permitido vincular o endereço de estoque superior, pois este endereço tem como endereço superior o registro que está sendo alterado. Favor remover ou escolher outro endereço de estoque superior.", dominio, modulo)); 339 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.ENDERECO_ESTOQUE_VINCULO_CICLICO", "Não é permitido vincular o endereço de estoque superior, pois este endereço tem como endereço superior o registro que está sendo alterado. Favor remover ou escolher outro endereço de estoque superior.", dominio, modulo));
  340 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.ENTRADA_DESCONTABILIZACAO_COM_SAIDAS", "Você não pode descontabilizar esta entrada pois existem as seguintes saídas com materiais da mesma: ", dominio, modulo));
  341 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.VALIDACAO.DATA_CONTABIL_ALTERADA_SAIDAS", "Você não pode alterar a data de contabilização após realizar atendimentos e baixas em materiais desta entrada!", dominio, modulo));
331 } 342 }
332 343
333 private void gerarMensagem(Dominio dominio, Modulo modulo, List<Internacionalizacao> internacionalizacaoList) { 344 private void gerarMensagem(Dominio dominio, Modulo modulo, List<Internacionalizacao> internacionalizacaoList) {
@@ -344,6 +355,9 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat @@ -344,6 +355,9 @@ public class StartupListenerAlmoxarifado extends UtilStartup implements Applicat
344 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.DATA_BAIXA_FORA_REFERENCIA_VIGENTE", "Data de conclusão tem que estar dentro da referência vigente", dominio, modulo)); 355 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.DATA_BAIXA_FORA_REFERENCIA_VIGENTE", "Data de conclusão tem que estar dentro da referência vigente", dominio, modulo));
345 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.REQUISICAO_DIFERENTE_NAO_CONCLUIDA_PRONTA_ATENDIMENTO", "Somente requisições de consumo com status Não concluída e Pronta para atendimento pode ser editada!", dominio, modulo)); 356 internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.REQUISICAO_DIFERENTE_NAO_CONCLUIDA_PRONTA_ATENDIMENTO", "Somente requisições de consumo com status Não concluída e Pronta para atendimento pode ser editada!", dominio, modulo));
346 internacionalizacaoList.add(new Internacionalizacao("MSG.EXISTE_REQUISICAO_DISPONIVEL_CENTROCUSTO_ALMOXARIFADO_UR", "Centro de custo, almoxarifado, unidade requisitante e materiais de consumo estão presentes na requisição: ", dominio, modulo)); 357 internacionalizacaoList.add(new Internacionalizacao("MSG.EXISTE_REQUISICAO_DISPONIVEL_CENTROCUSTO_ALMOXARIFADO_UR", "Centro de custo, almoxarifado, unidade requisitante e materiais de consumo estão presentes na requisição: ", dominio, modulo));
  358 +
  359 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.ENTRADA_CONTABILIZADA", "Entrada contabilizada com sucesso!", dominio, modulo));
  360 + internacionalizacaoList.add(new Internacionalizacao("ALMOXARIFADO.MSG.ENTRADA_DESCONTABILIZADA", "Entrada descontabilizada com sucesso!", dominio, modulo));
347 } 361 }
348 } 362 }
349 363
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/EntradaAlmoxarifadoController.js
1 'use strict'; 1 'use strict';
2 2
3 citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUploader', 'EntradaAlmoxarifadoRepository', 'EstruturaOrganizacionalAlmoxarifadoRepository', '$translate', '$timeout', 3 citApp.controller('EntradaAlmoxarifadoController', ['$scope', '$filter', 'FileUploader', 'EntradaAlmoxarifadoRepository', 'EstruturaOrganizacionalAlmoxarifadoRepository', '$translate', '$timeout',
4 - 'DominioRepository', 'FornecedorRepository', 'MaterialConsumoRepository', 'EntradaAlmoxarifadoItemRepository',  
5 - function EntradaAlmoxarifadoController($scope, $filter, FileUploader, EntradaAlmoxarifadoRepository, EstruturaOrganizacionalAlmoxarifadoRepository, $translate, $timeout,  
6 - DominioRepository , FornecedorRepository, MaterialConsumoRepository,  
7 - EntradaAlmoxarifadoItemRepository) { 4 + 'DominioRepository', 'FornecedorRepository', 'MaterialConsumoRepository', 'EntradaAlmoxarifadoItemRepository', 'MaterialLocalEstoqueRepository',
  5 + 'MovimentoEstoqueRepository',
  6 + function EntradaAlmoxarifadoController($scope, $filter, FileUploader, EntradaAlmoxarifadoRepository, EstruturaOrganizacionalAlmoxarifadoRepository,
  7 + $translate, $timeout, DominioRepository , FornecedorRepository, MaterialConsumoRepository, EntradaAlmoxarifadoItemRepository,
  8 + MaterialLocalEstoqueRepository, MovimentoEstoqueRepository) {
8 9
9 - $scope.TIPO_NUMERICO_INTEIRO = 1;  
10 - $scope.TIPO_NUMERICO_DECIMAL = 2;  
11 var CODIGO_DOMINIO_TIPO_RECEBIMENTO_COMPRA_ORCAMENTARIA = 1; 10 var CODIGO_DOMINIO_TIPO_RECEBIMENTO_COMPRA_ORCAMENTARIA = 1;
12 11
13 $scope.entradaAlmoxarifado = {}; 12 $scope.entradaAlmoxarifado = {};
  13 +
  14 + $scope.entradaAlmoxarifadoOriginal = {};
  15 + $scope.edit = true;
14 16
15 /** 17 /**
16 * Inicializa as datas do formulario de cadastro como data padrao hoje. 18 * Inicializa as datas do formulario de cadastro como data padrao hoje.
17 */ 19 */
18 $scope.resetFormInicializarDatas = function(){ 20 $scope.resetFormInicializarDatas = function(){
  21 + $scope.resetForm();
19 // Obtem estrutura almoxarifado padrao 22 // Obtem estrutura almoxarifado padrao
20 EstruturaOrganizacionalAlmoxarifadoRepository.getAlmoxarifadoPadrao($scope.usuarioLogado.organizacao.id).then(function(result){ 23 EstruturaOrganizacionalAlmoxarifadoRepository.getAlmoxarifadoPadrao($scope.usuarioLogado.organizacao.id).then(function(result){
21 $scope.estruturaAlmoxarifadoPadrao = {}; 24 $scope.estruturaAlmoxarifadoPadrao = {};
@@ -24,7 +27,6 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -24,7 +27,6 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
24 } 27 }
25 $scope.resetForm(); 28 $scope.resetForm();
26 $scope.entradaAlmoxarifado.dataRecebimento = $filter('date')(new Date(), "dd/MM/yyyy"); 29 $scope.entradaAlmoxarifado.dataRecebimento = $filter('date')(new Date(), "dd/MM/yyyy");
27 - $scope.entradaAlmoxarifado.dataContabil = $filter('date')(new Date(), "dd/MM/yyyy");  
28 }); 30 });
29 }; 31 };
30 32
@@ -33,15 +35,19 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -33,15 +35,19 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
33 // Limpa formulário para novo cadastro 35 // Limpa formulário para novo cadastro
34 $scope.resetForm = function() { 36 $scope.resetForm = function() {
35 $scope.limparEntradaAlmoxarifado(); 37 $scope.limparEntradaAlmoxarifado();
  38 +
  39 + $scope.listaEntradaItemSelecao = [];
  40 +
  41 + $scope.atualizarListaSizeSelectEntradaItem();
36 $scope.edit = true; 42 $scope.edit = true;
37 $timeout(function(){ 43 $timeout(function(){
38 $scope.entradaAlmoxarifadoForm.$submitted = false; 44 $scope.entradaAlmoxarifadoForm.$submitted = false;
39 $scope.entradaAlmoxarifadoForm.$setPristine(); 45 $scope.entradaAlmoxarifadoForm.$setPristine();
40 46
41 // limpar observações 47 // limpar observações
42 - if($scope.entradaObservacaoForm['observacao.descricao']) {  
43 - $scope.entradaObservacaoForm['observacao.descricao'].$setViewValue('');  
44 - $scope.entradaObservacaoForm['observacao.descricao'].$render(); 48 + if($scope.entradaAlmoxarifadoForm.observacoesForm['observacao.descricao']) {
  49 + $scope.entradaAlmoxarifadoForm.observacoesForm['observacao.descricao'].$setViewValue('');
  50 + $scope.entradaAlmoxarifadoForm.observacoesForm['observacao.descricao'].$render();
45 } 51 }
46 }); 52 });
47 53
@@ -54,14 +60,13 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -54,14 +60,13 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
54 dataRecebimento : '', 60 dataRecebimento : '',
55 dataContabil : '', 61 dataContabil : '',
56 documentos : [], 62 documentos : [],
57 - entradasIten : [], 63 + entradasItem : [],
58 dominioTipoEntrada : $scope.dominioTipoEntrada ? $scope.dominioTipoEntrada : null, 64 dominioTipoEntrada : $scope.dominioTipoEntrada ? $scope.dominioTipoEntrada : null,
59 dominioTipoRecebimento : $scope.dominioTipoRecebimento ? $scope.dominioTipoRecebimento : null, 65 dominioTipoRecebimento : $scope.dominioTipoRecebimento ? $scope.dominioTipoRecebimento : null,
60 observacoes : [], 66 observacoes : [],
61 almoxarifado : $scope.estruturaAlmoxarifadoPadrao.id ? $scope.estruturaAlmoxarifadoPadrao : null, 67 almoxarifado : $scope.estruturaAlmoxarifadoPadrao.id ? $scope.estruturaAlmoxarifadoPadrao : null,
62 dominioFinalidade : {} 68 dominioFinalidade : {}
63 }; 69 };
64 - $scope.entradaItemSelecionado = null;  
65 $scope.valorTotalMateriais = 0.0; 70 $scope.valorTotalMateriais = 0.0;
66 71
67 DominioRepository.findAllDominio('tipoFinalidadeMaterial').then(function(result) { 72 DominioRepository.findAllDominio('tipoFinalidadeMaterial').then(function(result) {
@@ -108,20 +113,18 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -108,20 +113,18 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
108 url : '/cit-tabelas-corp-web/rest/anexo/uploadAnexo?idDocumento=' 113 url : '/cit-tabelas-corp-web/rest/anexo/uploadAnexo?idDocumento='
109 }); 114 });
110 115
111 - $scope.uploaderCaracteristica = new FileUploader({  
112 - autoUpload: false,  
113 - queueLimit: 1,  
114 - url : '/citgrp-patrimonio-web/rest/entrada/uploadAnexoCaracteristica?idEntradaItem='  
115 - });  
116 -  
117 // Consulta entidade e mostra no formulario 116 // Consulta entidade e mostra no formulario
118 $scope.getEntradaAlmoxarifado = function(entradaAlmoxarifado, edit){ 117 $scope.getEntradaAlmoxarifado = function(entradaAlmoxarifado, edit){
119 $scope.setLoadingGet(true); 118 $scope.setLoadingGet(true);
120 119
121 EntradaAlmoxarifadoRepository.get(entradaAlmoxarifado.id).then(function(result) { 120 EntradaAlmoxarifadoRepository.get(entradaAlmoxarifado.id).then(function(result) {
122 $scope.entradaAlmoxarifado = result.originalElement; 121 $scope.entradaAlmoxarifado = result.originalElement;
  122 +
  123 + $scope.entradaAlmoxarifadoOriginal = angular.copy($scope.entradaAlmoxarifado);
  124 +
123 if($scope.entradaAlmoxarifado.fornecedor){ 125 if($scope.entradaAlmoxarifado.fornecedor){
124 $scope.entradaAlmoxarifado.fornecedor['pessoa.nome'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.nome; 126 $scope.entradaAlmoxarifado.fornecedor['pessoa.nome'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.nome;
  127 + $scope.entradaAlmoxarifadoOriginal.fornecedor['pessoa.nome'] = $scope.entradaAlmoxarifadoOriginal.fornecedor.pessoa.nome;
125 } 128 }
126 129
127 $scope.dominiosTipoRecebimento.forEach(function(item){ 130 $scope.dominiosTipoRecebimento.forEach(function(item){
@@ -130,9 +133,18 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -130,9 +133,18 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
130 }); 133 });
131 134
132 $scope.calcularValorTotalMateriais(); 135 $scope.calcularValorTotalMateriais();
  136 + $scope.atualizarListaSizeSelectEntradaItem();
133 $scope.edit = edit; 137 $scope.edit = edit;
134 $scope.setLoading(false); 138 $scope.setLoading(false);
135 }); 139 });
  140 +
  141 + MovimentoEstoqueRepository.buscarMovimentosSaidaComMateriaisDaEntrada($scope.entradaAlmoxarifado.id).then(function(result) {
  142 + if (result.saidas) {
  143 + $scope.bloquearDataContabil = true;
  144 + } else {
  145 + $scope.bloquearDataContabil = false;
  146 + }
  147 + });
136 }; 148 };
137 149
138 $scope.findAutoCompleteAlmoxarifado = function(value){ 150 $scope.findAutoCompleteAlmoxarifado = function(value){
@@ -185,16 +197,21 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -185,16 +197,21 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
185 }); 197 });
186 198
187 $scope.inicializarModalMateriais = function(){ 199 $scope.inicializarModalMateriais = function(){
  200 +<<<<<<< HEAD
188 $scope.unidadeMedidaEntrada = {}; 201 $scope.unidadeMedidaEntrada = {};
189 $scope.editEntrada = true; 202 $scope.editEntrada = true;
  203 +=======
  204 + $scope.editEntrada = false;
  205 + $scope.newEntrada = true;
  206 +>>>>>>> tarefa-3943
190 $scope.limparModalMateriais(); 207 $scope.limparModalMateriais();
191 $scope.$openModal('modal-materiais-consumo.html', 'lg'); 208 $scope.$openModal('modal-materiais-consumo.html', 'lg');
192 }; 209 };
193 210
194 $scope.limparModalMateriais = function(){ 211 $scope.limparModalMateriais = function(){
195 - $scope.entradaItem = {};  
196 - $scope.unidadesFixa = false;  
197 - $scope.caracteristicas = []; 212 + $scope.entradaItem = {
  213 + $validarPrecoMedio : true
  214 + };
198 $scope.valorUnitario = 0; 215 $scope.valorUnitario = 0;
199 }; 216 };
200 217
@@ -204,6 +221,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -204,6 +221,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
204 }); 221 });
205 }; 222 };
206 223
  224 +<<<<<<< HEAD
207 $scope.carregarItensMaterial = function(item){ 225 $scope.carregarItensMaterial = function(item){
208 226
209 $scope.entradaItem.quantidade = null; 227 $scope.entradaItem.quantidade = null;
@@ -224,6 +242,8 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -224,6 +242,8 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
224 242
225 }; 243 };
226 244
  245 +=======
  246 +>>>>>>> tarefa-3943
227 // carregar as caracteristicas do material 247 // carregar as caracteristicas do material
228 $scope.carregarCaracteristicasGenericas = function(item){ 248 $scope.carregarCaracteristicasGenericas = function(item){
229 $scope.caracteristicas = []; 249 $scope.caracteristicas = [];
@@ -247,6 +267,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -247,6 +267,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
247 $scope.setLoading(false); 267 $scope.setLoading(false);
248 } 268 }
249 }; 269 };
  270 +<<<<<<< HEAD
250 271
251 $scope.limparCamposMaterial = function(){ 272 $scope.limparCamposMaterial = function(){
252 273
@@ -290,205 +311,290 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -290,205 +311,290 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
290 }); 311 });
291 }; 312 };
292 313
  314 +=======
  315 +
  316 +>>>>>>> tarefa-3943
293 $scope.addEntradaItem = function(formDialogMateriais) { 317 $scope.addEntradaItem = function(formDialogMateriais) {
294 formDialogMateriais.$submitted = true; 318 formDialogMateriais.$submitted = true;
295 - $scope.validaAnexo = false;  
296 -  
297 - $scope.caracteristicas.forEach(function(bemAlmoxarifadoCaracteristica) {  
298 - if(bemAlmoxarifadoCaracteristica.materialCaracteristica.caracteristica.dominioTipoDado.nome == 'ARQUIVO'){  
299 - if($scope.uploaderCaracteristica.queue && $scope.uploaderCaracteristica.queue.length > 0){  
300 - bemAlmoxarifadoCaracteristica.uploadAnexo = $scope.uploaderCaracteristica.getNotUploadedItems();  
301 - }else{  
302 - $scope.validaAnexo = true;  
303 - }  
304 - }  
305 - });  
306 -  
307 - if(formDialogMateriais.$valid && !$scope.validaAnexo){  
308 319
309 - if($scope.entradaItem.$quantidadeEntrada > 0){ 320 + if(formDialogMateriais.$valid){
310 321
311 - if($scope.entradaItem.quantidadeDominioTipoUnidadeEntrada > 0){  
312 -  
313 - if($scope.entradaItem.$validarPrecoMedio){  
314 -  
315 - var idAlmoxarifado = $scope.entradaAlmoxarifado.almoxarifado ? $scope.entradaAlmoxarifado.almoxarifado.id : null; 322 + if(!$scope.entradaItem.$quantidadeEntrada || $scope.entradaItem.$quantidadeEntrada <= 0){
  323 + $scope.showAlert('error', $translate.instant('VALIDACAO.QUANTIDADE_MAIOR_ZERO'));
  324 + return;
  325 + }
  326 +
  327 + if(!$scope.entradaItem.valorTotal || $scope.entradaItem.valorTotal <= 0){
  328 + $scope.showAlert('error', $translate.instant('ADMINISTRACAODEMATERIAIS.VALIDACAO.VALOR_TOTAL_MAIOR_ZERO'));
  329 + return;
  330 + }
  331 +
  332 + if($scope.entradaItem.$validarPrecoMedio){
316 333
317 - EntradaAlmoxarifadoItemRepository.validarPrecoMedio($scope.entradaItem.valorUnitario, $scope.entradaItem.material.id, idAlmoxarifado).then(function(result) {}); 334 + var idAlmoxarifado = $scope.entradaAlmoxarifado.almoxarifado ? $scope.entradaAlmoxarifado.almoxarifado.id : null;
318 335
319 - } 336 + EntradaAlmoxarifadoItemRepository.validarPrecoMedio($scope.entradaItem.valorUnitario, $scope.entradaItem.material.id, idAlmoxarifado).then(function(result) {});
320 337
321 - $scope.entradaItem.caracteristicas = $scope.caracteristicas; 338 + }
322 339
323 - if(!$scope.entradaItem.uuid){  
324 - $scope.entradaItem.uuid = getUuid();  
325 - $scope.entradaAlmoxarifado.entradasIten.push($scope.entradaItem); 340 + if(!$scope.entradaItem.uuid){
  341 + $scope.entradaItem.uuid = getUuid();
  342 + $scope.entradaAlmoxarifado.entradasItem.push($scope.entradaItem);
  343 + }else{
  344 + var entradasItemTemp = [];
  345 + $scope.entradaAlmoxarifado.entradasItem.forEach(function (entradaItem, $index) {
  346 + if(entradaItem.uuid === $scope.entradaItem.uuid){
  347 + entradasItemTemp.push($scope.entradaItem);
326 }else{ 348 }else{
327 - var entradasItemTemp = [];  
328 - $scope.entradaAlmoxarifado.entradasIten.forEach(function (entradaItem, $index) {  
329 - if(entradaItem.uuid === $scope.entradaItem.uuid){  
330 - entradasItemTemp.push($scope.entradaItem);  
331 - }else{  
332 - entradasItemTemp.push(entradaItem);  
333 - }  
334 - });  
335 - $scope.entradaAlmoxarifado.entradasIten = entradasItemTemp; 349 + entradasItemTemp.push(entradaItem);
336 } 350 }
  351 + });
  352 + $scope.entradaAlmoxarifado.entradasItem = entradasItemTemp;
  353 + }
337 354
  355 + $scope.calcularValorTotalMateriais();
338 356
339 - $scope.calcularValorTotalMateriais();  
340 -  
341 - if($scope.uploaderCaracteristica.queue > 0){  
342 -  
343 - $scope.uploaderCaracteristica.clearQueue();  
344 - }  
345 -  
346 - $scope.$modalInstance.dismiss('cancel');  
347 - } else{  
348 - $scope.showAlert('error', $translate.instant('ALMOXARIFADO.VALIDACAO.UNIDADE_MAIOR_ZERO'));  
349 - }  
350 - }else{  
351 - $scope.showAlert('error', $translate.instant('VALIDACAO.QUANTIDADE_MAIOR_ZERO'));  
352 - } 357 + $scope.$modalInstance.dismiss('cancel');
  358 + $scope.atualizarListaSizeSelectEntradaItem();
353 359
354 }else{ 360 }else{
355 $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS')); 361 $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS'));
356 } 362 }
357 363
358 - $scope.entradaItemSelecionado = null;  
359 -  
360 }; 364 };
361 -  
362 - $scope.abrirEntradaItem = function(editar){  
363 -  
364 - if($scope.entradaItemSelecionado){  
365 -  
366 - $scope.editEntrada = editar;  
367 - $scope.entradaItem = clone($scope.entradaItemSelecionado);  
368 - $scope.entradaItem.$quantidadeEntrada = $scope.entradaItem.quantidade / $scope.entradaItem.quantidadeDominioTipoUnidadeEntrada;  
369 - $scope.unidadesMedidasEntrada = $scope.entradaItem.material.tiposUnidadeMedidaEntrada.map(function(item){  
370 - return item.unidadeMedida;  
371 - });;  
372 - $scope.caracteristicas = $scope.entradaItem.caracteristicas;  
373 -  
374 - $scope.caracteristicas.forEach(function(bemPatrimonialCaracteristica) {  
375 - if(bemPatrimonialCaracteristica.materialCaracteristica.caracteristica.dominioTipoDado.nome == 'ARQUIVO'){  
376 - $scope.uploaderCaracteristica.queue = clone(bemPatrimonialCaracteristica.uploadAnexo); 365 +
  366 + // Seleciona todos os itens da entrada
  367 + $scope.checkAllEntradaItem = function(value) {
  368 + $scope.listaEntradaItemSelecao = [];
  369 + angular.forEach($scope.entradaAlmoxarifado.entradasItem, function (item) {
  370 + item.$checked = value;
  371 + $scope.listaEntradaItemSelecao.push(item);
  372 + });
  373 + if(!value){
  374 + $scope.listaEntradaItemSelecao = [];
  375 + }
  376 + $scope.atualizarListaSizeSelectEntradaItem();
  377 + };
  378 +
  379 + $scope.checkEntradaItem = function(item){
  380 + if(item.$checked){
  381 + $scope.listaEntradaItemSelecao.push(item);
  382 + }else{
  383 + $scope.listaEntradaItemSelecao.splice($scope.listaEntradaItemSelecao.indexOf(item), 1);
  384 + }
  385 + };
  386 +
  387 + $scope.atualizarListaSizeSelectEntradaItem = function() {
  388 + if(!$scope.listaEntradaItemSize){
  389 + $scope.listaEntradaItemSize = 0;
  390 + };
  391 + var lista = $scope.getEntradaItemChecked();
  392 + $scope.listaEntradaItemSize = lista.length;
  393 + };
  394 +
  395 + // recupera as entradas itens selecionadas
  396 + $scope.getEntradaItemChecked = function() {
  397 + var entradaItemChecked = [];
  398 +
  399 + if ($scope.entradaAlmoxarifado.entradasItem) {
  400 + for (var i = 0; i < $scope.entradaAlmoxarifado.entradasItem.length; i++) {
  401 + if ($scope.entradaAlmoxarifado.entradasItem[i].$checked) {
  402 + entradaItemChecked.push(angular.copy($scope.entradaAlmoxarifado.entradasItem[i]));
377 } 403 }
  404 +<<<<<<< HEAD
378 }); 405 });
379 406
380 if($scope.entradaItem.dataValidade && !$scope.entradaItem.id){ 407 if($scope.entradaItem.dataValidade && !$scope.entradaItem.id){
381 $scope.entradaItem.dataValidade = $filter('date')($scope.entradaItem.dataValidade, "dd/MM/yyyy"); 408 $scope.entradaItem.dataValidade = $filter('date')($scope.entradaItem.dataValidade, "dd/MM/yyyy");
  409 +=======
  410 +>>>>>>> tarefa-3943
382 } 411 }
383 -  
384 - $scope.$openModal('modal-materiais-consumo.html', 'lg');  
385 -  
386 - }else{  
387 -  
388 - $scope.showAlert('warning', editar ? $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_EDICAO') : $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_VISUALIZACAO'));  
389 } 412 }
390 413
  414 + return entradaItemChecked;
391 }; 415 };
392 416
393 - $scope.removerEntradaItem = function(){  
394 -  
395 - if($scope.entradaItemSelecionado){  
396 -  
397 - var entradaItem = $scope.entradaItemSelecionado;  
398 -  
399 - if(entradaItem !== undefined){  
400 -  
401 - $scope.$openModalConfirm({message: $translate.instant('MSG.DESEJA_EXCLUIR_ITENS'), callback: $scope.excluirEntradaItem, item: entradaItem});  
402 - } 417 + $scope.abrirEntradaItem = function(editar){
  418 + $scope.entradaItem = null;
  419 + // recupera os itens de entrada selecionados
  420 + var itensSelecionados = $scope.getEntradaItemChecked();
403 421
404 - }else{ 422 + if (itensSelecionados.length > 1) {
  423 + $scope.showAlert('warning', editar? $translate.instant('MSG.SELECIONE_APENAS_UM_ITEM_PARA_EDICAO') : $translate.instant('MSG.SELECIONE_APENAS_UM_ITEM_PARA_VISUALIZACAO'));
  424 + return;
  425 + }
405 426
406 - $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_ITEM_EXCLUIR')); 427 + if(itensSelecionados.length === 0) {
  428 + $scope.showAlert('warning', editar? $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_EDICAO') : $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_VISUALIZACAO'));
  429 + return;
407 } 430 }
408 - };  
409 431
410 - $scope.excluirEntradaItem = function(){  
411 - var entradaItemSelecionada = this.item;  
412 - if(entradaItemSelecionada.id){  
413 - $scope.setLoadingRemove(true);  
414 - EntradaAlmoxarifadoItemRepository.remove(entradaItemSelecionada).then(function() {  
415 - $scope.showAlert("success", $translate.instant('MSG.REGISTRO_EXCLUIDO'));  
416 - $scope.excluirItemAlmoxarifadoDaLista(entradaItemSelecionada);  
417 - $scope.setLoading(false);  
418 - });  
419 - }else{  
420 - $scope.excluirItemAlmoxarifadoDaLista(entradaItemSelecionada);  
421 - }  
422 -  
423 - $scope.entradaItemSelecionado = null; 432 + $scope.newEntrada = false;
  433 + $scope.editEntrada = editar;
  434 + $scope.entradaItem = itensSelecionados[0];
  435 + $scope.entradaItem.$quantidadeEntrada = $scope.entradaItem.quantidade / $scope.entradaItem.unidadeMedidaEntrada.quantidadePadrao;
  436 + $scope.unidadesMedidasEntrada = $scope.entradaItem.material.tiposUnidadeMedidaEntrada.map(function(item){
  437 + return item.unidadeMedida;
  438 + });
  439 +
  440 + if($scope.entradaItem.dataValidade && !$scope.entradaItem.id){
  441 + $scope.entradaItem.dataValidade = $filter('date')($scope.entradaItem.dataValidade, "dd/MM/yyyy");
  442 + }
424 443
425 - }; 444 + $scope.$openModal('modal-materiais-consumo.html', 'lg');
  445 + };
426 446
427 - $scope.excluirItemAlmoxarifadoDaLista = function(entradaItemSelecionada){  
428 - var index = 0;  
429 - $scope.valorTotalMateriais = 0.0;  
430 - $scope.entradaAlmoxarifado.entradasIten.forEach(function (entradaItem, key) {  
431 - if(entradaItemSelecionada.uuid === entradaItem.uuid) {  
432 - index = key;  
433 - }  
434 - });  
435 - $scope.entradaAlmoxarifado.entradasIten.splice(index, 1);  
436 - $scope.calcularValorTotalMateriais();  
437 - $scope.$modalConfirmInstance.dismiss('cancel'); 447 + $scope.removerEntradaItem = function(){
  448 + // recupera os itens da entrada selecionados
  449 + var itensSelecionados = $scope.getEntradaItemChecked();
  450 +
  451 + if (itensSelecionados.length > 0) {
  452 + $scope.$openModalConfirm({
  453 + message: $translate.instant('MSG.CONFIRMA_EXCLUSAO'),
  454 + callback: function() {
  455 +
  456 + $scope.$modalConfirmInstance.dismiss('cancel');
  457 +
  458 + for (var i = 0; i < itensSelecionados.length; i++) {
  459 + if (itensSelecionados[i].id) {
  460 + EntradaAlmoxarifadoItemRepository.remove(itensSelecionados[i]).then(function(result) {
  461 + $scope.showAlert("success", $translate.instant('MSG.REGISTRO_EXCLUIDO'));
  462 + });
  463 + }
  464 + }
  465 + var itens = [];
  466 + for (var i = 0; i < $scope.entradaAlmoxarifado.entradasItem.length; i++) {
  467 + if (!$scope.entradaAlmoxarifado.entradasItem[i].$checked) {
  468 + itens.push($scope.entradaAlmoxarifado.entradasItem[i]);
  469 + }
  470 + }
  471 + $scope.listaEntradaItemSelecao = [];
  472 + $scope.entradaAlmoxarifado.entradasItem = itens;
  473 + $scope.atualizarListaSizeSelectEntradaItem();
  474 + $scope.calcularValorTotalMateriais();
  475 + $scope.showAlert("success", $translate.instant('MSG.REGISTRO_EXCLUIDO'));
  476 + }
  477 + });
  478 + } else {
  479 + $scope.showAlert('warning', $translate.instant('MSG.SELECIONE_AO_MENOS_UM_ITEM_PARA_SER_REMOVIDO'));
  480 + }
438 }; 481 };
439 482
440 $scope.calcularValorTotalMateriais = function(){ 483 $scope.calcularValorTotalMateriais = function(){
441 $scope.valorTotalMateriais = 0.0; 484 $scope.valorTotalMateriais = 0.0;
442 - $scope.entradaAlmoxarifado.entradasIten.forEach(function (entradaItem) { 485 + $scope.entradaAlmoxarifado.entradasItem.forEach(function (entradaItem) {
443 $scope.valorTotalMateriais = converterMoedaToNumber(entradaItem.valorTotal) + $scope.valorTotalMateriais; 486 $scope.valorTotalMateriais = converterMoedaToNumber(entradaItem.valorTotal) + $scope.valorTotalMateriais;
444 }); 487 });
445 }; 488 };
  489 +
  490 + $scope.saveOrUpdateContabilizar = function(contabilizar) {
  491 +
  492 + $scope.entradaAlmoxarifado.isEntradaConcluida = true;
  493 + $scope.entradaAlmoxarifadoOriginal.isEntradaConcluida = true;
  494 +
  495 + if (contabilizar) {
  496 + $scope.dataContabilFinal = $scope.entradaAlmoxarifado.dataContabil;
  497 + $scope.dataContabilFinalBloqueada = $scope.entradaAlmoxarifado.dataContabil;
  498 + $scope.$openModal('modal-contabilizar-entrada.html', 'lg');
  499 + } else {
  500 + $scope.saveOrUpdate(null);
  501 + }
  502 + };
446 503
447 // SALVA O EntradaAlmoxarifado 504 // SALVA O EntradaAlmoxarifado
448 - $scope.saveOrUpdate = function(){ 505 + $scope.saveOrUpdate = function(dataContabil){
449 $scope.entradaAlmoxarifadoForm.$submitted = true; 506 $scope.entradaAlmoxarifadoForm.$submitted = true;
  507 + $scope.entradaAlmoxarifadoForm.dadosEntradaForm.$submitted = true;
  508 + $scope.entradaAlmoxarifadoForm.materiaisForm.$submitted = true;
  509 + $scope.entradaAlmoxarifadoForm.documentosForm.$submitted = true;
  510 + $scope.entradaAlmoxarifadoForm.observacoesForm.$submitted = true;
450 511
451 // validar o formulario, retorna true se o formulario e as regras estiverem OK 512 // validar o formulario, retorna true se o formulario e as regras estiverem OK
452 var formularioValido = validarFormulario($scope.entradaAlmoxarifadoForm); 513 var formularioValido = validarFormulario($scope.entradaAlmoxarifadoForm);
453 514
454 // verifica formulario valido 515 // verifica formulario valido
455 - if(formularioValido){  
456 - 516 + if(formularioValido) {
457 var entradaTemp = { 517 var entradaTemp = {
458 - documentos : []  
459 - }; 518 + documentos : []
  519 + };
460 520
461 // preencher lista de documentos temporarios para verificacao dos anexos. verificar qual anexo e de qual documento pelo numero do documento 521 // preencher lista de documentos temporarios para verificacao dos anexos. verificar qual anexo e de qual documento pelo numero do documento
462 angular.forEach($scope.entradaAlmoxarifado.documentos, function(documento, key) { 522 angular.forEach($scope.entradaAlmoxarifado.documentos, function(documento, key) {
463 -  
464 - entradaTemp.documentos.push({  
465 - uploadsDocumento : clone(documento.uploadsDocumento),  
466 - numero : clone(documento.numero)  
467 - });  
468 -  
469 - // deleta esse atributo por causa de um erro de ciclo no json  
470 - delete documento.uploadsDocumento; 523 + entradaTemp.documentos.push({
  524 + uploadsDocumento : clone(documento.uploadsDocumento),
  525 + numero : clone(documento.numero)
  526 + });
  527 + //deleta esse atributo por causa de um erro de ciclo no json
  528 + delete documento.uploadsDocumento;
471 }); 529 });
472 530
473 - $scope.setLoadingSalva(true);  
474 -  
475 - EntradaAlmoxarifadoRepository.save($scope.entradaAlmoxarifado).then(function(result) {  
476 -  
477 - $scope.entradaAlmoxarifado = result.originalElement;  
478 -  
479 - $scope.showAlert("success", $translate.instant('MSG.REGISTRO_SALVO'));  
480 -  
481 - // depois de salvar a entrada ja tendo uma referencia do id, esse metodo ira salvar os documentos se existir  
482 - salvarListaDocumentos(entradaTemp);  
483 -  
484 - $scope.resetForm();  
485 - 531 + $scope.setLoadingSalva(true);
  532 +
  533 + EntradaAlmoxarifadoRepository.save($scope.entradaAlmoxarifado).then(function(result) {
  534 + $scope.entradaAlmoxarifado = result.originalElement;
  535 +
  536 + if ($scope.entradaAlmoxarifado.fornecedor) {
  537 + $scope.entradaAlmoxarifado.fornecedor['pessoa.nome'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.nome;
  538 + }
  539 +
  540 + $scope.showAlert("success", $translate.instant('MSG.REGISTRO_SALVO'));
  541 +
  542 + // depois de salvar a entrada ja tendo uma referencia do id, esse metodo ira salvar os documentos se existir
  543 + salvarListaDocumentos(entradaTemp);
486 $scope.setLoading(false); 544 $scope.setLoading(false);
487 - 545 +
  546 + var dataContabilAntiga = angular.copy($scope.entradaAlmoxarifado.dataContabil);
  547 +
  548 + $scope.setLoadingSalva(true);
  549 +
  550 + if (dataContabilAntiga && !dataContabil) {
  551 + MovimentoEstoqueRepository.buscarMovimentosSaidaComMateriaisDaEntrada($scope.entradaAlmoxarifado.id).then(function(result) {
  552 + if (result.saidas) {
  553 + $scope.setLoading(false);
  554 + $scope.showAlert('warning', $translate.instant('ALMOXARIFADO.VALIDACAO.ENTRADA_DESCONTABILIZACAO_COM_SAIDAS') + result.saidas);
  555 + } else {
  556 + concluir(dataContabil);
  557 + }
  558 + });
  559 + } else {
  560 + concluir(dataContabil);
  561 + }
488 }); 562 });
489 -  
490 } 563 }
491 }; 564 };
  565 +
  566 + var concluir = function(dataContabil) {
  567 + var dataContabilAntiga = angular.copy($scope.entradaAlmoxarifado.dataContabil);
  568 + var error = true;
  569 + $scope.entradaAlmoxarifado.dataContabil = dataContabil;
  570 +
  571 + $scope.entradaAlmoxarifado.valorTotalNota = converterMoedaToNumber($scope.entradaAlmoxarifado.valorTotalNota);
  572 +
  573 + EntradaAlmoxarifadoRepository.concluir($scope.entradaAlmoxarifado).then(function(result) {
  574 + $scope.resetForm();
  575 + error = false;
  576 + $scope.entradaAlmoxarifado = result.originalElement;
  577 + $scope.entradaAlmoxarifado.dataRecebimento = $filter('date')($scope.entradaAlmoxarifado.dataRecebimento, "dd/MM/yyyy");
  578 + $scope.entradaAlmoxarifado.dataContabil = $filter('date')($scope.entradaAlmoxarifado.dataContabil, "dd/MM/yyyy");
  579 + $scope.entradaAlmoxarifado.dataReferencia = $filter('date')($scope.entradaAlmoxarifado.dataReferencia, "dd/MM/yyyy");
  580 + if ($scope.entradaAlmoxarifado.fornecedor) {
  581 + $scope.entradaAlmoxarifado.fornecedor['pessoa.nome'] = $scope.entradaAlmoxarifado.fornecedor.pessoa.nome;
  582 + }
  583 + $scope.setLoading(false);
  584 + if (dataContabil) {
  585 + $scope.showAlert("success", $translate.instant('ALMOXARIFADO.MSG.ENTRADA_CONTABILIZADA'));
  586 + $scope.contabilizado = true;
  587 + } else {
  588 + $scope.showAlert("success", $translate.instant('ALMOXARIFADO.MSG.ENTRADA_DESCONTABILIZADA'));
  589 + }
  590 + });
  591 +
  592 + $timeout(function() {
  593 + if (error) {
  594 + $scope.entradaAlmoxarifado.dataContabil = dataContabilAntiga;
  595 + }
  596 + }, 1000);
  597 + };
492 598
493 // metodo utilizado para percorrer a lista de documentos persistidos e verificar com a lista de documentos temporarios para verificacao de qual anexo pertence a qual documento 599 // metodo utilizado para percorrer a lista de documentos persistidos e verificar com a lista de documentos temporarios para verificacao de qual anexo pertence a qual documento
494 var salvarListaDocumentos = function(entradaTemp){ 600 var salvarListaDocumentos = function(entradaTemp){
@@ -529,20 +635,9 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -529,20 +635,9 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
529 635
530 var formularioValido = true; 636 var formularioValido = true;
531 637
532 - if(!form.$valid || !$scope.entradaAlmoxarifado.entradasIten.length > 0 || !$scope.entradaAlmoxarifado.documentos.length > 0){ 638 + if(!form.$valid || !$scope.entradaAlmoxarifado.entradasItem.length > 0 || !$scope.entradaAlmoxarifado.documentos.length > 0){
533 $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS')); 639 $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS'));
534 formularioValido = false; 640 formularioValido = false;
535 -  
536 - }else{  
537 - // validação de valores iguais  
538 - if(converterMoedaToNumber($scope.entradaAlmoxarifado.valorTotalNota) !== converterMoedaToNumber($scope.valorTotalMateriais)){  
539 - $scope.showAlert('error', $translate.instant('ALMOXARIFADO.VALIDACAO.NOTA_FISCAL_IGUAL_VALOR_INFORMADO'));  
540 - formularioValido = false;  
541 - }  
542 - if(!$scope.validarDataTransferencia($scope.entradaAlmoxarifado.dataContabil)){  
543 - $scope.showAlert('error', $translate.instant('MSG.MN019'));  
544 - formularioValido = false;  
545 - }  
546 } 641 }
547 642
548 return formularioValido; 643 return formularioValido;
@@ -687,6 +782,265 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp @@ -687,6 +782,265 @@ citApp.controller(&#39;EntradaAlmoxarifadoController&#39;, [&#39;$scope&#39;, &#39;$filter&#39;, &#39;FileUp
687 } 782 }
688 }; 783 };
689 //### FIM METODOS RELACIONADOS AOS RELATORIOS DE INVENTARIO ### 784 //### FIM METODOS RELACIONADOS AOS RELATORIOS DE INVENTARIO ###
  785 +
  786 + //Watch para controlar os tipos de recebimento
  787 + $scope.$watch('entradaAlmoxarifado.dominioTipoEntrada', function() {
  788 + $timeout(function() {
  789 + if ($scope.entradaAlmoxarifado.dominioTipoEntrada && ($scope.entradaAlmoxarifado.dominioTipoEntrada.codigo == 1)) {
  790 + $scope.dominiosTipoRecebimento = $scope.dominiosTipoRecebimentoOrcamentaria;
  791 + if ($scope.entradaAlmoxarifado.dominioTipoRecebimento && $scope.entradaAlmoxarifado.dominioTipoRecebimento.codigo != CODIGO_DOMINIO_TIPO_RECEBIMENTO_COMPRA_ORCAMENTARIA) {
  792 + delete $scope.entradaAlmoxarifado.dominioTipoRecebimento;
  793 + }
  794 + } else if ($scope.entradaAlmoxarifado.dominioTipoEntrada && ($scope.entradaAlmoxarifado.dominioTipoEntrada.codigo == 2)) {
  795 + $scope.dominiosTipoRecebimento = $scope.dominiosTipoRecebimentoExtraOrcamentaria;
  796 + if ($scope.entradaAlmoxarifado.dominioTipoRecebimento && $scope.entradaAlmoxarifado.dominioTipoRecebimento.codigo == CODIGO_DOMINIO_TIPO_RECEBIMENTO_COMPRA_ORCAMENTARIA) {
  797 + delete $scope.entradaAlmoxarifado.dominioTipoRecebimento;
  798 + }
  799 + } else {
  800 + $scope.dominiosTipoRecebimento = [];
  801 + if ($scope.entradaAlmoxarifado.dominioTipoRecebimento) {
  802 + delete $scope.entradaAlmoxarifado.dominioTipoRecebimento;
  803 + }
  804 + }
  805 + });
  806 + });
  807 +
  808 + //Watch para controlar as definições de material selecionado na modal de adição de materiais
  809 + $scope.$watch('entradaItem.material', function() {
  810 + $timeout(function() {
  811 + if ($scope.newEntrada) {
  812 + if (!$scope.entradaItem) {
  813 + $scope.entradaItem = {
  814 + $validarPrecoMedio : true
  815 + };
  816 + }
  817 + $scope.entradaItem.quantidade = null;
  818 + $scope.entradaItem.valorTotal = null;
  819 + $scope.entradaItem.valorUnitario = null;
  820 + $scope.entradaItem.unidadeMedidaEntrada = null;
  821 + $scope.entradaItem.materialLocalEstoque = null;
  822 + $scope.unidadesMedidasEntrada = [];
  823 + $scope.enderecosMaterial = [];
  824 + }
  825 +
  826 + if ($scope.entradaItem && $scope.entradaItem.material) {
  827 + $scope.unidadesMedidasEntrada = $scope.entradaItem.material.tiposUnidadeMedidaEntrada.map(function(item){
  828 + if (item.isPadrao && !$scope.entradaItem.unidadeMedidaEntrada) {
  829 + $scope.entradaItem.unidadeMedidaEntrada = item.unidadeMedida;
  830 + }
  831 + return item.unidadeMedida;
  832 + });
  833 +
  834 + MaterialLocalEstoqueRepository.listarMaterialEstoquePorMaterial($scope.entradaItem.material.id).then(function(result) {
  835 + $scope.enderecosMaterial = [];
  836 + for (var i = 0; i < result.length; i++) {
  837 + $scope.enderecosMaterial.push(result[i].originalElement);
  838 +
  839 + if (result[i].localPrincipal && !$scope.entradaItem.materialLocalEstoque) {
  840 + $scope.entradaItem.materialLocalEstoque = result[i].originalElement;
  841 + }
  842 + }
  843 + });
  844 + }
  845 + });
  846 + });
  847 +
  848 + //Watch para controlar as mudanças da quantidade na entrada de materiais
  849 + $scope.$watch('entradaItem.$quantidadeEntrada', function() {
  850 + $timeout(function(){
  851 + if ($scope.entradaItem) {
  852 + if($scope.entradaItem.$quantidadeEntrada && $scope.entradaItem.unidadeMedidaEntrada){
  853 + $scope.entradaItem.quantidade = $scope.entradaItem.$quantidadeEntrada * $scope.entradaItem.unidadeMedidaEntrada.quantidadePadrao;
  854 + } else {
  855 + delete $scope.entradaItem.quantidade;
  856 + }
  857 + if($scope.entradaItem.quantidade && $scope.entradaItem.valorTotal){
  858 + $scope.entradaItem.valorUnitario = $scope.entradaItem.valorTotal / $scope.entradaItem.quantidade;
  859 + } else {
  860 + delete $scope.entradaItem.valorUnitario;
  861 + }
  862 + }
  863 + });
  864 + });
  865 +
  866 + //Watch para controlar as mudanças da unidade de medida na entrada de materiais
  867 + $scope.$watch('entradaItem.unidadeMedidaEntrada', function() {
  868 + $timeout(function(){
  869 + if ($scope.entradaItem) {
  870 + if($scope.entradaItem.$quantidadeEntrada && $scope.entradaItem.unidadeMedidaEntrada){
  871 + $scope.entradaItem.quantidade = $scope.entradaItem.$quantidadeEntrada * $scope.entradaItem.unidadeMedidaEntrada.quantidadePadrao;
  872 + } else {
  873 + delete $scope.entradaItem.quantidade;
  874 + }
  875 + }
  876 + });
  877 + });
  878 +
  879 + //Watch para controlar as mudanças do valor total da entrada de materiais
  880 + $scope.$watch('entradaItem.valorTotal', function() {
  881 + $timeout(function(){
  882 + if ($scope.entradaItem) {
  883 + if($scope.entradaItem.quantidade && $scope.entradaItem.valorTotal){
  884 + $scope.entradaItem.valorUnitario = $scope.entradaItem.valorTotal / $scope.entradaItem.quantidade;
  885 + } else {
  886 + delete $scope.entradaItem.valorUnitario;
  887 + }
  888 + }
  889 + });
  890 + });
  891 +
  892 +
  893 +
  894 + // ###########################################
  895 + // ########################################### DAQUI PARA BAIXO SAO TODOS OS METODOS RELACIONADOS AO WIZARD
  896 + // ###########################################
  897 +
  898 + $scope.templates = [{ name: 'entradaAlmoxarifadoPg1.html', url: '/cit-almoxarifado-web/html/entradaAlmoxarifado/entradaAlmoxarifadoPg1.html', show: true},
  899 + { name: 'entradaAlmoxarifadoPg2.html', url: '/cit-almoxarifado-web/html/entradaAlmoxarifado/entradaAlmoxarifadoPg2.html', show: false},
  900 + { name: 'entradaAlmoxarifadoPg3.html', url: '/cit-almoxarifado-web/html/entradaAlmoxarifado/entradaAlmoxarifadoPg3.html', show: false},
  901 + { name: 'entradaAlmoxarifadoPg4.html', url: '/cit-almoxarifado-web/html/entradaAlmoxarifado/entradaAlmoxarifadoPg4.html', show: false} ];
  902 +
  903 + $scope.steps = ['one', 'two', 'three', 'four'];
  904 + $scope.step = 0;
  905 +
  906 +// Verifica se o passo é o primeiro passo do wizard
  907 + $scope.isFirstStep = function() {
  908 + return $scope.step === 0;
  909 + };
  910 +
  911 + // Verifica se o passo é o ultimo passo do wizard
  912 + $scope.isLastStep = function() {
  913 + return $scope.step === ($scope.steps.length - 1);
  914 + };
  915 +
  916 + // Verifica se o passo é o passo atual do wizard
  917 + $scope.isCurrentStep = function(step) {
  918 + return $scope.step === step;
  919 + };
  920 +
  921 + // Utilizado pelo wizard para mudar para o passo desejado
  922 + $scope.setCurrentStep = function(step) {
  923 +
  924 + $scope.setLoadingGet(true);
  925 +
  926 + if (step <= ($scope.step - 1)) {
  927 + $scope.templates[$scope.step].show = false;
  928 + $scope.step = step;
  929 + $scope.templates[step].show = true;
  930 + } else {
  931 + if (!$scope.edit) {
  932 + $scope.permitidoAvancar = true;
  933 + } else {
  934 + permiteAvancoFluxo();
  935 + }
  936 +
  937 + if ($scope.permitidoAvancar) {
  938 + $scope.templates[$scope.step].show = false;
  939 + $scope.step = step;
  940 + $scope.templates[step].show = true;
  941 + }
  942 + }
  943 +
  944 + $scope.setLoading(false);
  945 + };
  946 +
  947 + // Controla se o usuario pode avancar o fluxo no wizard, validando os itens obrigatórios
  948 + function permiteAvancoFluxo() {
  949 +
  950 + $scope.permitidoAvancar = true;
  951 +
  952 + if ($scope.step === 0) {
  953 + if (!validStepDadosEntrada() && $scope.permitidoAvancar) {
  954 + $scope.entradaAlmoxarifadoForm.dadosEntradaForm.$submitted = true;
  955 + $scope.permitidoAvancar = false;
  956 + }
  957 + } else if ($scope.step === 1) {
  958 + if (!validStepMateriais() && $scope.permitidoAvancar) {
  959 + $scope.entradaAlmoxarifadoForm.materiaisForm.$submitted = true;
  960 + $scope.permitidoAvancar = false;
  961 + }
  962 + } else if ($scope.step === 2) {
  963 + if (!validStepDocumentos() && $scope.permitidoAvancar) {
  964 + $scope.entradaAlmoxarifadoForm.documentosForm.$submitted = true;
  965 + $scope.permitidoAvancar = false;
  966 + }
  967 + } else if ($scope.step === 3) {
  968 + $scope.entradaAlmoxarifadoForm.observacoesForm.$submitted = true;
  969 + }
  970 +
  971 + if (!$scope.permitidoAvancar && !$scope.stepValid) {
  972 + //Mensagem de erro de campos obrigatorios nao preenchidos
  973 + $scope.showAlert('error', $translate.instant('VALIDACAO.ALERTA_OBRIGATORIOS'), " ", false);
  974 + }
  975 + };
  976 +
  977 +// Recupera o passo atual do wizard
  978 + $scope.getCurrentStep = function() {
  979 + return $scope.steps[$scope.step];
  980 + };
  981 +
  982 + // Faz com o que o wizard retroceda um passo
  983 + $scope.handlePrevious = function() {
  984 +
  985 + $scope.setLoadingGet(true);
  986 +
  987 + $scope.templates[$scope.step].show = false;
  988 + $scope.step -= ($scope.isFirstStep()) ? 0 : 1;
  989 + $scope.templates[$scope.step].show = true;
  990 +
  991 + $scope.setLoading(false);
  992 +
  993 + };
  994 +
  995 + // Faz com o que o wizard avance um passo
  996 + $scope.handleNext = function () {
  997 + $scope.setLoadingGet(true);
  998 +
  999 + if(!$scope.edit){
  1000 + $scope.permitidoAvancar = true;
  1001 + } else {
  1002 + permiteAvancoFluxo();
  1003 + }
  1004 +
  1005 + if ($scope.permitidoAvancar){
  1006 + $scope.templates[$scope.step].show = false;
  1007 + $scope.step += 1;
  1008 + $scope.templates[$scope.step].show = true;
  1009 + }
  1010 +
  1011 + $scope.setLoading(false);
  1012 + };
  1013 +
  1014 + // Funcao especifica que retorna se o formulario de dados da entrada esta valido
  1015 + function validStepDadosEntrada() {
  1016 + $scope.stepValid = true;
  1017 +
  1018 + if ($scope.entradaAlmoxarifadoForm.dadosEntradaForm.$invalid) {
  1019 + $scope.stepValid = false;
  1020 + }
  1021 +
  1022 + return $scope.stepValid;
  1023 + };
  1024 +
  1025 + // Funcao especifica que retorna se o formulario de materiais esta valido
  1026 + function validStepMateriais() {
  1027 + $scope.stepValid = true;
  1028 +
  1029 + if ($scope.entradaAlmoxarifadoForm.materiaisForm.$invalid || !($scope.entradaAlmoxarifado.entradasItem.length > 0)) {
  1030 + $scope.stepValid = false;
  1031 + }
  1032 +
  1033 + return $scope.stepValid;
  1034 + };
  1035 +
  1036 + //Funcao especifica que retorna se o formulario de documentos esta valido
  1037 + function validStepDocumentos() {
  1038 + $scope.stepValid = true;
  1039 + if ($scope.entradaAlmoxarifadoForm.documentosForm.$invalid || !($scope.entradaAlmoxarifado.documentos.length > 0)) {
  1040 + $scope.stepValid = false;
  1041 + }
  1042 + return $scope.stepValid;
  1043 + };
690 1044
691 $scope.alternaTipoNumericoUnidadeMedida = function(){ 1045 $scope.alternaTipoNumericoUnidadeMedida = function(){
692 $scope.entradaItem.$quantidadeEntrada = ''; 1046 $scope.entradaItem.$quantidadeEntrada = '';
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/controller/EntradaAlmoxarifadoListController.js
@@ -4,7 +4,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoListController&#39;, [&#39;$scope&#39;, &#39;EntradaAlmoxa @@ -4,7 +4,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoListController&#39;, [&#39;$scope&#39;, &#39;EntradaAlmoxa
4 $scope.$showAdvancedFilters = false; 4 $scope.$showAdvancedFilters = false;
5 5
6 $scope.resetForm = function() { 6 $scope.resetForm = function() {
7 - angular.element("#editEntradaAlmoxarifado").scope().resetFormInicializarDatas(); 7 + angular.element("#entradaAlmoxarifadoControllerId").scope().resetFormInicializarDatas();
8 }; 8 };
9 9
10 $scope.headers = [ {title : $translate.instant('ALMOXARIFADO.LABEL.NOTA_RECEBIMENTO'), value : 'notaRecebimento' } , 10 $scope.headers = [ {title : $translate.instant('ALMOXARIFADO.LABEL.NOTA_RECEBIMENTO'), value : 'notaRecebimento' } ,
@@ -42,7 +42,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoListController&#39;, [&#39;$scope&#39;, &#39;EntradaAlmoxa @@ -42,7 +42,7 @@ citApp.controller(&#39;EntradaAlmoxarifadoListController&#39;, [&#39;$scope&#39;, &#39;EntradaAlmoxa
42 $scope.showAlert('warning', !edit ? $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_VISUALIZACAO') : $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_EDICAO')); 42 $scope.showAlert('warning', !edit ? $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_VISUALIZACAO') : $translate.instant('MSG.SELECIONE_UM_ITEM_PARA_EDICAO'));
43 return; 43 return;
44 } 44 }
45 - angular.element('#editEntradaAlmoxarifado').scope().getEntradaAlmoxarifado(entradaAlmoxarifado, edit); 45 + angular.element('#entradaAlmoxarifadoControllerId').scope().getEntradaAlmoxarifado(entradaAlmoxarifado, edit);
46 $scope.$showPageEditWorkspace($scope.workspace); 46 $scope.$showPageEditWorkspace($scope.workspace);
47 }; 47 };
48 48
cit-almoxarifado-web/src/main/webapp/assets/js/angular/custom/repository/EntradaAlmoxarifadoRepository.js
@@ -4,6 +4,10 @@ citApp.factory(&#39;EntradaAlmoxarifadoRepository&#39;, [&#39;RestangularAlmoxarifado&#39;, &#39;Abs @@ -4,6 +4,10 @@ citApp.factory(&#39;EntradaAlmoxarifadoRepository&#39;, [&#39;RestangularAlmoxarifado&#39;, &#39;Abs
4 4
5 function EntradaAlmoxarifadoRepository() { 5 function EntradaAlmoxarifadoRepository() {
6 AbstractRepository.call(this, restangularAlmoxarifado, 'rest/entradaAlmoxarifado'); 6 AbstractRepository.call(this, restangularAlmoxarifado, 'rest/entradaAlmoxarifado');
  7 +
  8 + this.concluir = function(entrada) {
  9 + return restangularAlmoxarifado.all(this.route + '/concluir').post(entrada);
  10 + };
7 } 11 }
8 12
9 AbstractRepository.extend(EntradaAlmoxarifadoRepository); 13 AbstractRepository.extend(EntradaAlmoxarifadoRepository);
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/dialog_add_materiais.html
1 <ng-form name="formDialogMateriais" autocomplete="off"> 1 <ng-form name="formDialogMateriais" autocomplete="off">
2 <div class="modal-header"> 2 <div class="modal-header">
3 - <button class="btn btn-clear" type="button" ng-hide="!editEntrada" ng-click="addEntradaItem(formDialogMateriais)"> 3 + <button class="btn btn-clear" type="button" ng-hide="!editEntrada && !newEntrada" ng-click="addEntradaItem(formDialogMateriais)">
4 <i class="fa fa-save green"></i> 4 <i class="fa fa-save green"></i>
5 <translate>{{entradaItem.id ? 'LABEL.SALVAR' : 'LABEL.ADICIONAR'}} </translate> 5 <translate>{{entradaItem.id ? 'LABEL.SALVAR' : 'LABEL.ADICIONAR'}} </translate>
6 </button> 6 </button>
@@ -13,24 +13,37 @@ @@ -13,24 +13,37 @@
13 13
14 <div class="modal-body"> 14 <div class="modal-body">
15 <h2 class="title-modal blue"><translate>ALMOXARIFADO.LABEL.MATERIAIS</translate></h2> 15 <h2 class="title-modal blue"><translate>ALMOXARIFADO.LABEL.MATERIAIS</translate></h2>
16 - <p ng-show="editEntrada"> 16 + <p ng-show="editEntrada || newEntrada">
17 <small>( <span class="red">*</span> ) <translate>LABEL.CAMPOS_OBRIGATORIOS</translate> 17 <small>( <span class="red">*</span> ) <translate>LABEL.CAMPOS_OBRIGATORIOS</translate>
18 </small> 18 </small>
19 </p> 19 </p>
  20 + <div class="row">
  21 + <div class="col-md-4">
  22 + <label-input-checkbox ng-model="entradaItem.$validarPrecoMedio" ng-disabled="!editEntrada && !newEntrada" ng-label="ALMOXARIFADO.LABEL.VALIDAR_PRECO_MEDIO" ></label-input-checkbox>
  23 + </div>
  24 + </div>
  25 +
20 <div class="row"> 26 <div class="row">
21 - <div class="col-sm-8">  
22 - <auto-complete ng-find="findMaterial(value)" ng-set-result="carregarItensMaterial(item)" ng-item="item.codigoEDescricao" ng-acao-borracha="limparCamposMaterial()"  
23 - ng-id="entradaItem.material" form="formDialogMateriais" ng-label="LABEL.MATERIAL" ng-disabled="!editEntrada" ng-model="entradaItem.material" ng-obrigatorio="edit"></auto-complete> 27 + <br>
  28 + <div class="col-sm-6">
  29 + <auto-complete ng-find="findMaterial(value)" ng-set-result="carregarItensMaterial(item)" ng-item="item.codigoEDescricao" ng-id="entradaItem.material" form="formDialogMateriais"
  30 + ng-label="LABEL.MATERIAL" ng-disabled="!newEntrada" ng-model="entradaItem.material" ng-obrigatorio="true">
  31 + </auto-complete>
24 </div> 32 </div>
25 - <div ng-show="editEntrada" class="col-sm-4" style="padding-top: 28px;">  
26 - <label>  
27 - <input type="checkbox" ng-model="entradaItem.$validarPrecoMedio"/>  
28 - <translate>ALMOXARIFADO.LABEL.VALIDAR_PRECO_MEDIO</translate>  
29 - </label> 33 + <div class="col-sm-2">
  34 + <label-select ng-id="entradaItem.unidadeMedidaEntrada" ng-label="ALMOXARIFADO.LABEL.UN_MEDIDA" ng-model="entradaItem.unidadeMedidaEntrada"
  35 + form="formDialogMateriais" ng-obrigatorio="editEntrada || newEntrada" ng-disabled="!editEntrada && !newEntrada"
  36 + ng-custom-options="unidadeMedida as unidadeMedida.sigla for unidadeMedida" track-by="track by unidadeMedida.id" ng-list="unidadesMedidasEntrada"/>
  37 + </div>
  38 + <div class="col-sm-4">
  39 + <label-select ng-id="entradaItem.materialLocalEstoque.endereco" ng-custom-change="" ng-label="ALMOXARIFADO.LABEL.ENDERECO_ESTOQUE" ng-model="entradaItem.materialLocalEstoque"
  40 + form="formDialogMateriais" ng-obrigatorio="editEntrada || newEntrada" ng-disabled="!editEntrada && !newEntrada && !entradaItem.id"
  41 + ng-custom-options="materialLocal as materialLocal.endereco.descricao for materialLocal" track-by="track by materialLocal.id" ng-list="enderecosMaterial"/>
30 </div> 42 </div>
31 </div> 43 </div>
32 44
33 <div class="row"> 45 <div class="row">
  46 +<<<<<<< HEAD
34 <div class="col-sm-3" ng-show="showDecimal"> 47 <div class="col-sm-3" ng-show="showDecimal">
35 <label-input-decimal ng-precisao="decimal" ng-evento-blur="aplicarValidacaoDecimal" ng-custom-maxlength="11" ng-id="entradaItem.$quantidadeEntrada" ng-label="ALMOXARIFADO.LABEL.QUANTIDADE" ng-evento-change="calcularQuantidadeEValores()" ng-obrigatorio="editEntrada" ng-disabled="!editEntrada" form="formDialogMateriais" 48 <label-input-decimal ng-precisao="decimal" ng-evento-blur="aplicarValidacaoDecimal" ng-custom-maxlength="11" ng-id="entradaItem.$quantidadeEntrada" ng-label="ALMOXARIFADO.LABEL.QUANTIDADE" ng-evento-change="calcularQuantidadeEValores()" ng-obrigatorio="editEntrada" ng-disabled="!editEntrada" form="formDialogMateriais"
36 ng-model="entradaItem.$quantidadeEntrada"/> 49 ng-model="entradaItem.$quantidadeEntrada"/>
@@ -38,37 +51,44 @@ @@ -38,37 +51,44 @@
38 <div class="col-sm-3" ng-show="showInteiro"> 51 <div class="col-sm-3" ng-show="showInteiro">
39 <label-input-number ng-custom-maxlength="4" ng-id="entradaItem.$quantidadeEntrada" ng-label="ALMOXARIFADO.LABEL.QUANTIDADE" ng-evento-change="calcularQuantidadeEValores()" ng-obrigatorio="editEntrada" ng-disabled="!editEntrada" form="formDialogMateriais" 52 <label-input-number ng-custom-maxlength="4" ng-id="entradaItem.$quantidadeEntrada" ng-label="ALMOXARIFADO.LABEL.QUANTIDADE" ng-evento-change="calcularQuantidadeEValores()" ng-obrigatorio="editEntrada" ng-disabled="!editEntrada" form="formDialogMateriais"
40 ng-model="entradaItem.$quantidadeEntrada"/> 53 ng-model="entradaItem.$quantidadeEntrada"/>
  54 +=======
  55 + <div class="col-sm-3">
  56 + <label-input-decimal ng-id="entradaItem.$quantidadeEntrada" ng-label="ALMOXARIFADO.LABEL.QUANTIDADE" ng-obrigatorio="editEntrada || newEntrada" ng-disabled="!editEntrada && !newEntrada"
  57 + form="formDialogMateriais" ng-model="entradaItem.$quantidadeEntrada" ng-precisao="tipoNumerico" ng-custom-maxlength="11"/>
  58 +>>>>>>> tarefa-3943
41 </div> 59 </div>
  60 +
42 <div class="col-sm-3"> 61 <div class="col-sm-3">
  62 +<<<<<<< HEAD
43 <label-select ng-id="entradaItem.unidadeMedidaEntrada" ng-custom-change="definirTipoNumerico()" ng-label="LABEL.UNIDADE_MEDIDA" ng-model="entradaItem.unidadeMedidaEntrada" form="formDialogMateriais" ng-obrigatorio="editEntrada" ng-disabled="!editEntrada" 63 <label-select ng-id="entradaItem.unidadeMedidaEntrada" ng-custom-change="definirTipoNumerico()" ng-label="LABEL.UNIDADE_MEDIDA" ng-model="entradaItem.unidadeMedidaEntrada" form="formDialogMateriais" ng-obrigatorio="editEntrada" ng-disabled="!editEntrada"
44 ng-custom-options="unidadeMedida as unidadeMedida.sigla for unidadeMedida" track-by="track by unidadeMedida.id" ng-list="unidadesMedidasEntrada"/> 64 ng-custom-options="unidadeMedida as unidadeMedida.sigla for unidadeMedida" track-by="track by unidadeMedida.id" ng-list="unidadesMedidasEntrada"/>
  65 +=======
  66 + <label-input-money ng-id="entradaItem.valorTotal" ng-label="ALMOXARIFADO.LABEL.VALOR_TOTAL_MATERIAL_SUBTOTAL" ng-obrigatorio="editEntrada || newEntrada"
  67 + ng-disabled="!editEntrada && !newEntrada" form="formDialogMateriais" ng-model="entradaItem.valorTotal" ng-custom-maxlength="19"/>
  68 +>>>>>>> tarefa-3943
45 </div> 69 </div>
  70 +
46 <div class="col-sm-3"> 71 <div class="col-sm-3">
47 - <label-input-decimal ng-id="entradaItem.quantidadeDominioTipoUnidadeEntrada" ng-evento-change="calcularQuantidadeEValores()" ng-label="ALMOXARIFADO.LABEL.UNIDADES"  
48 - ng-obrigatorio="editEntrada" ng-disabled="!editEntrada || unidadesFixa" form="formDialogMateriais" ng-model="entradaItem.quantidadeDominioTipoUnidadeEntrada" ng-custom-maxlength="12"/> 72 + <label-input ng-id="entradaItem.numeroLote" ng-label="ALMOXARIFADO.LABEL.NUMERO_LOTE" ng-obrigatorio="false" ng-disabled="!editEntrada && !newEntrada" form="formDialogMateriais"
  73 + ng-model="entradaItem.numeroLote" />
49 </div> 74 </div>
  75 +
50 <div class="col-sm-3"> 76 <div class="col-sm-3">
51 - <label-input-money ng-id="entradaItem.valorTotal" ng-evento-change="calcularQuantidadeEValores()" ng-label="ALMOXARIFADO.LABEL.SUBTOTAL" ng-obrigatorio="editEntrada" ng-disabled="!editEntrada" form="formDialogMateriais" ng-model="entradaItem.valorTotal" ng-custom-maxlength="19"/> 77 + <label-input-data ng-id="entradaItem.dataValidade" ng-label="ALMOXARIFADO.LABEL.DATA_VALIDADE" ng-obrigatorio="false" ng-disabled="!editEntrada && !newEntrada"
  78 + ng-model="entradaItem.dataValidade" form="formDialogMateriais" />
52 </div> 79 </div>
53 </div> 80 </div>
54 81
55 <div class="row"> 82 <div class="row">
56 - <div class="col-sm-4">  
57 - <label-input ng-id="entradaItem.numeroLote" ng-label="ALMOXARIFADO.LABEL.NUMERO_LOTE" ng-obrigatorio="false" ng-disabled="!editEntrada" form="formDialogMateriais" ng-model="entradaItem.numeroLote" /> 83 + <div class="col-sm-3 col-sm-offset-6">
  84 + <label-input-money ng-id="entradaItem.valorUnitario" ng-label="LABEL.VALOR_UNITARIO" ng-disabled="true" form="formDialogMateriais" ng-model="entradaItem.valorUnitario"
  85 + ng-precision="2" ng-custom-maxlength="19"/>
58 </div> 86 </div>
59 <div class="col-sm-3"> 87 <div class="col-sm-3">
60 - <label-input-data ng-id="entradaItem.dataValidade" ng-label="ALMOXARIFADO.LABEL.DATA_VALIDADE" ng-obrigatorio="false" ng-disabled="!editEntrada" ng-model="entradaItem.dataValidade" form="formDialogMateriais" />  
61 - </div>  
62 - <div class='col-sm-2'>  
63 - <label-input-money ng-id="entradaItem.valorUnitario" ng-label="LABEL.VALOR_UNITARIO" ng-disabled="true" form="formDialogMateriais" ng-model="entradaItem.valorUnitario" ng-precision="2" ng-custom-maxlength="19"/>  
64 - </div>  
65 - <div class="col-sm-2">  
66 <label-input ng-id="entradaItem.quantidade" ng-label="ALMOXARIFADO.LABEL.ENTRADA_ESTOQUE" ng-disabled="true" ng-model="entradaItem.quantidade" /> 88 <label-input ng-id="entradaItem.quantidade" ng-label="ALMOXARIFADO.LABEL.ENTRADA_ESTOQUE" ng-disabled="true" ng-model="entradaItem.quantidade" />
67 </div> 89 </div>
68 - <div class="col-sm-1" style="padding-top: 25px">  
69 - <label>{{entradaItem.material.unidadeArmazenamento.tipoUnidadeMedida.descricao}}</label>  
70 - </div>  
71 </div> 90 </div>
  91 +<<<<<<< HEAD
72 92
73 <fieldset ng-show="caracteristicas.length > 0 || (entradaItem.caracteristicas.length > 0 && !editEntrada)"> 93 <fieldset ng-show="caracteristicas.length > 0 || (entradaItem.caracteristicas.length > 0 && !editEntrada)">
74 <legend> 94 <legend>
@@ -183,6 +203,8 @@ @@ -183,6 +203,8 @@
183 </div> 203 </div>
184 </fieldset> 204 </fieldset>
185 205
  206 +=======
  207 +>>>>>>> tarefa-3943
186 </div> 208 </div>
187 209
188 </ng-form> 210 </ng-form>
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/dialog_contabilizar_entrada.html 0 → 100644
@@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
  1 +<ng-form name="formContabilizacao" autocomplete="off">
  2 + <div class="modal-header">
  3 + <button class="btn btn-clear" type="button" ng-click="contabilizar(formContabilizacao, dataContabilFinal);">
  4 + <i class="fa fa-save green"></i>
  5 + <translate>ALMOXARIFADO.LABEL.CONCLUIR_E_CONTABILIZAR_ENTRADA</translate>
  6 + </button>
  7 +
  8 + <button title="{{$translate.instant('LABEL.CANCELAR')}}" alt="{{$translate.instant('LABEL.CANCELAR')}}" ng-click="$dismiss('cancel');" class="btn btn-clear" type="button">
  9 + <i class="fa fa-times red"></i>
  10 + <translate>LABEL.CANCELAR</translate>
  11 + </button>
  12 + </div>
  13 +
  14 + <div class="modal-body">
  15 + <fieldset>
  16 + <div class="scrollbar-inner">
  17 + <legend style="font-size: 20px">
  18 + <translate>LABEL.DATA_CONTABILIZACAO</translate>
  19 + </legend>
  20 + <fieldset>
  21 + <div class="row">
  22 + <div ng-if="bloquearDataContabil" class="col-sm-4">
  23 + <label-input-data ng-id="entrada.dataContabil" ng-obrigatorio="true" ng-model="dataContabilFinalBloqueada" ng-label="LABEL.DATA_CONTABILIZACAO"
  24 + ng-disabled="bloquearDataContabil" ng-form="formContabilizacao" label-info-tooltip="{{$translate.instant('ALMOXARIFADO.VALIDACAO.DATA_CONTABIL_ALTERADA_SAIDAS')}}"/>
  25 + </div>
  26 + <div ng-show="!bloquearDataContabil" class="col-sm-4">
  27 + <label-input-data ng-id="dataContabilFinal" ng-obrigatorio="true" ng-model="dataContabilFinal" ng-label="LABEL.DATA_CONTABILIZACAO" ng-disabled="bloquearDataContabil"
  28 + ng-form="formContabilizacao" />
  29 + </div>
  30 + </div>
  31 + </fieldset>
  32 + </div>
  33 + </fieldset>
  34 + </div>
  35 +</ng-form>
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/entradaAlmoxarifadoEdit.html
1 -<div id="editEntradaAlmoxarifado" class="page-content clearfix" ng-controller="EntradaAlmoxarifadoController">  
2 - <div class="bar-buttons-action fixed">  
3 - <div class="row">  
4 - <div class="col-sm-8 text-left">  
5 -  
6 - <button class="btn btn-clear" ng-click="saveOrUpdate()" ng-show="edit">  
7 - <i class="fa fa-save green"></i> <translate>LABEL.SALVAR</translate>  
8 - </button>  
9 -  
10 - <button class="btn btn-clear" ng-click="resetForm();" ng-show="entradaAlmoxarifado.id === undefined">  
11 - <i class="fa fa-eraser yellow-dark"></i> <translate>LABEL.LIMPAR</translate>  
12 - </button>  
13 -  
14 - <button class="btn btn-clear" ng-click="remove(entradaAlmoxarifado);" ng-show="entradaAlmoxarifado.id !== undefined">  
15 - <i class="fa fa-times red"></i> <translate>LABEL.REMOVER</translate>  
16 - </button>  
17 -  
18 - <button class="btn btn-clear" ng-click="$showPageSearchWorkspace(workspace); atualizaPaginaPesquisa();">  
19 - <i class="fa fa-search"></i> <translate>LABEL.PESQUISAR</translate>  
20 - </button>  
21 -  
22 - </div><!-- .col -->  
23 -  
24 - <div class="col-sm-4 text-right">  
25 -  
26 - <favorito/>  
27 -  
28 - <help-button workspace="workspace" />  
29 -  
30 - </div><!-- .col -->  
31 - </div><!-- .row -->  
32 - </div><!-- .bar-buttons-action -->  
33 -  
34 - <breadcrumb ng-workspace="workspace"></breadcrumb>  
35 -  
36 - <p>  
37 - <small>( <span class="red">*</span> ) <translate>LABEL.CAMPOS_OBRIGATORIOS</translate></small>  
38 - </p>  
39 -  
40 - <fieldset> 1 +<div class="page-content clearfix" id="entradaAlmoxarifadoControllerId" ng-controller="EntradaAlmoxarifadoController">
  2 + <div class="bar-buttons-action fixed" >
  3 + <div class="row">
  4 + <div class="col-sm-9 text-left">
  5 + <div ng-show="edit" class="btn-group dropdown" role="group" dropdown>
  6 + <button class="btn btn-clear" ng-if="edit" title="{{$translate.instant('ALMOXARIFADO.LABEL.CONCLUIR_ENTRADA')}}"
  7 + alt="{{$translate.instant('ALMOXARIFADO.LABEL.CONCLUIR_ENTRADA')}}" dropdown-toggle type="button">
  8 + <i class="fa fa-save green"></i> <translate>ALMOXARIFADO.LABEL.CONCLUIR_ENTRADA</translate><span class="fa fa-caret-down icon-on-right"></span>
  9 + </button>
  10 + <ul class="dropdown-menu-center dropdown-menu dropdown-caret" role="menu">
  11 + <li ng-show="entradaAlmoxarifado.dataContabil === null">
  12 + <a href="#void" ng-click="saveOrUpdateContabilizar(false)" ><i class="fa fa-save orange"></i> <translate>ALMOXARIFADO.LABEL.CONCLUIR_ENTRADA_BTN</translate></a>
  13 + </li>
  14 + <li>
  15 + <a href="#void" ng-click="saveOrUpdateContabilizar(true)" ><i class="fa fa-save green"></i> <translate>ALMOXARIFADO.LABEL.CONCLUIR_E_CONTABILIZAR_ENTRADA</translate></a>
  16 + </li>
  17 + <li ng-show="entradaAlmoxarifado.dataContabil !== null">
  18 + <a href="#void" ng-click="saveOrUpdateContabilizar(false)" ><i class="fa fa-save orange"></i> <translate>ALMOXARIFADO.LABEL.CONCLUIR_E_DESCONTABILIZAR_ENTRADA</translate></a>
  19 + </li>
  20 + </ul>
  21 + </div>
  22 + <button title="{{$translate.instant('LABEL.LIMPAR')}}" alt="{{$translate.instant('LABEL.LIMPAR')}}" class="btn btn-clear" type="button" ng-show="entradaAlmoxarifado.id === undefined"
  23 + ng-click="resetForm();" >
  24 + <i class="fa fa-eraser yellow-dark"></i> <translate>LABEL.LIMPAR</translate>
  25 + </button>
  26 + <button
  27 + title="{{$translate.instant('LABEL.GERAR_RELATORIO')}}"
  28 + alt="{{$translate.instant('LABEL.GERAR_RELATORIO')}}"
  29 + class="btn btn-clear" type="button" ng-disabled="false"
  30 + ng-click="gerarRelatorioEntradaAlmoxarifado();" ng-if="entradaAlmoxarifado.id">
  31 + <i class="fa fa-print"></i>
  32 + <translate>LABEL.GERAR_RELATORIO</translate>
  33 + </button>
  34 + <button title="{{$translate.instant('LABEL.PESQUISAR')}}" alt="{{$translate.instant('LABEL.PESQUISAR')}}" class="btn btn-clear" type="button"
  35 + ng-click="$showPageSearchWorkspace(workspace); atualizarLista('searchEntradaAlmoxarifado');">
  36 + <i class="fa fa-search"></i> <translate>LABEL.PESQUISAR</translate>
  37 + </button>
  38 + </div>
  39 + <!-- .col -->
41 40
42 - <legend><translate>ALMOXARIFADO.LABEL.DADOS_ENTRADA_ALMOXARIFADO</translate></legend>  
43 -  
44 - <form name="entradaAlmoxarifadoForm">  
45 -  
46 - <div class="row">  
47 -  
48 - <div class="col-md-3">  
49 -  
50 - <label-input-number ng-id="entradaAlmoxarifado.notaRecebimento" ng-label="ALMOXARIFADO.LABEL.NOTA_RECEBIMENTO" ng-model="entradaAlmoxarifado.notaRecebimento" ng-obrigatorio="false" ng-disabled="true" />  
51 -  
52 - </div>  
53 -  
54 - <div class="col-md-9">  
55 -  
56 - <auto-complete ng-id="entradaAlmoxarifado.almoxarifado" ng-label="ALMOXARIFADO.LABEL.ALMOXARIFADO" ng-model="entradaAlmoxarifado.almoxarifado" form="entradaAlmoxarifadoForm" ng-obrigatorio="{{edit}}" ng-disabled="!edit" ng-find="findAutoCompleteAlmoxarifado(value)" ng-item="item.nome + ' - ' + item.classificacao" />  
57 -  
58 - </div> 41 + <div class="col-sm-3 text-right">
59 42
60 - </div>  
61 -  
62 - <div class="row">  
63 -  
64 - <div class="col-sm-4">  
65 -  
66 - <label-input-data ng-id="entradaAlmoxarifado.dataReferencia" ng-label="LABEL.DATA_REGISTRO" ng-obrigatorio="false" ng-disabled="true" ng-model="entradaAlmoxarifado.dataReferencia" form="entradaAlmoxarifadoForm" />  
67 -  
68 - </div>  
69 -  
70 - <div class="col-md-4">  
71 -  
72 - <label-input-data ng-id="entradaAlmoxarifado.dataRecebimento" ng-label="ALMOXARIFADO.LABEL.DATA_RECEBIMENTO" ng-model="entradaAlmoxarifado.dataRecebimento" form="entradaAlmoxarifadoForm" ng-obrigatorio="edit" ng-disabled="!edit" ng-mode="day" ng-format="dd/MM/yyyy" />  
73 -  
74 - </div>  
75 -  
76 - <div class="col-md-4">  
77 -  
78 - <label-input-data ng-id="entradaAlmoxarifado.dataContabilizacao" ng-label="LABEL.DATA_CONTABILIZACAO" ng-model="entradaAlmoxarifado.dataContabil" form="entradaAlmoxarifadoForm" ng-obrigatorio="edit" ng-disabled="!edit" ng-mode="day" ng-format="dd/MM/yyyy" />  
79 -  
80 - </div>  
81 -  
82 - </div>  
83 -  
84 - <div class="row">  
85 -  
86 - <div class="col-md-4">  
87 - <label-select ng-id="entradaAlmoxarifado.dominioTipoEntrada" ng-label="LABEL.TIPO_ENTRADA" ng-model="entradaAlmoxarifado.dominioTipoEntrada" form="entradaAlmoxarifadoForm" ng-obrigatorio="edit"  
88 - ng-disabled="!edit" ng-custom-options="dominio.originalElement as dominio.descricao for dominio" track-by="track by dominio.id" ng-list="dominioTipoEntradaList" />  
89 -  
90 - </div> 43 + <favorito/>
91 44
92 - <div class="col-md-4" ng-if="entradaAlmoxarifado.dominioTipoEntrada.codigo === 1 && edit">  
93 - <label-select ng-id="entradaAlmoxarifado.dominioTipoRecebimentoOrcamentaria" ng-label="LABEL.TIPO_RECEBIMENTO" ng-model="entradaAlmoxarifado.dominioTipoRecebimento" form="entradaAlmoxarifadoForm" ng-obrigatorio="edit"  
94 - ng-disabled="!edit" ng-custom-options="dominio.originalElement as dominio.descricao for dominio" ng-list="dominiosTipoRecebimentoOrcamentaria" track-by="track by dominio.id" />  
95 -  
96 - </div>  
97 -  
98 - <div class="col-sm-4" ng-if="entradaAlmoxarifado.dominioTipoEntrada.codigo === 2 && edit">  
99 - <label-select ng-id="entradaAlmoxarifado.dominioTipoRecebimentoExtra" ng-label="LABEL.TIPO_RECEBIMENTO" ng-model="entradaAlmoxarifado.dominioTipoRecebimento" form="entradaAlmoxarifadoForm" ng-obrigatorio="edit"  
100 - ng-disabled="!edit" ng-custom-options="dominio.originalElement as dominio.descricao for dominio" ng-list="dominiosTipoRecebimentoExtraOrcamentaria" track-by="track by dominio.id" />  
101 - </div> 45 + <help-button workspace="workspace" />
102 46
103 - <div class="col-sm-4" ng-if="!edit">  
104 - <label-select ng-id="entradaAlmoxarifado.dominioTipoRecebimento" ng-label="LABEL.TIPO_RECEBIMENTO" ng-model="entradaAlmoxarifado.dominioTipoRecebimento" form="entradaAlmoxarifadoForm" ng-obrigatorio="edit"  
105 - ng-disabled="true" ng-custom-options="dominio.originalElement as dominio.descricao for dominio" ng-list="dominiosTipoRecebimento" track-by="track by dominio.id" />  
106 - </div>  
107 -  
108 - <div class="col-md-4">  
109 - <auto-complete ng-id="entradaAlmoxarifado.fornecedor" ng-label="LABEL.FORNECEDOR" ng-model="entradaAlmoxarifado.fornecedor" form="entradaAlmoxarifadoForm" ng-obrigatorio="{{edit}}" ng-disabled="!edit" ng-find="findAutoCompleteFornecedor(value)" ng-item="item['pessoa.nome']" />  
110 - </div>  
111 -  
112 - </div>  
113 -  
114 - <fieldset>  
115 - <legend>  
116 - <label ng-class="{'has-error' : entradaAlmoxarifadoForm.$submitted && entradaAlmoxarifado.entradasIten && entradaAlmoxarifado.entradasIten.length < 1}">  
117 - <translate>ALMOXARIFADO.LABEL.MATERIAIS</translate>  
118 - <span class='red' ng-if=" edit">*</span>  
119 - <i ng-show="entradaAlmoxarifadoForm.$submitted && entradaAlmoxarifado.entradasIten && entradaAlmoxarifado.entradasIten.length < 1" class='fa fa-warning red' tooltip="{{$translate.instant('ALMOXARIFADO.LABEL.MATERIAIS') + ' ' +$translate.instant('LABEL.CAMPO_OBRIGATORIO')}}" tooltip-placement='top'></i>  
120 - </label>  
121 - </legend>  
122 -  
123 - <script type="text/ng-template" id="modal-materiais-consumo.html">  
124 - <div ng-include src="'/cit-almoxarifado-web/html/entradaAlmoxarifado/dialog_add_materiais.html'" />  
125 - </script>  
126 -  
127 - <div class="row">  
128 - <div class="col-md-3">  
129 - <label-input-radio ng-id="entradaAlmoxarifado.dominioFinalidade.codigo" ng-model="entradaAlmoxarifado.dominioFinalidade.codigo" ng-label="LABEL.FINALIDADE"  
130 - ng-obrigatorio="edit" text="descricao" value="codigo" form="entradaAlmoxarifadoForm" ng-disabled="!edit" list="dominiosTipoFinalidade"/>  
131 - </div>  
132 - <div class="col-md-7" ng-if="entradaAlmoxarifado.dominioFinalidade.codigo == 2">  
133 - <auto-complete ng-id="entradaAlmoxarifado.unidadeRequisitante" ng-label="ALMOXARIFADO.LABEL.UNIDADE_REQUISITANTE" ng-obrigatorio="{{edit}}"  
134 - ng-model="entradaAlmoxarifado.unidadeRequisitante" form="entradaAlmoxarifadoForm" ng-disabled="!edit"  
135 - ng-find="findEstruturaOrganizacionalUR(value)" ng-item="item.nome + ' - ' + item.classificacao" />  
136 - </div>  
137 </div> 47 </div>
138 -  
139 - <div class="row">  
140 -  
141 - <div class="col-md-3">  
142 -  
143 - <label-input-money ng-id="entradaAlmoxarifado.valorTotalNota" ng-label="ALMOXARIFADO.LABEL.VALOR_TOTAL_NOTA" ng-model="entradaAlmoxarifado.valorTotalNota"  
144 - form="entradaAlmoxarifadoForm" ng-obrigatorio="edit" ng-precision="2" ng-disabled="!edit" ng-custom-maxlength="19" />  
145 -  
146 - </div>  
147 -  
148 - <div class="col-md-3">  
149 -  
150 - <label-input-money ng-id="valorTotalMateriais" ng-label="LABEL.VALOR_TOTAL_INCLUIDO" ng-model="valorTotalMateriais" form="entradaAlmoxarifadoForm" ng-precision="2" ng-disabled="true" ng-custom-maxlength="19"/>  
151 -  
152 - </div>  
153 -  
154 - </div>  
155 -  
156 - </form>  
157 -  
158 - <div class="row margin-top">  
159 - <div class="col-sm-12">  
160 - <div class="panel panel-default">  
161 - <div class="panel-heading clearfix">  
162 - <button title="{{$translate.instant('LABEL.ADICIONAR')}}" alt="{{$translate.instant('LABEL.ADICIONAR')}}" ng-show="edit" class="btn btn-clear" type="button" ng-click="inicializarModalMateriais();">  
163 - <i class="fa fa-plus-circle yellow-dark"></i>  
164 - <translate>LABEL.ADICIONAR</translate>  
165 - </button>  
166 - <button title="{{$translate.instant('LABEL.VISUALIZAR')}}" alt="{{$translate.instant('LABEL.VISUALIZAR')}}" class="btn btn-clear" type="button" ng-click="abrirEntradaItem(false)" >  
167 - <i class="fa fa-search blue"></i>  
168 - <translate>LABEL.VISUALIZAR</translate>  
169 - </button>  
170 -  
171 - <button title="{{$translate.instant('LABEL.EDITAR')}}" alt="{{$translate.instant('LABEL.EDITAR')}}" ng-show="edit" class="btn btn-clear" type="button" ng-click="abrirEntradaItem(true)" >  
172 - <i class="fa fa-pencil blue"></i>  
173 - <translate>LABEL.EDITAR</translate>  
174 - </button> 48 + <!-- .col -->
  49 + </div>
  50 + <!-- .row -->
  51 + </div>
  52 +
  53 + <script type="text/ng-template" id="modal-contabilizar-entrada.html">
  54 + <div ng-include src="'/cit-almoxarifado-web/html/entrada/dialog_contabilizar_entrada.html'" />
  55 + </script>
  56 +
  57 + <breadcrumb ng-workspace="workspace"></breadcrumb>
175 58
176 - <button title="{{$translate.instant('LABEL.REMOVER')}}" alt="{{$translate.instant('LABEL.REMOVER')}}" ng-show="edit" class="btn btn-clear" type="button" ng-click="removerEntradaItem()">  
177 - <i class="fa fa-times red"></i>  
178 - <translate>LABEL.REMOVER</translate>  
179 - </button> 59 + <p>
  60 + <small>( <span class="red">*</span> ) <translate>LABEL.CAMPOS_OBRIGATORIOS</translate>
  61 + </small>
  62 + </p>
180 63
181 - </div><!-- .panel-heading -->  
182 - <table class="table table-bordered table-striped">  
183 - <thead>  
184 - <tr>  
185 - <th width="20px" class="text-center"></th>  
186 - <th width="10%" class="text-center"><translate>LABEL.ITEM</translate></th>  
187 - <th style="width: 25%;" class="text-center"><translate>LABEL.DESCRICAO_MATERIAL</translate></th>  
188 - <th style="width: 15%;" class="text-center"><translate>LABEL.UNIDADE_MEDIDA</translate></th>  
189 - <th style="width: 15%;" class="text-center"><translate>ALMOXARIFADO.LABEL.UNIDADES</translate></th>  
190 - <th style="width: 15%;" class="text-center"><translate>LABEL.VALOR_UNITARIO</translate></th>  
191 - <th style="width: 15%;" class="text-center"><translate>ALMOXARIFADO.LABEL.SUBTOTAL</translate></th>  
192 - </tr>  
193 - </thead>  
194 - <tbody>  
195 - <tr ng-hide="entradaAlmoxarifado.entradasIten.length != 0">  
196 - <td colspan="7" class="text-center"><translate>LABEL.TABELA_VAZIA</translate></td>  
197 - </tr>  
198 - <tr ng-repeat="entradaItemLista in entradaAlmoxarifado.entradasIten">  
199 - <td class="text-center"><input type="radio" name="entradaItemChecked" ng-value="entradaItemLista" ng-model="$parent.entradaItemSelecionado"/></td>  
200 - <td class="text-center">{{$index +1}}</td>  
201 - <td class="text-center">{{ entradaItemLista.material.descricao }}</td>  
202 - <td class="text-center">{{ entradaItemLista.material.unidadeArmazenamento.descricao }}</td>  
203 - <td class="text-center">{{ entradaItemLista.quantidade }}</td>  
204 - <td class="text-center">{{ entradaItemLista.valorUnitario | currency:"R$":2}}</td>  
205 - <td class="text-center">{{ entradaItemLista.valorTotal | currency}}</td>  
206 - </tr>  
207 - </tbody>  
208 - </table>  
209 - </div> 64 + <div class="page-content">
  65 + <fieldset>
  66 + <form name="entradaAlmoxarifadoForm" novalidate autocomplete="off">
  67 + <div class="widget-box">
  68 +
  69 + <div class="widget-body">
  70 +
  71 + <div class="widget-main">
  72 +
  73 + <div>
  74 + <ul class="wizard-steps">
  75 + <li ng-class="{'active': isCurrentStep(0), 'complete' : !entradaAlmoxarifadoForm.dadosEntradaForm.$invalid, 'incomplete' : (entradaAlmoxarifadoForm.dadosEntradaForm.$submitted && entradaAlmoxarifadoForm.dadosEntradaForm.$invalid)}"
  76 + ng-click="setCurrentStep(0)" title="{{$translate.instant('ALMOXARIFADO.LABEL.DADOS_ENTRADA')}}" alt="{{$translate.instant('ALMOXARIFADO.LABEL.DADOS_ENTRADA')}}">
  77 + <span class="step">1</span>
  78 + <a href="#void" class="title" style="text-decoration: none;"><translate>ALMOXARIFADO.LABEL.DADOS_ENTRADA</translate></a>
  79 + </li>
  80 +
  81 + <li ng-class="{'active': isCurrentStep(1), 'complete' : ((isCurrentStep(1) || isCurrentStep(2) || isCurrentStep(3)) && !entradaAlmoxarifadoForm.materiaisForm.$invalid && (entradaAlmoxarifado.entradasItem.length > 0)), 'incomplete' : ((entradaAlmoxarifadoForm.materiaisForm.$submitted || step > 1) && (entradaAlmoxarifadoForm.materiaisForm.$invalid || !(entradaAlmoxarifado.entradasItem.length > 0))) && (isCurrentStep(1) || isCurrentStep(2) || isCurrentStep(3))}"
  82 + ng-click="setCurrentStep(1)" title="{{$translate.instant('LABEL.MATERIAIS')}}" alt="{{$translate.instant('LABEL.MATERIAIS')}}">
  83 + <span class="step">2</span>
  84 + <a href="#void" class="title" style="text-decoration: none;"><translate>LABEL.MATERIAIS</translate></a>
  85 + </li>
  86 +
  87 + <li ng-class="{'active': isCurrentStep(2), 'complete' : ((isCurrentStep(2) || isCurrentStep(3)) && (entradaAlmoxarifado.documentos.length > 0)), 'incomplete' : ((entradaAlmoxarifadoForm.documentosForm.$submitted || step > 2) && !(entradaAlmoxarifado.documentos.length > 0)) && (isCurrentStep(2) || isCurrentStep(3))}"
  88 + ng-click="setCurrentStep(2)" title="{{$translate.instant('ALMOXARIFADO.LABEL.DOCUMENTOS')}}" alt="{{$translate.instant('ALMOXARIFADO.LABEL.DOCUMENTOS')}}">
  89 + <span class="step">3</span>
  90 + <a href="#void" class="title" style="text-decoration: none;"><translate>ALMOXARIFADO.LABEL.DOCUMENTOS</translate></a>
  91 + </li>
  92 +
  93 + <li ng-class="{'active': isCurrentStep(3), 'complete' : isCurrentStep(3)}" title="{{$translate.instant('LABEL.OBSERVACOES')}}" alt="{{$translate.instant('LABEL.OBSERVACOES')}}"
  94 + ng-click="setCurrentStep(3)">
  95 + <span class="step">4</span>
  96 + <a href="#void" class="title" style="text-decoration: none;"><translate>LABEL.OBSERVACOES</translate></a>
  97 + </li>
  98 + </ul>
  99 +
  100 + </div>
  101 +
  102 + <hr>
  103 + <div ng-repeat="template in templates">
  104 + <div class="slide-frame" ng-include="template.url" ng-show="template.show"></div>
  105 + </div>
  106 + <hr>
  107 + <div>
  108 + <button class="btn btn-prev" ng-click="handlePrevious()" ng-hide="isFirstStep()" type="button">
  109 + <i class="ace-icon fa fa-arrow-left"></i>
  110 + <translate>LABEL.ANTERIOR</translate>
  111 + </button>
  112 +
  113 + <!-- <button class="btn btn-success btn-next" ng-click="handleNext()" ng-hide="isLastStep()" type="button">
  114 + <translate>LABEL.PROXIMO</translate>
  115 + <i ng-class="fa fa-arrow-right icon-on-right"></i></button> -->
  116 +
  117 + <button class="btn btn-success btn-next" ng-click="handleNext()" ng-hide="isLastStep()" type="button">
  118 + <i class="fa fa-arrow-right icon-on-right"></i>
  119 + <translate>LABEL.PROXIMO</translate>
  120 + </button>
  121 + </div>
  122 + </div><!-- /.widget-main -->
  123 + </div><!-- /.widget-body -->
210 </div> 124 </div>
211 - <!-- .col -->  
212 - </div>  
213 -  
214 - </fieldset> 125 + </form>
  126 + </fieldset>
  127 + </div> <!-- /.page-content -->
215 128
216 - <componente-associar-documentos ng-documentos="entradaAlmoxarifado.documentos" ng-edit="edit" ng-uploader="uploader" ng-workspace="$parent.workspace" form="entradaAlmoxarifadoForm" ng-obrigatorio="edit"></componente-associar-documentos>  
217 -  
218 - <form name="entradaObservacaoForm">  
219 - <componente-observacao ng-observacoes="entradaAlmoxarifado.observacoes" ng-hide="false" ng-edit="edit"></componente-observacao>  
220 - </form>  
221 -  
222 - </fieldset>  
223 -</div><!-- .page-content -->  
224 \ No newline at end of file 129 \ No newline at end of file
  130 +</div>
225 \ No newline at end of file 131 \ No newline at end of file
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/entradaAlmoxarifadoList.html
@@ -14,6 +14,11 @@ @@ -14,6 +14,11 @@
14 <translate>LABEL.VISUALIZAR</translate> 14 <translate>LABEL.VISUALIZAR</translate>
15 </button> 15 </button>
16 16
  17 + <button title="{{$translate.instant('LABEL.EDITAR')}}" alt="{{$translate.instant('LABEL.EDITAR')}}" class="btn btn-clear" ng-click="abrirVisualizar(true);" type="button">
  18 + <i class="fa fa-pencil blue"></i>
  19 + <translate>LABEL.EDITAR</translate>
  20 + </button>
  21 +
17 <button class="btn btn-clear" ng-click="remove();"> 22 <button class="btn btn-clear" ng-click="remove();">
18 <i class="fa fa-times red"></i> 23 <i class="fa fa-times red"></i>
19 <translate>LABEL.REMOVER</translate> 24 <translate>LABEL.REMOVER</translate>
@@ -43,6 +48,6 @@ @@ -43,6 +48,6 @@
43 48
44 <breadcrumb ng-workspace="workspace"></breadcrumb> 49 <breadcrumb ng-workspace="workspace"></breadcrumb>
45 50
46 - <list-view ng-lista="entradaAlmoxarifadoList" ng-repository="EntradaAlmoxarifadoRepository" ng-use-custom-remove="false" ng-headers="headers" ng-filter-criteria="filterCriteria" ng-item-selecionado="entradaAlmoxarifadoChecked"></list-view>  
47 - 51 + <list-view ng-lista="entradaAlmoxarifadoList" ng-repository="EntradaAlmoxarifadoRepository" ng-use-custom-remove="false" ng-headers="headers" ng-filter-criteria="filterCriteria"
  52 + ng-item-selecionado="entradaAlmoxarifadoChecked"></list-view>
48 </div><!-- .page-content --> 53 </div><!-- .page-content -->
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/entradaAlmoxarifadoPg1.html 0 → 100644
@@ -0,0 +1,61 @@ @@ -0,0 +1,61 @@
  1 +<ng-form name="dadosEntradaForm" novalidate autocomplete="off">
  2 + <div class="page-content">
  3 + <fieldset>
  4 + <legend>
  5 + <translate>ALMOXARIFADO.LABEL.DADOS_ENTRADA</translate>
  6 + </legend>
  7 +
  8 + <div class="row">
  9 + <div class="col-md-5">
  10 + <auto-complete ng-id="entradaAlmoxarifado.almoxarifado" ng-label="ALMOXARIFADO.LABEL.ALMOXARIFADO" ng-model="entradaAlmoxarifado.almoxarifado" form="dadosEntradaForm"
  11 + ng-obrigatorio="{{edit}}" ng-disabled="!edit" ng-find="findAutoCompleteAlmoxarifado(value)" ng-item="item.nome + ' - ' + item.classificacao"/>
  12 + </div>
  13 + <div class="col-md-4">
  14 + <auto-complete ng-id="entradaAlmoxarifado.fornecedor" ng-label="LABEL.FORNECEDOR" ng-model="entradaAlmoxarifado.fornecedor" form="dadosEntradaForm"
  15 + ng-obrigatorio="{{edit}}" ng-disabled="!edit" ng-find="findAutoCompleteFornecedor(value)" ng-item="item['pessoa.nome']" />
  16 + </div>
  17 + <div class="col-md-3">
  18 + <label-input-number ng-id="entradaAlmoxarifado.notaRecebimento" ng-label="ALMOXARIFADO.LABEL.NOTA_RECEBIMENTO" ng-model="entradaAlmoxarifado.notaRecebimento"
  19 + ng-obrigatorio="false" ng-disabled="true"/>
  20 + </div>
  21 + </div>
  22 +
  23 + <div class="row">
  24 + <div class="col-md-4">
  25 + <label-select ng-id="entradaAlmoxarifado.dominioTipoEntrada" ng-label="LABEL.TIPO_ENTRADA" ng-model="entradaAlmoxarifado.dominioTipoEntrada" form="dadosEntradaForm"
  26 + ng-obrigatorio="edit" ng-disabled="!edit" ng-custom-options="dominio.originalElement as dominio.descricao for dominio" track-by="track by dominio.id"
  27 + ng-list="dominioTipoEntradaList" />
  28 + </div>
  29 +
  30 + <div class="col-md-4" ng-if="edit">
  31 + <label-select ng-id="entradaAlmoxarifado.dominioTipoRecebimento" ng-label="LABEL.TIPO_RECEBIMENTO" ng-model="entradaAlmoxarifado.dominioTipoRecebimento"
  32 + form="dadosEntradaForm" ng-obrigatorio="edit" ng-disabled="!edit" ng-custom-options="dominio.originalElement as dominio.descricao for dominio"
  33 + ng-list="dominiosTipoRecebimento" track-by="track by dominio.id" />
  34 + </div>
  35 +
  36 + <div class="col-md-4">
  37 + <label-input-data ng-id="entradaAlmoxarifado.dataRecebimento" ng-label="ALMOXARIFADO.LABEL.DATA_RECEBIMENTO" ng-model="entradaAlmoxarifado.dataRecebimento" form="dadosEntradaForm"
  38 + ng-obrigatorio="edit" ng-disabled="!edit" ng-mode="day" ng-format="dd/MM/yyyy" />
  39 + </div>
  40 + </div>
  41 +
  42 + <div class="row">
  43 + <div class="col-md-4">
  44 + <label-input-radio ng-id="entradaAlmoxarifado.dominioFinalidade.codigo" ng-model="entradaAlmoxarifado.dominioFinalidade.codigo" ng-label="LABEL.FINALIDADE"
  45 + ng-obrigatorio="edit" text="descricao" value="codigo" form="entradaAlmoxarifadoForm" ng-disabled="true" list="dominiosTipoFinalidade"/>
  46 + </div>
  47 +
  48 + <div class="col-sm-4">
  49 + <label-input-data ng-id="entradaAlmoxarifado.dataReferencia" ng-label="LABEL.DATA_REGISTRO" ng-obrigatorio="false" ng-disabled="true" ng-model="entradaAlmoxarifado.dataReferencia"
  50 + form="dadosEntradaForm" />
  51 + </div>
  52 +
  53 + <div class="col-md-4">
  54 + <label-input-data ng-id="entradaAlmoxarifado.dataContabilizacao" ng-label="LABEL.DATA_CONTABILIZACAO" ng-model="entradaAlmoxarifado.dataContabil" form="dadosEntradaForm"
  55 + ng-obrigatorio="false" ng-disabled="true" ng-mode="day" ng-format="dd/MM/yyyy"/>
  56 + </div>
  57 + </div>
  58 +
  59 + </fieldset>
  60 + </div> <!-- /.page-content -->
  61 +</ng-form>
0 \ No newline at end of file 62 \ No newline at end of file
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/entradaAlmoxarifadoPg2.html 0 → 100644
@@ -0,0 +1,96 @@ @@ -0,0 +1,96 @@
  1 +<ng-form name="materiaisForm" novalidate autocomplete="off">
  2 + <div class="page-content">
  3 + <fieldset>
  4 + <legend>
  5 + <label ng-class="{'has-error' : materiaisForm.$submitted && entradaAlmoxarifado.entradasItem && entradaAlmoxarifado.entradasItem.length < 1}">
  6 + <translate>ALMOXARIFADO.LABEL.MATERIAIS</translate>
  7 + <span class='red' ng-if=" edit">*</span>
  8 + <i ng-show="materiaisForm.$submitted && entradaAlmoxarifado.entradasItem && entradaAlmoxarifado.entradasItem.length < 1" class='fa fa-warning red'
  9 + tooltip="{{$translate.instant('ALMOXARIFADO.LABEL.MATERIAIS') + ' ' +$translate.instant('LABEL.CAMPO_OBRIGATORIO')}}" tooltip-placement='top'></i>
  10 + </label>
  11 + </legend>
  12 + <script type="text/ng-template" id="modal-materiais-consumo.html">
  13 + <div ng-include src="'/cit-almoxarifado-web/html/entradaAlmoxarifado/dialog_add_materiais.html'" />
  14 + </script>
  15 +
  16 + <div class="row">
  17 + <div class="col-md-3">
  18 + <label-input-money ng-id="entradaAlmoxarifado.valorTotalNota" ng-label="ALMOXARIFADO.LABEL.VALOR_TOTAL_NOTA" ng-model="entradaAlmoxarifado.valorTotalNota"
  19 + form="materiaisForm" ng-obrigatorio="edit" ng-precision="2" ng-disabled="!edit" ng-custom-maxlength="19" />
  20 + </div>
  21 +
  22 + <div class="col-md-3">
  23 + <label-input-money ng-id="valorTotalMateriais" ng-label="LABEL.VALOR_TOTAL_INCLUIDO" ng-model="valorTotalMateriais" form="materiaisForm" ng-precision="2"
  24 + ng-disabled="true" ng-custom-maxlength="19"/>
  25 + </div>
  26 +
  27 + </div>
  28 +
  29 + <div class="row margin-top">
  30 + <div class="col-sm-12">
  31 + <div class="panel panel-default">
  32 + <div class="panel-heading clearfix">
  33 + <button title="{{$translate.instant('LABEL.ADICIONAR')}}" alt="{{$translate.instant('LABEL.ADICIONAR')}}" ng-show="edit" class="btn btn-clear" type="button"
  34 + ng-click="inicializarModalMateriais();">
  35 + <i class="fa fa-plus-circle yellow-dark"></i>
  36 + <translate>LABEL.ADICIONAR</translate>
  37 + </button>
  38 + <button title="{{$translate.instant('LABEL.VISUALIZAR')}}" alt="{{$translate.instant('LABEL.VISUALIZAR')}}" class="btn btn-clear" type="button"
  39 + ng-click="abrirEntradaItem(false)" >
  40 + <i class="fa fa-search blue"></i>
  41 + <translate>LABEL.VISUALIZAR</translate>
  42 + </button>
  43 +
  44 + <button title="{{$translate.instant('LABEL.EDITAR')}}" alt="{{$translate.instant('LABEL.EDITAR')}}" ng-show="edit" class="btn btn-clear" type="button"
  45 + ng-click="abrirEntradaItem(true)" >
  46 + <i class="fa fa-pencil blue"></i>
  47 + <translate>LABEL.EDITAR</translate>
  48 + </button>
  49 +
  50 + <button title="{{$translate.instant('LABEL.REMOVER')}}" alt="{{$translate.instant('LABEL.REMOVER')}}" ng-show="edit" class="btn btn-clear" type="button"
  51 + ng-click="removerEntradaItem()">
  52 + <i class="fa fa-times red"></i>
  53 + <translate>LABEL.REMOVER</translate>
  54 + </button>
  55 +
  56 + </div><!-- .panel-heading -->
  57 + <table class="table table-bordered table-striped">
  58 + <thead>
  59 + <tr>
  60 + <th width="20px" class="text-center"></th>
  61 + <th width="7%" class="text-center"><translate>LABEL.ITEM</translate></th>
  62 + <th style="width: 20%;" class="text-center"><translate>LABEL.DESCRICAO_MATERIAL</translate></th>
  63 + <th style="width: 14%;" class="text-center"><translate>ALMOXARIFADO.LABEL.QUANTIDADE</translate></th>
  64 + <th style="width: 15%;" class="text-center"><translate>LABEL.UNIDADE_MEDIDA</translate></th>
  65 + <th style="width: 14%;" class="text-center"><translate>ALMOXARIFADO.LABEL.ENTRADA_ESTOQUE</translate></th>
  66 + <th style="width: 15%;" class="text-center"><translate>LABEL.VALOR_UNITARIO</translate></th>
  67 + <th style="width: 15%;" class="text-center"><translate>ALMOXARIFADO.LABEL.SUBTOTAL</translate></th>
  68 + </tr>
  69 + </thead>
  70 + <tbody>
  71 + <tr ng-hide="entradaAlmoxarifado.entradasItem.length != 0">
  72 + <td colspan="8" class="text-center"><translate>LABEL.TABELA_VAZIA</translate></td>
  73 + </tr>
  74 + <tr ng-repeat="entradaItemLista in entradaAlmoxarifado.entradasItem">
  75 + <td class="text-center">
  76 + <input type="checkbox" name="entradaItemChecked" ng-model="entradaItemLista.$checked" ng-click="checkEntradaItem(entradaItemLista); atualizarListaSizeSelectEntradaItem()"/>
  77 + </td>
  78 + <td class="text-center">{{$index +1}}</td>
  79 + <td class="text-center">{{ entradaItemLista.material.descricao }}</td>
  80 + <td class="text-center">{{ entradaItemLista.quantidade / entradaItemLista.unidadeMedidaEntrada.quantidadePadrao }}</td>
  81 + <td class="text-center">{{ entradaItemLista.unidadeMedidaEntrada.descricao }}</td>
  82 + <td class="text-center">{{ entradaItemLista.quantidade }}</td>
  83 + <td class="text-center">{{ entradaItemLista.valorUnitario | currency:"R$":2}}</td>
  84 + <td class="text-center">{{ entradaItemLista.valorTotal | currency}}</td>
  85 + </tr>
  86 + </tbody>
  87 + </table>
  88 + </div>
  89 + </div>
  90 + <!-- .col -->
  91 + </div>
  92 +
  93 +
  94 + </fieldset>
  95 + </div> <!-- /.page-content -->
  96 +</ng-form>
0 \ No newline at end of file 97 \ No newline at end of file
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/entradaAlmoxarifadoPg3.html 0 → 100644
@@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
  1 +<ng-form name="documentosForm" novalidate autocomplete="off">
  2 + <div class="page-content">
  3 + <fieldset>
  4 + <componente-associar-documentos ng-documentos="entradaAlmoxarifado.documentos" ng-edit="edit" ng-uploader="uploader" ng-workspace="$parent.workspace" form="documentosForm"
  5 + ng-obrigatorio="true"></componente-associar-documentos>
  6 + </fieldset>
  7 + </div> <!-- /.page-content -->
  8 +</ng-form>
0 \ No newline at end of file 9 \ No newline at end of file
cit-almoxarifado-web/src/main/webapp/html/entradaAlmoxarifado/entradaAlmoxarifadoPg4.html 0 → 100644
@@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
  1 +<ng-form name="observacoesForm" novalidate autocomplete="off">
  2 + <div class="page-content">
  3 + <fieldset>
  4 + <legend>
  5 + <translate>LABEL.OBSERVACOES</translate>
  6 + </legend>
  7 +
  8 + <componente-observacao ng-observacoes="entradaAlmoxarifado.observacoes" ng-hide="false" ng-edit="edit"></componente-observacao>
  9 +
  10 + </fieldset>
  11 + </div> <!-- /.page-content -->
  12 +</ng-form>
0 \ No newline at end of file 13 \ No newline at end of file