public static void Gravar(HistoricoAlteracaoAtendimento historicoAlteracao)
        {
            string sqlInsert = @"INSERT INTO HISTORICOALTERACAOATENDIMENTO
                                (CODIGOOPERADOR,CODIGOCLIENTE,NOMECLIENTE,DATAOPERACAO,
                                 DESCRICAOOPERACAO,NOMEATENDENTE,NOMESERVICO,DTHORAINICIAL,
                                NOMEOPERADOR)
                                VALUES
                                (:CODIGOOPERADOR, :CODIGOCLIENTE, :NOMECLIENTE, :DATAOPERACAO,
                                 :DESCRICAOOPERACAO, :NOMEATENDENTE, :NOMESERVICO, :DTHORAINICIAL,
                                :NOMEOPERADOR)";

            OracleConnection conexao = PersistenciaOracle.ObterConexao();
            conexao.Open();

            OracleCommand comando = new OracleCommand(sqlInsert);
            comando.Connection = conexao;
            comando.Parameters.Add("CODIGOOPERADOR", historicoAlteracao.CodigoOperador);
            comando.Parameters.Add("CODIGOCLIENTE", historicoAlteracao.CodigoCliente);
            comando.Parameters.Add("NOMECLIENTE", historicoAlteracao.NomeCliente);
            comando.Parameters.Add("DATAOPERACAO", historicoAlteracao.DataOperacao);
            comando.Parameters.Add("DESCRICAOOPERACAO", historicoAlteracao.DescricaoOperacao);
            comando.Parameters.Add("NOMEATENDENTE", historicoAlteracao.NomeAtendente);
            comando.Parameters.Add("NOMESERVICO", historicoAlteracao.NomeServico);
            comando.Parameters.Add("DTHORAINICIAL", historicoAlteracao.DtHoraInicial);
            comando.Parameters.Add("NOMEOPERADOR", historicoAlteracao.NomeOperador);

            comando.Prepare();
            comando.ExecuteNonQuery();

            conexao.Close();
        }
        public static List<HistoricoAlteracaoAtendimento> ObterHistoricoAlteracaoAtendimento(string Nome, DateTime Data)
        {
            List<HistoricoAlteracaoAtendimento> historico = new List<HistoricoAlteracaoAtendimento>();
            string sql = @"SELECT CODIGOOPERADOR,CODIGOCLIENTE,NOMECLIENTE,DATAOPERACAO,
                                  DESCRICAOOPERACAO,NOMEATENDENTE,NOMESERVICO,DTHORAINICIAL,
                                  NOMEOPERADOR FROM HISTORICOALTERACAOATENDIMENTO
                                    WHERE TRUNC(DATAOPERACAO) = TRUNC(:Data)";

            if(!string.IsNullOrEmpty(Nome))
            {
                sql += " AND UPPER(NOMECLIENTE) LIKE '" + Nome.ToUpper() + "%'";
            }

            sql += " ORDER BY DATAOPERACAO ASC";

            OracleConnection conexao = PersistenciaOracle.ObterConexao();
            conexao.Open();
            OracleCommand comando = new OracleCommand(sql);
            comando.Connection = conexao;
            comando.Parameters.Add("DATA", Data);
            comando.Prepare();

            OracleDataReader leitor = comando.ExecuteReader();
            while(leitor.Read())
            {
                HistoricoAlteracaoAtendimento hist = new HistoricoAlteracaoAtendimento();
                hist.CodigoOperador = UtilidadePersistencia.ObterValorTratado<decimal>(leitor["CODIGOOPERADOR"]);
                hist.CodigoCliente = UtilidadePersistencia.ObterValorTratado<decimal>(leitor["CODIGOCLIENTE"]);
                hist.NomeCliente = UtilidadePersistencia.ObterValorTratado<string>(leitor["NOMECLIENTE"]);
                hist.DataOperacao = UtilidadePersistencia.ObterValorDateTimeTratado<DateTime?>(leitor["DATAOPERACAO"]);
                hist.DescricaoOperacao = UtilidadePersistencia.ObterValorTratado<string>(leitor["DESCRICAOOPERACAO"]);
                hist.NomeAtendente = UtilidadePersistencia.ObterValorTratado<string>(leitor["NOMEATENDENTE"]);
                hist.NomeServico = UtilidadePersistencia.ObterValorTratado<string>(leitor["NOMESERVICO"]);
                hist.DtHoraInicial = UtilidadePersistencia.ObterValorDateTimeTratado<DateTime?>(leitor["DTHORAINICIAL"]);
                hist.NomeOperador = UtilidadePersistencia.ObterValorTratado<string>(leitor["NOMEOPERADOR"]);
                historico.Add(hist);
            }

            conexao.Close();
            return historico;
        }
        private void GravarRegistroAlteracao(Atendimento atd, decimal CodOperador,
            string NomeOperador, string DescricaoOperacao, Agendamento agd)
        {
            HistoricoAlteracaoAtendimento histalt = new HistoricoAlteracaoAtendimento();
            histalt.NomeCliente = atd.Cliente.Nome;
            histalt.CodigoCliente = atd.CodigoCliente;
            histalt.CodigoOperador = CodOperador;
            histalt.DataOperacao = DateTime.Now;
            histalt.DescricaoOperacao = DescricaoOperacao;
            histalt.DtHoraInicial = agd.DataHoraAgendamento;
            histalt.NomeAtendente = atd.NomeAtendente;
            histalt.NomeOperador = NomeOperador;
            histalt.NomeServico = agd.ServicoAgendado.Nome.ToUpper();

            Persistencia.PersistenciaHistoricoAlteracao.Gravar(histalt);
        }
        private void btnGravar_Click(object sender, RoutedEventArgs e)
        {
            if(!this.mskHoraFim.IsMaskCompleted)
            {
                Mensagens.ExibirMensagemAlerta(this, "É necessário informar a hora do fim do período!");
                return;
            }

            Regex reg = new Regex("^(?:0?[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$");
            if(!reg.IsMatch(this.mskHoraFim.Text))
            {
                Mensagens.ExibirMensagemAlerta(this, "A hora do fim do período está errada!");
                return;
            }

            String horaFimJornadaTrabalho = "23:00";

            DateTime DtHrBloqueioInicio = DateTime.Parse(this.DataDoBloqueio.ToShortDateString() + " " + HoraInicio);
            DateTime DtHrBloqueioFim = DateTime.Parse(this.DataDoBloqueio.ToShortDateString() + " " + mskHoraFim.Text);
            DateTime DtHrBloqueioFimReal = DtHrBloqueioFim.AddMinutes(-10); //ajustar de acordo com a grid, que sempre mostra o inicio do intervalo de 10min
            DateTime DtHrBloqueioFimJornadaTrab = DateTime.Parse(this.DataDoBloqueio.ToShortDateString() + " " + horaFimJornadaTrabalho);

            if (DtHrBloqueioInicio >= DtHrBloqueioFim)
            {
                Mensagens.ExibirMensagemAlerta(this, "A hora final deve ser maior que a hora inicial!");
                return;
            }

            if(DtHrBloqueioFim > DtHrBloqueioFimJornadaTrab)
            {
                Mensagens.ExibirMensagemAlerta(this, string.Format("A hora final deve ser menor do que as {0} !",horaFimJornadaTrabalho));
                return;
            }

            if(this.Atendimentos != null && this.Atendimentos.Count > 0)
            {
                Atendimento atd = this.Atendimentos.Where(a =>
                            a.DataHoraInicialAtendimento >= DtHrBloqueioInicio &&
                            a.DataHoraInicialAtendimento <= DtHrBloqueioFimReal &&
                            a.NomeAtendente == this.NomeAtendente)
                            .FirstOrDefault();

                if(atd != null && atd != default(Atendimento))
                {
                    Mensagens.ExibirMensagemAlerta(this, "Existe um atendimento agendado dentro do intervalo de bloqueio informado! Por favor informe outro intervalo!");
                    return;
                }
            }

            if(this.Bloqueios != null && this.Bloqueios.Count > 0)
            {
                if(this.ExisteBloqueioNoIntervalo(this.HoraInicio,this.mskHoraFim.Text, this.NomeAtendente))
                {
                    Mensagens.ExibirMensagemAlerta(this, "Já existe um bloqueio dentro do intervalo informado!");
                    return;
                }
            }

            WindowIdentificacao windowIdentificacao = new WindowIdentificacao();
            if (PersistenciaParametrizacao.ObterValorParametro("IDENTOPERADORAGENDAMENTO").Equals("S"))
            {
                windowIdentificacao.ShowDialog();
                if (!windowIdentificacao.AutenticadoComSucesso)
                {
                    return;
                }
            }

            Bloqueio blq = new Bloqueio();
            blq.NomeAtendente = this.NomeAtendente;
            blq.HoraInicio = this.HoraInicio;
            blq.HoraFim = this.mskHoraFim.Text;
            blq.Data = this.DataDoBloqueio;
            blq.TipoDoBloqueio = this.checkBox.IsChecked.GetValueOrDefault() ? TipoBloqueio.Encaixe : TipoBloqueio.Bloqueio;

            if(this.BloqueioSelecionado != null && this.BloqueioSelecionado != default(Bloqueio))
            {
                blq.Codigo = this.BloqueioSelecionado.Codigo;
                PersistenciaBloqueio.AtualizarBloqueio(blq);
            }
            else
            {
                PersistenciaBloqueio.GravarBloqueio(blq);
            }

            if (PersistenciaParametrizacao.ObterValorParametro("IDENTOPERADORAGENDAMENTO").Equals("S"))
            {
                HistoricoAlteracaoAtendimento hist = new HistoricoAlteracaoAtendimento();
                hist.CodigoOperador = windowIdentificacao.OperadorIdentificado.Codigo;
                hist.DataOperacao = DateTime.Now;
                hist.NomeCliente = "BLOQUEIO";
                hist.DescricaoOperacao = "BLOQUEIO DE HORÁRIO DE ATENDIMENTO";
                hist.NomeAtendente = this.NomeAtendente;

                hist.NomeOperador = windowIdentificacao.OperadorIdentificado.Nome;
                hist.DtHoraInicial = DateTime.ParseExact(this.DataDoBloqueio.ToShortDateString() + " " + this.HoraInicio, "dd/MM/yyyy HH:mm", new CultureInfo("pt-BR"));
                Persistencia.PersistenciaHistoricoAlteracao.Gravar(hist);
            }
            Mensagens.ExibirMensagemAlerta(this, "Dados gravados com sucesso!");
        }
        private HistoricoAlteracaoAtendimento ObterBaseHistAlteracaoAtendimento(Atendimento atd,
            decimal CodOperador, string NomeOperador, string DescricaoOperacao)
        {
            HistoricoAlteracaoAtendimento hist = new HistoricoAlteracaoAtendimento();
            hist.CodigoOperador = CodOperador;
            hist.CodigoCliente = atd.CodigoCliente;
            hist.DataOperacao = DateTime.Now;
            hist.DescricaoOperacao = DescricaoOperacao;
            hist.NomeAtendente = atd.NomeAtendente;
            hist.NomeCliente = atd.Cliente.Nome;
            hist.NomeOperador = NomeOperador;

            return hist;
        }