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"); } }