-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
- Loading branch information
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Large diffs are not rendered by default.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
from django.contrib import admin | ||
from employee.models import * | ||
|
||
admin.site.register(Profile) | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
from django.apps import AppConfig | ||
|
||
|
||
class EmployeeConfig(AppConfig): | ||
name = 'employee' |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
from django import forms | ||
from django.core.exceptions import ValidationError | ||
from django.contrib.auth.models import User, Group | ||
|
||
class UserForm(forms.ModelForm): | ||
password = forms.CharField(widget=forms.PasswordInput) | ||
role = forms.ModelChoiceField(queryset=Group.objects.all()) | ||
|
||
class Meta(): | ||
model = User | ||
fields = ['first_name', 'last_name', 'username', 'email', 'password', 'role'] | ||
|
||
# excludes=[] | ||
|
||
label = { | ||
'password': 'Password' | ||
} | ||
|
||
def __init__(self, *args, **kwargs): | ||
if kwargs.get('instance'): | ||
initial = kwargs.setdefault('initial', {}) | ||
if kwargs['instance'].groups.all(): | ||
initial['role'] = kwargs['instance'].groups.all()[0] | ||
else: | ||
initial['role'] = None | ||
forms.ModelForm.__init__(self, *args, **kwargs) | ||
|
||
|
||
def save(self): | ||
password = self.cleaned_data.pop('password') | ||
role = self.cleaned_data.pop('role') | ||
u = super().save() | ||
u.groups.set([role]) | ||
u.set_password(password) | ||
u.save() | ||
return u |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
class RoleMiddleware: | ||
def __init__(self, get_response): | ||
self.get_response = get_response | ||
|
||
def __call__(self, request): | ||
response = self.get_response(request) | ||
return response | ||
|
||
def process_view(self, request, view_func, *view_args, **view_kargs): | ||
if request.user.is_authenticated: | ||
request.role = None | ||
groups = request.user.groups.all() | ||
if groups: | ||
request.role = groups[0].name | ||
|
||
#def process_exception(self, request, exception): | ||
# pass | ||
|
||
# def process_template_response(self, request, response): | ||
# pass |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
# -*- coding: utf-8 -*- | ||
# Generated by Django 1.9.1 on 2018-05-04 12:30 | ||
from __future__ import unicode_literals | ||
|
||
from django.conf import settings | ||
from django.db import migrations, models | ||
import django.db.models.deletion | ||
|
||
|
||
class Migration(migrations.Migration): | ||
|
||
initial = True | ||
|
||
dependencies = [ | ||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), | ||
] | ||
|
||
operations = [ | ||
migrations.CreateModel( | ||
name='Profile', | ||
fields=[ | ||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||
('designation', models.CharField(max_length=20)), | ||
('salary', models.IntegerField(blank=True, null=True)), | ||
('usr', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), | ||
], | ||
options={ | ||
'ordering': ('-salary',), | ||
}, | ||
), | ||
] |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
from django.db import models | ||
from django.contrib.auth.models import User | ||
from django.db.models.signals import post_save | ||
from django.dispatch import receiver | ||
|
||
class Profile(models.Model): | ||
usr = models.OneToOneField(User, on_delete=models.CASCADE) | ||
designation = models.CharField(max_length=20, null=False, blank=False) | ||
salary = models.IntegerField(null=True, blank=True) | ||
|
||
class Meta(): | ||
ordering = ('-salary',) | ||
|
||
def __str__(self): | ||
return "{0} {1}".format(self.usr.first_name, self.usr.last_name) | ||
|
||
|
||
@receiver(post_save, sender=User) | ||
def user_is_created(sender, instance, created, **kwargs): | ||
print(created) | ||
if created: | ||
Profile.objects.create(usr=instance) | ||
else: | ||
instance.profile.save() | ||
|
||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
from django.test import TestCase | ||
|
||
# Create your tests here. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
from django.urls import path | ||
from employee.views import * | ||
|
||
urlpatterns = [ | ||
path('', employee_list, name='employee_list'), | ||
path('<int:id>/details/', employee_details, name='employee_details'), | ||
path('<int:id>/edit/', employee_edit, name='employee_edit'), | ||
path('add/', employee_add, name='employee_add'), | ||
path('<int:id>/delete/', employee_delete, name='employee_delete'), | ||
] |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
from django.shortcuts import render, get_object_or_404 | ||
from django.http import HttpResponseRedirect | ||
from django.contrib.auth.models import User | ||
from django.contrib.auth import authenticate, login, logout | ||
from django.contrib.auth.decorators import login_required | ||
from django.views.generic import DetailView | ||
from django.views.generic.edit import UpdateView | ||
from django.urls import reverse | ||
from django.urls import reverse_lazy | ||
from employee.forms import UserForm | ||
from ems.decorators import role_required, admin_only | ||
|
||
def user_login(request): | ||
context = {} | ||
if request.method == 'POST': | ||
username = request.POST['username'] | ||
password = request.POST['password'] | ||
user = authenticate(username=username, password=password) | ||
if user: | ||
login(request, user) | ||
if request.GET.get('next', None): | ||
return HttpResponseRedirect(request.GET['next']) | ||
return HttpResponseRedirect(reverse('employee_list')) | ||
else: | ||
context['error'] = 'Username or password is invalid !!!' | ||
return render(request, 'auth/login.html', context) | ||
else: | ||
return render(request, 'auth/login.html', context) | ||
|
||
|
||
@login_required(login_url="/login/") | ||
def success(request): | ||
context = {} | ||
context['user'] = request.user | ||
return render(request, 'auth/success.html', context) | ||
|
||
|
||
def user_logout(request): | ||
if request.method == 'POST': | ||
logout(request) | ||
return HttpResponseRedirect(reverse('user_login')) | ||
|
||
@login_required(login_url="/login/") | ||
def employee_list(request): | ||
print(request.role) | ||
context = {} | ||
context['us'] = User.objects.all() | ||
context['title'] = 'Employees' | ||
return render(request, 'employee/index.html', context) | ||
|
||
@login_required(login_url="/login/") | ||
def employee_details(request, id:None): | ||
context = {} | ||
context['ur'] = get_object_or_404(User, id=id) | ||
return render(request, 'employee/details.html', context) | ||
|
||
@login_required(login_url="/login/") | ||
@role_required(allowed_roles=["Admin", "HR"]) | ||
def employee_add(request): | ||
if request.method == 'POST': | ||
uf = UserForm(request.POST) | ||
if uf.is_valid(): | ||
uf.save() | ||
return HttpResponseRedirect(reverse('employee_list')) | ||
else: | ||
return render(request, 'employee/add.html', {'uf': uf}) | ||
else: | ||
uf = UserForm() | ||
return render(request, 'employee/add.html', {'uf': uf}) | ||
|
||
@login_required(login_url="/login/") | ||
def employee_edit(request, id): | ||
u = get_object_or_404(User, id=id) | ||
if request.method == 'POST': | ||
uf = UserForm(request.POST, instance=u) | ||
if uf.is_valid(): | ||
uf.save() | ||
return HttpResponseRedirect(reverse('employee_list')) | ||
else: | ||
return render(request, 'employee/edit.html', {'uf': uf}) | ||
else: | ||
uf = UserForm(instance=u) | ||
return render(request, 'employee/edit.html', {'uf': uf}) | ||
|
||
@login_required(login_url="/login/") | ||
def employee_delete(request, id): | ||
u = get_object_or_404(User, id=id) | ||
if request.method == 'POST': | ||
u.delete() | ||
return HttpResponseRedirect(reverse('employee_list')) | ||
else: | ||
context = {} | ||
context['u'] = u | ||
return render(request, 'employee/delete.html', context) | ||
|
||
|
||
class ProfileUpdate(UpdateView): | ||
fields = ['designation', 'salary'] | ||
template_name = 'auth/profile_update.html' | ||
success_url = reverse_lazy('my_profile') | ||
|
||
def get_object(self): | ||
return self.request.user.profile | ||
|
||
class MyProfile(DetailView): | ||
template_name = 'auth/profile.html' | ||
|
||
def get_object(self): | ||
return self.request.user.profile | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
from django.http import HttpResponseRedirect | ||
from django.urls import reverse | ||
from django.core.exceptions import PermissionDenied | ||
|
||
|
||
def role_required(allowed_roles=[]): | ||
def decorator(view_func): | ||
def wrap(request, *args, **kwargs): | ||
if request.role in allowed_roles: | ||
return view_func(request, *args, **kwargs) | ||
else: | ||
return HttpResponseRedirect(reverse('employee_list')) | ||
return wrap | ||
return decorator | ||
|
||
def admin_only(view_func): | ||
def wrap(request, *args, **kwargs): | ||
if request.role == "HR": | ||
return view_func(request, *args, **kwargs) | ||
else: | ||
return HttpResponseRedirect(reverse('employee_list')) | ||
return wrap |