private void dgConceptos_MouseDoubleClick(object sender, MouseButtonEventArgs e) { if (dgConceptos.SelectedItem != null) { Concepto c = (Concepto)dgConceptos.SelectedItem; txtIdConcepto.Text = c.Id_Concepto.ToString(); txtDescripcion.Text = c.Descripcion; txtTipo.Text = c.Tipo; } }
private void btnModificar_Click(object sender, RoutedEventArgs e) { if (dgConceptos.SelectedItem != null) { Concepto c = (Concepto)dgConceptos.SelectedItem; string desc = txtDescripcion.Text; string tipo = txtTipo.Text; if (desc != null || tipo != null) { if (desc.Length <= 100) { if ((tipo.Length == 1 && tipo == "+") || (tipo.Length == 1 && tipo == "-")) { c.Descripcion = desc; c.Tipo = tipo; datos.Entry(c).State = System.Data.Entity.EntityState.Modified; datos.SaveChanges(); MessageBox.Show("Se ha modificado un registro exitosamente!"); CargarDatos(); LimpiarCampos(); txtDescripcion.Focus(); } else { MessageBox.Show("En el campo 'Tipo' debe cargarse el caracter '+' o '-'"); txtTipo.Focus(); } } else { MessageBox.Show("El campo descripcion no puede exceder los 100 caracteres"); txtDescripcion.Focus(); } } else { MessageBox.Show("Hay campos vacios"); } } else { MessageBox.Show("Debe seleccionar un concepto"); } }
private void DgEmpleados_MouseDoubleClick(object sender, MouseButtonEventArgs e) { try { if (dgLiquidaciones.SelectedItem != null) { Empleado empSelected = (Empleado)dgEmpleados.SelectedItem; Liquidacion_Mensual lmSelected = (Liquidacion_Mensual)dgLiquidaciones.SelectedItem; var detallePorEmpleado = (from d in datos.Liquidacion_Mensual_Detalle where d.Liquidacion_Id == lmSelected.Id_Liquidacion && d.Empleado_Id == empSelected.Id_Empleado select d).ToList(); DataTable dt = new DataTable("Detalles_Liquidacion"); dt.Columns.Add("Anho"); dt.Columns.Add("Mes"); dt.Columns.Add("Empleado"); dt.Columns.Add("NroDocumento"); dt.Columns.Add("Concepto"); dt.Columns.Add("Monto"); foreach (Liquidacion_Mensual_Detalle lmd in detallePorEmpleado) { Empleado emp = datos.Empleado.Find(lmd.Empleado_Id); Concepto c = datos.Concepto.Find(lmd.Concepto_Id); string nombreCompleto = emp.Nombres + " " + emp.Apellidos; string doc = emp.Nro_Documento; dt.Rows.Add(lmSelected.Anho, lmSelected.Mes, nombreCompleto, doc, c.Descripcion, lmd.Monto); } dgDetalle_Liquidacion.ItemsSource = dt.DefaultView; grbDetalles.Header = "Detalles por empleado y liquidacion"; } else { MessageBox.Show("Debe seleccionar un registro de la grilla de liquidaciones para filtrar"); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void btnGuardar_Click(object sender, RoutedEventArgs e) { try { string desc = txtDescripcion.Text; string tipo = txtTipo.Text; if (desc != null || tipo != null) { if (desc.Length <= 100) { if ((tipo.Length == 1 && tipo == "+") || (tipo.Length == 1 && tipo == "-")) { Concepto c = new Concepto(); c.Descripcion = desc; c.Tipo = tipo; datos.Concepto.Add(c); datos.SaveChanges(); MessageBox.Show("Se ha agregado un registro exitosamente!"); CargarDatos(); LimpiarCampos(); txtDescripcion.Focus(); } else { MessageBox.Show("En este campo debe cargarse el caracter '+' o '-'"); } } else { MessageBox.Show("El campo descripcion no puede exceder los 100 caracteres"); } } else { MessageBox.Show("Hay campos vacios"); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void DgLiquidaciones_MouseDoubleClick(object sender, MouseButtonEventArgs e) { try { grbDetalles.Header = "Detalles de la liquidacion seleccionada"; Liquidacion_Mensual lm = (Liquidacion_Mensual)dgLiquidaciones.SelectedItem; DataTable dt = new DataTable("Detalles_Liquidacion"); dt.Columns.Add("Anho"); dt.Columns.Add("Mes"); dt.Columns.Add("Empleado"); dt.Columns.Add("NroDocumento"); dt.Columns.Add("Concepto"); dt.Columns.Add("Monto"); var detallesLiquidacion = (from d in datos.Liquidacion_Mensual_Detalle where d.Liquidacion_Id == lm.Id_Liquidacion select d).ToList(); foreach (Liquidacion_Mensual_Detalle lmd in detallesLiquidacion) { Empleado emp = datos.Empleado.Find(lmd.Empleado_Id); Concepto c = datos.Concepto.Find(lmd.Concepto_Id); string nombreCompleto = emp.Nombres + " " + emp.Apellidos; string doc = emp.Nro_Documento; dt.Rows.Add(lm.Anho, lm.Mes, nombreCompleto, doc, c.Descripcion, lmd.Monto); } dgDetalle_Liquidacion.ItemsSource = dt.DefaultView; //dgDetalle_Liquidacion.Columns[5].Visibility = Visibility.Hidden; //dgDetalle_Liquidacion.Columns[6].Visibility = Visibility.Hidden; //dgDetalle_Liquidacion.Columns[7].Visibility = Visibility.Hidden; } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void Window_Loaded(object sender, RoutedEventArgs e) { try { lblMes.Content = lmSelected.Mes; lblAnho.Content = lmSelected.Anho; lblEmpleado.Content = empSelected.Nombres + " " + empSelected.Apellidos; var ingresos = (from d in datos.Liquidacion_Mensual_Detalle where d.Liquidacion_Id == lmSelected.Id_Liquidacion && d.Empleado_Id == empSelected.Id_Empleado && d.Monto >= 0 select d).ToList(); var egresos = (from d in datos.Liquidacion_Mensual_Detalle where d.Liquidacion_Id == lmSelected.Id_Liquidacion && d.Empleado_Id == empSelected.Id_Empleado && d.Monto < 0 select d).ToList(); int totalIngresos = 0; int totalEgresos = 0; double margen = 213; //double margenEgresos = 245; foreach (Liquidacion_Mensual_Detalle lmd in ingresos) { Concepto c = datos.Concepto.Find(lmd.Concepto_Id); var bc = new BrushConverter(); Label lblConceptoIng = new Label(); lblConceptoIng.Foreground = (Brush)bc.ConvertFrom("#FFEAE6E6"); lblConceptoIng.FontSize = 14; cvsResumen.Children.Add(lblConceptoIng); Canvas.SetLeft(lblConceptoIng, 28); Canvas.SetTop(lblConceptoIng, margen); lblConceptoIng.Content = c.Descripcion; Label lblMontoIng = new Label(); lblMontoIng.Foreground = (Brush)bc.ConvertFrom("#FF047004"); lblMontoIng.FontSize = 14; cvsResumen.Children.Add(lblMontoIng); Canvas.SetLeft(lblMontoIng, 343); Canvas.SetTop(lblMontoIng, margen); lblMontoIng.Content = lmd.Monto; margen += 20; totalIngresos += lmd.Monto; } foreach (Liquidacion_Mensual_Detalle lmd in egresos) { Concepto c = datos.Concepto.Find(lmd.Concepto_Id); var bc = new BrushConverter(); Label lblConceptoEg = new Label(); lblConceptoEg.Foreground = (Brush)bc.ConvertFrom("#FFEAE6E6"); lblConceptoEg.FontSize = 14; cvsResumen.Children.Add(lblConceptoEg); Canvas.SetLeft(lblConceptoEg, 28); Canvas.SetTop(lblConceptoEg, margen); lblConceptoEg.Content = c.Descripcion; Label lblMontoEg = new Label(); lblMontoEg.Foreground = Brushes.Red; lblMontoEg.FontSize = 14; cvsResumen.Children.Add(lblMontoEg); Canvas.SetLeft(lblMontoEg, 503); Canvas.SetTop(lblMontoEg, margen); lblMontoEg.Content = lmd.Monto; margen += 20; totalEgresos += lmd.Monto; } totalIngresos += empSelected.Salario_Basico; lblTotalIngresos.Content = totalIngresos; lblTotalEgresos.Content = totalEgresos; Liquidacion_Empleados_Salarios_Totales salTotal = datos.Liquidacion_Empleados_Salarios_Totales.Find(lmSelected.Id_Liquidacion, empSelected.Id_Empleado); lblSalarioBasico.Content = empSelected.Salario_Basico; lblSalarioTotal.Content = salTotal.SalarioTotal; } catch (Exception ex) { MessageBox.Show(ex.Message); } }
DataTable MakeDataTable() { DataTable friend = new DataTable(); friend.Columns.Add("Concepto"); friend.Columns.Add("Ingresos"); friend.Columns.Add("Egresos"); var ingresos = (from d in datos.Liquidacion_Mensual_Detalle where d.Liquidacion_Id == lmSelected.Id_Liquidacion && d.Empleado_Id == empSelected.Id_Empleado && d.Monto >= 0 select d).ToList(); var egresos = (from d in datos.Liquidacion_Mensual_Detalle where d.Liquidacion_Id == lmSelected.Id_Liquidacion && d.Empleado_Id == empSelected.Id_Empleado && d.Monto < 0 select d).ToList(); int totalIngresos = 0; int totalEgresos = 0; foreach (Liquidacion_Mensual_Detalle lmd1 in ingresos) { DataRow row = friend.NewRow(); Concepto c = datos.Concepto.Find(lmd1.Concepto_Id); row["Concepto"] = c.Descripcion; row["Ingresos"] = lmd1.Monto; totalIngresos += lmd1.Monto; friend.Rows.Add(row); } foreach (Liquidacion_Mensual_Detalle lmd1 in egresos) { DataRow row = friend.NewRow(); Concepto c = datos.Concepto.Find(lmd1.Concepto_Id); row["Concepto"] = c.Descripcion; row["Egresos"] = lmd1.Monto; totalEgresos += lmd1.Monto; friend.Rows.Add(row); } totalIngresos += empSelected.Salario_Basico; Liquidacion_Empleados_Salarios_Totales salTotal = datos.Liquidacion_Empleados_Salarios_Totales.Find(lmSelected.Id_Liquidacion, empSelected.Id_Empleado); try { DataRow row = friend.NewRow(); row["Concepto"] = "Salario Basico"; row["Ingresos"] = empSelected.Salario_Basico; friend.Rows.Add(row); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error Message"); } try { DataRow row = friend.NewRow(); row["Concepto"] = " "; friend.Rows.Add(row); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error Message"); } try { DataRow row = friend.NewRow(); row["Concepto"] = "Totales"; row["Ingresos"] = totalIngresos; row["Egresos"] = totalEgresos; friend.Rows.Add(row); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error Message"); } try { DataRow row = friend.NewRow(); row["Concepto"] = "Salario total a Cobrar"; row["Ingresos"] = salTotal.SalarioTotal; friend.Rows.Add(row); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error Message"); } return(friend); }
private void BtnGenerarSalarios_Click(object sender, RoutedEventArgs e) { try { if (dgLiquidaciones.SelectedItem != null) { Liquidacion_Mensual lm = (Liquidacion_Mensual)dgLiquidaciones.SelectedItem; var existe = (from s in datos.Liquidacion_Empleados_Salarios_Totales where s.Liquidacion_Id == lm.Id_Liquidacion select s).ToList(); if (existe.Count > 0) { MessageBox.Show("Las liquidaciones de los empleados para la planilla de liquidacion seleccionada ya han sido creadas"); return; } Concepto c = new Concepto(); Empleado emp = new Empleado(); Anticipo a = new Anticipo(); var detalleLiquidacion = (from d in datos.Liquidacion_Mensual_Detalle where d.Liquidacion_Id == lm.Id_Liquidacion select d).ToList(); List <Liquidacion_Mensual_Detalle> detAux1 = new List <Liquidacion_Mensual_Detalle>(); //Copia del original List <Liquidacion_Mensual_Detalle> detAux2 = new List <Liquidacion_Mensual_Detalle>(); //Lista vacia detAux1.AddRange(detalleLiquidacion); //detAux2.AddRange(detalleLiquidacion); var anticipos = (from ant in datos.Anticipo select ant).ToList(); foreach (Liquidacion_Mensual_Detalle lmd1 in detalleLiquidacion) { // buscamos el empleado actual y la liquidacion actual en la tabla de salarios totales Liquidacion_Empleados_Salarios_Totales detalleAux = datos.Liquidacion_Empleados_Salarios_Totales.Find(lmd1.Liquidacion_Id, lmd1.Empleado_Id); var salariosTotales = datos.Liquidacion_Empleados_Salarios_Totales.ToList(); // Si ya existe un registro de salariototal para el empleadoId entonces simplemente iterar // al siguiente objeto detalle hasta que sea un empleadoId que aun no se le haya generado // el salario total a cobrar if (detalleAux != null) { continue; } // La idea es reiniciar las variables por cada empleado int ingresos = 0; int egresos = 0; double ips = 0; int anticipo = 0; int salarioBasico = 0; int salarioTotal = 0; foreach (Liquidacion_Mensual_Detalle lmd2 in detAux1) { if (lmd1.Empleado_Id == lmd2.Empleado_Id) { // Se acumula los ingresos, egresos c = datos.Concepto.Find(lmd2.Concepto_Id); if (c.Tipo == "-") { egresos += lmd2.Monto; } else { ingresos += lmd2.Monto; } detAux2.Add(lmd2); } } /* Una vez todos los montos acumulados en las respectivas variables * ya se puede borrar el registro en la lista de detalles auxiliar() * La idea es que no se vuelvan a recorrer varias veces los mismos registros cuyos * valores ya han sido usados para calcular el salariototal de un empleadoId * Ocasionando asi que se encimen los calculos acumulados */ foreach (Liquidacion_Mensual_Detalle index in detAux2) { detAux1.Remove(index); } // Se vuelve a vaciar la lista de detalles auxiliar detAux2 detAux2.Clear(); // Calculo del IPS emp = datos.Empleado.Find(lmd1.Empleado_Id); salarioBasico = emp.Salario_Basico; ips = (salarioBasico + ingresos) * 0.09; // Primero hay que buscar si existe un anticipo en el mes correspondiente a la liquidacion y empleado. // Si existe, entonces se carga el valor del campo Monto_Aprobado a la variable anticipo. // En caso contrario, la variable anticipo permanece en cero como se definio al principio. foreach (Anticipo ant in anticipos) { if (ant.Empleado_Id == lmd1.Empleado_Id) { if (ant.Fecha_Solicitud.Month == lm.Mes && ant.Estado == "Aprobado") { anticipo += ant.Monto_Aprobado; // anticipo total por empleado } } } // Ahora que se tiene todas las variables cargadas se puede proceder al calculo del salario total // Los egresos siempre seran valores negativos. Por eso suma en lugar de restar salarioTotal = (int)((salarioBasico + ingresos + egresos) - ips - anticipo); Liquidacion_Empleados_Salarios_Totales lest = new Liquidacion_Empleados_Salarios_Totales(); lest.Liquidacion_Id = lmd1.Liquidacion_Id; lest.Empleado_Id = lmd1.Empleado_Id; lest.SalarioTotal = salarioTotal; datos.Liquidacion_Empleados_Salarios_Totales.Add(lest); // Ademas hay que crear dos registros de detalle_liquidacion mas para almacenar el monto de IPS y anticipo Liquidacion_Mensual_Detalle detIps = new Liquidacion_Mensual_Detalle(); var idIps = (from con in datos.Concepto where con.Descripcion == "IPS" select con.Id_Concepto).FirstOrDefault(); detIps.Liquidacion_Id = lm.Id_Liquidacion; detIps.Empleado_Id = lmd1.Empleado_Id; detIps.Concepto_Id = idIps; detIps.Monto = (int)ips * (-1); datos.Liquidacion_Mensual_Detalle.Add(detIps); Liquidacion_Mensual_Detalle detAnticipo = new Liquidacion_Mensual_Detalle(); var idAnticipo = (from con in datos.Concepto where con.Descripcion == "Anticipo" select con.Id_Concepto).FirstOrDefault(); detAnticipo.Liquidacion_Id = lm.Id_Liquidacion; detAnticipo.Empleado_Id = lmd1.Empleado_Id; detAnticipo.Concepto_Id = idAnticipo; detAnticipo.Monto = anticipo * (-1); datos.Liquidacion_Mensual_Detalle.Add(detAnticipo); } datos.SaveChanges(); MessageBox.Show("Se han generado correctamente las liquidaciones mensuales para cada empleado!"); } else { MessageBox.Show("Debe seleccionar algun registro de la grilla"); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }