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);
        }
        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);
        }
        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);
        }