public void processarFechamento()
        {
            try
            {
                // verifica se já existe um fechamento para o dia
                PontoClassificacaoJornadaDTO classificacao = new PontoClassificacaoJornadaDTO {
                    Id = 1
                };
                PontoFechamentoJornadaDTO fechamento = new PontoFechamentoJornadaDTO();
                fechamento.PontoClassificacaoJornada = classificacao;
                fechamento.Colaborador = new ColaboradorDTO {
                    Id = ViewPontoMarcacaoSelected.IdColaborador
                };
                fechamento.DataFechamento = ViewPontoMarcacaoSelected.DataMarcacao;
                try
                {
                    using (ServicoPontoClient serv = new ServicoPontoClient())
                    {
                        //pega o horário comercial
                        PontoHorarioDTO horario = new PontoHorarioDTO {
                            Nome = "COMERCIAL"
                        };
                        List <PontoHorarioDTO> listaHorario = serv.selectPontoHorario(horario);
                        horario = listaHorario[0];

                        List <PontoFechamentoJornadaDTO> listaFechamento = serv.selectPontoFechamentoJornada(fechamento);

                        if (listaFechamento.Count > 0)
                        {
                            fechamento = listaFechamento[0];
                        }
                        fechamento.DiaSemana            = fechamento.DataFechamento.Value.ToString("ddd", new CultureInfo("pt-BR"));
                        fechamento.CodigoHorario        = horario.Codigo;
                        fechamento.CargaHorariaEsperada = horario.CargaHoraria;
                        fechamento.HoraInicioJornada    = horario.HoraInicioJornada;
                        fechamento.HoraFimJornada       = horario.HoraFimJornada;

                        serv.salvarAtualizarPontoFechamentoJornada(fechamento);

                        new PontoFechamentoJornadaViewModel().atualizarListaPontoFechamentoJornada(0);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public void gerarACJEF(string pDataIni, string pDataFim)
        {
            ComponentePonto.ComponentePonto ponto = new ComponentePonto.ComponentePonto();

            ACJEF_Cabecalho ACJEFCabecalho = new ACJEF_Cabecalho();

            // Registro 1 - Cabecalho

            /*
             * Campo01: String; // “000000000”.
             * Campo02: String; // Tipo do registro, “1”.
             * Campo03: String; // Tipo de identificador do empregador, “1” para CNPJ ou “2” para CPF.
             * Campo04: String; // CNPJ ou CPF do empregador.
             * Campo05: String; // CEI do empregador, quando existir.
             * Campo06: String; // Razão social ou nome do empregador.
             * Campo07: String; // Data inicial dos registros no arquivo, no formato “ddmmaaaa”.
             * Campo08: String; // Data final dos registros no arquivo, no formato “ddmmaaaa”.
             * Campo09: String; // Data de geração do arquivo, no formato “ddmmaaaa”.
             * Campo10: String; // Horário da geração do arquivo, no formato “hhmm”.
             */
            ACJEFCabecalho.Campo03 = "1";
            ACJEFCabecalho.Campo04 = Empresa.Cnpj;
            ACJEFCabecalho.Campo05 = "";
            ACJEFCabecalho.Campo06 = Empresa.RazaoSocial;
            ACJEFCabecalho.Campo07 = System.DateTime.Parse(pDataIni).ToString("ddMMyyyy");
            ACJEFCabecalho.Campo08 = System.DateTime.Parse(pDataFim).ToString("ddMMyyyy");
            ACJEFCabecalho.Campo09 = DateTime.Today.ToString("ddMMyyyy");
            ACJEFCabecalho.Campo10 = DateTime.Now.ToString("HHmm");
            ponto.ACJEFCabecalho   = ACJEFCabecalho;


            List <PontoHorarioDTO> listaPontoHorario = new List <PontoHorarioDTO>();

            try
            {
                using (ServicoPontoClient serv = new ServicoPontoClient())
                {
                    PontoHorarioDTO horario = new PontoHorarioDTO();
                    horario.Empresa   = Empresa;
                    listaPontoHorario = serv.selectPontoHorario(horario);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            if (listaPontoHorario.Count > 0)
            {
                List <ACJEF_Registro2> listaACJEFRegistro2 = new List <ACJEF_Registro2>();
                for (int i = 0; i < listaPontoHorario.Count; i++)
                {
                    // Registro 2 - Horários Contratuais

                    /*
                     * Campo01: String; // NSR.
                     * Campo02: String; // Tipo do registro, “2”.
                     * Campo03: String; // Código do Horário (CH), no formato “nnnn”.
                     * Campo04: String; // Entrada, no formato “hhmm”.
                     * Campo05: String; // Saída, no formato “hhmm”.
                     * Campo06: String; // Início intervalo, no formato “hhmm”.
                     * Campo07: String; // Fim intervalo, no formato “hhmm”.
                     */

                    ACJEF_Registro2 ACJEFRegistro2 = new ACJEF_Registro2();

                    ACJEFRegistro2.Campo03 = listaPontoHorario[i].Codigo;
                    if (listaPontoHorario[i].HoraInicioJornada.Trim().Length == 8)
                    {
                        ACJEFRegistro2.Campo04 = listaPontoHorario[i].HoraInicioJornada.Substring(0, 2) + listaPontoHorario[i].HoraInicioJornada.Substring(3, 2);
                    }
                    if (listaPontoHorario[i].HoraFimJornada.Trim().Length == 8)
                    {
                        ACJEFRegistro2.Campo05 = listaPontoHorario[i].HoraFimJornada.Substring(0, 2) + listaPontoHorario[i].HoraFimJornada.Substring(3, 2);
                    }
                    if (listaPontoHorario[i].Saida01.Trim().Length == 8)
                    {
                        ACJEFRegistro2.Campo06 = listaPontoHorario[i].Saida01.Substring(0, 2) + listaPontoHorario[i].Saida01.Substring(3, 2);
                    }
                    if (listaPontoHorario[i].Entrada02.Trim().Length == 8)
                    {
                        ACJEFRegistro2.Campo07 = listaPontoHorario[i].Entrada02.Substring(0, 2) + listaPontoHorario[i].Entrada02.Substring(3, 2);
                    }

                    listaACJEFRegistro2.Add(ACJEFRegistro2);
                }
                ponto.ListaACJEFRegistro2 = listaACJEFRegistro2;
            }


            List <ACJEF_Registro3>          listaACJEFRegistro3 = new List <ACJEF_Registro3>();
            PontoFechamentoJornadaViewModel fechamento          = new PontoFechamentoJornadaViewModel();

            for (int i = 0; i < fechamento.ListaPontoFechamentoJornada.Count; i++)
            {
                // Registro 3 - Detalhe

                /*
                 * Campo01: String; // NSR.
                 * Campo02: String; // tipo do registro, “3”.
                 * Campo03: String; // Número do PIS do empregado.
                 * Campo04: String; // Data de início da jornada, no formato “ddmmaaaa”.
                 * Campo05: String; // Primeiro horário de entrada da jornada, no formato “hhmm”.
                 * Campo06: String; // Código do horário (CH) previsto para a jornada, no formato “nnnn”.
                 * Campo07: String; // Horas diurnas não extraordinárias, no formato “hhmm”.
                 * Campo08: String; // Horas noturnas não extraordinárias, no formato “hhmm”.
                 * Campo09: String; // Horas extras 1, no formato “hhmm”.
                 * Campo10: String; // Percentual do adicional de horas extras 1, onde as 3 primeiras posições indicam a parte inteira e a seguinte a fração decimal.
                 * Campo11: String; // Modalidade da hora extra 1, assinalado com “D” se as horas extras forem diurnas e “N” se forem noturnas.
                 * Campo12: String; // Horas extras 2, no formato “hhmm”.
                 * Campo13: String; // Percentual do adicional de horas extras 2, onde as 3 primeiras posições indicam a parte inteira e a seguinte a fração decimal.
                 * Campo14: String; // Modalidade da hora extra 2, assinalado com “D” se as horas extras forem diurnas e “N” se forem noturnas.
                 * Campo15: String; // Horas extras 3, no formato “hhmm”.
                 * Campo16: String; // Percentual do adicional de horas extras 3, onde as 3 primeiras posições indicam a parte inteira e a seguinte a fração decimal.
                 * Campo17: String; // Modalidade da hora extra 3, assinalado com “D” se as horas extras forem diurnas e “N” se forem noturnas.
                 * Campo18: String; // Horas extras 4, no formato “hhmm”.
                 * Campo19: String; // Percentual do adicional de horas extras 4, onde as 3 primeiras posições indicam a parte inteira e a seguinte a fração decimal.
                 * Campo20: String; // Modalidade da hora extra 4, assinalado com “D” se as horas extras forem diurnas e “N” se forem noturnas.
                 * Campo21: String; // Horas de faltas e/ou atrasos.
                 * Campo22: String; // Sinal de horas para compensar. “1” se for horas a maior e “2” se for horas a menor.
                 * Campo23: String; // Saldo de horas para compensar no formato “hhmm”.
                 */

                ACJEF_Registro3 ACJEFRegistro3 = new ACJEF_Registro3();

                ACJEFRegistro3.Campo03 = fechamento.ListaPontoFechamentoJornada[i].Colaborador.PisNumero;
                ACJEFRegistro3.Campo04 = fechamento.ListaPontoFechamentoJornada[i].DataFechamento.Value.ToString("ddMMyyyy");
                if (fechamento.ListaPontoFechamentoJornada[i].Entrada01.Trim().Length == 8)
                {
                    ACJEFRegistro3.Campo05 = fechamento.ListaPontoFechamentoJornada[i].Entrada01.Substring(0, 2) + fechamento.ListaPontoFechamentoJornada[i].Entrada01.Substring(3, 2);
                }
                ACJEFRegistro3.Campo06 = fechamento.ListaPontoFechamentoJornada[i].CodigoHorario;
                if (String.IsNullOrEmpty(fechamento.ListaPontoFechamentoJornada[i].CargaHorariaDiurna).ToString().Trim().Length == 8)
                {
                    ACJEFRegistro3.Campo07 = fechamento.ListaPontoFechamentoJornada[i].CargaHorariaDiurna.Substring(0, 2) + fechamento.ListaPontoFechamentoJornada[i].CargaHorariaDiurna.Substring(3, 2);
                }
                if (String.IsNullOrEmpty(fechamento.ListaPontoFechamentoJornada[i].CargaHorariaNoturna).ToString().Trim().Length == 8)
                {
                    ACJEFRegistro3.Campo08 = fechamento.ListaPontoFechamentoJornada[i].CargaHorariaNoturna.Substring(0, 2) + fechamento.ListaPontoFechamentoJornada[i].CargaHorariaNoturna.Substring(3, 2);
                }

                if (String.IsNullOrEmpty(fechamento.ListaPontoFechamentoJornada[i].HoraExtra01).ToString().Trim().Length == 8)
                {
                    ACJEFRegistro3.Campo09 = fechamento.ListaPontoFechamentoJornada[i].HoraExtra01.Substring(0, 2) + fechamento.ListaPontoFechamentoJornada[i].HoraExtra01.Substring(3, 2);
                }
                ACJEFRegistro3.Campo10 = fechamento.ListaPontoFechamentoJornada[i].PercentualHoraExtra01.Value.ToString("000") + "0";
                ACJEFRegistro3.Campo11 = fechamento.ListaPontoFechamentoJornada[i].ModalidadeHoraExtra01;

                if (String.IsNullOrEmpty(fechamento.ListaPontoFechamentoJornada[i].HoraExtra02).ToString().Trim().Length == 8)
                {
                    ACJEFRegistro3.Campo12 = fechamento.ListaPontoFechamentoJornada[i].HoraExtra02.Substring(0, 2) + fechamento.ListaPontoFechamentoJornada[i].HoraExtra02.Substring(3, 2);
                }
                ACJEFRegistro3.Campo13 = fechamento.ListaPontoFechamentoJornada[i].PercentualHoraExtra02.Value.ToString("000") + "0";
                ACJEFRegistro3.Campo14 = fechamento.ListaPontoFechamentoJornada[i].ModalidadeHoraExtra02;

                if (String.IsNullOrEmpty(fechamento.ListaPontoFechamentoJornada[i].HoraExtra03).ToString().Trim().Length == 8)
                {
                    ACJEFRegistro3.Campo15 = fechamento.ListaPontoFechamentoJornada[i].HoraExtra03.Substring(0, 2) + fechamento.ListaPontoFechamentoJornada[i].HoraExtra03.Substring(3, 2);
                }
                ACJEFRegistro3.Campo16 = fechamento.ListaPontoFechamentoJornada[i].PercentualHoraExtra03.Value.ToString("000") + "0";
                ACJEFRegistro3.Campo17 = fechamento.ListaPontoFechamentoJornada[i].ModalidadeHoraExtra03;

                if (String.IsNullOrEmpty(fechamento.ListaPontoFechamentoJornada[i].HoraExtra04).ToString().Trim().Length == 8)
                {
                    ACJEFRegistro3.Campo18 = fechamento.ListaPontoFechamentoJornada[i].HoraExtra04.Substring(0, 2) + fechamento.ListaPontoFechamentoJornada[i].HoraExtra04.Substring(3, 2);
                }
                ACJEFRegistro3.Campo19 = fechamento.ListaPontoFechamentoJornada[i].PercentualHoraExtra04.Value.ToString("000") + "0";
                ACJEFRegistro3.Campo20 = fechamento.ListaPontoFechamentoJornada[i].ModalidadeHoraExtra04;

                if (String.IsNullOrEmpty(fechamento.ListaPontoFechamentoJornada[i].FaltaAtraso).ToString().Trim().Length == 8)
                {
                    ACJEFRegistro3.Campo21 = fechamento.ListaPontoFechamentoJornada[i].FaltaAtraso.Substring(0, 2) + fechamento.ListaPontoFechamentoJornada[i].FaltaAtraso.Substring(3, 2);
                }

                ACJEFRegistro3.Campo22 = fechamento.ListaPontoFechamentoJornada[i].Compensar;

                if (String.IsNullOrEmpty(fechamento.ListaPontoFechamentoJornada[i].BancoHoras).ToString().Trim().Length == 8)
                {
                    ACJEFRegistro3.Campo23 = fechamento.ListaPontoFechamentoJornada[i].BancoHoras.Substring(0, 2) + fechamento.ListaPontoFechamentoJornada[i].BancoHoras.Substring(3, 2);
                }

                listaACJEFRegistro3.Add(ACJEFRegistro3);
            }
            ponto.ListaACJEFRegistro3 = listaACJEFRegistro3;


            ACJEF_Trailer ACJEFTrailer = new ACJEF_Trailer();

            ponto.ACJEFTrailer = ACJEFTrailer;


            SaveFileDialog dialog = new SaveFileDialog();

            dialog.Filter           = "Arquivo ACJEF (*.txt) | *.txt";
            dialog.Title            = "Selecione o arquivo";
            dialog.InitialDirectory = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

            if (dialog.ShowDialog() == true)
            {
                ponto.gerarArquivoACJEF(dialog.FileName);
            }
        }