private void workerImporta_DoWork(object sender, DoWorkEventArgs e)
        {
            int contador = dgvCargaEmpleados.Rows.Count;
            int progreso = 0;

            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;

            foreach (DataGridViewRow fila in dgvCargaEmpleados.Rows)
            {

                workerImporta.ReportProgress((progreso * 100) / contador);
                progreso++;

                dh = new Departamento.Core.DeptoHelper();
                dh.Command = cmd;

                puestoh = new Puestos.Core.PuestosHelper();
                puestoh.Command = cmd;

                ph = new Periodos.Core.PeriodosHelper();
                ph.Command = cmd;

                try
                {
                    cnx.Open();
                    idDepto = (int)dh.obtenerIdDepartamento(fila.Cells["departamento"].Value.ToString(), GLOBALES.IDEMPRESA);
                    idPuesto = (int)puestoh.obtenerIdPuesto(fila.Cells["puesto"].Value.ToString(), GLOBALES.IDEMPRESA);
                    idPeriodo = (int)ph.obtenerIdPeriodo(fila.Cells["periodo"].Value.ToString(), GLOBALES.IDEMPRESA);
                    cnx.Close();
                }
                catch
                {
                    MessageBox.Show("Error: Al obtener los datos del Departamento, Puesto y/o Periodo.", "Error");
                    cnx.Dispose();
                    return;
                }

                Empleados.Core.Empleados empleado = new Empleados.Core.Empleados();
                empleado.noempleado = fila.Cells["noempleado"].Value.ToString();
                empleado.nombres = fila.Cells["nombre"].Value.ToString();
                empleado.paterno = fila.Cells["paterno"].Value.ToString();
                empleado.materno = fila.Cells["materno"].Value.ToString();
                empleado.nombrecompleto = String.Format("{0} {1} {2}", empleado.paterno, empleado.materno, empleado.nombres);
                empleado.idempresa = GLOBALES.IDEMPRESA;
                empleado.idperiodo = idPeriodo;
                empleado.idsalario = 1;
                empleado.iddepartamento = idDepto;
                empleado.idpuesto = idPuesto;
                empleado.fechaingreso = DateTime.Parse(fila.Cells["fechaingreso"].Value.ToString());
                empleado.antiguedad = 0;
                empleado.fechaantiguedad = DateTime.Parse(fila.Cells["fechaingreso"].Value.ToString());
                empleado.antiguedadmod = 0;
                empleado.fechanacimiento = ObtieneFecha(fila.Cells["curp"].Value.ToString());
                empleado.edad = ObtieneEdad(empleado.fechanacimiento);
                empleado.rfc = ObtenerRfc(empleado.paterno, empleado.materno, empleado.nombres, empleado.fechanacimiento);
                empleado.curp = fila.Cells["curp"].Value.ToString();
                empleado.nss = fila.Cells["nss"].Value.ToString();
                empleado.digitoverificador = int.Parse(fila.Cells["dv"].Value.ToString());
                empleado.tiposalario = 19;
                empleado.sdi = decimal.Parse(fila.Cells["sdi"].Value.ToString());
                empleado.sd = ObtieneSD(decimal.Parse(fila.Cells["sdi"].Value.ToString()));
                empleado.sueldo = ObtieneSueldo(empleado.sd);
                empleado.estatus = 1;
                empleado.idusuario = GLOBALES.IDUSUARIO;
                empleado.cuenta = "0000000000";
                empleado.clabe = "000000000000000000";
                empleado.idbancario = "0000";
                empleado.metodopago = "TRANSFERENCIA";
                empleado.tiporegimen = 60;

                //Empleados.Core.EmpleadosEstatus ee = new Empleados.Core.EmpleadosEstatus();
                //ee.estatus = GLOBALES.ACTIVO;
                //ee.idempresa = GLOBALES.IDEMPRESA;

                cnx = new SqlConnection(cdn);
                cmd = new SqlCommand();
                cmd.Connection = cnx;

                emph = new Empleados.Core.EmpleadosHelper();
                emph.Command = cmd;

                Empleados.Core.Empleados nss = new Empleados.Core.Empleados();
                nss.nss = empleado.nss;
                nss.digitoverificador = empleado.digitoverificador;
                int existeEmpleado = 0;
                try
                {
                    cnx.Open();
                    existeEmpleado = (int)emph.existeEmpleado(nss);
                    cnx.Close();
                }
                catch (Exception)
                {
                    MessageBox.Show("Error: Al obtener la existencia del empleado.", "Error");
                    cnx.Dispose();
                    return;
                }

                if (existeEmpleado == 0)
                {
                    try
                    {
                        cnx.Open();
                        emph.insertaEmpleado(empleado);
                        //ee.idtrabajador = (int)emph.obtenerIdTrabajador(empleado);
                        //emph.insertaEmpleadoEstatus(ee);
                        cnx.Close();
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Error: Al ingresar al empleado. No. empleado: " + fila.Cells["noempleado"].Value.ToString(), "Error");
                        cnx.Dispose();
                        return;
                    }

                    int idEmpleado = 0;
                    try
                    {
                        cnx.Open();
                        idEmpleado = (int)emph.obtenerIdTrabajador(fila.Cells["noempleado"].Value.ToString(), GLOBALES.IDEMPRESA);
                        cnx.Close();
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Error: Al obtener el ID del empleado. No. empleado: " + fila.Cells["noempleado"].Value.ToString(), "Error");
                        cnx.Dispose();
                        return;
                    }

                    //cnx = new SqlConnection(cdn);
                    //cmd = new SqlCommand();
                    //cmd.Connection = cnx;

                    //hh = new Historial.Core.HistorialHelper();
                    //hh.Command = cmd;

                    //Historial.Core.Historial historial = new Historial.Core.Historial();
                    //historial.idtrabajador = idEmpleado;
                    //historial.tipomovimiento = GLOBALES.mALTA;
                    //historial.valor = empleado.sdi;
                    //historial.fecha_imss = DateTime.Parse(fila.Cells["fechaingreso"].Value.ToString());
                    //historial.fecha_sistema = DateTime.Now.Date;
                    //historial.idempresa = GLOBALES.IDEMPRESA;
                    //historial.motivobaja = 0;

                    //try
                    //{
                    //    cnx.Open();
                    //    hh.insertarHistorial(historial);
                    //    cnx.Close();
                    //}
                    //catch (Exception)
                    //{
                    //    MessageBox.Show("Error: Al ingresar historial del trabajador. No. empleado: " + fila.Cells["noempleado"].Value.ToString(), "Error");
                    //    cnx.Dispose();
                    //    return;
                    //}

                    //cnx = new SqlConnection(cdn);
                    //cmd = new SqlCommand();
                    //cmd.Connection = cnx;

                    //eh = new Empresas.Core.EmpresasHelper();
                    //eh.Command = cmd;

                    //Empresas.Core.Empresas empresa = new Empresas.Core.Empresas();
                    //empresa.idempresa = GLOBALES.IDEMPRESA;

                    //try
                    //{
                    //    cnx.Open();
                    //    registroPatronal = eh.obtenerRegistroPatronal(empresa).ToString();
                    //    cnx.Close();
                    //}
                    //catch (Exception)
                    //{
                    //    MessageBox.Show("Error: Al obtener el registro patronal. NoEmpleado: " + fila.Cells["noempleado"].Value.ToString() + ".", "Error");
                    //    cnx.Dispose();
                    //    return;
                    //}

                    //Altas.Core.Altas alta = new Altas.Core.Altas();
                    //alta.idtrabajador = idEmpleado;
                    //alta.idempresa = GLOBALES.IDEMPRESA;
                    //alta.registropatronal = registroPatronal;
                    //alta.nss = empleado.nss + empleado.digitoverificador.ToString();
                    //alta.rfc = empleado.rfc;
                    //alta.curp = empleado.curp;
                    //alta.paterno = empleado.paterno;
                    //alta.materno = empleado.materno;
                    //alta.nombre = empleado.nombres;
                    //alta.contrato = 4;
                    //alta.jornada = 12;
                    //alta.fechaingreso = empleado.fechaingreso;
                    //alta.diasproporcionales = ObtenerDiasProporcionales(empleado.fechaingreso);
                    //alta.sdi = empleado.sdi;
                    //alta.cp = "0";
                    //alta.fechanacimiento = empleado.fechanacimiento;
                    //alta.estado = ObtenerEstado(empleado.curp);
                    //alta.noestado = ObtenerIdEstado(alta.estado);
                    //alta.clinica = "0";
                    //alta.sexo = ObtenerSexo(empleado.curp);
                    //alta.periodoInicio = periodoInicio;
                    //alta.periodoFin = periodoFin;

                    //cnx = new SqlConnection(cdn);
                    //cmd = new SqlCommand();
                    //cmd.Connection = cnx;

                    //ah = new Altas.Core.AltasHelper();
                    //ah.Command = cmd;

                    //try
                    //{
                    //    cnx.Open();
                    //    ah.insertaAlta(alta);
                    //    cnx.Close();
                    //}
                    //catch (Exception)
                    //{
                    //    MessageBox.Show("Error: Al ingresar alta del trabajador. No. empleado: " + fila.Cells["noempleado"].Value.ToString(), "Error");
                    //    cnx.Dispose();
                    //    return;
                    //}
                }
            }
            cnx.Dispose();
        }