private TimeSpan recuperarHorarioCodigo(string horario, CodigoPonto codigoPonto)
        {
            int      codigo = 0;
            TimeSpan time   = new TimeSpan(0, 0, 0);

            if (horario.Length == 2)
            {
                codigo = Convert.ToInt32(horario);
            }
            else if (horario.Length > 2)
            {
                time = DataHoraUtil.recuperarHorarioFormatado(horario, ref codigo);
            }
            if (codigo == 13 || codigo == 14 || codigo == 18 || codigo == 68)
            {
                codigoPonto.Codigo68 += 1;
            }
            else if (codigo == 21)
            {
                codigoPonto.Codigo21 += +1;
            }
            else if (horario.StartsWith("#") || codigo == 99)
            {
                codigoPonto.Codigo99 += +1;
            }
            return(time);
        }
        private List <Tarefa> recuperarListaTarefa(string[] linhas)
        {
            FuncionarioDAO     fDAO = new FuncionarioDAO();
            List <Funcionario> listaCacheFuncionario = fDAO.Recuperar();

            List <Tarefa> listaTarefa = new List <Tarefa>();

            for (int i = 1; i < linhas.Length; i++)
            {
                string[] linha = linhas[i].Replace("\"", "").Split('\t');

                Tarefa tarefa = new Tarefa();
                tarefa.Tipo            = linha[0];
                tarefa.Id              = Convert.ToInt32(linha[1]);
                tarefa.Titulo          = linha[2];
                tarefa.CriadoPor       = identificarFuncionario(linha[3], listaCacheFuncionario);
                tarefa.Responsavel     = identificarFuncionario(linha[4], listaCacheFuncionario);
                tarefa.Status          = linha[5];
                tarefa.PlanejadoPara   = linha[6];
                tarefa.Pai             = linha[7].Replace("#", "");
                tarefa.DataCriacao     = Convert.ToDateTime(linha[8]);
                tarefa.DataModificacao = Convert.ToDateTime(linha[9]);
                tarefa.Projeto         = Convert.ToInt32(linha[10]);
                tarefa.Classificacao   = linha[11];
                tarefa.Estimativa      = DataHoraUtil.formatarHora(linha[12]);
                tarefa.TempoGasto      = DataHoraUtil.formatarHora(linha[13]);
                listaTarefa.Add(tarefa);
            }
            return(listaTarefa);
        }
        private void calcularCodigos(List <Siscop> listaSiscop, CodigoPonto codigoPonto, string[] linhas)
        {
            foreach (Siscop item in listaSiscop)
            {
                TimeSpan time1 = recuperarHorarioCodigo(item.Entrada1, codigoPonto);
                TimeSpan time2 = recuperarHorarioCodigo(item.Saida1, codigoPonto);
                TimeSpan time3 = recuperarHorarioCodigo(item.Entrada2, codigoPonto);
                TimeSpan time4 = recuperarHorarioCodigo(item.Saida2, codigoPonto);

                string diffManha = recuperarDiferencaHoras(item.Entrada1.Trim(), 1, item.Saida1.Trim(), 2, linhas, item.Responsavel.Nome);
                string diffTarde = recuperarDiferencaHoras(item.Entrada2.Trim(), 3, item.Saida2.Trim(), 4, linhas, item.Responsavel.Nome);
                string totalDia  = DataHoraUtil.calcularTotalDia(diffManha, diffTarde);

                if (totalDia.Length > 2 && Convert.ToInt32(totalDia.Substring(0, 2)) > 10)
                {
                    codigoPonto.Maior10 += 1;
                }

                if ((time1.Hours > 0 && time1.Hours < 7) || time4.Hours > 20)
                {
                    codigoPonto.Maior21 += 1;
                }

                codigoPonto.Flex = 0;

                if (diffManha.Length >= 5 && (Convert.ToInt32(diffManha.Substring(0, 2)) < 3 || (Convert.ToInt32(diffManha.Substring(0, 2)) == 5 && Convert.ToInt32(diffManha.Substring(3, 2)) > 0)))
                {
                    codigoPonto.Turno35 += 1;
                }

                if (diffTarde.Length >= 5 && (Convert.ToInt32(diffTarde.Substring(0, 2)) < 3 || (Convert.ToInt32(diffTarde.Substring(0, 2)) == 5 && Convert.ToInt32(diffTarde.Substring(3, 2)) > 0)))
                {
                    codigoPonto.Turno35 += 1;
                }

                if (diffManha.Length > 2 && Convert.ToInt32(diffManha.Substring(0, 2)) > 5 && Convert.ToInt32(diffTarde.Substring(3, 2)) > 0)
                {
                    codigoPonto.Turno6 += 1;
                }

                if (diffTarde.Length > 2 && Convert.ToInt32(diffTarde.Substring(0, 2)) > 5 && Convert.ToInt32(diffTarde.Substring(3, 2)) > 0)
                {
                    codigoPonto.Turno6 += 1;
                }

                string diffAlmoco = recuperarDiferencaHoras(item.Saida1.Trim(), 2, item.Entrada2.Trim(), 3, linhas, item.Responsavel.Nome);

                if (diffAlmoco.Length > 2 && Convert.ToInt32(diffAlmoco.Substring(0, 2)) < 1)
                {
                    codigoPonto.Intervalo1 += 1;
                }

                if (diffAlmoco.Length > 2 && Convert.ToInt32(diffAlmoco.Substring(0, 2)) > 1)
                {
                    codigoPonto.Intervalo2 += 1;
                }
            }
        }
        private string recuperarDiferencaHoras(string horario1, int opcao1, string horario2, int opcao2, string[] linhas, string nome)
        {
            if (horario1.Length == 0 || horario2.Length == 0 ||
                (horario1.Length == 2 && !horario1.Equals("21")) ||
                (horario2.Length == 2 && !horario2.Equals("21")))
            {
                return("");
            }
            TimeSpan time1 = DataHoraUtil.recuperarHora(horario1, linhas, nome, opcao1);
            TimeSpan time2 = DataHoraUtil.recuperarHora(horario2, linhas, nome, opcao2);

            return(time2.Subtract(time1).ToString().Substring(0, 5));
        }
        public void realizarUpload(String file)
        {
            string[] lines = System.IO.File.ReadAllLines(file);

            if (Util.validarArquivoTarefa(lines[0]) == true)
            {
                List <Funcionario> listaCacheFuncionario = new List <Funcionario>();

                TarefaDAO     tDAO             = new TarefaDAO();
                List <Tarefa> listaCacheTarefa = tDAO.recuperar();

                List <Tarefa> listaTarefaIncluir = new List <Tarefa>();

                List <Tarefa> listaTarefaAtualizar = new List <Tarefa>();

                List <Tarefa> listaTarefaHistorico = new List <Tarefa>();

                for (int i = 1; i < lines.Length; i++)
                {
                    string[] linha = lines[i].Replace("\"", "").Split('\t');

                    Tarefa t = new Tarefa();
                    // t.Codigo = reader.GetInt32(0);
                    t.Tipo                = linha[0];
                    t.Id                  = Convert.ToInt32(linha[1]);
                    t.Titulo              = linha[2];
                    t.Status              = linha[4];
                    t.PlanejadoPara       = linha[5];
                    t.Estimativa          = DataHoraUtil.formatarHora(linha[6]);
                    t.EstimativaCorrigida = DataHoraUtil.formatarHora(linha[7]);
                    t.TempoGasto          = DataHoraUtil.formatarHora(linha[8]);
                    t.Pai                 = linha[9].Replace("#", "");
                    t.DataColeta          = Convert.ToDateTime(txtData.Text);

                    String responsavel = linha[3];
                    t.Responsavel = recuperarFuncionario(listaCacheFuncionario, responsavel);

                    if (!existeTarefa(listaCacheTarefa, t))
                    {
                        listaTarefaIncluir.Add(t);
                    }
                    else
                    {
                        listaTarefaAtualizar.Add(t);
                    }
                    listaTarefaHistorico.Add(t);
                }

                if (listaTarefaIncluir.Count > 0)
                {
                    tDAO.incluir(listaTarefaIncluir);
                }
                if (listaTarefaAtualizar.Count > 0)
                {
                    tDAO.atualizar(listaTarefaAtualizar);
                }
                if (listaTarefaHistorico.Count > 0)
                {
                    TarefaHistoricoDAO thDAO = new TarefaHistoricoDAO();
                    thDAO.incluir(listaTarefaHistorico);
                }

                Alerta alerta = new Alerta("Arquivo incluido com sucesso!");
                alerta.Show();

                preencherLista(new Dictionary <string, string>());
            }
            else
            {
                Alerta alerta = new Alerta("Arquivo invalido");
                alerta.Show();
            }
        }
        private void executarAcao(DataGrid grid, int opcao, bool inteiro)
        {
            if (validarExibicaoTabela())
            {
                int      ano      = Convert.ToInt32(((ComboBoxItem)cmbAno.SelectedItem).Content);
                int      mes      = Convert.ToInt32(((ComboBoxItem)cmbMes.SelectedItem).Content);
                DateTime dtInicio = new DateTime(ano, mes, 1);
                DateTime dtFim    = new DateTime(ano, mes, DataHoraUtil.recuperarDiaFinalMes(ano, mes));

                FuncionarioDAO     fDAO             = new FuncionarioDAO();
                List <Funcionario> listaFuncionario = new List <Funcionario>();

                foreach (ListBoxItem item in lstFuncionario.SelectedItems)
                {
                    int codigo = Convert.ToInt32(item.Tag);
                    listaFuncionario.Add(fDAO.Recuperar(codigo));
                }

                SiscopBO      tDAO    = new SiscopBO();
                ApropriacaoBO apropBO = new ApropriacaoBO();

                List <Siscop> listaSiscop = new List <Siscop>();
                Dictionary <DateTime, decimal> apropriacaoPorDia = new Dictionary <DateTime, decimal>();

                foreach (Funcionario func in listaFuncionario)
                {
                    listaSiscop.AddRange(tDAO.recuperarSiscopPorResponsavel(func.Codigo, dtInicio, dtFim));
                    apropriacaoPorDia = apropBO.recuperarApropriacaoPorResponsavelPorDia(func.Nome, dtInicio, dtFim);
                }

                DataTable tabela = new DataTable();
                if (opcao == OpcaoIndicadorPonto.PONTO_BATIDO)
                {
                    object[] listaColunas = { "Data", "Apropriado", "Total", "Manha", "Almoco", "Tarde", "Extra", "Entrada 1", "Saida 1", "Entrada 2", "Saida 2", "Extra 1", "Extra 2" };
                    foreach (string str in listaColunas)
                    {
                        tabela.Columns.Add(Convert.ToString(str));
                    }

                    string   file   = @"C:\workspace-vs\DE607\csharp\GEP_DE607\GEP_DE607\Csv\siscopPadrao.csv";
                    string[] linhas = System.IO.File.ReadAllLines(file);

                    decimal totalHorarioApropriado = 0;
                    decimal totalPontoMes          = 0;

                    foreach (Siscop item in listaSiscop)
                    {
                        object[] linha = new object[listaColunas.Count()];

                        linha[0] = item.Data.ToShortDateString();

                        decimal horarioApropriado = recuperarHorarioApropriado(apropriacaoPorDia, item.Data);
                        linha[1] = horarioApropriado;
                        totalHorarioApropriado += horarioApropriado;

                        string diffManha = recuperarDiferencaHoras(item.Entrada1.Trim(), 1, item.Saida1.Trim(), 2, linhas, item.Responsavel.Nome);
                        linha[3] = diffManha;
                        string diffAlmoco = recuperarDiferencaHoras(item.Saida1.Trim(), 2, item.Entrada2.Trim(), 3, linhas, item.Responsavel.Nome);
                        linha[4] = diffAlmoco;
                        string diffTarde = recuperarDiferencaHoras(item.Entrada2.Trim(), 3, item.Saida2.Trim(), 4, linhas, item.Responsavel.Nome);
                        linha[5] = diffTarde;

                        //07:45
                        string totalDia = DataHoraUtil.calcularTotalDia(diffManha, diffTarde);
                        if (totalDia.Length > 0)
                        {
                            Decimal total = Convert.ToDecimal(totalDia.Substring(0, 2)) + Convert.ToDecimal(totalDia.Substring(3, 2)) / 60;
                            totalPontoMes += total;
                            linha[2]       = total.ToString("#.#");
                        }
                        else
                        {
                            linha[2] = totalDia;
                        }

                        linha[6]  = "";
                        linha[7]  = item.Entrada1;
                        linha[8]  = item.Saida1;
                        linha[9]  = item.Entrada2;
                        linha[10] = item.Saida2;
                        linha[11] = item.Extra1;
                        linha[12] = item.Extra2;
                        tabela.Rows.Add(linha);
                    }
                    lblTotalApropriadoMes.Content = totalHorarioApropriado.ToString("#.#");
                    lblTotalPontoMes.Content      = totalPontoMes.ToString("#.#");
                }
                else if (opcao == OpcaoIndicadorPonto.CODIGO_PONTO)
                {
                    object[] listaColunas = { "Codigo 68/13/14/18", "Codigo 21", "Codgo #/99", "> 10", "<7 ou >21", "Flex", "T <3 >5", "T >6", "Int <1", "Int >2" };
                    foreach (string str in listaColunas)
                    {
                        tabela.Columns.Add(Convert.ToString(str));
                    }

                    string   file   = @"C:\workspace-vs\DE607\csharp\GEP_DE607\GEP_DE607\Csv\siscopPadrao.csv";
                    string[] linhas = System.IO.File.ReadAllLines(file);

                    CodigoPonto codigoPonto = new CodigoPonto();

                    calcularCodigos(listaSiscop, codigoPonto, linhas);

                    object[] linha = new object[listaColunas.Count()];
                    linha[0] = codigoPonto.Codigo68;
                    linha[1] = codigoPonto.Codigo21;
                    linha[2] = codigoPonto.Codigo99;
                    linha[3] = codigoPonto.Maior10;
                    linha[4] = codigoPonto.Maior21;
                    linha[5] = codigoPonto.Flex;
                    linha[6] = codigoPonto.Turno35;
                    linha[7] = codigoPonto.Turno6;
                    linha[8] = codigoPonto.Intervalo1;
                    linha[9] = codigoPonto.Intervalo2;
                    tabela.Rows.Add(linha);
                }
                baseWindow.preencherGrid(grid, tabela, 80);
            }
        }