public void EditarRascunhoInventarioAmbiente(RascunhoInventarioAmbienteModelo rascunhoInventarioAmbienteModelo, DB_LaborSafetyEntities entities, DbContextTransaction transaction)
        {
            RASCUNHO_INVENTARIO_AMBIENTE rascunhoInventarioAmbienteExistente = entities.RASCUNHO_INVENTARIO_AMBIENTE.Where(invAtv => invAtv.CodRascunhoInventarioAmbiente == rascunhoInventarioAmbienteModelo.CodRascunhoInventarioAmbiente).FirstOrDefault();

            if (rascunhoInventarioAmbienteExistente == null)
            {
                throw new KeyNotFoundException();
            }

            else
            {
                try
                {
                    if (!rascunhoInventarioAmbienteModelo.novoInventario)
                    {
                        ExcluirRascunhoInventarioAmbiente(rascunhoInventarioAmbienteExistente.CodRascunhoInventarioAmbiente, entities);

                        Inserir(rascunhoInventarioAmbienteModelo, entities);

                        //transaction.Commit();
                    }

                    else
                    {
                        ExcluirRascunhoInventarioAmbiente(rascunhoInventarioAmbienteExistente.CodRascunhoInventarioAmbiente, entities);
                    }
                }
                catch (Exception)
                {
                    transaction.Rollback();
                    throw;
                }
            }
        }
 public void InserirRascunhoInventarioAmbiente(RascunhoInventarioAmbienteModelo rascunhoInventarioAmbienteModelo)
 {
     using (var entities = databaseEntities.GetDB_LaborSafetyEntities())
     {
         using (var transaction = entities.Database.BeginTransaction())
         {
             try
             {
                 this.Inserir(rascunhoInventarioAmbienteModelo, entities);
                 transaction.Commit();
             }
             catch (Exception)
             {
                 transaction.Rollback();
                 throw;
             }
         }
     }
 }
 public IHttpActionResult Inserir([FromBody] RascunhoInventarioAmbienteModelo rascunhInventarioAmbienteModelo)
 {
     try
     {
         var resultado = this.rascunhoInventarioAmbienteNegocio.InserirRascunhoInventarioAmbiente(rascunhInventarioAmbienteModelo);
         return(Ok(GeradorResponse.GenerateSuccessResponse((int)HttpStatusCode.OK,
                                                           $"Inserção de rascunho de inventário de ambiente ocorrida com sucesso", resultado)));
     }
     catch (InvalidOperationException exception)
     {
         throw new Exception(GeradorResponse.GenerateErrorResponseString((int)HttpStatusCode.BadRequest,
                                                                         "Rascunho de inventário de ambiente não encontrado.", exception), exception);
     }
     catch (Exception exception)
     {
         throw new Exception(GeradorResponse.GenerateErrorResponseString((int)HttpStatusCode.BadRequest,
                                                                         "Erro ao inserir rascunho de inventário de ambiente", exception), exception);
     }
 }
        // insert inventario ambiente
        public RASCUNHO_INVENTARIO_AMBIENTE Inserir(RascunhoInventarioAmbienteModelo rascunhoInventarioAmbienteModelo, DB_LaborSafetyEntities entities)
        {
            List <NrRascunhoInventarioAmbienteModelo>    nrs    = rascunhoInventarioAmbienteModelo.NR_RASCUNHO_INVENTARIO_AMBIENTE;
            List <RiscoRascunhoInventarioAmbienteModelo> riscos = rascunhoInventarioAmbienteModelo.RISCO_RASCUNHO_INVENTARIO_AMBIENTE;
            List <LocalInstalacaoModelo> locais = rascunhoInventarioAmbienteModelo.LOCAL_INSTALACAO_MODELO;

            entities.Configuration.AutoDetectChangesEnabled = false;

            try
            {
                var inventario = new RASCUNHO_INVENTARIO_AMBIENTE()
                {
                    Codigo             = $"R_INV_AMB - {rascunhoInventarioAmbienteModelo.CodRascunhoInventarioAmbiente} - {rascunhoInventarioAmbienteModelo.RiscoGeral}",
                    CodAmbiente        = rascunhoInventarioAmbienteModelo.CodAmbiente,
                    Descricao          = rascunhoInventarioAmbienteModelo.Descricao,
                    ObservacaoGeral    = rascunhoInventarioAmbienteModelo.ObservacaoGeral,
                    RiscoGeral         = rascunhoInventarioAmbienteModelo.RiscoGeral,
                    CodLocalInstalacao = rascunhoInventarioAmbienteModelo.CodLocalInstalacao
                };

                entities.RASCUNHO_INVENTARIO_AMBIENTE.Add(inventario);
                entities.SaveChanges();

                long idInv = inventario.CodRascunhoInventarioAmbiente;

                if (nrs != null)
                {
                    foreach (var nr in nrs)
                    {
                        entities.NR_RASCUNHO_INVENTARIO_AMBIENTE.Add(new NR_RASCUNHO_INVENTARIO_AMBIENTE()
                        {
                            CodRascunhoInventarioAmbiente = idInv,
                            CodNR = nr.CodNR
                        });
                    }

                    entities.SaveChanges();
                }

                if (riscos != null)
                {
                    foreach (var risco in riscos)
                    {
                        var novoRisco = new RISCO_RASCUNHO_INVENTARIO_AMBIENTE()
                        {
                            CodRascunhoInventarioAmbiente = idInv,
                            CodRisco                = risco.CodRiscoAmbiente,
                            CodSeveridade           = risco.CodSeveridade,
                            CodProbabilidade        = risco.CodProbabilidade,
                            FonteGeradora           = risco.FonteGeradora,
                            ProcedimentosAplicaveis = risco.ProcedimentosAplicaveis,
                            ContraMedidas           = risco.ContraMedidas
                        };
                        entities.RISCO_RASCUNHO_INVENTARIO_AMBIENTE.Add(novoRisco);
                        entities.SaveChanges();
                        if (risco.EPIRiscoRascunhoInventarioAmbiente.Count >= 0)
                        {
                            foreach (var epi in risco.EPIRiscoRascunhoInventarioAmbiente)
                            {
                                entities.EPI_RISCO_RASCUNHO_INVENTARIO_AMBIENTE.Add(new EPI_RISCO_RASCUNHO_INVENTARIO_AMBIENTE()
                                {
                                    CodRiscoRascunhoInventarioAmbiente = novoRisco.CodRiscoRascunhoInventarioAmbiente,
                                    CodEPI = epi.CodEPI
                                });
                            }
                        }
                    }

                    entities.ChangeTracker.DetectChanges();
                    entities.SaveChanges();

                    entities.Configuration.AutoDetectChangesEnabled = true;
                }
                return(inventario);
            }

            catch (Exception exception)
            {
                throw exception;
            }
        }
        public RascunhoInventarioAmbienteModelo MapeamentoRascunhoInventarioAmbiente(RASCUNHO_INVENTARIO_AMBIENTE inventario, List <LOCAL_INSTALACAO> locais)
        {
            RascunhoInventarioAmbienteModelo inventarioAmb = new RascunhoInventarioAmbienteModelo()
            {
                CodRascunhoInventarioAmbiente = inventario.CodRascunhoInventarioAmbiente,
                Codigo             = inventario.Codigo,
                CodAmbiente        = inventario.CodAmbiente,
                Descricao          = inventario.Descricao,
                ObservacaoGeral    = inventario.ObservacaoGeral,
                RiscoGeral         = inventario.RiscoGeral,
                CodLocalInstalacao = inventario.CodLocalInstalacao
            };

            inventarioAmb.NR_RASCUNHO_INVENTARIO_AMBIENTE    = new List <NrRascunhoInventarioAmbienteModelo>();
            inventarioAmb.RISCO_RASCUNHO_INVENTARIO_AMBIENTE = new List <RiscoRascunhoInventarioAmbienteModelo>();
            inventarioAmb.LOCAL_INSTALACAO_MODELO            = new List <LocalInstalacaoModelo>();

            Mapper.Map(inventario.NR_RASCUNHO_INVENTARIO_AMBIENTE, inventarioAmb.NR_RASCUNHO_INVENTARIO_AMBIENTE);
            Mapper.Map(inventario.RISCO_RASCUNHO_INVENTARIO_AMBIENTE, inventarioAmb.RISCO_RASCUNHO_INVENTARIO_AMBIENTE);

            List <RiscoRascunhoInventarioAmbienteModelo> listaRisco = new List <RiscoRascunhoInventarioAmbienteModelo>();

            foreach (var itemRisco in inventario.RISCO_RASCUNHO_INVENTARIO_AMBIENTE)
            {
                RiscoRascunhoInventarioAmbienteModelo risco = new RiscoRascunhoInventarioAmbienteModelo();
                risco.Ativo = true;
                risco.CodRascunhoInventarioAmbiente = itemRisco.CodRascunhoInventarioAmbiente;
                risco.CodProbabilidade = itemRisco.CodProbabilidade;
                risco.CodRiscoAmbiente = itemRisco.CodRisco;
                risco.CodRascunhoRiscoInventarioAmbiente = itemRisco.CodRiscoRascunhoInventarioAmbiente;
                risco.CodSeveridade           = itemRisco.CodSeveridade;
                risco.ContraMedidas           = itemRisco.ContraMedidas;
                risco.FonteGeradora           = itemRisco.FonteGeradora;
                risco.ProcedimentosAplicaveis = itemRisco.ProcedimentosAplicaveis;

                risco.EPIRiscoRascunhoInventarioAmbiente = new List <EPIRiscoRascunhoInventarioAmbienteModelo>();

                var listaEPI = itemRisco.EPI_RISCO_RASCUNHO_INVENTARIO_AMBIENTE
                               .Where(a => a.CodRiscoRascunhoInventarioAmbiente == itemRisco.CodRiscoRascunhoInventarioAmbiente).ToList();

                Mapper.Map(listaEPI, risco.EPIRiscoRascunhoInventarioAmbiente);

                listaRisco.Add(risco);
            }

            inventarioAmb.RISCO_RASCUNHO_INVENTARIO_AMBIENTE = listaRisco;

            if (locais != null)
            {
                foreach (var itemLi in locais)
                {
                    LocalInstalacaoModelo li = new LocalInstalacaoModelo();
                    li.CodLocalInstalacao    = itemLi.CodLocalInstalacao;
                    li.CodInventarioAmbiente = itemLi.CodInventarioAmbiente;
                    li.CodPeso           = itemLi.CodPeso;
                    li.CodPerfilCatalogo = itemLi.CodPerfilCatalogo;
                    li.N1        = itemLi.N1;
                    li.N2        = itemLi.N2;
                    li.N3        = itemLi.N3;
                    li.N4        = itemLi.N4;
                    li.N5        = itemLi.N5;
                    li.N6        = itemLi.N6;
                    li.Nome      = itemLi.Nome;
                    li.Descricao = itemLi.Descricao;

                    inventarioAmb.LOCAL_INSTALACAO_MODELO.Add(li);
                }
            }

            return(inventarioAmb);
        }
        public Retorno EditarRascunhoInventarioAmbiente(RascunhoInventarioAmbienteModelo rascunhoInventarioAmbienteModelo)
        {
            Retorno retornoInsercao = new Retorno();

            retornoInsercao.localModelo = new List <string>();

            validadorRascunhoInventarioAmbiente.ValidaEdicao(rascunhoInventarioAmbienteModelo);

            List <LocalInstalacaoModelo> locaisInstalacaoOrigem = new List <LocalInstalacaoModelo>();

            locaisInstalacaoOrigem.AddRange(rascunhoInventarioAmbienteModelo.LOCAL_INSTALACAO_MODELO);

            List <LocalInstalacaoModelo> locaisInstalacaoAAssociar = new List <LocalInstalacaoModelo>();

            long codInventarioAmbiente = (long)rascunhoInventarioAmbienteModelo.CodRascunhoInventarioAmbiente;

            using (var entities = new DB_APRPTEntities())
            {
                using (var transaction = entities.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
                {
                    try
                    {
                        if (!rascunhoInventarioAmbienteModelo.novoInventario)
                        {
                            List <string> locaisAInserir = new List <string>();
                            foreach (var itemLi in rascunhoInventarioAmbienteModelo.LOCAL_INSTALACAO_MODELO)
                            {
                                locaisAInserir.Add(itemLi.CodLocalInstalacao.ToString());
                            }
                            rascunhoInventarioAmbienteModelo.CodLocalInstalacao = string.Join(",", locaisAInserir);
                        }

                        rascunhoInventarioAmbientePersistencia.EditarRascunhoInventarioAmbiente(rascunhoInventarioAmbienteModelo, entities, transaction);

                        if (rascunhoInventarioAmbienteModelo.novoInventario)
                        {
                            InventarioAmbienteModelo inventarioAmbienteModelo = new InventarioAmbienteModelo();

                            inventarioAmbienteModelo.CodInventarioAmbiente = (long)rascunhoInventarioAmbienteModelo.CodRascunhoInventarioAmbiente;
                            inventarioAmbienteModelo.Codigo          = rascunhoInventarioAmbienteModelo.Codigo;
                            inventarioAmbienteModelo.CodAmbiente     = (long)rascunhoInventarioAmbienteModelo.CodAmbiente;
                            inventarioAmbienteModelo.Descricao       = rascunhoInventarioAmbienteModelo.Descricao;
                            inventarioAmbienteModelo.ObservacaoGeral = rascunhoInventarioAmbienteModelo.ObservacaoGeral;
                            inventarioAmbienteModelo.RiscoGeral      = (int)rascunhoInventarioAmbienteModelo.RiscoGeral;
                            inventarioAmbienteModelo.DataAtualizacao = DateTime.Now;
                            inventarioAmbienteModelo.Ativo           = true;

                            List <RiscoInventarioAmbienteModelo> listaRisco = new List <RiscoInventarioAmbienteModelo>();
                            foreach (var itemRiscoRascunho in rascunhoInventarioAmbienteModelo.RISCO_RASCUNHO_INVENTARIO_AMBIENTE)
                            {
                                RiscoInventarioAmbienteModelo risco = new RiscoInventarioAmbienteModelo();

                                risco.Ativo = true;
                                risco.CodInventarioAmbiente      = itemRiscoRascunho.CodRascunhoInventarioAmbiente;
                                risco.CodRiscoInventarioAmbiente = itemRiscoRascunho.CodRascunhoRiscoInventarioAmbiente;
                                risco.CodRiscoAmbiente           = itemRiscoRascunho.CodRiscoAmbiente;
                                risco.CodSeveridade           = itemRiscoRascunho.CodSeveridade;
                                risco.CodProbabilidade        = itemRiscoRascunho.CodProbabilidade;
                                risco.FonteGeradora           = itemRiscoRascunho.FonteGeradora;
                                risco.ProcedimentosAplicaveis = itemRiscoRascunho.ProcedimentosAplicaveis;
                                risco.ContraMedidas           = itemRiscoRascunho.ContraMedidas;

                                risco.EPIRiscoInventarioAmbienteModelo = new List <EPIRiscoInventarioAmbienteModelo>();

                                var listaEPI = itemRiscoRascunho.EPIRiscoRascunhoInventarioAmbiente
                                               .Where(a => a.CodRiscoRascunhoInventarioAmbiente == itemRiscoRascunho.CodRiscoAmbiente).ToList();

                                foreach (var itemListaEpi in listaEPI)
                                {
                                    EPIRiscoInventarioAmbienteModelo epi = new EPIRiscoInventarioAmbienteModelo();

                                    epi.CodEPI = itemListaEpi.CodEPI;
                                    epi.CodEpiRiscoInventarioAmbiente = itemListaEpi.CodEpiRiscoRascunhoInventarioAmbiente;
                                    epi.CodRiscoInventarioAmbiente    = itemListaEpi.CodRiscoRascunhoInventarioAmbiente;
                                    risco.EPIRiscoInventarioAmbienteModelo.Add(epi);
                                }

                                listaRisco.Add(risco);
                            }
                            inventarioAmbienteModelo.RISCO_INVENTARIO_AMBIENTE = listaRisco;


                            List <NrInventarioAmbienteModelo> listaNR = new List <NrInventarioAmbienteModelo>();
                            foreach (var itemNrRascunho in rascunhoInventarioAmbienteModelo.NR_RASCUNHO_INVENTARIO_AMBIENTE)
                            {
                                NrInventarioAmbienteModelo nr = new NrInventarioAmbienteModelo();

                                nr.CodNRInventarioAmbiente = itemNrRascunho.CodNrRascunhoInventarioAmbiente;
                                nr.CodNR = itemNrRascunho.CodNR;
                                nr.CodInventarioAmbiente = itemNrRascunho.CodRascunhoInventarioAmbiente;
                                nr.Ativo = true;

                                listaNR.Add(nr);
                            }
                            inventarioAmbienteModelo.NR_INVENTARIO_AMBIENTE = listaNR;

                            //Limpa os locais que vieram
                            rascunhoInventarioAmbienteModelo.LOCAL_INSTALACAO_MODELO.Clear();

                            //List<LOCAL_INSTALACAO> locais = localInstalacaoPersistencia.ListarTodosLIs(entities);

                            foreach (var local in locaisInstalacaoOrigem)
                            {
                                var codLocal = local.CodLocalInstalacao;

                                var localEnviado = localInstalacaoPersistencia.ListarLocalInstalacaoPorId(codLocal, entities);

                                //Filtra somente os locais do pai
                                List <LOCAL_INSTALACAO> locaisEFilhos = this.BuscaLocaisEFilhos(entities, localEnviado);

                                //Busca todos os filhos que possuam o codInventarioAmbiente
                                //List<LOCAL_INSTALACAO> locaisFilhos = rascunhoInventarioAmbientePersistencia.BuscaFilhosPorNivelDoInventario
                                //    (local.CodLocalInstalacao, codInventarioAmbiente, entities);

                                foreach (var localAAssociar in locaisEFilhos)
                                {
                                    LocalInstalacaoModelo localModelo = new LocalInstalacaoModelo();
                                    localModelo.CodInventarioAmbiente = localAAssociar.CodInventarioAmbiente;
                                    localModelo.CodLocalInstalacao    = localAAssociar.CodLocalInstalacao;
                                    localModelo.CodPerfilCatalogo     = localAAssociar.CodPerfilCatalogo;
                                    localModelo.CodPeso   = localAAssociar.CodPeso;
                                    localModelo.Descricao = localAAssociar.Descricao;
                                    localModelo.N1        = localAAssociar.N1;
                                    localModelo.N2        = localAAssociar.N2;
                                    localModelo.N3        = localAAssociar.N3;
                                    localModelo.N4        = localAAssociar.N4;
                                    localModelo.N5        = localAAssociar.N5;
                                    localModelo.N6        = localAAssociar.N6;
                                    localModelo.Nome      = localAAssociar.Nome;

                                    locaisInstalacaoAAssociar.Add(localModelo);
                                }
                            }
                            inventarioAmbienteModelo.LOCAL_INSTALACAO_MODELO = new List <LocalInstalacaoModelo>();
                            inventarioAmbienteModelo.LOCAL_INSTALACAO_MODELO.AddRange(locaisInstalacaoAAssociar);

                            foreach (var item in inventarioAmbienteModelo.LOCAL_INSTALACAO_MODELO)
                            {
                                var li = localInstalacaoPersistencia.ListarLocalInstalacaoPorId(item.CodLocalInstalacao);

                                if (li.CodInventarioAmbiente != (long)Constantes.InventarioAmbiente.SEM_INVENTARIO)
                                {
                                    retornoInsercao.status = false;

                                    retornoInsercao.localModelo.Add(li.Nome);

                                    throw new Exception($"O local de instalação {li.Nome} já possui um inventário de ambiente associado.");
                                }
                            }

                            var resultadoInsercao = inventariosAmbiente.Inserir(inventarioAmbienteModelo, entities);
                            inventarioAmbienteModelo.EightIDUsuarioModificador = rascunhoInventarioAmbienteModelo.EightIDUsuarioModificador;
                            logInventarioAmbientePersistencia.Inserir(inventarioAmbienteModelo, resultadoInsercao.CodInventarioAmbiente, entities);
                        }

                        entities.SaveChanges();
                        transaction.Commit();
                        retornoInsercao.status = true;
                        return(retornoInsercao);
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                        throw ex;
                    }
                }
            }
        }
        public RetornoInsercao InserirRascunhoInventarioAmbiente(RascunhoInventarioAmbienteModelo rascunhoInventarioAmbienteModelo)
        {
            RetornoInsercao retornoInsercao = new RetornoInsercao();

            retornoInsercao.localModelo = new List <string>();

            validadorRascunhoInventarioAmbiente.ValidaInsercao(rascunhoInventarioAmbienteModelo);

            List <LocalInstalacaoModelo> locaisInstalacao = rascunhoInventarioAmbienteModelo.LOCAL_INSTALACAO_MODELO;

            using (var entities = new DB_APRPTEntities())
            {
                using (var transaction = entities.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
                {
                    try
                    {
                        //Limpa os locais do inventário de modelo
                        rascunhoInventarioAmbienteModelo.LOCAL_INSTALACAO_MODELO = null;

                        List <LOCAL_INSTALACAO> locaisComInventarios = new List <LOCAL_INSTALACAO>();

                        //List<LOCAL_INSTALACAO> locais = localInstalacaoPersistencia.ListarTodosLIs(entities);

                        List <string> locaisAInserir = new List <string>();
                        for (int i = 0; i < locaisInstalacao.Count; i++)
                        {
                            var codLocal = locaisInstalacao[i].CodLocalInstalacao;

                            var localEnviado = localInstalacaoPersistencia.ListarLocalInstalacaoPorId(codLocal, entities);

                            //Filtra somente os locais do pai
                            List <LOCAL_INSTALACAO> locaisEFilhos = this.BuscaLocaisEFilhos(entities, localEnviado);

                            //List<LOCAL_INSTALACAO> locaisFilhos =
                            //    rascunhoInventarioAmbientePersistencia.BuscaFilhosPorNivelExcetoInventario(codLocal, entities);

                            foreach (var local in locaisEFilhos)
                            {
                                locaisAInserir.Add(local.CodLocalInstalacao.ToString());
                            }
                        }

                        var locaisAInserirDistinct = locaisAInserir.Distinct();

                        rascunhoInventarioAmbienteModelo.CodLocalInstalacao = string.Join(",", locaisAInserirDistinct);

                        RASCUNHO_INVENTARIO_AMBIENTE inventario = rascunhoInventarioAmbientePersistencia.Inserir(rascunhoInventarioAmbienteModelo, entities);

                        entities.SaveChanges();
                        transaction.Commit();

                        retornoInsercao.status = true;
                        return(retornoInsercao);
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                        throw ex;
                    }
                }
            }
        }