public bool anularDB(ro_SancionesPorMarcaciones_Info info)
        {
            try
            {
                ro_SancionesPorMarcaciones_x_novedad_Data odata_novedad_x_sanciones = new ro_SancionesPorMarcaciones_x_novedad_Data();
                var lista_novedades_a_eliminar = odata_novedad_x_sanciones.get_list(info.IdEmpresa, info.IdAjuste).ToList();


                using (Entities_rrhh Context = new Entities_rrhh())
                {
                    #region anulando cabecera
                    ro_SancionesPorMarcaciones entity = Context.ro_SancionesPorMarcaciones.Where(v => v.IdEmpresa == info.IdEmpresa && v.IdAjuste == info.IdAjuste).FirstOrDefault();
                    if (entity == null)
                    {
                        return(false);
                    }
                    entity.IdUsuarioUltAnu = info.IdUsuarioUltAnu;
                    entity.Fecha_UltAnu    = DateTime.Now;
                    #endregion



                    #region anulando novedades

                    foreach (var item in lista_novedades_a_eliminar)
                    {
                        var info_novedad = Context.ro_empleado_Novedad.Where(q => q.IdEmpresa == item.IdEmpresa && q.IdNovedad == item.IdNovedad && q.IdEmpleado == item.IdEmpleado).FirstOrDefault();
                        if (info_novedad != null)
                        {
                            info_novedad.IdUsuarioUltAnu = info.IdUsuarioUltAnu;
                            info.Fecha_UltAnu            = DateTime.Now;
                            info_novedad.Estado          = "I";
                            Context.SaveChanges();
                        }
                    }

                    #endregion
                    Context.SaveChanges();
                }

                return(true);
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        public bool modificarDB(ro_SancionesPorMarcaciones_Info info)
        {
            try
            {
                ro_SancionesPorMarcaciones_x_novedad_Data odata_novedad_x_sanciones = new ro_SancionesPorMarcaciones_x_novedad_Data();
                ro_empleado_novedad_Data odata_novedad = new ro_empleado_novedad_Data();
                var lista_novedades_a_eliminar         = odata_novedad_x_sanciones.get_list(info.IdEmpresa, info.IdAjuste).ToList();


                using (Entities_rrhh Context = new Entities_rrhh())
                {
                    #region modificando cabecera
                    ro_SancionesPorMarcaciones entity = Context.ro_SancionesPorMarcaciones.Where(v => v.IdEmpresa == info.IdEmpresa && v.IdAjuste == info.IdAjuste).FirstOrDefault();
                    if (entity == null)
                    {
                        return(false);
                    }
                    entity.FechaInicio     = info.FechaInicio;
                    entity.FechaFin        = info.FechaFin;
                    entity.Observacion     = info.Observacion;
                    entity.FechaNovedades  = info.FechaNovedades;
                    entity.IdUsuarioUltMod = info.IdUsuarioUltMod;
                    entity.Fecha_UltMod    = DateTime.Now;
                    #endregion


                    #region eliminado detalle
                    #region eliminando novedad por sancion
                    var ro_sanciones_det = Context.ro_SancionesPorMarcaciones_det.Where(v => v.IdEmpresa == info.IdEmpresa && v.IdAjuste == info.IdAjuste);
                    Context.ro_SancionesPorMarcaciones_det.RemoveRange(ro_sanciones_det);

                    #endregion
                    #endregion
                    #region eliminando novedad por sancion
                    var ro_novedad_x_sanciones = Context.ro_SancionesPorMarcaciones_x_novedad.Where(v => v.IdEmpresa == info.IdEmpresa && v.IdAjuste == info.IdAjuste);
                    Context.ro_SancionesPorMarcaciones_x_novedad.RemoveRange(ro_novedad_x_sanciones);

                    #endregion


                    #region eliminado_novedades

                    foreach (var item in lista_novedades_a_eliminar)
                    {
                        var info_novedad_det = Context.ro_empleado_novedad_det.Where(q => q.IdEmpresa == item.IdEmpresa && q.IdNovedad == item.IdNovedad).FirstOrDefault();
                        Context.ro_empleado_novedad_det.Remove(info_novedad_det);

                        var info_novedad = Context.ro_empleado_Novedad.Where(q => q.IdEmpresa == item.IdEmpresa && q.IdNovedad == item.IdNovedad && q.IdEmpleado == item.IdEmpleado).FirstOrDefault();
                        Context.ro_empleado_Novedad.Remove(info_novedad);
                    }
                    #endregion

                    #region grabando novedades

                    decimal IdNovedad = odata_novedad.get_id(info.IdEmpresa);
                    int     secuancia = 1;

                    foreach (var item in info.detalle)
                    {
                        ro_SancionesPorMarcaciones_det entity_det = new ro_SancionesPorMarcaciones_det
                        {
                            IdEmpresa     = info.IdEmpresa,
                            IdSucursal    = item.IdSucursal,
                            IdAjuste      = info.IdAjuste,
                            IdCalendario  = item.IdCalendario,
                            IdEmpleado    = item.IdEmpleado,
                            EsHoraIngreso = item.HoraIni,
                            HoraIngreso   = item.time_entrada1,
                            EsHoraSalida  = item.HoraFin,
                            HoraSalio     = item.time_salida1,
                            Minutos       = item.Minutos,
                            FechaRegistro = item.es_fechaRegistro,
                            Secuencia     = secuancia
                        };
                        Context.ro_SancionesPorMarcaciones_det.Add(entity_det);
                        secuancia++;
                    }

                    // agrupnado para obter valor para novedad
                    secuancia = 1;
                    var lista_novedades = (from q in info.detalle
                                           group q by new
                    {
                        q.IdEmpresa,
                        q.IdSucursal,
                        q.IdEmpleado,
                        q.Minutos,
                        q.Sueldo
                    } into Grupo
                                           select new ro_SancionesPorMarcaciones_x_novedad_Info
                    {
                        IdEmpresa = Grupo.Key.IdEmpresa,
                        IdSucursal = Grupo.Key.IdSucursal,
                        IdEmpleado = Grupo.Key.IdEmpleado,
                        Valor = Grupo.Sum(s => s.Minutos),
                        Sueldo = Grupo.Key.Sueldo
                    }).ToList();
                    // grabando novedades
                    foreach (var item in lista_novedades)
                    {
                        ro_empleado_Novedad novedad = new ro_empleado_Novedad
                        {
                            IdEmpresa          = info.IdEmpresa,
                            IdSucursal         = item.IdSucursal,
                            IdNovedad          = IdNovedad,
                            IdEmpleado         = item.IdEmpleado,
                            IdNomina_Tipo      = info.IdNomina_Tipo,
                            IdNomina_TipoLiqui = info.IdNomina_TipoLiqui,
                            Observacion        = "Novedad generada por proceso del sistema fecha descuento " + info.FechaNovedades.ToString().Substring(0, 10),
                            Fecha         = info.FechaNovedades,
                            Estado        = "A",
                            Fecha_Transac = DateTime.Now,
                            IdUsuario     = info.IdUsuario
                        };
                        Context.ro_empleado_Novedad.Add(novedad);

                        ro_empleado_novedad_det novedad_det = new ro_empleado_novedad_det
                        {
                            IdEmpresa   = info.IdEmpresa,
                            IdNovedad   = IdNovedad,
                            IdRubro     = "200",
                            Valor       = item.Valor * (((Convert.ToDouble(item.Sueldo)) / 240) / 60),
                            FechaPago   = info.FechaNovedades,
                            EstadoCobro = "PEN",
                            Observacion = "Novedad generda por proceso del sistema",
                            Secuencia   = 1,
                        };
                        novedad_det.Valor = Math.Round(novedad_det.Valor, 2);
                        Context.ro_empleado_novedad_det.Add(novedad_det);

                        ro_SancionesPorMarcaciones_x_novedad novedad_x_sanc = new ro_SancionesPorMarcaciones_x_novedad
                        {
                            IdEmpresa          = info.IdEmpresa,
                            IdAjuste           = info.IdAjuste,
                            Secuencia          = secuancia,
                            IdNovedad          = novedad.IdNovedad,
                            IdEmpresa_nov      = info.IdEmpresa,
                            IdEmpleado         = item.IdEmpleado,
                            IdNomina_Tipo      = info.IdNomina_Tipo,
                            IdNomina_TipoLiqui = info.IdNomina_TipoLiqui
                        };
                        Context.ro_SancionesPorMarcaciones_x_novedad.Add(novedad_x_sanc);
                        IdNovedad++;
                        secuancia++;
                    }


                    #endregion

                    Context.SaveChanges();
                }

                return(true);
            }
            catch (Exception ex)
            {
                throw;
            }
        }