예제 #1
0
        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;
            }
        }
예제 #2
0
        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");
            }
        }
예제 #3
0
        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);
            }
        }
예제 #4
0
        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);
            }
        }
예제 #5
0
        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);
            }
        }
예제 #6
0
        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);
            }
        }
예제 #7
0
        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);
            }
        }