private void guardaPreNomina()
        {
            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;

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

            CalculoNomina.Core.tmpPagoNomina pn = new CalculoNomina.Core.tmpPagoNomina();
            pn.idempresa = GLOBALES.IDEMPRESA;
            pn.fechainicio = periodoInicio.Date;
            pn.fechafin = periodoFin.Date;
            pn.guardada = true;
            pn.tiponomina = _tipoNomina;
            pn.obracivil = _obracivil;

            try
            {
                cnx.Open();
                nh.guardaPreNomina(pn, _periodo);
                cnx.Close();
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
            }

            try
            {
                cnx.Open();
                nh.aplicaBajaObraCivil(pn, _periodo);
                cnx.Close();
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
            }

            string formulaDiasAPagar = "[DiasLaborados]-[Faltas]-[DiasIncapacidad]";
            foreach (DataGridViewRow fila in dgvEmpleados.Rows)
            {
                CalculoFormula cf = new CalculoFormula(int.Parse(fila.Cells["idtrabajador"].Value.ToString()), periodoInicio, periodoFin, formulaDiasAPagar);
                int diasAPagar = int.Parse(cf.calcularFormula().ToString());

                pn = new CalculoNomina.Core.tmpPagoNomina();
                pn.idtrabajador = int.Parse(fila.Cells["idtrabajador"].Value.ToString());
                pn.diaslaborados = diasAPagar;
                pn.fechainicio = periodoInicio;
                pn.fechafin = periodoFin;

                try
                {
                    cnx.Open();
                    nh.actualizaDiasFechaPago(pn, _periodo);
                    cnx.Close();
                }
                catch (Exception error)
                {
                    MessageBox.Show("Error: Al actualizar los dias laborados. \r\n \r\n" + error.Message, "Error");
                    return;
                }
            }
            cnx.Dispose();

            MessageBox.Show("ATENCION: La Pre Nómina de Obra Civil se ha guardado, \r\n ésta ya no será modificada. \r\n\r\n Se cerrará la ventana para concluir.", "Información");
            this.Dispose();
        }
        private void toolAutorizar_Click(object sender, EventArgs e)
        {
            DialogResult respuesta = MessageBox.Show("¿Quiere autorizar el periodo?", "Confirmación", MessageBoxButtons.YesNo);
            if (respuesta == DialogResult.Yes)
            {
                cnx = new SqlConnection(cdn);
                cmd = new SqlCommand();
                cmd.Connection = cnx;

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

                List<CalculoNomina.Core.tmpPagoNomina> lstTrabajadores = new List<CalculoNomina.Core.tmpPagoNomina>();

                if (_tipoNomina == GLOBALES.NORMAL)
                {
                    try
                    {
                        cnx.Open();
                        lstTrabajadores = nh.obtenerIdTrabajadoresTempNomina(GLOBALES.IDEMPRESA, _tipoNomina, periodoInicio, periodoFin, _periodo);
                        cnx.Close();
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show("Error: Al obtener los trabajadores. \r\n \r\n" + error.Message, "Error");
                        return;
                    }

                    string formulaDiasAPagar = "[DiasLaborados]-[Faltas]-[DiasIncapacidad]";

                    for (int i = 0; i < lstTrabajadores.Count; i++)
                    {
                        CalculoFormula cf = new CalculoFormula(lstTrabajadores[i].idtrabajador, periodoInicio, periodoFin, formulaDiasAPagar);
                        int diasAPagar = int.Parse(cf.calcularFormula().ToString());

                        CalculoNomina.Core.tmpPagoNomina pn = new CalculoNomina.Core.tmpPagoNomina();
                        pn.idtrabajador = lstTrabajadores[i].idtrabajador;
                        pn.diaslaborados = diasAPagar;
                        pn.fechainicio = periodoInicio;
                        pn.fechafin = periodoFin;

                        try
                        {
                            cnx.Open();
                            nh.actualizaDiasFechaPago(pn, _periodo);
                            cnx.Close();
                        }
                        catch (Exception error)
                        {
                            MessageBox.Show("Error (Actualizacion Dias Laborados): Al actualizar los dias laborados. \r\n \r\n" + error.Message, "Error");
                            return;
                        }
                    }
                    //foreach (DataGridViewRow fila in dgvEmpleados.Rows)
                    //{
                    //    CalculoFormula cf = new CalculoFormula(int.Parse(fila.Cells["idtrabajador"].Value.ToString()), periodoInicio, periodoFin, formulaDiasAPagar);
                    //    int diasAPagar = int.Parse(cf.calcularFormula().ToString());

                    //    CalculoNomina.Core.tmpPagoNomina pn = new CalculoNomina.Core.tmpPagoNomina();
                    //    pn.idtrabajador = int.Parse(fila.Cells["idtrabajador"].Value.ToString());
                    //    pn.diaslaborados = diasAPagar;
                    //    pn.fechainicio = periodoInicio;
                    //    pn.fechafin = periodoFin;

                    //    try
                    //    {
                    //        cnx.Open();
                    //        nh.actualizaDiasFechaPago(pn);
                    //        cnx.Close();
                    //    }
                    //    catch (Exception error)
                    //    {
                    //        MessageBox.Show("Error: Al actualizar los dias laborados. \r\n \r\n" + error.Message, "Error");
                    //        return;
                    //    }
                    //}
                }

                else if (_tipoNomina == GLOBALES.EXTRAORDINARIO_NORMAL)
                {
                    CalculoNomina.Core.tmpPagoNomina pn = new CalculoNomina.Core.tmpPagoNomina();
                    pn.diaslaborados = 0;
                    pn.fechainicio = periodoInicio;
                    pn.fechafin = periodoFin;
                    pn.tiponomina = _tipoNomina;
                    try
                    {
                        cnx.Open();
                        nh.actualizaDiasFechaPagoExtraordinaria(pn, DateTime.Now.Date, _periodo);
                        cnx.Close();
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show("Error (Actualizacion dias laborados): Al actualizar los dias laborados. \r\n \r\n" + error.Message, "Error");
                        return;
                    }
                }

                try
                {
                    cnx.Open();
                    nh.stpAutorizaNomina(GLOBALES.IDEMPRESA, periodoInicio.Date, periodoFin.Date, GLOBALES.IDUSUARIO, _tipoNomina, _periodo);
                    cnx.Close();
                    cnx.Dispose();

                    if (_tipoNomina == GLOBALES.NORMAL)
                    {
                        obtenerPeriodoCalculo();
                        CargaPreNomina(periodoInicio, periodoFin);
                        cp_OnNuevoPeriodo(periodoInicio, periodoFin);
                    }
                    else if (_tipoNomina == GLOBALES.EXTRAORDINARIO_NORMAL)
                    {
                        dgvEmpleados.DataSource = null;
                        dgvEmpleados.Rows.Clear();
                    }

                    MessageBox.Show("Nomina autorizada.", "Confirmación");
                }
                catch (Exception error)
                {
                    MessageBox.Show("Error (Autorizacion Nómina): \r\n \r\n" + error.Message, "Error");
                }
            }
        }