private void ListaIncapacidad()
        {
            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;
            eh = new Empleados.Core.EmpleadosHelper();
            ih = new Incidencias.Core.IncidenciasHelper();
            eh.Command = cmd;
            ih.Command = cmd;

            Incidencias.Core.Incidencias incidencia = new Incidencias.Core.Incidencias();
            incidencia.idempresa = GLOBALES.IDEMPRESA;

            Empleados.Core.Empleados empleado = new Empleados.Core.Empleados();
            empleado.idempresa = GLOBALES.IDEMPRESA;
            empleado.estatus = GLOBALES.ACTIVO;

            try
            {
                cnx.Open();
                lstEmpleados = eh.obtenerEmpleados(empleado);
                lstIncidencias = ih.obtenerIndicencias(incidencia);
                cnx.Close();
                cnx.Dispose();
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
            }

            var datos = from e in lstEmpleados
                        join i in lstIncidencias on e.idtrabajador equals i.idtrabajador
                        orderby e.nombrecompleto ascending
                        select new
                        {
                            IdTrabajador = e.idtrabajador,
                            NoEmpleado = e.noempleado,
                            Nombre = e.nombrecompleto,
                            Certificado = i.certificado,
                            PeriodoInicio = i.periodoinicio,
                            PeriodoFin = i.periodofin,
                            Dias = i.dias,
                            InicioIncapacidad = i.inicioincapacidad,
                            FinIncapacidad = i.finincapacidad
                        };

            dgvIncapacidad.DataSource = datos.ToList();

            dgvIncapacidad.Columns["IdTrabajador"].Visible = false;

            for (int i = 0; i < dgvIncapacidad.Columns.Count; i++)
            {
                dgvIncapacidad.AutoResizeColumn(i);
            }
        }
Esempio n. 2
0
        private void muestraIncidencias()
        {
            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;

            Incidencias.Core.IncidenciasHelper ih = new Incidencias.Core.IncidenciasHelper();
            ih.Command = cmd;

            Incidencias.Core.Incidencias incidencia = new Incidencias.Core.Incidencias();
            incidencia.fechainicio = _inicioPeriodo.Date;
            incidencia.fechafin = _finPeriodo.Date;
            incidencia.idtrabajador = idTrabajador;

            List<Incidencias.Core.Incidencias> lstIncidencias = new List<Incidencias.Core.Incidencias>();

            try
            {
                cnx.Open();
                lstIncidencias = ih.obtenerIndicenciasTrabajador(incidencia);
                cnx.Close();
                cnx.Dispose();
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: Al obtener las Incapacidades. (Función Muestra Incidencias.) \r\n \r\n" + error.Message, "Error");
            }

            lstvIncidencias.Clear();
            lstvIncidencias.View = View.Details;
            lstvIncidencias.GridLines = true;
            lstvIncidencias.Columns.Add("Certificado", 70, HorizontalAlignment.Right);

            for (int i = 0; i < lstIncidencias.Count; i++)
            {
                lstvIncidencias.Items.Add(lstIncidencias[i].certificado);
            }
        }
Esempio n. 3
0
        private void lstvIncidencias_Click(object sender, EventArgs e)
        {
            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;

            Incidencias.Core.IncidenciasHelper ih = new Incidencias.Core.IncidenciasHelper();
            ih.Command = cmd;

            List<Incidencias.Core.Incidencias> lstIncidencia = new List<Incidencias.Core.Incidencias>();

            Incidencias.Core.Incidencias incidencia = new Incidencias.Core.Incidencias();
            incidencia.fechainicio = _inicioPeriodo;
            incidencia.fechafin = _finPeriodo;
            incidencia.idtrabajador = idTrabajador;

            if (lstvIncidencias.SelectedItems.Count > 0)
            {
                ListViewItem listItem = lstvIncidencias.SelectedItems[0];
                incidencia.certificado = listItem.Text;

                try
                {
                    cnx.Open();
                    lstIncidencia = ih.obtenerIndicenciaTrabajador(incidencia);
                    cnx.Close();
                    cnx.Dispose();
                }
                catch
                {
                    MessageBox.Show("Error al obtener la incapacidad.", "Error");
                    cnx.Dispose();
                }
            }

            for (int i = 0; i < lstIncidencia.Count; i++)
            {
                txtDiasIncapacidad.Text = lstIncidencia[i].dias.ToString();
                dtpInicioInc.Value = lstIncidencia[i].inicioincapacidad;
                dtpFinInc.Value = lstIncidencia[i].finincapacidad;
                txtCertificado.Text = lstIncidencia[i].certificado;
            }
        }
Esempio n. 4
0
        private void toolGuardar_Click(object sender, EventArgs e)
        {
            int existe = 0;
            if (_idEmpleado == 0)
            {
                MessageBox.Show("No ha seleccionado al Empleado.", "Información");
                return;
            }
            //SE VALIDA SI TODOS LOS CAMPOS HAN SIDO LLENADOS.
            string control = GLOBALES.VALIDAR(this, typeof(TextBox));
            if (!control.Equals(""))
            {
                MessageBox.Show("Falta el campo: " + control, "Información");
                return;
            }

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

            Faltas.Core.FaltasHelper fh = new Faltas.Core.FaltasHelper();
            fh.Command = cmd;

            DateTime finIncapacidad = dtpFechaInicio.Value.AddDays(double.Parse(txtDiasIncapacidad.Text) - 1);
            int a = 0;
            int existeFalta = 0;
            bool FLAGFALTAS = false;

            Incidencias.Core.IncidenciasHelper incidenciah = new Incidencias.Core.IncidenciasHelper();
            incidenciah.Command = cmd;
            DateTime fii, ffi;
            bool FLAG_FINICIO = false, FLAG_FFIN = false;
            List<Incidencias.Core.Incidencias> datoFechas = new List<Incidencias.Core.Incidencias>();
            try
            {
                cnx.Open();
                datoFechas = incidenciah.finIncapacidad(_idEmpleado);
                cnx.Close();
            }
            catch {
                MessageBox.Show("Error: Al obtener la ultima fecha de incapacidad.", "Error");
                cnx.Dispose();
                return;
            }

            if (datoFechas.Count != 0)
            {
                fii = dtpFechaInicio.Value.Date;
                ffi = dtpFechaInicio.Value.AddDays(int.Parse(txtDiasIncapacidad.Text) - 1);
                for (int i = 0; i < datoFechas.Count; i++)
                {
                    if (fii.Date <= datoFechas[i].finincapacidad.Date)
                    {
                        FLAG_FINICIO = true;
                    }
                    if (ffi.Date >= datoFechas[i].inicioincapacidad.Date)
                    {
                        FLAG_FFIN = true;
                    }
                }
                //ffi = DateTime.Parse(datoFecha.ToString());
                if (FLAG_FINICIO && FLAG_FFIN)
                {
                    MessageBox.Show("Las fechas de la incapacidad se empalman con una ya existente.", "Información");
                    return;
                }
                else if (FLAG_FINICIO)
                {
                    MessageBox.Show("Las fechas de la incapacidad se empalman con una ya existente.", "Información");
                    return;
                }
            }

            while (dtpFechaInicio.Value.AddDays(a).Date <= finIncapacidad.Date)
            {
                try
                {
                    cnx.Open();
                    existeFalta = (int)fh.existeFalta(_idEmpleado, dtpFechaInicio.Value.AddDays(a).Date);
                    cnx.Close();
                }
                catch
                {
                    MessageBox.Show("Error: Al obtener la existencia de faltas.", "Error");
                    cnx.Dispose();
                    return;
                }

                if (existeFalta != 0)
                {
                    try
                    {
                        cnx.Open();
                        fh.eliminaFalta(_idEmpleado, dtpFechaInicio.Value.AddDays(a).Date);
                        FLAGFALTAS = true;
                        cnx.Close();
                    }
                    catch
                    {
                        MessageBox.Show("Error: Al eliminar la falta existente.", "Error");
                        cnx.Dispose();
                        return;
                    }
                }
                a++;
            }

            if (FLAGFALTAS)
                MessageBox.Show("Se encontraron faltas al momento de ingresar la incapacidad. \r\n \r\n Estas se quitaron.", "Confirmación");

            ih = new Incidencias.Core.IncidenciasHelper();
            ih.Command = cmd;
            ih.bulkCommand = bulk;

            Incidencias.Core.Incidencias incidencia = new Incidencias.Core.Incidencias();
            incidencia.certificado = txtCertificado.Text.Trim();

            List<Incidencias.Core.Incidencias> lstIncidencias;

            try
            {
                cnx.Open();
                existe = int.Parse(ih.existeCertificado(incidencia).ToString());
                cnx.Close();
            }
            catch (Exception error)
            {
                MessageBox.Show("Error al consultar el certificado. \r\n \r\n Descripcion: " + error.Message, "Error");
            }

            if (existe == 0)
            {
                PeriodoFechaAplicacion();

                DateTime fechaInicioIncapacidad = dtpFechaInicio.Value.Date;
                DateTime fechaFinIncapacidad = dtpFechaInicio.Value.AddDays(double.Parse(txtDiasIncapacidad.Text) - 1).Date;
                //DateTime fechaFinPeriodo = dtpFinPeriodo.Value.Date;
                DateTime fechaFinPeriodo = periodoFin.Date;
                int diasRestantes = int.Parse(txtDiasIncapacidad.Text);
                int dias = 0;
                bool FLAG = false;
                lstIncidencias = new List<Incidencias.Core.Incidencias>();
                int i = 1;

                while (diasRestantes != 0)
                {
                    if (fechaFinIncapacidad <= fechaFinPeriodo)
                    {
                        Incidencias.Core.Incidencias incidencia2 = new Incidencias.Core.Incidencias();
                        incidencia2.id = i;
                        incidencia2.idtrabajador = _idEmpleado;
                        incidencia2.idempresa = GLOBALES.IDEMPRESA;
                        incidencia2.certificado = txtCertificado.Text.Trim();
                        incidencia2.inicioincapacidad = dtpFechaInicio.Value;
                        incidencia2.finincapacidad = dtpFechaInicio.Value.AddDays(double.Parse(txtDiasIncapacidad.Text) - 1);
                        incidencia2.periodoinicio = periodoInicio.Date;
                        incidencia2.periodofin = periodoFin.Date;
                        incidencia2.idcontrol = int.Parse(cmbTipoCaso.SelectedValue.ToString());
                        incidencia2.idincapacidad = int.Parse(cmbTipoIncapacidad.SelectedValue.ToString());

                        dias = diasRestantes;
                        incidencia2.dias = dias;
                        incidencia2.fechainicio = fechaInicioIncapacidad.Date;
                        incidencia2.fechafin = fechaFinIncapacidad.Date;

                        lstIncidencias.Add(incidencia2);

                    }
                    else
                    {
                        Incidencias.Core.Incidencias incidencia2 = new Incidencias.Core.Incidencias();
                        incidencia2.id = i;
                        incidencia2.idtrabajador = _idEmpleado;
                        incidencia2.idempresa = GLOBALES.IDEMPRESA;
                        incidencia2.certificado = txtCertificado.Text.Trim();
                        incidencia2.inicioincapacidad = dtpFechaInicio.Value;
                        incidencia2.finincapacidad = dtpFechaInicio.Value.AddDays(double.Parse(txtDiasIncapacidad.Text) - 1);
                        incidencia2.periodoinicio = periodoInicio.Date;
                        incidencia2.periodofin = periodoFin.Date;
                        incidencia2.idcontrol = int.Parse(cmbTipoCaso.SelectedValue.ToString());
                        incidencia2.idincapacidad = int.Parse(cmbTipoIncapacidad.SelectedValue.ToString());

                        if (!FLAG)
                        {
                            dias = (int)(fechaFinPeriodo - fechaInicioIncapacidad).TotalDays + 1;
                            incidencia2.dias = dias;
                            incidencia2.fechainicio = fechaInicioIncapacidad.Date;
                            incidencia2.fechafin = fechaFinPeriodo.Date;

                            fechaInicioIncapacidad = fechaFinPeriodo.AddDays(1);
                            if (periodo == 7)
                                fechaFinPeriodo = fechaFinPeriodo.AddDays(periodo);
                            else
                            {
                                if (fechaInicioIncapacidad.Day <= 15)
                                {
                                    fechaFinPeriodo = fechaFinPeriodo.AddDays(periodo);
                                }
                                else
                                {
                                    fechaFinPeriodo = new DateTime(fechaFinPeriodo.Year, fechaFinPeriodo.Month, DateTime.DaysInMonth(fechaFinPeriodo.Year, fechaFinPeriodo.Month));
                                }
                            }
                            FLAG = true;
                        }
                        else
                        {
                            if (diasRestantes > periodo)
                            {
                                dias = (int)(fechaFinPeriodo - fechaInicioIncapacidad).TotalDays + 1;
                                incidencia2.dias = dias;
                                incidencia2.fechainicio = fechaInicioIncapacidad.Date;
                                incidencia2.fechafin = fechaFinPeriodo.Date;

                                fechaInicioIncapacidad = fechaFinPeriodo.AddDays(1);
                                if (periodo == 7)
                                    fechaFinPeriodo = fechaFinPeriodo.AddDays(periodo);
                                else
                                {
                                    if (fechaInicioIncapacidad.Day <= 15)
                                    {
                                        fechaFinPeriodo = fechaFinPeriodo.AddDays(periodo);
                                    }
                                    else
                                    {
                                        fechaFinPeriodo = new DateTime(fechaFinPeriodo.Year, fechaFinPeriodo.Month, DateTime.DaysInMonth(fechaFinPeriodo.Year, fechaFinPeriodo.Month));
                                    }
                                }
                            }
                        }

                        lstIncidencias.Add(incidencia2);
                    }

                    diasRestantes = diasRestantes - dias;
                    i++;
                }
            }
            else
            {
                MessageBox.Show("El certificado que intenta guardar ya existe.", "Error");
                return;
            }

            switch (_tipoForma)
            {
                case 0://ALTA EN BASE DE DATOS

                        DataTable dt = new DataTable();
                        DataRow dtFila;
                        dt.Columns.Add("id", typeof(Int32));
                        dt.Columns.Add("idtrabajador", typeof(Int32));
                        dt.Columns.Add("idempresa", typeof(Int32));
                        dt.Columns.Add("dias", typeof(Int32));
                        dt.Columns.Add("certificado", typeof(String));
                        dt.Columns.Add("inicioincapacidad", typeof(DateTime));
                        dt.Columns.Add("finincapacidad", typeof(DateTime));
                        dt.Columns.Add("fechainicio", typeof(DateTime));
                        dt.Columns.Add("fechafin", typeof(DateTime));
                        dt.Columns.Add("periodoinicio", typeof(DateTime));
                        dt.Columns.Add("periodofin", typeof(DateTime));
                        dt.Columns.Add("idcontrol", typeof(Int32));
                        dt.Columns.Add("idincapacidad", typeof(Int32));

                        for (int i = 0; i < lstIncidencias.Count; i++)
                        {
                            dtFila = dt.NewRow();
                            dtFila["id"] = lstIncidencias[i].id;
                            dtFila["idtrabajador"] = lstIncidencias[i].idtrabajador;
                            dtFila["idempresa"] = lstIncidencias[i].idempresa;
                            dtFila["dias"] = lstIncidencias[i].dias;
                            dtFila["certificado"] = lstIncidencias[i].certificado;
                            dtFila["inicioincapacidad"] = lstIncidencias[i].inicioincapacidad;
                            dtFila["finincapacidad"] = lstIncidencias[i].finincapacidad;
                            dtFila["fechainicio"] = lstIncidencias[i].fechainicio;
                            dtFila["fechafin"] = lstIncidencias[i].fechafin;
                            dtFila["periodoinicio"] = lstIncidencias[i].periodoinicio;
                            dtFila["periodofin"] = lstIncidencias[i].periodofin;
                            dtFila["idcontrol"] = lstIncidencias[i].idcontrol;
                            dtFila["idincapacidad"] = lstIncidencias[i].idincapacidad;
                            dt.Rows.Add(dtFila);
                        }

                        try
                        {

                            cnx.Open();
                            ih.bulkIncidencia(dt, "tmpIncidencias");
                            ih.stpIncidencia(dtpInicioPeriodo.Value.Date, dtpFinPeriodo.Value.Date);
                            cnx.Close();
                            cnx.Dispose();

                            if (OnIncapacidad != null)
                                OnIncapacidad();
                        }
                        catch (Exception error)
                        {
                            MessageBox.Show("Error al ingresar la incapacidad. \r\n \r\n Descripcion: " + error.Message, "Error");
                        }
                        this.Dispose();
                    break;

                //case 1://ALTA EN DATAGRIDVIEW
                //    try
                //    {
                //        cnx.Open();
                //        lstEmpleado = eh.obtenerEmpleado(empleado);
                //        cnx.Close();
                //        cnx.Dispose();

                //        if (OnIncapacidad != null)
                //            OnIncapacidad(lstEmpleado[0].noempleado,
                //                lstEmpleado[0].nombres,
                //                lstEmpleado[0].paterno,
                //                lstEmpleado[0].materno,
                //                int.Parse(txtDiasIncapacidad.Text),
                //                dtpFechaInicio.Value,
                //                dtpInicioPeriodo.Value,
                //                dtpFinPeriodo.Value);
                //    }
                //    catch (Exception error)
                //    {
                //        MessageBox.Show("Error al ingresar la incapacidad. \r\n \r\n Descripcion: " + error.Message, "Error");
                //    }
                //    break;
            }
        }
        private void toolEliminar_Click(object sender, EventArgs e)
        {
            int fila = 0;

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

            ih = new Incidencias.Core.IncidenciasHelper();
            ih.Command = cmd;

            fila = dgvIncapacidad.CurrentCell.RowIndex;
            Incidencias.Core.Incidencias incidencia = new Incidencias.Core.Incidencias();
            incidencia.idtrabajador = int.Parse(dgvIncapacidad.Rows[fila].Cells[0].Value.ToString());
            incidencia.certificado = dgvIncapacidad.Rows[fila].Cells[3].Value.ToString();

            try
            {
                cnx.Open();
                ih.eliminaIncidencia(incidencia);
                cnx.Close();
                cnx.Dispose();
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
            }

            ListaIncapacidad();
        }
Esempio n. 6
0
        private void btnAceptar_Click(object sender, EventArgs e)
        {
            int existeVacaciones = 0, existeIncapacidad = 0;
            int diasProporcionales = 0;
            int existeBaja = 0;
            DialogResult respuesta = MessageBox.Show("¿Desea dar de baja al empleado?","Confirmación",MessageBoxButtons.YesNo);
            if (respuesta == DialogResult.Yes)
            {
                //if (ausentismo)
                //{
                //    frmDiasAusentismo da = new frmDiasAusentismo();
                //    da.OnDiasAusentismo += da_OnDiasAusentismo;
                //    da.ShowDialog();
                //}

                //if (diasAusentismo == 0 && ausentismo)
                //{
                //    MessageBox.Show("El número de dias es 0 o se presionó el boton cancelar. Por favor revisar.", "Error");
                //    return;
                //}

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

                PeriodoFechaAplicacion();

                #region EXISTENCIA DE INCAPACIDAD
                Incidencias.Core.IncidenciasHelper ih = new Incidencias.Core.IncidenciasHelper();
                ih.Command = cmd;

                Incidencias.Core.Incidencias incidencia = new Incidencias.Core.Incidencias();
                incidencia.idtrabajador = _idempleado;
                incidencia.fechainicio = periodoInicio.Date;
                incidencia.fechafin = periodoFin.Date;

                try
                {
                    cnx.Open();
                    existeIncapacidad = (int)ih.existeIncidenciaBaja(incidencia);
                    cnx.Close();
                }
                catch
                {
                    MessageBox.Show("Error: Al obtener existencia de Incapacidad.","Error");
                    cnx.Dispose();
                    return;
                }
                #endregion

                #region EXISTENCIA DE VACACIONES
                Vacaciones.Core.VacacionesHelper vh = new Vacaciones.Core.VacacionesHelper();
                vh.Command = cmd;

                Vacaciones.Core.VacacionesPrima vp = new Vacaciones.Core.VacacionesPrima();
                vp.idtrabajador = _idempleado;
                vp.periodoinicio = periodoInicio;
                vp.periodofin = periodoFin;
                vp.vacacionesprima = "V";

                try
                {
                    cnx.Open();
                    existeVacaciones = (int)vh.existeVacacionesPrima(vp);
                    cnx.Close();
                }
                catch
                {
                    MessageBox.Show("Error: Al obtener existencia de Vacaciones.", "Error");
                    cnx.Dispose();
                    return;
                }
                #endregion

                #region VALIDACION DE INCAPACIDAD
                if (existeIncapacidad != 0)
                {
                    DateTime fechaInicioIncidencia;
                    DateTime fechaFinIncidencia;
                    try
                    {
                        cnx.Open();
                        fechaInicioIncidencia = DateTime.Parse(ih.fechaInicio(incidencia).ToString());
                        fechaFinIncidencia = DateTime.Parse(ih.fechaFin(incidencia).ToString());
                        cnx.Close();
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Error: Al obtener las fechas de incapacidad.", "Error");
                        cnx.Dispose();
                        return;
                    }

                    if (dtpFechaBaja.Value.Date >= fechaInicioIncidencia.Date && dtpFechaBaja.Value.Date <= fechaFinIncidencia.Date)
                    {
                        MessageBox.Show("No se puede dar de baja. La fecha de baja esta entre una incapacidad.", "Error");
                        return;
                    }
                    if (dtpFechaBaja.Value.Date <= fechaInicioIncidencia.Date)
                    {
                        MessageBox.Show("No se puede dar de baja. Existe una incapacidad.", "Error");
                        return;
                    }
                }
                #endregion

                #region VALIDACION DE VACACIONES
                if (existeVacaciones != 0)
                {
                    DateTime fechaInicioVac;
                    DateTime fechaFinVac;

                    try
                    {
                        cnx.Open();
                        fechaInicioVac = DateTime.Parse(vh.fechaInicio(vp).ToString());
                        fechaFinVac = DateTime.Parse(vh.fechaFin(vp).ToString());
                        cnx.Close();
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Error: Al obtener las fechas de las vacaciones.", "Error");
                        cnx.Dispose();
                        return;
                    }

                    if (dtpFechaBaja.Value.Date >= fechaInicioVac.Date && dtpFechaBaja.Value.Date <= fechaFinVac.Date)
                    {
                        MessageBox.Show("No se puede dar de baja. La fecha de baja coninciden con vacaciones.", "Error");
                        return;
                    }
                    if (dtpFechaBaja.Value.Date <= fechaInicioVac.Date)
                    {
                        MessageBox.Show("No se puede dar de baja. El trabajador tiene vacaciones.", "Error");
                        return;
                    }
                }
                #endregion

                Empresas.Core.EmpresasHelper ep = new Empresas.Core.EmpresasHelper();
                ep.Command = cmd;

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

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

                Empleados.Core.Empleados emp = new Empleados.Core.Empleados();
                emp.idtrabajador = _idempleado;

                Empleados.Core.EmpleadosEstatus ee = new Empleados.Core.EmpleadosEstatus();
                ee.idtrabajador = _idempleado;
                ee.idempresa = GLOBALES.IDEMPRESA;
                ee.estatus = GLOBALES.INACTIVO;

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

                Historial.Core.Historial h = new Historial.Core.Historial();
                h.idtrabajador = _idempleado;
                h.tipomovimiento = GLOBALES.mBAJA;
                h.fecha_imss = dtpFechaBaja.Value;
                h.fecha_sistema = DateTime.Now;
                h.idempresa = GLOBALES.IDEMPRESA;
                h.motivobaja = int.Parse(cmbMotivoBaja.SelectedValue.ToString());
                h.iddepartamento = 0;
                h.idpuesto = 0;

                //Ausentismo.Core.AusentismoHelper ah = new Ausentismo.Core.AusentismoHelper();
                //ah.Command = cmd;

                //Ausentismo.Core.Ausentismo a = new Ausentismo.Core.Ausentismo();
                //a.idtrabajador = _idempleado;
                //a.idempresa = GLOBALES.IDEMPRESA;
                //a.fecha_imss = dtpFechaBaja.Value;
                //a.dias = diasAusentismo;

                Bajas.Core.BajasHelper bh = new Bajas.Core.BajasHelper();
                bh.Command = cmd;

                Bajas.Core.Bajas baja = new Bajas.Core.Bajas();
                baja.idtrabajador = _idempleado;
                baja.idempresa = GLOBALES.IDEMPRESA;
                baja.motivo = int.Parse(cmbMotivoBaja.SelectedValue.ToString());
                baja.fecha = dtpFechaBaja.Value.Date;
                //baja.diasproporcionales = (int)(dtpFechaBaja.Value.Date - periodoInicio.Date).TotalDays + 1;
                baja.periodoinicio = periodoInicio.Date;
                baja.periodofin = periodoFin.Date;
                baja.observaciones = txtObservaciones.Text;
                baja.registro = DateTime.Now;

                diasProporcionales = (int)(dtpFechaBaja.Value.Date - periodoInicio.Date).TotalDays + 1;
                if (diasProporcionales == 16)
                    baja.diasproporcionales = diasProporcionales - 1;
                else
                    baja.diasproporcionales = (int)(dtpFechaBaja.Value.Date - periodoInicio.Date).TotalDays + 1;

                try
                {
                    cnx.Open();
                    existeBaja = (int)bh.existeBaja(baja);
                    cnx.Close();
                }
                catch (Exception)
                {
                    MessageBox.Show("Error: Al verificar la existencia de la baja.", "Error");
                    cnx.Dispose();
                    return;
                }

                if (existeBaja != 0)
                {
                    MessageBox.Show(
                        string.Format("El trabajador ya cuenta con una baja en el periodo del: \r\n \r\n {0} al {1}",
                        periodoInicio.Date.ToShortDateString(), periodoFin.Date.ToShortDateString()),
                        "Información");
                    return;
                }

                bool obraCivil = false;
                try
                {
                    cnx.Open();
                    obraCivil = bool.Parse(eh.esObraCivil(GLOBALES.IDEMPRESA, _idempleado).ToString());
                    cnx.Close();
                }
                catch (Exception error)
                {
                    MessageBox.Show("Error: Al obtener dato de obra civil. \r\n \r\n" + error.Message, "Error");
                    return;
                }

                if (obraCivil)
                {
                    nh = new CalculoNomina.Core.NominaHelper();
                    nh.Command = cmd;
                    List<CalculoNomina.Core.tmpPagoNomina> lstPreNominaGuardada = new List<CalculoNomina.Core.tmpPagoNomina>();
                    List<CalculoNomina.Core.tmpPagoNomina> lstUltimaNomina = new List<CalculoNomina.Core.tmpPagoNomina>();
                    try
                    {
                        cnx.Open();
                        lstUltimaNomina = nh.obtenerUltimaNominaTrabajador(GLOBALES.IDEMPRESA, _idempleado, periodo);
                        lstPreNominaGuardada = nh.fechaPreNominaObraCivil(GLOBALES.IDEMPRESA, _idempleado, periodoInicio, periodoFin);
                        cnx.Close();
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show("Error: Al obtener las fechas de pago. \r\n \r\n" + error.Message, "Error");
                        return;
                    }

                    if (lstUltimaNomina.Count != 0)
                    {
                        if (dtpFechaBaja.Value.Date >= lstUltimaNomina[0].fechainicio || dtpFechaBaja.Value.Date <= lstUltimaNomina[0].fechafin)
                        {
                            MessageBox.Show("La baja corresponde a un periodo cerrado.", "Información");
                            return;
                        }
                    }

                    if (lstPreNominaGuardada.Count != 0)
                    {
                        if (dtpFechaBaja.Value.Date <= lstPreNominaGuardada[0].fechafin)
                        {
                            try
                            {
                                Bajas.Core.Bajas bajaTrabajador = new Bajas.Core.Bajas();
                                bajaTrabajador.idtrabajador = _idempleado;
                                cnx.Open();
                                bh.bajaEmpleado(bajaTrabajador);
                                nh.eliminaPreNomina(_idempleado, periodo);
                                cnx.Close();
                            }
                            catch (Exception error)
                            {
                                MessageBox.Show("Error: Al dar baja del empleado. \r\n \r\n" + error.Message, "Error");
                                return;
                            }
                        }
                    }
                }
                else {
                    nh = new CalculoNomina.Core.NominaHelper();
                    nh.Command = cmd;
                    List<CalculoNomina.Core.tmpPagoNomina> lstNomina = new List<CalculoNomina.Core.tmpPagoNomina>();
                    try
                    {
                        cnx.Open();
                        lstNomina = nh.obtenerUltimaNominaTrabajador(GLOBALES.IDEMPRESA, _idempleado, periodo);
                        cnx.Close();
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show("Error: Al obtener las fechas de pago. \r\n \r\n" + error.Message, "Error");
                        return;
                    }

                    if (lstNomina.Count != 0)
                    {
                        if (dtpFechaBaja.Value.Date <= lstNomina[0].fechainicio || dtpFechaBaja.Value.Date <= lstNomina[0].fechafin)
                        {
                            try
                            {
                                Bajas.Core.Bajas bajaTrabajador = new Bajas.Core.Bajas();
                                bajaTrabajador.idtrabajador = _idempleado;
                                cnx.Open();
                                bh.bajaEmpleado(bajaTrabajador);
                                nh.eliminaPreNomina(_idempleado, periodo);
                                cnx.Close();
                                baja.fecha = lstNomina[0].fechafin;
                                baja.diasproporcionales = 1;
                                MessageBox.Show("La baja corresponde a un periodo cerrado. \r\n\r\n Se dará con la fecha de termino del periodo cerrado: " +
                                    lstNomina[0].fechafin.ToShortDateString(), "Información");
                            }
                            catch (Exception error)
                            {
                                MessageBox.Show("Error: Al dar baja del empleado. \r\n \r\n" + error.Message, "Error");
                                return;
                            }
                        }
                    }
                }

                try
                {
                    cnx.Open();
                    h.valor = (decimal)eh.obtenerSalarioDiarioIntegrado(emp);
                    hp.insertarHistorial(h);
                    //ACTUALIZA TABLA trabajadoresestatus
                    eh.bajaEmpleado(ee);

                    baja.registropatronal = (string)ep.obtenerRegistroPatronal(empresa);
                    baja.nss = (string)eh.obtenerNss(emp);
                    bh.insertaBaja(baja);

                    //if (ausentismo)
                    //{
                    //    a.registropatronal = (string)ep.obtenerRegistroPatronal(empresa);
                    //    a.nss = (string)eh.obtenerNss(emp);
                    //    ah.insertaAusentismo(a);
                    //}

                    cnx.Close();
                    cnx.Dispose();

                    if(OnBajaEmpleado !=  null)
                        OnBajaEmpleado(GLOBALES.ACTIVO);
                }
                catch (Exception error)
                {
                    MessageBox.Show("Error: \r\n \r\n " + error.Message, "Error");
                }

                MessageBox.Show("Baja exitosa.", "Información");
                btnAceptar.Enabled = false;
                this.Dispose();
            }
        }