def users(request): result = [] for user in User.objects.all(): if get_user_role(user) is None: result.append((user, None, None)) else: result.append( (user, get_user_role(user), available_perm_status(user))) return render(request, 'users.html', {'result': result})
def test_get_user_role_after_role_change(self): user = self.user user_role = ShoRole1.assign_role_to_user(user) user_role = ShoRole3.assign_role_to_user(user) self.assertEquals(get_user_role(user), ShoRole3)
def index(request): template = loader.get_template('website/index.html') context = {} if request.user.is_authenticated(): context['role'] = get_user_role(request.user).get_name() context['permissions'] = available_perm_status(request.user) return HttpResponse(template.render(context, request))
def test_user_has_no_role(self): user = self.user assign_role(user, 'sho_role1') remove_role(user) self.assertEquals(get_user_role(user), None)
def test_get_user_role_after_role_change(self): user = self.user ShoRole1.assign_role_to_user(user) ShoRole3.assign_role_to_user(user) self.assertEquals(get_user_role(user), ShoRole3)
def has_object_permission(checker_name, user, obj): if user.is_superuser: return True checker = PermissionsManager.retrieve_checker(checker_name) role = get_user_role(user) return checker(role, user, obj)
def edit_product(request, id=None): stuff = request.user if not has_permission(stuff, 'edit_product') and not has_permission(stuff, 'change_status'): messages.warning(request, 'You have no permission to edit product') return HttpResponseRedirect(reverse("products:about", kwargs={'id':id})) product = get_object_or_404(Product, id=id) role = get_user_role(stuff) if role.title == 'zavsklad': form = ProductForm(request.POST or None, request.FILES or None, instance=product) elif product.status == 'out of stock': form = ProductFormStatus(request.POST or None, instance=product) else: messages.warning(request, 'You can change product status only if it is "out of stock"') return HttpResponseRedirect(reverse("products:about", kwargs={'id':id})) context = { "form": form, } if form.is_valid(): status = form.cleaned_data.get('status') if role.title == 'postavshik' and status != 'comming soon' and status != 'out of stock': messages.warning(request, 'You can change only to comming soon') return render(request, 'add_product.html', context) old_product = product product = form.save(commit=False) log = ProductHistory( changed_by=request.user, product_id=product.id, product_title = product.title, old_title = old_product.title, old_content = old_product.content, old_image = old_product.image, old_quantity = old_product.quantity, old_price = old_product.price, old_status = old_product.status, new_title = product.title, new_content = product.content, new_image = product.image, new_quantity = product.quantity, new_price = product.price, new_status = product.status,) product.save() log.save() # print log.product_changes messages.info(request, "Successfully changed!") # return HttpResponseRedirect(product.get_absolute_url()) return redirect(reverse("products:about", kwargs={"id":product.id})) return render(request, 'add_product.html', context)
def index(request): if request.method == "POST": login_form = LoginForm(request.POST) if login_form.is_valid(): LogIn(request, login_form.cleaned_data["username"], login_form.cleaned_data["password"]) else: print "45" return render(request, "login.html", {"login_form": login_form}, context_instance=RequestContext(request)) if request.user.is_authenticated(): if Paciente.objects.filter(usuario__id=request.user.id): role = get_user_role(request.user) print role return redirect("home") elif Medico.objects.filter(usuario__id=request.user.id): role = get_user_role(request.user) print role return redirect("dashboard") login_form = LoginForm() return render(request, "login.html", {"login_form": login_form})
def has_permission(user, permission_name): if user and user.is_superuser: return True role = get_user_role(user) if role and permission_name in role.permission_names_list(): permission = get_permission(permission_name) if permission in user.user_permissions.all() or permission.codename in [p.codename for p in Permission.objects.filter(group__user=user)]: return True return False
def index(request): if request.method =="POST": login_form=LoginForm(request.POST) if login_form.is_valid(): LogIn(request,login_form.cleaned_data['username'], login_form.cleaned_data['password']) else: print "45" return render(request,'login.html',{'login_form':login_form},context_instance=RequestContext(request)) if request.user.is_authenticated(): if Paciente.objects.filter(usuario__id=request.user.id): role = get_user_role(request.user) print role return redirect('home') elif Medico.objects.filter(usuario__id=request.user.id): role = get_user_role(request.user) print role return redirect('dashboard') login_form=LoginForm() return render(request,'login.html',{'login_form':login_form})
def has_permission(user, permission_name): if user and user.is_superuser: return True role = get_user_role(user) if role and permission_name in role.permission_names_list(): permission = get_permission(permission_name) if permission in user.user_permissions.all(): return True return False
def registro_usuarios(request): usuario_log = request.user role = get_user_role(usuario_log) if (role == Estudiante or usuario_log.is_authenticated() == False): return HttpResponseRedirect('/index') if request.method == 'POST': user_form = RegistroForm(request.POST) if user_form.is_valid(): if request.POST.get('permisos') == 'Estudiante': usuario = user_form.save(commit=False) usuario = User(username=request.POST['username'], email=request.POST['email'], first_name=request.POST['first_name'], last_name=request.POST['last_name']) usuario.set_password(request.POST['password1']) usuario.save() user = User.objects.get(username= request.POST['username']) assign_role(user,'estudiante') return HttpResponseRedirect('/index') elif request.POST.get('permisos') == 'Administrador': usuario = user_form.save(commit=False) usuario = User(username=request.POST['username'], email=request.POST['email'], first_name=request.POST['first_name'], last_name=request.POST['last_name']) usuario.set_password(request.POST['password1']) usuario.save() user = User.objects.get(username= request.POST['username']) assign_role(user,'administrador') return HttpResponseRedirect('/index') elif request.POST.get('permisos') == 'Calificador': usuario = user_form.save(commit=False) usuario = User(username=request.POST['username'], email=request.POST['email'], first_name=request.POST['first_name'], last_name=request.POST['last_name']) usuario.set_password(request.POST['password1']) usuario.save() user = User.objects.get(username= request.POST['username']) assign_role(user,'calificador') else: user_form = RegistroForm(request.POST) roles = Usuario_permisos.objects.all().order_by('id') else: user_form = RegistroForm(request.POST) roles = Usuario_permisos.objects.all().order_by('id') else: user_form = RegistroForm() roles = Usuario_permisos.objects.all().order_by('id') roles = Usuario_permisos.objects.all().order_by('id') contexto = { 'formulario':user_form,'roles':roles } return render(request,'usuario/registrar.html',contexto)
def create_user(request): stuff = request.user if not has_permission(stuff, 'create_user'): messages.warning(request, 'You have no permission to create user') return HttpResponseRedirect(reverse("hr:list")) form = CreateUserForm(request.POST or None) print request.POST print 'pass', request.POST.get('password') print 'pass2', request.POST.get('verification') if form.is_valid(): username = form.cleaned_data.get('username') password = form.cleaned_data.get('password') verification = form.cleaned_data.get('verification') image = request.FILES.get('image') role = form.cleaned_data.get('role') print username, password, verification print 'here is ', image user = User.objects.create_user(username=username, password=password) profile = UserProfile( user=user, role=role, image=image, ) profile.save() if role == 'zavsklad': Zavsklad.assign_role_to_user(user) if role == 'postavshik': Postavshik.assign_role_to_user(user) if role == 'sotrudnik': Sotrudnik.assign_role_to_user(user) role = get_user_role(user) user.role = role.title print has_permission(user, 'create_product') print form.cleaned_data.get('role') print role.title print 'user.role', user.role return HttpResponseRedirect(reverse("hr:about", kwargs={'id': user.id})) context = { 'form': form, } return render(request, 'create_user.html', context)
def nueva_citacion(request): #Validacion, para que el usuario que este registrado no pueda ingresar al formulario de inscripcion role = get_user_role(request.user) if request.user.is_anonymous() or role == Estudiante: #Redireccion a Raiz return HttpResponseRedirect('/index') if request.method == 'POST': #recibir los datos form = CitacionForm(request.POST) if form.is_valid(): form.save() return redirect('inscripcion:agendar_citas') else: form = CitacionForm() form.fields['responsable'].queryset = User.objects.filter( groups__name='calificador') else: form = CitacionForm() form.fields["responsable"].queryset = User.objects.filter( groups__name='calificador') return render(request, 'inscripcion/admin/citacion_form.html', {'form': form})
def has_role(user, roles): if user and user.is_superuser: return True if not isinstance(roles, list): roles = [roles] normalized_roles = [] for role in roles: if not inspect.isclass(role): role = RolesManager.retrieve_role(role) normalized_roles.append(role) try: user_role = get_user_role(user) except ObjectDoesNotExist: return False if not user_role: return False return user_role in normalized_roles
def test_assign_role(self): user = self.user assign_role(user, 'sho_role1') self.assertEquals(get_user_role(user), ShoRole1)
def test_get_user_role(self): user = self.user user_role = Role1.assign_role_to_user(user) self.assertEquals(get_user_role(user), Role1)
def test_user_without_role(self): user = self.user self.assertIsNone(get_user_role(user))
def test_get_user_role(self): user = self.user user_role = ShoRole1.assign_role_to_user(user) self.assertEquals(get_user_role(user), ShoRole1)
def get_role(self): if self.user.is_superuser: return 'Superuser' return get_user_role(self.user).__str__(self)
def nueva_inscripcion(request): #Validacion, para que el usuario que este registrado no pueda ingresar al formulario de inscripcion role = get_user_role(request.user) if role == Estudiante: return HttpResponseRedirect('/index') if request.method == 'POST': #recibir los datos form = PersonaForm(request.POST) form2 = InscripcionForm(request.POST) if (form.is_valid() and form2.is_valid()): try: data_persona = form.cleaned_data data_inscripcion = form2.cleaned_data edad_inscripcion = data_persona['edad'] diferencia = int( ((datetime.date.today() - edad_inscripcion).days) / 365) existe = Persona.objects.filter( num_identificacion=data_persona['num_identificacion'] ).count() if (existe != 0): messages.error( request, "Su Identificacion ya se encuentra registrada") form = PersonaForm(request.POST) form2 = InscripcionForm(request.POST) elif (data_persona['email'] == data_persona['email_acudiente'] ): messages.error( request, "El email de contacto debe ser diferentes al del usuario" ) form = PersonaForm(request.POST) form2 = InscripcionForm(request.POST) elif (data_persona['num_identificacion'] <= 0 or data_persona['tel_contacto'] <= 0 or data_persona['telefono_acudiente'] <= 0): messages.error( request, "Por favor revise la información diligenciada.") form = PersonaForm(request.POST) form2 = InscripcionForm(request.POST) elif (data_persona['tel_contacto'] == data_persona['telefono_acudiente']): messages.error( request, "El número de contacto debe ser diferentes al del usuario" ) form = PersonaForm(request.POST) form2 = InscripcionForm(request.POST) elif (diferencia < 18 and data_persona['tipo_identificacion'] != 2): messages.error(request, "Su tipo de documento es incorrecto") form = PersonaForm(request.POST) form2 = InscripcionForm(request.POST) else: persona = form.save(commit=False) inscripcion = form2.save(commit=False) if (diferencia < 17): persona.mayor_de_edad = False else: persona.mayor_de_edad = True persona.telefono_acudiente = 0 if request.POST.get( 'solicitud_examen') == 'Deseo presentar examen': inscripcion.sol_examen = True else: inscripcion.sol_examen = False inscripcion.estado_inscripcion = False inscripcion.cita_examen_creada = False user = User.objects.create_user( username=persona.num_identificacion, email=persona.email, password=persona.num_identificacion) persona.usuario = user assign_role(user, 'estudiante') form.save() persona_almacenada = Persona.objects.get( num_identificacion=persona.num_identificacion) inscripcion.persona = persona_almacenada inscripcion.save() alamacenamiento = agendar_inscripcion(inscripcion) return redirect('index') except: messages.error( request, "Por favor revise la información diligenciada.") form = PersonaForm(request.POST) form2 = InscripcionForm(request.POST) else: messages.error(request, "Por favor revise la información diligenciada.") form = PersonaForm(request.POST) form2 = InscripcionForm(request.POST) else: form = PersonaForm(request.POST) form2 = InscripcionForm(request.POST) return render(request, 'inscripcion/user/inscripcion_form.html', { 'form': form, 'form2': form2 })
def agendar_citas(request): #Si usario no es anonimo? (ya esta log) role = get_user_role(request.user) if request.user.is_anonymous() or role == Estudiante: #Redireccion a Raiz return HttpResponseRedirect('/index') contexto = {} if request.method == 'POST': tipo = str(request.POST.get('id_citacion_save')) idioma = request.POST.get('id_idioma_save') tap = idioma if tipo == "nuevo": form = CitacionForm(request.POST) if form.is_valid(): idioma = Idioma.objects.get(nombre=idioma) citacion = form.save(commit=False) citacion.idioma = idioma citacion.save() ## agendamiento de citas inscripciones_pendientes = Inscripcion.objects.filter( cita_examen_creada=False, estado_inscripcion=True, idioma=idioma) for inscripcion in inscripciones_pendientes: val = agendar_inscripcion(inscripcion) else: messages.error(request, "Esta intentando ingresar valores invalidos") else: cita = Citacion.objects.get(pk=tipo) cupos = cupos_asignados(tipo) form = CitacionForm(request.POST, instance=cita) if form.is_valid(): idioma = Idioma.objects.get(nombre=idioma) citacion = form.save(commit=False) if (citacion.numero_estudiantes - cupos) < 0: messages.error( request, "Esta intentando ingresar una cantidad de cupos inferior a los cuales ya hay asignados" ) else: citacion.idioma = idioma citacion.save() inscripciones_pendientes = Inscripcion.objects.filter( cita_examen_creada=False, estado_inscripcion=True, idioma=idioma) for inscripcion in inscripciones_pendientes: val = agendar_inscripcion(inscripcion) else: messages.error(request, "Esta intentando ingresar valores invalidos") else: tap = request.GET.get('tap') if (tap == "Frances"): #Set variables necesarias para este proceso idioma = Idioma.objects.get(nombre="Frances") preinscripciones = Inscripcion.objects.filter(idioma_id=idioma.id, cita_examen_creada=False, sol_examen=True, estado_inscripcion=False) preinscripciones_adultos = [] preinscripciones_ninos = [] for preinscripcion in preinscripciones: if preinscripcion.persona.mayor_de_edad == True: preinscripciones_adultos.append(preinscripcion) else: preinscripciones_ninos.append(preinscripcion) citaciones = Citacion.objects.filter( idioma_id=idioma.id).order_by('id') cantidad_citas_disponibles_adultos = 0 cantidad_citas_disponibles_ninos = 0 forms = [] #Conformacion de Formularios para envio y posterior edicion en tabla del template for citacion in citaciones: if citacion.edad.id == 1: cantidad_citas_disponibles_adultos += cupos_disponbiles( citacion.id) else: cantidad_citas_disponibles_ninos += cupos_disponbiles( citacion.id) form = CitacionForm(instance=citacion) form.fields["responsable"].queryset = User.objects.filter( groups__name='calificador') obj = { 'id': citacion.id, 'idioma': "Frances", 'form': form, 'cupos': cupos_disponbiles(citacion.id) } forms.append(obj) empty_form = CitacionForm() empty_form.fields["responsable"].queryset = User.objects.filter( groups__name='calificador') obj2 = {'idioma': "Frances", 'form': empty_form, 'nuevo': "nuevo"} forms.append(obj2) contexto['tap'] = "Frances" contexto['citaciones'] = forms contexto[ 'citaciones_no_disponibles_adultos'] = preinscripciones_adultos contexto['citaciones_no_disponibles_ninos'] = preinscripciones_ninos return render(request, 'inscripcion/admin/agendar_citas.html', contexto) elif (tap == "Italiano"): idioma = Idioma.objects.get(nombre="Italiano") preinscripciones = Inscripcion.objects.filter(idioma_id=idioma.id, cita_examen_creada=False, sol_examen=True) preinscripciones_adultos = [] preinscripciones_ninos = [] for preinscripcion in preinscripciones: if preinscripcion.persona.mayor_de_edad == True: preinscripciones_adultos.append(preinscripcion) else: preinscripciones_ninos.append(preinscripcion) citaciones = Citacion.objects.filter( idioma_id=idioma.id).order_by('id') cantidad_citas_disponibles_adultos = 0 cantidad_citas_disponibles_ninos = 0 forms = [] #Conformacion de Formularios para envio y posterior edicion en tabla del template for citacion in citaciones: if citacion.edad.id == 1: cantidad_citas_disponibles_adultos += cupos_disponbiles( citacion.id) else: cantidad_citas_disponibles_ninos += cupos_disponbiles( citacion.id) form = CitacionForm(instance=citacion) form.fields["responsable"].queryset = User.objects.filter( groups__name='calificador') obj = { 'id': citacion.id, 'idioma': "Italiano", 'form': form, 'cupos': cupos_disponbiles(citacion.id) } forms.append(obj) empty_form = CitacionForm() empty_form.fields["responsable"].queryset = User.objects.filter( groups__name='calificador') obj2 = {'idioma': "Italiano", 'form': empty_form, 'nuevo': "nuevo"} forms.append(obj2) contexto['tap'] = "Italiano" contexto['citaciones'] = forms contexto[ 'citaciones_no_disponibles_adultos'] = preinscripciones_adultos contexto['citaciones_no_disponibles_ninos'] = preinscripciones_ninos return render(request, 'inscripcion/admin/agendar_citas.html', contexto) elif (tap == "Portugues"): idioma = Idioma.objects.get(nombre="Portugues") preinscripciones = Inscripcion.objects.filter(idioma_id=idioma.id, cita_examen_creada=False, sol_examen=True) preinscripciones_adultos = [] preinscripciones_ninos = [] for preinscripcion in preinscripciones: if preinscripcion.persona.mayor_de_edad == True: preinscripciones_adultos.append(preinscripcion) else: preinscripciones_ninos.append(preinscripcion) citaciones = Citacion.objects.filter( idioma_id=idioma.id).order_by('id') cantidad_citas_disponibles_adultos = 0 cantidad_citas_disponibles_ninos = 0 forms = [] #Conformacion de Formularios para envio y posterior edicion en tabla del template for citacion in citaciones: if citacion.edad.id == 1: cantidad_citas_disponibles_adultos += cupos_disponbiles( citacion.id) else: cantidad_citas_disponibles_ninos += cupos_disponbiles( citacion.id) form = CitacionForm(instance=citacion) form.fields["responsable"].queryset = User.objects.filter( groups__name='calificador') obj = { 'id': citacion.id, 'idioma': "Portugues", 'form': form, 'cupos': cupos_disponbiles(citacion.id) } forms.append(obj) empty_form = CitacionForm() empty_form.fields["responsable"].queryset = User.objects.filter( groups__name='calificador') obj2 = {'idioma': "Portugues", 'form': empty_form, 'nuevo': "nuevo"} forms.append(obj2) contexto['tap'] = "Portugues" contexto['citaciones'] = forms contexto[ 'citaciones_no_disponibles_adultos'] = preinscripciones_adultos contexto['citaciones_no_disponibles_ninos'] = preinscripciones_ninos return render(request, 'inscripcion/admin/agendar_citas.html', contexto) else: idioma = Idioma.objects.get(nombre="Ingles") preinscripciones = Inscripcion.objects.filter(idioma_id=idioma.id, cita_examen_creada=False, sol_examen=True) preinscripciones_adultos = [] preinscripciones_ninos = [] for preinscripcion in preinscripciones: if preinscripcion.persona.mayor_de_edad == True: preinscripciones_adultos.append(preinscripcion) else: preinscripciones_ninos.append(preinscripcion) citaciones = Citacion.objects.filter( idioma_id=idioma.id).order_by('id') cantidad_citas_disponibles_adultos = 0 cantidad_citas_disponibles_ninos = 0 forms = [] #Conformacion de Formularios para envio y posterior edicion en tabla del template for citacion in citaciones: if citacion.edad.id == 1: #cantidad_citas_disponibles_adultos += citacion.numero_estudiantes cantidad_citas_disponibles_adultos += cupos_disponbiles( citacion.id) else: #cantidad_citas_disponibles_ninos += citacion.numero_estudiantes cantidad_citas_disponibles_ninos += cupos_disponbiles( citacion.id) form = CitacionForm(instance=citacion) form.fields["responsable"].queryset = User.objects.filter( groups__name='calificador') obj = { 'id': citacion.id, 'idioma': "Ingles", 'form': form, 'cupos': cupos_disponbiles(citacion.id) } forms.append(obj) empty_form = CitacionForm() empty_form.fields["responsable"].queryset = User.objects.filter( groups__name='calificador') obj2 = {'idioma': "Ingles", 'form': empty_form, 'nuevo': "nuevo"} forms.append(obj2) contexto['tap'] = "Ingles" contexto['citaciones'] = forms contexto[ 'citaciones_no_disponibles_adultos'] = preinscripciones_adultos contexto['citaciones_no_disponibles_ninos'] = preinscripciones_ninos return render(request, 'inscripcion/admin/agendar_citas.html', contexto)
def listar_citas(request): #Si usario no es anonimo? (ya esta log) role = get_user_role(request.user) if request.user.is_anonymous() or role == Estudiante: #Redireccion a Raiz return HttpResponseRedirect('/index') contexto = {} idioma1 = request.GET.get('tap') if idioma1 == None: idioma1 = "Ingles" idioma = Idioma.objects.get(nombre=idioma1) citaciones = Citacion.objects.filter(idioma_id=idioma.id) json_citaciones = serializers.serialize('json', citaciones) for citacion in citaciones: preinscripciones = Inscripcion.objects.filter(idioma_id=idioma.id, cita_examen_creada=False, sol_examen=True, estado_inscripcion=True) citacion_mayor_edad = False if citacion.edad.descripcion_edad == "Adultos": citacion_mayor_edad = True else: citacion_mayor_edad = False control_loop = cupos_disponbiles(citacion.id) iterator = 0 for inscripcion in preinscripciones: if iterator == control_loop: break if inscripcion.persona.mayor_de_edad == citacion_mayor_edad: inscripcion.cita_examen_creada = True inscripcion.save() solicitud = Inscripcion_Examen(inscripcion=inscripcion, citacion=citacion, citacion_enviada=False) solicitud.save() iterator += 1 lista = [] registros = Inscripcion_Examen.objects.filter( inscripcion__cita_examen_creada=True, inscripcion__idioma=idioma) for registro in registros: citaciones_disponibles = Citacion.objects.filter( idioma=registro.citacion.idioma, edad=registro.citacion.edad, fecha_examen__gte=datetime.date.today()).exclude( pk=registro.citacion.id) citas_disponibles = [] for citas in citaciones_disponibles: cupos = cupos_disponbiles(citas.id) if cupos > 0: citas_disponibles.append(citas) form = ExamenForm(instance=registro) obj = { 'registro': registro, 'form': form, 'citas_disponibles': citas_disponibles, } lista.append(obj) contexto['current_date'] = datetime.date.today() contexto['tap'] = idioma1 contexto['citaciones'] = citaciones contexto['citas'] = lista contexto['idioma'] = idioma.nombre contexto['json_citaciones'] = json_citaciones return render(request, 'inscripcion/admin/listar_citas.html', contexto)