private void workerCalculo_DoWork(object sender, DoWorkEventArgs e)
        {
            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;

            CalculoNomina.Core.NominaHelper nh = new CalculoNomina.Core.NominaHelper();
            nh.Command = cmd;

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

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

            Reingreso.Core.ReingresoHelper rh = new Reingreso.Core.ReingresoHelper();
            rh.Command = cmd;

            int estatus = 0;
            int existeAltaReingreso = 0;

            #region LISTAS
            List<CalculoNomina.Core.Nomina> lstConceptosPercepciones = new List<CalculoNomina.Core.Nomina>();
            List<CalculoNomina.Core.Nomina> lstConceptosDeducciones = new List<CalculoNomina.Core.Nomina>();

            List<CalculoNomina.Core.Nomina> lstConceptosPercepcionesModificados = new List<CalculoNomina.Core.Nomina>();
            List<CalculoNomina.Core.Nomina> lstConceptosDeduccionesModificados = new List<CalculoNomina.Core.Nomina>();
            #endregion

            int progreso = 0, total = 0, indice = 0;
            int existeConcepto = 0;
            total = dgvEmpleados.Rows.Count;

            StreamWriter swLog = new StreamWriter(@"C:\Temp\LogHealthTrabajador" + DateTime.Now.Year.ToString() + "_" + DateTime.Now.Month.ToString() + "_" +
                        DateTime.Now.Day.ToString() + "_" + DateTime.Now.Minute.ToString() + ".txt", true);
            swLog.WriteLine(String.Format("Calculo de Nómina: Del {0} al {1}", periodoInicio.ToShortDateString(), periodoFin.ToShortDateString()));

            foreach (DataGridViewRow fila in dgvEmpleados.Rows)
            {
                try
                {
                    cnx.Open();
                    estatus = int.Parse(eh.obtenerEstatus(int.Parse(fila.Cells["idtrabajador"].Value.ToString())).ToString());
                    cnx.Close();

                    swLog.WriteLine(String.Format("Empleado: {0}, Estatus: {1}", fila.Cells["idtrabajador"].Value.ToString(), estatus.ToString()));

                    if (estatus == 0)
                    {
                        cnx.Open();
                        nh.eliminaPreNomina(int.Parse(fila.Cells["idtrabajador"].Value.ToString()));
                        cnx.Close();
                        swLog.WriteLine(String.Format("Empleado: {0}, Se elimina Prenomina", fila.Cells["idtrabajador"].Value.ToString()));
                        continue;
                    }
                    else
                    {

                        cnx.Open();
                        existeAltaReingreso = ah.existeAlta(GLOBALES.IDEMPRESA, int.Parse(fila.Cells["idtrabajador"].Value.ToString()), periodoInicioPosterior, periodoFinPosterior);
                        cnx.Close();
                        swLog.WriteLine(String.Format("Empleado: {0}, Existencia de Alta: {1}, Fecha Inicio: {2}, Fecha Fin: {3} ", fila.Cells["idtrabajador"].Value.ToString(), existeAltaReingreso, periodoInicioPosterior.ToShortDateString(), periodoFinPosterior.ToShortDateString()));
                        if (existeAltaReingreso != 0)
                        {
                            cnx.Open();
                            nh.eliminaPreNomina(int.Parse(fila.Cells["idtrabajador"].Value.ToString()));
                            cnx.Close();
                            swLog.WriteLine(String.Format("Empleado: {0}, Se elimina Prenomina", fila.Cells["idtrabajador"].Value.ToString()));
                            continue;
                        }

                        cnx.Open();
                        existeAltaReingreso = rh.existeReingreso(GLOBALES.IDEMPRESA, int.Parse(fila.Cells["idtrabajador"].Value.ToString()), periodoInicioPosterior, periodoFinPosterior);
                        cnx.Close();
                        swLog.WriteLine(String.Format("Empleado: {0}, Existencia de Reingreso: {1}, Fecha Inicio: {2}, Fecha Fin: {3} ", fila.Cells["idtrabajador"].Value.ToString(), existeAltaReingreso, periodoInicioPosterior.ToShortDateString(), periodoFinPosterior.ToShortDateString()));
                        if (existeAltaReingreso != 0)
                        {
                            cnx.Open();
                            nh.eliminaPreNomina(int.Parse(fila.Cells["idtrabajador"].Value.ToString()));
                            cnx.Close();
                            swLog.WriteLine(String.Format("Empleado: {0}, Se elimina Prenomina", fila.Cells["idtrabajador"].Value.ToString()));
                            continue;
                        }

                    }
                }
                catch (Exception error)
                {
                    MessageBox.Show("Error al verificar el estatus del trabajador: " + fila.Cells["noempleado"].Value.ToString() + "\r\n\r\n" + error.Message, "Error");
                    cnx.Close();
                    continue;
                }

                progreso = (indice * 100) / total;
                indice++;

                if (FLAGPRIMERCALCULO)
                {
                    workerCalculo.ReportProgress(progreso, "CARGANDO DATOS DE LOS TRABAJADORES. ESPERE A QUE TERMINE EL PROCESO.");
                }
                else
                    workerCalculo.ReportProgress(progreso, "CALCULANDO.");

                #region CONCEPTOS Y FORMULAS DEL TRABAJADOR
                try
                {
                    cnx.Open();
                    nh.eliminaNominaTrabajador(int.Parse(fila.Cells["idtrabajador"].Value.ToString()), periodoInicio.Date, periodoFin.Date, _tipoNomina);
                    lstConceptosPercepciones = nh.conceptosNominaTrabajador(GLOBALES.IDEMPRESA, "P", int.Parse(fila.Cells["idtrabajador"].Value.ToString()), periodoInicio.Date, periodoFin.Date, _periodo);
                    lstConceptosDeducciones = nh.conceptosNominaTrabajador(GLOBALES.IDEMPRESA, "D", int.Parse(fila.Cells["idtrabajador"].Value.ToString()), periodoInicio.Date, periodoFin.Date, _periodo);
                    cnx.Close();
                }
                catch (Exception error)
                {
                    MessageBox.Show("Error: CONCEPTOS Y FORMULAS DEL TRABAJADOR. Primer Calculo." +
                        " ID Trabajador: " + int.Parse(fila.Cells["idtrabajador"].Value.ToString()) +
                        "\r\n \r\n" + error.Message, "Error");
                    cnx.Dispose();
                    return;
                }
                #endregion

                #region CALCULO DE PERCEPCIONES
                List<CalculoNomina.Core.tmpPagoNomina> lstPercepciones = new List<CalculoNomina.Core.tmpPagoNomina>();
                lstPercepciones = CALCULO.PERCEPCIONES(lstConceptosPercepciones, periodoInicio.Date, periodoFin.Date, _tipoNomina);
                #endregion

                #region BULK DATOS PERCEPCIONES
                BulkData(lstPercepciones);
                #endregion

                #region OBTENCION DE PERCEPCIONES
                lstPercepciones = new List<CalculoNomina.Core.tmpPagoNomina>();
                CalculoNomina.Core.tmpPagoNomina per = new CalculoNomina.Core.tmpPagoNomina();
                per.idempresa = GLOBALES.IDEMPRESA;
                per.idtrabajador = int.Parse(fila.Cells["idtrabajador"].Value.ToString());
                per.fechainicio = periodoInicio.Date;
                per.fechafin = periodoFin;
                per.tipoconcepto = "P";
                per.tiponomina = _tipoNomina;
                cnx.Open();
                lstPercepciones = nh.obtenerPercepcionesTrabajador(per);
                cnx.Close();
                #endregion

                #region CALCULO DE DEDUCCIONES
                List<CalculoNomina.Core.tmpPagoNomina> lstDeducciones = new List<CalculoNomina.Core.tmpPagoNomina>();
                lstDeducciones = CALCULO.DEDUCCIONES(lstConceptosDeducciones, lstPercepciones, periodoInicio.Date, periodoFin.Date, _tipoNomina);
                #endregion

                #region BULK DATOS DEDUCCIONES
                BulkData(lstDeducciones);
                #endregion

                #region PROGRAMACION DE MOVIMIENTOS
                List<CalculoNomina.Core.tmpPagoNomina> lstOtrasDeducciones = new List<CalculoNomina.Core.tmpPagoNomina>();
                ProgramacionConcepto.Core.ProgramacionHelper pch = new ProgramacionConcepto.Core.ProgramacionHelper();
                pch.Command = cmd;

                decimal percepciones = lstPercepciones.Where(f => f.tipoconcepto == "P").Sum(f => f.cantidad);

                if (percepciones != 0)
                {
                    int existe = 0;
                    ProgramacionConcepto.Core.ProgramacionConcepto programacion = new ProgramacionConcepto.Core.ProgramacionConcepto();
                    programacion.idtrabajador = int.Parse(fila.Cells["idtrabajador"].Value.ToString());

                    List<ProgramacionConcepto.Core.ProgramacionConcepto> lstProgramacion = new List<ProgramacionConcepto.Core.ProgramacionConcepto>();

                    try
                    {
                        cnx.Open();
                        existe = (int)pch.existeProgramacion(programacion);
                        cnx.Close();
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
                        cnx.Dispose();
                    }

                    if (existe != 0)
                    {
                        try
                        {
                            cnx.Open();
                            lstProgramacion = pch.obtenerProgramacion(programacion);
                            cnx.Close();
                        }
                        catch (Exception error)
                        {
                            MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
                            cnx.Dispose();
                        }

                        for (int i = 0; i < lstProgramacion.Count; i++)
                        {
                            if (periodoFin.Date <= lstProgramacion[i].fechafin)
                            {
                                Conceptos.Core.ConceptosHelper ch = new Conceptos.Core.ConceptosHelper();
                                ch.Command = cmd;
                                Conceptos.Core.Conceptos concepto = new Conceptos.Core.Conceptos();
                                concepto.id = lstProgramacion[i].idconcepto;
                                List<Conceptos.Core.Conceptos> lstNoConcepto = new List<Conceptos.Core.Conceptos>();
                                try
                                {
                                    cnx.Open();
                                    lstNoConcepto = ch.obtenerConcepto(concepto);
                                    cnx.Close();
                                }
                                catch (Exception error) { MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error"); }

                                CalculoNomina.Core.tmpPagoNomina pne = new CalculoNomina.Core.tmpPagoNomina();
                                pne.idempresa = GLOBALES.IDEMPRESA;
                                pne.idtrabajador = int.Parse(fila.Cells["idtrabajador"].Value.ToString());
                                pne.fechainicio = periodoInicio.Date;
                                pne.fechafin = periodoFin.Date;
                                pne.noconcepto = lstNoConcepto[0].noconcepto;

                                try
                                {
                                    cnx.Open();
                                    existeConcepto = (int)nh.existeConcepto(pne);
                                    cnx.Close();
                                }
                                catch
                                {
                                    MessageBox.Show("Error al obtener la existencia del concepto.", "Error");
                                    cnx.Dispose();
                                }

                                CalculoNomina.Core.tmpPagoNomina vn = new CalculoNomina.Core.tmpPagoNomina();
                                vn.idtrabajador = int.Parse(fila.Cells["idtrabajador"].Value.ToString());
                                vn.idempresa = GLOBALES.IDEMPRESA;
                                vn.idconcepto = lstProgramacion[i].idconcepto;
                                vn.noconcepto = lstNoConcepto[0].noconcepto;
                                vn.tipoconcepto = lstNoConcepto[0].tipoconcepto;
                                vn.fechainicio = periodoInicio.Date;
                                vn.fechafin = periodoFin.Date;
                                vn.exento = 0;
                                vn.gravado = 0;
                                vn.cantidad = lstProgramacion[i].cantidad;
                                vn.guardada = false;
                                vn.tiponomina = _tipoNomina;
                                vn.modificado = false;
                                vn.obracivil = _obracivil;

                                if (lstNoConcepto[0].gravado && !lstNoConcepto[0].exento)
                                {
                                    vn.gravado = lstProgramacion[i].cantidad;
                                    vn.exento = 0;
                                }

                                if (lstNoConcepto[0].gravado && lstNoConcepto[0].exento)
                                {
                                    CalculoFormula formulaExcento = new CalculoFormula(int.Parse(fila.Cells["idtrabajador"].Value.ToString()), periodoInicio.Date, periodoFin.Date, lstNoConcepto[0].formulaexento);
                                    vn.exento = decimal.Parse(formulaExcento.calcularFormula().ToString());
                                    if (vn.cantidad <= vn.exento)
                                    {
                                        vn.exento = vn.cantidad;
                                        vn.gravado = 0;
                                    }
                                    else
                                    {
                                        vn.gravado = vn.cantidad - vn.exento;
                                    }
                                }

                                if (!lstNoConcepto[0].gravado && lstNoConcepto[0].exento)
                                {
                                    vn.gravado = 0;
                                    vn.exento = lstProgramacion[i].cantidad;
                                }

                                if (existeConcepto == 0)
                                {
                                    lstOtrasDeducciones.Add(vn);
                                }
                                else
                                {
                                    try
                                    {
                                        cnx.Open();
                                        nh.actualizaConceptoModificado(vn);
                                        cnx.Close();
                                    }
                                    catch
                                    {
                                        MessageBox.Show("Error al actualizar el concepto.", "Error");
                                        cnx.Dispose();
                                    }
                                }
                            }
                        }
                    }
                }
                #endregion

                #region MOVIMIENTOS
                Movimientos.Core.MovimientosHelper mh = new Movimientos.Core.MovimientosHelper();
                mh.Command = cmd;

                if (percepciones != 0)
                {
                    int existe = 0;
                    Movimientos.Core.Movimientos mov = new Movimientos.Core.Movimientos();
                    mov.idtrabajador = int.Parse(fila.Cells["idtrabajador"].Value.ToString());
                    mov.fechainicio = periodoInicio.Date;
                    mov.fechafin = periodoFin.Date;

                    List<Movimientos.Core.Movimientos> lstMovimiento = new List<Movimientos.Core.Movimientos>();

                    try
                    {
                        cnx.Open();
                        existe = (int)mh.existeMovimiento(mov);
                        cnx.Close();
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
                        cnx.Dispose();
                    }

                    if (existe != 0)
                    {
                        try
                        {
                            cnx.Open();
                            lstMovimiento = mh.obtenerMovimiento(mov);
                            cnx.Close();
                        }
                        catch (Exception error)
                        {
                            MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
                            cnx.Dispose();
                        }

                        for (int i = 0; i < lstMovimiento.Count; i++)
                        {
                            Conceptos.Core.ConceptosHelper ch = new Conceptos.Core.ConceptosHelper();
                            ch.Command = cmd;
                            Conceptos.Core.Conceptos concepto = new Conceptos.Core.Conceptos();
                            concepto.id = lstMovimiento[i].idconcepto;
                            List<Conceptos.Core.Conceptos> lstNoConcepto = new List<Conceptos.Core.Conceptos>();
                            try
                            {
                                cnx.Open();
                                lstNoConcepto = ch.obtenerConcepto(concepto);
                                cnx.Close();
                            }
                            catch (Exception error) { MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error"); }

                            CalculoNomina.Core.tmpPagoNomina vn = new CalculoNomina.Core.tmpPagoNomina();
                            vn.idtrabajador = int.Parse(fila.Cells["idtrabajador"].Value.ToString()); ;
                            vn.idempresa = GLOBALES.IDEMPRESA;
                            vn.idconcepto = lstMovimiento[i].idconcepto;
                            vn.noconcepto = lstNoConcepto[0].noconcepto;
                            vn.tipoconcepto = lstNoConcepto[0].tipoconcepto;
                            vn.fechainicio = periodoInicio.Date;
                            vn.fechafin = periodoFin.Date;
                            vn.exento = 0;
                            vn.gravado = 0;
                            vn.cantidad = lstMovimiento[i].cantidad;
                            vn.guardada = false;
                            vn.tiponomina = _tipoNomina;
                            vn.modificado = false;

                            if (lstNoConcepto[0].gravado && !lstNoConcepto[0].exento)
                            {
                                vn.gravado = lstMovimiento[i].cantidad;
                                vn.exento = 0;
                            }

                            if (lstNoConcepto[0].gravado && lstNoConcepto[0].exento)
                            {
                                CalculoFormula formulaExcento = new CalculoFormula(int.Parse(fila.Cells["idtrabajador"].Value.ToString()), periodoInicio.Date, periodoFin.Date, lstNoConcepto[0].formulaexento);
                                vn.exento = decimal.Parse(formulaExcento.calcularFormula().ToString());
                                if (vn.cantidad <= vn.exento)
                                {
                                    vn.exento = vn.cantidad;
                                    vn.gravado = 0;
                                }
                                else
                                {
                                    vn.gravado = vn.cantidad - vn.exento;
                                }
                            }

                            if (!lstNoConcepto[0].gravado && lstNoConcepto[0].exento)
                            {
                                vn.gravado = 0;
                                vn.exento = lstMovimiento[i].cantidad;
                            }

                            cnx.Open();
                            existe = (int)nh.existeConcepto(vn);
                            cnx.Close();

                            if (existe == 0)
                            {
                                lstOtrasDeducciones.Add(vn);
                            }
                            else
                            {
                                cnx.Open();
                                nh.actualizaConcepto(vn);
                                cnx.Close();
                            }
                        }
                    }
                }
                #endregion

                #region BULK DATOS PROGRAMACION DE MOVIMIENTOS
                BulkData(lstOtrasDeducciones);
                #endregion

                #region APLICACION DE DEPTOS/PUESTOS
                Aplicaciones.Core.AplicacionesHelper aplicah = new Aplicaciones.Core.AplicacionesHelper();
                aplicah.Command = cmd;
                Aplicaciones.Core.Aplicaciones aplicacion = new Aplicaciones.Core.Aplicaciones();
                aplicacion.periodoinicio = periodoInicio;
                aplicacion.periodofin = periodoFin;
                aplicacion.idempresa = GLOBALES.IDEMPRESA;
                List<Aplicaciones.Core.Aplicaciones> lstAplicaciones = new List<Aplicaciones.Core.Aplicaciones>();
                try
                {
                    cnx.Open();
                    lstAplicaciones = aplicah.obtenerFechasDeAplicacion(aplicacion);
                    cnx.Close();
                }
                catch (Exception)
                {

                    throw;
                }

                if (lstAplicaciones.Count != 0)
                {
                    for (int i = 0; i < lstAplicaciones.Count; i++)
                    {
                        Empleados.Core.EmpleadosHelper emph = new Empleados.Core.EmpleadosHelper();
                        emph.Command = cmd;

                        try
                        {
                            cnx.Open();
                            emph.actualizaDeptoPuesto(lstAplicaciones[i].iddeptopuesto, lstAplicaciones[i].idtrabajador, lstAplicaciones[i].deptopuesto);
                            aplicah.eliminaAplicacion(lstAplicaciones[i].id);
                            cnx.Close();
                        }
                        catch (Exception)
                        {
                            MessageBox.Show("Error: Al modificar y/o eliminar el depto/puesto o aplicación.", "Error");
                            cnx.Dispose();
                        }
                    }
                }
                #endregion
            }
            swLog.Close();

            #region PERIODO
            calculoNoPeriodo();
            #endregion

            #region NETOS NEGATIVOS
            nh = new CalculoNomina.Core.NominaHelper();
            nh.Command = cmd;
            List<CalculoNomina.Core.NetosNegativos> lstNetos;
            int contadorNetosNegativos = 0;
            StreamWriter sw = new StreamWriter(@"C:\Temp\NetosNegativos" + periodoInicio.Year.ToString() + "_" + periodoInicio.Month.ToString() + "_" +
                        periodoInicio.Day.ToString() + ".txt", true);

            foreach (DataGridViewRow fila in dgvEmpleados.Rows)
            {
                lstNetos = new List<CalculoNomina.Core.NetosNegativos>();
                try
                {
                    cnx.Open();
                    lstNetos = nh.obtenerNetosNegativos(GLOBALES.IDEMPRESA, periodoInicio.Date, periodoFin.Date,
                        int.Parse(fila.Cells["idtrabajador"].Value.ToString()));
                    cnx.Close();

                    decimal sumaPercepciones =  lstNetos.Where(n => n.tipoconcepto == "P").Sum(n => n.cantidad);
                    decimal sumaDeducciones = lstNetos.Where(n => n.tipoconcepto == "D").Sum(n => n.cantidad);
                    decimal subsidio = lstNetos.Where(d => d.noconcepto == 16).Sum(d => d.cantidad);
                    decimal netoPagar = 0;
                    sumaPercepciones = sumaPercepciones + subsidio;
                    sumaDeducciones = sumaDeducciones - subsidio;
                    netoPagar = sumaPercepciones - sumaDeducciones;

                    string linea1 = "";
                    string noEmpleado = "", nombreCompleto = "";
                    noEmpleado = fila.Cells["noempleado"].Value.ToString();
                    nombreCompleto = fila.Cells["nombres"].Value.ToString() + " " + fila.Cells["paterno"].Value.ToString() + " " + fila.Cells["materno"].Value.ToString();
                    if (netoPagar < 0)
                    {
                        contadorNetosNegativos++;
                        linea1 = noEmpleado + ", " + nombreCompleto + ", Cantidad Neta Negativa: " + netoPagar.ToString();
                        sw.WriteLine(linea1);
                    }
                }
                catch (Exception error)
                {
                    MessageBox.Show("Error: Lista de Netos. \r\n \r\n" + error.Message, "Error");
                    cnx.Dispose();
                }
            }

            sw.WriteLine("TOTAL CANTIDADES NEGATIVAS: " + contadorNetosNegativos.ToString());
            sw.Close();
            if (contadorNetosNegativos != 0)
            {
                MessageBox.Show("CANTIDADES NEGATIVAS. VERIFIQUE ARCHIVO EN C:\\Temp\\NetosNegativos" +
                   periodoInicio.Year.ToString() + "_" +
                   periodoInicio.Month.ToString() + "_" +
                   periodoInicio.Day.ToString() + ".txt", "Información");
            }

            #endregion
        }
Example #2
0
        private void btnAceptar_Click(object sender, EventArgs e)
        {
            obtenerPeriodoCalculo();

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

            Aplicaciones.Core.AplicacionesHelper ah = new Aplicaciones.Core.AplicacionesHelper();
            ah.Command = cmd;

            Aplicaciones.Core.Aplicaciones a = new Aplicaciones.Core.Aplicaciones();

            a.idtrabajador = _idempleado;
            a.idempresa = GLOBALES.IDEMPRESA;
            a.iddeptopuesto = int.Parse(cmbDeptoPuesto.SelectedValue.ToString());
            a.fecha = dtpFechaAplicacion.Value.Date;
            a.registro = DateTime.Now;
            a.idusuario = GLOBALES.IDUSUARIO;
            a.periodoinicio = inicioPeriodo;
            a.periodofin = finPeriodo;

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

            Historial.Core.Historial historial = new Historial.Core.Historial();

            historial = new Historial.Core.Historial();
            historial.idtrabajador = _idempleado;
            historial.idempresa = GLOBALES.IDEMPRESA;
            historial.valor = sdi;
            historial.fecha_sistema = DateTime.Now;
            historial.motivobaja = 0;
            historial.fecha_imss = dtpFechaAplicacion.Value.Date;

            if (_deptopuesto == 0)
            {
                a.deptopuesto = "D";
                historial.tipomovimiento = GLOBALES.mCAMBIODEPARTAMENTO;
                historial.iddepartamento = int.Parse(cmbDeptoPuesto.SelectedValue.ToString());
                historial.idpuesto = idpuesto;
            }
            else
            {
                a.deptopuesto = "P";
                historial.tipomovimiento = GLOBALES.mCAMBIOPUESTO;
                historial.idpuesto = int.Parse(cmbDeptoPuesto.SelectedValue.ToString());
                historial.iddepartamento = iddepto;
            }

            try
            {
                cnx.Open();
                hh.insertarHistorial(historial);
                cnx.Close();

            }
            catch (Exception)
            {
                MessageBox.Show("Error: Al insertar el historico.", "Error");
                cnx.Dispose();
            }

            if (inicioPeriodo.Date == periodoInicioCalculo.Date && finPeriodo.Date == periodoFinCalculo.Date)
            {
                Empleados.Core.EmpleadosHelper eh = new Empleados.Core.EmpleadosHelper();
                eh.Command = cmd;
                try
                {
                    cnx.Open();
                    if (_deptopuesto == 0)
                        eh.actualizaDeptoPuesto(int.Parse(cmbDeptoPuesto.SelectedValue.ToString()), _idempleado, "D");
                    else
                        eh.actualizaDeptoPuesto(int.Parse(cmbDeptoPuesto.SelectedValue.ToString()), _idempleado, "P");
                    cnx.Close();
                    cnx.Dispose();
                }
                catch (Exception)
                {
                    MessageBox.Show("Error: Al actualizar el depto/puesto.", "Error");
                    cnx.Dispose();
                }
            }
            else
            {
                try
                {
                    cnx.Open();
                    ah.insertaAplicacion(a);
                    cnx.Close();
                    cnx.Dispose();
                }
                catch (Exception)
                {
                    MessageBox.Show("Error: Al ingresar la aplicacion del depto/puesto.", "Error");
                    cnx.Dispose();
                }
            }

            this.Dispose();
        }