Skip to content

Commit

Permalink
first commit
Browse files Browse the repository at this point in the history
  • Loading branch information
rohit56 committed Jul 18, 2018
0 parents commit 01a83f4
Show file tree
Hide file tree
Showing 87 changed files with 2,569 additions and 0 deletions.
1 change: 1 addition & 0 deletions .idea/.name

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 21 additions & 0 deletions .idea/employee management system.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions .idea/encodings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

37 changes: 37 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions .idea/scopes/scope_settings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1,137 changes: 1,137 additions & 0 deletions .idea/workspace.xml

Large diffs are not rendered by default.

Binary file added db.sqlite3
Binary file not shown.
Empty file added employee/__init__.py
Empty file.
Binary file added employee/__pycache__/__init__.cpython-36.pyc
Binary file not shown.
Binary file added employee/__pycache__/admin.cpython-36.pyc
Binary file not shown.
Binary file added employee/__pycache__/forms.cpython-36.pyc
Binary file not shown.
Binary file added employee/__pycache__/middlewares.cpython-36.pyc
Binary file not shown.
Binary file added employee/__pycache__/models.cpython-36.pyc
Binary file not shown.
Binary file added employee/__pycache__/urls.cpython-36.pyc
Binary file not shown.
Binary file added employee/__pycache__/views.cpython-36.pyc
Binary file not shown.
5 changes: 5 additions & 0 deletions employee/admin.py
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)

5 changes: 5 additions & 0 deletions employee/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.apps import AppConfig


class EmployeeConfig(AppConfig):
name = 'employee'
36 changes: 36 additions & 0 deletions employee/forms.py
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
20 changes: 20 additions & 0 deletions employee/middlewares.py
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
31 changes: 31 additions & 0 deletions employee/migrations/0001_initial.py
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',),
},
),
]
Empty file added employee/migrations/__init__.py
Empty file.
Binary file not shown.
Binary file not shown.
27 changes: 27 additions & 0 deletions employee/models.py
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()



3 changes: 3 additions & 0 deletions employee/tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.test import TestCase

# Create your tests here.
10 changes: 10 additions & 0 deletions employee/urls.py
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'),
]
111 changes: 111 additions & 0 deletions employee/views.py
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


Empty file added ems/__init__.py
Empty file.
Binary file added ems/__pycache__/__init__.cpython-36.pyc
Binary file not shown.
Binary file added ems/__pycache__/decorators.cpython-36.pyc
Binary file not shown.
Binary file added ems/__pycache__/settings.cpython-36.pyc
Binary file not shown.
Binary file added ems/__pycache__/urls.cpython-36.pyc
Binary file not shown.
Binary file added ems/__pycache__/wsgi.cpython-36.pyc
Binary file not shown.
22 changes: 22 additions & 0 deletions ems/decorators.py
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
Loading

0 comments on commit 01a83f4

Please sign in to comment.