public static bool ActualizarEmpleado(Tbempleados Emp) { bool Result = false; using (remuneracionesContext db = new remuneracionesContext()) { db.Tbempleados.Update(Emp); db.SaveChanges(); Result = true; } return(Result); }
public static bool DarDeBajaempleado(Tbempleados Emp) { bool Result = false; using (remuneracionesContext db = new remuneracionesContext()) { Emp.EstaDisponible = false; db.Tbempleados.Update(Emp); db.SaveChanges(); Result = true; } return(Result); }
public static int AgregarEmpDesdeExcel(List <List <string> > ExcelEmp, remuneracionesContext db) { int Result = 0; ExcelEmp.RemoveAt(0); List <Tbempleados> EmpleadoToEmpresa = new List <Tbempleados>(); FichaEmpresa ObjEmpresa = new FichaEmpresa(); ObjEmpresa.RazonSocial = "TestEmpresa"; ObjEmpresa.lstEmpleados = EmpleadoToEmpresa; ObjEmpresa.Comuna = 1; ObjEmpresa.Direccion = "Barca 2560"; ObjEmpresa.Principal = true; ObjEmpresa.Rut = "13519830-7"; ObjEmpresa.TipoEmpresa = 1; ObjEmpresa.Giro = "Venta de weas"; ObjEmpresa.RepresentanteLegal = "PedritoVega"; ObjEmpresa.RutRepresentanteLegal = "19507432-1"; ObjEmpresa.Vigente = true; ObjEmpresa.FormaPagoGratif = 1; ObjEmpresa.FormPagoMoviColacion = 1; foreach (List <string> Columna in ExcelEmp) { string AFPExcel = Columna[23]; var AFPempleado = db.AfpModel.SingleOrDefault(AFP => AFP.NombreAfp == AFPExcel); string Rut = Columna[0]; string Nombre = Columna[1]; string Apellido = Columna[2]; string Nacionalidad = Columna[7]; int Telefono = Convert.ToInt32(Columna[9]); string Cargo = Columna[17]; //La idea es que Cargo sea un int decimal SueldoBase = Convert.ToDecimal(Columna[30]); decimal Movilizacion = Convert.ToDecimal(Columna[31]); decimal Colacion = Convert.ToDecimal(Columna[32]); CargosModel CargoACrear = new CargosModel() { Nombre = Cargo, Detalle = "Sin Detalle" }; db.CargosModel.Add(CargoACrear); db.SaveChanges(); DateTime FechaNacimiento = Utiles.ToDD_MM_AAAA_Multi(Columna[3]); SueldoEmpleado ObjSueldo = new SueldoEmpleado { SueldoBase = SueldoBase, AsignMovilizacion = Movilizacion, AsignColacion = Colacion }; ContratoEmpleado ObjContrato = new ContratoEmpleado { Cargo = CargoACrear }; PrevisionEmpleado ObjPrevision = new PrevisionEmpleado(); if (AFPempleado != null) { ObjPrevision.AFP = AFPempleado; } Tbempleados EmpleadoAInsertar = new Tbempleados { Rut = Rut, Nombre = Nombre, Apellido = Apellido, FechaNacimiento = FechaNacimiento, Nacionalidad = Nacionalidad, Telefono = Telefono, SueldoEmp = ObjSueldo, ContratoEmp = ObjContrato, PrevisionEmp = ObjPrevision, EmpresaEmpleado = ObjEmpresa }; EmpleadoToEmpresa.Add(EmpleadoAInsertar); } db.FichaEmpresa.Add(ObjEmpresa); db.Tbempleados.AddRange(EmpleadoToEmpresa); Result = db.SaveChanges(); return(Result); }
public static LiquidacionEmpleado ObtenerLiquidacionEmpleado(int IdEmp, remuneracionesContext db) { if (IdEmp <= 0) { return(null); } var Liquidacion = new LiquidacionEmpleado(); try { //Falta listar los topes y tramos. //Tope Gratificacion //Tope Seguro de cesantia //Tope Imposiciones -> al parecer tiene que ver con las afp o con todos los descuentos //Tope Salud //Si es fonasa calcular por el 7% //calcular monto AFP //Seguro de Cesantia //----- GRATIFICACION ----- //Existen calculos de gratificaciones del articulo 50 y el articulo 47 //----- CONTRATOS -------- //----- LOS PLAZOS DE TODOS LOS CONTRATOS VAN EN LA CLAUSULA NOVENA DE LOS ARTICULOS ------------------ //contrato individual y contrato colectivo Articulo 6 indiviual -> empleador a trabajador //Colectivo de uno o más empleadores con una o más organizaciones sindicales //Contrato por plazo: Plazo fijo, indefinido //Contrato por obra o faena Articulo 10 bis //Contrato por jornada parcial Articulo 40 bis //Contratos Especiales Articulos 77 al 152 //------SALUD------- //Cuando calculamos salud aveces hay montos adicionales por reglas que desconozco //Es Isapre -> (Pueden ser muchas) o Fonasa que está aislado y con sus reglas //Isapre tiene más beneficios pero es más costoso y cada isapre tiene sus montos y reglas además de reglas estantard para cada una //Fonasa es más economico y más barato pero con más problemas de atención y menos beneficios. //Se puede definir como Fonasa para el sector(publico) y Isapre (Privado) //Si estás en fonasa te asignan un tramo el que indicara tu nivel de cobertura dependiendo del sueldo tendrás más cobertura o no siempre será el 7% de tu sueldo //En Isapre si puedes elegir //Fonasa en fijo Isapre es dinamico //IMPORTANTE Si tienes y Isapre y el 7% de tu sueldo llega a un monto que cubre tu plan de isapre solo se descuenta ese 7% en caso //Que el 7% de tu sueldo no cubra el plan de la isapre a la que perteneces entonces se cobrará adicional //Considerar Seguro de vida... //DESCUENTOS //Además de la AFP hay que considerar cosas como el S.I.S = Seguro de invalidez y sobrevivencia. //Considerar Aguinaldo //Considerar anticipo //Considerar APV //Cuota sindical //Impuesto Unico //CALCULO IMPUESTO UNICO // Any IPU = "Impuesto Unico" //1.- Revisar la tabla proveida por el SII //2.- Revisar el tramo en el que está el trabajador //3.- Calcular antes el imponible tributable F(Total Imponible - Descuentos) //------ VARIABLES CALCULO IMPUESTO UNICO -------- //1.- F((Imponible tributable * Factor(Es el exento de la tabla IPU)) - Monto Rebaja) // simplificado ((ImponibleT * Exento) - MontoRebaja) List <RentasTopasImpModel> TopesRentasImponibles = db.RentasTopasImpModel.ToList(); decimal AFPTope = TopesRentasImponibles.SingleOrDefault(x => x.Tope_id == TipoTope.AFP && x.EstaActiva == true).UFCLP; decimal IPSTope = TopesRentasImponibles.SingleOrDefault(x => x.Tope_id == TipoTope.IPS && x.EstaActiva == true).UFCLP; decimal SCesantiaTope = TopesRentasImponibles.SingleOrDefault(x => x.Tope_id == TipoTope.SEGURO_CESANTIA && x.EstaActiva == true).UFCLP; List <RentasMinImponibles> rentasMinImponibles = db.RentasMinImponibles.ToList(); List <AFCModel> AFCRules = db.AFCModel.Where(x => x.EstaActivo == true).ToList(); UTMModel UTM = db.UTMModel.SingleOrDefault(x => x.EstaActiva == true); IMMModel SueldoMinimo = db.IMMModel.SingleOrDefault(x => x.EstaActiva == true); UFModel UF = db.UFModel.SingleOrDefault(x => x.EstaActiva == true); IndicadoresEconomicos Indicadores = new IndicadoresEconomicos() { UF = UF, UTM = UTM, SueldoMinimo = SueldoMinimo }; int CantidadHorasTrabajadas = 0; Liquidacion.indicadoresEco = Indicadores; var LstHaberImponible = new List <HaberImponible>(); var LstHaberNoImponible = new List <HaberNoImponible>(); var LstDescuentos = new List <DescuentosLiquidacion>(); Tbempleados ObjEmpleado = db.Tbempleados.Include(e => e.EmpresaEmpleado) .Include(s => s.SueldoEmp) .Include(c => c.ContratoEmp) .ThenInclude(cargo => cargo.Cargo) .Include(p => p.PrevisionEmp) .ThenInclude(a => a.AFP) .SingleOrDefault(Emp => Emp.Id == IdEmp); InfoEmpleadoEmpresa InfoEmp = new InfoEmpleadoEmpresa() { EmpleadoId = ObjEmpleado.Id.ToString(), NombreEmpleado = ObjEmpleado.Nombre, RutEmpleado = ObjEmpleado.Rut, CargoEmpleado = ObjEmpleado.ContratoEmp.Cargo.Nombre, FechaIngresoEmpleado = ObjEmpleado.FechaCreacion.ToString("dd-MM-yyyy"), RazonSocialEmpresa = ObjEmpleado.EmpresaEmpleado.RazonSocial, RutEmpresa = ObjEmpleado.EmpresaEmpleado.Rut, DireccionEmpresa = ObjEmpleado.EmpresaEmpleado.Direccion }; List <ImpuestoUnico> InfoImpuestoUnicoActual = db.ImpuestoUnico.Where(x => x.EstaActiva == true).ToList(); AfpModel AFP = ObjEmpleado.PrevisionEmp.AFP; ContratoEmpleado Contrato = ObjEmpleado.ContratoEmp; CantidadHorasTrabajadas = Contrato.HorasDeJornada; if (ObjEmpleado != null) { var HyDemp = ServiciosHyD.ObtenerHyDEmpleado(IdEmp, db); if (HyDemp.Item1.Count() <= 0 || HyDemp.Item2.Count() <= 0) { return(null); } LstHaberImponible = HyDemp.Item1.Where(x => x.Categoria_id == CategoriaHaberes.IMPONIBLE) .Select(x => new HaberImponible { NombreHaber = x.Nombre, MontoHaber = x.ValorCalculo }).ToList(); LstHaberNoImponible = HyDemp.Item1.Where(x => x.Categoria_id == CategoriaHaberes.NOIMPONIBLE) .Select(x => new HaberNoImponible { NombreHaber = x.Nombre, MontoHaber = x.ValorCalculo }).ToList(); LstDescuentos = HyDemp.Item2.Select(x => new DescuentosLiquidacion { NombreDescuento = x.Nombre, MontoDescuento = x.ValorCalculo }).ToList(); decimal CalculoDescuentoAFP = CalculosLiquidacion.CalculoAFPIndefinido(AFP.DependientesTasaAfp, ObjEmpleado.SueldoEmp.SueldoBase, AFPTope); string DescuentoAFPNombre = CalculosLiquidacion.VistaPorcentajeLiquidacion(AFP.DependientesTasaAfp, CalculoDescuentoAFP, AFP.NombreAfp); //Busca el registro del descuento AFP y updatea el monto LstDescuentos.Where(x => x.NombreDescuento == AFP.NombreAfp) .Select(x => { x.NombreDescuento = DescuentoAFPNombre; x.MontoDescuento = CalculoDescuentoAFP; return(x); }).ToList(); //verificar si hay que calcularla o se deja directamente así decimal MontoGratificacion = CalculosLiquidacion.CalcularGratificacionLegal(ObjEmpleado.SueldoEmp.SueldoBase, 0, 0, db); var GratificacionLegal = new HaberImponible() { NombreHaber = "Gratificación", MontoHaber = MontoGratificacion }; LstHaberImponible.Add(GratificacionLegal); decimal TotalHaberesImponibles = LstHaberImponible.Sum(x => x.MontoHaber); decimal TotalHaberesNoImp = LstHaberNoImponible.Sum(x => x.MontoHaber); decimal TotalDescuentoCesantia = CalculosLiquidacion.CalculoSeguroDeCesantia(TotalHaberesImponibles, AFCRules.FirstOrDefault().FinanciamientoEmpleado, SCesantiaTope); var DescuentoCesantia = new DescuentosLiquidacion() { NombreDescuento = "Seguro de Cesantia", MontoDescuento = TotalDescuentoCesantia }; LstDescuentos.Add(DescuentoCesantia); decimal TotalDescuentoSalud = CalculosLiquidacion.CalculoFonasa(TotalHaberesImponibles); if (ObjEmpleado.PrevisionEmp.IsapreId > 0 && ObjEmpleado.PrevisionEmp.MontoPactadoIsapre > 0) { decimal MontoIsapre = 0; MontoIsapre = CalculosLiquidacion.ProcesarMontoPactadoIsapre(ObjEmpleado.PrevisionEmp, UF.Valor); if (MontoIsapre > TotalDescuentoSalud) { decimal MontoAdicional = 0; MontoAdicional = CalculosLiquidacion.MontoIsapreAdicional(TotalDescuentoSalud, MontoIsapre); var DescuentoIsapre = new DescuentosLiquidacion() { NombreDescuento = "Isapre", MontoDescuento = TotalDescuentoSalud }; var DescuentosAdicional = new DescuentosLiquidacion() { NombreDescuento = "Adicional", MontoDescuento = MontoAdicional }; LstDescuentos.Add(DescuentoIsapre); LstDescuentos.Add(DescuentosAdicional); } else if (TotalDescuentoSalud >= MontoIsapre) { var DescuentosSaludIsapre = new DescuentosLiquidacion() { NombreDescuento = "Isapre", MontoDescuento = TotalDescuentoSalud }; LstDescuentos.Add(DescuentosSaludIsapre); } } else { var DescuentoSaludFonasa = new DescuentosLiquidacion() { NombreDescuento = "Fonasa", MontoDescuento = TotalDescuentoSalud }; LstDescuentos.Add(DescuentoSaludFonasa); } decimal TotalDescuentos = LstDescuentos.Sum(x => x.MontoDescuento); decimal TotalImponibleTributable = CalculosLiquidacion.CalcularImponibleTributable(TotalHaberesImponibles, TotalDescuentos); bool EstaAfectaAimp = CalculosLiquidacion.EstaAfectaAimpuestos(InfoImpuestoUnicoActual, TotalImponibleTributable); decimal TotalImpuestoUnico = 0; if (EstaAfectaAimp) { TotalImpuestoUnico = CalculosLiquidacion.CalculoImpuestoUnico(InfoImpuestoUnicoActual, TotalImponibleTributable); } if (TotalImpuestoUnico > 0) { var DescuentoImpuestoUnico = new DescuentosLiquidacion() { NombreDescuento = "Impuesto Único", MontoDescuento = TotalImpuestoUnico }; LstDescuentos.Add(DescuentoImpuestoUnico); } decimal TotalHaberes = TotalHaberesImponibles + TotalHaberesNoImp; Liquidacion.MesLiquidacion = Utiles.obtenerNombreMes(DateTime.Now.Month); Liquidacion.InfoEmpleado = InfoEmp; Liquidacion.lstHaberImponible = LstHaberImponible; Liquidacion.lstHaberNoImponible = LstHaberNoImponible; Liquidacion.HorasTrabajadas = ObjEmpleado.ContratoEmp.HorasDeJornada; Liquidacion.indicadoresEco = Indicadores; Liquidacion.lstDescuentos = LstDescuentos; Liquidacion.FechaLiquidacion = DateTime.Now.ToString("dd-MM-yyyy"); Liquidacion.TotalHaberes = TotalHaberes; Liquidacion.TotalDescuentos = TotalDescuentos; Liquidacion.TotalHaberesImp = TotalHaberesImponibles; Liquidacion.TotalHaberesNoImp = TotalHaberesNoImp; Liquidacion.TotalLiquido = TotalHaberes - TotalDescuentos; } } catch (Exception ex) { return(null); } return(Liquidacion); }
public static bool InsertarEmpleado(FichaEmpleadoRequestModel NuevoEmp, remuneracionesContext db) { bool Result = false; using (var dbContextTransaction = db.Database.BeginTransaction()) { try { Tbempleados InsertEmpleado = new Tbempleados(); SueldoEmpleado InsertEmpleadoSueldo = new SueldoEmpleado(); ContratoEmpleado InsertEmpleadoContrato = new ContratoEmpleado(); PrevisionEmpleado InsertEmpleadoPrevi = new PrevisionEmpleado(); List <Tbempleados> LstEmpleados = new List <Tbempleados>(); FichaEmpresa ObjEmpresa = new FichaEmpresa(); ObjEmpresa.RazonSocial = "TestEmpresa"; ObjEmpresa.lstEmpleados = LstEmpleados; ObjEmpresa.Comuna = 1; ObjEmpresa.Direccion = "Barca 2560"; ObjEmpresa.Principal = true; ObjEmpresa.Rut = "13519830-7"; ObjEmpresa.TipoEmpresa = 1; ObjEmpresa.Giro = "Venta"; ObjEmpresa.RepresentanteLegal = "PedritoVega"; ObjEmpresa.RutRepresentanteLegal = "19507432-1"; ObjEmpresa.Vigente = true; ObjEmpresa.FormaPagoGratif = 1; ObjEmpresa.FormPagoMoviColacion = 1; ObjEmpresa.UsuarioEmpresaId = 1; InsertEmpleado.EstaDisponible = Convert.ToBoolean(NuevoEmp.EstaVigente); InsertEmpleado.Nombre = NuevoEmp.Nombre; InsertEmpleado.Apellido = NuevoEmp.Apellido; InsertEmpleado.Rut = NuevoEmp.Rut; InsertEmpleado.Nacionalidad = NuevoEmp.Nacionalidad; InsertEmpleado.Email = NuevoEmp.EmailPersonal; InsertEmpleado.Direccion = NuevoEmp.NumCasa + " " + NuevoEmp.Departamento + " " + NuevoEmp.Calle; InsertEmpleado.Sexo = Convert.ToInt32(NuevoEmp.Sexo); InsertEmpleado.Telefono = Convert.ToInt32(NuevoEmp.Telefono); InsertEmpleado.FechaNacimiento = Helpers.Utiles.ToDD_MM_AAAA_Multi(NuevoEmp.FechaNacimiento); InsertEmpleado.FechaCreacion = DateTime.Now; //Contrato InsertEmpleadoContrato.ContratoDesde = Helpers.Utiles.ToDD_MM_AAAA_Multi(NuevoEmp.ContratoDesde); InsertEmpleadoContrato.ContratoHasta = Helpers.Utiles.ToDD_MM_AAAA_Multi(NuevoEmp.ContratoHasta); CargosModel Cargo = new CargosModel(); if (NuevoEmp.Cargo != "Selecciona") { Cargo = db.CargosModel.Where(x => x.Id == Convert.ToInt32(NuevoEmp.Cargo)).FirstOrDefault(); } InsertEmpleadoContrato.Cargo = Cargo; //Sueldo InsertEmpleadoSueldo.AsignColacion = Convert.ToDecimal(NuevoEmp.AsignColacion); InsertEmpleadoSueldo.AsignMovilizacion = Convert.ToDecimal(NuevoEmp.AsignMovilizacion); InsertEmpleadoSueldo.SueldoBase = Convert.ToDecimal(NuevoEmp.SueldoBase); InsertEmpleadoSueldo.CuentaCorriente = Convert.ToInt32(NuevoEmp.NumCuenta); AfpModel AfpEmpleado = db.AfpModel.SingleOrDefault(x => x.Id == Convert.ToInt32(NuevoEmp.AFPId)); //Prevision //ver la posilidad de nulos en las relaciones var isapreObject = new IsapreModel(); InsertEmpleadoPrevi.AFPId = AfpEmpleado.Id; if (!string.IsNullOrWhiteSpace(NuevoEmp.IsapreId) && !string.IsNullOrWhiteSpace(NuevoEmp.IsapreTipoMonto)) { int TipoMontoPac = Convert.ToInt32(NuevoEmp.IsapreTipoMonto); TipoMontoPactado TipoMontoNuevoEmp = (TipoMontoPactado)TipoMontoPac; InsertEmpleadoPrevi.Tipo = TipoMontoNuevoEmp; InsertEmpleadoPrevi.IsapreId = Convert.ToInt32(NuevoEmp.IsapreId); InsertEmpleadoPrevi.MontoPactadoIsapre = Convert.ToDecimal(NuevoEmp.IsapreMonto); } InsertEmpleadoPrevi.Isapre = isapreObject; InsertEmpleado.ContratoEmp = InsertEmpleadoContrato; InsertEmpleado.SueldoEmp = InsertEmpleadoSueldo; InsertEmpleado.PrevisionEmp = InsertEmpleadoPrevi; //Registro de haberes y descuentos base. LstEmpleados.Add(InsertEmpleado); db.FichaEmpresa.Add(ObjEmpresa); db.Tbempleados.Add(InsertEmpleado); db.SaveChanges(); List <ColeccionHaberes> LsthaberesAregistrar = new List <ColeccionHaberes>() { new ColeccionHaberes() { Nombre = "Sueldo Base", Categoria_id = CategoriaHaberes.IMPONIBLE, ValorCalculo = InsertEmpleadoSueldo.SueldoBase, EmpresaId = ObjEmpresa.Id }, new ColeccionHaberes() { Nombre = "Movilizacion", Categoria_id = CategoriaHaberes.NOIMPONIBLE, ValorCalculo = InsertEmpleadoSueldo.AsignMovilizacion, EmpresaId = ObjEmpresa.Id }, new ColeccionHaberes() { Nombre = "Colacion", Categoria_id = CategoriaHaberes.NOIMPONIBLE, ValorCalculo = InsertEmpleadoSueldo.AsignColacion, EmpresaId = ObjEmpresa.Id } }; //Por Evaluar List <ColeccionDescuentos> LstDescuentosAregistrar = new List <ColeccionDescuentos>() { new ColeccionDescuentos() { Nombre = InsertEmpleadoPrevi.AFP.NombreAfp, ValorCalculo = AfpEmpleado.DependientesTasaAfp, EmpresaId = ObjEmpresa.Id } }; db.ColeccionHaberes.AddRange(LsthaberesAregistrar); db.ColeccionDescuentos.AddRange(LstDescuentosAregistrar); db.SaveChanges(); var LstHaberesYdescARegistrar = new List <HaberesYDescuentosEmpleado>(); foreach (ColeccionHaberes ItemHaber in LsthaberesAregistrar) { var HaberAResgistrar = new HaberesYDescuentosEmpleado() { EmpleadoId = InsertEmpleado.Id, EmpresaId = ObjEmpresa.Id, HaberOdescuentoId = ItemHaber.Id, TipoHoD = TipoHaberODescuento.HABER, Monto = ItemHaber.ValorCalculo }; LstHaberesYdescARegistrar.Add(HaberAResgistrar); } foreach (ColeccionDescuentos ItemDescuento in LstDescuentosAregistrar) { var DescuentoARegistrar = new HaberesYDescuentosEmpleado() { EmpleadoId = InsertEmpleado.Id, EmpresaId = ObjEmpresa.Id, HaberOdescuentoId = ItemDescuento.Id, TipoHoD = TipoHaberODescuento.DESCUENTO, Monto = Convert.ToDecimal(ItemDescuento.ValorCalculo) }; LstHaberesYdescARegistrar.Add(DescuentoARegistrar); } db.HaberesYDescuentosEmpleado.AddRange(LstHaberesYdescARegistrar); db.SaveChanges(); dbContextTransaction.Commit(); Result = true; } catch (Exception ex) { dbContextTransaction.Rollback(); } } return(Result); }