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;
            }
        }
        public bool guardarDB(ro_SancionesPorMarcaciones_Info info)
        {
            try
            {
                ro_empleado_novedad_Data odata_novedad = new ro_empleado_novedad_Data();

                decimal IdNovedad = odata_novedad.get_id(info.IdEmpresa);

                int secuancia = 1;
                using (Entities_rrhh Context = new Entities_rrhh())
                {
                    ro_SancionesPorMarcaciones entity = new ro_SancionesPorMarcaciones
                    {
                        IdEmpresa          = info.IdEmpresa,
                        IdAjuste           = info.IdAjuste = get_id(info.IdEmpresa),
                        IdNomina_Tipo      = info.IdNomina_Tipo,
                        IdNomina_TipoLiqui = info.IdNomina_TipoLiqui,
                        FechaInicio        = info.FechaInicio, FechaFin = info.FechaFin,
                        Observacion        = info.Observacion,
                        Fecha_Transac      = DateTime.Now,
                        IdUsuario          = info.IdUsuario,
                        Estado             = true,
                        FechaNovedades     = info.FechaNovedades
                    };
                    Context.ro_SancionesPorMarcaciones.Add(entity);
                    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++;
                    }

                    Context.SaveChanges();
                }

                return(true);
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        public bool AprobarHE(ro_nomina_x_horas_extras_Info info)
        {
            try
            {
                ro_empleado_novedad_Data odata_novedad = new ro_empleado_novedad_Data();
                decimal IdNovedad = odata_novedad.get_id(info.IdEmpresa);
                ro_nomina_x_horas_extras_det_Data odata = new ro_nomina_x_horas_extras_det_Data();
                ro_periodo_Data bus_periodo             = new ro_periodo_Data();
                ro_periodo_Info info_periodo            = new ro_periodo_Info();
                info_periodo = bus_periodo.get_info(info.IdEmpresa, info.IdPeriodo);
                //var  lst_horas_extras_aprobar = odata.get_lst_horas_extras_aprobar(info.IdEmpresa, info.IdNomina_Tipo, info.IdNomina_TipoLiqui, info.IdPeriodo);
                using (Entities_rrhh content = new Entities_rrhh())
                {
                    var ro_rubro_calculados = content.ro_rubros_calculados.FirstOrDefault(s => s.IdEmpresa == info.IdEmpresa);
                    if (ro_rubro_calculados == null)
                    {
                        return(false);
                    }
                    var ro_horas_extras = content.ro_nomina_x_horas_extras.FirstOrDefault(s => s.IdEmpresa == info.IdEmpresa && s.IdHorasExtras == info.IdHorasExtras);
                    if (ro_horas_extras == null)
                    {
                        return(false);
                    }
                    ro_horas_extras.Estado = "P";

                    foreach (var item in info.lst_nomina_horas_extras)
                    {
                        if (item.Valor25 > 0)
                        {
                            IdNovedad++;
                            ro_empleado_Novedad info_novedad_25 = new ro_empleado_Novedad()
                            {
                                IdNovedad          = IdNovedad,
                                IdEmpresa          = info.IdEmpresa,
                                IdSucursal         = item.IdSucursal,
                                IdEmpleado         = item.IdEmpleado,
                                IdNomina_Tipo      = info.IdNomina_Tipo,
                                IdNomina_TipoLiqui = info.IdNomina_TipoLiqui,
                                Observacion        = "Hora extra al 25 % correspondiente al periodo " + info.IdPeriodo.ToString(),
                                Fecha_Transac      = DateTime.Now,
                                IdUsuario          = info.IdUsuario,
                                Fecha  = item.FechaRegistro.Date,
                                Estado = "A"
                            };
                            content.ro_empleado_Novedad.Add(info_novedad_25);
                            ro_empleado_novedad_det info_det_25 = new ro_empleado_novedad_det()
                            {
                                IdEmpresa   = info.IdEmpresa,
                                IdNovedad   = IdNovedad,
                                Secuencia   = 1,
                                Valor       = Math.Round(item.Valor25, 2),
                                FechaPago   = info_periodo.pe_FechaFin,
                                IdRubro     = "7",
                                Observacion = "Hora extra al 25 % correspondiente al periodo " + info.IdPeriodo.ToString(),
                                EstadoCobro = "PEN"
                            };
                            content.ro_empleado_novedad_det.Add(info_det_25);
                        }
                        ;


                        if (item.Valor50 > 0)
                        {
                            IdNovedad++;
                            ro_empleado_Novedad info_novedad_50 = new ro_empleado_Novedad()
                            {
                                IdNovedad          = IdNovedad,
                                IdSucursal         = item.IdSucursal,
                                IdEmpresa          = info.IdEmpresa,
                                IdEmpleado         = item.IdEmpleado,
                                IdNomina_Tipo      = info.IdNomina_Tipo,
                                IdNomina_TipoLiqui = info.IdNomina_TipoLiqui,
                                Observacion        = "Hora extra al 50 % correspondiente al periodo " + info.IdPeriodo.ToString(),
                                Fecha_Transac      = DateTime.Now,
                                IdUsuario          = info.IdUsuario,
                                Fecha  = item.FechaRegistro.Date,
                                Estado = "A"
                            };
                            content.ro_empleado_Novedad.Add(info_novedad_50);
                            ro_empleado_novedad_det info_det_50 = new ro_empleado_novedad_det()
                            {
                                IdEmpresa   = info.IdEmpresa,
                                IdNovedad   = IdNovedad,
                                Secuencia   = 1,
                                Valor       = Math.Round(item.Valor50, 2),
                                FechaPago   = info_periodo.pe_FechaFin,
                                IdRubro     = "8",
                                Observacion = "Hora extra al 50 % correspondiente al periodo " + info.IdPeriodo.ToString(),
                                EstadoCobro = "PEN"
                            };
                            content.ro_empleado_novedad_det.Add(info_det_50);
                        }
                        ;

                        if (item.hora_extra100 > 0)
                        {
                            IdNovedad++;
                            ro_empleado_Novedad info_novedad_100 = new ro_empleado_Novedad()
                            {
                                IdNovedad          = IdNovedad,
                                IdSucursal         = item.IdSucursal,
                                IdEmpresa          = info.IdEmpresa,
                                IdEmpleado         = item.IdEmpleado,
                                IdNomina_Tipo      = info.IdNomina_Tipo,
                                IdNomina_TipoLiqui = info.IdNomina_TipoLiqui,
                                Observacion        = "Hora extra al 50 % correspondiente al periodo " + info.IdPeriodo.ToString(),
                                Fecha_Transac      = DateTime.Now,
                                IdUsuario          = info.IdUsuario,
                                Fecha  = item.FechaRegistro.Date,
                                Estado = "A"
                            };
                            content.ro_empleado_Novedad.Add(info_novedad_100);
                            ro_empleado_novedad_det info_det_100 = new ro_empleado_novedad_det()
                            {
                                IdEmpresa   = info.IdEmpresa,
                                IdNovedad   = IdNovedad,
                                Secuencia   = 1,
                                Valor       = Math.Round(item.Valor100, 2),
                                FechaPago   = info_periodo.pe_FechaFin,
                                IdRubro     = "8",
                                Observacion = "Hora extra al 100 % correspondiente al periodo " + info.IdPeriodo.ToString(),
                                EstadoCobro = "PEN"
                            };
                            content.ro_empleado_novedad_det.Add(info_det_100);
                        }
                        ;
                    }
                    content.SaveChanges();
                    odata.Modificar_estado_aprobacion(info.IdHorasExtras, 1);
                }

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