public Mensaje buscaPeriodoNominaActual(String claveTipoNomina, String claveTipoCorrida, decimal?idPeriodo, DateTime fechaActual, DBContextSimple dbContextSimple)
        {
            inicializaVariableMensaje();
            PeriodosNomina periodos = null;

            try {
                var query = from p in dbContextSimple.Set <PeriodosNomina>()
                            join t in dbContextSimple.Set <TipoNomina>() on p.tipoNomina.id equals t.id
                            join c in dbContextSimple.Set <TipoCorrida>() on p.tipoCorrida.id equals c.id
                            select new { p, t, c };
                if (idPeriodo == null)
                {
                    query = from sub in query
                            where (fechaActual >= sub.p.fechaInicial && fechaActual <= sub.p.fechaFinal) && sub.t.clave == claveTipoNomina && sub.c.clave == (claveTipoCorrida == null ? "PER" : claveTipoCorrida)
                            select sub;
                }
                else
                {
                    query = from sub in query
                            where sub.p.id == idPeriodo
                            select sub;
                }
                periodos = query.Select(p => p.p).Single();
                mensajeResultado.noError   = 0;
                mensajeResultado.error     = "";
                mensajeResultado.resultado = periodos;
            }
            catch (Exception ex) {
                System.Diagnostics.Debug.WriteLine(concatena.Remove(0, concatena.Length).Append(msgError).Append("buscaPeriodoNominaActual()1_Error: ").Append(ex));
                mensajeResultado.noError   = ControlErroresEntity.buscaNoErrorPorExcepcion(ex);
                mensajeResultado.error     = ex.GetBaseException().ToString();
                mensajeResultado.resultado = null;
            }
            return(mensajeResultado);
        }
 private Mensaje addValoresSemaforo(Mensaje mensaje, SemaforoCalculoNomina entity)
 {
     if (entity.periodosNomina.status == true)
     {
         PeriodosNomina periodo = null;
         //PeriodosNomina periodo = (PeriodosNomina)existeClave(PeriodosNomina.class.getSimpleName(), new String[]{"id", "status"}, new Object[]{entity.getPeriodoNomina().getId(), false}, null);
         if (periodo == null)
         {
             getSession().Set <SemaforoCalculoNomina>().Add(entity);
             mensaje.resultado = entity;
             mensaje.noError   = entity == null ? 1 : 0;
         }
         else
         {
             mensaje.resultado = null;
             mensaje.noError   = 2;
         }
     }
     else
     {
         getSession().Set <SemaforoCalculoNomina>().Add(entity);
         mensaje.resultado = entity;
         mensaje.noError   = entity == null ? 1 : 0;
     }
     return(mensaje);
 }
        private String nomenclaturaNombreArchivo(TipoNomina tipoNomina, PeriodosNomina periodosNomina, CFDIEmpleado cFDIEmpleado)
        {
            StringBuilder builder = new StringBuilder();

            builder.Append("TIPNOM_").Append((tipoNomina).clave).Append("_");
            builder.Append("PERIODO_").Append(periodosNomina.clave).Append("_");
            builder.Append("NUMEMP_").Append(cFDIEmpleado.plazasPorEmpleadosMov.plazasPorEmpleado.empleados.clave).Append("_");
            builder.Append("FOLIO_").Append(cFDIEmpleado.cfdiRecibo.serieCFDI).Append(cFDIEmpleado.cfdiRecibo.folioCFDI).Append(".xml");
            return(builder.ToString());
        }
        private List <VacacionesAplicacion> obtenerVacaciones(PeriodosNomina periodo, PlazasPorEmpleadosMov plazasPorEmpleadosMovEjecutandose, DateTime?fechaBajaFiniq, string claveTipoNomina, string claveTipoCorrida, bool isCorridaVacaciones, DBContextSimple dbContextSimple)
        {
            List <VacacionesAplicacion> listVacacionesAplicacion = null;

            try
            {
                if (periodo == null)
                {
                    return(new List <VacacionesAplicacion>());
                }


                if (fechaBajaFiniq != null)
                {
                    PeriodosNomina periodosNominaTmp = null;
                    if (fechaBajaFiniq != null)
                    {
                        periodosNominaTmp = (from p in dbContextSimple.Set <PeriodosNomina>()
                                             where p.tipoNomina.clave == claveTipoNomina && p.tipoCorrida.clave == claveTipoCorrida &&
                                             (fechaBajaFiniq >= p.fechaInicial && fechaBajaFiniq <= p.fechaFinal)
                                             select p).SingleOrDefault();
                    }
                    decimal idPeriodo = periodo.id;
                    if (periodosNominaTmp != null)
                    {
                        idPeriodo = periodosNominaTmp.id;
                    }
                    listVacacionesAplicacion = (from va in dbContextSimple.Set <VacacionesAplicacion>()
                                                //join vd in dbContextSimple.Set<VacacionesDisfrutadas>() on va.vacacionesDisfrutadas.id equals vd.id
                                                //join em in dbContextSimple.Set<Empleados>() on vd.empleados.id equals em.id
                                                //join pa in dbContextSimple.Set<PeriodosNomina>() on vd.periodoAplicacion.id equals pa.id
                                                where va.vacacionesDisfrutadas.periodoAplicacion_ID == idPeriodo && va.vacacionesDisfrutadas.empleados_ID == plazasPorEmpleadosMovEjecutandose.plazasPorEmpleado.empleados.id
                                                select va).ToList();
                }
                else
                {
                    listVacacionesAplicacion = (from va in dbContextSimple.Set <VacacionesAplicacion>()
                                                join vd in dbContextSimple.Set <VacacionesDisfrutadas>() on va.vacacionesDisfrutadas.id equals vd.id
                                                join em in dbContextSimple.Set <Empleados>() on vd.empleados.id equals em.id
                                                join pa in dbContextSimple.Set <PeriodosNomina>() on vd.periodoAplicacion.id equals pa.id
                                                where em.id == plazasPorEmpleadosMovEjecutandose.plazasPorEmpleado.empleados.id &&
                                                (vd.fechaPago >= periodo.fechaInicial && vd.fechaPago <= periodo.fechaFinal)
                                                select va).ToList();
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(concatena.Remove(0, concatena.Length).Append(msgError).Append("obtenerVacaciones()1_Error: ").Append(ex));
                mensajeResultado.noError   = ControlErroresEntity.buscaNoErrorPorExcepcion(ex);
                mensajeResultado.error     = ex.GetBaseException().ToString();
                mensajeResultado.resultado = null;
            }
            return(listVacacionesAplicacion);
        }
        private List <Asistencias> obtenerAsistencias(DateTime fechaInicial, DateTime fechaFinal, PeriodosNomina periodoNomina, DateTime?fechaBajaFiniq, string claveEmpleado, string claveRazonSocial,
                                                      string claveTipoNomina, string claveTipoCorrida, DateTime fechaRangoInicial, DateTime fechaRangoFinal, DBContextSimple dbContextSimple)
        {
            List <Asistencias> listAsistencias = null;

            try
            {
                if (periodoNomina == null)
                {
                    return(new List <Asistencias>());
                }
                if (fechaBajaFiniq != null)
                {
                    PeriodosNomina periodoNomTemp = (from p in dbContextSimple.Set <PeriodosNomina>()
                                                     where p.tipoNomina.clave == claveTipoNomina &&
                                                     p.tipoCorrida.clave == claveTipoCorrida &&
                                                     (fechaBajaFiniq >= p.fechaInicial && fechaBajaFiniq <= p.fechaFinal)
                                                     select p).SingleOrDefault();
                    if (periodoNomTemp == null)
                    {
                        fechaInicial = fechaRangoInicial;
                        fechaFinal   = fechaRangoFinal;
                    }
                    else
                    {
                        fechaInicial = periodoNomTemp.fechaInicial.GetValueOrDefault();
                        fechaFinal   = periodoNomTemp.fechaFinal.GetValueOrDefault();
                    }
                }
                listAsistencias = (from a in dbContextSimple.Set <Asistencias>()
                                   where a.empleados.clave == claveEmpleado && a.tipoNomina.clave == claveTipoNomina && a.razonesSociales.clave == claveRazonSocial &&
                                   a.periodosNomina.tipoCorrida.clave == claveTipoCorrida && (a.fecha >= fechaInicial && a.fecha <= fechaFinal)
                                   select a).ToList();
                listAsistencias = listAsistencias == null ? new List <Asistencias>() : listAsistencias;
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(concatena.Remove(0, concatena.Length).Append(msgError).Append("obtenerAsistencias()1_Error: ").Append(ex));
                mensajeResultado.noError = ControlErroresEntity.buscaNoErrorPorExcepcion(ex);
                mensajeResultado.error   = ex.GetBaseException().ToString();
                listAsistencias          = new List <Asistencias>();
            }
            return(listAsistencias);
        }
        private Asistencias creaAsistenciaIncapacidad(Empleados emp, TipoNomina nomina, DateTime fecha, Excepciones excepcion, PeriodosNomina periodo, RazonesSociales razonesSociales)
        {
            List <Asistencias> listAsistencia = getAsistenciasPorRangoFechas(emp.clave, fecha, fecha, razonesSociales.clave);//JSA02
            Asistencias        asist          = new Asistencias();

            if (listAsistencia == null)
            {
                listAsistencia = new List <Asistencias>();
            }
            if (listAsistencia.Count > 0)
            {
                asist = listAsistencia[0];
            }
            asist.razonesSociales = razonesSociales;
            asist.empleados       = emp;
            asist.tipoNomina      = nomina;
            asist.periodosNomina  = periodo;
            asist.excepciones     = excepcion;
            asist.fecha           = fecha;
            asist.jornada         = 8.0;
            asist.tipoPantalla    = 100;

            return(asist);
        }
        private List <Asistencias> creaListaAsistenciasIncapacidad(List <Asistencias> asistencias, RegistroIncapacidad registroIncapacidad, DatosGlobales datoGlobal, RazonesSociales razonesSociales, List <DateTime> diasFestivos, DateTime fechaIniEmpalme, DateTime fechaFinEmpalme, DateTime fechaInicial, DateTime fechaFinal)
        {
            int                   i, j, k, cont = 0, orden = 0;
            TipoNomina            nomina;
            List <PeriodosNomina> periodos;
            PeriodosNomina        periodo = null;
            Asistencias           asis;

            try
            {
                DateTime fechainicio = DateTime.Now;
                if (asistencias.Count == 0)
                {
                    fechainicio = Convert.ToDateTime(registroIncapacidad.fechaInicial);
                    for (i = 0; i < registroIncapacidad.diasIncapacidad; i++)
                    {
                        fechainicio = fechainicio.AddDays(cont);
                        cont        = 1;
                        for (k = 0; k < datoGlobal.plazas.Count; k++)
                        {
                            nomina   = datoGlobal.plazas[k].tipoNomina;
                            periodos = (List <PeriodosNomina>)datoGlobal.mapTipoNomina[nomina.clave];
                            for (j = 0; j < periodos.Count; j++)
                            {
                                if (fechainicio.CompareTo(periodos[j].fechaInicial) > 0 && fechainicio.CompareTo(periodos[j].fechaFinal) < 0 || fechainicio.CompareTo(periodos[j].fechaInicial) == 0 || fechainicio.CompareTo(periodos[j].fechaFinal) == 0)
                                {
                                    periodo = periodos[j];
                                    break;
                                }
                            }
                            asis         = creaAsistenciaIncapacidad(registroIncapacidad.empleados, nomina, fechainicio, datoGlobal.excepIncapacidad, periodo, razonesSociales);
                            asis.ordenId = orden;
                            orden++;
                            asistencias.Add(asis);
                        }
                    }
                }
                else
                {
                    List <Asistencias> cambiosAsistencias = new List <Asistencias>();
                    List <DateTime>    listFechas         = new List <DateTime>();
                    for (i = 0; i < registroIncapacidad.diasIncapacidad; i++)
                    {
                        fechainicio = Convert.ToDateTime(registroIncapacidad.fechaInicial);
                        fechainicio = fechainicio.AddDays(i);
                        listFechas.Add(fechainicio);
                    }
                    cont = 0;
                    j    = 0;
                    bool existe;
                    fechainicio = DateTime.Now;
                    while (j < asistencias.Count)
                    {
                        existe      = false;
                        cont        = 0;
                        fechainicio = Convert.ToDateTime(registroIncapacidad.fechaInicial);
                        for (i = 0; i < registroIncapacidad.diasIncapacidad; i++)
                        {
                            fechainicio = fechainicio.AddDays(cont);
                            cont        = 1;
                            if (fechainicio.CompareTo(asistencias[j].fecha) == 0)
                            {
                                existe = true;
                                listFechas.Remove(fechainicio);
                                break;
                            }
                        }

                        if (existe)
                        {
                            asistencias[j].excepciones = datoGlobal.excepIncapacidad;
                            cambiosAsistencias.Add(asistencias[j]);
                            asistencias.RemoveAt(j);
                        }
                        else
                        {
                            j++;
                        }
                    }
                    for (i = 0; i < listFechas.Count; i++)
                    {
                        fechainicio = listFechas[i];
                        for (k = 0; k < datoGlobal.plazas.Count; k++)
                        {
                            nomina   = datoGlobal.plazas[k].tipoNomina;
                            periodos = (List <PeriodosNomina>)datoGlobal.mapTipoNomina[nomina.clave];
                            for (j = 0; j < periodos.Count; j++)
                            {
                                if (fechainicio.CompareTo(periodos[j].fechaInicial) > 0 && fechainicio.CompareTo(periodos[j].fechaFinal) < 0 || fechainicio.CompareTo(periodos[j].fechaInicial) == 0 || fechainicio.CompareTo(periodos[j].fechaFinal) == 0)
                                {
                                    periodo = periodos[j];
                                    break;
                                }
                                asis = creaAsistenciaIncapacidad(registroIncapacidad.empleados, nomina, fechainicio, datoGlobal.excepIncapacidad, periodo, razonesSociales);
                                cambiosAsistencias.Add(asis);
                            }
                        }
                    }
                    bool isdiasFestivos;
                    for (i = 0; i < asistencias.Count; i++)
                    {
                        isdiasFestivos = false;
                        for (j = 0; j < diasFestivos.Count; j++)
                        {
                            if (diasFestivos[j].CompareTo(asistencias[i].fecha) == 0)
                            {
                                isdiasFestivos = true;
                                break;
                            }
                        }
                        if (isdiasFestivos)
                        {
                            asistencias[i].excepciones = datoGlobal.excepFestivo;
                            asistencias[i].jornada     = 0.0;
                        }
                        else
                        {
                            if (fechaIniEmpalme != null && fechaFinEmpalme != null)
                            {
                                if (!(Convert.ToDateTime(asistencias[i].fecha).CompareTo(fechaIniEmpalme) >= 0 && (Convert.ToDateTime(asistencias[i].fecha).CompareTo(fechaFinEmpalme) <= 0)))
                                {
                                    asistencias[i].excepciones = datoGlobal.excepDefault;
                                    asistencias[i].jornada     = 8.0;
                                }
                            }
                            else
                            {
                                if (!(Convert.ToDateTime(asistencias[i].fecha).CompareTo(fechaIniEmpalme) >= 0 && (Convert.ToDateTime(asistencias[i].fecha).CompareTo(fechaFinEmpalme) <= 0)))
                                {
                                    asistencias[i].excepciones = datoGlobal.excepDefault;
                                    asistencias[i].jornada     = 8.0;
                                }
                            }
                        }
                    }
                    //Utilerias.ordena(cambiosAsistencias, "Fecha");
                    for (i = 0; i < cambiosAsistencias.Count; i++)
                    {
                        cambiosAsistencias[i].ordenId = i;
                    }
                    asistencias = cambiosAsistencias;
                }
            }
            catch (Exception ex)
            {
                commit = false;
                mensajeResultado.noError = 200;
                mensajeResultado.error   = ex.Message;
            }
            return(asistencias);
        }
        static public String construyeRutaXML(RazonesSociales razonesSociales, TipoNomina tipoNomina, PeriodosNomina periodosNomina)
        {
            StringBuilder builder = new StringBuilder();
            String        ruta    = razonesSociales.ubicacionXML;

            try
            {
                if (ruta == null ? true : !ruta.Any())
                {
                    string path = System.IO.Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)).FullName;
                    if (Environment.OSVersion.Version.Major >= 6)
                    {
                        ruta = System.IO.Directory.GetParent(path).ToString();
                    }
                }
                builder.Append(ruta).Append(System.IO.Path.DirectorySeparatorChar).Append(razonesSociales.clave).Append("-").Append(razonesSociales.rfc);


                bool continuar = true;
                if (!System.IO.Directory.Exists(builder.ToString()))
                {
                    System.IO.Directory.CreateDirectory(builder.ToString());
                }

                if (continuar)
                {
                    builder.Append(System.IO.Path.DirectorySeparatorChar);
                    builder.Append(tipoNomina.clave);
                    if (!System.IO.Directory.Exists(builder.ToString()))
                    {
                        System.IO.Directory.CreateDirectory(builder.ToString());
                    }
                }
                if (continuar)
                {
                    builder.Append(System.IO.Path.DirectorySeparatorChar);
                    builder.Append(periodosNomina.año);
                    if (!System.IO.Directory.Exists(builder.ToString()))
                    {
                        System.IO.Directory.CreateDirectory(builder.ToString());
                    }
                }
                if (continuar)
                {
                    builder.Append(System.IO.Path.DirectorySeparatorChar);
                    builder.Append(periodosNomina.clave);
                    if (!System.IO.Directory.Exists(builder.ToString()))
                    {
                        System.IO.Directory.CreateDirectory(builder.ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                // System.out.println("ERROR AL CREAR LA CARPETA " + file.getAbsolutePath());
                builder.Remove(0, builder.Length).Append(ruta);
            }
            return(builder.ToString());
        }
        public List <CFDIEmpleado> generaComprobanteV33(TipoNomina tipoNomina, PeriodosNomina periodosNomina, List <CFDIEmpleado> listCFDIEmpleados, ConfiguraTimbrado configuraTimbrado, System.Xml.Xsl.XslCompiledTransform transformerCadenaOriginal, DBContextAdapter dbContextSimple)
        {
            Comprobante oComprobante = new Comprobante();
            //aqui va que agarre el certificado de donde se tiene configurado
            ConcepNomDefi conceptoNominaSubsidio = servicioCFDIEmpleado.getConceptoNominaSubsidio(dbContextSimple);

            /* string pathCer = ruta;
             * string pathKey = ruta;*/
            string pathXML = ruta;
            // string clavePrivada = null;
            SelloDigital oSelloDigital     = new SelloDigital();
            Certificados certificadoActual = new Certificados();


            listCFDIEmpleados = listCFDIEmpleados == null ? new List <CFDIEmpleado>() : listCFDIEmpleados;
            List <object> timbreFiscalDigitales;

            try
            {
                List <DatosEmpleadoComprobate> datosEmpleadoComprobates = new List <DatosEmpleadoComprobate>();
                if (listCFDIEmpleados.Count > 0)
                {
                    RazonesSociales razonSocial = listCFDIEmpleados[0].razonesSociales;
                    int             i, j;
                    String          nombreFile;
                    certificadoActual = servicioCertificado.certificadoActualId(razonSocial.id, dbContextSimple);


                    StringBuilder pathXmlExistentes = new StringBuilder();
                    pathXmlExistentes.Append(construyeRutaXML(razonSocial, tipoNomina, periodosNomina)).Append(System.IO.Path.DirectorySeparatorChar);
                    /*******************Busca documentos ya existentes********************/
                    Comprobante comprobanteExistentes;
                    ConstruyeTimbreFiscalDigital11 timbreDigitalCadenaOrig = null;
                    List <CFDIEmpleado>            listCFDIEmpleadosTimbrados = new List <CFDIEmpleado>();
                    String ruta2 = pathXmlExistentes.ToString(), nombreArchivo;
                    for (i = 0; i < listCFDIEmpleados.Count(); i++)
                    {
                        nombreArchivo = nomenclaturaNombreArchivo(tipoNomina, periodosNomina, listCFDIEmpleados[i]);

                        if (listCFDIEmpleados[i].cfdiRecibo.statusTimbrado == StatusTimbrado.TIMBRADO)
                        {
                            XmlDocument  doc = new XmlDocument();
                            MemoryStream ms  = new MemoryStream(listCFDIEmpleados[i].cfdiRecibo.xmlTimbrado);
                            doc.Load(ms);
                            XmlSerializer oXmlSerializar = new XmlSerializer(typeof(Comprobante));
                            using (XmlReader writer = new XmlNodeReader(doc))
                            {
                                comprobanteExistentes = (Comprobante)oXmlSerializar.Deserialize(writer);
                            }

                            CreateXML(comprobanteExistentes, string.Concat(ruta2, nombreArchivo));
                            listCFDIEmpleadosTimbrados.Add(listCFDIEmpleados[i]);
                        }
                    }

                    if (listCFDIEmpleadosTimbrados.Count() > 0)
                    {
                        for (i = 0; i < listCFDIEmpleadosTimbrados.Count; i++)
                        {
                            listCFDIEmpleados.Remove(listCFDIEmpleadosTimbrados[i]);
                        }
                    }

                    Comprobante       comprobante = null;
                    ConstruyeNomina12 creaXmlNomina = new ConstruyeNomina12();
                    Nomina            nomina12;

                    if (listCFDIEmpleados.Count > 0)
                    {
                        for (i = 0; i < listCFDIEmpleados.Count; i++)
                        {
                            if (listCFDIEmpleados[i].cfdiRecibo.statusXmlSat == StatusXmlSat.NINGUNO)
                            {
                                listCFDIEmpleados[i].certificadoAsignado = certificadoActual;
                                comprobante = construyeComprobante(listCFDIEmpleados[i]);
                                listCFDIEmpleados[i].cfdiRecibo.fechaEmision = fechaGeneraXML;
                                nomina12 = creaXmlNomina.generaComplementoNomina(listCFDIEmpleados[i], conceptoNominaSubsidio);
                                if (creaXmlNomina.mensajeNomina.noError > 0)
                                {
                                    DatosEmpleadoComprobate errorNominaDatos = new DatosEmpleadoComprobate(listCFDIEmpleados[i], comprobante);
                                    datosEmpleadoComprobates.Add(new DatosEmpleadoComprobate(listCFDIEmpleados[i], comprobante));
                                    errorNominaDatos.cfdiEmpleado.mensaje = creaXmlNomina.mensajeNomina.error;
                                }
                                else
                                {
                                    comprobante = agregarComplementoNomina(comprobante, nomina12);
                                    datosEmpleadoComprobates.Add(new DatosEmpleadoComprobate(listCFDIEmpleados[i], comprobante));
                                }
                            }
                            else if (listCFDIEmpleados[i].cfdiRecibo.statusXmlSat == StatusXmlSat.ENVIADO_SAT)
                            {
                                try
                                {
                                    XmlDocument  doc = new XmlDocument();
                                    MemoryStream ms  = new MemoryStream(listCFDIEmpleados[i].cfdiRecibo.xmlTimbrado);
                                    doc.Load(ms);
                                    XmlSerializer oXmlSerializar = new XmlSerializer(typeof(Comprobante));
                                    using (XmlReader writer = new XmlNodeReader(doc))
                                    {
                                        comprobante = (Comprobante)oXmlSerializar.Deserialize(writer);
                                    }
                                }
                                catch (Exception)
                                {
                                    listCFDIEmpleados[i].certificadoAsignado     = certificadoActual;
                                    listCFDIEmpleados[i].cfdiRecibo.statusXmlSat = StatusXmlSat.NINGUNO;
                                    comprobante = construyeComprobante(listCFDIEmpleados[i]);
                                    listCFDIEmpleados[i].cfdiRecibo.fechaEmision = fechaGeneraXML;
                                    nomina12    = creaXmlNomina.generaComplementoNomina(listCFDIEmpleados[i], conceptoNominaSubsidio);
                                    comprobante = agregarComplementoNomina(comprobante, nomina12);
                                }
                                datosEmpleadoComprobates.Add(new DatosEmpleadoComprobate(listCFDIEmpleados[i], comprobante));
                            }
                        }
                        CFDIRecibo recibo;
                        for (i = 0; i < datosEmpleadoComprobates.Count; i++)
                        {
                            if (datosEmpleadoComprobates[i].cfdiEmpleado.cfdiRecibo.statusXmlSat == StatusXmlSat.NINGUNO)
                            {
                                nombreFile = nomenclaturaNombreArchivo(tipoNomina, periodosNomina, datosEmpleadoComprobates[i].cfdiEmpleado);
                                CreateXML(datosEmpleadoComprobates[i].comprobante, string.Concat(ruta2, nombreFile));
                                string cadenaOriginal = getCadenaoriginal(string.Concat(ruta2, nombreFile));


                                //byte[] ClavePrivada1 = razonSocial.llaveSAT;
                                byte[] ClavePrivada1 = certificadoActual.llavePrivada;
                                datosEmpleadoComprobates[i].comprobante.Sello = oSelloDigital.Sellar(cadenaOriginal, ClavePrivada1, certificadoActual.password);
                                CreateXML(datosEmpleadoComprobates[i].comprobante, string.Concat(ruta2, nombreFile));
                                recibo                   = datosEmpleadoComprobates[i].cfdiEmpleado.cfdiRecibo;
                                recibo.total             = Convert.ToDouble(datosEmpleadoComprobates[i].comprobante.Total);
                                recibo.folioCFDI         = datosEmpleadoComprobates[i].comprobante.Folio;
                                recibo.noCertificado     = datosEmpleadoComprobates[i].comprobante.NoCertificado;
                                recibo.sello             = (datosEmpleadoComprobates[i].comprobante.Sello);
                                recibo.serieCFDI         = (datosEmpleadoComprobates[i].comprobante.Serie);
                                recibo.cadenaCertificado = (datosEmpleadoComprobates[i].comprobante.Certificado);
                                recibo.version           = (datosEmpleadoComprobates[i].comprobante.Version);
                                recibo.serie             = (datosEmpleadoComprobates[i].comprobante.Serie);

                                datosEmpleadoComprobates[i].cfdiEmpleado.cfdiRecibo = (recibo);

                                datosEmpleadoComprobates[i].archivoByte   = System.IO.File.ReadAllBytes(string.Concat(ruta2, nombreFile));
                                datosEmpleadoComprobates[i].nombreArchivo = nombreFile;
                            }
                            else if (datosEmpleadoComprobates[i].cfdiEmpleado.cfdiRecibo.statusXmlSat == StatusXmlSat.ENVIADO_SAT)
                            {
                                nombreFile = nomenclaturaNombreArchivo(tipoNomina, periodosNomina, datosEmpleadoComprobates[i].cfdiEmpleado);
                                datosEmpleadoComprobates[i].archivoByte   = datosEmpleadoComprobates[i].cfdiEmpleado.cfdiRecibo.xmlTimbrado;
                                datosEmpleadoComprobates[i].nombreArchivo = nombreFile;
                            }
                        }

                        List <InfoExtra> infoExtras = new List <InfoExtra>();
                        InfoExtra        infoExtra;

                        for (i = 0; i < datosEmpleadoComprobates.Count; i++)
                        {
                            datosEmpleadoComprobates[i].statusTimbrado = (StatusTimbrado.EN_PROCESO);
                            infoExtra = new InfoExtra();

                            infoExtra.archivoXML    = (datosEmpleadoComprobates[i].archivoByte);
                            infoExtra.nombreArchivo = (datosEmpleadoComprobates[i].nombreArchivo);
                            infoExtra.rfcEmisor     = (datosEmpleadoComprobates[i].comprobante.Emisor.Rfc);
                            infoExtra.rfcReceptor   = (datosEmpleadoComprobates[i].comprobante.Receptor.Rfc);
                            infoExtra.version       = (datosEmpleadoComprobates[i].comprobante.Version);
                            infoExtra.folio         = (datosEmpleadoComprobates[i].comprobante.Folio);
                            infoExtras.Add(infoExtra);
                            if (datosEmpleadoComprobates[i].cfdiEmpleado.cfdiRecibo.statusXmlSat == StatusXmlSat.NINGUNO)
                            {
                                datosEmpleadoComprobates[i].cfdiEmpleado.cfdiRecibo.statusXmlSat = (StatusXmlSat.ENVIADO_SAT);
                                datosEmpleadoComprobates[i].cfdiEmpleado.cfdiRecibo.xmlTimbrado  = (datosEmpleadoComprobates[i].archivoByte);
                                if (datosEmpleadoComprobates[i].cfdiEmpleado.id != 0)
                                {
                                    servicioCFDIEmpleado.actualizar(datosEmpleadoComprobates[i].cfdiEmpleado, dbContextSimple);
                                }
                            }
                        }

                        //timbrar
                        if (infoExtras.Count > 0)
                        {
                            //datos de timbrar desde la razon social
                            TimbrarXmlSat timbrarXmlSat = new TimbrarXmlSat();
                            InfoATimbrar  infoATimbrar  = new InfoATimbrar();
                            infoATimbrar.tipoOperacion  = (TipoOperacionWS.TIMBRAR);
                            infoATimbrar.infoExtras     = (infoExtras);
                            infoATimbrar.password       = configuraTimbrado.contraseña;
                            infoATimbrar.urlWebServices = configuraTimbrado.URL;
                            infoATimbrar.usuario        = configuraTimbrado.usuario;

                            timbreFiscalDigitales = timbrarXmlSat.generaTimbres(infoATimbrar, dbContextSimple);
                            if (timbrarXmlSat.error != null)
                            {
                                mensaje.noError   = 101;
                                mensaje.resultado = (timbrarXmlSat.error);
                                if (timbreFiscalDigitales.Count > 0)
                                {
                                    for (i = 0; i < timbreFiscalDigitales.Count; i++)
                                    {
                                        j = 0;
                                        DatosTimbreFiscalDigital info = (DatosTimbreFiscalDigital)timbreFiscalDigitales[i];

                                        while (j < datosEmpleadoComprobates.Count)
                                        {
                                            if (info.error != 0)
                                            {
                                                if (string.Equals((datosEmpleadoComprobates[j].folio == null ? "" : datosEmpleadoComprobates[j].folio), (info.folio == null ? "" : info.folio), StringComparison.OrdinalIgnoreCase))
                                                {
                                                    datosEmpleadoComprobates[j].cfdiEmpleado.mensaje = info.descripcion;
                                                }
                                            }

                                            j++;
                                        }
                                    }
                                }
                            }
                            timbreFiscalDigitales = timbreFiscalDigitales == null ? new List <object>() : timbreFiscalDigitales;

                            if (timbreFiscalDigitales.Count > 0)
                            {
                                XmlNode tfd;
                                ConstruyeTimbreFiscalDigital11 digital11 = new ConstruyeTimbreFiscalDigital11(ruta);

                                j = 0;
                                listCFDIEmpleados.Clear();
                                for (i = 0; i < timbreFiscalDigitales.Count; i++)
                                {
                                    while (j < datosEmpleadoComprobates.Count)
                                    {
                                        DatosTimbreFiscalDigital timbre = (DatosTimbreFiscalDigital)timbreFiscalDigitales[i];


                                        if (string.Equals((datosEmpleadoComprobates[j].folio == null ? "" : datosEmpleadoComprobates[j].folio), (timbre.folio == null ? "" : timbre.folio), StringComparison.OrdinalIgnoreCase))
                                        {
                                            if (string.Equals(timbre.status, "200", StringComparison.OrdinalIgnoreCase) || string.Equals(timbre.status, "307", StringComparison.OrdinalIgnoreCase))
                                            {
                                                //CreateXMLTimbreFiscal(digital11.contruyeTimbreFiscalDigital(timbreFiscalDigitales[i]), string.Concat(ruta2, "pruebaTimbre.xml"));

                                                recibo = datosEmpleadoComprobates[j].cfdiEmpleado.cfdiRecibo;
                                                CreateXML(datosEmpleadoComprobates[j].comprobante, string.Concat(ruta2, datosEmpleadoComprobates[j].nombreArchivo));
                                                string cadenaOriginal = getCadenaoriginal(string.Concat(ruta2, datosEmpleadoComprobates[j].nombreArchivo));
                                                recibo.cadenaCertificado   = cadenaOriginal;
                                                recibo.certificadoTimbrado = (timbre.noCertificadoSAT);
                                                recibo.noCertificadoSAT    = (timbre.noCertificadoSAT);
                                                recibo.fechaHoraTimbrado   = (timbre.fechaTimbrado);
                                                recibo.selloTimbrado       = (timbre.selloSAT);
                                                recibo.selloSAT            = (timbre.selloSAT);
                                                recibo.UUID           = (timbre.uuid);
                                                recibo.rfcProvCertif  = (timbre.referenciasProveedor);
                                                recibo.statusTimbrado = (StatusTimbrado.TIMBRADO);
                                                recibo.statusXmlSat   = (StatusXmlSat.RECIBIDO_SAT);
                                                recibo.xmlTimbrado    = (timbre.xmlTimbrado);


                                                string cadenaOriginalSAT1 = "||" + timbre.version + "|" + timbre.uuid + "|" + timbre.fechaTimbrado + "|" + timbre.referenciasProveedor;
                                                if (timbre.descripcion != "")
                                                {
                                                    cadenaOriginalSAT1 += "|" + timbre.descripcion + "|" + timbre.selloCFD + "|" + timbre.noCertificadoSAT + "||";
                                                }
                                                else
                                                {
                                                    cadenaOriginalSAT1 += "|" + timbre.selloCFD + "|" + timbre.noCertificadoSAT + "||";
                                                }

                                                recibo.cadenaOriginalTimbrado = cadenaOriginalSAT1;


                                                datosEmpleadoComprobates[j].cfdiEmpleado.recienTimbrado = (true);
                                                datosEmpleadoComprobates[j].cfdiEmpleado.cfdiRecibo     = (recibo);



                                                if (datosEmpleadoComprobates[i].cfdiEmpleado.id != 0)
                                                {
                                                    servicioCFDIEmpleado.actualizar(datosEmpleadoComprobates[j].cfdiEmpleado, dbContextSimple);
                                                }
                                            }
                                            else
                                            {
                                                datosEmpleadoComprobates[j].statusTimbrado = StatusTimbrado.ERROR;
                                                datosEmpleadoComprobates[j].cfdiEmpleado.cfdiRecibo.mensajeRec = (timbre.descripcion);

                                                datosEmpleadoComprobates[j].cfdiEmpleado.cfdiRecibo.statusTimbrado = StatusTimbrado.ERROR;
                                                datosEmpleadoComprobates[j].cfdiEmpleado.cfdiRecibo.statusXmlSat   = StatusXmlSat.NINGUNO;
                                                datosEmpleadoComprobates[j].cfdiEmpleado.cfdiRecibo.xmlTimbrado    = null;
                                                if (datosEmpleadoComprobates[j].cfdiEmpleado.id != 0)
                                                {
                                                    servicioCFDIEmpleado.actualizar(datosEmpleadoComprobates[j].cfdiEmpleado, dbContextSimple);
                                                }
                                            }

                                            datosEmpleadoComprobates[j].cfdiEmpleado.mensaje = (timbre.descripcion);
                                            listCFDIEmpleados.Add(datosEmpleadoComprobates[j].cfdiEmpleado);
                                            // datosEmpleadoComprobates.RemoveAt(j);
                                            j = 0;
                                            break;
                                        }

                                        else
                                        {
                                            j++;
                                        }
                                    }
                                }
                            }
                        }
                    }

                    if (listCFDIEmpleadosTimbrados.Count() > 0)
                    {
                        listCFDIEmpleados.AddRange(listCFDIEmpleadosTimbrados);
                        //                    Utilerias.ordena(listCFDIEmpleados, uuidCxn);
                    }
                }
            }
            catch (Exception ex)
            {
                throw;
            }


            return(listCFDIEmpleados);
        }
        public Mensaje cargarVariablesEmpleadoAsistencias(DateTime fechaInicial, DateTime fechaFinal, CalculoUnidades calculoUnidades, PeriodosNomina periodoNomina, DateTime?fechaBajaFiniq, bool?modificarDiasTrabajados, bool acumularAsis,
                                                          string claveEmpleado, string claveRazonSocial, string claveTipoNomina, string claveTipoCorrida, DateTime fechaRangoInicial, DateTime fechaRangoFinal, Dictionary <string, object> valoresConceptosEmpleados, DBContextSimple dbContextSimple)
        {
            try
            {
                inicializaVariableMensaje();
                pagarPrimero3Dias = 0;
                if (valoresConceptosEmpleados == null)
                {
                    valoresConceptosEmpleados = new Dictionary <string, object>();
                }
                double diasAusencias = 0, diasIncapacidadEnfermedad = 0,
                       diasIncapacidadAccidente = 0, diasIncapacidadMaternidad = 0, diasOtrasIncapacidad = 0,
                       festivo = 0, descanso = 0, laborados = 0;
                double hrsExtraDoble = 0.0, hrsExtraTriple = 0.0, retardos = 0.0, permisoSinSueldo = 0.0, permisoConSueldo = 0.0,
                       descansoLaborado = 0.0, festivoLaborado = 0.0, domingoLaborado = 0.0, diasRetardos = 0.0, diasFaltas = 0.0;

                List <Asistencias> listAsistencias = obtenerAsistencias(fechaInicial, fechaFinal, periodoNomina, fechaBajaFiniq, claveEmpleado, claveRazonSocial, claveTipoNomina, claveTipoCorrida,
                                                                        fechaRangoInicial, fechaRangoFinal, dbContextSimple);
                if (mensajeResultado.noError != 0)
                {
                    return(mensajeResultado);
                }
                List <Asistencias> listAsistenciaIncapacidadEnfermedad = new List <Asistencias>();
                int i;
                for (i = 0; i < listAsistencias.Count; i++)
                {
                    switch (Convert.ToInt16(listAsistencias[i].excepciones.clave))
                    {
                    case 0:
                        laborados++;
                        break;

                    case 1:
                        retardos += listAsistencias[i].cantidad.GetValueOrDefault();
                        diasRetardos++;
                        break;

                    case 2:
                        if (listAsistencias[i].cantidad == null)
                        {
                            diasFaltas++;
                        }
                        else if (listAsistencias[i].cantidad.GetValueOrDefault() == 0.50)
                        {
                            diasFaltas = diasFaltas + 0.5;
                        }
                        else
                        {
                            diasFaltas++;
                        }
                        break;

                    case 3:
                        diasAusencias++;
                        break;

                    case 4:
                        permisoConSueldo++;
                        break;

                    case 5:
                        permisoSinSueldo++;
                        break;

                    case 6:
                        listAsistenciaIncapacidadEnfermedad.Add(listAsistencias[i]);
                        diasIncapacidadEnfermedad++;
                        break;

                    case 7:
                        diasIncapacidadAccidente++;
                        break;

                    case 8:
                        diasIncapacidadMaternidad++;
                        break;

                    case 9:
                        diasOtrasIncapacidad++;
                        break;

                    case 10:
                        descansoLaborado = listAsistencias[i].cantidad.GetValueOrDefault();
                        break;

                    case 11:
                        if (listAsistencias[i].excepciones.tipoDatoExcepcion == TipoDatoExcepcion.SINDATO)
                        {
                            festivoLaborado++;
                        }
                        else
                        {
                            festivoLaborado = listAsistencias[i].cantidad.GetValueOrDefault();
                        }
                        break;

                    case 12:
                        domingoLaborado = listAsistencias[i].cantidad.GetValueOrDefault();
                        break;

                    case 13:      ///"Tiempo extra == 13" falta
                        break;

                    case 14:
                        hrsExtraDoble = listAsistencias[i].cantidad.GetValueOrDefault();
                        break;

                    case 15:
                        hrsExtraTriple = listAsistencias[i].cantidad.GetValueOrDefault();
                        break;

                    case 16:
                        descanso++;
                        break;

                    case 17:
                        festivo++;
                        break;
                    }
                }

                if (listAsistencias.Count == 0)
                {
                    if (fechaRangoInicial.CompareTo(fechaRangoFinal) == 0)
                    {
                        laborados = 1;
                    }
                    else
                    {
                        laborados = cantidadDiasEntreDosFechas(fechaRangoInicial, fechaRangoFinal) + 1;
                    }
                }
                if (!acumularAsis)
                {
                    if (modificarDiasTrabajados == null ? true : modificarDiasTrabajados.GetValueOrDefault())
                    {
                        if (valoresConceptosEmpleados.ContainsKey("Laborado".ToUpper()))
                        {
                            valoresConceptosEmpleados["Laborado".ToUpper()] = laborados;
                        }
                        else
                        {
                            valoresConceptosEmpleados.Add("Laborado".ToUpper(), laborados);
                        }
                    }
                    valoresConceptosEmpleados["HorasExtrasDobles".ToUpper()] = hrsExtraDoble;
                    //valoresConceptosEmpleados.Add("HorasExtrasDobles".ToUpper(), hrsExtraDoble);
                    valoresConceptosEmpleados["HorasExtrasTriples".ToUpper()] = hrsExtraTriple;
                }

                int diasAPagar     = 0;
                int diasApagarIMSS = 0;
                pagarPrimero3Dias = 0;
                if (listAsistenciaIncapacidadEnfermedad.Count > 0)
                {
                    listAsistenciaIncapacidadEnfermedad = (from list in listAsistenciaIncapacidadEnfermedad orderby list.fecha select list).ToList();

                    List <RegistroIncapacidad> listRegistroIncapacidad = obtenerIncapacidadesPorEnfermedad(listAsistenciaIncapacidadEnfermedad[0].fecha.GetValueOrDefault(), listAsistenciaIncapacidadEnfermedad[listAsistenciaIncapacidadEnfermedad.Count - 1].fecha.GetValueOrDefault(), claveEmpleado, claveRazonSocial, dbContextSimple);
                    if (mensajeResultado.noError != 0)
                    {
                        return(mensajeResultado);
                    }
                    for (i = 0; i < listRegistroIncapacidad.Count; i++)
                    {
                        if (listRegistroIncapacidad[i].pagarTresPrimeroDias)
                        {
                            int diasIncapacidadEnf = listRegistroIncapacidad[i].diasIncapacidad.GetValueOrDefault();
                            diasApagarIMSS = diasIncapacidadEnf;
                            if (diasIncapacidadEnf <= 3)
                            {
                                diasAPagar = diasIncapacidadEnf;
                            }
                            else
                            {
                                diasAPagar = 3;
                            }
                            DateTime fechaIncap = listRegistroIncapacidad[i].fechaInicial.GetValueOrDefault();

                            for (int dias = 0; dias < diasIncapacidadEnf; dias++)
                            {
                                if ((fechaIncap.CompareTo(periodoNomina.fechaInicial) > 0 || fechaIncap.CompareTo(periodoNomina.fechaInicial) == 0)
                                    & (fechaIncap.CompareTo(periodoNomina.fechaFinal) == 0 || fechaIncap.CompareTo(periodoNomina.fechaFinal) < 0))
                                {
                                    if (diasAPagar > 0)
                                    {
                                        pagarPrimero3Dias++;
                                    }
                                    diasAPagar--;
                                    diasApagarIMSS--;
                                }
                                else if (fechaIncap.CompareTo(periodoNomina.fechaInicial) < 0)
                                {
                                    diasAPagar--;
                                    diasApagarIMSS--;
                                }
                                else if (fechaIncap.CompareTo(periodoNomina.fechaFinal) > 0)
                                {
                                    break;
                                }
                                if (diasAPagar == 0 | pagarPrimero3Dias == 3)
                                {
                                    break;
                                }
                                fechaIncap.AddDays(fechaIncap.Day + 1);
                            }
                            //diasIncapacidadEnfermedad = diasIncapacidadEnfermedad > 3 ? diasIncapacidadEnfermedad - 3 : 0;
                            ///diasIncapacidadEnfermedad = diasIncapacidadEnfermedad - diasUsadosPagar;
                        }
                    }
                }

                if (acumularAsis)
                {
                    valoresConceptosEmpleados["DiasIncapacidadEmpleadoAcum".ToUpper()] = diasIncapacidadEnfermedad + diasIncapacidadAccidente + diasIncapacidadMaternidad + diasOtrasIncapacidad;
                    valoresConceptosEmpleados["FaltasAcum".ToUpper()]     = diasFaltas;
                    valoresConceptosEmpleados["AusentismoAcum".ToUpper()] = diasAusencias;
                }
                else
                {
                    valoresConceptosEmpleados["IncapacidadEnfermedad".ToUpper()]   = diasIncapacidadEnfermedad;
                    valoresConceptosEmpleados["IncapacidadAccidente".ToUpper()]    = diasIncapacidadAccidente;
                    valoresConceptosEmpleados["IncapacidadMaternidad".ToUpper()]   = diasIncapacidadMaternidad;
                    valoresConceptosEmpleados["OtrasIncapacidad".ToUpper()]        = diasOtrasIncapacidad;
                    valoresConceptosEmpleados["DiasIncapacidadEmpleado".ToUpper()] = diasIncapacidadEnfermedad + diasIncapacidadAccidente + diasIncapacidadMaternidad + diasOtrasIncapacidad;
                    valoresConceptosEmpleados["Faltas".ToUpper()] = diasFaltas;//Parametro 128 0 dias dias faltas
                    if (modificarDiasTrabajados == null ? true : !modificarDiasTrabajados.GetValueOrDefault())
                    {
                        valoresConceptosEmpleados["Ausentismo".ToUpper()] = diasAusencias;
                    }
                    valoresConceptosEmpleados["TExtrasDiaDescanso".ToUpper()]     = descansoLaborado;
                    valoresConceptosEmpleados["TExtrasDiaFestivo".ToUpper()]      = festivoLaborado;
                    valoresConceptosEmpleados["TExtrasDiaDomingo".ToUpper()]      = domingoLaborado;
                    valoresConceptosEmpleados["Retardos".ToUpper()]               = retardos;
                    valoresConceptosEmpleados["DiasRetardos".ToUpper()]           = diasRetardos;
                    valoresConceptosEmpleados["PermisoConSueldo".ToUpper()]       = permisoConSueldo;
                    valoresConceptosEmpleados["PermisoSinSueldo".ToUpper()]       = permisoSinSueldo;
                    valoresConceptosEmpleados["DiasFestivos".ToUpper()]           = festivo;
                    valoresConceptosEmpleados["DiasDescanso".ToUpper()]           = descanso;
                    valoresConceptosEmpleados["DiasIncapacidadEmpresa".ToUpper()] = pagarPrimero3Dias;
                    valoresConceptosEmpleados["DiasIncapacidadIMSS".ToUpper()]    = diasApagarIMSS;
                    if (calculoUnidades != null)
                    {
                        if (modificarDiasTrabajados == null ? true : modificarDiasTrabajados.GetValueOrDefault())
                        {
                            calculoUnidades.diasTrabajados = laborados;
                        }
                        calculoUnidades.hrsExtraDoble             = hrsExtraDoble;
                        calculoUnidades.hrsExtraTriple            = hrsExtraTriple;
                        calculoUnidades.diasIncapacidadEnfermedad = Convert.ToInt32(diasIncapacidadEnfermedad);
                        calculoUnidades.diasIncapacidadAccidente  = Convert.ToInt32(diasIncapacidadAccidente);
                        calculoUnidades.diasIncapacidadMaternidad = Convert.ToInt32(diasIncapacidadMaternidad);
                        calculoUnidades.diasOtrasIncapacidades    = Convert.ToInt32(diasOtrasIncapacidad);
                        calculoUnidades.diasFalta = diasFaltas;
                        if (modificarDiasTrabajados == null ? true : !modificarDiasTrabajados.GetValueOrDefault())
                        {
                            calculoUnidades.diasAusentismo = Convert.ToInt32(diasAusencias);
                        }
                        calculoUnidades.diasDescansoLaborado = descansoLaborado;
                        calculoUnidades.diasFestivoLaborado  = festivoLaborado;
                        calculoUnidades.diasDomingoLaborado  = domingoLaborado;
                        calculoUnidades.diasRetardo          = retardos;
                        calculoUnidades.diasPermisoConSueldo = permisoConSueldo;
                        calculoUnidades.diasPermisoSinSueldo = permisoSinSueldo;
                        calculoUnidades.diasFestivo          = Convert.ToInt32(festivo);
                        calculoUnidades.diasDescanso         = Convert.ToInt32(descanso);
                    }
                }
                mensajeResultado.noError   = 0;
                mensajeResultado.resultado = valoresConceptosEmpleados;
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(concatena.Remove(0, concatena.Length).Append(msgError).Append("cargarVariablesEmpleadoAsistencias()1_Error: ").Append(ex));
                mensajeResultado.noError = ControlErroresEntity.buscaNoErrorPorExcepcion(ex);
                mensajeResultado.error   = ex.GetBaseException().ToString();
            }
            return(mensajeResultado);
        }
        private CFDIEmpleado costruyeCFDIEmpleado(DatosPorEmpleado datosPorEmpleado, PeriodosNomina periodoNomina, TipoCorrida tipoCorrida, TipoNomina nomina, DateTime fechaActual, RazonesSociales razonesSocialesActual)
        {
            CFDIEmpleado cfdiEmpleado = new CFDIEmpleado();

            PlazasPorEmpleadosMov ppem     = (PlazasPorEmpleadosMov)datosPorEmpleado.plazasPorEmpleadosMov;
            Empleados             empleado = ppem.plazasPorEmpleado.empleados;

            cfdiEmpleado.razonesSociales = (razonesSocialesActual);//MainPrincipal.getRazonesSocialesActual());
            //validaDatosRazonSocial(razonesSocialesActual);//MainPrincipal.getRazonesSocialesActual());
            cfdiEmpleado.tipoCorrida           = (tipoCorrida);
            cfdiEmpleado.tipoNomina            = (nomina);
            cfdiEmpleado.periodosNomina        = (periodoNomina);
            cfdiEmpleado.plazasPorEmpleadosMov = (ppem);
            cfdiEmpleado.nombre          = (empleado.nombre);
            cfdiEmpleado.apellidoMaterno = (empleado.apellidoMaterno);
            cfdiEmpleado.apellidoPaterno = (empleado.apellidoPaterno);
            camposNecesariosMsg.Append(empleado.CURP == null ? "Empleado_CURP|" : !empleado.CURP.Any() ? "Empleado_CURP|" : "");
            cfdiEmpleado.CURP = (empleado.CURP);
            camposNecesariosMsg.Append(empleado.RFC == null ? "Empleado_RFC|" : !empleado.RFC.Any() ? "Empleado_RFC|" : "");
            cfdiEmpleado.RFC        = (empleado.RFC);
            cfdiEmpleado.calle      = (empleado.domicilio);
            cfdiEmpleado.noExterior = (empleado.numeroExt);
            cfdiEmpleado.noInterior = (empleado.numeroInt);
            cfdiEmpleado.colonia    = (empleado.colonia);

            if (empleado.cp != null)
            {
                cfdiEmpleado.codigoPostal = (empleado.cp.clave);
            }
            if (empleado.ciudades != null)
            {
                cfdiEmpleado.ciudad = (empleado.ciudades.descripcion);
            }
            if (empleado.municipios != null)
            {
                cfdiEmpleado.municipio = (empleado.municipios.descripcion);
            }
            if (empleado.estados != null)
            {
                cfdiEmpleado.estado = (empleado.estados.clave);
            }
            if (empleado.paises == null)
            {
                camposNecesariosMsg.Append("Empleado_Pais|");
            }
            else
            {
                String pais = empleado.paises.descripcion;
                camposNecesariosMsg.Append(pais == null ? "Empleado_Pais|" : !pais.Any() ? "Empleado_Pais|" : "");
                cfdiEmpleado.pais = (pais);
            }
            cfdiEmpleado.correoElectronico = (empleado.correoElectronico);
            cfdiEmpleado.noSeguroSocial    = (empleado.IMSS);

            cfdiEmpleado.formaPago          = "99"; //dato fijo segun la guia de llenado
            cfdiEmpleado.noRegistroPatronal = (ppem.plazasPorEmpleado.registroPatronal == null ? null : ppem.plazasPorEmpleado.registroPatronal.registroPatronal.Replace(" ", "-"));
            cfdiEmpleado.tipoContrato       = (ppem.tipoContrato == null ? null : ppem.tipoContrato.clave);
            cfdiEmpleado.riesgoPuesto       = (ppem.plazasPorEmpleado.registroPatronal == null ? null : ppem.plazasPorEmpleado.registroPatronal.riesgoPuesto);
            camposNecesariosMsg.Append(ppem.plazasPorEmpleado.registroPatronal == null ? "RegistroPatronal_RiesgoPuesto|" : ppem.plazasPorEmpleado.registroPatronal.riesgoPuesto == null ? "RegistroPatronal_RiesgoPuesto|" : !ppem.plazasPorEmpleado.registroPatronal.riesgoPuesto.Any() ? "RegistroPatronal_RiesgoPuesto|" : "");
            cfdiEmpleado.puesto       = (ppem.puestos == null ? null : ppem.puestos.descripcion);
            cfdiEmpleado.departamento = (ppem.departamentos == null ? null : ppem.departamentos.descripcion);

            cfdiEmpleado.fechaInicioRelLaboral = (ppem.fechaInicial); /// fecha ingreso esta en ingresos y reingresos

            if (tipoCorrida == null ? false : string.Equals(tipoCorrida.clave, "ASI", StringComparison.OrdinalIgnoreCase))
            {//
             //  camposNecesariosMsg.Append(ppem.clabe == null ? "PlazasPorEmpleadosMov_CLABE|" : !ppem.clabe.Trim().Any() ? "PlazasPorEmpleadosMov_CLABE" : "");
            }
            //cfdiEmpleado.CLABE = (ppem.clabe);
            //camposNecesariosMsg.Append(ppem.bancos == null ? "PlazasPorEmpleadosMov_Bancos|" : "");
            //cfdiEmpleado.claveBancoSat = (ppem.bancos == null ? null : ppem.bancos.clave);

            //if (ppem.cuentaBancaria != null)
            //{
            //    cfdiEmpleado.cuentaBancaria = (ppem.cuentaBancaria.Replace("-", ""));
            //}
            camposNecesariosMsg.Append(ppem.regimenContratacion == null ? "PlazasPorEmpleadosMov_RegimenContratacion|" : "");
            cfdiEmpleado.regimenContratacion = (ppem.regimenContratacion);
            cfdiEmpleado.jornada             = (ppem.turnos == null ? null : ppem.turnos.Jornada == null ? null : ppem.turnos.Jornada.clave);

            camposNecesariosMsg.Append(periodoNomina.fechaPago == null ? "PeriodosNomina_FechaPago|" : "");
            cfdiEmpleado.fechaPago = (periodoNomina.fechaPago.GetValueOrDefault());
            camposNecesariosMsg.Append(periodoNomina.fechaFinal == null ? "PeriodosNomina_FechaFinal|" : "");
            cfdiEmpleado.fechaFinalPago = (periodoNomina.fechaFinal.GetValueOrDefault());
            camposNecesariosMsg.Append(periodoNomina.fechaInicial == null ? "PeriodosNomina_FechaInicial|" : "");
            cfdiEmpleado.fechaInicioPago = (periodoNomina.fechaInicial.GetValueOrDefault());
            camposNecesariosMsg.Append(periodoNomina.diasPago == null ? "PeriodosNomina_DiasPago|" : "");
            cfdiEmpleado.numeroDiasPago = (periodoNomina.diasPago.GetValueOrDefault());

            cfdiEmpleado.salIntIMSS      = (datosPorEmpleado.salarioDiarioIntegrado);
            cfdiEmpleado.salBaseCotAport = (ppem.sueldoDiario);
            if (datosPorEmpleado.fechaIngreso == null || fechaActual == null)
            {
                System.Diagnostics.Debug.WriteLine("Las fechas del empleado estan vacías");
            }                                                                                                                                                                  ////datosPorEmpleado.getFechaIngreso()
            cfdiEmpleado.antiguedad    = (Utilerias.cantidadSemanasEntreDosFechasStatic(ppem.fechaInicial.GetValueOrDefault(), periodoNomina.fechaFinal.GetValueOrDefault())); //calculado
            cfdiEmpleado.antiguedadYMD = (UtileriasSat.getAntiguedadYMD(ppem.fechaInicial.GetValueOrDefault(), periodoNomina.fechaFinal.GetValueOrDefault()));                 //calculado

            cfdiEmpleado.periodiciadadPago = (nomina.periodicidad.clave);

            return(cfdiEmpleado);
        }
        public List <CFDIEmpleado> generaDatosATimbrar(List <DatosParaTimbrar> datosParaTimbrados, PeriodosNomina periodoNomina, TipoNomina nomina, TipoCorrida tipoCorrida, DateTime fechaActual, RazonesSociales razonesSocialesActual)
        {
            if (datosParaTimbrados == null)
            {
                return(null);
            }


            // camposNecesariosMsg = new StringBuilder();


            int                 i;
            CFDIEmpleado        cfdiEmpleado;
            CFDIRecibo          cfdiRecibo;
            List <CFDIEmpleado> listCFDIEmpleado = new List <CFDIEmpleado>();

            for (i = 0; i < datosParaTimbrados.Count(); i++)
            {
                if (camposNecesariosMsg.Length > 0)
                {
                    camposNecesariosMsg.Remove(0, camposNecesariosMsg.Length);
                }
                cfdiEmpleado            = costruyeCFDIEmpleado(datosParaTimbrados[i].datosPorEmpleado, periodoNomina, tipoCorrida, nomina, fechaActual, razonesSocialesActual);
                cfdiRecibo              = construyeCFDIRecibo(datosParaTimbrados[i].movimientos, datosParaTimbrados[i].datosHorasExtras, datosParaTimbrados[i].datosIncapacidades, fechaActual);
                cfdiEmpleado.mensaje    = (camposNecesariosMsg.ToString());
                cfdiEmpleado.cfdiRecibo = (cfdiRecibo);

                if (camposNecesariosMsg.Length == 0)
                {
                    cfdiEmpleado.statusGeneraInfo = (true);
                }
                else
                {
                    cfdiEmpleado.statusGeneraInfo = (false);
                }
                listCFDIEmpleado.Add(cfdiEmpleado);
            }


            return(listCFDIEmpleado);
        }
        public Mensaje agregarVacacionesAuto(RazonesSociales razonSocial, PlazasPorEmpleadosMov plaEmp, PeriodosNomina periodoNomina, object[,] tablaFactorIntegracion, PagarPrimaVacionalyVacacionesAuto pagarVacaAuto, DBContextSimple dbContextSimple)
        {
            try
            {
                VacacionesDisfrutadas vacDis             = new VacacionesDisfrutadas();
                Mensaje vacDisgau                        = new Mensaje();
                VacacionesDisfrutadas    vacDisconId     = new VacacionesDisfrutadas();
                VacacionesDisfrutadasDAO vacaDisfrutadas = new VacacionesDisfrutadasDAO();
                VacacionesAplicacion     VacAplic        = new VacacionesAplicacion();
                VacacionesDevengadas     vacacionesDeven = null;
                DateTime fechaEmplado                    = new DateTime();

                if (vacDev.getDevengadaActual() == null || vacDev.getDevengadaActual().Count == 0)
                {
                    mensajeResultado = calcularVacacionesDevengadasEmpleados(razonSocial, tablaFactorIntegracion, dbContextSimple, null);
                    if (mensajeResultado.noError != 0)
                    {
                        return(mensajeResultado);
                    }
                }

                if (vacDev.getDevengadaActual().Count > 0)
                {
                    vacacionesDeven = vacDev.getDevengadaActual()[plaEmp.plazasPorEmpleado.empleados.clave];
                    DateTime calfecha       = new DateTime();
                    DateTime fechaActual    = DateTime.Now.Date;
                    DateTime calfechaActual = DateTime.Now;
                    if (vacacionesDeven != null)
                    {
                        vacacionAplicacionActual = new VacacionesAplicacion();
                        calfecha = plaEmp.plazasPorEmpleado.fechaPrestaciones.Value;
                        calfecha.AddYears(calfecha.Year + vacacionesDeven.ejercicio.Value);
                        fechaEmplado = calfecha.Date;
                        DateTime fechaPerIni   = periodoNomina.fechaInicial.Value.Date;
                        DateTime fechaPerFinal = periodoNomina.fechaFinal.Value.Date;
                        if (fechaEmplado.CompareTo(fechaPerIni) >= 0 && fechaEmplado.CompareTo(fechaPerFinal) <= 0)
                        {
                            if (pagarVacaAuto == PagarPrimaVacionalyVacacionesAuto.PRIMACACIONALALANIVERSARIO)
                            {
                                vacDis.empleados             = plaEmp.plazasPorEmpleado.empleados;
                                vacDis.diasPrimaDisfrutados  = vacacionesDeven.diasPrimaVaca;
                                vacDis.diasVacDisfrutados    = (0);
                                vacDis.ejercicioAplicacion   = calfechaActual.Year;
                                vacDis.pagarPrimaVacacional  = true;
                                vacDis.pagarVacaciones       = false;
                                vacDis.periodoAplicacion     = periodoNomina;
                                vacDis.periodoPago           = periodoNomina;
                                vacDis.razonesSociales       = razonSocial;
                                vacDis.registroInicial       = false;
                                vacDis.regresoVac            = calfechaActual;
                                vacDis.salidaVacac           = calfechaActual;
                                vacDis.statusVacaciones      = StatusVacaciones.PORCALCULAR;
                                vacDis.tipoNominaAplicacion  = periodoNomina.tipoNomina;
                                vacDis.tipoCorridaAplicacion = periodoNomina.tipoCorrida;
                                dbContextSimple.Set <VacacionesDisfrutadas>().Add(vacDis);
                                dbContextSimple.SaveChanges();

                                vacDisconId                    = vacDis;
                                VacAplic.diasPrima             = vacacionesDeven.diasPrimaVaca;
                                VacAplic.diasVac               = 0;
                                VacAplic.vacacionesDevengadas  = vacacionesDeven;
                                VacAplic.vacacionesDisfrutadas = vacDisconId;
                                dbContextSimple.Set <VacacionesAplicacion>().AddOrUpdate(VacAplic);
                                dbContextSimple.SaveChanges();
                                vacacionAplicacionActual = VacAplic;
                            }
                            else if (pagarVacaAuto == PagarPrimaVacionalyVacacionesAuto.PRIMACACIONALYVACACIONESALANIVERSARIO)
                            {
                                vacDis.empleados            = plaEmp.plazasPorEmpleado.empleados;
                                vacDis.diasPrimaDisfrutados = vacacionesDeven.diasPrimaVaca;
                                vacDis.diasVacDisfrutados   = vacacionesDeven.diasVacaciones;
                                vacDis.ejercicioAplicacion  = calfechaActual.Year;
                                vacDis.pagarPrimaVacacional = true;
                                vacDis.pagarVacaciones      = false;
                                vacDis.periodoAplicacion    = periodoNomina;
                                vacDis.periodoPago          = periodoNomina;
                                vacDis.razonesSociales      = razonSocial;
                                vacDis.registroInicial      = false;
                                vacDis.regresoVac           = calfechaActual;
                                vacDis.salidaVacac          = calfechaActual;
                                vacDis.statusVacaciones     = StatusVacaciones.PORCALCULAR;
                                vacDis.tipoNominaAplicacion = periodoNomina.tipoNomina;
                                dbContextSimple.Set <VacacionesDisfrutadas>().Add(vacDis);
                                dbContextSimple.SaveChanges();

                                vacDisconId                    = vacDis;
                                VacAplic.diasPrima             = vacacionesDeven.diasPrimaVaca;
                                VacAplic.diasVac               = vacacionesDeven.diasVacaciones;
                                VacAplic.vacacionesDevengadas  = vacacionesDeven;
                                VacAplic.vacacionesDisfrutadas = vacDisconId;
                                dbContextSimple.Set <VacacionesAplicacion>().AddOrUpdate(VacAplic);
                                dbContextSimple.SaveChanges();
                                vacacionAplicacionActual = VacAplic;
                            }
                        }
                    }
                }
                mensajeResultado.resultado = vacacionAplicacionActual;
                mensajeResultado.noError   = 0;
                mensajeResultado.error     = "";
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(concatena.Remove(0, concatena.Length).Append(msgError).Append("agregarVacacionesAuto()1_Error: ").Append(ex));
                mensajeResultado.noError   = ControlErroresEntity.buscaNoErrorPorExcepcion(ex);
                mensajeResultado.error     = ex.GetBaseException().ToString();
                mensajeResultado.resultado = null;
                dbContextSimple.Database.CurrentTransaction.Rollback();
            }
            return(mensajeResultado);
        }
        public Mensaje cargarVariablesEmpleadoVacaciones(CalculoUnidades calculoUnidades, PlazasPorEmpleadosMov plazasPorEmpleadosMovEjecutandose, bool acumularVac, PeriodosNomina periodoNomina,
                                                         DateTime?fechaBajaFiniq, string claveTipoNomina, string claveCorrida, Dictionary <string, object> valoresConceptosEmpleados, DBContextSimple dbContextSimple)
        {
            int    x;
            int    diasVacaciones      = 0;
            double diasPrimaVacacional = 0.0;

            try
            {
                bool corridaVacaciones = false;
                if (String.Equals(claveCorrida, "VAC", StringComparison.OrdinalIgnoreCase))
                {
                    corridaVacaciones = true;
                }
                List <VacacionesAplicacion> vacacionesAplicacion = obtenerVacaciones(periodoNomina, plazasPorEmpleadosMovEjecutandose, fechaBajaFiniq, claveTipoNomina, claveCorrida, corridaVacaciones, dbContextSimple);
                if (mensajeResultado.noError != 0)
                {
                    return(mensajeResultado);
                }
                if (vacacionAplicacionActual != null)
                {
                    //                vacacionesAplicacion.add(vacacionAplicacionActual);
                }
                vacacionesAplicacionStatus = vacacionesAplicacion;
                DateTime fechaSalidaVacaciones = new DateTime(), fechaRegresoVacaciones = new DateTime();
                fechaSalidaVacaciones.AddYears(1900);
                fechaRegresoVacaciones.AddYears(1900);
                TiposVacaciones tipoVacaciones = null;
                if (vacacionesAplicacion != null)
                {
                    for (x = 0; x < vacacionesAplicacion.Count; x++)
                    {
                        fechaSalidaVacaciones = vacacionesAplicacion[x].vacacionesDisfrutadas.salidaVacac.GetValueOrDefault();
                        if (vacacionesAplicacion[x].vacacionesDisfrutadas.regresoVac != null)
                        {
                            fechaRegresoVacaciones = vacacionesAplicacion[x].vacacionesDisfrutadas.regresoVac.GetValueOrDefault();
                        }
                        if (vacacionesAplicacion[x].diasVac == null)
                        {
                            vacacionesAplicacion[x].diasVac = 0;
                        }
                        diasVacaciones += vacacionesAplicacion[x].diasVac.GetValueOrDefault();
                        if (vacacionesAplicacion[x].diasPrima == null)
                        {
                            vacacionesAplicacion[x].diasPrima = 0.0;
                        }
                        diasPrimaVacacional += vacacionesAplicacion[x].diasPrima.GetValueOrDefault();
                        tipoVacaciones       = vacacionesAplicacion[x].vacacionesDisfrutadas.tiposVacaciones;
                        if (corridaVacaciones)
                        {
                            bool asigno = false;
                            if (vacacionesAplicacion[x].diasPrima > 0.0)
                            {
                                vacacionesAplicacion[x].vacacionesDisfrutadas.periodoPago = periodoNomina;
                                asigno = true;
                            }
                            if (vacacionesAplicacion[x].diasVac > 0)
                            {
                                vacacionesAplicacion[x].vacacionesDisfrutadas.periodoPago = periodoNomina;
                                asigno = true;
                            }
                            if (asigno)
                            {
                                dbContextSimple.Set <VacacionesDisfrutadas>().AddOrUpdate(vacacionesAplicacion[x].vacacionesDisfrutadas);
                            }
                        }
                        //                    fechaContador.setTime(fechaInicialVacaciones.getTime());
                        //                    while (!fechaContador.after(fechaRegresoVacaciones)) {
                        //                        if ((fechaContador.getTime().compareTo(fechaInicial) > 0 || fechaContador.getTime().compareTo(fechaInicial) == 0)
                        //                                & (fechaContador.getTime().compareTo(fechaFinal) == 0 || fechaContador.getTime().compareTo(fechaFinal) < 0)) {
                        //                            diasVacacionesDisfPeriodo += 1;
                        //                        }
                        //
                        //                        fechaContador.add(Calendar.DATE, 1);
                        //                    }
                    }
                }

                if (acumularVac)
                {
                    valoresConceptosEmpleados["diasVacacionesAcum".ToUpper()] = diasVacaciones;
                }
                else
                {
                    valoresConceptosEmpleados["fechaSalidaVacaciones".ToUpper()]  = fechaSalidaVacaciones;
                    valoresConceptosEmpleados["fechaRegresoVacaciones".ToUpper()] = fechaRegresoVacaciones;
                    ////////            valoresConceptosEmpleados.put("fechaInicialTrabajadas".toUpperCase(), (Date) fechaInicialTrabajadas.getTime());
                    ////////            valoresConceptosEmpleados.put("fechaFinalTrabajadas".toUpperCase(), (Date) fechaFinalTrabajadas.getTime());
                    ////////////            valoresConceptosEmpleados.put("diasVacacionesDisfrutadas".toUpperCase(), (Integer) diasVacacionesDisfrutadas);
                    ////////////            valoresConceptosEmpleados.put("diasVacacionesTrabajadas".toUpperCase(), (Integer) diasVacacionesTrabajadas);
                    ////////            valoresConceptosEmpleados.put("diasVacacionesDisfrutadas".toUpperCase(), (Integer) diasVacacionesDisfPeriodo);
                    ////////            valoresConceptosEmpleados.put("diasVacacionesTrabajadas".toUpperCase(), (Integer) diasVacacionesTrabPeriodo);
                    ////////////            valoresConceptosEmpleados.put("diasVacacionesDisfPeriodo".toUpperCase(), (Integer) diasVacacionesDisfPeriodo);
                    ////////////            valoresConceptosEmpleados.put("diasVacacionesTrabPeriodo".toUpperCase(), (Integer) diasVacacionesTrabPeriodo);

                    valoresConceptosEmpleados["diasVacaciones".ToUpper()] = Convert.ToDouble(diasVacaciones);
                    valoresConceptosEmpleados["diasPrima".ToUpper()]      = diasPrimaVacacional;
                    valoresConceptosEmpleados["tipoVacaciones".ToUpper()] = tipoVacaciones == null ? "" : tipoVacaciones.nombre;
                    if (calculoUnidades != null)
                    {
                        calculoUnidades.diasPrimaVacacional = diasPrimaVacacional;
                        calculoUnidades.diasVacaciones      = diasVacaciones;
                        calculoUnidades.tiposVacaciones     = tipoVacaciones;
                    }
                }
                mensajeResultado.noError   = 0;
                mensajeResultado.resultado = valoresConceptosEmpleados;
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(concatena.Remove(0, concatena.Length).Append(msgError).Append("cargarVariablesEmpleadoVacaciones()1_Error: ").Append(ex));
                mensajeResultado.noError   = ControlErroresEntity.buscaNoErrorPorExcepcion(ex);
                mensajeResultado.error     = ex.GetBaseException().ToString();
                mensajeResultado.resultado = null;
            }
            return(mensajeResultado);
        }