public ArmazenamentoCenario ArmazenamentoCenarioFind(int elementoId, int cenarioId)
        {
            string codigo = _unitOfw.NoRepository.Get(y => y.Id == elementoId).FirstOrDefault()?.Codigo;

            if (!string.IsNullOrEmpty(codigo))
            {
                ArmazenamentoCenario armazenamentoCenario = _unitOfw.ArmazenamentoCenarioRepository.Get(y => y.NoId == elementoId && y.CenarioId == cenarioId).FirstOrDefault();

                if (armazenamentoCenario == null)
                {
                    TipoArmazenamento tipoArmazenamento = _unitOfw.TipoArmazenamentoRepository.Get(y => y.Nome == Util.TipoArmazenamentoEnum.Agrupado.ToString()).FirstOrDefault();

                    _unitOfw.ArmazenamentoCenarioRepository.Insert(new ArmazenamentoCenario
                    {
                        NoId                   = elementoId,
                        CenarioId              = cenarioId,
                        TipoArmazenamentoId    = tipoArmazenamento.Id,
                        IncluirCalculoImpostos = false,
                        Capex                  = 0,
                        ComFaixa               = false
                    });
                }
                return(armazenamentoCenario);
            }
            return(null);
        }
        public bool SaveArmazenamentoCenario(int elementoId, int cenarioId, bool incluircalculoImposto, int tipoArmazenamentoId, decimal capex, bool comFaixa)
        {
            using (var context = new VCMContext())
            {
                using (var transaction = context.Database.BeginTransaction())
                {
                    try
                    {
                        //pr_VCM_ArmazenamentoCenarioUpdate
                        var codigo = _unitOfw.NoRepository.Get(y => y.Id == elementoId).FirstOrDefault()?.Codigo;

                        List <int> simbolos = new List <int>();
                        if (!incluircalculoImposto)
                        {
                            simbolos = _unitOfw.SimboloRepository.Get(y => y.Codigo == SimboloCodigo.PrecoCompraNF.ToString() ||
                                                                      y.Codigo == SimboloCodigo.PrecoVendaNF.ToString() ||
                                                                      y.Codigo == SimboloCodigo.ICMSPorctSubstEnt.ToString() ||
                                                                      y.Codigo == SimboloCodigo.ICMSPorctSubstSai.ToString() ||
                                                                      y.Codigo == SimboloCodigo.ValorBenefICMS.ToString()).Select(y => y.Id).ToList();
                        }
                        EntradaDelete(cenarioId, codigo, simbolos, context);
                        ArmazenamentoCenario armazenamentoCenario = _unitOfw.ArmazenamentoCenarioRepository.Get(y => y.NoId == elementoId && y.CenarioId == cenarioId).FirstOrDefault();

                        bool incluirCalculoImpostoOld = armazenamentoCenario.IncluirCalculoImpostos;

                        armazenamentoCenario.TipoArmazenamentoId    = tipoArmazenamentoId;
                        armazenamentoCenario.IncluirCalculoImpostos = incluircalculoImposto;
                        armazenamentoCenario.Capex    = capex;
                        armazenamentoCenario.ComFaixa = comFaixa;
                        _unitOfw.ArmazenamentoCenarioRepository.Update(armazenamentoCenario);

                        if (!incluirCalculoImpostoOld && incluircalculoImposto)
                        {
                            LerValoresSaidaEntradaBaseCalculoImposto(cenarioId, codigo, context);
                        }

                        if (comFaixa)
                        {
                            var faixacustoFixo = (from fcf in _unitOfw.FaixaCustoFixoRepository.Get(y => y.Id == cenarioId && y.Codigo != "F001")
                                                  join c in _unitOfw.CenarioRepository.Get() on fcf.TopologiaId equals c.TopologiaId
                                                  select new List <int>
                            {
                                fcf.Id
                            }).FirstOrDefault();

                            var toBeDelete = _unitOfw.NoCenarioFaixaCustoFixoRepository.Get(y => y.NoId == elementoId && y.CenarioId == cenarioId && faixacustoFixo.Contains(y.FaixaId)).ToList();
                            context.NoCenarioFaixaCustoFixo.RemoveRange(toBeDelete);

                            var simbolosId = _unitOfw.SimboloRepository.Get(v => (v.Codigo == "valorFaixaInfU" || v.Codigo == "valorFaixaSupU") ||
                                                                            (v.Codigo == "CfxoUA")).Select(s => s.Id).ToList();

                            List <Entrada> entradasTobeDelete = _unitOfw.EntradaRepository.Get(y => y.EntidadeCodigo1 == codigo && y.EntidadeCodigo3 != "F001" &&
                                                                                               simbolosId.Contains(y.SimboloId)).ToList();
                            context.Entrada.RemoveRange(entradasTobeDelete);
                        }
                        return(true);
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                    }
                }
            }

            return(true);
        }