private void toolMostrarDatos_Click(object sender, EventArgs e)
        {
            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.obracivil = _obracivil;

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

            try
            {
                cnx.Open();
                lstPreNomina = nh.obtenerPreNomina(pn, _periodo);
                cnx.Close();
                cnx.Dispose();
            }
            catch
            {
                MessageBox.Show("Error: Al obtener los valores de la prenomina. (Mostrar Datos).", "Error");
                cnx.Dispose();
                return;
            }

            foreach (DataGridViewRow fila in dgvEmpleados.Rows)
            {
                for (int i = 0; i < lstPreNomina.Count; i++)
                {
                    if (int.Parse(fila.Cells["idtrabajador"].Value.ToString()) == lstPreNomina[i].idtrabajador)
                    {
                        switch (lstPreNomina[i].noconcepto)
                        {
                            case 1:
                                fila.Cells["sueldo"].Value = lstPreNomina[i].cantidad;
                                break;
                            case 2:
                                fila.Cells["horas"].Value = lstPreNomina[i].cantidad;
                                break;
                            case 3:
                                fila.Cells["asistencia"].Value = lstPreNomina[i].cantidad;
                                break;
                            case 5:
                                fila.Cells["puntualidad"].Value = lstPreNomina[i].cantidad;
                                break;
                            case 6:
                                fila.Cells["despensa"].Value = lstPreNomina[i].cantidad;
                                break;
                        }
                    }
                }
            }
        }
Esempio n. 2
0
        void da_OnDespensa(decimal cantidad)
        {
            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;

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

            CalculoNomina.Core.tmpPagoNomina despensa = new CalculoNomina.Core.tmpPagoNomina();
            despensa.idempresa = GLOBALES.IDEMPRESA;
            despensa.idtrabajador = idTrabajador;
            despensa.noconcepto = 6; //CONCEPTO DESPENSA
            despensa.fechainicio = _inicioPeriodo.Date;
            despensa.fechafin = _finPeriodo.Date;
            despensa.cantidad = cantidad;
            despensa.exento = 0;
            despensa.gravado = cantidad;
            despensa.modificado = true;
            try
            {
                cnx.Open();
                nh.actualizaHorasExtrasDespensa(despensa);
                cnx.Close();
                cnx.Dispose();

                muestraDatos();
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
            }
        }
Esempio n. 3
0
        private void ChecaFechaAltaReingreso()
        {
            DateTime inicio = DateTime.Now.Date, fin = DateTime.Now.Date;

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

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

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

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

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

            try
            {
                cnx.Open();
                lstUltimaNomina = nh.obtenerUltimaNomina(GLOBALES.IDEMPRESA, false);
                cnx.Close();
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
            }

            if (lstUltimaNomina.Count != 0)
            {
                if (Periodo == 7)
                {
                    inicio = lstUltimaNomina[0].fechafin.AddDays(1);
                    fin = lstUltimaNomina[0].fechafin.AddDays(7);
                }
                else
                {
                    inicio = lstUltimaNomina[0].fechafin.AddDays(1);
                    if (inicio.Day <= 15)
                        fin = lstUltimaNomina[0].fechafin.AddDays(15);
                    else
                        fin = new DateTime(inicio.Year, inicio.Month,
                            DateTime.DaysInMonth(inicio.Year, inicio.Month));
                }
            }

            Altas.Core.Altas a = new Altas.Core.Altas();
            a.idtrabajador = _idEmpleado;
            a.periodoInicio = inicio.Date;
            a.periodoFin = fin.Date;

            Reingreso.Core.Reingresos r = new Reingreso.Core.Reingresos();
            r.idtrabajador = _idEmpleado;
            r.periodoinicio = inicio.Date;
            r.periodofin = fin.Date;

            int existeAlta = 0;
            int existeReingreso = 0;

            try
            {
                cnx.Open();
                existeAlta = (int)ah.existeAlta(a);
                existeReingreso = (int)rh.existeReingreso(r);
                cnx.Close();
            }
            catch (Exception)
            {
                MessageBox.Show("Error: Al obtener la existencia de la alta.", "Error");
                cnx.Dispose();
            }

            DateTime fechaAlta = DateTime.Now.Date;
            DateTime fechaReingreso = DateTime.Now.Date;
            if (existeAlta != 0)
            {
                try
                {
                    cnx.Open();
                    fechaAlta = DateTime.Parse(ah.fechaAlta(a).ToString());
                    cnx.Close();
                }
                catch (Exception)
                {
                    MessageBox.Show("Error: Al obtener la fecha de alta.", "Error");
                    cnx.Dispose();
                }

                if (dtpFechaAplicacion.Value.Date < fechaAlta)
                    dtpFechaAplicacion.Value = fechaAlta;
            }

            if (existeReingreso != 0)
            {
                try
                {
                    cnx.Open();
                    fechaReingreso = DateTime.Parse(rh.fechaReingreso(r).ToString());
                    cnx.Close();
                }
                catch (Exception)
                {
                    MessageBox.Show("Error: Al obtener la fecha de alta.", "Error");
                    cnx.Dispose();
                }

                if (dtpFechaAplicacion.Value.Date < fechaReingreso)
                    dtpFechaAplicacion.Value = fechaReingreso;
            }
        }
Esempio n. 4
0
        private void toolCalcular_Click(object sender, EventArgs e)
        {
            int existeConcepto = 0;
            int estatus = 0;
            int existeAltaReingreso = 0;
            //string noConceptosPercepciones = "", noConceptosDeducciones = "";
            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;

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

            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;

            if (_periodo == 7)
            {
                periodoInicioPosterior = _finPeriodo.AddDays(1);
                periodoFinPosterior = _finPeriodo.AddDays(7);
            }
            else
            {
                periodoInicioPosterior = _finPeriodo.AddDays(1);

                if (periodoInicioPosterior.Day <= 15)
                    periodoFinPosterior = _finPeriodo.AddDays(15);
                else
                    periodoFinPosterior = new DateTime(periodoInicioPosterior.Year, periodoInicioPosterior.Month,
                        DateTime.DaysInMonth(periodoInicioPosterior.Year, periodoInicioPosterior.Month));
            }

            try
            {
                cnx.Open();
                estatus = int.Parse(eh.obtenerEstatus(idTrabajador).ToString());
                cnx.Close();

                if (estatus == 0)
                {
                    cnx.Open();
                    nh.eliminaPreNomina(idTrabajador);
                    cnx.Close();
                 }
                else
                {

                    cnx.Open();
                    existeAltaReingreso = ah.existeAlta(GLOBALES.IDEMPRESA, idTrabajador, periodoInicioPosterior, periodoFinPosterior);
                    cnx.Close();

                    if (existeAltaReingreso != 0)
                    {
                        cnx.Open();
                        nh.eliminaPreNomina(idTrabajador);
                        cnx.Close();
                        MessageBox.Show("INFORMACION:\r\n\r\nEl trabajador a calcular fue dado de alta con fecha posterior al calculo actual.\r\nNo se calcula el trabajador.", "Información");
                        return;
                    }

                    cnx.Open();
                    existeAltaReingreso = rh.existeReingreso(GLOBALES.IDEMPRESA, idTrabajador, periodoInicioPosterior, periodoFinPosterior);
                    cnx.Close();

                    if (existeAltaReingreso != 0)
                    {
                        cnx.Open();
                        nh.eliminaPreNomina(idTrabajador);
                        cnx.Close();
                        MessageBox.Show("INFORMACION:\r\n\r\nEl trabajador a calcular fue dado de alta con fecha posterior al calculo actual.\r\nNo se calcula el trabajador.", "Información");
                        return;
                    }
                }
            }
            catch (Exception error)
            {
                MessageBox.Show("Error al verificar el estatus del trabajador(ID): " + idTrabajador + "\r\n\r\n" + error.Message, "Error");
                cnx.Close();
            }

            #region CONCEPTOS Y FORMULAS DEL TRABAJADOR
            try
            {
                /*************************************************************
                    * Se obtienen los conceptos con el campo modificado en 1
                    * de la tabla tmpPagoNomina con el SP stp_DatosNominaRecalculoTrabajador
                    *************************************************************/
                //cnx.Open();
                //lstConceptosPercepcionesModificados = nh.conceptosNominaTrabajador(GLOBALES.IDEMPRESA, "P", idTrabajador,
                //    _tipoNormalEspecial, _inicioPeriodo.Date, _finPeriodo.Date);
                //lstConceptosDeduccionesModificados = nh.conceptosNominaTrabajador(GLOBALES.IDEMPRESA, "D", idTrabajador,
                //    _tipoNormalEspecial, _inicioPeriodo.Date, _finPeriodo.Date);
                //cnx.Close();
                /***************** TERMINA *****************************/

                /*********************************************************
                    * Se verifica si las listas de los conceptos modificados
                    * son diferentes de 0, si son diferentes, se acumulan en la varible
                    * noConceptosPercepciones y noConceptosDeducciones
                    *********************************************************/
                //if (lstConceptosPercepcionesModificados.Count != 0)
                //{
                //    for (int i = 0; i < lstConceptosPercepcionesModificados.Count; i++)
                //        if (lstConceptosPercepcionesModificados[i].modificado)
                //            noConceptosPercepciones += lstConceptosPercepcionesModificados[i].noconcepto + ",";
                //    if (noConceptosPercepciones != "")
                //        noConceptosPercepciones = noConceptosPercepciones.Substring(0, noConceptosPercepciones.Length - 1);
                //}
                //else
                //    noConceptosPercepciones = "";

                //if (lstConceptosDeduccionesModificados.Count != 0)
                //{
                //    for (int i = 0; i < lstConceptosDeduccionesModificados.Count; i++)
                //        if (lstConceptosDeduccionesModificados[i].modificado)
                //            noConceptosDeducciones += lstConceptosDeduccionesModificados[i].noconcepto + ",";
                //    if (noConceptosDeducciones != "")
                //        noConceptosDeducciones = noConceptosDeducciones.Substring(0, noConceptosDeducciones.Length - 1);
                //}
                //else
                //    noConceptosDeducciones = "";
                /************************TERMINA***************************/

                /*****************************************************************
                    * Se llenan las listas con los conceptos que no estan modificados
                    * con el SP stp_DatosNominaTrabajador para el calculo.
                    *****************************************************************/
                cnx.Open();
                nh.eliminaNominaTrabajador(idTrabajador, _inicioPeriodo, _finPeriodo, _tipoNormalEspecial);
                lstConceptosPercepciones = nh.conceptosNominaTrabajador(GLOBALES.IDEMPRESA, "P", idTrabajador, _inicioPeriodo, _finPeriodo, _periodo);
                lstConceptosDeducciones = nh.conceptosNominaTrabajador(GLOBALES.IDEMPRESA, "D", idTrabajador, _inicioPeriodo, _finPeriodo, _periodo);
                cnx.Close();
                /**************************TERMINA*********************************/
            }
            catch
            {
                MessageBox.Show("Error: Al Obtener los conceptos del trabajador.\r\n \r\n La ventan se cerrara.", "Error");
                this.Dispose();
            }
            #endregion

            #region CALCULO DE PERCEPCIONES
            List<CalculoNomina.Core.tmpPagoNomina> lstPercepciones = new List<CalculoNomina.Core.tmpPagoNomina>();
            lstPercepciones = CALCULO.PERCEPCIONES(lstConceptosPercepciones, _inicioPeriodo.Date, _finPeriodo.Date, _tipoNormalEspecial);
            #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 = idTrabajador;
            per.fechainicio = _inicioPeriodo.Date;
            per.fechafin = _finPeriodo.Date;
            per.tipoconcepto = "P";
            per.tiponomina = _tipoNormalEspecial;
            cnx = new SqlConnection(cdn);
            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, _inicioPeriodo.Date, _finPeriodo.Date, _tipoNormalEspecial);
            #endregion

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

            #region PROGRAMACION DE MOVIMIENTOS
            List<CalculoNomina.Core.tmpPagoNomina> lstOtrasDeducciones = new List<CalculoNomina.Core.tmpPagoNomina>();

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

            if (percepciones != 0)
            {
                cnx = new SqlConnection(cdn);
                cmd = new SqlCommand();
                cmd.Connection = cnx;

                int existe = 0;
                ProgramacionConcepto.Core.ProgramacionHelper pch = new ProgramacionConcepto.Core.ProgramacionHelper();
                pch.Command = cmd;

                ProgramacionConcepto.Core.ProgramacionConcepto programacion = new ProgramacionConcepto.Core.ProgramacionConcepto();
                programacion.idtrabajador = idTrabajador;

                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 (_finPeriodo.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 = idTrabajador;
                            pne.fechainicio = _inicioPeriodo.Date;
                            pne.fechafin = _finPeriodo.Date;
                            pne.noconcepto = lstNoConcepto[0].noconcepto;

                            nh = new CalculoNomina.Core.NominaHelper();
                            nh.Command = cmd;
                            try
                            {
                                cnx.Open();
                                existeConcepto = (int)nh.existeConcepto(pne);
                                cnx.Close();
                            }
                            catch (Exception error)
                            {
                                MessageBox.Show("Error al obtener la existencia del concepto." + error.Message + "\r\n" + error.Source, "Error");
                                cnx.Dispose();
                            }

                            CalculoNomina.Core.tmpPagoNomina vn = new CalculoNomina.Core.tmpPagoNomina();
                            vn.idtrabajador = idTrabajador;
                            vn.idempresa = GLOBALES.IDEMPRESA;
                            vn.idconcepto = lstProgramacion[i].idconcepto;
                            vn.noconcepto = lstNoConcepto[0].noconcepto;
                            vn.tipoconcepto = lstNoConcepto[0].tipoconcepto;
                            vn.fechainicio = _inicioPeriodo.Date;
                            vn.fechafin = _finPeriodo.Date;
                            vn.exento = 0;
                            vn.gravado = 0;
                            vn.cantidad = lstProgramacion[i].cantidad;
                            vn.guardada = true;
                            vn.tiponomina = _tipoNormalEspecial;
                            vn.modificado = false;

                            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(idTrabajador, _inicioPeriodo.Date, _finPeriodo.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 (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();
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                decimal vacacion = lstPercepciones.Where(f => f.noconcepto == 7).Sum(f => f.cantidad);
                if (vacacion != 0)
                {
                    cnx = new SqlConnection(cdn);
                    cmd = new SqlCommand();
                    cmd.Connection = cnx;

                    int existe = 0;
                    ProgramacionConcepto.Core.ProgramacionHelper pch = new ProgramacionConcepto.Core.ProgramacionHelper();
                    pch.Command = cmd;

                    ProgramacionConcepto.Core.ProgramacionConcepto programacion = new ProgramacionConcepto.Core.ProgramacionConcepto();
                    programacion.idtrabajador = idTrabajador;

                    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 (_finPeriodo.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 = idTrabajador;
                                pne.fechainicio = _inicioPeriodo.Date;
                                pne.fechafin = _finPeriodo.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 = idTrabajador;
                                vn.idempresa = GLOBALES.IDEMPRESA;
                                vn.idconcepto = lstProgramacion[i].idconcepto;
                                vn.noconcepto = lstNoConcepto[0].noconcepto;
                                vn.tipoconcepto = lstNoConcepto[0].tipoconcepto;
                                vn.fechainicio = _inicioPeriodo.Date;
                                vn.fechafin = _finPeriodo.Date;
                                vn.exento = 0;
                                vn.gravado = 0;
                                vn.cantidad = lstProgramacion[i].cantidad;
                                vn.guardada = true;
                                vn.tiponomina = _tipoNormalEspecial;
                                vn.modificado = false;

                                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(idTrabajador, _inicioPeriodo.Date, _finPeriodo.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 (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

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

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

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

            if (percepciones != 0)
            {
                int existe = 0;
                Movimientos.Core.Movimientos mov = new Movimientos.Core.Movimientos();
                mov.idtrabajador = idTrabajador;
                mov.fechainicio = _inicioPeriodo.Date;
                mov.fechafin = _finPeriodo.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 = idTrabajador;
                        vn.idempresa = GLOBALES.IDEMPRESA;
                        vn.idconcepto = lstMovimiento[i].idconcepto;
                        vn.noconcepto = lstNoConcepto[0].noconcepto;
                        vn.tipoconcepto = lstNoConcepto[0].tipoconcepto;
                        vn.fechainicio = _inicioPeriodo.Date;
                        vn.fechafin = _finPeriodo.Date;
                        vn.exento = 0;
                        vn.gravado = 0;
                        vn.cantidad = lstMovimiento[i].cantidad;
                        vn.guardada = true;
                        vn.tiponomina = _tipoNormalEspecial;
                        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(idTrabajador, _inicioPeriodo.Date, _finPeriodo.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;
                        }

                        try
                        {
                            cnx.Open();
                            existe = (int)nh.existeConcepto(vn);
                            cnx.Close();
                        }
                        catch (Exception error)
                        {
                            MessageBox.Show("Error: Al verificar existencia de los movimientos. \r\n" + error.Message, "Error");
                        }

                        if (existe == 0)
                        {
                            lstOtrasDeducciones.Add(vn);
                        }
                        else
                        {
                            try
                            {
                                cnx.Open();
                                nh.actualizaConcepto(vn);
                                cnx.Close();
                            }
                            catch (Exception error)
                            {
                                MessageBox.Show("Error: Al actualizar los movimientos. " +  error.Message, "Error");
                            }

                        }
                    }
                }
            }
            #endregion

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

            #region MOSTRAR DATOS
            muestraDatos();
            #endregion

            #region PERIODO
            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;
            nh = new CalculoNomina.Core.NominaHelper();
            nh.Command = cmd;
            int noPeriodo = 0;
            try
            {
                if (_tipoNormalEspecial == GLOBALES.NORMAL)
                {
                    cnx.Open();
                    noPeriodo = int.Parse(nh.obtenerNoPeriodo(_periodo, _inicioPeriodo).ToString());
                    nh.actualizarNoPeriodo(GLOBALES.IDEMPRESA, _inicioPeriodo.Date, _finPeriodo.Date, noPeriodo);
                    cnx.Close();
                }
                else if (_tipoNormalEspecial == GLOBALES.EXTRAORDINARIO_NORMAL)
                {
                    cnx.Open();
                    noPeriodo = (int)(nh.obtenerNoPeriodoExtraordinario(GLOBALES.IDEMPRESA, _tipoNormalEspecial));
                    noPeriodo = noPeriodo + 1;
                    nh.actualizarNoPeriodo(GLOBALES.IDEMPRESA, _inicioPeriodo.Date, _finPeriodo.Date, noPeriodo);
                    cnx.Close();
                }

            }
            catch (Exception)
            {
                MessageBox.Show("Error: Al actualizar el No. de Periodo", "Error");
                cnx.Dispose();
                return;
            }
            #endregion
        }
Esempio n. 5
0
        private void BulkData(List<CalculoNomina.Core.tmpPagoNomina> lstValores)
        {
            #region BULK DATA
            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("idconcepto", typeof(Int32));
            dt.Columns.Add("noconcepto", typeof(Int32));
            dt.Columns.Add("tipoconcepto", typeof(String));
            dt.Columns.Add("exento", typeof(Decimal));
            dt.Columns.Add("gravado", typeof(Decimal));
            dt.Columns.Add("cantidad", typeof(Decimal));
            dt.Columns.Add("fechainicio", typeof(DateTime));
            dt.Columns.Add("fechafin", typeof(DateTime));
            dt.Columns.Add("noperiodo", typeof(Int32));
            dt.Columns.Add("diaslaborados", typeof(Int32));
            dt.Columns.Add("guardada", typeof(Boolean));
            dt.Columns.Add("tiponomina", typeof(Int32));
            dt.Columns.Add("modificado", typeof(Boolean));
            dt.Columns.Add("fechapago", typeof(DateTime));
            dt.Columns.Add("obracivil", typeof(Boolean));
            dt.Columns.Add("periodo", typeof(Int32));

            for (int i = 0; i < lstValores.Count; i++)
            {
                dtFila = dt.NewRow();
                dtFila["id"] = i + 1;
                dtFila["idtrabajador"] = lstValores[i].idtrabajador;
                dtFila["idempresa"] = lstValores[i].idempresa;
                dtFila["idconcepto"] = lstValores[i].idconcepto;
                dtFila["noconcepto"] = lstValores[i].noconcepto;
                dtFila["tipoconcepto"] = lstValores[i].tipoconcepto;
                dtFila["exento"] = lstValores[i].exento;
                dtFila["gravado"] = lstValores[i].gravado;
                dtFila["cantidad"] = lstValores[i].cantidad;
                dtFila["fechainicio"] = lstValores[i].fechainicio;
                dtFila["fechafin"] = lstValores[i].fechafin;
                dtFila["noperiodo"] = 0;
                dtFila["diaslaborados"] = 0;
                dtFila["guardada"] = lstValores[i].guardada;
                dtFila["tiponomina"] = lstValores[i].tiponomina;
                dtFila["modificado"] = lstValores[i].modificado;
                dtFila["fechapago"] = new DateTime(1900,1,1);
                dtFila["obracivil"] = _obracivil;
                dtFila["periodo"] = _periodo;
                dt.Rows.Add(dtFila);
            }

            cnx = new SqlConnection(cdn);
            SqlBulkCopy bulk = new SqlBulkCopy(cnx);
            CalculoNomina.Core.NominaHelper nh = new CalculoNomina.Core.NominaHelper();
            nh.bulkCommand = bulk;

            try
            {
                cnx.Open();
                nh.bulkNomina(dt, "tmpPagoNomina");
                cnx.Close();
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: \r\n \r\n" + error.Message + "\r\n \r\n Error Bulk Nomina.", "Error");
            }
            #endregion

            #region PERIODO
            cmd = new SqlCommand();
            cmd.Connection = cnx;
            nh = new CalculoNomina.Core.NominaHelper();
            nh.Command = cmd;
            int noPeriodo = 0;
            try
            {
                cnx.Open();
                noPeriodo = int.Parse(nh.obtenerNoPeriodo(_periodo, _inicioPeriodo).ToString());
                nh.actualizarNoPeriodo(GLOBALES.IDEMPRESA, _inicioPeriodo.Date, _finPeriodo.Date, noPeriodo);
                cnx.Close();
                cnx.Dispose();
            }
            catch (Exception)
            {
                MessageBox.Show("Error: Al actualizar el No. de Periodo", "Error");
                cnx.Dispose();
                return;
            }
            #endregion
        }
Esempio n. 6
0
        private void cmbPeriodo_SelectedIndexChanged(object sender, EventArgs e)
        {
            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;

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

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

            Periodos.Core.Periodos p = new Periodos.Core.Periodos();
            if (!FLAG_COMBOBOX)
            {
                Periodos.Core.Periodos a = (Periodos.Core.Periodos)cmbPeriodo.SelectedValue;
                p.idperiodo = a.idperiodo;
            }
            else
                p.idperiodo = int.Parse(cmbPeriodo.SelectedValue.ToString());

            List<CalculoNomina.Core.tmpPagoNomina> lstPeriodos = new List<CalculoNomina.Core.tmpPagoNomina>();
            lstvPeriodos.Items.Clear();

            try
            {
                cnx.Open();
                periodo = int.Parse(ph.DiasDePago(p).ToString());
                cnx.Close();
            }
            catch (Exception error) { MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error"); }

            switch (cmbTipoNomina.Text)
            {
                case "Normal":
                    try
                    {
                        cnx.Open();
                        lstPeriodos = nh.obtenerPeriodosNomina(GLOBALES.IDEMPRESA, GLOBALES.NORMAL, periodo);
                        cnx.Close();
                        cnx.Dispose();
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Error: Al obtener los periodos de la empresa.", "Error");
                        cnx.Dispose();
                        return;
                    }
                    break;

                case "Extraordinaria normal":
                    try
                    {
                        cnx.Open();
                        lstPeriodos = nh.obtenerPeriodosNomina(GLOBALES.IDEMPRESA, GLOBALES.EXTRAORDINARIO_NORMAL, periodo);
                        cnx.Close();
                        cnx.Dispose();
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Error: Al obtener los periodos de la empresa.", "Error");
                        cnx.Dispose();
                        return;
                    }
                    break;
            }

            for (int i = 0; i < lstPeriodos.Count; i++)
            {
                ListViewItem Lista;
                Lista = lstvPeriodos.Items.Add(lstPeriodos[i].fechainicio.ToShortDateString());
                Lista.SubItems.Add(lstPeriodos[i].fechafin.ToShortDateString());
            }
        }
Esempio n. 7
0
        private void toolEliminar_Click(object sender, EventArgs e)
        {
            int fila = dgvBajasSua.CurrentCell.RowIndex;
            int idPeriodo = 0, diasPeriodo = 0;
            string cdn = ConfigurationManager.ConnectionStrings["cdnNomina"].ConnectionString;
            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;

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

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

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

            Periodos.Core.Periodos periodo = new Periodos.Core.Periodos();

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

            List<Bajas.Core.Bajas> lstBaja = new List<Bajas.Core.Bajas>();
            List<CalculoNomina.Core.tmpPagoNomina> lstNomina = new List<CalculoNomina.Core.tmpPagoNomina>();

            try
            {
                cnx.Open();
                idPeriodo = int.Parse(eh.obtenerIdPeriodo(int.Parse(dgvBajasSua.Rows[fila].Cells[1].Value.ToString())).ToString());
                periodo.idperiodo = idPeriodo;
                diasPeriodo = int.Parse(ph.DiasDePago(periodo).ToString());
                lstBaja = bh.obtenerBaja(int.Parse(dgvBajasSua.Rows[fila].Cells[0].Value.ToString()));
                lstNomina = nh.obtenerUltimaNominaTrabajador(GLOBALES.IDEMPRESA, int.Parse(dgvBajasSua.Rows[fila].Cells[1].Value.ToString()), diasPeriodo);
                cnx.Close();
            }
            catch (Exception)
            {
                MessageBox.Show("Error: Al obtener los datos de la baja.", "Error");
                cnx.Dispose();
                return;
            }

            if (lstNomina.Count != 0)
                if (lstBaja[0].periodoinicio == lstNomina[0].fechainicio && lstBaja[0].periodofin == lstNomina[0].fechafin)
                {
                    MessageBox.Show("La baja pertenece a un periodo cerrado. No se puede eliminar.", "Información");
                    return;
                }

            DialogResult respuesta = MessageBox.Show("¿Quiere eliminar la baja?. \r\n \r\n CUIDADO. Esta acción eliminará permanentemente el registro.", "Confirmación", MessageBoxButtons.YesNo);
            if (respuesta == DialogResult.Yes)
            {
                Historial.Core.HistorialHelper hh = new Historial.Core.HistorialHelper();
                hh.Command = cmd;

                Empleados.Core.EmpleadosEstatus ee = new Empleados.Core.EmpleadosEstatus();
                ee.idtrabajador = int.Parse(dgvBajasSua.Rows[fila].Cells[1].Value.ToString());
                ee.idempresa = GLOBALES.IDEMPRESA;
                ee.estatus = GLOBALES.ACTIVO;

                Bajas.Core.Bajas baja = new Bajas.Core.Bajas();
                baja.idtrabajador = int.Parse(dgvBajasSua.Rows[fila].Cells[1].Value.ToString());
                baja.idempresa = GLOBALES.IDEMPRESA;
                baja.fecha = DateTime.Parse(dgvBajasSua.Rows[fila].Cells[8].Value.ToString()).Date;

                Historial.Core.Historial historial = new Historial.Core.Historial();
                historial.idtrabajador = int.Parse(dgvBajasSua.Rows[fila].Cells[1].Value.ToString());
                historial.idempresa = GLOBALES.IDEMPRESA;
                historial.fecha_imss = DateTime.Parse(dgvBajasSua.Rows[fila].Cells[8].Value.ToString()).Date;

                try
                {
                    cnx.Open();
                    bh.eliminaBaja(baja);
                    eh.bajaEmpleado(ee);
                    eh.actualizaEstatus(int.Parse(dgvBajasSua.Rows[fila].Cells[1].Value.ToString()));
                    cnx.Close();
                }
                catch (Exception error)
                {
                    MessageBox.Show("Error: Al eliminar la baja. \r\n" + error.Message, "Error");
                    cnx.Dispose();
                    return;
                }

                try
                {
                    cnx.Open();
                    hh.eliminaHistorial(historial);
                    cnx.Close();
                    cnx.Dispose();
                }
                catch (Exception error)
                {
                    MessageBox.Show("Error: Al eliminar el movimiento del historial.\r\n" + error.Message, "Error");
                    cnx.Dispose();
                    return;
                }

                MessageBox.Show("Registro eliminado.", "Confirmación");
                ListaEmpleados();
            }
        }
        private void CargaPreNomina(DateTime inicio, DateTime fin)
        {
            cargaEmpleados();

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

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

            CalculoNomina.Core.tmpPagoNomina pnCargar = new CalculoNomina.Core.tmpPagoNomina();
            pnCargar.idempresa = GLOBALES.IDEMPRESA;
            pnCargar.fechainicio = inicio;
            pnCargar.fechafin = fin;
            pnCargar.obracivil = _obracivil;

            //CalculoNomina.Core.tmpPagoNomina pnGuardada = new CalculoNomina.Core.tmpPagoNomina();
            //pnGuardada.idempresa = GLOBALES.IDEMPRESA;
            //pnGuardada.fechainicio = periodoInicio.Date;
            //pnGuardada.fechafin = periodoFin.Date;
            //pnGuardada.guardada = false;

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

            try
            {
                cnx.Open();
                lstPreNomina = nh.obtenerPreNomina(pnCargar, _periodo);
                //nh.cargaPreNomina(pnGuardada);
                cnx.Close();
                cnx.Dispose();
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
            }

            if (lstPreNomina.Count == 0)
                FLAGPRIMERCALCULO = true;
            else
            {
                FLAGPRIMERCALCULO = false;
                EXISTEPRENOMINA = true;
            }

            foreach (DataGridViewRow fila in dgvEmpleados.Rows)
            {
                for (int i = 0; i < lstPreNomina.Count; i++)
                {
                    if ((int)fila.Cells["idtrabajador"].Value == lstPreNomina[i].idtrabajador)
                    {
                        switch (lstPreNomina[i].noconcepto)
                        {
                            case 1:
                                fila.Cells["sueldo"].Value = lstPreNomina[i].cantidad;
                                break;
                            case 2:
                                fila.Cells["horas"].Value = lstPreNomina[i].cantidad;
                                break;
                            case 3:
                                fila.Cells["asistencia"].Value = lstPreNomina[i].cantidad;
                                break;
                            case 5:
                                fila.Cells["puntualidad"].Value = lstPreNomina[i].cantidad;
                                break;
                            case 6:
                                fila.Cells["despensa"].Value = lstPreNomina[i].cantidad;
                                break;
                        }
                    }
                }
            }
        }
        void cp_OnNuevoPeriodo(DateTime inicio, DateTime fin)
        {
            periodoInicio = inicio;
            periodoFin = fin;
            borraGridFaltas();
            disenoGridFaltas();
            cargaEmpleadosFaltas();

            if (_tipoNomina != GLOBALES.EXTRAORDINARIO_NORMAL)
            {
                this.Text = String.Format("Periodo de Pago: Del {0} al {1}.", periodoInicio.ToShortDateString(), periodoFin.ToShortDateString());
                toolPeriodo.Text = String.Format("Periodo de Pago: Del {0} al {1}.", periodoInicio.ToShortDateString(), periodoFin.ToShortDateString());
            }
            else
            {
                cnx = new SqlConnection(cdn);
                cmd = new SqlCommand();
                cmd.Connection = cnx;
                nh = new CalculoNomina.Core.NominaHelper();
                nh.Command = cmd;

                int existeNominaExtraordinaria = 0;
                try
                {
                    cnx.Open();
                    existeNominaExtraordinaria = (int)nh.existeNomina(GLOBALES.IDEMPRESA, periodoInicio, periodoFin, _periodo);
                    cnx.Close();
                    cnx.Dispose();
                }
                catch (Exception)
                {
                    MessageBox.Show("Error: Al obtener la existencia de la nomina extraordinaria.\r\n \r\n SE CERRARÁ LA VENTANA.", "Error");
                    cnx.Dispose();
                    this.Dispose();
                }

                if (existeNominaExtraordinaria == 0)
                {
                    this.Text = String.Format("Pago extraordinario: Del {0}.", periodoInicio.ToShortDateString());
                    toolPeriodo.Text = String.Format("Pago extraordinario: Del {0}.", periodoInicio.ToShortDateString());
                    movimientosEspeciales();
                }
                else
                {
                    MessageBox.Show("La fecha seleccionada ya ha sido calculada. \r\n \r\n SE CERRARÁ LA VENTANA.", "Información");
                    this.Dispose();
                }

            }
        }
        private void workExcel_DoWork(object sender, DoWorkEventArgs e)
        {
            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.tiponomina = _tipoNomina;

            DataTable dt = new DataTable();
            try
            {
                cnx.Open();
                dt = nh.obtenerPreNominaTabular(pn, NetoCero, Orden, _periodo);
                cnx.Close();
                cnx.Dispose();
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
            }

            Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
            excel.Workbooks.Add();

            Microsoft.Office.Interop.Excel._Worksheet workSheet = excel.ActiveSheet;

            excel.Cells[1, 1] = dt.Rows[0][0];
            excel.Cells[1, 6] = "Periodo";
            excel.Cells[2, 1] = "RFC:";
            excel.Cells[3, 1] = "REG. PAT:";

            excel.Cells[2, 2] = dt.Rows[0][1];
            excel.Cells[3, 2] = dt.Rows[0][2];

            excel.Cells[2, 6] = dt.Rows[0][3];
            excel.Cells[2, 7] = dt.Rows[0][4];

            //SE COLOCAN LOS TITULOS DE LAS COLUMNAS
            int iCol = 1;
            for (int i = 6; i < dt.Columns.Count; i++)
            {
                excel.Cells[5, iCol] = dt.Columns[i].ColumnName;
                iCol++;
            }
            //SE COLOCAN LOS DATOS
            int contadorDt = dt.Rows.Count;
            int contador = 0;
            int progreso = 0;
            iCol = 1;
            int iFil = 6;
            Microsoft.Office.Interop.Excel.Range rng;

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                progreso = (contador * 100) / contadorDt;
                workExcel.ReportProgress(progreso, "Reporte a Excel");
                contador++;

                if (i != dt.Rows.Count - 1)
                {
                    for (int j = 6; j < dt.Columns.Count; j++)
                    {
                        excel.Cells[iFil, iCol] = dt.Rows[i][j];
                        iCol++;
                    }

                    iFil++;

                    #region AGRUPADO POR DEPARTAMENTO
                    //if (dt.Rows[i][5].ToString() == dt.Rows[i + 1][5].ToString())
                    //    for (int j = 6; j < dt.Columns.Count; j++)
                    //    {
                    //        excel.Cells[iFil, iCol] = dt.Rows[i][j];
                    //        iCol++;
                    //    }
                    //else
                    //{
                    //    for (int j = 6; j < dt.Columns.Count; j++)
                    //    {
                    //        excel.Cells[iFil, iCol] = dt.Rows[i][j];
                    //        iCol++;
                    //    }
                    //    iFil++;
                    //    rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 1];
                    //    rng.Font.Bold = true;
                    //    excel.Cells[iFil, 1] = dt.Rows[i][5];

                    //    rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 9];
                    //    rng.NumberFormat = "#,##0.00";
                    //    rng.Font.Bold = true;
                    //    excel.Cells[iFil, 9] = totalPercepciones.ToString();

                    //    rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 15];
                    //    rng.NumberFormat = "#,##0.00";
                    //    rng.Font.Bold = true;
                    //    excel.Cells[iFil, 15] = totalDeducciones.ToString();
                    //    iFil++;

                    //    totalPercepciones = 0;
                    //    totalDeducciones = 0;
                    //}
                    #endregion
                }
                else
                {
                    for (int j = 6; j < dt.Columns.Count; j++)
                    {
                        excel.Cells[iFil, iCol] = dt.Rows[i][j];
                        iCol++;
                    }

                }
                iCol = 1;
            }
            iFil++;

            for (int i = 6; i < iFil; i++)
            {
                rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[i, 2];
                rng.Columns.AutoFit();

                rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[i, 14];
                rng.NumberFormat = "#,##0.00";
                rng.Formula = string.Format("=C{0}+D{0}+E{0}+F{0}+G{0}+H{0}+I{0}+J{0}+K{0}+L{0}+M{0}", i);

                rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[i, 23];
                rng.NumberFormat = "#,##0.00";
                rng.Formula = string.Format("=O{0}+P{0}+Q{0}+R{0}+S{0}+T{0}+V{0}", i);

                rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[i, 24];
                rng.NumberFormat = "#,##0.00";
                rng.Formula = string.Format("=N{0}+U{0}-W{0}", i);
            }

            int suma = iFil - 1;
            iFil++;

            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 3];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(C6:C{0})", suma.ToString());

            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 4];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(D6:D{0})", suma.ToString());

            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 5];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(E6:E{0})", suma.ToString());

            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 6];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(F6:F{0})", suma.ToString());

            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 7];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(G6:G{0})", suma.ToString());

            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 8];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(H6:H{0})", suma.ToString());

            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 9];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(I6:I{0})", suma.ToString());

            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 10];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(J6:J{0})", suma.ToString());

            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 11];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(K6:K{0})", suma.ToString());

            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 12];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(L6:L{0})", suma.ToString());

            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 13];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(M6:M{0})", suma.ToString());

            //TOTAL PERCEPCIONES
            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 14];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(N6:N{0})", suma.ToString());

            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 15];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(O6:O{0})", suma.ToString());

            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 16];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(P6:P{0})", suma.ToString());

            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 17];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(Q6:Q{0})", suma.ToString());

            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 18];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(R6:R{0})", suma.ToString());

            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 19];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(S6:S{0})", suma.ToString());

            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 20];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(T6:T{0})", suma.ToString());

            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 21];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(U6:U{0})", suma.ToString());

            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 22];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(V6:V{0})", suma.ToString());

            //TOTAL DEDUCCIONES
            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 23];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(W6:W{0})", suma.ToString());

            //TOTAL NETO
            rng = (Microsoft.Office.Interop.Excel.Range)excel.Cells[iFil, 24];
            rng.NumberFormat = "#,##0.00";
            rng.Font.Bold = true;
            rng.Formula = string.Format("=SUM(X6:X{0})", suma.ToString());

            excel.Range["A1", "G3"].Font.Bold = true;
            excel.Range["A5", "X5"].Font.Bold = true;
            excel.Range["B:X"].EntireColumn.AutoFit();
            excel.Range["A6"].Select();
            excel.ActiveWindow.FreezePanes = true;
            excel.Range["A5", "X5"].Interior.ColorIndex = 36;
            excel.Range["A5", "M5"].Font.ColorIndex = 1;
            excel.Range["O5", "V5"].Font.ColorIndex = 1;
            excel.Range["N5"].Font.ColorIndex = 32;
            excel.Range["W5"].Font.ColorIndex = 32;
            excel.Range["X5"].Font.ColorIndex = 32;
            excel.Range["B6", "X" + iFil.ToString()].NumberFormat = "#,##0.00";

            workSheet.SaveAs("Reporte_Tabular.xlsx");
            excel.Visible = true;

            workExcel.ReportProgress(100, "Reporte a Excel");
        }
        private void cargaEmpleadosFaltas()
        {
            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;

            #region LISTADO DE EMPLEADOS GRID FALTAS
            nh = new CalculoNomina.Core.NominaHelper();
            nh.Command = cmd;

            lstEmpleadosFaltaIncapacidad = new List<CalculoNomina.Core.DatosFaltaIncapacidad>();
            DateTime fecha;
            DateTime fechaf;
            try
            {
                cnx.Open();
                if (_tipoNomina == GLOBALES.NORMAL || _tipoNomina == GLOBALES.EXTRAORDINARIO_NORMAL)
                {
                    if (_periodo == 7)
                    {
                        fecha = periodoInicio.AddDays(7);
                        fechaf = periodoFin.AddDays(7);
                    }
                    else
                    {
                        if (periodoInicio.Day < 15)
                        {
                            fecha = periodoInicio.AddDays(15);
                            fechaf = periodoFin.AddDays(DateTime.DaysInMonth(periodoInicio.Year, periodoInicio.Month) - 15);
                        }
                        else
                        {
                            fecha = periodoInicio.AddDays(
                                DateTime.DaysInMonth(periodoInicio.Year, periodoInicio.Month) - 15);
                            fechaf = periodoFin.AddDays(15);
                        }
                    }
                    lstEmpleadosFaltaIncapacidad = nh.obtenerDatosFaltaInc(GLOBALES.IDEMPRESA, GLOBALES.ACTIVO, _obracivil, fecha, fechaf, _periodo);
                }

                //if (_tipoNomina == GLOBALES.ESPECIAL || _tipoNomina == GLOBALES.EXTRAORDINARIO_ESPECIAL)
                //    lstEmpleadosFaltaIncapacidad = nh.obtenerDatosFaltaInc(GLOBALES.IDEMPRESA, GLOBALES.INACTIVO, _obracivil);
                cnx.Close();
                cnx.Dispose();
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
            }

            dgvFaltas.DataSource = lstEmpleadosFaltaIncapacidad;
            for (int i = 1; i < dgvFaltas.Columns.Count; i++)
                dgvFaltas.AutoResizeColumn(i);

            #endregion
        }
        private void workerGravadosExentos_DoWork(object sender, DoWorkEventArgs e)
        {
            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;

            DataTable dt = new DataTable();
            try
            {
                cnx.Open();
                dt = nh.obtenerPreGravadosExentos(pn, _periodo);
                cnx.Close();
                cnx.Dispose();
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
            }

            if (dt.Rows.Count == 0)
            {
                MessageBox.Show("No es posible generar el reporte. \r\n \r\n Verifique los parametros del reporte.", "Error");
                return;
            }

            Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
            excel.Workbooks.Add();

            Microsoft.Office.Interop.Excel._Worksheet workSheet = excel.ActiveSheet;

            excel.Cells[1, 1] = dt.Rows[0][0];
            excel.Cells[2, 1] = "RFC:";
            excel.Cells[3, 1] = "REG. PAT:";

            excel.Cells[2, 2] = dt.Rows[0][1];
            excel.Cells[3, 2] = dt.Rows[0][2];

            //SE COLOCAN LOS TITULOS DE LAS COLUMNAS
            int iCol = 1;
            for (int i = 3; i < dt.Columns.Count; i++)
            {
                excel.Cells[5, iCol] = dt.Columns[i].ColumnName;
                iCol++;
            }
            //SE COLOCAN LOS DATOS
            int contadorDt = dt.Rows.Count;
            int contador = 0;
            int progreso = 0;
            iCol = 1;
            int iFil = 6;

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                progreso = (contador * 100) / contadorDt;
                workerGravadosExentos.ReportProgress(progreso, "Reporte a Excel");
                contador++;

                if (i != dt.Rows.Count - 1)
                {
                    for (int j = 3; j < dt.Columns.Count; j++)
                    {
                        excel.Cells[iFil, iCol] = dt.Rows[i][j];
                        iCol++;
                    }
                    iFil++;
                }
                else
                {
                    for (int j = 3; j < dt.Columns.Count; j++)
                    {
                        excel.Cells[iFil, iCol] = dt.Rows[i][j];
                        iCol++;
                    }
                }

                iCol = 1;

            }
            iFil++;

            excel.Range["A1", "B3"].Font.Bold = true;
            excel.Range["B:J"].EntireColumn.AutoFit();
            excel.Range["A6"].Select();
            excel.ActiveWindow.FreezePanes = true;
            excel.Range["A5", "J5"].Font.Bold = true;
            excel.Range["A5", "J5"].Interior.ColorIndex = 36;
            excel.Range["C6", "G" + iFil.ToString()].NumberFormat = "#,##0.00";

            workSheet.SaveAs("Reporte_GravadosExentos.xlsx");
            excel.Visible = true;
        }
        private void cargaEmpleados()
        {
            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;

            #region DISEÑO DEL GRIDVIEW

            dgvEmpleados.Columns["idtrabajador"].DataPropertyName = "idtrabajador";
            dgvEmpleados.Columns["iddepartamento"].DataPropertyName = "iddepartamento";
            dgvEmpleados.Columns["idpuesto"].DataPropertyName = "idpuesto";
            dgvEmpleados.Columns["noempleado"].DataPropertyName = "noempleado";
            dgvEmpleados.Columns["nombres"].DataPropertyName = "nombres";
            dgvEmpleados.Columns["paterno"].DataPropertyName = "paterno";
            dgvEmpleados.Columns["materno"].DataPropertyName = "materno";
            dgvEmpleados.Columns["sueldo"].DataPropertyName = "sueldo";
            dgvEmpleados.Columns["despensa"].DataPropertyName = "despensa";
            dgvEmpleados.Columns["asistencia"].DataPropertyName = "asistencia";
            dgvEmpleados.Columns["puntualidad"].DataPropertyName = "puntualidad";
            dgvEmpleados.Columns["horas"].DataPropertyName = "horas";

            DataGridViewCellStyle estilo = new DataGridViewCellStyle();
            estilo.Alignment = DataGridViewContentAlignment.MiddleRight;

            dgvEmpleados.Columns[7].DefaultCellStyle = estilo;
            dgvEmpleados.Columns[8].DefaultCellStyle = estilo;
            dgvEmpleados.Columns[9].DefaultCellStyle = estilo;
            dgvEmpleados.Columns[10].DefaultCellStyle = estilo;
            dgvEmpleados.Columns[11].DefaultCellStyle = estilo;

            dgvEmpleados.Columns["noempleado"].ReadOnly = true;
            dgvEmpleados.Columns["nombres"].ReadOnly = true;
            dgvEmpleados.Columns["paterno"].ReadOnly = true;
            dgvEmpleados.Columns["materno"].ReadOnly = true;
            #endregion

            #region LISTADO DE EMPLEADOS GRID
            nh = new CalculoNomina.Core.NominaHelper();
            nh.Command = cmd;

            lstEmpleadosNomina = new List<CalculoNomina.Core.DatosEmpleado>();
            lstEmpleadosFaltaIncapacidad = new List<CalculoNomina.Core.DatosFaltaIncapacidad>();
            DateTime fecha = new DateTime(1900,1,1);
            DateTime fechaf = new DateTime(1900, 1, 1);
            try
            {

                //if (_tipoNomina == GLOBALES.NORMAL || _tipoNomina == GLOBALES.EXTRAORDINARIO_NORMAL)
                //{

                //}

                if (_periodo == 7)
                {
                    fecha = periodoFin.AddDays(1);
                    fechaf = periodoFin.AddDays(7);
                }
                else
                {
                    if (periodoInicio.Day < 15)
                    {
                        fecha = periodoFin.AddDays(1);
                        fechaf = periodoFin.AddDays(DateTime.DaysInMonth(periodoInicio.Year, periodoInicio.Month) - 15);
                    }
                    else
                    {
                        fecha = periodoFin.AddDays(1);
                        fechaf = periodoFin.AddDays(15);
                    }
                }
                cnx.Open();
                lstEmpleadosNomina = nh.obtenerDatosEmpleado(GLOBALES.IDEMPRESA, GLOBALES.ACTIVO, _obracivil, fecha, fechaf, _periodo);
                lstEmpleadosFaltaIncapacidad = nh.obtenerDatosFaltaInc(GLOBALES.IDEMPRESA, GLOBALES.ACTIVO, _obracivil, fecha, fechaf, _periodo);

                //if (_tipoNomina == GLOBALES.ESPECIAL || _tipoNomina == GLOBALES.EXTRAORDINARIO_ESPECIAL)
                //{
                //    lstEmpleadosNomina = nh.obtenerDatosEmpleado(GLOBALES.IDEMPRESA, GLOBALES.INACTIVO, _obracivil);
                //    lstEmpleadosFaltaIncapacidad = nh.obtenerDatosFaltaInc(GLOBALES.IDEMPRESA, GLOBALES.INACTIVO, _obracivil);
                //}

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

            dgvEmpleados.DataSource = lstEmpleadosNomina;
            dgvFaltas.DataSource = lstEmpleadosFaltaIncapacidad;

            for (int i = 1; i < dgvEmpleados.Columns.Count; i++)
                dgvEmpleados.AutoResizeColumn(i);

            for (int i = 1; i < dgvFaltas.Columns.Count; i++)
                dgvFaltas.AutoResizeColumn(i);
            #endregion
        }
        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
        }
        private void dtpFecha_ValueChanged(object sender, EventArgs e)
        {
            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;

            CalculoNomina.Core.NominaHelper nh = new CalculoNomina.Core.NominaHelper();
            nh.Command = cmd;
            List<CalculoNomina.Core.tmpPagoNomina> lstUltimaNomina = new List<CalculoNomina.Core.tmpPagoNomina>();

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

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

            Periodos.Core.Periodos periodo = new Periodos.Core.Periodos();

            int dias = 0;
            try
            {
                cnx.Open();
                periodo.idperiodo = (int)eh.obtenerIdPeriodo(_idempleado);
                dias = int.Parse(ph.DiasDePago(periodo).ToString());
                lstUltimaNomina = nh.obtenerUltimaNominaTrabajador(GLOBALES.IDEMPRESA, _idempleado, dias);
                cnx.Close();
            }
            catch (Exception)
            {
                MessageBox.Show("Error: Al obtener la ultima nómina del trabajador.", "Error");
                cnx.Dispose();
            }

            if (lstUltimaNomina.Count != 0)
                if (dtpFecha.Value.Date <= lstUltimaNomina[0].fechafin)
                {
                    MessageBox.Show("La fecha de aplicación seleccionada no es valida.\r\n\r\n" +
                                    "Se empalma con la ultima nomina del trabajador, por favor verifique.", "Información");
                }

            if (dias == 7)
            {
                DateTime dt = dtpFecha.Value;
                while (dt.DayOfWeek != DayOfWeek.Monday) dt = dt.AddDays(-1);
                inicioPeriodo = dt;
                finPeriodo = dt.AddDays(6);
            }
            else
            {
                if (dtpFecha.Value.Day <= 15)
                {
                    inicioPeriodo = new DateTime(dtpFecha.Value.Year, dtpFecha.Value.Month, 1);
                    finPeriodo = new DateTime(dtpFecha.Value.Year, dtpFecha.Value.Month, 15);
                }
                else
                {
                    inicioPeriodo = new DateTime(dtpFecha.Value.Year, dtpFecha.Value.Month, 16);
                    finPeriodo = new DateTime(dtpFecha.Value.Year, dtpFecha.Value.Month, DateTime.DaysInMonth(dtpFecha.Value.Year, dtpFecha.Value.Month));
                }
            }
        }
        private void dgvEmpleados_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (lstValoresNomina == null)
                return;

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

            if (dgvEmpleados.Columns[e.ColumnIndex].Name == "horas")
            {
                for (int i = 0; i < lstValoresNomina.Count(); i++)
                {
                    if (int.Parse(dgvEmpleados.Rows[e.RowIndex].Cells["idtrabajador"].Value.ToString()) == lstValoresNomina[i].idtrabajador && lstValoresNomina[i].noconcepto == 2)
                    {
                        nh = new CalculoNomina.Core.NominaHelper();
                        nh.Command = cmd;

                        Conceptos.Core.ConceptosHelper ch = new Conceptos.Core.ConceptosHelper();
                        ch.Command = cmd;

                        Conceptos.Core.Conceptos concepto = new Conceptos.Core.Conceptos();
                        concepto.noconcepto = 2;
                        concepto.idempresa = GLOBALES.IDEMPRESA;

                        cnx.Open();
                        string formulaexento = ch.obtenerFormulaExento(concepto).ToString();
                        cnx.Close();

                        CalculoFormula cf = new CalculoFormula(lstValoresNomina[i].idtrabajador, periodoInicio.Date, periodoFin.Date, formulaexento);
                        decimal exento = decimal.Parse(cf.calcularFormula().ToString());
                        decimal cantidad = decimal.Parse(dgvEmpleados.Rows[e.RowIndex].Cells["horas"].Value.ToString());
                        decimal gravado = 0;

                        if (cantidad <= exento)
                        {
                            exento = cantidad;
                            gravado = 0;
                        }
                        else
                        {
                            gravado = cantidad - exento;
                        }

                        CalculoNomina.Core.tmpPagoNomina hora = new CalculoNomina.Core.tmpPagoNomina();
                        hora.idempresa = GLOBALES.IDEMPRESA;
                        hora.idtrabajador = int.Parse(dgvEmpleados.Rows[e.RowIndex].Cells["idtrabajador"].Value.ToString());
                        hora.noconcepto = 2; //CONCEPTO HORAS EXTRAS DOBLES
                        hora.fechainicio = periodoInicio.Date;
                        hora.fechafin = periodoFin.Date;
                        hora.cantidad = cantidad;
                        hora.exento = exento;
                        hora.gravado = gravado;
                        hora.modificado = true;
                        try
                        {
                            cnx.Open();
                            nh.actualizaHorasExtrasDespensa(hora);
                            cnx.Close();
                        }
                        catch (Exception error)
                        {
                            MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
                        }
                    }
                }
            }

            if (dgvEmpleados.Columns[e.ColumnIndex].Name == "despensa")
            {
                for (int i = 0; i < lstValoresNomina.Count(); i++)
                {
                    if (int.Parse(dgvEmpleados.Rows[e.RowIndex].Cells["idtrabajador"].Value.ToString()) == lstValoresNomina[i].idtrabajador && lstValoresNomina[i].noconcepto == 6)
                    {
                        nh = new CalculoNomina.Core.NominaHelper();
                        nh.Command = cmd;
                        lstValoresNomina[i].cantidad = decimal.Parse(dgvEmpleados.Rows[e.RowIndex].Cells["despensa"].Value.ToString());
                        lstValoresNomina[i].gravado = decimal.Parse(dgvEmpleados.Rows[e.RowIndex].Cells["despensa"].Value.ToString());
                        CalculoNomina.Core.tmpPagoNomina despensa = new CalculoNomina.Core.tmpPagoNomina();
                        despensa.idempresa = GLOBALES.IDEMPRESA;
                        despensa.idtrabajador = int.Parse(dgvEmpleados.Rows[e.RowIndex].Cells["idtrabajador"].Value.ToString());
                        despensa.noconcepto = 6; //CONCEPTO DESPENSA
                        despensa.fechainicio = periodoInicio.Date;
                        despensa.fechafin = periodoFin.Date;
                        despensa.cantidad = lstValoresNomina[i].cantidad;
                        despensa.gravado = lstValoresNomina[i].gravado;
                        despensa.modificado = true;
                        try
                        {
                            cnx.Open();
                            nh.actualizaHorasExtrasDespensa(despensa);
                            cnx.Close();
                        }
                        catch (Exception error)
                        {
                            MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
                        }
                    }
                }
            }
        }
Esempio n. 17
0
        private void workerEnvio_DoWork(object sender, DoWorkEventArgs e)
        {
            int existeNullCodeQR = 0;

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

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

            workerEnvio.ReportProgress(0, "Generando códigos QR.");

            try
            {
                cnx.Open();
                existeNullCodeQR = nh.existeNullQR(GLOBALES.IDEMPRESA, DateTime.Parse(fecha).Date, DateTime.Parse(fechafin).Date);
                cnx.Close();
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: Al obtener existencia de nulos Code QR." + error.Message, "Error");
                cnx.Dispose();
                return;
            }

            if (existeNullCodeQR != 0)
            {
                List<CalculoNomina.Core.CodigoBidimensional> lstQR = new List<CalculoNomina.Core.CodigoBidimensional>();
                try
                {
                    cnx.Open();
                    lstQR = nh.obtenerListaQr(GLOBALES.IDEMPRESA, DateTime.Parse(fecha).Date, DateTime.Parse(fechafin).Date);
                    cnx.Close();
                }
                catch (Exception error)
                {
                    MessageBox.Show("Error: Al obtener el listado de los XML." + error.Message, "Error");
                    cnx.Dispose();
                    return;
                }

                string codigoQR = "";
                string[] valores = null;
                string numero = "";
                string vEntero = "";
                string vDecimal = "";

                for (int i = 0; i < lstQR.Count; i++)
                {
                    numero = lstQR[i].tt.ToString();
                    valores = numero.Split('.');
                    vEntero = valores[0];
                    vDecimal = valores[1];
                    codigoQR = string.Format("?re={0}&rr={1}&tt={2}.{3}&id={4}", lstQR[i].re, lstQR[i].rr,
                        vEntero.PadLeft(10, '0'), vDecimal.PadRight(6, '0'), lstQR[i].uuid);
                    var qrEncoder = new QrEncoder(ErrorCorrectionLevel.H);
                    var qrCode = qrEncoder.Encode(codigoQR);
                    var renderer = new GraphicsRenderer(new FixedModuleSize(2, QuietZoneModules.Two), Brushes.Black, Brushes.White);

                    using (var stream = new FileStream(lstQR[i].uuid + ".png", FileMode.Create))
                        renderer.WriteToStream(qrCode.Matrix, ImageFormat.Png, stream);

                    Bitmap bmp = new Bitmap(lstQR[i].uuid + ".png");
                    Byte[] qr = GLOBALES.IMAGEN_BYTES(bmp);
                    bmp.Dispose();
                    File.Delete(lstQR[i].uuid + ".png");
                    try
                    {
                        cnx.Open();
                        nh.actualizaXml(GLOBALES.IDEMPRESA, DateTime.Parse(fecha).Date, DateTime.Parse(fechafin).Date, lstQR[i].idtrabajador, qr);
                        cnx.Close();
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Error: Al actualizar el código QR.", "Error");
                        cnx.Dispose();
                        return;
                    }
                }
            }

            int existeRecibo = 0;
            if (fecha != "")
            {
                for (int i = 0; i < dgvEmpleados.Rows.Count; i++)
                {

                    try
                    {
                        cnx.Open();
                        existeRecibo = (int)nh.existeXMLTrabajador(GLOBALES.IDEMPRESA, int.Parse(dgvEmpleados.Rows[i].Cells["idtrabajador"].Value.ToString()),
                            DateTime.Parse(fecha).Date);
                        cnx.Close();
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Error: Al obtener existencia del XML", "Error");
                        cnx.Dispose();
                        return;
                    }

                    if (existeRecibo != 0)
                    {
                        dsReportes.NominaRecibosDataTable dtImpresionNomina = new dsReportes.NominaRecibosDataTable();
                        SqlDataAdapter daImpresionNomina = new SqlDataAdapter();
                        cmd.CommandText = "exec stp_rptNominaImpresionTrabajador @idempresa, @fechainicio, @tiponomina, @idtrabajador, @periodo";
                        cmd.Parameters.Clear();
                        cmd.Parameters.AddWithValue("idempresa", GLOBALES.IDEMPRESA);
                        cmd.Parameters.AddWithValue("fechainicio", DateTime.Parse(fecha).Date);
                        cmd.Parameters.AddWithValue("tiponomina", tipoNomina);
                        cmd.Parameters.AddWithValue("idtrabajador", int.Parse(dgvEmpleados.Rows[i].Cells["idtrabajador"].Value.ToString()));
                        cmd.Parameters.AddWithValue("periodo", periodo);
                        cmd.CommandTimeout = 300;
                        daImpresionNomina.SelectCommand = cmd;
                        daImpresionNomina.Fill(dtImpresionNomina);

                        ReportDataSource rd = new ReportDataSource();
                        rd.Value = dtImpresionNomina;
                        rd.Name = "dsNominaRecibo";

                        Visor.LocalReport.DataSources.Clear();
                        Visor.LocalReport.DataSources.Add(rd);

                        Visor.LocalReport.ReportEmbeddedResource = "rptNominaRecibos.rdlc";
                        Visor.LocalReport.ReportPath = @"rptNominaRecibos.rdlc";

                        Warning[] warnings;
                        string[] streamids;
                        string mimeType;
                        string encoding;
                        string extension;

                        byte[] bytes = Visor.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamids, out warnings);

                        if (!Directory.Exists(ruta + DateTime.Parse(fecha).ToString("yyyyMMdd") + "_" + GLOBALES.IDEMPRESA.ToString()))
                            Directory.CreateDirectory(ruta + DateTime.Parse(fecha).ToString("yyyyMMdd") + "_" + GLOBALES.IDEMPRESA.ToString());

                        using (FileStream fs = new FileStream(string.Format(@"{0}\{1}.{2}",
                            ruta + DateTime.Parse(fecha).ToString("yyyyMMdd") + "_" + GLOBALES.IDEMPRESA.ToString(),
                            dgvEmpleados.Rows[i].Cells["nombrecompleto"].Value.ToString() + "_" + DateTime.Parse(fecha).ToString("yyyyMMdd"),
                            "pdf"), FileMode.Create))
                        {
                            fs.Write(bytes, 0, bytes.Length);
                            fs.Flush();
                            fs.Close();
                            fs.Dispose();
                        }

                        List<CalculoNomina.Core.XmlCabecera> lstXml = new List<CalculoNomina.Core.XmlCabecera>();
                        try
                        {
                            cnx.Open();
                            lstXml = nh.obtenerXmlTrabajador(GLOBALES.IDEMPRESA, int.Parse(dgvEmpleados.Rows[i].Cells["idtrabajador"].Value.ToString()),
                                DateTime.Parse(fecha).Date);
                            cnx.Close();
                        }
                        catch (Exception)
                        {
                            MessageBox.Show("Error: Al obtener el XML del Trabajador", "Error");
                            cnx.Dispose();
                            return;
                        }

                        using (StreamWriter sw = new StreamWriter(ruta + DateTime.Parse(fecha).ToString("yyyyMMdd") + "_" + GLOBALES.IDEMPRESA.ToString() + "\\" + dgvEmpleados.Rows[i].Cells["nombrecompleto"].Value.ToString() + "_" + DateTime.Parse(fecha).ToString("yyyyMMdd") + ".xml"))
                        {
                            sw.WriteLine(lstXml[0].xml);
                        }
                        workerEnvio.ReportProgress(i, "Recibo generado.");
                    }
                    else
                    {
                        workerEnvio.ReportProgress(i, "Recibo no existe.");
                    }
                }

                try
                {
                    using (ZipFile zip = new ZipFile())
                    {
                        if (File.Exists(ruta + "RecibosNomina_" + DateTime.Parse(fecha).ToString("yyyyMMdd") + "_" + GLOBALES.IDEMPRESA + ".zip"))
                            File.Delete(ruta + "RecibosNomina_" + DateTime.Parse(fecha).ToString("yyyyMMdd") + "_" + GLOBALES.IDEMPRESA + ".zip");
                        zip.AddDirectory(ruta + DateTime.Parse(fecha).ToString("yyyyMMdd") + "_" + GLOBALES.IDEMPRESA.ToString() + "\\");
                        zip.Save(ruta + "RecibosNomina_" + DateTime.Parse(fecha).ToString("yyyyMMdd") + "_" + GLOBALES.IDEMPRESA + ".zip");
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("Error: Al crear el archivo comprimido.", "Error");
                }

                MailMessage email = new MailMessage();
                SmtpClient smtp = new SmtpClient();
                Attachment comprimido = new Attachment(ruta + "RecibosNomina_" + DateTime.Parse(fecha).ToString("yyyyMMdd") + "_" + GLOBALES.IDEMPRESA + ".zip");
                email.IsBodyHtml = true;
                email.From = new MailAddress(correoEnvio, "Recibos electrónicos de nómina");
                email.To.Add(txtCorreoElectronico.Text);
                email.Subject = "RecibosNomina_" + DateTime.Parse(fecha).ToString("yyyyMMdd");
                email.Body = "Correo automatico enviado por el sistema de administración de nómina. \r\n \r\n No responder.";
                email.Priority = MailPriority.Normal;
                email.Attachments.Add(comprimido);
                smtp.Host = servidorEnvio;
                smtp.Port = puertoEnvio;
                smtp.EnableSsl = usaSSL;

                smtp.Credentials = new NetworkCredential(correoEnvio, passwordEnvio);
                try
                {
                    workerEnvio.ReportProgress(0, "Enviando recibos de nómina");
                    smtp.Send(email);
                    smtp.Dispose();
                    comprimido.Dispose();
                }
                catch (Exception msg)
                {
                    MessageBox.Show("Error al enviar el correo: " + msg.Message, "Error");
                }
            }
        }
        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();
        }
Esempio n. 19
0
        private void guardar(int tipoGuardar)
        {
            int existe = 0;
            //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;
            }

            control = GLOBALES.VALIDAR(this, typeof(MaskedTextBox));
            if (!control.Equals(""))
            {
                MessageBox.Show("Falta el campo: " + control, "Información");
                return;
            }

            if (txtNSS.Text.Length != 11)
            {
                MessageBox.Show("El campo NSS es mayor o meno a 11 dígitos.", "Error");
                return;
            }

            int idtrabajador;

            cnx = new SqlConnection();
            cnx.ConnectionString = cdn;
            cmd = new SqlCommand();
            cmd.Connection = cnx;
            eh = new Empleados.Core.EmpleadosHelper();
            eh.Command = cmd;

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

            Empleados.Core.Empleados existeEmpleado = new Empleados.Core.Empleados();
            existeEmpleado.nss = txtNSS.Text.Trim().Substring(0, 10);
            existeEmpleado.digitoverificador = int.Parse(txtNSS.Text.Trim().Substring(10, 1));
            existeEmpleado.idempresa = GLOBALES.IDEMPRESA;

            int existeNss;
            try
            {
                cnx.Open();
                existeNss = (int)eh.existeEmpleado(existeEmpleado);
                cnx.Close();
            }
            catch
            {
                MessageBox.Show("Error al validar existencia de empleado.", "Error");
                return;
            }

            Empleados.Core.Empleados em = new Empleados.Core.Empleados();
            em.nombres = txtNombre.Text;
            em.paterno = txtApPaterno.Text;
            em.materno = txtApMaterno.Text;
            em.noempleado = mtxtNoEmpleado.Text;
            em.nombrecompleto = txtApPaterno.Text + (string.IsNullOrEmpty(txtApMaterno.Text) ? "" : " " + txtApMaterno.Text) + " " + txtNombre.Text;
            em.fechaingreso = dtpFechaIngreso.Value;
            em.antiguedad = int.Parse(txtAntiguedad.Text);
            em.fechaantiguedad = dtpFechaAntiguedad.Value;
            em.fechanacimiento = dtpFechaNacimiento.Value;
            em.antiguedadmod = int.Parse(txtAntiguedadMod.Text);
            em.edad = int.Parse(txtEdad.Text);
            em.idempresa = GLOBALES.IDEMPRESA;
            em.rfc = txtRFC.Text;
            em.curp = txtCURP.Text;
            em.nss = txtNSS.Text.Trim().Substring(0, 10);
            em.digitoverificador = int.Parse(txtNSS.Text.Trim().Substring(10, 1));

            em.idperiodo = int.Parse(cmbPeriodo.SelectedValue.ToString());
            em.idsalario = int.Parse(cmbZona.SelectedValue.ToString());
            em.tiposalario = int.Parse(cmbTipoSalario.SelectedValue.ToString());
            em.tiporegimen = int.Parse(cmbTipoRegimen.SelectedValue.ToString());

            em.sdi = decimal.Parse(txtSDI.Text);
            em.sd = decimal.Parse(txtSD.Text);
            em.sueldo = decimal.Parse(txtSueldo.Text);

            em.cuenta = mtxtCuentaBancaria.Text;
            em.clabe = mtxtCuentaClabe.Text;
            em.idbancario = mtxtIdBancario.Text;
            em.metodopago = cmbMetodoPago.Text;
            //em.metodopago = int.Parse(cmbMetodoPago.SelectedValue.ToString());

            if (chkObraCivil.Checked)
                em.obracivil = true;
            else
                em.obracivil = false;

            //hh = new Historial.Core.HistorialHelper();
            //hh.Command = cmd;
            //Historial.Core.Historial h = new Historial.Core.Historial();
            //h.idempresa = GLOBALES.IDEMPRESA;
            //h.tipomovimiento = GLOBALES.mALTA;
            //h.valor = decimal.Parse(txtSDI.Text);
            //h.fecha_imss = dtpFechaIngreso.Value;
            //h.fecha_sistema = DateTime.Now;
            //h.motivobaja = 0;
            //h.iddepartamento = int.Parse(cmbDepartamento.SelectedValue.ToString());
            //h.idpuesto = int.Parse(cmbPuesto.SelectedValue.ToString());

            ih = new Imagen.Core.ImagenesHelper();
            ih.Command = cmd;

            Imagen.Core.Imagenes img = null;

            //Empresas.Core.EmpresasHelper empresash = new Empresas.Core.EmpresasHelper();
            //empresash.Command = cmd;
            //Empresas.Core.Empresas empresa = new Empresas.Core.Empresas();
            //empresa.idempresa = GLOBALES.IDEMPRESA;

            try
            {
                if (ImagenAsignada == true)
                {
                    img = new Imagen.Core.Imagenes();
                    img.imagen = GLOBALES.IMAGEN_BYTES(bmp);
                    img.tipopersona = GLOBALES.pEMPLEADO;
                }
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: " + error.Message, "Error");
            }

            switch (_tipoOperacion)
            {
                case 0:
                    try
                    {
                        //Empleados.Core.EmpleadosEstatus ee = new Empleados.Core.EmpleadosEstatus();
                        //ee.estatus = GLOBALES.ACTIVO;
                        //ee.idempresa = GLOBALES.IDEMPRESA;

                        em.estatus = GLOBALES.ACTIVO;
                        em.idusuario = GLOBALES.IDUSUARIO;
                        em.iddepartamento = int.Parse(cmbDepartamento.SelectedValue.ToString());
                        em.idpuesto = int.Parse(cmbPuesto.SelectedValue.ToString());

                        if (existeNss != 0)
                        {
                            MessageBox.Show("El empleado que desea ingresar ya existe actualmente. \r\n \r\n Es necesario realizar un reingreso.", "Error");
                            return;
                        }

                        cnx.Open();
                        eh.insertaEmpleado(em);
                        idtrabajador = (int)eh.obtenerIdTrabajador(em);

                        //h.idtrabajador = idtrabajador;
                        //hh.insertarHistorial(h);

                        //ee.idtrabajador = idtrabajador;
                        //eh.insertaEmpleadoEstatus(ee);

                        //a.idtrabajador = idtrabajador;
                        //a.registropatronal = empresash.obtenerRegistroPatronal(empresa).ToString();
                        //ah.insertaAlta(a);

                        if (ImagenAsignada == true)
                        {
                            img.idpersona = idtrabajador;
                            ih.insertaImagen(img);
                        }

                        cnx.Close();
                        cnx.Dispose();
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show("Error al ingresar el empleado. \r\n \r\n Error: " + error.Message);
                    }
                    break;
                case 2:
                    try
                    {
                        em.idtrabajador = _idempleado;
                        em.iddepartamento = idDepto;
                        em.idpuesto = idPuesto;

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

                        Periodos.Core.Periodos p = new Periodos.Core.Periodos();
                        p.idperiodo = int.Parse(cmbPeriodo.SelectedValue.ToString());
                        int diasPago = 0;
                        try { cnx.Open(); diasPago = (int)pdh.DiasDePago(p); cnx.Close(); }
                        catch { MessageBox.Show("Error: Al obtener los dias de pago.", "Error"); }

                        DateTime dt = dtpFechaIngreso.Value.Date;
                        DateTime periodoInicio, periodoFin;
                        int diasProporcionales = 0;
                        if (diasPago == 7)
                        {
                            while (dt.DayOfWeek != DayOfWeek.Monday) dt = dt.AddDays(-1);
                            periodoInicio = dt;
                            periodoFin = dt.AddDays(6);
                            diasProporcionales = (int)(periodoFin.Date - dtpFechaIngreso.Value.Date).TotalDays + 1;
                        }
                        else
                        {
                            if (dt.Day <= 15)
                            {
                                periodoInicio = new DateTime(dt.Year, dt.Month, 1);
                                periodoFin = new DateTime(dt.Year, dt.Month, 15);
                                diasProporcionales = (int)(periodoFin.Date - dtpFechaIngreso.Value.Date).TotalDays + 1;
                            }
                            else
                            {
                                int diasMes = DateTime.DaysInMonth(dt.Year, dt.Month);
                                int diasNoLaborados = 0;
                                periodoInicio = new DateTime(dt.Year, dt.Month, 16);
                                periodoFin = new DateTime(dt.Year, dt.Month, DateTime.DaysInMonth(dt.Year, dt.Month));
                                diasNoLaborados = (int)(dtpFechaIngreso.Value.Date - periodoInicio).TotalDays;

                                switch (diasMes)
                                {
                                    case 28:
                                        diasProporcionales = 15 - diasNoLaborados;
                                        break;
                                    case 29:
                                        diasProporcionales = 15 - diasNoLaborados;
                                        break;
                                    case 30:
                                        diasProporcionales = (diasMes - 15) - diasNoLaborados;
                                        break;
                                    case 31:
                                        diasProporcionales = (diasMes - 16) - diasNoLaborados;
                                        break;
                                }
                            }
                        }

                        Altas.Core.AltasHelper ah = new Altas.Core.AltasHelper();
                        ah.Command = cmd;
                        Altas.Core.Altas a = new Altas.Core.Altas();
                        a.idempresa = GLOBALES.IDEMPRESA;
                        a.contrato = 4;
                        a.jornada = 12;
                        a.nss = txtNSS.Text;
                        a.rfc = txtRFC.Text;
                        a.curp = txtCURP.Text;
                        a.paterno = txtApPaterno.Text;
                        a.materno = txtApMaterno.Text;
                        a.nombre = txtNombre.Text;
                        a.fechaingreso = dtpFechaIngreso.Value;
                        a.diasproporcionales = diasProporcionales;
                        a.sdi = decimal.Parse(txtSDI.Text);
                        a.fechanacimiento = dtpFechaNacimiento.Value;
                        a.estado = cmbEstado.Text;
                        a.noestado = int.Parse(cmbEstado.SelectedValue.ToString());
                        a.sexo = ObtieneSexo();
                        a.periodoInicio = periodoInicio;
                        a.periodoFin = periodoFin;

                        cnx.Open();
                        eh.actualizaEmpleado(em);

                        a.idtrabajador = _idempleado;
                        ah.actualizaAlta(a);

                        if (ImagenAsignada == true)
                        {
                            img.idpersona = _idempleado;
                            img.tipopersona = GLOBALES.pEMPLEADO;
                            existe = (int)ih.ExisteImagen(img);
                            if (existe != 0)
                                ih.actualizaImagen(img);
                            else
                                ih.insertaImagen(img);
                        }
                        cnx.Close();
                        cnx.Dispose();
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show("Error al actualizar el empleado. \r\n \r\n Error: " + error.Message);
                    }
                    break;
            }

            switch (tipoGuardar)
            {
                case 0:
                    GLOBALES.LIMPIAR(this, typeof(TextBox));
                    GLOBALES.LIMPIAR(this, typeof(MaskedTextBox));
                    GLOBALES.REFRESCAR(this, typeof(ComboBox));
                    break;
                case 1:
                    if (OnNuevoEmpleado != null)
                        OnNuevoEmpleado(_tipoOperacion);
                    this.Dispose();
                    break;
            }
        }
Esempio n. 20
0
        private void btnAceptar_Click(object sender, EventArgs e)
        {
            int existeNullCodeQR = 0;
            fecha = "";
            fechafin = "";

            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;
            CalculoNomina.Core.NominaHelper nh = new CalculoNomina.Core.NominaHelper();
            nh.Command = cmd;

            for (int i = 0; i < lstvPeriodos.SelectedItems.Count; i++)
            {
                fecha = lstvPeriodos.SelectedItems[i].Text;
                fechafin = lstvPeriodos.SelectedItems[i].SubItems[1].Text;
            }

            try
            {
                cnx.Open();
                existeNullCodeQR = nh.existeNullQR(GLOBALES.IDEMPRESA, DateTime.Parse(fecha).Date, DateTime.Parse(fechafin).Date);
                cnx.Close();
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: Al obtener existencia de nulos Code QR. " + error.Message, "Error");
                cnx.Dispose();
                return;
            }

            if (existeNullCodeQR != 0)
            {
                List<CalculoNomina.Core.CodigoBidimensional> lstXml = new List<CalculoNomina.Core.CodigoBidimensional>();
                try
                {
                    cnx.Open();
                    lstXml = nh.obtenerListaQr(GLOBALES.IDEMPRESA, DateTime.Parse(fecha).Date, DateTime.Parse(fechafin).Date);
                    cnx.Close();
                }
                catch (Exception error)
                {
                    MessageBox.Show("Error: Al obtener el listado de XMLs." + error.Message, "Error");
                    cnx.Dispose();
                    return;
                }

                string codigoQR = "";
                string[] valores = null;
                string numero = "";
                string vEntero = "";
                string vDecimal = "";

                for (int i = 0; i < lstXml.Count; i++)
                {
                    numero = lstXml[i].tt.ToString();
                    valores = numero.Split('.');
                    vEntero = valores[0];
                    vDecimal = valores[1];
                    codigoQR = string.Format("?re={0}&rr={1}&tt={2}.{3}&id={4}", lstXml[i].re, lstXml[i].rr,
                        vEntero.PadLeft(10, '0'), vDecimal.PadRight(6, '0'), lstXml[i].uuid);
                    var qrEncoder = new QrEncoder(ErrorCorrectionLevel.H);
                    var qrCode = qrEncoder.Encode(codigoQR);
                    var renderer = new GraphicsRenderer(new FixedModuleSize(2, QuietZoneModules.Two), Brushes.Black, Brushes.White);

                    using (var stream = new FileStream(lstXml[i].uuid + ".png", FileMode.Create))
                        renderer.WriteToStream(qrCode.Matrix, ImageFormat.Png, stream);

                    Bitmap bmp = new Bitmap(lstXml[i].uuid + ".png");
                    Byte[] qr = GLOBALES.IMAGEN_BYTES(bmp);
                    bmp.Dispose();
                    File.Delete(lstXml[i].uuid + ".png");
                    try
                    {
                        cnx.Open();
                        nh.actualizaXml(GLOBALES.IDEMPRESA, DateTime.Parse(fecha).Date, DateTime.Parse(fechafin).Date, lstXml[i].idtrabajador, qr);
                        cnx.Close();
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Error: Al actualizar el código QR.", "Error");
                        cnx.Dispose();
                        return;
                    }
                }
            }

            if (todos)
            {
                for (int i = 0; i < lstvPeriodos.SelectedItems.Count; i++)
                    fecha = lstvPeriodos.SelectedItems[i].Text;
                idEmpleados = "";
                frmVisorReportes vr = new frmVisorReportes();
                vr._tipoNomina = (cmbTipoNomina.SelectedIndex == 0 ? GLOBALES.NORMAL : GLOBALES.EXTRAORDINARIO_NORMAL);
                vr._departamentos = idDepartamentos;
                vr._empleados = idEmpleados;
                vr._todos = todos;
                vr._noReporte = 10;
                vr._inicioPeriodo = DateTime.Parse(fecha).Date;
                vr._periodo = periodo;
                vr.Show();
            }
            else {
                idEmpleados = "";
                for (int i = 0; i < lstvEmpleados.Items.Count; i++)
                {
                    if (lstvEmpleados.Items[i].Checked)
                        idEmpleados += lstvEmpleados.Items[i].Text + ",";
                }

                fecha = "";
                if (idEmpleados != "")
                {
                    for (int i = 0; i < lstvPeriodos.SelectedItems.Count; i++)
                        fecha = lstvPeriodos.SelectedItems[i].Text;
                    idEmpleados = idEmpleados.Substring(0, idEmpleados.Length - 1);
                    frmVisorReportes vr = new frmVisorReportes();
                    vr._tipoNomina = (cmbTipoNomina.SelectedIndex == 0 ? GLOBALES.NORMAL : GLOBALES.EXTRAORDINARIO_NORMAL);
                    vr._departamentos = idDepartamentos;
                    vr._empleados = idEmpleados;
                    vr._todos = todos;
                    vr._noReporte = 10;
                    vr._periodo = periodo;
                    vr._inicioPeriodo = DateTime.Parse(fecha).Date;
                    vr.Show();
                }
            }
        }
Esempio n. 21
0
        private void muestraDatos()
        {
            dgvPercepciones.DataSource = null;
            dgvPercepciones.Columns.Clear();
            dgvDeducciones.DataSource = null;
            dgvDeducciones.Columns.Clear();

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

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

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

            CalculoNomina.Core.tmpPagoNomina pnp = new CalculoNomina.Core.tmpPagoNomina();
            pnp.idtrabajador = idTrabajador;
            pnp.fechainicio = _inicioPeriodo.Date;
            pnp.fechafin = _finPeriodo.Date;
            pnp.tipoconcepto = "P";

            CalculoNomina.Core.tmpPagoNomina pnd = new CalculoNomina.Core.tmpPagoNomina();
            pnd.idtrabajador = idTrabajador;
            pnd.fechainicio = _inicioPeriodo.Date;
            pnd.fechafin = _finPeriodo.Date;
            pnd.tipoconcepto = "D";

            try
            {
                cnx.Open();
                lstReciboPercepciones = nh.obtenerDatosRecibo(pnp, _periodo);
                lstReciboDeducciones = nh.obtenerDatosRecibo(pnd, _periodo);
                cnx.Close();

            }
            catch {
                MessageBox.Show("Error: Al obtener la prenomina del trabajador. Se cerrará la ventana","Error");
                this.Dispose();
            }

            if (lstReciboPercepciones.Count != 0)
            {
                string formulaDiasAPagar = "[DiasLaborados]-[Faltas]-[DiasIncapacidad]";

                Conceptos.Core.ConceptosHelper conceptoh = new Conceptos.Core.ConceptosHelper();
                conceptoh.Command = cmd;

                Conceptos.Core.Conceptos c = new Conceptos.Core.Conceptos();
                c.idempresa = GLOBALES.IDEMPRESA;

                List<Conceptos.Core.Conceptos> lstConceptos = new List<Conceptos.Core.Conceptos>();

                CalculoFormula cf = new CalculoFormula(idTrabajador, _inicioPeriodo, _finPeriodo, formulaDiasAPagar);
                int diasAPagar = int.Parse(cf.calcularFormula().ToString());

                try
                {
                    cnx.Open();
                    lstConceptos = conceptoh.obtenerConceptos(c, _periodo);
                    cnx.Close();
                    cnx.Dispose();
                }
                catch (Exception error)
                {
                    MessageBox.Show("Error: Al obtener lista de conceptos. (Función Muestra Datos.)\r\n \r\n" + error.Message, "Error");
                }

                var percepcion = from r in lstReciboPercepciones
                                 join co in lstConceptos on r.idconcepto equals co.id
                                 where co.visible == true && r.cantidad != 0
                                 select new
                                 {
                                     NoConcepto = co.noconcepto,
                                     Concepto = co.concepto,
                                     Importe = r.cantidad
                                 };

                var deduccion = from r in lstReciboDeducciones
                                join co in lstConceptos on r.idconcepto equals co.id
                                where co.visible == true && r.cantidad != 0
                                select new
                                {
                                    NoConcepto = co.noconcepto,
                                    Concepto = co.concepto,
                                    Importe = r.cantidad
                                };

                DataGridViewCellStyle estilo = new DataGridViewCellStyle();
                estilo.Alignment = DataGridViewContentAlignment.MiddleRight;
                estilo.Format = "C2";

                dgvPercepciones.DataSource = percepcion.ToList();
                dgvPercepciones.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
                dgvPercepciones.Columns[0].Width = 10;
                dgvPercepciones.Columns[1].Width = 70;
                dgvPercepciones.Columns[2].Width = 90;
                dgvPercepciones.Columns[2].DefaultCellStyle = estilo;

                dgvDeducciones.DataSource = deduccion.ToList();
                dgvDeducciones.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
                dgvDeducciones.Columns[0].Width = 10;
                dgvDeducciones.Columns[1].Width = 70;
                dgvDeducciones.Columns[2].Width = 90;
                dgvDeducciones.Columns[2].DefaultCellStyle = estilo;

                decimal sumaPercepciones = 0, sumaDeducciones = 0, netoPagar = 0;
                decimal subsidio = lstReciboDeducciones.Where(d => d.noconcepto == 16).Sum(d => d.cantidad);
                foreach (DataGridViewRow fila in dgvPercepciones.Rows)
                {
                    sumaPercepciones += decimal.Parse(fila.Cells[2].Value.ToString());
                }

                foreach (DataGridViewRow fila in dgvDeducciones.Rows)
                {
                    sumaDeducciones += decimal.Parse(fila.Cells[2].Value.ToString());
                }

                sumaPercepciones += subsidio;
                sumaDeducciones = sumaDeducciones - subsidio;

                netoPagar = sumaPercepciones - sumaDeducciones;
                txtPercepciones.Text = "$ " + sumaPercepciones.ToString("#,##0.00");
                txtDeducciones.Text = "$ " + sumaDeducciones.ToString("#,##0.00");
                txtNeto.Text = "$ " + netoPagar.ToString("#,##0.00");

                dgvPercepciones.Columns.Add("dias", "dias");
                if (diasAPagar != 0)
                    dgvPercepciones.Rows[0].Cells[3].Value = diasAPagar.ToString() + " dias";
                if (netoPagar < 0)
                    MessageBox.Show("El neto a pagar es negativo: " + netoPagar.ToString("#,##0.00"), "Información");
            }
        }
Esempio n. 22
0
        private void guardar(int tipoGuardar)
        {
            int existe = 0;
            //SE VALIDA SI TODOS LOS TEXTBOX HAN SIDO LLENADOS.
            string control = GLOBALES.VALIDAR(this,typeof(TextBox));
            if (!control.Equals(""))
            {
                MessageBox.Show("Falta el campo: " + control, "Información");
                return;
            }

            control = GLOBALES.VALIDAR(this, typeof(MaskedTextBox));
            if (!control.Equals(""))
            {
                MessageBox.Show("Falta el campo: " + control, "Información");
                return;
            }

            int idempresa;

            cnx = new SqlConnection();
            cnx.ConnectionString = cdn;
            cmd = new SqlCommand();
            cmd.Connection = cnx;
            eh = new Empresas.Core.EmpresasHelper();
            eh.Command = cmd;

            Empresas.Core.Empresas em = new Empresas.Core.Empresas();
            em.nombre = txtNombre.Text;
            em.rfc = txtRfc.Text;
            em.registro = txtRegistroPatronal.Text;
            em.digitoverificador = int.Parse(txtDigitoVerificador.Text);
            em.representante = txtRepresentante.Text;
            em.estatus = 1;
            em.regimen = txtRegimen.Text;
            em.certificado = txtCertificado.Text;
            em.llave = txtLlave.Text;
            em.password = txtPassword.Text;
            em.nocertificado = txtNoCertificado.Text;
            em.vigenciacertificado = dtpVigencia.Value.Date;
            em.observacion = txtObservacion.Text;

            dh = new Direccion.Core.DireccionesHelper();
            dh.Command = cmd;

            Direccion.Core.Direcciones d = new Direccion.Core.Direcciones();
            d.calle = txtCalle.Text;
            d.exterior = txtExterior.Text;
            d.interior = txtInterior.Text;
            d.colonia = txtColonia.Text;
            d.ciudad = txtMunicipio.Text;
            d.estado = txtEstado.Text;
            d.pais = txtPais.Text;
            d.cp = txtCP.Text;
            d.tipodireccion = GLOBALES.dFISCAL;
            d.tipopersona = GLOBALES.pEMPRESA;

            ih = new Imagen.Core.ImagenesHelper();
            ih.Command = cmd;

            Imagen.Core.Imagenes img = null;

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

            Periodos.Core.Periodos periodo = new Periodos.Core.Periodos();
            periodo.dias = int.Parse(txtDias.Text);
            periodo.estatus = GLOBALES.ACTIVO;
            periodo.pago = cmbPago.Text;

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

            CalculoNomina.Core.PagoNomina pn = new CalculoNomina.Core.PagoNomina();
            pn.idtrabajador = 0;
            pn.idconcepto = 0;
            pn.noconcepto = 0;
            pn.tipoconcepto = "P";
            pn.exento = 0;
            pn.gravado = 0;
            pn.cantidad = 0;
            pn.fechainicio = inicioPeriodo;
            pn.fechafin = finPeriodo;
            pn.noperiodo = 0;
            pn.diaslaborados = 0;
            pn.idusuario = 0;
            pn.tiponomina = 0;
            pn.fechapago = finPeriodo;
            pn.iddepartamento = 0;
            pn.idpuesto = 0;

            try
            {
                if (ImagenAsignada == true)
                {
                    img = new Imagen.Core.Imagenes();
                    img.imagen = GLOBALES.IMAGEN_BYTES(bmp);
                    img.tipopersona = GLOBALES.pEMPRESA;
                }
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: " + error.Message, "Error");
            }

            switch (_tipoOperacion)
            {
                case 0:
                    try
                    {
                        cnx.Open();
                        eh.insertaEmpresa(em);
                        idempresa = (int)eh.obtenerIdEmpresa(em);
                        d.idpersona = idempresa;
                        dh.insertaDireccion(d);
                        if (ImagenAsignada == true)
                        {
                            img.idpersona = idempresa;
                            ih.insertaImagen(img);
                        }
                        periodo.idempresa = idempresa;
                        ph.insertaPeriodo(periodo);
                        pn.idempresa = idempresa;
                        nh.insertaPrimerPeriodoNomina(pn);
                        cnx.Close();
                        cnx.Dispose();
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show("Error al ingresar la empresa. \r\n \r\n Error: " + error.Message);
                    }
                    break;
                case 2:
                    try
                    {
                        em.idempresa = _idempresa;
                        d.iddireccion = _iddireccion;
                        d.idpersona = _idempresa;

                        cnx.Open();
                        eh.actualizaEmpresa(em);
                        dh.actualizaDireccion(d);
                        if (ImagenAsignada == true)
                        {
                            img.idpersona = _idempresa;
                            img.tipopersona = GLOBALES.pEMPRESA;
                            existe = (int)ih.ExisteImagen(img);
                            if (existe != 0)
                                ih.actualizaImagen(img);
                            else
                                ih.insertaImagen(img);
                        }
                        cnx.Close();
                        cnx.Dispose();
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show("Error al actualizar la empresa. \r\n \r\n Error: " + error.Message);
                    }
                    break;
            }

            switch (tipoGuardar)
            {
                case 0:
                    GLOBALES.LIMPIAR(this,typeof(TextBox));
                    GLOBALES.LIMPIAR(this, typeof(MaskedTextBox));
                    //limpiar(this, typeof(TextBox));
                    break;
                case 1:
                    if (OnNuevaEmpresa != null)
                        OnNuevaEmpresa(_tipoOperacion);
                    this.Dispose();
                    break;
            }
        }
Esempio n. 23
0
        private void toolEliminar_Click(object sender, EventArgs e)
        {
            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;

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

            CalculoNomina.Core.tmpPagoNomina pn = new CalculoNomina.Core.tmpPagoNomina();
            pn.idempresa = GLOBALES.IDEMPRESA;
            pn.idtrabajador = idTrabajador;
            pn.fechainicio = _inicioPeriodo.Date;
            pn.fechafin = _finPeriodo.Date;

            try{
                cnx.Open();
                nh.eliminaCalculo(pn);
                cnx.Close();

                dgvPercepciones.DataSource = null;
                dgvDeducciones.DataSource = null;
                dgvPercepciones.Columns.Clear();
                dgvDeducciones.Columns.Clear();
            }
            catch{
                MessageBox.Show("Error: Al eliminar los datos de la nomina.", "Error");
                this.Dispose();
            }
        }
Esempio n. 24
0
        public static List<CalculoNomina.Core.tmpPagoNomina> DEDUCCIONES(List<CalculoNomina.Core.Nomina> lstConceptosDeducciones,
            List<CalculoNomina.Core.tmpPagoNomina> lstPercepciones, DateTime inicio, DateTime fin, int tipoNomina)
        {
            #region VARIABLES GLOBALES
            string cdn = ConfigurationManager.ConnectionStrings["cdnNomina"].ConnectionString;
            SqlConnection cnx = new SqlConnection(cdn);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cnx;
            #endregion

            #region VARIABLES
            bool activoInfonavit = false;
            #endregion

            #region LISTA PARA DATOS DEL TRABAJADOR
            List<CalculoNomina.Core.tmpPagoNomina> lstValoresNomina;
            List<CalculoNomina.Core.tmpPagoNomina> lstValoresDefinitivos;
            #endregion

            #region CALCULO
            lstValoresNomina = new List<CalculoNomina.Core.tmpPagoNomina>();
            decimal isrAntes = 0, subsidioAntes = 0;

            for (int i = 0; i < lstConceptosDeducciones.Count; i++)
            {
                decimal percepciones = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador && e.tipoconcepto == "P").Sum(e => e.cantidad);

                switch (lstConceptosDeducciones[i].noconcepto)
                {

                    #region CONCEPTO IMSS
                    case 99:
                        int vsmdf, idsalario;
                        decimal porcentajeImss, excedenteVsmdf, sm, sdiTrabajador;

                        Configuracion.Core.ConfiguracionHelper ch = new Configuracion.Core.ConfiguracionHelper();
                        ch.Command = cmd;

                        Imss.Core.ImssHelper ih = new Imss.Core.ImssHelper();
                        ih.Command = cmd;

                        Imss.Core.Imss imss = new Imss.Core.Imss();
                        imss.secalcula = true;

                        Empleados.Core.EmpleadosHelper empleadosHelper = new Empleados.Core.EmpleadosHelper();
                        empleadosHelper.Command = cmd;
                        Empleados.Core.Empleados empleadoImss = new Empleados.Core.Empleados();
                        empleadoImss.idtrabajador = lstConceptosDeducciones[i].idtrabajador;

                        Salario.Core.SalariosHelper sh = new Salario.Core.SalariosHelper();
                        sh.Command = cmd;
                        Salario.Core.Salarios salario = new Salario.Core.Salarios();

                        cnx.Open();
                        vsmdf = int.Parse(ch.obtenerValorConfiguracion("VSMDF").ToString());
                        porcentajeImss = ih.CuotaObreroPatronal(imss);
                        excedenteVsmdf = ih.ExcedenteVSM(5);
                        idsalario = int.Parse(empleadosHelper.obtenerIdSalarioMinimo(lstConceptosDeducciones[i].idtrabajador).ToString());
                        salario.idsalario = idsalario;
                        sm = decimal.Parse(sh.obtenerSalarioValor(salario).ToString());
                        sdiTrabajador = decimal.Parse(empleadosHelper.obtenerSalarioDiarioIntegrado(empleadoImss).ToString());
                        cnx.Close();

                        string formulaDiasAPagar = "[DiasLaborados]-[Faltas]-[DiasIncapacidad]";
                        CalculoFormula cfImss = new CalculoFormula(lstConceptosDeducciones[i].idtrabajador, inicio, fin, formulaDiasAPagar);
                        int diasAPagar = int.Parse(cfImss.calcularFormula().ToString());

                        decimal tresVSMG = vsmdf * sm;
                        decimal excedenteImss = 0;
                        decimal valorImss = (sdiTrabajador * (porcentajeImss / 100)) * diasAPagar;
                        decimal totalImss = 0;
                        if (sdiTrabajador > tresVSMG)
                        {
                            excedenteImss = (sdiTrabajador - tresVSMG) * (excedenteVsmdf / 100) * diasAPagar;
                            totalImss = valorImss + excedenteImss;
                        }
                        else
                            totalImss = valorImss;

                        CalculoNomina.Core.tmpPagoNomina imssNomina = new CalculoNomina.Core.tmpPagoNomina();
                        imssNomina.idtrabajador = lstConceptosDeducciones[i].idtrabajador;
                        imssNomina.idempresa = GLOBALES.IDEMPRESA;
                        imssNomina.idconcepto = lstConceptosDeducciones[i].id;
                        imssNomina.noconcepto = lstConceptosDeducciones[i].noconcepto;
                        imssNomina.tipoconcepto = lstConceptosDeducciones[i].tipoconcepto;
                        imssNomina.fechainicio = inicio.Date;
                        imssNomina.fechafin = fin.Date;
                        imssNomina.exento = 0;
                        imssNomina.gravado = 0;
                        imssNomina.cantidad = totalImss;
                        imssNomina.diaslaborados = 0;
                        imssNomina.guardada = false;
                        imssNomina.tiponomina = tipoNomina;
                        imssNomina.modificado = false;

                        lstValoresNomina.Add(imssNomina);
                        break;
                    #endregion

                    #region CONCEPTO ISR ANTES DE SUBSIDIO
                    case 8:

                        decimal excedente = 0, ImpMarginal = 0, isr = 0;
                        List<TablaIsr.Core.TablaIsr> lstIsr = new List<TablaIsr.Core.TablaIsr>();
                        TablaIsr.Core.IsrHelper isrh = new TablaIsr.Core.IsrHelper();
                        isrh.Command = cmd;

                        CalculoNomina.Core.tmpPagoNomina isrAntesSubsidio = new CalculoNomina.Core.tmpPagoNomina();
                        isrAntesSubsidio.idtrabajador = lstConceptosDeducciones[i].idtrabajador;
                        isrAntesSubsidio.idempresa = GLOBALES.IDEMPRESA;
                        isrAntesSubsidio.idconcepto = lstConceptosDeducciones[i].id;
                        isrAntesSubsidio.noconcepto = lstConceptosDeducciones[i].noconcepto;
                        isrAntesSubsidio.tipoconcepto = lstConceptosDeducciones[i].tipoconcepto;
                        isrAntesSubsidio.fechainicio = inicio.Date;
                        isrAntesSubsidio.fechafin = fin.Date;
                        isrAntesSubsidio.exento = 0;
                        isrAntesSubsidio.gravado = 0;

                        if (percepciones != 0)
                        {
                            decimal baseGravableIsr = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador).Sum(e => e.gravado);

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

                            cnx.Open();
                            int idperiodo = (int)eh.obtenerIdPeriodo(lstConceptosDeducciones[i].idtrabajador);
                            cnx.Close();

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

                            Periodos.Core.Periodos p = new Periodos.Core.Periodos();
                            p.idperiodo = idperiodo;

                            cnx.Open();
                            int dias = (int)ph.DiasDePago(p);
                            cnx.Close();

                            TablaIsr.Core.TablaIsr _isr = new TablaIsr.Core.TablaIsr();
                            _isr.inferior = (baseGravableIsr / dias) * decimal.Parse((30.4).ToString());

                            cnx.Open();
                            lstIsr = isrh.isrCorrespondiente(_isr);
                            cnx.Close();

                            excedente = ((baseGravableIsr / dias) * decimal.Parse((30.4).ToString())) - lstIsr[0].inferior;
                            ImpMarginal = excedente * (lstIsr[0].porcentaje / 100);
                            isr = ImpMarginal + lstIsr[0].cuota;

                            isrAntesSubsidio.cantidad = (isr / decimal.Parse((30.4).ToString())) * dias;
                            isrAntes = (isr / decimal.Parse((30.4).ToString())) * dias;
                        }
                        else
                        {
                            isrAntes = 0;
                            isrAntesSubsidio.cantidad = 0;
                            //double vacaciones = lstPercepciones.Where(e => e.idtrabajador == lstPercepciones[i].idtrabajador && e.noconcepto == 7).Sum(e => e.cantidad);
                            //if (vacaciones != 0)
                            //{
                            //    double baseGravableIsr = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador).Sum(e => e.gravado);

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

                            //    cnx.Open();
                            //    int idperiodo = (int)eh.obtenerIdPeriodo(lstConceptosDeducciones[i].idtrabajador);
                            //    cnx.Close();

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

                            //    Periodos.Core.Periodos p = new Periodos.Core.Periodos();
                            //    p.idperiodo = idperiodo;

                            //    cnx.Open();
                            //    int dias = (int)ph.DiasDePago(p);
                            //    cnx.Close();

                            //    TablaIsr.Core.TablaIsr _isr = new TablaIsr.Core.TablaIsr();
                            //    _isr.inferior = (baseGravableIsr / dias) * 30.4;

                            //    cnx.Open();
                            //    lstIsr = isrh.isrCorrespondiente(_isr);
                            //    cnx.Close();

                            //    excedente = ((baseGravableIsr / dias) * 30.4) - lstIsr[0].inferior;
                            //    ImpMarginal = excedente * (lstIsr[0].porcentaje / 100);
                            //    isr = ImpMarginal + lstIsr[0].cuota;

                            //    isrAntesSubsidio.cantidad = isr;
                            //    isrAntes = isr;
                            //}
                            //else
                            //{
                            //    isrAntes = 0;
                            //    isrAntesSubsidio.cantidad = 0;
                            //}
                        }

                        isrAntesSubsidio.guardada = false;
                        isrAntesSubsidio.tiponomina = tipoNomina;
                        isrAntesSubsidio.modificado = false;
                        lstValoresNomina.Add(isrAntesSubsidio);
                        break;
                    #endregion

                    #region SUBSIDIO
                    case 15:
                        //double sueldoSubsidio = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador && e.noconcepto == 1).Sum(e => e.cantidad);

                        CalculoNomina.Core.tmpPagoNomina subsidioNomina = new CalculoNomina.Core.tmpPagoNomina();
                        subsidioNomina.idtrabajador = lstConceptosDeducciones[i].idtrabajador;
                        subsidioNomina.idempresa = GLOBALES.IDEMPRESA;
                        subsidioNomina.idconcepto = lstConceptosDeducciones[i].id;
                        subsidioNomina.noconcepto = lstConceptosDeducciones[i].noconcepto;
                        subsidioNomina.tipoconcepto = lstConceptosDeducciones[i].tipoconcepto;
                        subsidioNomina.fechainicio = inicio.Date;
                        subsidioNomina.fechafin = fin.Date;
                        subsidioNomina.exento = 0;
                        subsidioNomina.gravado = 0;

                        if (percepciones != 0)
                        {
                            decimal baseGravableSubsidio = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador).Sum(e => e.gravado);

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

                            cnx.Open();
                            int idperiodo = (int)eh.obtenerIdPeriodo(lstConceptosDeducciones[i].idtrabajador);
                            cnx.Close();

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

                            Periodos.Core.Periodos p = new Periodos.Core.Periodos();
                            p.idperiodo = idperiodo;

                            cnx.Open();
                            int dias = (int)ph.DiasDePago(p);
                            cnx.Close();

                            TablaSubsidio.Core.SubsidioHelper ts = new TablaSubsidio.Core.SubsidioHelper();
                            ts.Command = cmd;
                            TablaSubsidio.Core.TablaSubsidio subsidio = new TablaSubsidio.Core.TablaSubsidio();
                            subsidio.desde = (baseGravableSubsidio / dias) * decimal.Parse((30.4).ToString());

                            decimal cantidad = 0;
                            cnx.Open();
                            cantidad = decimal.Parse(ts.obtenerCantidadSubsidio(subsidio).ToString());
                            cnx.Close();

                            subsidioNomina.cantidad = (cantidad / decimal.Parse((30.4).ToString())) * dias;
                            subsidioAntes = (cantidad / decimal.Parse((30.4).ToString())) * dias;
                        }
                        else
                        {
                            subsidioNomina.cantidad = 0;
                            subsidioAntes = 0;
                            //double vacacionesSubsidio = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador && e.noconcepto == 7).Sum(e => e.cantidad);
                            //if (vacacionesSubsidio != 0)
                            //{
                            //    double baseGravableSubsidio = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador).Sum(e => e.gravado);

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

                            //    cnx.Open();
                            //    int idperiodo = (int)eh.obtenerIdPeriodo(lstConceptosDeducciones[i].idtrabajador);
                            //    cnx.Close();

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

                            //    Periodos.Core.Periodos p = new Periodos.Core.Periodos();
                            //    p.idperiodo = idperiodo;

                            //    cnx.Open();
                            //    int dias = (int)ph.DiasDePago(p);
                            //    cnx.Close();

                            //    TablaSubsidio.Core.SubsidioHelper ts = new TablaSubsidio.Core.SubsidioHelper();
                            //    ts.Command = cmd;
                            //    TablaSubsidio.Core.TablaSubsidio subsidio = new TablaSubsidio.Core.TablaSubsidio();
                            //    subsidio.desde = (baseGravableSubsidio / dias) * 30.4;

                            //    double cantidad = 0;
                            //    cnx.Open();
                            //    cantidad = double.Parse(ts.obtenerCantidadSubsidio(subsidio).ToString());
                            //    cnx.Close();

                            //    subsidioNomina.cantidad = cantidad;
                            //    subsidioAntes = cantidad;
                            //}
                            //else
                            //{
                            //    subsidioNomina.cantidad = 0;
                            //    subsidioAntes = 0;
                            //}
                        }

                        subsidioNomina.guardada = false;
                        subsidioNomina.tiponomina = tipoNomina;
                        subsidioNomina.modificado = false;
                        lstValoresNomina.Add(subsidioNomina);
                        break;
                    #endregion

                    #region SUBSIDIO DEFINITIVO
                    case 16:
                        CalculoNomina.Core.tmpPagoNomina subsidioDefinitivo = new CalculoNomina.Core.tmpPagoNomina();
                        subsidioDefinitivo.idtrabajador = lstConceptosDeducciones[i].idtrabajador;
                        subsidioDefinitivo.idempresa = GLOBALES.IDEMPRESA;
                        subsidioDefinitivo.idconcepto = lstConceptosDeducciones[i].id;
                        subsidioDefinitivo.noconcepto = lstConceptosDeducciones[i].noconcepto;
                        subsidioDefinitivo.tipoconcepto = lstConceptosDeducciones[i].tipoconcepto;
                        subsidioDefinitivo.fechainicio = inicio.Date;
                        subsidioDefinitivo.fechafin = fin.Date;
                        subsidioDefinitivo.exento = 0;
                        subsidioDefinitivo.gravado = 0;

                        //double sueldoSubsidioDefinitivo = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador && e.noconcepto == 1).Sum(e => e.cantidad);

                        if (percepciones != 0)
                        {
                            Empleados.Core.EmpleadosHelper esh = new Empleados.Core.EmpleadosHelper();
                            esh.Command = cmd;

                            cnx.Open();
                            int idperiodoSubsidio = (int)esh.obtenerIdPeriodo(lstConceptosDeducciones[i].idtrabajador);
                            cnx.Close();

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

                            Periodos.Core.Periodos ps = new Periodos.Core.Periodos();
                            ps.idperiodo = idperiodoSubsidio;

                            cnx.Open();
                            int diasSubsidio = (int)psh.DiasDePago(ps);
                            cnx.Close();

                            if (subsidioAntes > isrAntes)
                                subsidioDefinitivo.cantidad = subsidioAntes - isrAntes;
                            else
                                subsidioDefinitivo.cantidad = 0;
                        }
                        else
                        {
                            subsidioDefinitivo.cantidad = 0;
                            //double vacacionSubsidioDefinitivo = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador && e.noconcepto == 7).Sum(e => e.cantidad);
                            //if (vacacionSubsidioDefinitivo != 0)
                            //{
                            //    Empleados.Core.EmpleadosHelper esh = new Empleados.Core.EmpleadosHelper();
                            //    esh.Command = cmd;

                            //    cnx.Open();
                            //    int idperiodoSubsidio = (int)esh.obtenerIdPeriodo(lstConceptosDeducciones[i].idtrabajador);
                            //    cnx.Close();

                            //    Periodos.Core.PeriodosHelper psh = new Periodos.Core.PeriodosHelper();
                            //    psh.Command = cmd;

                            //    Periodos.Core.Periodos ps = new Periodos.Core.Periodos();
                            //    ps.idperiodo = idperiodoSubsidio;

                            //    cnx.Open();
                            //    int diasSubsidio = (int)psh.DiasDePago(ps);
                            //    cnx.Close();

                            //    if (subsidioAntes > isrAntes)
                            //        subsidioDefinitivo.cantidad = subsidioAntes - isrAntes;
                            //    else
                            //        subsidioDefinitivo.cantidad = 0;
                            //}
                            //else
                            //    subsidioDefinitivo.cantidad = 0;
                        }

                        subsidioDefinitivo.guardada = false;
                        subsidioDefinitivo.tiponomina = tipoNomina;
                        subsidioDefinitivo.modificado = false;
                        lstValoresNomina.Add(subsidioDefinitivo);
                        break;
                    #endregion

                    #region ISR DEFINITIVO
                    case 17:
                        CalculoNomina.Core.tmpPagoNomina isrDefinitivo = new CalculoNomina.Core.tmpPagoNomina();
                        isrDefinitivo.idtrabajador = lstConceptosDeducciones[i].idtrabajador;
                        isrDefinitivo.idempresa = GLOBALES.IDEMPRESA;
                        isrDefinitivo.idconcepto = lstConceptosDeducciones[i].id;
                        isrDefinitivo.noconcepto = lstConceptosDeducciones[i].noconcepto;
                        isrDefinitivo.tipoconcepto = lstConceptosDeducciones[i].tipoconcepto;
                        isrDefinitivo.fechainicio = inicio.Date;
                        isrDefinitivo.fechafin = fin.Date;
                        isrDefinitivo.exento = 0;
                        isrDefinitivo.gravado = 0;

                        //double sueldoIsrDefinitivo = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador && e.noconcepto == 1).Sum(e => e.cantidad);

                        if (percepciones != 0)
                        {
                            Empleados.Core.EmpleadosHelper eih = new Empleados.Core.EmpleadosHelper();
                            eih.Command = cmd;

                            cnx.Open();
                            int idperiodoIsr = (int)eih.obtenerIdPeriodo(lstConceptosDeducciones[i].idtrabajador);
                            cnx.Close();

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

                            Periodos.Core.Periodos pi = new Periodos.Core.Periodos();
                            pi.idperiodo = idperiodoIsr;

                            cnx.Open();
                            int diasIsr = (int)pih.DiasDePago(pi);
                            cnx.Close();

                            if (subsidioAntes > isrAntes)
                            {
                                isrDefinitivo.cantidad = 0;
                            }
                            else
                            {
                                isrDefinitivo.cantidad = isrAntes - subsidioAntes;
                            }
                        }
                        else
                        {
                            isrDefinitivo.cantidad = 0;
                            //double vacacionIsrDefinitivo = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador && e.noconcepto == 7).Sum(e => e.cantidad);
                            //if (vacacionIsrDefinitivo != 0)
                            //{
                            //    Empleados.Core.EmpleadosHelper eih = new Empleados.Core.EmpleadosHelper();
                            //    eih.Command = cmd;

                            //    cnx.Open();
                            //    int idperiodoIsr = (int)eih.obtenerIdPeriodo(lstConceptosDeducciones[i].idtrabajador);
                            //    cnx.Close();

                            //    Periodos.Core.PeriodosHelper pih = new Periodos.Core.PeriodosHelper();
                            //    pih.Command = cmd;

                            //    Periodos.Core.Periodos pi = new Periodos.Core.Periodos();
                            //    pi.idperiodo = idperiodoIsr;

                            //    cnx.Open();
                            //    int diasIsr = (int)pih.DiasDePago(pi);
                            //    cnx.Close();

                            //    double isptIsr = 0;
                            //    if (subsidioAntes > isrAntes)
                            //    {
                            //        isrDefinitivo.cantidad = 0;
                            //    }
                            //    else
                            //    {
                            //        isptIsr = ((isrAntes - subsidioAntes) / 30.4) * diasIsr;

                            //        if (isptIsr <= 0)
                            //        {
                            //            isrDefinitivo.cantidad = 0;
                            //        }
                            //        else
                            //        {
                            //            isrDefinitivo.cantidad = isptIsr;
                            //        }
                            //    }
                            //}
                            //else
                            //    isrDefinitivo.cantidad = 0;
                        }

                        isrDefinitivo.guardada = false;
                        isrDefinitivo.tiponomina = tipoNomina;
                        isrDefinitivo.modificado = false;
                        lstValoresNomina.Add(isrDefinitivo);
                        break;
                    #endregion

                    #region OTRAS DEDUCCIONES
                    default:
                        //double sueldoDeducciones = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador && e.noconcepto == 1).Sum(e => e.cantidad);

                        CalculoNomina.Core.tmpPagoNomina vn = new CalculoNomina.Core.tmpPagoNomina();
                        vn.idtrabajador = lstConceptosDeducciones[i].idtrabajador;
                        vn.idempresa = GLOBALES.IDEMPRESA;
                        vn.idconcepto = lstConceptosDeducciones[i].id;
                        vn.noconcepto = lstConceptosDeducciones[i].noconcepto;
                        vn.tipoconcepto = lstConceptosDeducciones[i].tipoconcepto;
                        vn.fechainicio = inicio.Date;
                        vn.fechafin = fin.Date;
                        vn.guardada = false;
                        vn.tiponomina = tipoNomina;
                        vn.modificado = false;

                        #region SUELDO DIFERENTE DE CERO
                        if (percepciones != 0)
                        {
                            Infonavit.Core.InfonavitHelper infh = new Infonavit.Core.InfonavitHelper();
                            infh.Command = cmd;

                            Infonavit.Core.Infonavit inf = new Infonavit.Core.Infonavit();
                            inf.idtrabajador = lstConceptosDeducciones[i].idtrabajador;
                            inf.idempresa = GLOBALES.IDEMPRESA;

                            if (lstConceptosDeducciones[i].noconcepto == 9 || lstConceptosDeducciones[i].noconcepto == 21)
                            {
                                cnx.Open();
                                activoInfonavit = (bool)infh.activoInfonavit(inf);
                                cnx.Close();

                                if (activoInfonavit)
                                {
                                    CalculoFormula cf = new CalculoFormula(lstConceptosDeducciones[i].idtrabajador, inicio.Date, fin.Date, lstConceptosDeducciones[i].formula);
                                    vn.cantidad = decimal.Parse(cf.calcularFormula().ToString());
                                    vn.exento = 0;
                                    vn.gravado = 0;
                                }
                                else
                                {

                                    vn.cantidad = 0;
                                    vn.exento = 0;
                                    vn.gravado = 0;
                                }
                            }
                            else
                            {
                                CalculoFormula cf = new CalculoFormula(lstConceptosDeducciones[i].idtrabajador, inicio.Date, fin.Date, lstConceptosDeducciones[i].formula);
                                vn.cantidad = decimal.Parse(cf.calcularFormula().ToString());
                                vn.exento = 0;
                                vn.gravado = 0;
                            }
                                lstValoresNomina.Add(vn);
                        }
                        else
                        {
                            vn.cantidad = 0;
                            vn.exento = 0;
                            vn.gravado = 0;
                            lstValoresNomina.Add(vn);
                        }
                        break;
                        #endregion
                    #endregion
                }
            }
            #endregion

            #region EXISTENCIA DEL CONCEPTO EN TABLA
            int existe = 0;
            CalculoNomina.Core.NominaHelper nh = new CalculoNomina.Core.NominaHelper();
            nh.Command = cmd;
            lstValoresDefinitivos = new List<CalculoNomina.Core.tmpPagoNomina>();
            for (int i = 0; i < lstValoresNomina.Count; i++)
            {
                CalculoNomina.Core.tmpPagoNomina vn = new CalculoNomina.Core.tmpPagoNomina();
                vn.idtrabajador = lstValoresNomina[i].idtrabajador;
                vn.idempresa = GLOBALES.IDEMPRESA;
                vn.idconcepto = lstValoresNomina[i].idconcepto;
                vn.noconcepto = lstValoresNomina[i].noconcepto;
                vn.tipoconcepto = lstValoresNomina[i].tipoconcepto;
                vn.fechainicio = lstValoresNomina[i].fechainicio;
                vn.fechafin = lstValoresNomina[i].fechafin;
                vn.guardada = lstValoresNomina[i].guardada;
                vn.tiponomina = lstValoresNomina[i].tiponomina;
                vn.modificado = lstValoresNomina[i].modificado;
                vn.exento = lstValoresNomina[i].exento;
                vn.gravado = lstValoresNomina[i].gravado;
                vn.cantidad = lstValoresNomina[i].cantidad;

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

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

            return lstValoresDefinitivos;
        }
Esempio n. 25
0
        void da_OnCantidad(decimal cantidad)
        {
            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;

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

            Conceptos.Core.ConceptosHelper ch = new Conceptos.Core.ConceptosHelper();
            ch.Command = cmd;

            Conceptos.Core.Conceptos concepto = new Conceptos.Core.Conceptos();
            concepto.noconcepto = 2; //HORAS EXTRAS DOBLES
            concepto.idempresa = GLOBALES.IDEMPRESA;

            cnx.Open();
            string formulaexento = ch.obtenerFormulaExento(concepto).ToString();
            cnx.Close();

            CalculoFormula cf = new CalculoFormula(idTrabajador, _inicioPeriodo, _finPeriodo, formulaexento);
            decimal exento = decimal.Parse(cf.calcularFormula().ToString());

            decimal gravado = 0;
            if (cantidad <= exento)
            {
                exento = cantidad;
                gravado = 0;
            }
            else
            {
                gravado = cantidad - exento;
            }

            CalculoNomina.Core.tmpPagoNomina hora = new CalculoNomina.Core.tmpPagoNomina();
            hora.idempresa = GLOBALES.IDEMPRESA;
            hora.idtrabajador = idTrabajador;
            hora.noconcepto = 2; //CONCEPTO HORAS EXTRAS DOBLES
            hora.fechainicio = _inicioPeriodo.Date;
            hora.fechafin = _finPeriodo.Date;
            hora.cantidad = cantidad;
            hora.exento = exento;
            hora.gravado = gravado;
            hora.modificado = true;
            try
            {
                cnx.Open();
                nh.actualizaHorasExtrasDespensa(hora);
                cnx.Close();
                cnx.Dispose();

                muestraDatos();
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
            }
        }
Esempio n. 26
0
        public static List<CalculoNomina.Core.tmpPagoNomina> PERCEPCIONES(List<CalculoNomina.Core.Nomina> lstConceptosPercepciones,
            DateTime inicio, DateTime fin, int tipoNomina)
        {
            #region VARIABLES GLOBALES
            string cdn = ConfigurationManager.ConnectionStrings["cdnNomina"].ConnectionString;
            SqlConnection cnx = new SqlConnection(cdn);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cnx;
            #endregion

            #region LISTA PARA DATOS DEL TRABAJADOR
            List<CalculoNomina.Core.tmpPagoNomina> lstValoresNomina;
            List<CalculoNomina.Core.tmpPagoNomina> lstValoresDefinitivos;
            #endregion

            #region CALCULO
            lstValoresNomina = new List<CalculoNomina.Core.tmpPagoNomina>();
            for (int i = 0; i < lstConceptosPercepciones.Count; i++)
            {
                CalculoNomina.Core.tmpPagoNomina vn = new CalculoNomina.Core.tmpPagoNomina();
                vn.idtrabajador = lstConceptosPercepciones[i].idtrabajador;
                vn.idempresa = GLOBALES.IDEMPRESA;
                vn.idconcepto = lstConceptosPercepciones[i].id;
                vn.noconcepto = lstConceptosPercepciones[i].noconcepto;
                vn.tipoconcepto = lstConceptosPercepciones[i].tipoconcepto;
                vn.fechainicio = inicio.Date;
                vn.fechafin = fin.Date;
                vn.guardada = false;
                vn.tiponomina = tipoNomina;
                vn.modificado = false;

                CalculoFormula formula = new CalculoFormula(lstConceptosPercepciones[i].idtrabajador, inicio.Date, fin.Date, lstConceptosPercepciones[i].formula);
                vn.cantidad = decimal.Parse(formula.calcularFormula().ToString());

                CalculoFormula formulaExcento = new CalculoFormula(lstConceptosPercepciones[i].idtrabajador, inicio.Date, fin.Date, lstConceptosPercepciones[i].formulaexento);
                vn.exento = decimal.Parse(formulaExcento.calcularFormula().ToString());

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

                cnx.Open();
                int idperiodo = (int)eh.obtenerIdPeriodo(lstConceptosPercepciones[i].idtrabajador);
                cnx.Close();

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

                Periodos.Core.Periodos p = new Periodos.Core.Periodos();
                p.idperiodo = idperiodo;

                cnx.Open();
                int dias = (int)ph.DiasDePago(p);
                cnx.Close();

                Conceptos.Core.ConceptosHelper ch = new Conceptos.Core.ConceptosHelper();
                ch.Command = cmd;

                Conceptos.Core.Conceptos c = new Conceptos.Core.Conceptos();
                c.idempresa = GLOBALES.IDEMPRESA;
                c.noconcepto = lstConceptosPercepciones[i].noconcepto;
                c.tipoconcepto = lstConceptosPercepciones[i].tipoconcepto;
                c.periodo = dias;

                cnx.Open();
                bool grava = (bool)ch.gravaConcepto(c);
                bool exenta = (bool)ch.exentaConcepto(c);
                cnx.Close();

                if (grava && !exenta)
                    vn.gravado = vn.cantidad;

                if (grava && exenta)
                {
                    if (vn.cantidad <= vn.exento)
                    {
                        vn.exento = vn.cantidad;
                        vn.gravado = 0;
                    }
                    else
                    {
                        vn.gravado = vn.cantidad - vn.exento;
                    }
                }

                if (!grava && exenta)
                {
                    vn.gravado = 0;
                    vn.exento = vn.cantidad;
                }

                #region SWITCH SUELDO CERO
                switch (lstConceptosPercepciones[i].noconcepto)
                {
                    case 1:
                        if (vn.cantidad == 0)
                        {
                            vn.gravado = 0;
                            lstValoresNomina.Add(vn);

                            Vacaciones.Core.VacacionesHelper vh = new Vacaciones.Core.VacacionesHelper();
                            vh.Command = cmd;
                            Vacaciones.Core.VacacionesPrima vp = new Vacaciones.Core.VacacionesPrima();
                            vp.idtrabajador = lstConceptosPercepciones[i].idtrabajador;
                            vp.idempresa = GLOBALES.IDEMPRESA;
                            vp.periodofin = fin.Date;
                            vp.periodoinicio = inicio.Date;
                            vp.vacacionesprima = "V";

                            cnx.Open();
                            int diasVacaciones = (int)vh.pagoVacacionesPrima(vp);
                            cnx.Close();

                            if (diasVacaciones == 0)
                            {
                                i++;
                                int contadorDatosNomina = i;
                                for (int j = i; j < lstConceptosPercepciones.Count; j++)
                                {
                                    contadorDatosNomina = j;
                                    if (lstConceptosPercepciones[j].idtrabajador == vn.idtrabajador)
                                    {
                                        CalculoNomina.Core.tmpPagoNomina vnCero = new CalculoNomina.Core.tmpPagoNomina();
                                        vnCero.idtrabajador = lstConceptosPercepciones[j].idtrabajador;
                                        vnCero.idempresa = GLOBALES.IDEMPRESA;
                                        vnCero.idconcepto = lstConceptosPercepciones[j].id;
                                        vnCero.noconcepto = lstConceptosPercepciones[j].noconcepto;
                                        vnCero.tipoconcepto = lstConceptosPercepciones[j].tipoconcepto;
                                        vnCero.fechainicio = inicio.Date;
                                        vnCero.fechafin = fin.Date;
                                        vnCero.guardada = false;
                                        vnCero.tiponomina = tipoNomina;
                                        vnCero.modificado = false;
                                        vnCero.cantidad = 0;
                                        vnCero.exento = 0;
                                        vnCero.gravado = 0;
                                        lstValoresNomina.Add(vnCero);
                                    }
                                    else
                                    {
                                        --contadorDatosNomina;
                                        break;
                                    }
                                }
                                i = contadorDatosNomina;
                            }
                        }
                        else
                            lstValoresNomina.Add(vn);
                        break;
                    default:
                        lstValoresNomina.Add(vn);
                        break;
                }
                #endregion
            }
            #endregion

            #region EXISTENCIA DEL CONCEPTO EN TABLA
            int existe = 0;
            CalculoNomina.Core.NominaHelper nh = new CalculoNomina.Core.NominaHelper();
            nh.Command = cmd;
            lstValoresDefinitivos = new List<CalculoNomina.Core.tmpPagoNomina>();
            for (int i = 0; i < lstValoresNomina.Count; i++)
            {
                CalculoNomina.Core.tmpPagoNomina vn = new CalculoNomina.Core.tmpPagoNomina();
                vn.idtrabajador = lstValoresNomina[i].idtrabajador;
                vn.idempresa = GLOBALES.IDEMPRESA;
                vn.idconcepto = lstValoresNomina[i].idconcepto;
                vn.noconcepto = lstValoresNomina[i].noconcepto;
                vn.tipoconcepto = lstValoresNomina[i].tipoconcepto;
                vn.fechainicio = lstValoresNomina[i].fechainicio;
                vn.fechafin = lstValoresNomina[i].fechafin;
                vn.guardada = lstValoresNomina[i].guardada;
                vn.tiponomina = lstValoresNomina[i].tiponomina;
                vn.modificado = lstValoresNomina[i].modificado;
                vn.exento = lstValoresNomina[i].exento;
                vn.gravado = lstValoresNomina[i].gravado;
                vn.cantidad = lstValoresNomina[i].cantidad;

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

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

            return lstValoresDefinitivos;
        }
Esempio n. 27
0
        private void dtpSeleccionaFecha_ValueChanged(object sender, EventArgs e)
        {
            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;

            int existe = 0;

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

            if (_tipoNomina != GLOBALES.EXTRAORDINARIO_NORMAL)
            {
                if (_periodo == 7)
                {
                    DateTime dt = dtpSeleccionaFecha.Value.Date;
                    while (dt.DayOfWeek != DayOfWeek.Monday) dt = dt.AddDays(-1);

                    dtpPeriodoInicio.Value = dt;
                    dtpPeriodoFin.Value = dt.AddDays(6);

                    periodoInicio = dtpPeriodoInicio.Value.Date;
                    periodoFin = dtpPeriodoFin.Value.Date;
                }
                else
                {
                    if (dtpSeleccionaFecha.Value.Day <= 15)
                    {
                        dtpPeriodoInicio.Value = new DateTime(dtpSeleccionaFecha.Value.Year, dtpSeleccionaFecha.Value.Month, 1);
                        dtpPeriodoFin.Value = new DateTime(dtpSeleccionaFecha.Value.Year, dtpSeleccionaFecha.Value.Month, 15);
                    }
                    else
                    {
                        dtpPeriodoInicio.Value = new DateTime(dtpSeleccionaFecha.Value.Year, dtpSeleccionaFecha.Value.Month, 16);
                        dtpPeriodoFin.Value = new DateTime(dtpSeleccionaFecha.Value.Year, dtpSeleccionaFecha.Value.Month, DateTime.DaysInMonth(dtpSeleccionaFecha.Value.Year, dtpSeleccionaFecha.Value.Month));
                    }
                    periodoInicio = dtpPeriodoInicio.Value.Date;
                    periodoFin = dtpPeriodoFin.Value.Date;
                }

                try
                {
                    cnx.Open();
                    existe = (int)nh.existeNomina(GLOBALES.IDEMPRESA, periodoInicio.Date, periodoFin.Date, _periodo);
                    cnx.Close();
                    if (existe != 0)
                    {
                        MessageBox.Show("NOMINA CALCULADA \r\n \r\n " +
                                            "El periodo seleccionado se encuenta: \r\n " +
                                            "Calculado y Autorizado.", "Información");
                        btnAceptar.Enabled = false;
                    }
                    else
                    {
                        btnAceptar.Enabled = true;
                    }
                }
                catch (Exception error)
                {
                    MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
                }
            }
            else
            {
                periodoInicio = dtpSeleccionaFecha.Value.Date;
                periodoFin = dtpSeleccionaFecha.Value.Date;
                btnAceptar.Enabled = true;
            }
        }
Esempio n. 28
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();
            }
        }
        private void btnAceptar_Click(object sender, EventArgs e)
        {
            string rp;
            //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;
            }

            control = GLOBALES.VALIDAR(this, typeof(MaskedTextBox));
            if (!control.Equals(""))
            {
                MessageBox.Show("Falta el campo: " + control, "Información");
                return;
            }

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

            Empleados.Core.EmpleadosHelper empleadoh = new Empleados.Core.EmpleadosHelper();
            Historial.Core.HistorialHelper hh = new Historial.Core.HistorialHelper();
            Reingreso.Core.ReingresoHelper rh = new Reingreso.Core.ReingresoHelper();
            Empresas.Core.EmpresasHelper eh = new Empresas.Core.EmpresasHelper();
            Infonavit.Core.InfonavitHelper ih = new Infonavit.Core.InfonavitHelper();

            empleadoh.Command = cmd;
            hh.Command = cmd;
            rh.Command = cmd;
            eh.Command = cmd;
            ih.Command = cmd;

            Empleados.Core.Empleados empleado = new Empleados.Core.Empleados();
            Empleados.Core.EmpleadosEstatus ee = new Empleados.Core.EmpleadosEstatus();
            Historial.Core.Historial historia = new Historial.Core.Historial();
            Reingreso.Core.Reingresos reingreso = new Reingreso.Core.Reingresos();
            Empresas.Core.Empresas empresa = new Empresas.Core.Empresas();

            empleado.idtrabajador = _idempleado;
            empleado.idempresa = lstEmpleado[0].idempresa;
            empleado.fechaingreso = dtpFechaReingreso.Value;
            empleado.fechaantiguedad = dtpFechaAntiguedad.Value;
            empleado.antiguedad = int.Parse(txtAntiguedad.Text);
            empleado.antiguedadmod = int.Parse(txtAntiguedadMod.Text);
            empleado.iddepartamento = int.Parse(cmbDepartamento.SelectedValue.ToString());
            empleado.idpuesto = int.Parse(cmbPuesto.SelectedValue.ToString());
            empleado.idperiodo = int.Parse(cmbPeriodo.SelectedValue.ToString());
            empleado.sueldo = decimal.Parse(txtSueldo.Text);
            empleado.sd = decimal.Parse(txtSalarioDiario.Text);
            empleado.sdi = decimal.Parse(txtSDI.Text);
            empleado.idusuario = GLOBALES.IDUSUARIO;
            empleado.estatus = GLOBALES.ACTIVO;
            empleado.cuenta = mtxtCuentaBancaria.Text;
            empleado.clabe = mtxtCuentaClabe.Text;
            empleado.idbancario = mtxtIdBancario.Text;
            empleado.metodopago = cmbMetodoPago.Text;

            if (chkObraCivil.Checked)
                empleado.obracivil = true;
            else
                empleado.obracivil = false;

            ee.idtrabajador = _idempleado;
            ee.idempresa = GLOBALES.IDEMPRESA;
            ee.estatus = GLOBALES.REINGRESO;

            historia.idtrabajador = _idempleado;
            historia.idempresa = lstEmpleado[0].idempresa;
            historia.valor = decimal.Parse(txtSDI.Text);
            historia.fecha_imss = dtpFechaReingreso.Value;
            historia.fecha_sistema = DateTime.Now;
            historia.motivobaja = 0;
            historia.tipomovimiento = GLOBALES.mREINGRESO;
            historia.iddepartamento = int.Parse(cmbDepartamento.SelectedValue.ToString());
            historia.idpuesto = int.Parse(cmbPuesto.SelectedValue.ToString());

            empresa.idempresa = lstEmpleado[0].idempresa;

            reingreso.idtrabajador = _idempleado;
            reingreso.idempresa = lstEmpleado[0].idempresa;
            reingreso.fechaingreso = dtpFechaReingreso.Value;
            reingreso.sdi = decimal.Parse(txtSDI.Text);
            reingreso.registro = DateTime.Now;

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

            Periodos.Core.Periodos p = new Periodos.Core.Periodos();
            p.idperiodo = int.Parse(cmbPeriodo.SelectedValue.ToString());
            int diasPago = 0;
            try { cnx.Open(); diasPago = (int)pdh.DiasDePago(p); cnx.Close(); }
            catch { MessageBox.Show("Error: Al obtener los dias de pago.", "Error"); }

            DateTime dt = dtpFechaReingreso.Value.Date;
            DateTime periodoInicio, periodoFin;
            int diasProporcionales = 0;
            if (diasPago == 7)
            {
                while (dt.DayOfWeek != DayOfWeek.Monday) dt = dt.AddDays(-1);
                periodoInicio = dt;
                periodoFin = dt.AddDays(6);
                diasProporcionales = (int)(periodoFin.Date - dtpFechaReingreso.Value.Date).TotalDays + 1;
            }
            else
            {
                if (dt.Day <= 15)
                {
                    periodoInicio = new DateTime(dt.Year, dt.Month, 1);
                    periodoFin = new DateTime(dt.Year, dt.Month, 15);
                    diasProporcionales = (int)(periodoFin.Date - dtpFechaReingreso.Value.Date).TotalDays + 1;
                }
                else
                {
                    int diasMes = DateTime.DaysInMonth(dt.Year, dt.Month);
                    int diasNoLaborados = 0;
                    periodoInicio = new DateTime(dt.Year, dt.Month, 16);
                    periodoFin = new DateTime(dt.Year, dt.Month, DateTime.DaysInMonth(dt.Year, dt.Month));
                    diasNoLaborados = (int)(dtpFechaReingreso.Value.Date - periodoInicio).TotalDays;
                    switch (diasMes)
                    {
                        case 28:
                            diasProporcionales = 15 - diasNoLaborados;
                            break;
                        case 29:
                            diasProporcionales = 15 - diasNoLaborados;
                            break;
                        case 30:
                            diasProporcionales = (diasMes - 15) - diasNoLaborados;
                            break;
                        case 31:
                            diasProporcionales = (diasMes - 16) - diasNoLaborados;
                            break;
                    }
                }
            }

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

            List<CalculoNomina.Core.tmpPagoNomina> lstFechas = new List<CalculoNomina.Core.tmpPagoNomina>();
            bool verificaFechas = false;

            try
            {
                cnx.Open();
                lstFechas = nh.obtenerUltimaNominaTrabajador(GLOBALES.IDEMPRESA, GLOBALES.NORMAL, diasPago, _idempleado);
                cnx.Close();
            }
            catch (Exception)
            {
                MessageBox.Show("Error: Al obtener la fecha de la ultima nómina calculada", "Error");
            }

            if (lstFechas.Count != 0)
            {
                if (dtpFechaReingreso.Value.Date <= lstFechas[0].fechainicio.Date || dtpFechaReingreso.Value.Date <= lstFechas[0].fechafin.Date)
                    verificaFechas = false;
                else
                    verificaFechas = true;
                if (!verificaFechas)
                {
                    MessageBox.Show("La fecha de ingreso es invalida. Fecha menor al ultimo periodo calculado, verifique.", "Error");
                    return;
                }
            }

            try {
                cnx.Open();
                empleadoh.reingreso(empleado);
                empleadoh.bajaEmpleado(ee);

                rp = (string)eh.obtenerRegistroPatronal(empresa);

                reingreso.registropatronal = rp;
                reingreso.nss = lstEmpleado[0].nss + lstEmpleado[0].digitoverificador;
                reingreso.diasproporcionales = diasProporcionales;
                reingreso.periodoinicio = periodoInicio;
                reingreso.periodofin = periodoFin;

                rh.insertaReingreso(reingreso);
                hh.insertarHistorial(historia);

                cnx.Close();
                MessageBox.Show("Empleado reingresado con éxito.", "Información");

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

            int existeInfonavit = 0;
            try
            {
                cnx.Open();
                existeInfonavit = (int)ih.existeInfonavit(_idempleado);
                cnx.Close();
            }
            catch (Exception)
            {
                MessageBox.Show("Error: Al obtener la existencia del Infonavit.\r\n AVISO: INGRESAR O MODIFICAR MANUALMENTE EL CREDITO DE INFONAVIT", "Error");
                cnx.Dispose();
            }

            List<Infonavit.Core.Infonavit> lstInfonavit = new List<Infonavit.Core.Infonavit>();
            if (existeInfonavit != 0)
            {
                try
                {
                    cnx.Open();
                    lstInfonavit = ih.obtenerInfonavitTrabajador(_idempleado);
                    cnx.Close();
                }
                catch (Exception)
                {
                    MessageBox.Show("Error: Al obtener la información de infonavit.\r\n AVISO: INGRESAR O MODIFICAR MANUALMENTE EL CREDITO DE INFONAVIT", "Error");
                    cnx.Dispose();
                }

                try
                {
                    cnx.Open();
                    ih.actualizaEstatusInfonavit(lstInfonavit[0].idinfonavit, _idempleado);
                    cnx.Close();
                    MessageBox.Show("Trabajador cuenta con Infonavit. Crédito: " + lstInfonavit[0].credito, "Información");
                }
                catch (Exception)
                {
                    MessageBox.Show("Error: Al obtener al activar el crédito de infonavit.\r\n AVISO: INGRESAR O MODIFICAR MANUALMENTE EL CREDITO DE INFONAVIT", "Error");
                    cnx.Dispose();
                }
            }

            this.Dispose();
        }
 private void calculoNoPeriodo()
 {
     cnx = new SqlConnection(cdn);
     cmd = new SqlCommand();
     cmd.Connection = cnx;
     nh = new CalculoNomina.Core.NominaHelper();
     nh.Command = cmd;
     int noPeriodo = 0;
     try
     {
         if (_tipoNomina == GLOBALES.NORMAL )
         {
             cnx.Open();
             noPeriodo = int.Parse(nh.obtenerNoPeriodo(_periodo, periodoInicio).ToString());
             nh.actualizarNoPeriodo(GLOBALES.IDEMPRESA, periodoInicio.Date, periodoFin.Date, noPeriodo);
             cnx.Close();
         }
         else if (_tipoNomina == GLOBALES.EXTRAORDINARIO_NORMAL)
         {
             cnx.Open();
             noPeriodo = (int)(nh.obtenerNoPeriodoExtraordinario(GLOBALES.IDEMPRESA, _tipoNomina));
             noPeriodo = noPeriodo + 1;
             nh.actualizarNoPeriodo(GLOBALES.IDEMPRESA, periodoInicio.Date, periodoFin.Date, noPeriodo);
             cnx.Close();
         }
     }
     catch (Exception)
     {
         MessageBox.Show("Error: Al actualizar el No. de Periodo", "Error");
         cnx.Dispose();
         return;
     }
 }