public ActionResult Promover()
        {
            var Empleado = new tbEmpleados();


            var Empleadosddl = db.tbEmpleados.Where(x => x.emp_Estado).Include(t => t.tbPersonas)
                               .Select(
                t => new
            {
                emp_Id          = t.per_Id,
                emp_descripcion = t.tbPersonas.per_Identidad + " - " + t.tbPersonas.per_Nombres + " " + t.tbPersonas.per_Apellidos
            }).ToList();


            //CARGAR DDL DE EMPLEADOS
            ViewBag.emp_Id          = new SelectList(Empleadosddl, "emp_Id", "emp_descripcion");
            ViewBag.car_Id          = new SelectList(db.tbCargos.Where(x => x.car_Estado), "car_Id", "car_Descripcion");
            ViewBag.area_Id         = new SelectList(db.tbAreas.Where(x => x.area_Estado), "area_Id", "area_Descripcion");
            ViewBag.depto_Id        = new SelectList(db.tbDepartamentos.Where(x => x.depto_Estado), "depto_Id", "depto_Descripcion");
            ViewBag.jor_Id          = new SelectList(db.tbJornadas.Where(x => x.jor_Estado), "jor_Id", "jor_Descripcion");
            ViewBag.cpla_IdPlanilla = new SelectList(db.tbCatalogoDePlanillas.Where(x => x.cpla_Activo), "cpla_IdPlanilla", "cpla_DescripcionPlanilla");
            ViewBag.fpa_IdFormaPago = new SelectList(db.tbFormaPago.Where(x => x.fpa_Activo), "fpa_IdFormaPago", "fpa_Descripcion");

            return(View(Empleado));
        }
        public JsonResult Promover(tbEmpleados tbEmpleados, string sue_Cantidad, string hcar_RazonPromocion, tbRequisiciones tbRequisiciones)
        {
            string msj = "";

            if (tbEmpleados.car_Id != 0)
            {
                var usuario = (tbUsuario)Session["Usuario"];
                try
                {
                    var list = db.UDP_RRHH_tbHistorialCargos_Insert(tbEmpleados.emp_Id, tbEmpleados.car_Id, tbEmpleados.area_Id, tbEmpleados.depto_Id,
                                                                    tbEmpleados.jor_Id, Convert.ToDecimal(sue_Cantidad), hcar_RazonPromocion, tbEmpleados.emp_Fechaingreso, tbRequisiciones.req_Id, (int)Session["UserLogin"], Function.DatetimeNow());
                    foreach (UDP_RRHH_tbHistorialCargos_Insert_Result item in list)
                    {
                        msj = item.MensajeError + " ";
                    }
                }
                catch (Exception ex)
                {
                    msj = "-2";
                    ex.Message.ToString();
                }
            }
            else
            {
                msj = "-3";
            }
            return(Json(msj.Substring(0, 2), JsonRequestBehavior.AllowGet));
        }
        public JsonResult PromoverGuardar(tbEmpleados tbEmpleados, int sue_Cantidad, tbRequisiciones tbRequisiciones)
        {
            string msj = "";

            if (tbEmpleados.car_Id != 0)
            {
                var usuario = (tbUsuario)Session["Usuario"];


                try
                {
                    var list = db.UDP_RRHH_tbHistorialCargos_Insert(tbEmpleados.emp_Id, tbEmpleados.car_Id, tbEmpleados.area_Id, tbEmpleados.depto_Id,
                                                                    tbEmpleados.jor_Id, sue_Cantidad, tbEmpleados.emp_Fechaingreso, tbRequisiciones.req_Id, 1, DateTime.Now);
                    foreach (UDP_RRHH_tbHistorialCargos_Insert_Result item in list)
                    {
                        msj = item.MensajeError + " ";
                    }
                }
                catch (Exception ex)
                {
                    msj = "-2";
                    ex.Message.ToString();
                }
            }
            else
            {
                msj = "-3";
            }
            return(Json(msj.Substring(0, 2), JsonRequestBehavior.AllowGet));
        }
Example #4
0
        public ActionResult Detallesempleados(int?id)
        {
            {
                if (id == null)
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                }

                tbEmpleados tbEmpleados1 = null;

                try
                {
                    db           = new ERP_GMEDINAEntities();
                    tbEmpleados1 = db.tbEmpleados.Find(id);
                    if (tbEmpleados1 == null || !tbEmpleados1.emp_Estado)
                    {
                        return(HttpNotFound());
                    }
                }
                catch (Exception ex)
                {
                    ex.Message.ToString();
                    return(HttpNotFound());
                }
                Session["id"] = id;
                var empleados = new tbEmpleados

                {
                    tbPersonas = new tbPersonas {
                        per_Identidad = IsNull(tbEmpleados1.tbPersonas).per_Identidad, per_Nombres = IsNull(tbEmpleados1.tbPersonas).per_Nombres + " " + IsNull(tbEmpleados1.tbPersonas).per_Apellidos
                    }
                };
                return(Json(empleados, JsonRequestBehavior.AllowGet));
            }
        }
Example #5
0
        public ActionResult DeleteConfirmed(int id)
        {
            tbEmpleados tbEmpleados = db.tbEmpleados.Find(id);

            db.tbEmpleados.Remove(tbEmpleados);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Example #6
0
        public ActionResult Create([Bind(Include = "emp_Id,emp_Identidad,emp_Nombres,emp_Apellidos,emp_FechaNacimiento,emp_Sexo,emp_Direccion,mun_Id,emp_CorreoElectronico,emp_Telefono,carg_Id,emp_FechaIngreso,emp_FechadeSalida,emp_RazonSalida,emp_UsuarioCrea,emp_FechaCrea,emp_UsuarioModifica,emp_FechaModifica")] tbEmpleados tbEmpleados)
        {
            tbEmpleados.emp_FechaCrea   = DateTime.Now;
            tbEmpleados.emp_UsuarioCrea = 2;
            if (ModelState.IsValid)
            {
                try
                {
                    IEnumerable <object> listEmpleados = null;
                    string MensajeError = "";
                    listEmpleados = db.UDP_Gral_tbEmpleados_Insert(tbEmpleados.emp_Identidad,
                                                                   tbEmpleados.emp_Nombres,
                                                                   tbEmpleados.emp_Apellidos,
                                                                   tbEmpleados.emp_FechaNacimiento,
                                                                   tbEmpleados.emp_Sexo,
                                                                   tbEmpleados.emp_Direccion,
                                                                   tbEmpleados.mun_Id,
                                                                   tbEmpleados.emp_CorreoElectronico,
                                                                   tbEmpleados.emp_Telefono,
                                                                   tbEmpleados.carg_Id,
                                                                   tbEmpleados.emp_FechaIngreso,
                                                                   tbEmpleados.emp_FechadeSalida,
                                                                   tbEmpleados.emp_RazonSalida,
                                                                   tbEmpleados.emp_UsuarioCrea,
                                                                   tbEmpleados.emp_FechaCrea);

                    foreach (UDP_Gral_tbEmpleados_Insert_Result Res in listEmpleados)
                    {
                        MensajeError = Res.MensajeError;
                    }

                    if (MensajeError.StartsWith("-1"))
                    {
                        ModelState.AddModelError("", "1. No se pudo insertar el registro");
                        return(View(tbEmpleados));
                    }

                    return(RedirectToAction("Index"));
                }

                catch (Exception ex)
                {
                    ex.Message.ToString();
                    ModelState.AddModelError("", "2. No se pudo insertar el registro");
                }

                ////db.tbEmpleados.Add(tbEmpleados);
                ////db.SaveChanges();
                ////return RedirectToAction("Index");
            }

            //ViewBag.emp_UsuarioCrea = new SelectList(db.tbUsuarios, "usu_Id", "usu_NombreUsuario", tbEmpleados.emp_UsuarioCrea);
            //ViewBag.emp_UsuarioModifica = new SelectList(db.tbUsuarios, "usu_Id", "usu_NombreUsuario", tbEmpleados.emp_UsuarioModifica);
            //ViewBag.carg_Id = new SelectList(db.tbCargos, "carg_Id", "carg_Descripcion", tbEmpleados.carg_Id);
            //ViewBag.mun_Id = new SelectList(db.tbMunicipios, "mun_Id", "mun_Descripcion", tbEmpleados.mun_Id);
            return(View(tbEmpleados));
        }
Example #7
0
        public JsonResult Contratar(tbSeleccionCandidatos tbSeleccionCandidatos, tbEmpleados tbEmpleados, bool emp_Temporal, string sue_Cantidad, int tmon_Id, tbRequisiciones tbRequisiciones)
        {
            string msj = "";

            if (tbEmpleados.car_Id != 0)
            {
                var usuario = (tbUsuario)Session["Usuario"];

                //Comprueba si el candidato ah sido empleado antes.
                var empleados = db.tbEmpleados.Where(x => x.per_Id == tbEmpleados.per_Id)
                                .Select(
                    t => new
                {
                    per_Id = t.per_Id
                }).ToList();

                try
                {
                    //Si el candidato nunca ah sido empleado se contratara
                    if (empleados.Count == 0)
                    {
                        var list = db.UDP_RRHH_tbEmpleados_Contratar(tbSeleccionCandidatos.scan_Id, tbEmpleados.car_Id, tbEmpleados.area_Id, tbEmpleados.depto_Id,
                                                                     tbEmpleados.jor_Id, tbEmpleados.cpla_IdPlanilla, tbEmpleados.fpa_IdFormaPago,
                                                                     tbEmpleados.emp_CuentaBancaria, emp_Temporal, false, tbRequisiciones.req_Id, tmon_Id, Convert.ToDecimal(sue_Cantidad), tbEmpleados.emp_Fechaingreso, (int)Session["UserLogin"], Function.DatetimeNow());
                        foreach (UDP_RRHH_tbEmpleados_Contratar_Result item in list)
                        {
                            msj = item.MensajeError + " ";
                        }
                    }
                    else
                    {
                        //Si el candidato ah sido empleado se recontratara
                        var list = db.UDP_RRHH_tbEmpleados_Recontratar(tbSeleccionCandidatos.scan_Id, tbEmpleados.car_Id, tbEmpleados.area_Id, tbEmpleados.depto_Id,
                                                                       tbEmpleados.jor_Id, tbEmpleados.cpla_IdPlanilla, tbEmpleados.fpa_IdFormaPago,
                                                                       tbEmpleados.emp_CuentaBancaria, emp_Temporal, true, tbRequisiciones.req_Id, tmon_Id, Convert.ToDecimal(sue_Cantidad), tbEmpleados.emp_Fechaingreso, (int)Session["UserLogin"], Function.DatetimeNow());

                        foreach (UDP_RRHH_tbEmpleados_Recontratar_Result item in list)
                        {
                            msj = item.MensajeError + " ";
                        }
                    }

                    //Session.Remove("id");
                }
                catch (Exception ex)
                {
                    msj = "-2";
                    ex.Message.ToString();
                }
            }
            else
            {
                msj = "-3";
            }
            return(Json(msj.Substring(0, 2), JsonRequestBehavior.AllowGet));
        }
Example #8
0
 public ActionResult Edit([Bind(Include = "emp_Id,emp_Identidad,emp_Nombres,emp_Apellidos,emp_FechaNacimiento,emp_Sexo,emp_Direccion,mun_Id,emp_CorreoElectronico,emp_Telefono,carg_Id,emp_FechaIngreso,emp_FechadeSalida,emp_RazonSalida,emp_UsuarioCrea,emp_FechaCrea,emp_UsuarioModifica,emp_FechaModifica")] tbEmpleados tbEmpleados)
 {
     if (ModelState.IsValid)
     {
         db.Entry(tbEmpleados).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.carg_Id = new SelectList(db.tbCargos, "carg_Id", "carg_Descripcion", tbEmpleados.carg_Id);
     return(View(tbEmpleados));
 }
Example #9
0
        public ActionResult Index()
        {
            if (Session["Admin"] == null || Session["Usuario"] == null)
            {
                Response.Redirect("~/Inicio/index/");
                return(null);
            }
            tbEmpleados tbEmpleados = new tbEmpleados {
            };

            return(View(tbEmpleados));
        }
Example #10
0
        // GET: Empleados/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            tbEmpleados tbEmpleados = db.tbEmpleados.Find(id);

            if (tbEmpleados == null)
            {
                return(HttpNotFound());
            }
            return(View(tbEmpleados));
        }
Example #11
0
        // GET: Empleados/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            tbEmpleados tbEmpleados = db.tbEmpleados.Find(id);

            if (tbEmpleados == null)
            {
                return(HttpNotFound());
            }
            ViewBag.carg_Id = new SelectList(db.tbCargos, "carg_Id", "carg_Descripcion", tbEmpleados.carg_Id);
            return(View(tbEmpleados));
        }
 public ActionResult Edit([Bind(Include = "emp_Id,per_Id,car_Id,area_Id,depto_Id,jor_Id,cpla_IdPlanilla,fpa_IdFormaPago,emp_CuentaBancaria,emp_Reingreso,emp_Fechaingreso,emp_RazonSalida,emp_CargoAnterior,emp_FechaDeSalida,emp_Estado,emp_RazonInactivo,emp_UsuarioCrea,emp_FechaCrea,emp_UsuarioModifica,emp_FechaModifica")] tbEmpleados tbEmpleados)
 {
     if (ModelState.IsValid)
     {
         db.Entry(tbEmpleados).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.emp_UsuarioCrea     = new SelectList(db.tbUsuario, "usu_Id", "usu_NombreUsuario", tbEmpleados.emp_UsuarioCrea);
     ViewBag.emp_UsuarioModifica = new SelectList(db.tbUsuario, "usu_Id", "usu_NombreUsuario", tbEmpleados.emp_UsuarioModifica);
     ViewBag.area_Id             = new SelectList(db.tbAreas, "area_Id", "area_Descripcion", tbEmpleados.area_Id);
     ViewBag.car_Id = new SelectList(db.tbCargos, "car_Id", "car_Descripcion", tbEmpleados.car_Id);
     ViewBag.per_Id = new SelectList(db.tbPersonas, "per_Id", "per_Identidad", tbEmpleados.per_Id);
     return(View(tbEmpleados));
 }
Example #13
0
        public ActionResult Contratar(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            tbSeleccionCandidatos tbSeleccionCandidatos = null;

            try
            {
                tbSeleccionCandidatos = db.tbSeleccionCandidatos.Find(id);
                if (tbSeleccionCandidatos == null || !tbSeleccionCandidatos.scan_Estado)
                {
                    return(HttpNotFound());
                }
            }
            catch (Exception ex)
            {
                ex.Message.ToString();
                return(HttpNotFound());
            }
            Session["scan_id"] = id;

            var candidatos = db.V_SeleccionCandidatos.Where(x => x.Estado)
                             .Select(
                t => new
            {
                per_Id = t.IdPersona,
            }).ToList().
                             First();

            var Empleado = new tbEmpleados
            {
                per_Id = tbSeleccionCandidatos.per_Id,
            };

            Empleado.per_Id = candidatos.per_Id;
            //CARGAR DDL DE EMPLEADOS
            ViewBag.car_Id  = new SelectList(db.tbEmpleados.Where(x => x.emp_Estado), "emp_Id", "car_Descripcion");
            ViewBag.car_Id  = new SelectList(db.tbCargos.Where(x => x.car_Estado), "car_Id", "car_Descripcion");
            ViewBag.area_Id = new SelectList(db.tbAreas.Where(x => x.area_Estado), "area_Id", "area_Descripcion");
            //ViewBag.depto_Id = new SelectList(db.tbDepartamentos.Where(x => x.depto_Estado), "depto_Id", "depto_Descripcion");
            ViewBag.jor_Id          = new SelectList(db.tbJornadas.Where(x => x.jor_Estado), "jor_Id", "jor_Descripcion");
            ViewBag.cpla_IdPlanilla = new SelectList(db.tbCatalogoDePlanillas.Where(x => x.cpla_Activo), "cpla_IdPlanilla", "cpla_DescripcionPlanilla");
            ViewBag.fpa_IdFormaPago = new SelectList(db.tbFormaPago.Where(x => x.fpa_Activo), "fpa_IdFormaPago", "fpa_Descripcion");

            return(View(Empleado));
        }
Example #14
0
        // GET: Empleados/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            tbEmpleados tbEmpleados = db.tbEmpleados.Find(id);

            if (tbEmpleados == null)
            {
                return(HttpNotFound());
            }
            ViewBag.emp_UsuarioCrea     = new SelectList(db.tbUsuarios, "usu_Id", "usu_NombreUsuario", tbEmpleados.emp_UsuarioCrea);
            ViewBag.emp_UsuarioModifica = new SelectList(db.tbUsuarios, "usu_Id", "usu_NombreUsuario", tbEmpleados.emp_UsuarioModifica);
            ViewBag.carg_Id             = new SelectList(db.tbCargos, "carg_Id", "carg_Descripcion", tbEmpleados.carg_Id);
            ViewBag.mun_Id = new SelectList(db.tbMunicipios, "mun_Id", "mun_Descripcion", tbEmpleados.mun_Id);
            return(View(tbEmpleados));
        }
        // GET: Empleados/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            tbEmpleados tbEmpleados = db.tbEmpleados.Find(id);

            if (tbEmpleados == null)
            {
                return(HttpNotFound());
            }
            ViewBag.emp_UsuarioCrea     = new SelectList(db.tbUsuario, "usu_Id", "usu_NombreUsuario", tbEmpleados.emp_UsuarioCrea);
            ViewBag.emp_UsuarioModifica = new SelectList(db.tbUsuario, "usu_Id", "usu_NombreUsuario", tbEmpleados.emp_UsuarioModifica);
            ViewBag.area_Id             = new SelectList(db.tbAreas, "area_Id", "area_Descripcion", tbEmpleados.area_Id);
            ViewBag.car_Id = new SelectList(db.tbCargos, "car_Id", "car_Descripcion", tbEmpleados.car_Id);
            ViewBag.per_Id = new SelectList(db.tbPersonas, "per_Id", "per_Identidad", tbEmpleados.per_Id);
            return(View(tbEmpleados));
        }
Example #16
0
        public ActionResult Details(int?id)
        {
            try
            {
                db = new ERP_GMEDINAEntities();
                //Aqui codigo llenarTabla
                if (id == null)
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                }
                tbEmpleados tbEmpleados      = db.tbEmpleados.Find(id);
                var         fechaingreso     = (from a in db.tbEmpleados where a.emp_Id == id select a.emp_Fechaingreso).ToList()[0];
                DateTime    fechaactual      = DateTime.Now;
                DateTime    fechaingresodate = Convert.ToDateTime(fechaingreso);
                int         timespan         = (fechaactual.Year - fechaingresodate.Year);
                if (timespan == 0)
                {
                    ViewBag.Antiguedad = "Menos de 1 año";
                }
                else
                {
                    ViewBag.Antiguedad = timespan + " " + "Años";
                }
                if (tbEmpleados == null)
                {
                    return(HttpNotFound());
                }
                var JefeArea = tbEmpleados.tbAreas.tbCargos.tbEmpleados.
                               Select(p => new { Nombres = p.tbPersonas.per_Nombres + " " + p.tbPersonas.per_Apellidos });
                var JefeDepto = tbEmpleados.tbDepartamentos.tbCargos.tbEmpleados.
                                Select(p => new { Nombres = p.tbPersonas.per_Nombres + " " + p.tbPersonas.per_Apellidos });

                Session["JefeArea"]  = JefeArea.Count() == 0 ? "Sin asignar" : JefeArea.First().Nombres;
                Session["JefeDepto"] = JefeDepto.Count() == 0 ? "Sin asignar" : JefeDepto.First().Nombres;
                return(View(tbEmpleados));
            }
            catch (Exception ex)
            {
                ex.Message.ToString();
                return(HttpNotFound());
            }
        }
 // GET: Empleados/Details/5
 public ActionResult Details(int?id)
 {
     try
     {
         db = new ERP_GMEDINAEntities();
         //Aqui codigo llenarTabla
         if (id == null)
         {
             return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
         }
         tbEmpleados tbEmpleados = db.tbEmpleados.Find(id);
         if (tbEmpleados == null)
         {
             return(HttpNotFound());
         }
         return(View(tbEmpleados));
         //aqui termina llenarTabla
     }
     catch
     {
         return(HttpNotFound());
     }
 }
        public static decimal CalcularISR(ERP_GMEDINAEntities db, tbEmpleados empleadoActual, decimal totalSalario, decimal totalISR, int dias)
        {
            #region Cálculo de ISR
            try
            {
                #region Declaracion de Variables
                int     AnioActual                               = DateTime.Now.Year;
                decimal?TotalBonos                               = 0;
                decimal?TotalHrsExtra                            = 0;
                decimal?TotalComisiones                          = 0;
                decimal?TotalIngresosExtras                      = 0;
                decimal?TotalDeduccionesEquipoTrabajo            = 0;
                decimal?TotalDeduccionesExtras                   = 0;
                decimal?TotalDeduccionesAFP                      = 0;
                decimal?TotalDeduccionesInstitucionesFinancieras = 0;
                decimal?ExcesoDecimoTercer                       = 0;
                decimal?ExcesoVacaciones                         = 0;
                decimal?ExcesoDecimoCuarto                       = 0;
                decimal Exceso                    = 0;
                decimal?AcumuladosISR             = 0;
                decimal TotalIngresosGravables    = 0;
                decimal TotalDeduccionesGravables = 0;
                decimal RentaNetaGravable         = 0;
                decimal SalarioMinimo             = db.tbEmpresas.Select(x => x.empr_SalarioMinimo).FirstOrDefault() ?? 0;
                #endregion

                #region Sueldo Promedio Anual
                //Sueldo redondeado del Colaborador
                DateTime AnioActualEnero = new DateTime(DateTime.Now.Year, 1, 1);

                //Obtener los pagos mensuales totales
                var mesesPago = (db.tbHistorialDePago
                                 .Where(x => x.emp_Id == empleadoActual.emp_Id && x.hipa_Anio == AnioActualEnero.Year)
                                 .OrderBy(x => x.hipa_Mes)
                                 .GroupBy(x => x.hipa_Mes)
                                 .Select(x => x.Sum(y => (Decimal)y.hipa_TotalSueldoBruto))).ToList();

                DateTime FechaIngresoEmpleado = db.tbEmpleados
                                                .Where(x => x.emp_Id == empleadoActual.emp_Id)
                                                .Select(x => x.emp_Fechaingreso).FirstOrDefault();
                bool esMensual = true;

                TimeSpan diferencia = AnioActualEnero - FechaIngresoEmpleado;

                if (TimeSpan.Zero > diferencia)
                {
                    esMensual = true;
                }


                //Saber que mes entro
                int     mes = FechaIngresoEmpleado.Month;
                decimal SalarioPromedioAnualPagadoAlAnio = 0;
                decimal salarioPromedioAnualPagadoAlMes  = 0;
                decimal TotalSalarioAnual = SalarioPromedioAnualISR(totalSalario,
                                                                    mesesPago,
                                                                    esMensual,
                                                                    ref SalarioPromedioAnualPagadoAlAnio,
                                                                    ref salarioPromedioAnualPagadoAlMes);
                #endregion

                #region Excesos
                ////-----------------------------------------------------------------------------------------------------------------------------
                //Exceso Décimo Tercer Mes
                //Variable para los empleados con Décimo Tercer Mes
                var DecimoTercer = db.V_DecimoTercerMes_Pagados.Where(x => x.emp_Id == empleadoActual.emp_Id && x.dtm_FechaPago.Year == AnioActual).FirstOrDefault();

                //Validar primero si es en el año actual el proceso de este calculo
                if (DecimoTercer != null)
                {
                    //Salario Mínimo Mensual por 10 Meses (Según SAR)
                    Exceso = SalarioMinimo * 10;

                    //Validar si el Décimo Tercer es mayor al Exceso
                    if (DecimoTercer.dtm_Monto > Exceso)
                    {
                        ExcesoDecimoTercer = DecimoTercer.dtm_Monto - Exceso;
                    }
                    else
                    {
                        ExcesoDecimoTercer = 0;
                    }
                }
                ////-----------------------------------------------------------------------------------------------------------------------------


                ////-----------------------------------------------------------------------------------------------------------------------------
                //Exceso Décimo Cuarto Mes
                //Variable para los empleados con Décimo Cuarto Mes
                var DecimoCuarto = db.V_DecimoCuartoMes_Pagados.Where(x => x.emp_Id == empleadoActual.emp_Id && x.dcm_FechaPago.Year == AnioActual).FirstOrDefault();

                //Validar primero si es en el año actual el proceso de este calculo
                if (DecimoCuarto != null)
                {
                    //Salario Mínimo Mensual por 10 Meses (Según SAR)
                    Exceso = SalarioMinimo * 10;

                    //Validar si el Décimo Cuarto es mayor al Exceso
                    if (DecimoCuarto.dcm_Monto > Exceso)
                    {
                        ExcesoDecimoCuarto = DecimoCuarto.dcm_Monto - Exceso;
                    }
                    else
                    {
                        ExcesoDecimoCuarto = 0;
                    }
                }
                ////-----------------------------------------------------------------------------------------------------------------------------


                ////-----------------------------------------------------------------------------------------------------------------------------
                //Exceso Vacaciones
                //Variable para las Vacaciones Pagadas del Historial de Ingresos de Pago
                var objVacaciones = db.tbHistorialVacaciones.Where(x => x.emp_Id == empleadoActual.emp_Id && AnioActual == x.hvac_AnioVacaciones && x.hvac_DiasPagados == true).Select(x => x.hvac_CantDias).FirstOrDefault();

                //Validar si los dias a Pagar es mayor a 30 dias
                if (objVacaciones > 30)
                {
                    ExcesoVacaciones = ((objVacaciones - 30) * (TotalSalarioAnual / 360));
                }
                else
                {
                    ExcesoVacaciones = 0;
                }

                #endregion

                #region Acumulados ISR

                //Variable para obtener los registros de los Acumulados ISR del empleado actual
                AcumuladosISR = db.tbAcumuladosISR.Where(x => x.aisr_Activo == true && x.emp_Id == empleadoActual.emp_Id).GroupBy(x => x.emp_Id).Select(x => x.Sum(y => y.aisr_Monto)).FirstOrDefault();

                #endregion

                #region Otros Ingresos

                TotalBonos          = db.tbHistorialDePago.Where(x => x.emp_Id == empleadoActual.emp_Id && AnioActual == x.hipa_Anio).GroupBy(x => x.emp_Id).Select(x => x.Sum(y => y.hipa_TotalBonos)).FirstOrDefault();
                TotalHrsExtra       = db.tbHistorialDePago.Where(x => x.emp_Id == empleadoActual.emp_Id && AnioActual == x.hipa_Anio).GroupBy(x => x.emp_Id).Select(x => x.Sum(y => y.hipa_TotalHorasExtras)).FirstOrDefault();
                TotalComisiones     = db.tbHistorialDePago.Where(x => x.emp_Id == empleadoActual.emp_Id && AnioActual == x.hipa_Anio).GroupBy(x => x.emp_Id).Select(x => x.Sum(y => y.hipa_TotalComisiones)).FirstOrDefault();
                TotalIngresosExtras = db.tbHistorialDePago.Where(x => x.emp_Id == empleadoActual.emp_Id && AnioActual == x.hipa_Anio).GroupBy(x => x.emp_Id).Select(x => x.Sum(y => y.hipa_TotalIngresosIndividuales)).FirstOrDefault();

                if (TotalBonos == null)
                {
                    TotalBonos = 0;
                }

                if (TotalHrsExtra == null)
                {
                    TotalHrsExtra = 0;
                }

                if (TotalComisiones == null)
                {
                    TotalComisiones = 0;
                }

                if (TotalIngresosExtras == null)
                {
                    TotalIngresosExtras = 0;
                }

                #endregion

                #region Otras Deducciones (Posible cálculo para el ISR)

                #region Deducciones por Equipo de Trabajo
                //DET = Deducción por Equipo de Trabajo
                decimal?MontoInicialDET  = 0;
                decimal?MontoRestanteDET = 0;
                List <tbDeduccionesExtraordinarias> objDeduccionesExtraordinarias = db.tbDeduccionesExtraordinarias.Where(x => x.tbEquipoEmpleados.emp_Id == empleadoActual.emp_Id && x.dex_Activo == true && x.dex_DeducirISR == true)
                                                                                    .ToList();
                if (objDeduccionesExtraordinarias.Count() > 0)
                {
                    foreach (var oDET in objDeduccionesExtraordinarias)
                    {
                        MontoInicialDET  = MontoInicialDET + oDET.dex_MontoInicial;
                        MontoRestanteDET = MontoRestanteDET + oDET.dex_MontoRestante;
                    }
                }
                if (MontoInicialDET > 0 && MontoRestanteDET > 0)
                {
                    TotalDeduccionesEquipoTrabajo = MontoInicialDET - MontoRestanteDET;
                }
                else
                {
                    TotalDeduccionesEquipoTrabajo = 0;
                }
                #endregion

                #region Deducciones Extras
                List <tbDeduccionesIndividuales> objDeduccionIndividual = db.tbDeduccionesIndividuales.Where(x => x.emp_Id == empleadoActual.emp_Id && x.dei_Activo == true && x.dei_DeducirISR == true)
                                                                          .ToList();
                if (objDeduccionIndividual.Count() > 0)
                {
                    foreach (var oDeduIndi in objDeduccionIndividual)
                    {
                        if (oDeduIndi.dei_DeducirISR == true)
                        {
                            TotalDeduccionesExtras = db.tbHistorialDePago.Where(x => x.emp_Id == empleadoActual.emp_Id && AnioActual == x.hipa_Anio).GroupBy(x => x.emp_Id).Select(x => x.Sum(y => y.hipa_TotalDeduccionesIndividuales)).FirstOrDefault();
                        }
                    }
                }
                #endregion

                #region Deducciones AFP
                List <tbDeduccionAFP> objDeduccionAFP = db.tbDeduccionAFP.Where(x => x.emp_Id == empleadoActual.emp_Id && x.dafp_Activo == true && x.dafp_DeducirISR == true)
                                                        .ToList();
                if (objDeduccionAFP.Count() > 0)
                {
                    foreach (var oDeduAFP in objDeduccionAFP)
                    {
                        if (oDeduAFP.dafp_DeducirISR == true)
                        {
                            TotalDeduccionesAFP = db.tbHistorialDePago.Where(x => x.emp_Id == empleadoActual.emp_Id && AnioActual == x.hipa_Anio).GroupBy(x => x.emp_Id).Select(x => x.Sum(y => y.hipa_AFP)).FirstOrDefault();
                        }
                    }
                }
                #endregion

                #region Deducciones Instituciones Financieras
                //DIF = Deducción Institución Financiera
                List <tbDeduccionInstitucionFinanciera> objDeduccionInstitucionFinanciera = db.tbDeduccionInstitucionFinanciera.Where(x => x.emp_Id == empleadoActual.emp_Id && x.deif_Activo == true && x.deif_DeducirISR == true)
                                                                                            .ToList();
                if (objDeduccionInstitucionFinanciera.Count() > 0)
                {
                    foreach (var oDIF in objDeduccionInstitucionFinanciera)
                    {
                        if (oDIF.deif_Monto > 0)
                        {
                            TotalDeduccionesInstitucionesFinancieras = TotalDeduccionesInstitucionesFinancieras + oDIF.deif_Monto;
                        }
                        else
                        {
                            TotalDeduccionesInstitucionesFinancieras = 0;
                        }
                    }
                }
                #endregion

                if (TotalDeduccionesEquipoTrabajo == null)
                {
                    TotalDeduccionesEquipoTrabajo = 0;
                }

                if (TotalDeduccionesExtras == null)
                {
                    TotalDeduccionesExtras = 0;
                }

                if (TotalDeduccionesAFP == null)
                {
                    TotalDeduccionesAFP = 0;
                }

                if (TotalDeduccionesInstitucionesFinancieras == null)
                {
                    TotalDeduccionesInstitucionesFinancieras = 0;
                }

                #endregion

                #region Calculo del ISR
                //-----------------------------------------------------------------------------------------------------------------------------
                //Total Ingresos Gravables
                TotalIngresosGravables = TotalSalarioAnual + (Decimal)ExcesoDecimoTercer + (Decimal)ExcesoDecimoCuarto + (Decimal)ExcesoVacaciones + (Decimal)TotalBonos + (Decimal)TotalHrsExtra + (Decimal)TotalComisiones + (Decimal)TotalIngresosExtras;

                //Total Deducciones Gravables
                TotalDeduccionesGravables = (Decimal)AcumuladosISR + (Decimal)TotalDeduccionesEquipoTrabajo + (Decimal)TotalDeduccionesExtras + (Decimal)TotalDeduccionesAFP + (Decimal)TotalDeduccionesInstitucionesFinancieras;

                //Renta Neta Gravable
                RentaNetaGravable = TotalIngresosGravables - TotalDeduccionesGravables;


                #region Tabla Progresiva ISR
                //Tabla Progresiva ISR

                //Variable para validar que entre primero en la primera parte de la fórmula del ISR y luego en la segunda parte
                string VI = "FirstRange";

                //Variable de tipo Lista para obtener los registros de la tabla progresiva de mayor a menor
                List <tbISR> objDeduccionISR = db.tbISR.Where(x => x.isr_Activo == true)
                                               .OrderByDescending(x => x.isr_RangoInicial)
                                               .ToList();

                foreach (var oISR in objDeduccionISR)
                {
                    if (objDeduccionISR.Count() > 0)
                    {
                        if (RentaNetaGravable >= oISR.isr_RangoInicial)
                        {
                            if (VI == "FirstRange")
                            {
                                totalISR = totalISR + (RentaNetaGravable - oISR.isr_RangoInicial) * (((oISR.isr_Porcentaje)) / 100);
                                VI       = "No";
                            }
                            else if (VI == "No")
                            {
                                VI = "SecondRange";
                            }
                            if (VI == "SecondRange")
                            {
                                totalISR = totalISR + ((oISR.isr_RangoFinal) - oISR.isr_RangoInicial) * ((oISR.isr_Porcentaje) / 100);
                                VI       = "No";
                            }
                        }
                        else
                        {
                            totalISR = 0;
                        }
                    }
                }
                if (totalISR > 0)
                {
                    totalISR = totalISR / 12;
                    totalISR = totalISR / 30;
                    totalISR = totalISR * dias;
                }
                #endregion

                #endregion
            }
            catch (Exception ex)
            {
                ex.Message.ToString();
            }

            #endregion
            return(totalISR);
        }
Example #19
0
        public bool agregarEmpleado(ClsEempleado empleado)
        {
            tbEmpleados tbl = tbEmpleados.crear(empleado.DniEmpleado, empleado.Nombres, empleado.Apellidos, empleado.Direccion, empleado.Correo, empleado.Telefono, empleado.Codigo_Cargo, empleado.idTurno, empleado.Estado, empleado.Usuario, empleado.Contraseña);

            return(datos.agregarEmpleado(tbl));
        }
        public static void EnviarComprobanteDePagoColaborador(string moneda, bool?enviarEmail, DateTime fechaInicio, DateTime fechaFin, General utilities, ref List <IngresosDeduccionesVoucher> ListaIngresosVoucher, ref List <IngresosDeduccionesVoucher> ListaDeduccionesVoucher, ComprobantePagoModel oComprobantePagoModel, List <ViewModelListaErrores> listaErrores, ref int errores, ERP_GMEDINAEntities db, tbEmpleados empleadoActual, decimal?totalIngresosEmpleado, decimal?totalDeduccionesEmpleado, decimal?netoAPagarColaborador, V_InformacionColaborador InformacionDelEmpleadoActual)
        {
            #region Enviar comprobante de pago por email
            if (enviarEmail != null && enviarEmail == true)
            {
                oComprobantePagoModel.moneda            = moneda;
                oComprobantePagoModel.EmailAsunto       = "Comprobante de pago";
                oComprobantePagoModel.NombreColaborador = empleadoActual.tbPersonas.per_Nombres + " " + empleadoActual.tbPersonas.per_Apellidos;
                oComprobantePagoModel.idColaborador     = empleadoActual.emp_Id;
                oComprobantePagoModel.EmailDestino      = empleadoActual.tbPersonas.per_CorreoElectronico;
                oComprobantePagoModel.PeriodoPago       = $"{fechaInicio.ToString("dd/MM/yyyy")}- {fechaFin.ToString("dd/MM/yyyy")}";
                oComprobantePagoModel.Ingresos          = ListaIngresosVoucher;
                oComprobantePagoModel.Deducciones       = ListaDeduccionesVoucher;
                oComprobantePagoModel.totalIngresos     = totalIngresosEmpleado;
                oComprobantePagoModel.totalDeducciones  = totalDeduccionesEmpleado;
                oComprobantePagoModel.NetoPagar         = netoAPagarColaborador;

                // enviar comprobante de pago
                try
                {
                    if (!utilities.SendEmail(oComprobantePagoModel))
                    {
                        listaErrores.Add(new ViewModelListaErrores
                        {
                            Identidad         = InformacionDelEmpleadoActual.per_Identidad,
                            NombreColaborador = InformacionDelEmpleadoActual.per_Nombres + " " + InformacionDelEmpleadoActual.per_Apellidos,
                            Error             = "Error al Enviar comprobante de pago.",
                            PosibleSolucion   = "Verifique que la información del perfil del colaborador esté completa y/o correcta."
                        });
                        errores++;
                    }
                    else
                    {
                        ListaDeduccionesVoucher = new List <IngresosDeduccionesVoucher>();
                        ListaIngresosVoucher    = new List <IngresosDeduccionesVoucher>();
                    }
                }
                catch (Exception ex)
                {
                    listaErrores.Add(new ViewModelListaErrores
                    {
                        Identidad         = InformacionDelEmpleadoActual.per_Identidad,
                        NombreColaborador = InformacionDelEmpleadoActual.per_Nombres + " " + InformacionDelEmpleadoActual.per_Apellidos,
                        Error             = "Error al Enviar comprobante de pago.",
                        PosibleSolucion   = "Verifique que la información del perfil del colaborador esté completa y/o correcta."
                    });
                    errores++;
                }
            }
            #endregion
        }
        // se usa este actualmente
        public static void PrevisualizarProcesarDeducciones(int monedaDeducciones, List <ViewModelTasasDeCambio> objMonedas, int userId, DateTime fechaInicio, DateTime fechaFin, List <ViewModelListaErrores> listaErrores, ref int errores, ERP_GMEDINAEntities db, List <V_PlanillaDeducciones> oDeducciones, tbEmpleados empleadoActual, decimal SalarioBase, decimal?totalIngresosEmpleado, ref decimal?colaboradorDeducciones, ref decimal totalAFP, ref decimal?totalInstitucionesFinancieras, ref decimal?totalOtrasDeducciones, ref decimal?adelantosSueldo, out decimal?totalDeduccionesEmpleado, ref decimal?totalDeduccionesIndividuales, out decimal?netoAPagarColaborador, V_InformacionColaborador InformacionDelEmpleadoActual)
        {
            #region Procesar deducciones

            // instancia del helper
            Models.Helpers objHelpers = new Models.Helpers();

            // id del usuario logueado
            int idUser = userId;

            // validar que la planilla tenga deducciones
            if (oDeducciones.Count > 0)
            {
                // obtener id del tipo de moneda del sueldo del colaborador
                int idMonedaColaborador = db.tbSueldos.Where(x => x.emp_Id == InformacionDelEmpleadoActual.emp_Id && x.sue_Estado == true).Select(x => x.tmon_Id).FirstOrDefault();

                ViewModelTasasDeCambio tasaDeCambio = new ViewModelTasasDeCambio();

                // si el tipo de moneda del colaborador es distinto de la moneda de las deducciones seleccionada en el frontend, hacer la conversion
                if (idMonedaColaborador != monedaDeducciones)
                {
                    // no tengo idea de que estaba haciendo aquí gg
                    tasaDeCambio = objMonedas.Where(x => x.tmon_Id == idMonedaColaborador).FirstOrDefault();
                }

                // deducciones de la planilla
                foreach (var iterDeducciones in oDeducciones)
                {
                    try
                    {
                        decimal?porcentajeColaborador     = iterDeducciones.cde_PorcentajeColaborador;
                        decimal?porcentajeEmpresa         = iterDeducciones.cde_PorcentajeEmpresa;
                        decimal?montoDeduccionColaborador = SalarioBase;

                        // si el tipo de moneda del colaborador es distinto de la moneda de las deducciones seleccionada en el frontend, hacer la conversion
                        if (idMonedaColaborador != monedaDeducciones)
                        {
                            montoDeduccionColaborador = (SalarioBase * tasaDeCambio.tmon_Cambio);
                        }

                        try
                        {
                            // verificar techos deducciones
                            List <tbTechosDeducciones> oTechosDeducciones = db.tbTechosDeducciones
                                                                            .Where(x => x.cde_IdDeducciones == iterDeducciones.cde_IdDeducciones &&
                                                                                   x.tddu_Activo == true)
                                                                            .OrderBy(x => x.tddu_Techo)
                                                                            .ToList();
                            if (oTechosDeducciones.Count() > 0)
                            {
                                foreach (var techosDeduccionesIter in oTechosDeducciones)
                                {
                                    try
                                    {
                                        if (SalarioBase > techosDeduccionesIter.tddu_Techo)
                                        {
                                            montoDeduccionColaborador = techosDeduccionesIter.tddu_Techo;
                                            porcentajeColaborador     = techosDeduccionesIter.tddu_PorcentajeColaboradores;
                                            porcentajeEmpresa         = techosDeduccionesIter.tddu_PorcentajeEmpresa;
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        listaErrores.Add(new ViewModelListaErrores
                                        {
                                            Identidad         = InformacionDelEmpleadoActual.per_Identidad,
                                            NombreColaborador = InformacionDelEmpleadoActual.per_Nombres + " " + InformacionDelEmpleadoActual.per_Apellidos,
                                            Error             = $"Error al cargar techo de la deducción: {iterDeducciones.cde_DescripcionDeduccion}. Detalles del techo: Techo {techosDeduccionesIter.tddu_Techo}, porcentaje colaborador : {techosDeduccionesIter.tddu_PorcentajeColaboradores}, porcentaje empresa: {techosDeduccionesIter.tddu_PorcentajeEmpresa}.",
                                            PosibleSolucion   = "Verifique que la información de esta deducción y sus respectivos techos esté completa y/o correcta."
                                        });
                                        errores++;
                                    }
                                }
                                // si la moneda de las deducciones es distintas al tipo de moneda del colaborador, convertir a la moneda del colaborador
                                // antes de agregarlo al reporte final

                                if (idMonedaColaborador != monedaDeducciones)
                                {
                                    colaboradorDeducciones = Math.Round(((decimal)colaboradorDeducciones) / tasaDeCambio.tmon_Cambio, 2);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            listaErrores.Add(new ViewModelListaErrores
                            {
                                Identidad         = InformacionDelEmpleadoActual.per_Identidad,
                                NombreColaborador = InformacionDelEmpleadoActual.per_Nombres + " " + InformacionDelEmpleadoActual.per_Apellidos,
                                Error             = $"Error al cargar techos de la deducción: {iterDeducciones.cde_DescripcionDeduccion}.",
                                PosibleSolucion   = "Verifique que la información de esta deducción y sus respectivos techos esté completa y/o correcta."
                            });
                            errores++;
                        }

                        //sumar las deducciones
                        colaboradorDeducciones += Math.Round((decimal)(montoDeduccionColaborador * porcentajeColaborador) / 100, 2);
                    }
                    catch (Exception ex)
                    {
                        listaErrores.Add(new ViewModelListaErrores
                        {
                            Identidad         = InformacionDelEmpleadoActual.per_Identidad,
                            NombreColaborador = InformacionDelEmpleadoActual.per_Nombres + " " + InformacionDelEmpleadoActual.per_Apellidos,
                            Error             = $"Error al procesar deducción {iterDeducciones.cde_DescripcionDeduccion}.",
                            PosibleSolucion   = "Verifique que la información de esta deducción y sus respectivos techos (si los tiene) esté completa y/o correcta."
                        });
                        errores++;
                    }
                }
            }


            //instituciones financieras
            List <tbDeduccionInstitucionFinanciera> oDeduInstiFinancieras = db.tbDeduccionInstitucionFinanciera
                                                                            .Where(x => x.emp_Id == empleadoActual.emp_Id &&
                                                                                   x.deif_Activo == true &&
                                                                                   x.deif_Pagado == false &&
                                                                                   x.deif_FechaCrea >= fechaInicio &&
                                                                                   x.deif_FechaCrea <= fechaFin)
                                                                            .ToList();

            if (oDeduInstiFinancieras.Count > 0)
            {
                // sumarlas todas
                foreach (var oDeduInstiFinancierasIterador in oDeduInstiFinancieras)
                {
                    try
                    {
                        totalInstitucionesFinancieras += Math.Round((decimal)oDeduInstiFinancierasIterador.deif_Monto, 2);
                    }
                    catch (Exception ex)
                    {
                        listaErrores.Add(new ViewModelListaErrores
                        {
                            Identidad         = InformacionDelEmpleadoActual.per_Identidad,
                            NombreColaborador = InformacionDelEmpleadoActual.per_Nombres + " " + InformacionDelEmpleadoActual.per_Apellidos,
                            Error             = $"Error al procesar deduccion por institución financiera {oDeduInstiFinancierasIterador.tbInstitucionesFinancieras.insf_DescInstitucionFinanc} - {oDeduInstiFinancierasIterador.deif_Comentarios} - {oDeduInstiFinancierasIterador.deif_Monto}.",
                            PosibleSolucion   = "Verifique que la información de esta deducción sea correcta de acuerdo al formato leído por el sistema."
                        });
                        errores++;
                    }
                }
            }
            // deducciones afp
            List <tbDeduccionAFP> oDeduccionAfp = db.tbDeduccionAFP
                                                  .Where(af => af.emp_Id == empleadoActual.emp_Id &&
                                                         af.dafp_Activo == true)
                                                  .ToList();

            // respaldo de where's comentados de deduccion afp
            // af.dafp_Pagado != true &&
            // af.dafp_FechaCrea >= fechaInicio &&
            // af.dafp_FechaCrea <= fechaFin

            if (oDeduccionAfp.Count > 0)
            {
                // sumarlas todas
                foreach (var oDeduccionAfpIter in oDeduccionAfp)
                {
                    try
                    {
                        totalAFP += Math.Round(oDeduccionAfpIter.dafp_AporteLps, 2);
                    }
                    catch (Exception ex)
                    {
                        listaErrores.Add(new ViewModelListaErrores
                        {
                            Identidad         = InformacionDelEmpleadoActual.per_Identidad,
                            NombreColaborador = InformacionDelEmpleadoActual.per_Nombres + " " + InformacionDelEmpleadoActual.per_Apellidos,
                            Error             = $"Error al procesar deduccion AFP. {oDeduccionAfpIter.tbAFP.afp_Descripcion} - {oDeduccionAfpIter.dafp_AporteLps}",
                            PosibleSolucion   = "Verifique que la información de esta deducción esté correcta y/o completa."
                        });
                        errores++;
                    }
                }
            }

            // deducciones por equipo de trabajo
            List <tbDeduccionesExtraordinarias> oDeduccionesExtrasColaborador = db.tbDeduccionesExtraordinarias
                                                                                .Where(DEX => DEX.tbEquipoEmpleados.emp_Id == empleadoActual.emp_Id &&
                                                                                       DEX.dex_MontoRestante > 0 &&
                                                                                       DEX.dex_Activo == true)
                                                                                .ToList();

            if (oDeduccionesExtrasColaborador.Count > 0)
            {
                // sumarlas todas
                foreach (var oDeduccionesExtrasColaboradorIterador in oDeduccionesExtrasColaborador)
                {
                    try
                    {
                        totalOtrasDeducciones += oDeduccionesExtrasColaboradorIterador.dex_MontoRestante <= oDeduccionesExtrasColaboradorIterador.dex_Cuota ? oDeduccionesExtrasColaboradorIterador.dex_MontoRestante : oDeduccionesExtrasColaboradorIterador.dex_Cuota;
                    }
                    catch (Exception ex)
                    {
                        listaErrores.Add(new ViewModelListaErrores
                        {
                            Identidad         = InformacionDelEmpleadoActual.per_Identidad,
                            NombreColaborador = InformacionDelEmpleadoActual.per_Nombres + " " + InformacionDelEmpleadoActual.per_Apellidos,
                            Error             = $"Error al procesar deduccion extra. {oDeduccionesExtrasColaboradorIterador.dex_ObservacionesComentarios} - {oDeduccionesExtrasColaboradorIterador.dex_Cuota}",
                            PosibleSolucion   = "Verifique que la información de esta deducción esté correcta y/o completa."
                        });
                        errores++;
                    }
                }
            }

            // adelantos de sueldo
            List <tbAdelantoSueldo> oAdelantosSueldo = db.tbAdelantoSueldo
                                                       .Where(x => x.emp_Id == empleadoActual.emp_Id &&
                                                              x.adsu_Activo == true && x.adsu_Deducido == false &&
                                                              x.adsu_FechaAdelanto >= fechaInicio &&
                                                              x.adsu_FechaAdelanto <= fechaFin)
                                                       .ToList();

            if (oAdelantosSueldo.Count > 0)
            {
                // sumarlas todas
                foreach (var oAdelantosSueldoIterador in oAdelantosSueldo)
                {
                    try
                    {
                        adelantosSueldo += Math.Round((decimal)oAdelantosSueldoIterador.adsu_Monto, 2);
                    }
                    catch (Exception ex)
                    {
                        listaErrores.Add(new ViewModelListaErrores
                        {
                            Identidad         = InformacionDelEmpleadoActual.per_Identidad,
                            NombreColaborador = InformacionDelEmpleadoActual.per_Nombres + " " + InformacionDelEmpleadoActual.per_Apellidos,
                            Error             = $"Error al procesar adelanto de sueldo. {oAdelantosSueldoIterador.adsu_RazonAdelanto} - {oAdelantosSueldoIterador.adsu_Monto}",
                            PosibleSolucion   = "Verifique que la información de dicho adelanto esté completa y/o correcta."
                        });
                        errores++;
                    }
                }
            }

            // deducciones individuales
            List <tbDeduccionesIndividuales> oDeduccionesIndiColaborador = db.tbDeduccionesIndividuales
                                                                           .Where(DEX => DEX.emp_Id == empleadoActual.emp_Id &&
                                                                                  DEX.dei_Monto > 0 &&
                                                                                  DEX.dei_Pagado != true &&
                                                                                  DEX.dei_Activo == true)
                                                                           .ToList();

            if (oDeduccionesIndiColaborador.Count > 0)
            {
                // sumarlas todas
                foreach (var oDeduccionesIndiColaboradorIterador in oDeduccionesIndiColaborador)
                {
                    try
                    {
                        totalDeduccionesIndividuales += oDeduccionesIndiColaboradorIterador.dei_Monto <= oDeduccionesIndiColaboradorIterador.dei_MontoCuota ? oDeduccionesIndiColaboradorIterador.dei_MontoCuota : oDeduccionesIndiColaboradorIterador.dei_MontoCuota;
                    }
                    catch (Exception ex)
                    {
                        listaErrores.Add(new ViewModelListaErrores
                        {
                            Identidad         = InformacionDelEmpleadoActual.per_Identidad,
                            NombreColaborador = InformacionDelEmpleadoActual.per_Nombres + " " + InformacionDelEmpleadoActual.per_Apellidos,
                            Error             = $"Error al procesar deducción individual. {oDeduccionesIndiColaboradorIterador.dei_Motivo} - {oDeduccionesIndiColaboradorIterador.dei_MontoCuota}",
                            PosibleSolucion   = "Verifique que la de dicha deducción esté completa y/o correcta."
                        });
                        errores++;
                    }
                }
            }

            // totales
            totalDeduccionesEmpleado = Math.Round((decimal)totalOtrasDeducciones, 2) + totalInstitucionesFinancieras + colaboradorDeducciones + totalAFP + adelantosSueldo + totalDeduccionesIndividuales;
            netoAPagarColaborador    = totalIngresosEmpleado - totalDeduccionesEmpleado;

            #endregion
        }
 public static void ReporteColaboradorPlanilla(string moneda, ref ReportePlanillaViewModel oPlanillaEmpleado, tbEmpleados empleadoActual, decimal SalarioBase, int horasTrabajadas, decimal salarioHora, decimal totalSalario, decimal?totalComisiones, int horasExtrasTrabajadas, decimal?totalHorasExtras, decimal?totalHorasPermiso, decimal?totalBonificaciones, decimal?totalIngresosIndivuales, decimal?totalVacaciones, decimal?totalIngresosEmpleado, decimal totalISR, decimal?colaboradorDeducciones, decimal totalAFP, decimal?totalInstitucionesFinancieras, decimal?totalOtrasDeducciones, decimal?adelantosSueldo, decimal?totalDeduccionesEmpleado, decimal?totalDeduccionesIndividuales, decimal?netoAPagarColaborador, V_InformacionColaborador InformacionDelEmpleadoActual)
 {
     oPlanillaEmpleado.CodColaborador                = InformacionDelEmpleadoActual.emp_Id.ToString();
     oPlanillaEmpleado.NombresColaborador            = $"{empleadoActual.tbPersonas.per_Nombres} {empleadoActual.tbPersonas.per_Apellidos}";
     oPlanillaEmpleado.Moneda                        = moneda;
     oPlanillaEmpleado.SalarioBase                   = SalarioBase;
     oPlanillaEmpleado.horasTrabajadas               = horasTrabajadas;
     oPlanillaEmpleado.SalarioHora                   = salarioHora;
     oPlanillaEmpleado.totalSalario                  = totalSalario;
     oPlanillaEmpleado.tipoPlanilla                  = empleadoActual.tbCatalogoDePlanillas.cpla_DescripcionPlanilla;
     oPlanillaEmpleado.totalComisiones               = totalComisiones;
     oPlanillaEmpleado.horasExtras                   = horasExtrasTrabajadas;
     oPlanillaEmpleado.totalHorasPermiso             = totalHorasPermiso;
     oPlanillaEmpleado.TotalIngresosHorasExtras      = totalHorasExtras;
     oPlanillaEmpleado.totalBonificaciones           = totalBonificaciones;
     oPlanillaEmpleado.totalIngresosIndivuales       = totalIngresosIndivuales;
     oPlanillaEmpleado.totalVacaciones               = totalVacaciones;
     oPlanillaEmpleado.totalIngresos                 = Math.Round((decimal)totalIngresosEmpleado, 2);
     oPlanillaEmpleado.totalISR                      = totalISR;
     oPlanillaEmpleado.totalDeduccionesColaborador   = colaboradorDeducciones;
     oPlanillaEmpleado.totalAFP                      = totalAFP;
     oPlanillaEmpleado.totalInstitucionesFinancieras = totalInstitucionesFinancieras;
     oPlanillaEmpleado.otrasDeducciones              = Math.Round((decimal)totalOtrasDeducciones, 2);
     oPlanillaEmpleado.adelantosSueldo               = Math.Round((decimal)adelantosSueldo, 2);
     oPlanillaEmpleado.totalDeduccionesIndividuales  = totalDeduccionesIndividuales;
     oPlanillaEmpleado.totalDeducciones              = Math.Round((decimal)totalDeduccionesEmpleado, 2);
     oPlanillaEmpleado.totalAPagar                   = Math.Round((decimal)netoAPagarColaborador, 2);
 }
        public static void ProcesarDeduccionesParaPrevisualizacion(DateTime fechaInicio, DateTime fechaFin, ERP_GMEDINAEntities db, List <V_PlanillaDeducciones> oDeducciones, tbEmpleados empleadoActual, decimal SalarioBase, decimal?totalIngresosEmpleado, ref decimal?colaboradorDeducciones, ref decimal totalAFP, ref decimal?totalInstitucionesFinancieras, ref decimal?totalOtrasDeducciones, ref decimal?adelantosSueldo, out decimal?totalDeduccionesEmpleado, ref decimal?totalDeduccionesIndividuales, out decimal?netoAPagarColaborador)
        {
            #region Procesar deducciones
            // deducciones de la planilla
            foreach (var iterDeducciones in oDeducciones)
            {
                decimal?porcentajeColaborador     = iterDeducciones.cde_PorcentajeColaborador;
                decimal?porcentajeEmpresa         = iterDeducciones.cde_PorcentajeEmpresa;
                decimal?montoDeduccionColaborador = SalarioBase;

                // verificar techos deducciones
                List <tbTechosDeducciones> oTechosDeducciones = db.tbTechosDeducciones
                                                                .Where(x => x.cde_IdDeducciones == iterDeducciones.cde_IdDeducciones &&
                                                                       x.tddu_Activo == true)
                                                                .OrderBy(x => x.tddu_Techo)
                                                                .ToList();
                if (oTechosDeducciones.Count() > 0)
                {
                    foreach (var techosDeduccionesIter in oTechosDeducciones)
                    {
                        if (SalarioBase > techosDeduccionesIter.tddu_Techo)
                        {
                            montoDeduccionColaborador = techosDeduccionesIter.tddu_Techo;
                            porcentajeColaborador     = techosDeduccionesIter.tddu_PorcentajeColaboradores;
                            porcentajeEmpresa         = techosDeduccionesIter.tddu_PorcentajeEmpresa;
                        }
                    }
                }
                //sumar las deducciones
                colaboradorDeducciones += (montoDeduccionColaborador * porcentajeColaborador) / 100;
            }

            //instituciones financieras
            List <tbDeduccionInstitucionFinanciera> oDeduInstiFinancieras = db.tbDeduccionInstitucionFinanciera
                                                                            .Where(x => x.emp_Id == empleadoActual.emp_Id &&
                                                                                   x.deif_Activo == true &&
                                                                                   x.deif_Pagado == false &&
                                                                                   x.deif_FechaCrea >= fechaInicio &&
                                                                                   x.deif_FechaCrea <= fechaFin)
                                                                            .ToList();

            if (oDeduInstiFinancieras.Count > 0)
            {
                // sumarlas todas
                foreach (var oDeduInstiFinancierasIterador in oDeduInstiFinancieras)
                {
                    totalInstitucionesFinancieras += oDeduInstiFinancierasIterador.deif_Monto;
                }
            }
            // deducciones afp
            List <tbDeduccionAFP> oDeduccionAfp = db.tbDeduccionAFP
                                                  .Where(af => af.emp_Id == empleadoActual.emp_Id &&
                                                         af.dafp_Pagado != true &&
                                                         af.dafp_Activo == true &&
                                                         af.dafp_FechaCrea >= fechaInicio &&
                                                         af.dafp_FechaCrea <= fechaFin)
                                                  .ToList();

            if (oDeduccionAfp.Count > 0)
            {
                // sumarlas todas
                foreach (var oDeduccionAfpIter in oDeduccionAfp)
                {
                    totalAFP += oDeduccionAfpIter.dafp_AporteLps;
                }
            }

            // deducciones extras
            List <tbDeduccionesExtraordinarias> oDeduccionesExtrasColaborador = db.tbDeduccionesExtraordinarias
                                                                                .Where(DEX => DEX.tbEquipoEmpleados.emp_Id == empleadoActual.emp_Id &&
                                                                                       DEX.dex_MontoRestante > 0 &&
                                                                                       DEX.dex_Activo == true)
                                                                                .ToList();

            if (oDeduccionesExtrasColaborador.Count > 0)
            {
                // sumarlas todas
                foreach (var oDeduccionesExtrasColaboradorIterador in oDeduccionesExtrasColaborador)
                {
                    totalOtrasDeducciones += oDeduccionesExtrasColaboradorIterador.dex_MontoRestante <= oDeduccionesExtrasColaboradorIterador.dex_Cuota ? oDeduccionesExtrasColaboradorIterador.dex_MontoRestante : oDeduccionesExtrasColaboradorIterador.dex_Cuota;
                }
            }

            // adelantos de sueldo
            List <tbAdelantoSueldo> oAdelantosSueldo = db.tbAdelantoSueldo
                                                       .Where(x => x.emp_Id == empleadoActual.emp_Id &&
                                                              x.adsu_Activo == true && x.adsu_Deducido == false &&
                                                              x.adsu_FechaAdelanto >= fechaInicio &&
                                                              x.adsu_FechaAdelanto <= fechaFin)
                                                       .ToList();

            if (oAdelantosSueldo.Count > 0)
            {
                // sumarlas todas
                foreach (var oAdelantosSueldoIterador in oAdelantosSueldo)
                {
                    adelantosSueldo += oAdelantosSueldoIterador.adsu_Monto;
                }
            }

            // deducciones individuales
            List <tbDeduccionesIndividuales> oDeduccionesIndiColaborador = db.tbDeduccionesIndividuales
                                                                           .Where(DEX => DEX.emp_Id == empleadoActual.emp_Id &&
                                                                                  DEX.dei_Monto > 0 &&
                                                                                  DEX.dei_Pagado != true &&
                                                                                  DEX.dei_Activo == true)
                                                                           .ToList();

            if (oDeduccionesIndiColaborador.Count > 0)
            {
                // sumarlas todas
                foreach (var oDeduccionesIndiColaboradorIterador in oDeduccionesIndiColaborador)
                {
                    totalDeduccionesIndividuales += oDeduccionesIndiColaboradorIterador.dei_Monto <= oDeduccionesIndiColaboradorIterador.dei_MontoCuota ? oDeduccionesIndiColaboradorIterador.dei_MontoCuota : oDeduccionesIndiColaboradorIterador.dei_MontoCuota;
                }
            }


            // totales
            totalDeduccionesEmpleado = totalOtrasDeducciones + totalInstitucionesFinancieras + colaboradorDeducciones + totalAFP + adelantosSueldo + totalDeduccionesIndividuales;
            netoAPagarColaborador    = Math.Round((decimal)totalIngresosEmpleado.Value - totalDeduccionesEmpleado.Value, 2);

            #endregion
        }
        public static int GuardarHistorialDePago(DateTime fechaInicio, DateTime fechaFin, List <ViewModelListaErrores> listaErrores, ref int errores, string codigoDePlanillaGenerada, ERP_GMEDINAEntities db, ref int contador, ref int idDetalleDeduccionHisotorialesContador, ref int idDetalleIngresoHisotorialesContador, tbEmpleados empleadoActual, decimal totalSalario, decimal?totalComisiones, int horasExtrasTrabajadas, int cantidadUnidadesBonos, decimal?totalHorasExtras, decimal?totalHorasPermiso, decimal?totalBonificaciones, decimal?totalIngresosIndivuales, decimal?totalVacaciones, decimal totalISR, decimal totalAFP, decimal?adelantosSueldo, decimal?totalDeduccionesIndividuales, decimal?netoAPagarColaborador, ref IEnumerable <object> listHistorialPago, ref string MensajeError, List <tbHistorialDeduccionPago> lisHistorialDeducciones, List <tbHistorialDeIngresosPago> lisHistorialIngresos, V_InformacionColaborador InformacionDelEmpleadoActual, decimal resultSeptimoDia)
        {
            #region guardar en el historial de pago

            int idHistorialPago = db.tbHistorialDePago
                                  .Select(x => x.hipa_IdHistorialDePago)
                                  .DefaultIfEmpty(0)
                                  .Max();
            int idUser = (int)HttpContext.Current.Session["UserLogin"];

            try
            {
                tbHistorialDePago oHistorialPagoEncabezado = new tbHistorialDePago();
                oHistorialPagoEncabezado.hipa_IdHistorialDePago = idHistorialPago + contador;
                oHistorialPagoEncabezado.emp_Id           = empleadoActual.emp_Id;
                oHistorialPagoEncabezado.hipa_SueldoNeto  = Math.Round((decimal)netoAPagarColaborador, 2);
                oHistorialPagoEncabezado.hipa_FechaInicio = fechaInicio;
                oHistorialPagoEncabezado.hipa_FechaFin    = fechaFin;
                oHistorialPagoEncabezado.hipa_FechaPago   = DateTime.Now;
                oHistorialPagoEncabezado.hipa_Anio        = DateTime.Now.Year;
                oHistorialPagoEncabezado.hipa_Mes         = DateTime.Now.Month;
                oHistorialPagoEncabezado.peri_IdPeriodo   = 1;

                oHistorialPagoEncabezado.hipa_UsuarioCrea = idUser;
                oHistorialPagoEncabezado.hipa_FechaCrea   = DateTime.Now;

                oHistorialPagoEncabezado.hipa_TotalISR     = totalISR;
                oHistorialPagoEncabezado.hipa_ISRPendiente = true;
                oHistorialPagoEncabezado.hipa_AFP          = totalAFP;

                //Nuevos campos
                oHistorialPagoEncabezado.hipa_TotalHorasConPermisoJustificado = totalHorasPermiso;
                oHistorialPagoEncabezado.hipa_TotalComisiones  = totalComisiones;
                oHistorialPagoEncabezado.hipa_TotalHorasExtras = totalHorasExtras;
                oHistorialPagoEncabezado.hipa_TotalVacaciones  = totalVacaciones;
                oHistorialPagoEncabezado.hipa_TotalSeptimoDia  = resultSeptimoDia;
                oHistorialPagoEncabezado.hipa_AdelantoSueldo   = adelantosSueldo;
                oHistorialPagoEncabezado.hipa_TotalSalario     = totalSalario;

                // nuevos campos
                oHistorialPagoEncabezado.hipa_TotalDeduccionesIndividuales = totalDeduccionesIndividuales;
                oHistorialPagoEncabezado.hipa_TotalIngresosIndividuales    = totalIngresosIndivuales;
                oHistorialPagoEncabezado.hipa_TotalSueldoBruto             = totalSalario;
                oHistorialPagoEncabezado.hipa_CantidadUnidadesHorasExtras  = horasExtrasTrabajadas;

                oHistorialPagoEncabezado.hipa_CantidadUnidadesBonos = cantidadUnidadesBonos;

                oHistorialPagoEncabezado.hipa_TotalBonos = totalBonificaciones;

                //Ejecutar el procedimiento almacenado
                listHistorialPago = db.UDP_Plani_tbHistorialDePago_Insert(oHistorialPagoEncabezado.emp_Id,
                                                                          oHistorialPagoEncabezado.hipa_SueldoNeto,
                                                                          oHistorialPagoEncabezado.hipa_FechaInicio,
                                                                          oHistorialPagoEncabezado.hipa_FechaFin,
                                                                          oHistorialPagoEncabezado.hipa_FechaPago,
                                                                          oHistorialPagoEncabezado.hipa_Anio,
                                                                          oHistorialPagoEncabezado.hipa_Mes,
                                                                          oHistorialPagoEncabezado.peri_IdPeriodo,
                                                                          oHistorialPagoEncabezado.hipa_UsuarioCrea,
                                                                          oHistorialPagoEncabezado.hipa_FechaCrea,
                                                                          oHistorialPagoEncabezado.hipa_TotalISR,
                                                                          oHistorialPagoEncabezado.hipa_ISRPendiente,
                                                                          oHistorialPagoEncabezado.hipa_AFP,
                                                                          // nuevos campos
                                                                          oHistorialPagoEncabezado.hipa_TotalHorasConPermisoJustificado,
                                                                          oHistorialPagoEncabezado.hipa_TotalComisiones,
                                                                          oHistorialPagoEncabezado.hipa_TotalHorasExtras,
                                                                          oHistorialPagoEncabezado.hipa_TotalVacaciones,
                                                                          oHistorialPagoEncabezado.hipa_TotalSeptimoDia,
                                                                          oHistorialPagoEncabezado.hipa_AdelantoSueldo,
                                                                          oHistorialPagoEncabezado.hipa_TotalSalario,
                                                                                                                                      // nuevos campos

                                                                          oHistorialPagoEncabezado.hipa_TotalDeduccionesIndividuales, // deducciones individuales
                                                                          oHistorialPagoEncabezado.hipa_TotalIngresosIndividuales,    // ingresos individuales
                                                                          oHistorialPagoEncabezado.hipa_TotalSueldoBruto,             // sueldo bruto
                                                                          oHistorialPagoEncabezado.hipa_CantidadUnidadesHorasExtras,  // cantidad unidades horas extras
                                                                          oHistorialPagoEncabezado.hipa_CantidadUnidadesBonos,        // cantidad unidades bonos
                                                                          oHistorialPagoEncabezado.hipa_TotalBonos,                   // total bonos
                                                                          codigoDePlanillaGenerada                                    // codigo identificador de la planilla
                                                                          );

                // obtener resultado del procedimiento almacenado
                foreach (UDP_Plani_tbHistorialDePago_Insert_Result Resultado in listHistorialPago)
                {
                    MensajeError = Resultado.MensajeError;
                }


                if (MensajeError.StartsWith("-1"))
                {
                    // el procedimiento almacenado falló
                    errores++;
                }
                // si el encabezado del historial de pago se registró correctamente, guardar los detalles
                else
                {
                    // guardar en el detalle de deducciones del historial de pago
                    foreach (var hisorialDeduccioneIterado in lisHistorialDeducciones)
                    {
                        int idDetalle = db.tbHistorialDeduccionPago
                                        .Select(x => x.hidp_IdHistorialdeDeduPago)
                                        .DefaultIfEmpty(0)
                                        .Max();

                        hisorialDeduccioneIterado.hidp_IdHistorialdeDeduPago = idDetalle + idDetalleDeduccionHisotorialesContador;
                        hisorialDeduccioneIterado.hipa_IdHistorialDePago     = int.Parse(MensajeError);
                        hisorialDeduccioneIterado.hidp_UsuarioCrea           = idUser;
                        hisorialDeduccioneIterado.hidp_FechaCrea             = DateTime.Now;
                        db.tbHistorialDeduccionPago.Add(hisorialDeduccioneIterado);
                        idDetalleDeduccionHisotorialesContador++;
                    }
                    // guardar en el detalle de ingresos del historial de pago
                    foreach (var hisorialIngresosIterado in lisHistorialIngresos)
                    {
                        int idDetalle = db.tbHistorialDeIngresosPago
                                        .Select(x => x.hip_IdHistorialDeIngresosPago)
                                        .DefaultIfEmpty(0)
                                        .Max();

                        hisorialIngresosIterado.hip_IdHistorialDeIngresosPago = idDetalle + idDetalleIngresoHisotorialesContador;
                        hisorialIngresosIterado.hipa_IdHistorialDePago        = int.Parse(MensajeError);
                        hisorialIngresosIterado.hip_FechaInicio = fechaInicio;
                        hisorialIngresosIterado.hip_FechaFinal  = fechaFin;
                        hisorialIngresosIterado.hip_UsuarioCrea = idUser;
                        hisorialIngresosIterado.hip_FechaCrea   = DateTime.Now;
                        db.tbHistorialDeIngresosPago.Add(hisorialIngresosIterado);
                        idDetalleIngresoHisotorialesContador++;
                    }
                }
            }
            catch (Exception ex)
            {
                listaErrores.Add(new ViewModelListaErrores
                {
                    Identidad         = InformacionDelEmpleadoActual.per_Identidad,
                    NombreColaborador = InformacionDelEmpleadoActual.per_Nombres,
                    Error             = "Error al guardar en el historial de pago",
                    PosibleSolucion   = "Verifique que la información del perfil del colaborador esté completa y/o correcta."
                });
                errores++;
            }

            contador++;
            #endregion
            return(idHistorialPago);
        }