public APRSAPResponse DT_ORDEM_LaborSafety_IW32_IW38_ProcessaOrdem(APRSAPModelo modelo) { APRSAPResponse result = new APRSAPResponse(); result.Itens = new List <APRItemSAPResponse>(); try { //Grava o que chegou na integração, em um arquivo texto this.GeraLogRecebimentoIntegracao(modelo, TipoIntegracao.Ordem); result = aprSapNegocio.ProcessaOrdem(modelo); } catch (Exception e) { APRItemSAPResponse itemResponse = new APRItemSAPResponse(); itemResponse.Status = Constantes.StatusResponseIntegracao.E.ToString(); itemResponse.Descricao = e.Message; result.Itens.Add(itemResponse); } return(result); }
public APRSAPResponse ProcessaOrdem(APRSAPModelo modelo) { APRSAPResponse response = new APRSAPResponse(); response.Itens = new List <APRItemSAPResponse>(); this.ValidaModelo(modelo); var statusApr = modelo.Itens.First().Status_Ordem; using (var entities = new DB_APRPTEntities()) { using (var transaction = entities.Database.BeginTransaction(System.Data.IsolationLevel.ReadCommitted)) { APRItemSAPResponse itemResponse = new APRItemSAPResponse(); itemResponse.Endereco_Rede = ""; APR apr = new APR(); try { if (statusApr == Enum.GetName(typeof(Constantes.StatusOrdem), Constantes.StatusOrdem.IMPR)) { AtualizaStatusApr(modelo.Itens.First().Numero_Ordem, (long)Constantes.StatusOrdem.IMPR, entities); } else { if (statusApr == Enum.GetName(typeof(Constantes.StatusOrdem), Constantes.StatusOrdem.ASAP)) { var aprBase = aprPersistencia.PesquisarPorOrdemManutencao(modelo.Itens.First().Numero_Ordem, entities); apr = aprBase; var aprBase64 = GerarAprSerializada(aprBase.NumeroSerie); itemResponse.Endereco_Rede = aprBase64; //EnviarDadosSAP(aprBase64, apr.OrdemManutencao); } else { //Verifica se já existe APR para ordem var aprExistente = aprPersistencia.PesquisarPorOrdemManutencaoExistentesEInexistentes(modelo.Itens.First().Numero_Ordem, entities); if (aprExistente == null) { apr = aprPersistencia.InserirSomenteComNumeroSeriaViaSAP(entities); apr.OrdemManutencao = modelo.Itens.First().Numero_Ordem; apr.Descricao = modelo.Itens.First().Descricao_Ordem; apr.LocalInstalacao = modelo.Itens.First().Local_Instalacao; } else { apr = aprExistente; apr.CodStatusAPR = (long)Constantes.StatusAPR.Criado; apr.LocalInstalacao = modelo.Itens.First().Local_Instalacao; apr.Descricao = modelo.Itens.First().Descricao_Ordem; this.DesativarOperacoesApr(apr, entities); } var maiorRiscoGeral = int.MinValue; foreach (var item in modelo.Itens) { OPERACAO_APR operacao = new OPERACAO_APR(); //Realiza as validações dos valores dos itens DadosOperacao dadosOperacao = this.VerificaValoresNaBase(item, entities); //Adiciona a operação na APR this.AdicionaOperacaoAPR(apr, item, dadosOperacao, entities); //Calcula o valor do risco geral da APR // Lógica para obtenção do maior risco das operações calculadas var riscoCalculado = this.CalculaRiscoGeral(dadosOperacao, entities); if (maiorRiscoGeral < riscoCalculado) { maiorRiscoGeral = riscoCalculado; } } itemResponse.VRG = maiorRiscoGeral.ToString(); apr.RiscoGeral = maiorRiscoGeral; apr.DataInicio = DateTime.Now; } } entities.SaveChanges(); transaction.Commit(); //if (statusApr == Enum.GetName(typeof(Constantes.StatusOrdem), Constantes.StatusOrdem.ASAP_CALC)) if (statusApr.ToUpper() == Constantes.StatusAPRIntegracaoOrdem.EnviarRecalcular.ToUpper()) { var aprBase64 = GerarAprSerializada(apr.NumeroSerie); itemResponse.Endereco_Rede = aprBase64; //EnviarDadosSAP(aprBase64, apr.OrdemManutencao); } itemResponse.Status = Constantes.StatusResponseIntegracao.S.ToString(); } catch (Exception ex) { transaction.Rollback(); itemResponse.Status = Constantes.StatusResponseIntegracao.E.ToString(); itemResponse.Descricao = ex.Message; throw ex; } finally { itemResponse.Numero_Serie = $"{apr.NumeroSerie}"; response.Itens.Add(itemResponse); } } } return(response); }