public ActionResult Cadastrar(CadastrarInfracaoViewModel viewModel)
        {
            if (!ModelState.IsValid)
            {
                return(this.ModelErrors());
            }

            using (DbApplication db = new DbApplication())
            {
                Infracao infracaoBanco = db
                                         .Infracoes
                                         .ComDescricao(viewModel.Descricao)
                                         .SingleOrDefault();

                if (infracaoBanco != null)
                {
                    return(this.ErrorMessage("Já existe uma infração cadastrada com esse id."));
                }

                Infracao infracao = new Infracao();

                infracao.Descricao    = viewModel.Descricao;
                infracao.Velocidade   = viewModel.Velocidade;
                infracao.IdVeiculo    = viewModel.IdVeiculo;
                infracao.IdLogradouro = viewModel.IdLogradouro;
                infracao.IdAgente     = viewModel.IdAgente;

                db.RegistrarNovo(infracao);
                db.Salvar();

                return(this.Message("Infração registrada com sucesso."));
            }
        }
Example #2
0
        public bool Salvar(Infracao entidade)
        {
            try
            {
                if (_validar.Salvar(entidade))
                {
                    if (entidade.Id < 1)
                    {
                        entidade.Id = _da.ObterID(entidade.FiscalizacaoId);
                    }

                    GerenciadorTransacao.ObterIDAtual();

                    using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia())
                    {
                        bancoDeDados.IniciarTransacao();

                        _da.Salvar(entidade, bancoDeDados);

                        bancoDeDados.Commit();
                    }
                }
            }
            catch (Exception e)
            {
                Validacao.AddErro(e);
            }

            return(Validacao.EhValido);
        }
Example #3
0
        public async Task <Infracao> Adiciona(Infracao infracao, System.IO.Stream photoStream)
        {
            if (photoStream != null)
            {
                // Envia a foto para o servidor
                var task = new FirebaseStorage(
                    "prismauth.appspot.com",
                    new FirebaseStorageOptions()
                {
                    AuthTokenAsyncFactory = () => Task.FromResult(_autenticacaoService.Token)
                }
                    )
                           .Child("fotografias")
                           .Child(Guid.NewGuid().ToString("N") + ".png")
                           .PutAsync(photoStream);

                infracao.Foto = await task;
            }

            // Define o usuário da infração para ser o user id
            // do usuário logado
            infracao.Usuario = _autenticacaoService.UserId;

            // Grava a infração no Banco de Dados
            return((await Client.Child(CHILD_NAME).PostAsync(infracao)).Object);
        }
Example #4
0
        public async Task Remove(CommandContext ctx, [Description("Membro (ID/Menção)")] DiscordMember membro)
        {
            var infras = new Infracao().FindAll(x => x.IdInfrator == membro.Id);

            if (infras.Count == 0)
            {
                await ctx.RespondAsync(embed : EmbedBase.OutputEmbed($"O Membro {membro.Mention} possui uma ficha limpa!"));
            }
            else
            {
                var briefing = await ctx.RespondAsync(embed : await EmbedExtended.MemberBriefing(infras));

                var message = await ctx.RespondAsync(embed : EmbedBase.InputEmbed("# da infração que será apagada"));

                var input = await ctx.Message.GetNextMessageAsync();

                var num = int.Parse(input.Result.Content.Split(" ")[0]);
                if (infras.Any(x => x.Id == num))
                {
                    var infra = infras.Find(x => x.Id == num);
                    new Infracao().Delete(infra);
                    await briefing.ModifyAsync(embed : EmbedBase.OutputEmbed($"Infração Apagada com sucesso.\n Dados :"));

                    await message.ModifyAsync(embed : EmbedExtended.AsyncInfracaoEmbed(infra));
                }
                else
                {
                    await briefing.DeleteAsync();

                    await message.ModifyAsync(embed : EmbedBase.OutputEmbed($"Numero inválido, Comando cancelado."));
                }
            }
        }
Example #5
0
        public async Task soltar(CommandContext ctx, [Description("O membro que será solto")] DiscordMember member)
        {
            var infras = new Infracao().FindAll(x => x.IdInfrator == member.Id);

            if (infras.Count != 0)
            {
                var prisoes = new List <PrisaoModel>();
                infras.ForEach(x => prisoes.Add(new Prisao().Find(y => y.InfraId == x.Id)));
                var active = prisoes.Find(x => x.Elapsed == false);
                if (active == null)
                {
                    await ctx.RespondAsync(embed : EmbedBase.OutputEmbed("Esse membro não está preso."));
                }
                else
                {
                    await Soltar(active);

                    active.Elapsed = true;
                    new Prisao().Update(x => x.Id == active.Id, active);
                    await ctx.RespondAsync(embed : EmbedBase.OutputEmbed("Membro solto da prisão com sucesso!"));
                }
            }
            else
            {
                await ctx.RespondAsync(embed : EmbedBase.OutputEmbed("Esse membro possui uma ficha limpa."));
            }
        }
Example #6
0
        public bool Salvar(Infracao entidade)
        {
            try
            {
                if (_validar.Salvar(entidade))
                {
                    if (entidade.Id < 1)
                    {
                        entidade.Id = _da.ObterID(entidade.FiscalizacaoId);
                    }

                    GerenciadorTransacao.ObterIDAtual();

                    using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia())
                    {
                        bancoDeDados.IniciarTransacao();

                        #region Arquivo

                        if (entidade.Arquivo != null)
                        {
                            if (!string.IsNullOrWhiteSpace(entidade.Arquivo.Nome))
                            {
                                if (entidade.Arquivo.Id != null && entidade.Arquivo.Id == 0)
                                {
                                    ArquivoBus _busArquivo = new ArquivoBus(eExecutorTipo.Interno);
                                    entidade.Arquivo = _busArquivo.Copiar(entidade.Arquivo);
                                }

                                if (entidade.Arquivo.Id == 0)
                                {
                                    ArquivoDa _arquivoDa = new ArquivoDa();
                                    _arquivoDa.Salvar(entidade.Arquivo, User.FuncionarioId, User.Name, User.Login, (int)eExecutorTipo.Interno, User.FuncionarioTid, bancoDeDados);
                                }
                            }
                            else
                            {
                                entidade.Arquivo.Id = null;
                            }
                        }

                        #endregion

                        _da.Salvar(entidade, bancoDeDados);

                        bancoDeDados.Commit();
                    }
                }
            }
            catch (Exception e)
            {
                Validacao.AddErro(e);
            }

            return(Validacao.EhValido);
        }
Example #7
0
        private async Task MembroEntra(GuildMemberAddEventArgs e)
        {
            var infra = new Infracao().FindAll(x => x.IdInfrator == e.Member.Id).Where(x => x.Preso).ToList();

            if (infra.Any(x => new Logic.Prisao().Find(y => y.InfraId == x.Id && y.Elapsed == false) != null))
            {
                DiscordRole r = e.Guild.GetRole(Roles.PresoID);
                await e.Member.GrantRoleAsync(r, "Tentou Evadir Prisão");

                await e.Guild.GetChannel(Channels.StaffID).SendMessageAsync("@here", false, EmbedBase.OutputEmbed($"Atenção > O Membro {e.Member.Mention} tentou evadir uma prisão ativa!"));
            }
        }
        public bool Finalizar(int id)
        {
            List <string>     lstCadastroVazio = _da.TemCadastroVazio(id);
            ProjetoGeografico projetoGeo       = new ProjetoGeografico();
            Infracao          infracao         = new Infracao();
            LocalInfracao     localInfracao    = new LocalInfracao();

            localInfracao = _localInfracaoDa.Obter(id);

            FuncionarioBus funcBus     = new FuncionarioBus();
            List <Setor>   setoresFunc = funcBus.ObterSetoresFuncionario();

            if (!setoresFunc.Any(x => x.Id == localInfracao.SetorId))
            {
                Validacao.Add(Mensagem.Fiscalizacao.SetorNaoPertenceFuncionario);
            }

            if (lstCadastroVazio.Count > 0)
            {
                Validacao.Add(Mensagem.Fiscalizacao.CadastroObrigatorio(Mensagem.Concatenar(lstCadastroVazio)));
                return(Validacao.EhValido);
            }

            projetoGeo = _projetoGeoDa.ObterProjetoGeograficoPorFiscalizacao(id);
            projetoGeo.FiscalizacaoEasting  = localInfracao.LonEastingToDecimal;
            projetoGeo.FiscalizacaoNorthing = localInfracao.LatNorthingToDecimal;

            if (!_projetoGeoDa.VerificarProjetoGeograficoProcessado(projetoGeo.Id))
            {
                Validacao.Add(Mensagem.Fiscalizacao.ProjetoGeoProcessado);
            }
            else
            {
                if (!projetoGeo.FiscalizacaoEstaDentroAreaAbrangencia)
                {
                    Validacao.Add(Mensagem.ProjetoGeografico.EmpreendimentoForaAbrangencia);
                }
            }

            infracao = _infracaoDa.Obter(id);

            if (_infracaoDa.ConfigAlterada(infracao.ConfiguracaoId, infracao.ConfiguracaoTid))
            {
                Validacao.Add(Mensagem.InfracaoMsg.ConfigAlteradaConcluir);
            }

            if (_infracaoDa.PerguntaRespostaAlterada(infracao))
            {
                Validacao.Add(Mensagem.InfracaoMsg.ConfigAlteradaConcluir);
            }

            return(Validacao.EhValido);
        }
        private bool PenalidadeSelecionada(Infracao infracao)
        {
            bool penalidadeSelecionada = true;

            if (infracao.PossuiAdvertencia != true &&
                infracao.PossuiApreensao != true &&
                infracao.PossuiInterdicaoEmbargo != true &&
                infracao.PossuiMulta != true &&
                infracao.IdsOutrasPenalidades.Count == 0)
            {
                penalidadeSelecionada = false;
            }

            return(penalidadeSelecionada);
        }
Example #10
0
        public async Task List(CommandContext ctx,
                               [Description("Membro (Menção/ID)")] DiscordMember membro)
        {
            var infracoes = new Infracao().FindAll(x => x.IdInfrator == membro.Id);

            if (infracoes.Count == 0)
            {
                await ctx.RespondAsync(embed : EmbedBase.OutputEmbed($"{membro.Mention} possui ficha limpa!"));
            }
            else
            {
                foreach (InfracaoModel infra in infracoes)
                {
                    await ctx.RespondAsync(embed : EmbedExtended.AsyncInfracaoEmbed(infra));
                }
            }
        }
Example #11
0
        public Infracao Salvar(Infracao infracao, BancoDeDados banco = null)
        {
            if (infracao == null)
            {
                throw new Exception("Infração do autuado é nulo.");
            }

            if (infracao.Id <= 0)
            {
                infracao = Criar(infracao, banco);
            }
            else
            {
                infracao = Editar(infracao, banco);
            }

            return(infracao);
        }
Example #12
0
        private void frm_historico_Load(object sender, EventArgs e)
        {
            Agendamento agenda   = new Agendamento();
            Infracao    infracao = new Infracao();
            //Infração
            var       dri = infracao.Infracoes();
            DataTable dti = new DataTable();

            dti.Load(infracao.Infracoes());
            dgv_infracao.DataSource = dti;
            infracao.Patient        = new Paciente();
            infracao.Nurse          = new Enfermeiro();
            int linhaI = dgv_infracao.Rows.Count;

            foreach (var item in infracao.Infracoes())
            {
                dgv_infracao.Rows.Add();
                dgv_infracao.Rows[linhaI].Cells[0].Value = infracao.Infringement;
                dgv_infracao.Rows[linhaI].Cells[1].Value = infracao.Patient.Cod;
                dgv_infracao.Rows[linhaI].Cells[2].Value = infracao.Nurse.Cod;
                dgv_infracao.Rows[linhaI].Cells[3].Value = infracao.Data;
                dgv_infracao.Rows[linhaI].Cells[4].Value = infracao.Nova;
            }
            //Agenda
            var       dra = agenda.Agendas();
            DataTable dta = new DataTable();

            dta.Load(agenda.Agendas());
            dgv_infracao.DataSource = dta;
            infracao.Patient        = new Paciente();
            agenda.Responsible      = new Responsavel();
            int linhaA = dgv_infracao.Rows.Count;

            foreach (var item in agenda.Agendas())
            {
                dgv_infracao.Rows.Add();
                dgv_infracao.Rows[linhaA].Cells[0].Value = agenda.Responsible.Cod;
                dgv_infracao.Rows[linhaA].Cells[1].Value = agenda.Dia;
                dgv_infracao.Rows[linhaA].Cells[2].Value = agenda.Novo;
            }
        }
        public ActionResult Remover(IdInfracaoViewModel viewModel)
        {
            if (!ModelState.IsValid)
            {
                return(this.ModelErrors());
            }

            using (DbApplication db = new DbApplication())
            {
                Infracao infracao = db
                                    .Infracoes
                                    .ComId(viewModel.idInfracao)
                                    .SingleOrDefault();
                if (infracao == null)
                {
                    return(this.ErrorMessage("Infração não encontrada."));
                }

                db.RegistrarRemovido(infracao);
                db.Salvar();

                return(this.Message("Infração removida com sucesso."));
            }
        }
Example #14
0
        public Infracao Obter(int fiscalizacaoId, bool isVerificarConfig = false, BancoDeDados banco = null)
        {
            Infracao entidadeAtual      = new Infracao();
            Infracao entidadeNovoConfig = new Infracao();

            try
            {
                entidadeAtual = _da.Obter(fiscalizacaoId, banco);

                entidadeAtual.ConfigAlterou = _da.ConfigAlterada(entidadeAtual.ConfiguracaoId, entidadeAtual.ConfiguracaoTid, banco);
                entidadeAtual.ConfigAlterou = _da.PerguntaRespostaAlterada(entidadeAtual.Id) || entidadeAtual.ConfigAlterou;


                if (isVerificarConfig)
                {
                    if (entidadeAtual.ConfigAlterou)
                    {
                        entidadeNovoConfig = _da.ObterConfig(entidadeAtual.ConfiguracaoId, banco);
                        Mergear(entidadeAtual, entidadeNovoConfig);
                    }
                }
                else
                {
                    if (entidadeAtual.ConfigAlterou)
                    {
                        entidadeAtual = _da.ObterHistorico(entidadeAtual.Id, banco);
                    }
                }
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }

            return(entidadeAtual);
        }
Example #15
0
        public Infracao ObterConfig(int configuracaoId, BancoDeDados banco = null)
        {
            Infracao infracao = new Infracao();

            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                #region Infração

                Comando comando = bancoDeDados.CriarComando(@"
					select t.id            ConfiguracaoId,
						   t.classificacao ClassificacaoId,
						   l.texto         ClassificacaoTexto,
						   t.tipo          TipoId,
						   cit.texto       TipoTexto,
						   t.item          ItemId,
						   cii.texto       ItemTexto,
						   t.tid           ConfiguracaoTid
					  from {0}cnf_fisc_infracao             t,
						   {0}cnf_fisc_infracao_tipo        cit,
						   {0}cnf_fisc_infracao_item        cii,
						   {0}lov_cnf_fisc_infracao_classif l
					 where t.tipo = cit.id(+)
					   and t.item = cii.id(+)
					   and t.classificacao = l.id(+)
					   and t.id = :configuracaoId"                    , EsquemaBanco);

                comando.AdicionarParametroEntrada("configuracaoId", configuracaoId, DbType.Int32);

                infracao = bancoDeDados.ObterEntity <Infracao>(comando);

                #endregion

                #region Campos

                comando = bancoDeDados.CriarComando(@"
					select tfic.campo CampoId,
						   cfic.texto Identificacao,
						   lt.texto   TipoTexto,
						   lt.id      Tipo,
						   lu.id      Unidade,
						   lu.texto   UnidadeTexto,
						   ''         Texto
					  from {0}cnf_fisc_infr_cnf_campo       tfic,
						   {0}lov_cnf_fisc_infracao_camp_tip lt,
						   {0}lov_cnf_fisc_infracao_camp_uni lu,
						   {0}cnf_fisc_infracao_campo        cfic
					 where tfic.campo = cfic.id
					   and cfic.tipo = lt.id(+)
					   and cfic.unidade = lu.id(+)
					   and tfic.configuracao = :configuracaoId"                    , EsquemaBanco);
                comando.AdicionarParametroEntrada("configuracaoId", configuracaoId, DbType.Int32);

                infracao.Campos = bancoDeDados.ObterEntityList <InfracaoCampo>(comando);

                #endregion

                #region Questionário

                comando = bancoDeDados.CriarComando(@"
					 select tfiq.pergunta PerguntaId,
							cfip.tid      PerguntaTid,
							cfip.texto    Identificacao,
							0             RespostaId,
							''            Especificacao
					   from {0}cnf_fisc_infr_cnf_pergunta tfiq,
							{0}cnf_fisc_infracao_pergunta cfip
					  where tfiq.pergunta = cfip.id
						and tfiq.configuracao = :configuracaoId order by tfiq.pergunta"                        , EsquemaBanco);

                comando.AdicionarParametroEntrada("configuracaoId", configuracaoId, DbType.Int32);

                infracao.Perguntas = bancoDeDados.ObterEntityList <InfracaoPergunta>(comando, (IDataReader reader, InfracaoPergunta item) =>
                {
                    item.Respostas = _configuracaoDa.ObterRespostas(item.PerguntaId);
                });

                #endregion
            }

            return(infracao);
        }
Example #16
0
        public void Mergear(Infracao entidadeAtual, Infracao entidadeNovoConfig)
        {
            if (entidadeAtual.ClassificacaoId != entidadeNovoConfig.ClassificacaoId)
            {
                entidadeAtual.Campos          = new List <InfracaoCampo>();
                entidadeAtual.Perguntas       = new List <InfracaoPergunta>();
                entidadeAtual.ClassificacaoId = 0;
                entidadeAtual.TipoId          = 0;
                entidadeAtual.ItemId          = 0;
                return;
            }
            else if (entidadeAtual.TipoId != entidadeNovoConfig.TipoId)
            {
                entidadeAtual.Campos    = new List <InfracaoCampo>();
                entidadeAtual.Perguntas = new List <InfracaoPergunta>();
                entidadeAtual.TipoId    = 0;
                entidadeAtual.ItemId    = 0;
                return;
            }
            else if (entidadeAtual.ItemId != entidadeNovoConfig.ItemId)
            {
                entidadeAtual.Campos    = new List <InfracaoCampo>();
                entidadeAtual.Perguntas = new List <InfracaoPergunta>();
                entidadeAtual.ItemId    = 0;
                return;
            }

            entidadeNovoConfig.Campos.ForEach(x =>
            {
                var itemCampo = entidadeAtual.Campos.Find(z => z.CampoId == x.CampoId);

                if (itemCampo != null)
                {
                    x.Id            = itemCampo.Id;
                    x.Identificacao = itemCampo.Identificacao;
                    x.Texto         = itemCampo.Texto;
                    x.Tipo          = itemCampo.Tipo;
                    x.TipoTexto     = itemCampo.TipoTexto;
                    x.Unidade       = itemCampo.Unidade;
                    x.UnidadeTexto  = itemCampo.UnidadeTexto;
                }
            });

            entidadeNovoConfig.Perguntas.ForEach(x =>
            {
                var itemPergunta = entidadeAtual.Perguntas.Find(z => z.PerguntaId == x.PerguntaId);

                if (itemPergunta != null)
                {
                    x.Id            = itemPergunta.Id;
                    x.Especificacao = itemPergunta.Especificacao;
                    x.Identificacao = itemPergunta.Identificacao;
                    x.IsEspecificar = itemPergunta.IsEspecificar;
                    x.RespostaId    = itemPergunta.RespostaId;
                    x.Respostas     = itemPergunta.Respostas;
                }
            });

            entidadeAtual.Campos          = entidadeNovoConfig.Campos;
            entidadeAtual.Perguntas       = entidadeNovoConfig.Perguntas;
            entidadeAtual.ConfiguracaoTid = entidadeNovoConfig.ConfiguracaoTid;
        }
        public bool Salvar(Infracao infracao)
        {
            #region Classificação da infração

            if (infracao.ClassificacaoId == 0)
            {
                Validacao.Add(Mensagem.InfracaoMsg.ClassificacaoObrigatorio);
            }

            if (infracao.TipoId == 0)
            {
                Validacao.Add(Mensagem.InfracaoMsg.TipoInfracaoObrigatorio);
            }

            if (infracao.ItemId == 0)
            {
                Validacao.Add(Mensagem.InfracaoMsg.ItemObrigatorio);
            }

            if (infracao.Campos.Count > 0 && infracao.Campos.Count(x => string.IsNullOrWhiteSpace(x.Texto)) > 0)
            {
                Validacao.Add(Mensagem.InfracaoMsg.CamposObrigatorioo);
            }

            if (infracao.Perguntas.Count > 0 && infracao.Perguntas.Count(x => x.RespostaId == 0 || (x.IsEspecificar && string.IsNullOrWhiteSpace(x.Especificacao))) > 0)
            {
                Validacao.Add(Mensagem.InfracaoMsg.QuestionariosObrigatorio);
            }

            #endregion

            #region Dados do auto de infração

            if (infracao.IsAutuada == null)
            {
                Validacao.Add(Mensagem.InfracaoMsg.InfracaoAutuadaObrigatorio);
            }
            else if (infracao.IsAutuada.Value)
            {
                if (infracao.IsGeradaSistema == null)
                {
                    Validacao.Add(Mensagem.InfracaoMsg.AutoGeradoSistemaObrigatorio);
                }
                else if (!infracao.IsGeradaSistema.GetValueOrDefault())
                {
                    if (string.IsNullOrWhiteSpace(infracao.NumeroAutoInfracaoBloco))
                    {
                        if (infracao.SerieId == (int)eSerie.C)
                        {
                            Validacao.Add(Mensagem.InfracaoMsg.NumeroAutoInfracaoObrigatorio);
                        }
                        else
                        {
                            Validacao.Add(Mensagem.InfracaoMsg.NumeroAutoInfracaoBlocoObrigatorio);
                        }
                    }

                    ValidacoesGenericasBus.DataMensagem(infracao.DataLavraturaAuto, "Infracao_DataLavraturaAuto", "lavratura do auto");
                }

                if (infracao.SerieId == 0)
                {
                    Validacao.Add(Mensagem.InfracaoMsg.SerieObrigatorio);
                }

                if (string.IsNullOrWhiteSpace(infracao.DescricaoInfracao))
                {
                    Validacao.Add(Mensagem.InfracaoMsg.DescricaoInfracaoObrigatorio);
                }

                if (infracao.CodigoReceitaId == 0)
                {
                    Validacao.Add(Mensagem.InfracaoMsg.CodigoReceitaObrigatorio);
                }

                if (string.IsNullOrWhiteSpace(infracao.ValorMulta))
                {
                    Validacao.Add(Mensagem.InfracaoMsg.ValorMultaObrigatorio);
                }
                else
                {
                    Decimal aux = 0;
                    if (!Decimal.TryParse(infracao.ValorMulta, out aux))
                    {
                        Validacao.Add(Mensagem.InfracaoMsg.ValorMultaInvalido);
                    }
                }
            }

            #endregion

            if (_da.ConfigAlterada(infracao.ConfiguracaoId, infracao.ConfiguracaoTid))
            {
                Validacao.Add(Mensagem.InfracaoMsg.ConfigAlteradaSemAtualizar);
            }

            if (_da.PerguntaRespostaAlterada(infracao))
            {
                Validacao.Add(Mensagem.InfracaoMsg.ConfigAlteradaSemAtualizar);
            }

            return(Validacao.EhValido);
        }
        public bool Salvar(Infracao infracao)
        {
            if (infracao.ComInfracao == null)
            {
                Validacao.Add(Mensagem.InfracaoMsg.TipoInfracaoFiscalizacaoObrigatorio);
            }
            else
            {
                #region Caracterização da infração

                if (infracao.ClassificacaoId == 0)
                {
                    Validacao.Add(Mensagem.InfracaoMsg.ClassificacaoObrigatorio);
                }

                if (infracao.TipoId == 0)
                {
                    Validacao.Add(Mensagem.InfracaoMsg.TipoInfracaoObrigatorio);
                }

                if (infracao.ItemId == 0)
                {
                    Validacao.Add(Mensagem.InfracaoMsg.ItemObrigatorio);
                }

                if (infracao.Campos.Count > 0 && infracao.Campos.Count(x => string.IsNullOrWhiteSpace(x.Texto)) > 0)
                {
                    Validacao.Add(Mensagem.InfracaoMsg.CamposObrigatorioo);
                }

                if (infracao.Perguntas.Count > 0 && infracao.Perguntas.Count(x => x.RespostaId == 0 || (x.IsEspecificar && string.IsNullOrWhiteSpace(x.Especificacao))) > 0)
                {
                    Validacao.Add(Mensagem.InfracaoMsg.QuestionariosObrigatorio);
                }

                #endregion

                if (_da.ConfigAlterada(infracao.ConfiguracaoId, infracao.ConfiguracaoTid))
                {
                    Validacao.Add(Mensagem.InfracaoMsg.ConfigAlteradaSemAtualizar);
                }

                if (_da.PerguntaRespostaAlterada(infracao))
                {
                    Validacao.Add(Mensagem.InfracaoMsg.ConfigAlteradaSemAtualizar);
                }

                if (infracao.ComInfracao == true)
                {
                    if (infracao.EnquadramentoInfracao.Artigos.Count == 0)
                    {
                        Validacao.Add(Mensagem.InfracaoMsg.EnquadramentoInfracaoObrigatorio);
                    }

                    if (string.IsNullOrWhiteSpace(infracao.DescricaoInfracao))
                    {
                        Validacao.Add(Mensagem.InfracaoMsg.DescricaoInfracaoObrigatorio);
                    }
                }

                ValidacoesGenericasBus.DataMensagem(infracao.DataConstatacao, "Infracao_DataConstatacao", "constatação/vistoria", true);

                DateTime hora = new DateTime();
                if (!DateTime.TryParse(infracao.HoraConstatacao, out hora))
                {
                    Validacao.Add(Mensagem.InfracaoMsg.HoraConstatacaoObrigatorio);
                }

                //OBS: foi colocado esse if duas vezes para poder exibir as mensagens de acordo com a ordem dos campos na tela
                if (infracao.ComInfracao == true)
                {
                    if (infracao.ClassificacaoInfracao == null)
                    {
                        Validacao.Add(Mensagem.InfracaoMsg.ClassificacaoInfracaoObrigatorio);
                    }

                    if (!PenalidadeSelecionada(infracao))
                    {
                        Validacao.Add(Mensagem.InfracaoMsg.PenalidadeObrigatorio);
                    }
                }
            }

            return(Validacao.EhValido);
        }
Example #19
0
        public Infracao Editar(Infracao infracao, BancoDeDados banco = null)
        {
            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                bancoDeDados.IniciarTransacao();

                Comando comando = bancoDeDados.CriarComando(@" update {0}tab_fisc_infracao t set t.fiscalizacao = :fiscalizacao, t.classificacao = :classificacao, t.tipo = :tipo, t.item = :item, t.subitem = :subitem,
				t.infracao_autuada = :infracao_autuada, t.gerado_sistema = :gerado_sistema, t.numero_auto_infracao_bloco = :numero_auto_infracao_bloco, t.data_lavratura_auto = :data_lavratura_auto,
				t.descricao_infracao = :descricao_infracao, t.codigo_receita = :codigo_receita, t.valor_multa = :valor_multa, t.serie = :serie, 
				t.configuracao = :configuracao, t.arquivo = :arquivo, t.tid = :tid, t.configuracao_tid = :configuracao_tid where t.id = :id "                , EsquemaBanco);

                comando.AdicionarParametroEntrada("id", infracao.Id, DbType.Int32);
                comando.AdicionarParametroEntrada("fiscalizacao", infracao.FiscalizacaoId, DbType.Int32);
                comando.AdicionarParametroEntrada("classificacao", infracao.ClassificacaoId, DbType.Int32);
                comando.AdicionarParametroEntrada("tipo", infracao.TipoId, DbType.Int32);
                comando.AdicionarParametroEntrada("item", infracao.ItemId, DbType.Int32);
                comando.AdicionarParametroEntrada("subitem", infracao.SubitemId, DbType.Int32);
                comando.AdicionarParametroEntrada("serie", infracao.SerieId, DbType.Int32);
                comando.AdicionarParametroEntrada("codigo_receita", infracao.CodigoReceitaId, DbType.Int32);
                comando.AdicionarParametroEntrada("configuracao", infracao.ConfiguracaoId, DbType.Int32);
                comando.AdicionarParametroEntrada("numero_auto_infracao_bloco", infracao.NumeroAutoInfracaoBloco, DbType.String);
                comando.AdicionarParametroEntrada("descricao_infracao", infracao.DescricaoInfracao, DbType.String);
                comando.AdicionarParametroEntrada("valor_multa", infracao.ValorMulta, DbType.Decimal);
                comando.AdicionarParametroEntrada("tid", DbType.String, 36, GerenciadorTransacao.ObterIDAtual());
                comando.AdicionarParametroEntrada("configuracao_tid", DbType.String, 36, infracao.ConfiguracaoTid);
                comando.AdicionarParametroEntrada("infracao_autuada", (infracao.IsAutuada.Value ? 1 : 0), DbType.Int32);

                if (infracao.Arquivo == null)
                {
                    comando.AdicionarParametroEntrada("arquivo", DBNull.Value, DbType.Int32);
                }
                else
                {
                    comando.AdicionarParametroEntrada("arquivo", infracao.Arquivo.Id, DbType.Int32);
                }

                if (infracao.DataLavraturaAuto.IsEmpty)
                {
                    comando.AdicionarParametroEntrada("data_lavratura_auto", DBNull.Value, DbType.Date);
                }
                else
                {
                    comando.AdicionarParametroEntrada("data_lavratura_auto", infracao.DataLavraturaAuto.Data.Value, DbType.Date);
                }

                if (infracao.IsAutuada.HasValue && infracao.IsGeradaSistema.HasValue)
                {
                    comando.AdicionarParametroEntrada("gerado_sistema", (infracao.IsGeradaSistema.Value ? 1 : 0), DbType.Int32);
                }
                else
                {
                    comando.AdicionarParametroEntrada("gerado_sistema", DBNull.Value, DbType.Int32);
                }

                bancoDeDados.ExecutarNonQuery(comando);

                #region Campos

                comando = bancoDeDados.CriarComando(@"delete from {0}tab_fisc_infracao_campo c where c.infracao = :infracao", EsquemaBanco);
                comando.DbCommand.CommandText += String.Format(" {0}", comando.AdicionarNotIn("and", "c.id", DbType.Int32, infracao.Campos.Select(x => x.Id).ToList()));
                comando.AdicionarParametroEntrada("infracao", infracao.Id, DbType.Int32);
                bancoDeDados.ExecutarNonQuery(comando);

                foreach (InfracaoCampo campo in infracao.Campos)
                {
                    if (campo.Id == 0)
                    {
                        comando = bancoDeDados.CriarComando(@" insert into {0}tab_fisc_infracao_campo (id, infracao, campo, texto, tid) values ({0}seq_fisc_inf_campo.nextval, :infracao, :campo, :texto, 
							:tid) returning id into :id"                            , EsquemaBanco);
                        comando.AdicionarParametroSaida("id", DbType.Int32);
                    }
                    else
                    {
                        comando = bancoDeDados.CriarComando(@" update {0}tab_fisc_infracao_campo set infracao = :infracao, campo = :campo, texto = :texto, tid = :tid where id = :id ", EsquemaBanco);
                        comando.AdicionarParametroEntrada("id", campo.Id, DbType.Int32);
                    }

                    comando.AdicionarParametroEntrada("infracao", infracao.Id, DbType.Int32);
                    comando.AdicionarParametroEntrada("tid", DbType.String, 36, GerenciadorTransacao.ObterIDAtual());
                    comando.AdicionarParametroEntrada("campo", campo.CampoId, DbType.Int32);
                    comando.AdicionarParametroEntrada("texto", campo.Texto, DbType.String);

                    bancoDeDados.ExecutarNonQuery(comando);

                    if (campo.Id == 0)
                    {
                        campo.Id = Convert.ToInt32(comando.ObterValorParametro("id"));
                    }
                }

                #endregion

                #region Questionário

                comando = bancoDeDados.CriarComando(@"delete from {0}tab_fisc_infracao_pergunta c where c.infracao = :infracao", EsquemaBanco);
                comando.DbCommand.CommandText += String.Format(" {0}", comando.AdicionarNotIn("and", "c.id", DbType.Int32, infracao.Perguntas.Select(x => x.Id).ToList()));
                comando.AdicionarParametroEntrada("infracao", infracao.Id, DbType.Int32);
                bancoDeDados.ExecutarNonQuery(comando);

                foreach (InfracaoPergunta questionario in infracao.Perguntas)
                {
                    if (questionario.Id == 0)
                    {
                        comando = bancoDeDados.CriarComando(@"insert into {0}tab_fisc_infracao_pergunta (id, infracao, pergunta, pergunta_tid, 
															resposta, resposta_tid, especificacao, tid) values ({0}seq_fisc_inf_pergunta.nextval, 
															:infracao, :pergunta, :pergunta_tid, :resposta, :resposta_tid, :especificacao, :tid) 
															returning id into :id"                                                            , EsquemaBanco);
                        comando.AdicionarParametroSaida("id", DbType.Int32);
                    }
                    else
                    {
                        comando = bancoDeDados.CriarComando(@"update {0}tab_fisc_infracao_pergunta set infracao = :infracao, pergunta = :pergunta, 
															pergunta_tid = :pergunta_tid, resposta = :resposta, resposta_tid = :resposta_tid, 
															especificacao = :especificacao, tid = :tid where id = :id"                                                            , EsquemaBanco);
                        comando.AdicionarParametroEntrada("id", questionario.Id, DbType.Int32);
                    }

                    comando.AdicionarParametroEntrada("infracao", infracao.Id, DbType.Int32);
                    comando.AdicionarParametroEntrada("tid", DbType.String, 36, GerenciadorTransacao.ObterIDAtual());
                    comando.AdicionarParametroEntrada("pergunta", questionario.PerguntaId, DbType.Int32);
                    comando.AdicionarParametroEntrada("pergunta_tid", DbType.String, 36, questionario.PerguntaTid);
                    comando.AdicionarParametroEntrada("resposta", questionario.RespostaId, DbType.Int32);
                    comando.AdicionarParametroEntrada("resposta_tid", DbType.String, 36, questionario.RespostaTid);
                    comando.AdicionarParametroEntrada("especificacao", questionario.Especificacao, DbType.String);

                    bancoDeDados.ExecutarNonQuery(comando);

                    if (questionario.Id == 0)
                    {
                        questionario.Id = Convert.ToInt32(comando.ObterValorParametro("id"));
                    }
                }

                #endregion

                Historico.Gerar(infracao.FiscalizacaoId, eHistoricoArtefato.fiscalizacao, eHistoricoAcao.atualizar, bancoDeDados);

                Consulta.Gerar(infracao.FiscalizacaoId, eHistoricoArtefato.fiscalizacao, bancoDeDados);

                bancoDeDados.Commit();
            }
            return(infracao);
        }
Example #20
0
        internal bool PerguntaRespostaAlterada(Infracao infracao, BancoDeDados banco = null)
        {
            Boolean alterou = false;

            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                Comando comando = null;

                if (infracao.Perguntas == null || infracao.Perguntas.Count == 0)
                {
                    return(alterou);
                }

                foreach (var pergunta in infracao.Perguntas)
                {
                    #region Pergunta

                    comando = bancoDeDados.CriarComando(@"select p.tid pergunta_tid 
															from cnf_fisc_infracao_pergunta p 
															where p.id = :pergunta"                                                            , EsquemaBanco);

                    comando.AdicionarParametroEntrada("pergunta", pergunta.PerguntaId, DbType.Int32);

                    using (IDataReader readerAux = bancoDeDados.ExecutarReader(comando))
                    {
                        while (readerAux.Read())
                        {
                            String perguntaNovaTid = readerAux.GetValue <String>("pergunta_tid");
                            alterou = perguntaNovaTid != pergunta.PerguntaTid;

                            if (alterou)
                            {
                                return(true);
                            }
                        }

                        readerAux.Close();
                    }

                    #endregion


                    #region Resposta

                    comando = bancoDeDados.CriarComando(@"select p.tid resposta_tid from cnf_fisc_infracao_resposta p 
															where p.id = :resposta"                                                            , EsquemaBanco);

                    comando.AdicionarParametroEntrada("resposta", pergunta.RespostaId, DbType.Int32);

                    using (IDataReader readerAux2 = bancoDeDados.ExecutarReader(comando))
                    {
                        if (readerAux2.Read())
                        {
                            String respostaNovaTid = readerAux2.GetValue <String>("resposta_tid");
                            alterou = respostaNovaTid != pergunta.RespostaTid;

                            if (alterou)
                            {
                                return(true);
                            }
                        }

                        readerAux2.Close();
                    }

                    #endregion
                }

                return(alterou);
            }
        }
Example #21
0
        public Infracao Criar(Infracao infracao, BancoDeDados banco = null)
        {
            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                bancoDeDados.IniciarTransacao();

                #region Infração

                Comando comando = bancoDeDados.CriarComando(@" insert into {0}tab_fisc_infracao (id, fiscalizacao, classificacao, tipo, item, subitem, infracao_autuada, gerado_sistema, 
					numero_auto_infracao_bloco, data_lavratura_auto, descricao_infracao, codigo_receita, valor_multa, serie, configuracao, arquivo, tid, configuracao_tid) values ({0}seq_fisc_infracao.nextval, 
					:fiscalizacao, :classificacao, :tipo, :item, :subitem, :infracao_autuada, :gerado_sistema, :numero_auto_infracao_bloco, :data_lavratura_auto, :descricao_infracao, 
					:codigo_receita, :valor_multa, :serie, :configuracao, :arquivo, :tid, :configuracao_tid) returning id into :id "                    , EsquemaBanco);

                comando.AdicionarParametroEntrada("fiscalizacao", infracao.FiscalizacaoId, DbType.Int32);
                comando.AdicionarParametroEntrada("classificacao", infracao.ClassificacaoId, DbType.Int32);
                comando.AdicionarParametroEntrada("tipo", infracao.TipoId, DbType.Int32);
                comando.AdicionarParametroEntrada("item", infracao.ItemId, DbType.Int32);
                comando.AdicionarParametroEntrada("subitem", infracao.SubitemId, DbType.Int32);
                comando.AdicionarParametroEntrada("serie", infracao.SerieId, DbType.Int32);
                comando.AdicionarParametroEntrada("codigo_receita", infracao.CodigoReceitaId, DbType.Int32);
                comando.AdicionarParametroEntrada("configuracao", infracao.ConfiguracaoId, DbType.Int32);
                comando.AdicionarParametroEntrada("numero_auto_infracao_bloco", infracao.NumeroAutoInfracaoBloco, DbType.String);
                comando.AdicionarParametroEntrada("descricao_infracao", infracao.DescricaoInfracao, DbType.String);
                comando.AdicionarParametroEntrada("valor_multa", infracao.ValorMulta, DbType.Decimal);
                comando.AdicionarParametroEntrada("infracao_autuada", (infracao.IsAutuada.Value ? 1 : 0), DbType.Int32);
                comando.AdicionarParametroEntrada("tid", DbType.String, 36, GerenciadorTransacao.ObterIDAtual());
                comando.AdicionarParametroEntrada("configuracao_tid", DbType.String, 36, infracao.ConfiguracaoTid);
                comando.AdicionarParametroSaida("id", DbType.Int32);

                if (infracao.Arquivo == null)
                {
                    comando.AdicionarParametroEntrada("arquivo", DBNull.Value, DbType.Int32);
                }
                else
                {
                    comando.AdicionarParametroEntrada("arquivo", infracao.Arquivo.Id, DbType.Int32);
                }

                if (infracao.DataLavraturaAuto.IsEmpty)
                {
                    comando.AdicionarParametroEntrada("data_lavratura_auto", DBNull.Value, DbType.Date);
                }
                else
                {
                    comando.AdicionarParametroEntrada("data_lavratura_auto", infracao.DataLavraturaAuto.Data.Value, DbType.Date);
                }

                if (infracao.IsAutuada.Value && infracao.IsGeradaSistema.HasValue)
                {
                    comando.AdicionarParametroEntrada("gerado_sistema", (infracao.IsGeradaSistema.Value ? 1 : 0), DbType.Int32);
                }
                else
                {
                    comando.AdicionarParametroEntrada("gerado_sistema", DBNull.Value, DbType.Int32);
                }

                bancoDeDados.ExecutarNonQuery(comando);

                #endregion

                infracao.Id = Convert.ToInt32(comando.ObterValorParametro("id"));

                #region Campos

                comando = bancoDeDados.CriarComando(@" insert into {0}tab_fisc_infracao_campo (id, infracao, campo, texto, tid) values ({0}seq_fisc_inf_campo.nextval, :infracao, :campo, :texto, :tid) ", EsquemaBanco);

                comando.AdicionarParametroEntrada("infracao", infracao.Id, DbType.Int32);
                comando.AdicionarParametroEntrada("tid", DbType.String, 36, GerenciadorTransacao.ObterIDAtual());
                comando.AdicionarParametroEntrada("campo", DbType.Int32);
                comando.AdicionarParametroEntrada("texto", DbType.String);

                foreach (InfracaoCampo campo in infracao.Campos)
                {
                    comando.SetarValorParametro("campo", campo.CampoId);
                    comando.SetarValorParametro("texto", campo.Texto);

                    bancoDeDados.ExecutarNonQuery(comando);
                }

                #endregion

                #region Questionário

                comando = bancoDeDados.CriarComando(@" insert into {0}tab_fisc_infracao_pergunta (id, infracao, pergunta, pergunta_tid, resposta, resposta_tid, especificacao, tid) values 
					({0}seq_fisc_inf_pergunta.nextval, :infracao, :pergunta, :pergunta_tid, :resposta, :resposta_tid, :especificacao, :tid) "                    , EsquemaBanco);

                comando.AdicionarParametroEntrada("infracao", infracao.Id, DbType.Int32);
                comando.AdicionarParametroEntrada("tid", DbType.String, 36, GerenciadorTransacao.ObterIDAtual());
                comando.AdicionarParametroEntrada("pergunta", DbType.Int32);
                comando.AdicionarParametroEntrada("pergunta_tid", DbType.String, 36);
                comando.AdicionarParametroEntrada("resposta", DbType.Int32);
                comando.AdicionarParametroEntrada("resposta_tid", DbType.String, 36);
                comando.AdicionarParametroEntrada("especificacao", DbType.String);

                foreach (InfracaoPergunta questionario in infracao.Perguntas)
                {
                    comando.SetarValorParametro("pergunta", questionario.PerguntaId);
                    comando.SetarValorParametro("pergunta_tid", questionario.PerguntaTid);
                    comando.SetarValorParametro("resposta", questionario.RespostaId);
                    comando.SetarValorParametro("resposta_tid", questionario.RespostaTid);
                    comando.SetarValorParametro("especificacao", questionario.Especificacao);

                    bancoDeDados.ExecutarNonQuery(comando);
                }

                #endregion

                Historico.Gerar(infracao.FiscalizacaoId, eHistoricoArtefato.fiscalizacao, eHistoricoAcao.atualizar, bancoDeDados);

                Consulta.Gerar(infracao.FiscalizacaoId, eHistoricoArtefato.fiscalizacao, bancoDeDados);

                bancoDeDados.Commit();
            }
            return(infracao);
        }
Example #22
0
        public Infracao ObterHistorico(int id, BancoDeDados banco = null)
        {
            Infracao         infracao     = new Infracao();
            InfracaoPergunta questionario = new InfracaoPergunta();

            using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia(banco))
            {
                #region Infração

                Comando comando = bancoDeDados.CriarComando(@"select tfi.infracao_id id, f.situacao_id, tfi.classificacao_id classificacao, tfi.classificacao_texto,
															tfi.tipo_id tipo, lt.texto tipo_texto, tfi.item_id item, cfi.texto item_texto, tfi.subitem_id subitem,
															cfs.texto subitem_texto, tfi.infracao_autuada, tfi.gerado_sistema, tfi.valor_multa, tfi.codigo_receita_id codigo_receita,
															tfi.numero_auto_infracao_bloco, tfi.descricao_infracao, tfi.data_lavratura_auto, tfi.serie_id serie, tfi.configuracao_id configuracao,
															tfi.arquivo_id arquivo, a.nome arquivo_nome, tfi.configuracao_tid from hst_fisc_infracao tfi, hst_fiscalizacao f,
															tab_arquivo a, lov_cnf_fisc_infracao_classif lc, cnf_fisc_infracao_tipo lt, cnf_fisc_infracao_item cfi,
															cnf_fisc_infracao_subitem cfs where tfi.arquivo_id = a.id(+) and tfi.classificacao_id = lc.id(+) and tfi.tipo_id = lt.id(+)
															and tfi.item_id = cfi.id(+) and tfi.subitem_id = cfs.id(+) and tfi.fiscalizacao_id_hst = f.id 
															and tfi.id = (select max(t.id) id from hst_fisc_infracao t where t.infracao_id = :id)"                                                            , EsquemaBanco);

                comando.AdicionarParametroEntrada("id", id, DbType.Int32);

                using (IDataReader reader = bancoDeDados.ExecutarReader(comando))
                {
                    if (reader.Read())
                    {
                        infracao = new Infracao
                        {
                            Id = reader.GetValue <int>("id"),
                            ClassificacaoId         = reader.GetValue <int>("classificacao"),
                            ClassificacaoTexto      = reader.GetValue <string>("classificacao_texto"),
                            TipoId                  = reader.GetValue <int>("tipo"),
                            TipoTexto               = reader.GetValue <string>("tipo_texto"),
                            ItemId                  = reader.GetValue <int>("item"),
                            ItemTexto               = reader.GetValue <string>("item_texto"),
                            SubitemId               = reader.GetValue <int>("subitem"),
                            SubitemTexto            = reader.GetValue <string>("subitem_texto"),
                            SerieId                 = reader.GetValue <int>("serie"),
                            ConfiguracaoId          = reader.GetValue <int>("configuracao"),
                            IsAutuada               = reader.GetValue <bool>("infracao_autuada"),
                            IsGeradaSistema         = reader.GetValue <bool?>("gerado_sistema"),
                            ValorMulta              = reader.GetValue <string>("valor_multa"),
                            CodigoReceitaId         = reader.GetValue <int>("codigo_receita"),
                            NumeroAutoInfracaoBloco = reader.GetValue <string>("numero_auto_infracao_bloco"),
                            DescricaoInfracao       = reader.GetValue <string>("descricao_infracao"),
                            ConfiguracaoTid         = reader.GetValue <string>("configuracao_tid"),
                            FiscalizacaoSituacaoId  = reader.GetValue <int>("situacao_id")
                        };

                        infracao.Arquivo = new Arquivo
                        {
                            Id   = reader.GetValue <int>("arquivo"),
                            Nome = reader.GetValue <string>("arquivo_nome")
                        };

                        if (!string.IsNullOrWhiteSpace(reader.GetValue <string>("data_lavratura_auto")))
                        {
                            infracao.DataLavraturaAuto.DataTexto = reader.GetValue <string>("data_lavratura_auto");
                        }
                    }
                    reader.Close();
                }

                #endregion

                #region Campos

                comando = bancoDeDados.CriarComando(@"
					select tfic.infracao_campo_id Id,
						   tfic.campo_id          CampoId,
						   tfic.texto             Texto,
						   cfic.texto             CampoIdentificacao,
						   cfic.unidade           CampoUnidade,
						   lu.texto               CampoUnidadeTexto,
						   cfic.Tipo              CampoTipo,
						   lt.texto               CampoTipoTexto
					  from {0}hst_fisc_infracao_campo        tfic,
						   {0}lov_cnf_fisc_infracao_camp_tip lt,
						   {0}lov_cnf_fisc_infracao_camp_uni lu,
						   {0}cnf_fisc_infracao_campo        cfic
					 where tfic.campo_id = cfic.id
					   and cfic.tipo = lt.id(+)
					   and cfic.unidade = lu.id(+)
					   and tfic.infracao_id_hst = (select max(t.id) id from {0}hst_fisc_infracao t where t.infracao_id = :id)"                    , EsquemaBanco);

                comando.AdicionarParametroEntrada("id", id, DbType.Int32);

                using (IDataReader reader = bancoDeDados.ExecutarReader(comando))
                {
                    infracao.Campos = new List <InfracaoCampo>();
                    while (reader.Read())
                    {
                        infracao.Campos.Add(new InfracaoCampo
                        {
                            Id            = reader.GetValue <int>("Id"),
                            CampoId       = reader.GetValue <int>("CampoId"),
                            Tipo          = reader.GetValue <int>("CampoTipo"),
                            Identificacao = reader.GetValue <string>("CampoIdentificacao"),
                            TipoTexto     = reader.GetValue <string>("CampoTipoTexto"),
                            Unidade       = reader.GetValue <int>("CampoUnidade"),
                            UnidadeTexto  = reader.GetValue <string>("CampoUnidadeTexto"),
                            Texto         = reader.GetValue <string>("Texto")
                        });
                    }
                    reader.Close();
                }

                #endregion

                #region Questionário

                comando = bancoDeDados.CriarComando(@"
					select tfiq.id            Id,
						   tfiq.pergunta_id   PerguntaId,
						   tfiq.pergunta_tid  PerguntaTid,
						   hp.texto           PerguntaIdentificacao,
						   tfiq.resposta_id   RespostaId,
						   tfiq.especificacao
					  from {0}hst_fisc_infracao_pergunta tfiq, 
						   {0}cnf_fisc_infracao_pergunta cfip,
						   {0}hst_cnf_fisc_infracao_pergunta hp
					 where tfiq.pergunta_id = cfip.id
					   and hp.tid = tfiq.pergunta_tid
					   and hp.pergunta_id = cfip.id
					   and tfiq.infracao_id_hst = (select max(t.id) id from {0}hst_fisc_infracao t where t.infracao_id = :id) order by tfiq.pergunta_id"                    , EsquemaBanco);

                comando.AdicionarParametroEntrada("id", id, DbType.Int32);

                using (IDataReader reader = bancoDeDados.ExecutarReader(comando))
                {
                    infracao.Perguntas = new List <InfracaoPergunta>();
                    while (reader.Read())
                    {
                        int    perguntaId  = reader.GetValue <int>("PerguntaId");
                        string perguntaTid = reader.GetValue <string>("PerguntaTid");

                        infracao.Perguntas.Add(new InfracaoPergunta
                        {
                            Id            = reader.GetValue <int>("Id"),
                            PerguntaId    = reader.GetValue <int>("PerguntaId"),
                            PerguntaTid   = perguntaTid,
                            RespostaId    = reader.GetValue <int>("RespostaId"),
                            Identificacao = reader.GetValue <string>("PerguntaIdentificacao"),
                            Especificacao = reader.GetValue <string>("Especificacao"),
                            Respostas     = _configuracaoDa.ObterRespostasHistorico(perguntaId, perguntaTid)
                        });
                    }
                    reader.Close();
                }

                #endregion
            }

            return(infracao);
        }