├── .gitignore ├── Management ├── __init__.py ├── apps.py ├── asgi.py ├── config.py ├── settings.py ├── storage_backends.py ├── urls.py └── wsgi.py ├── db.sqlite3 ├── hrm ├── __init__.py ├── admin.py ├── apiviews.py ├── apps.py ├── migrations │ ├── 0001_initial.py │ ├── 0002_auto_20200408_1946.py │ └── __init__.py ├── models.py ├── serializers.py ├── templatetags │ └── filter.py ├── tests.py ├── urls.py └── views.py ├── manage.py ├── media └── document │ ├── 12.jpg │ ├── cat.jfif │ ├── default.jpg │ ├── image1.jpg │ ├── image2.jpg │ └── placeholder-avatar.jpg ├── requirements.txt └── static ├── css ├── bootstrap.min.css ├── font.css ├── jquery.dataTables.min.css ├── jquery.mCustomScrollbar.min.css ├── login.css └── style.css ├── images ├── Sorting icons.psd ├── backgroundlogin.jpg ├── favicon.ico ├── sort_asc.png ├── sort_asc_disabled.png ├── sort_both.png ├── sort_desc.png └── sort_desc_disabled.png ├── js ├── bootstrap.min.js ├── dataTables.colReorder.min.js ├── fontawesome.js ├── jquery-3.3.1.js ├── jquery-3.3.1.min.js ├── jquery-3.3.1.slim.min.js ├── jquery-ui-sliderAccess.js ├── jquery-ui-timepicker-addon.js ├── jquery-ui.min.js ├── jquery.dataTables.min.js ├── jquery.mCustomScrollbar.concat.min.js ├── loader.js ├── popper.min.js └── solid.js └── templates ├── admin └── admin_filter_list.html └── hrm ├── employee_form.html ├── employee_table.html ├── home.html ├── index.html ├── login.html ├── password.html └── register.html /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | 49 | # Translations 50 | *.mo 51 | *.pot 52 | 53 | # Django stuff: 54 | *.log 55 | local_settings.py 56 | 57 | # Flask stuff: 58 | instance/ 59 | .webassets-cache 60 | 61 | # Scrapy stuff: 62 | .scrapy 63 | 64 | # Sphinx documentation 65 | docs/_build/ 66 | 67 | # PyBuilder 68 | target/ 69 | 70 | # Jupyter Notebook 71 | .ipynb_checkpoints 72 | 73 | # pyenv 74 | .python-version 75 | 76 | # celery beat schedule file 77 | celerybeat-schedule 78 | 79 | # SageMath parsed files 80 | *.sage.py 81 | 82 | # dotenv 83 | .env 84 | 85 | # virtualenv 86 | .venv 87 | venv/ 88 | ENV/ 89 | 90 | # Spyder project settings 91 | .spyderproject 92 | .spyproject 93 | 94 | # Rope project settings 95 | .ropeproject 96 | 97 | # mkdocs documentation 98 | /site 99 | 100 | # mypy 101 | .mypy_cache/ 102 | 103 | *.idea/ 104 | 105 | Management/config.py 106 | media/ 107 | db.sqlite3 108 | static/ 109 | migrations/ -------------------------------------------------------------------------------- /Management/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sawardekar/Django_Management/0921f82774497942c551b13df54b9407218d922a/Management/__init__.py -------------------------------------------------------------------------------- /Management/apps.py: -------------------------------------------------------------------------------- 1 | from suit.apps import DjangoSuitConfig 2 | 3 | 4 | class SuitConfig(DjangoSuitConfig): 5 | layout = 'horizontal' -------------------------------------------------------------------------------- /Management/asgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | ASGI config for Management project. 3 | 4 | It exposes the ASGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.0/howto/deployment/asgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.asgi import get_asgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Management.settings') 15 | 16 | application = get_asgi_application() 17 | -------------------------------------------------------------------------------- /Management/config.py: -------------------------------------------------------------------------------- 1 | DATABASE = { 2 | 'NAME': '', 3 | 'USER': '', 4 | 'PASSWORD': '', 5 | 'HOST': '127.0.0.1', 6 | 'PORT': '5432' 7 | } 8 | 9 | EMAIL_CREDENTIAL = { 10 | 'USER': '', 11 | 'PASSWORD': '' 12 | } 13 | SERVER_CREDENTIAL = { 14 | 'IP_ADDRESS': '127.0.0.1', 15 | 'PORT': '8000' 16 | } 17 | 18 | AMAZON_CREDENTIAL = { 19 | 'ACCESS_KEY_ID': '', 20 | 'SECRET_ACCESS_KEY': '', 21 | 'STORAGE_BUCKET_NAME': '' 22 | } 23 | -------------------------------------------------------------------------------- /Management/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for Management project. 3 | 4 | Generated by 'django-admin startproject' using Django 3.0.5. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.0/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/3.0/ref/settings/ 11 | """ 12 | 13 | import os 14 | from .config import * 15 | 16 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) 17 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 18 | 19 | BASE_URL = f'http://{SERVER_CREDENTIAL["IP_ADDRESS"]}:{SERVER_CREDENTIAL["PORT"]}' 20 | 21 | # Quick-start development settings - unsuitable for production 22 | # See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/ 23 | 24 | # SECURITY WARNING: keep the secret key used in production secret! 25 | SECRET_KEY = 'cqdkhtjdcvpo3z+z^$)tw8090a=*50^v99j&06pvq2w-9twkjc' 26 | 27 | # SECURITY WARNING: don't run with debug turned on in production! 28 | DEBUG = True 29 | 30 | # ALLOWED_HOSTS = [SERVER_CREDENTIAL["IP_ADDRESS"]] 31 | ALLOWED_HOSTS = ['*'] 32 | 33 | # Application definition 34 | 35 | INSTALLED_APPS = [ 36 | 'Management.apps.SuitConfig', 37 | 'django.contrib.admin', 38 | 'django.contrib.auth', 39 | 'django.contrib.contenttypes', 40 | 'django.contrib.sessions', 41 | 'django.contrib.messages', 42 | 'django.contrib.staticfiles', 43 | 'corsheaders', 44 | 'debug_toolbar', 45 | 'rest_framework', 46 | 'hrm', 47 | 'storages' 48 | ] 49 | 50 | MIDDLEWARE = [ 51 | 'django.middleware.security.SecurityMiddleware', 52 | 'django.contrib.sessions.middleware.SessionMiddleware', 53 | 'corsheaders.middleware.CorsMiddleware', 54 | 'django.middleware.common.CommonMiddleware', 55 | 'django.middleware.csrf.CsrfViewMiddleware', 56 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 57 | 'django.contrib.messages.middleware.MessageMiddleware', 58 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 59 | 'debug_toolbar.middleware.DebugToolbarMiddleware', 60 | ] 61 | # CORS Config 62 | CORS_ORIGIN_ALLOW_ALL = True 63 | CORS_ALLOW_CREDENTIALS = False 64 | 65 | ROOT_URLCONF = 'Management.urls' 66 | 67 | TEMPLATES = [ 68 | { 69 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 70 | 'DIRS': [os.path.join(BASE_DIR, 'static/templates')], 71 | 'APP_DIRS': True, 72 | 'OPTIONS': { 73 | 'context_processors': [ 74 | 'django.template.context_processors.debug', 75 | 'django.template.context_processors.request', 76 | 'django.contrib.auth.context_processors.auth', 77 | 'django.contrib.messages.context_processors.messages', 78 | ], 79 | }, 80 | }, 81 | ] 82 | 83 | WSGI_APPLICATION = 'Management.wsgi.application' 84 | 85 | 86 | # Database 87 | # https://docs.djangoproject.com/en/3.0/ref/settings/#databases 88 | if DATABASE: 89 | DATABASES = { 90 | 'default': { 91 | 'ENGINE': 'django.db.backends.postgresql', 92 | 'NAME': DATABASE['NAME'], 93 | 'USER': DATABASE['USER'], 94 | 'PASSWORD': DATABASE['PASSWORD'], 95 | 'HOST': DATABASE['HOST'], 96 | 'PORT': DATABASE['PORT'], 97 | } 98 | } 99 | else: 100 | DATABASES = { 101 | 'default': { 102 | 'ENGINE': 'django.db.backends.sqlite3', 103 | 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 104 | } 105 | } 106 | 107 | # Password validation 108 | # https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators 109 | 110 | AUTH_PASSWORD_VALIDATORS = [ 111 | { 112 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 113 | }, 114 | { 115 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 116 | }, 117 | { 118 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 119 | }, 120 | { 121 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 122 | }, 123 | ] 124 | 125 | 126 | # Internationalization 127 | # https://docs.djangoproject.com/en/3.0/topics/i18n/ 128 | 129 | LANGUAGE_CODE = 'en-us' 130 | 131 | TIME_ZONE = 'Asia/Kolkata' 132 | 133 | USE_I18N = True 134 | 135 | USE_L10N = True 136 | 137 | USE_TZ = False 138 | 139 | 140 | # Static files (CSS, JavaScript, Images) 141 | # https://docs.djangoproject.com/en/3.0/howto/static-files/ 142 | 143 | # debug toolbar refer this ip address 144 | INTERNAL_IPS = [SERVER_CREDENTIAL["IP_ADDRESS"]] 145 | 146 | # https://www.guru99.com/download-install-postgresql.html 147 | 148 | STATIC_URL = '/static/' 149 | STATICFILES_DIRS = ( 150 | os.path.join(BASE_DIR, 'static'), 151 | ) 152 | 153 | STATIC_ROOT = os.path.join(BASE_DIR, 'static_root') 154 | 155 | MEDIA_URL = '/media/' 156 | MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 157 | 158 | LOGIN_URL = '/login' 159 | 160 | # Email Configuration 161 | EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' 162 | EMAIL_HOST = 'smtp.gmail.com' 163 | EMAIL_PORT = 587 164 | if EMAIL_CREDENTIAL: 165 | EMAIL_HOST_USER = EMAIL_CREDENTIAL['USER'] 166 | EMAIL_HOST_PASSWORD = EMAIL_CREDENTIAL['PASSWORD'] 167 | else: 168 | EMAIL_HOST_USER = 'demo@gmail.com' 169 | EMAIL_HOST_PASSWORD = 'demo123' 170 | EMAIL_USE_SSL = False 171 | EMAIL_USE_TLS = True 172 | 173 | # AWS Configuration 174 | AWS_ACCESS_KEY_ID = AMAZON_CREDENTIAL['ACCESS_KEY_ID'] 175 | AWS_SECRET_ACCESS_KEY = AMAZON_CREDENTIAL['SECRET_ACCESS_KEY'] 176 | AWS_STORAGE_BUCKET_NAME = AMAZON_CREDENTIAL['STORAGE_BUCKET_NAME'] 177 | AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME 178 | AWS_S3_OBJECT_PARAMETERS = { 179 | 'CacheControl': 'max-age=86400', 180 | } 181 | # STATICFILES_LOCATION = 'static' 182 | MEDIAFILES_LOCATION = 'media' 183 | # AWS_DEFAULT_ACL = None 184 | # AWS_S3_FILE_OVERWRITE = False 185 | # STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, STATICFILES_LOCATION) 186 | # STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' 187 | # STATICFILES_STORAGE = 'Management.storage_backends.StaticStorage' 188 | DEFAULT_FILE_STORAGE = 'Management.storage_backends.MediaStorage' -------------------------------------------------------------------------------- /Management/storage_backends.py: -------------------------------------------------------------------------------- 1 | from django.conf import settings 2 | from storages.backends.s3boto3 import S3Boto3Storage 3 | 4 | # 5 | # class StaticStorage(S3Boto3Storage): 6 | # location = settings.STATICFILES_LOCATION 7 | 8 | 9 | class MediaStorage(S3Boto3Storage): 10 | location = settings.MEDIAFILES_LOCATION 11 | file_overwrite = False -------------------------------------------------------------------------------- /Management/urls.py: -------------------------------------------------------------------------------- 1 | """Management URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/3.0/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: path('', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.urls import include, path 14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 15 | """ 16 | from django.conf import settings 17 | from django.contrib import admin 18 | from django.urls import path, include 19 | # from django.conf.urls.static import static 20 | from django.contrib.staticfiles.urls import static, staticfiles_urlpatterns 21 | 22 | urlpatterns = [ 23 | path('admin/', admin.site.urls), 24 | path('', include('hrm.urls')) 25 | ] 26 | if settings.DEBUG: 27 | import debug_toolbar 28 | urlpatterns += [ 29 | path('__debug__/', include(debug_toolbar.urls)), 30 | ] 31 | urlpatterns += staticfiles_urlpatterns() 32 | urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 33 | urlpatterns += static(settings.STATIC_ROOT, document_root=settings.STATIC_ROOT) -------------------------------------------------------------------------------- /Management/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for Management project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.0/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Management.settings') 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /db.sqlite3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sawardekar/Django_Management/0921f82774497942c551b13df54b9407218d922a/db.sqlite3 -------------------------------------------------------------------------------- /hrm/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sawardekar/Django_Management/0921f82774497942c551b13df54b9407218d922a/hrm/__init__.py -------------------------------------------------------------------------------- /hrm/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from django.contrib.auth.models import Group 3 | from django.urls import path 4 | from django.http import HttpResponseRedirect 5 | from django.utils.html import format_html 6 | from hrm.models import Employee, EmployeeType, Product 7 | # Register your models here. 8 | 9 | 10 | # Admin Action Functions to update all employee gender as Male 11 | def update_gender_all(modeladmin, request, queryset): 12 | queryset.update(gender='Male') 13 | 14 | 15 | # Action description 16 | update_gender_all.short_description = "Mark Selected Gender update as Male" 17 | 18 | 19 | class EmployeeAdmin(admin.ModelAdmin): 20 | exclude = ('created_at',) # exclude list of fields those not display in admin form 21 | # fields = ('name', 'address', 'gender','age') # list of fields display in admin form 22 | # readonly_fields = ('age',) # list of fields as readonly [NonEditable fields] 23 | sortable_by = 'id' # field 'id' sorted by descending order 24 | date_hierarchy = 'created_at' # field 'created_at' as date field display as descending order 25 | search_fields = ['name', 'address', 'gender'] # list of fields search in admin table 26 | list_display = ('image_tag', 'name', 'address','email','gender','age','mobile','type','get_products','display_age') # list of fields display in admin table 27 | list_display_links = ('name', 'address') # list of fields display in table show as link 28 | list_select_related = ('type',) # select_related in added only foreign key fields for query performance 29 | list_filter = ('name',) # list of fields filter in admin table 30 | list_editable = ('age',) # list of fields editable in admin table 31 | filter_vertical = ('product',) # filter vertical in added only manytomany fields for filter will displayed 32 | actions = [update_gender_all] # admin action function called 33 | # group wise fields display in admin form 34 | # fieldsets = [ 35 | # ('Body', {'classes': ('full-width',), 'fields': ('address',)}) 36 | # ] 37 | change_list_template = 'admin/admin_filter_list.html' # admin template called 38 | 39 | # manytomany fields display in admin table and multiple value separate by comma 40 | def get_products(self, obj): 41 | return ", ".join([p.name for p in obj.product.all()]) 42 | 43 | # custom url created in admin table and added in django url 44 | def get_urls(self): 45 | urls = super().get_urls() 46 | custom_urls = [ 47 | path('age//', self.update_age) 48 | ] 49 | return custom_urls + urls 50 | 51 | # all employee age updated 52 | def update_age(self, request, age_count): 53 | self.model.objects.all().update(age=age_count) 54 | self.message_user(request, 'All Employee Age changes Successfully') 55 | return HttpResponseRedirect("../") 56 | 57 | # custom admin function employee age wise font size increase 58 | def display_age(self, obj): 59 | display_size = obj.age if obj.age <= 60 else 60 60 | return format_html( 61 | f'{obj.age}' 62 | ) 63 | 64 | # unregister app 65 | admin.site.unregister(Group) 66 | 67 | # register app 68 | admin.site.register(Employee, EmployeeAdmin) 69 | admin.site.register(EmployeeType) 70 | admin.site.register(Product) 71 | 72 | # admin header and title modification 73 | admin.site.site_header = "Admin DashBoard" 74 | admin.site.site_title = "Ecommerce" 75 | admin.site.index_title = '' 76 | 77 | 78 | # install django suit using below command 79 | # pip install https://github.com/darklow/django-suit/tarball/v2 -------------------------------------------------------------------------------- /hrm/apiviews.py: -------------------------------------------------------------------------------- 1 | from rest_framework.views import APIView 2 | from rest_framework.response import Response 3 | from rest_framework.parsers import FileUploadParser 4 | from rest_framework import status 5 | from django.http import Http404 6 | # from django.shortcuts import get_object_or_404 7 | from hrm.models import Employee 8 | from hrm.serializers import EmployeeSerializer 9 | 10 | 11 | class EmployeeDetail(APIView): 12 | """ 13 | Serializers define the API representation. 14 | """ 15 | parser_class = (FileUploadParser,) 16 | 17 | def get_object(self, pk): 18 | try: 19 | return Employee.objects.select_related('type').prefetch_related('product').get(pk=pk) 20 | except Employee.DoesNotExist: 21 | raise Http404 22 | 23 | def get(self, request, pk=None): 24 | if pk: 25 | employee = self.get_object(pk) 26 | serializer = EmployeeSerializer(employee) 27 | else: 28 | employee = Employee.objects.all().select_related('type').prefetch_related('product') 29 | serializer = EmployeeSerializer(employee, many=True) 30 | return Response(serializer.data, status=status.HTTP_200_OK) 31 | 32 | def post(self, request, pk=None): 33 | if request.data.__contains__('product'): 34 | if isinstance(request.data['product'], str) and len(request.data['product']): 35 | product_list = (request.data['product']).split(",") 36 | request.data.setlist('product', product_list) 37 | if not len(request.data['product']): 38 | request.data.pop('product') 39 | if request.data.__contains__('type'): 40 | if isinstance(request.data['type'], str) and not len(request.data['type']): 41 | request.data['type'] = None 42 | serializer = EmployeeSerializer(data=request.data) 43 | if serializer.is_valid(): 44 | serializer.save() 45 | return Response(serializer.data, status=status.HTTP_201_CREATED) 46 | return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 47 | 48 | def put(self, request, pk): 49 | if not request.POST._mutable: 50 | request.POST._mutable = True 51 | employee = self.get_object(pk) 52 | if request.data.__contains__('product'): 53 | if isinstance(request.data['product'], str) and len(request.data['product']): 54 | product_list = (request.data['product']).split(",") 55 | request.data.setlist('product', product_list) 56 | if not len(request.data['product']): 57 | request.data.pop('product') 58 | if request.data.__contains__('type'): 59 | if isinstance(request.data['type'], str) and not len(request.data['type']): 60 | request.data['type'] = None 61 | serializer = EmployeeSerializer(employee, data=request.data) 62 | if serializer.is_valid(): 63 | serializer.save() 64 | return Response(serializer.data, status=status.HTTP_202_ACCEPTED) 65 | return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 66 | 67 | def delete(self, request, pk): 68 | employee = self.get_object(pk) 69 | employee.delete() 70 | return Response(status=status.HTTP_204_NO_CONTENT) 71 | -------------------------------------------------------------------------------- /hrm/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class HrmConfig(AppConfig): 5 | name = 'hrm' 6 | -------------------------------------------------------------------------------- /hrm/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.5 on 2020-04-08 19:19 2 | 3 | import django.contrib.postgres.fields 4 | import django.contrib.postgres.fields.jsonb 5 | from django.db import migrations, models 6 | import django.db.models.deletion 7 | import django.utils.timezone 8 | 9 | 10 | class Migration(migrations.Migration): 11 | 12 | initial = True 13 | 14 | dependencies = [ 15 | ] 16 | 17 | operations = [ 18 | migrations.CreateModel( 19 | name='EmployeeType', 20 | fields=[ 21 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 22 | ('name', models.CharField(blank=True, max_length=500, null=True, unique=True)), 23 | ], 24 | ), 25 | migrations.CreateModel( 26 | name='Product', 27 | fields=[ 28 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 29 | ('name', models.CharField(blank=True, max_length=500, null=True, unique=True)), 30 | ], 31 | ), 32 | migrations.CreateModel( 33 | name='Employee', 34 | fields=[ 35 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 36 | ('photo', models.ImageField(blank=True, null=True, upload_to='document')), 37 | ('name', models.CharField(blank=True, max_length=500, null=True, unique=True)), 38 | ('address', models.CharField(blank=True, max_length=500, null=True, unique=True)), 39 | ('email', models.CharField(blank=True, max_length=500, null=True, unique=True)), 40 | ('gender', models.TextField(blank=True, choices=[('Male', 'Male'), ('Female', 'Female')], default='', null=True)), 41 | ('age', models.IntegerField(blank=True, null=True)), 42 | ('mobile', models.BigIntegerField(blank=True, null=True, unique=True)), 43 | ('status', models.NullBooleanField(default=True)), 44 | ('credit', models.FloatField(blank=True, default=0.0, null=True)), 45 | ('created_at', models.DateTimeField(blank=True, default=django.utils.timezone.now, null=True)), 46 | ('birth_date', models.DateTimeField(blank=True, null=True)), 47 | ('meta_data', django.contrib.postgres.fields.jsonb.JSONField(blank=True, null=True)), 48 | ('production_user', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True, max_length=500, null=True), blank=True, null=True, size=None)), 49 | ('product', models.ManyToManyField(blank=True, null=True, to='hrm.Product')), 50 | ('type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='hrm.EmployeeType')), 51 | ], 52 | ), 53 | ] 54 | -------------------------------------------------------------------------------- /hrm/migrations/0002_auto_20200408_1946.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.5 on 2020-04-08 19:46 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('hrm', '0001_initial'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='employee', 15 | name='birth_date', 16 | field=models.DateField(blank=True, null=True), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /hrm/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sawardekar/Django_Management/0921f82774497942c551b13df54b9407218d922a/hrm/migrations/__init__.py -------------------------------------------------------------------------------- /hrm/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from django.utils.timezone import now 3 | from django.contrib.postgres.fields import ArrayField, JSONField 4 | from django.utils.html import mark_safe 5 | from django.contrib.auth.models import User 6 | from django.db.models.signals import post_save 7 | from django.dispatch import receiver 8 | from django.core.mail import send_mail 9 | from django.conf import settings 10 | # Create your models here. 11 | 12 | GENDER_STATUS = ( 13 | ('Male','Male'), 14 | ('Female','Female') 15 | ) 16 | 17 | 18 | class Employee(models.Model): 19 | photo = models.ImageField(upload_to='document',blank=True, null=True) 20 | name = models.CharField(max_length=500, blank=True, null=True, unique=True) 21 | address = models.CharField(max_length=500, blank=True, null=True, unique=True) 22 | email = models.CharField(max_length=500, blank=True, null=True, unique=True) 23 | gender = models.TextField(choices=GENDER_STATUS, default='', blank=True, null=True) 24 | age = models.IntegerField(blank=True, null=True) 25 | mobile = models.BigIntegerField(unique=True, blank=True, null=True) 26 | status = models.NullBooleanField(default=True) 27 | credit = models.FloatField(blank=True, null=True,default=0.0) 28 | created_at = models.DateTimeField(blank=True, null=True, default=now) 29 | birth_date = models.DateField(blank=True, null=True) 30 | type = models.ForeignKey('EmployeeType', models.DO_NOTHING, blank=True, null=True) 31 | product = models.ManyToManyField('Product', blank=True, null=True) 32 | meta_data = JSONField(blank=True, null=True) 33 | production_user = ArrayField(models.CharField(max_length=500, blank=True, null=True), null=True, blank=True) 34 | 35 | def __str__(self): 36 | return self.name 37 | 38 | def image_tag(self): 39 | if self.photo: 40 | return mark_safe('' % (settings.AWS_S3_CUSTOM_DOMAIN, self.photo)) 41 | else: 42 | return mark_safe('' % (settings.AWS_S3_CUSTOM_DOMAIN)) 43 | 44 | image_tag.short_description = 'Image' 45 | 46 | 47 | class EmployeeType(models.Model): 48 | name = models.CharField(max_length=500, blank=True, null=True, unique=True) 49 | 50 | def __str__(self): 51 | return self.name 52 | 53 | 54 | class Product(models.Model): 55 | name = models.CharField(max_length=500, blank=True, null=True, unique=True) 56 | 57 | def __str__(self): 58 | return self.name 59 | 60 | 61 | @receiver(post_save, sender=User) 62 | def save_user(sender, instance, **kwargs): 63 | if instance.email: 64 | if instance.last_login: 65 | send_mail('Security Alert', 'Hello Sir,' 66 | '\n Your personal info has modified.' 67 | '\n please check it other wise contact to administration , Click on ' 68 | f'{settings.BASE_URL}/admin' 69 | '\n do not reply', 70 | settings.EMAIL_HOST_USER, [instance.email]) 71 | else: 72 | send_mail('User Creation', 'Hello Sir,' 73 | '\n Welcome to xyz company.' 74 | '\n Please login offical portal, Click on ' 75 | f'{settings.BASE_URL}/admin' 76 | '\n do not reply', 77 | settings.EMAIL_HOST_USER, [instance.email]) -------------------------------------------------------------------------------- /hrm/serializers.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | from hrm.models import Employee, EmployeeType, Product, GENDER_STATUS 3 | 4 | 5 | class EmployeeTypeSerializer(serializers.ModelSerializer): 6 | name = serializers.CharField(required=False) 7 | 8 | class Meta: 9 | model = EmployeeType 10 | fields = '__all__' 11 | 12 | 13 | class ProductSerializer(serializers.ModelSerializer): 14 | name = serializers.CharField(required=True) 15 | 16 | class Meta: 17 | model = Product 18 | fields = '__all__' 19 | 20 | 21 | class JSONSerializerField(serializers.Field): 22 | """ Serializer for JSONField -- required to make field writable""" 23 | def to_internal_value(self, data): 24 | return data 25 | 26 | def to_representation(self, value): 27 | return value 28 | 29 | 30 | class EmployeeSerializer(serializers.ModelSerializer): 31 | name = serializers.CharField(required=False) 32 | address = serializers.CharField(required=False) 33 | email = serializers.EmailField(required=False) 34 | gender = serializers.ChoiceField(choices=GENDER_STATUS, required=False) 35 | age = serializers.IntegerField(required=False) 36 | mobile = serializers.IntegerField(required=False) 37 | photo = serializers.ImageField(max_length=None, use_url=True, allow_null=True, required=False) 38 | status = serializers.BooleanField(required=False) 39 | credit = serializers.FloatField(required=False) 40 | created_at = serializers.DateTimeField(required=False) 41 | # type = EmployeeTypeSerializer(required=False) 42 | type = serializers.SlugRelatedField(required=False, slug_field='name', queryset=EmployeeType.objects.all(), allow_null=True) 43 | # product = ProductSerializer(required=False, many=True) 44 | product = serializers.SlugRelatedField(required=False, slug_field='name', many=True, queryset=Product.objects.all()) 45 | meta_data = JSONSerializerField(required=False) 46 | production_user = serializers.ListField(child=serializers.CharField(), required=False) 47 | 48 | class Meta: 49 | model = Employee 50 | fields = '__all__' 51 | 52 | 53 | -------------------------------------------------------------------------------- /hrm/templatetags/filter.py: -------------------------------------------------------------------------------- 1 | from django import template 2 | register = template.Library() 3 | 4 | 5 | @register.filter(name='image_value') 6 | def image_value(value): 7 | return str(value).endswith(('.png','.jpg','.jpeg','.gif','JPG','JPEG','jfif')) 8 | 9 | 10 | @register.filter(name='is_list') 11 | def is_list(value): 12 | return isinstance(value, list) -------------------------------------------------------------------------------- /hrm/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /hrm/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path, include 2 | from rest_framework import routers 3 | from hrm import views 4 | from hrm.apiviews import EmployeeDetail 5 | 6 | router = routers.DefaultRouter() 7 | router.register(r'type', views.EmployeeTypeViewSet, basename="type") 8 | router.register(r'product', views.ProductViewSet, basename="product") 9 | 10 | urlpatterns = [ 11 | path('', views.index, name='index'), 12 | path('login', views.user_login, name='login'), 13 | path('logout', views.user_logout, name='logout'), 14 | path('register', views.user_register, name='register'), 15 | path('restpassword', views.user_restpassword, name='restpassword'), 16 | path('employee', views.employee_table, name="employee_table"), 17 | path('employee/', views.employee_form, name="employee_create"), 18 | path('employee/', views.employee_form, name="employee_modified"), 19 | path('viewset/', include(router.urls)), 20 | path('emp/', EmployeeDetail.as_view(), name="emp_record"), 21 | path('emp//', EmployeeDetail.as_view(), name="emp_modified"), 22 | ] 23 | 24 | -------------------------------------------------------------------------------- /hrm/views.py: -------------------------------------------------------------------------------- 1 | import requests, json 2 | from django.urls import reverse 3 | from django.shortcuts import render 4 | from rest_framework import viewsets 5 | # from django.core import serializers 6 | from django.contrib.auth import authenticate, login, logout 7 | from django.contrib.auth.decorators import login_required 8 | from django.http import HttpResponseRedirect, HttpResponse 9 | from django.db import connection 10 | from django.contrib.auth.models import User 11 | from hrm.serializers import EmployeeTypeSerializer, ProductSerializer 12 | from hrm.models import EmployeeType, Product 13 | # Create your views here. 14 | 15 | 16 | @login_required 17 | def index(request): 18 | cursor = connection.cursor() 19 | cursor.execute(''' 20 | select type.name, emp.type_count from hrm_employeetype as type, 21 | (select count(type_id) as type_count, type_id from hrm_employee group by type_id) as emp 22 | where emp.type_id = type.id 23 | ''') 24 | row = cursor.fetchall() 25 | data = [['Product', 'Type per Emp']]+[list(i) for i in row] 26 | return render(request, 'hrm/home.html', {'data': json.dumps(data)}) 27 | # if request.user.is_authenticated: 28 | # return render(request, 'hrm/home.html') 29 | # else: 30 | # return render(request, 'hrm/login.html') 31 | 32 | 33 | @login_required 34 | def user_logout(request): 35 | logout(request) 36 | return render(request, 'hrm/login.html') 37 | 38 | 39 | def user_login(request): 40 | if request.method == 'POST': 41 | username = request.POST.get('username') 42 | password = request.POST.get('password') 43 | user = authenticate(username=username, password=password) 44 | if user: 45 | if user.is_active: 46 | login(request, user) 47 | return HttpResponseRedirect(reverse('index')) 48 | else: 49 | return HttpResponse("Your account was inactive.") 50 | else: 51 | return HttpResponse("Invalid login details given") 52 | else: 53 | return render(request, 'hrm/login.html') 54 | 55 | 56 | def user_register(request): 57 | if request.method == 'POST': 58 | username = request.POST.get('username') 59 | password = request.POST.get('password') 60 | email = request.POST.get('email') 61 | try: 62 | User.objects.create_user(username=username, email=email, password=password, is_staff=True) 63 | except: 64 | return HttpResponse("User creation data is wrong.") 65 | return HttpResponseRedirect(reverse('login')) 66 | else: 67 | return render(request, 'hrm/register.html') 68 | 69 | 70 | def user_restpassword(request): 71 | if request.method == 'POST': 72 | username = request.POST.get('username') 73 | password = request.POST.get('password') 74 | try: 75 | user_obj = User.objects.get(username=username) 76 | user_obj.set_password(password) 77 | user_obj.save() 78 | except: 79 | return HttpResponse("User Does Not Exist") 80 | return HttpResponseRedirect(reverse('login')) 81 | else: 82 | return render(request, 'hrm/password.html') 83 | 84 | 85 | def employee_table(request): 86 | url_path = request.build_absolute_uri(reverse('emp_record')) 87 | response = requests.get(url_path, params=request.GET, json={}) 88 | tabledetails = response.json() 89 | return render(request,'hrm/employee_table.html',{'tabledetails': tabledetails}) 90 | 91 | 92 | def employee_form(request, pk=''): 93 | emp_type = EmployeeType.objects.values_list('name', flat=True) 94 | product_list = Product.objects.values_list('name', flat=True) 95 | return render(request, 'hrm/employee_form.html', {'pk': pk, 'emp_type': emp_type,'product_list':product_list}) 96 | 97 | 98 | class EmployeeTypeViewSet(viewsets.ModelViewSet): 99 | """ 100 | ViewSets define the view behavior. 101 | API endpoint that allows EmployeeType to be viewed or edited. 102 | """ 103 | lookup_field = 'id' 104 | serializer_class = EmployeeTypeSerializer 105 | 106 | def get_queryset(self): 107 | return EmployeeType.objects.all() 108 | 109 | 110 | class ProductViewSet(viewsets.ModelViewSet): 111 | """ 112 | ViewSets define the view behavior. 113 | API endpoint that allows Product to be viewed or edited. 114 | """ 115 | lookup_field = 'id' 116 | serializer_class = ProductSerializer 117 | 118 | def get_queryset(self): 119 | return Product.objects.all() -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """Django's command-line utility for administrative tasks.""" 3 | import os 4 | import sys 5 | 6 | 7 | def main(): 8 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Management.settings') 9 | try: 10 | from django.core.management import execute_from_command_line 11 | except ImportError as exc: 12 | raise ImportError( 13 | "Couldn't import Django. Are you sure it's installed and " 14 | "available on your PYTHONPATH environment variable? Did you " 15 | "forget to activate a virtual environment?" 16 | ) from exc 17 | execute_from_command_line(sys.argv) 18 | 19 | 20 | if __name__ == '__main__': 21 | main() 22 | -------------------------------------------------------------------------------- /media/document/12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sawardekar/Django_Management/0921f82774497942c551b13df54b9407218d922a/media/document/12.jpg -------------------------------------------------------------------------------- /media/document/cat.jfif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sawardekar/Django_Management/0921f82774497942c551b13df54b9407218d922a/media/document/cat.jfif -------------------------------------------------------------------------------- /media/document/default.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sawardekar/Django_Management/0921f82774497942c551b13df54b9407218d922a/media/document/default.jpg -------------------------------------------------------------------------------- /media/document/image1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sawardekar/Django_Management/0921f82774497942c551b13df54b9407218d922a/media/document/image1.jpg -------------------------------------------------------------------------------- /media/document/image2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sawardekar/Django_Management/0921f82774497942c551b13df54b9407218d922a/media/document/image2.jpg -------------------------------------------------------------------------------- /media/document/placeholder-avatar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sawardekar/Django_Management/0921f82774497942c551b13df54b9407218d922a/media/document/placeholder-avatar.jpg -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | asgiref==3.2.7 2 | boto3==1.13.1 3 | botocore==1.16.1 4 | certifi==2022.12.7 5 | chardet==3.0.4 6 | Django==3.1.14 7 | django-cors-headers==3.2.1 8 | django-debug-toolbar==2.2.1 9 | django-rest-framework==0.1.0 10 | django-storages==1.9.1 11 | django-suit==2.0a1 12 | djangorestframework==3.11.2 13 | docutils==0.15.2 14 | idna==2.9 15 | jmespath==0.9.5 16 | Pillow==9.3.0 17 | psycopg2==2.8.4 18 | python-dateutil==2.8.1 19 | pytz==2019.3 20 | requests==2.31.0 21 | s3transfer==0.3.3 22 | six==1.14.0 23 | sqlparse==0.4.4 24 | urllib3==1.26.5 25 | 26 | # install django suit using below command 27 | # pip install https://github.com/darklow/django-suit/tarball/v2 28 | -------------------------------------------------------------------------------- /static/css/font.css: -------------------------------------------------------------------------------- 1 | /* devanagari */ 2 | @font-face { 3 | font-family: 'Poppins'; 4 | font-style: normal; 5 | font-weight: 300; 6 | src: local('Poppins Light'), local('Poppins-Light'), url(https://fonts.gstatic.com/s/poppins/v9/pxiByp8kv8JHgFVrLDz8Z11lFc-K.woff2) format('woff2'); 7 | unicode-range: U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200C-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB; 8 | } 9 | /* latin-ext */ 10 | @font-face { 11 | font-family: 'Poppins'; 12 | font-style: normal; 13 | font-weight: 300; 14 | src: local('Poppins Light'), local('Poppins-Light'), url(https://fonts.gstatic.com/s/poppins/v9/pxiByp8kv8JHgFVrLDz8Z1JlFc-K.woff2) format('woff2'); 15 | unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; 16 | } 17 | /* latin */ 18 | @font-face { 19 | font-family: 'Poppins'; 20 | font-style: normal; 21 | font-weight: 300; 22 | src: local('Poppins Light'), local('Poppins-Light'), url(https://fonts.gstatic.com/s/poppins/v9/pxiByp8kv8JHgFVrLDz8Z1xlFQ.woff2) format('woff2'); 23 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 24 | } 25 | /* devanagari */ 26 | @font-face { 27 | font-family: 'Poppins'; 28 | font-style: normal; 29 | font-weight: 400; 30 | src: local('Poppins Regular'), local('Poppins-Regular'), url(https://fonts.gstatic.com/s/poppins/v9/pxiEyp8kv8JHgFVrJJbecmNE.woff2) format('woff2'); 31 | unicode-range: U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200C-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB; 32 | } 33 | /* latin-ext */ 34 | @font-face { 35 | font-family: 'Poppins'; 36 | font-style: normal; 37 | font-weight: 400; 38 | src: local('Poppins Regular'), local('Poppins-Regular'), url(https://fonts.gstatic.com/s/poppins/v9/pxiEyp8kv8JHgFVrJJnecmNE.woff2) format('woff2'); 39 | unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; 40 | } 41 | /* latin */ 42 | @font-face { 43 | font-family: 'Poppins'; 44 | font-style: normal; 45 | font-weight: 400; 46 | src: local('Poppins Regular'), local('Poppins-Regular'), url(https://fonts.gstatic.com/s/poppins/v9/pxiEyp8kv8JHgFVrJJfecg.woff2) format('woff2'); 47 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 48 | } 49 | /* devanagari */ 50 | @font-face { 51 | font-family: 'Poppins'; 52 | font-style: normal; 53 | font-weight: 500; 54 | src: local('Poppins Medium'), local('Poppins-Medium'), url(https://fonts.gstatic.com/s/poppins/v9/pxiByp8kv8JHgFVrLGT9Z11lFc-K.woff2) format('woff2'); 55 | unicode-range: U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200C-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB; 56 | } 57 | /* latin-ext */ 58 | @font-face { 59 | font-family: 'Poppins'; 60 | font-style: normal; 61 | font-weight: 500; 62 | src: local('Poppins Medium'), local('Poppins-Medium'), url(https://fonts.gstatic.com/s/poppins/v9/pxiByp8kv8JHgFVrLGT9Z1JlFc-K.woff2) format('woff2'); 63 | unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; 64 | } 65 | /* latin */ 66 | @font-face { 67 | font-family: 'Poppins'; 68 | font-style: normal; 69 | font-weight: 500; 70 | src: local('Poppins Medium'), local('Poppins-Medium'), url(https://fonts.gstatic.com/s/poppins/v9/pxiByp8kv8JHgFVrLGT9Z1xlFQ.woff2) format('woff2'); 71 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 72 | } 73 | /* devanagari */ 74 | @font-face { 75 | font-family: 'Poppins'; 76 | font-style: normal; 77 | font-weight: 600; 78 | src: local('Poppins SemiBold'), local('Poppins-SemiBold'), url(https://fonts.gstatic.com/s/poppins/v9/pxiByp8kv8JHgFVrLEj6Z11lFc-K.woff2) format('woff2'); 79 | unicode-range: U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200C-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB; 80 | } 81 | /* latin-ext */ 82 | @font-face { 83 | font-family: 'Poppins'; 84 | font-style: normal; 85 | font-weight: 600; 86 | src: local('Poppins SemiBold'), local('Poppins-SemiBold'), url(https://fonts.gstatic.com/s/poppins/v9/pxiByp8kv8JHgFVrLEj6Z1JlFc-K.woff2) format('woff2'); 87 | unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; 88 | } 89 | /* latin */ 90 | @font-face { 91 | font-family: 'Poppins'; 92 | font-style: normal; 93 | font-weight: 600; 94 | src: local('Poppins SemiBold'), local('Poppins-SemiBold'), url(https://fonts.gstatic.com/s/poppins/v9/pxiByp8kv8JHgFVrLEj6Z1xlFQ.woff2) format('woff2'); 95 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 96 | } 97 | /* devanagari */ 98 | @font-face { 99 | font-family: 'Poppins'; 100 | font-style: normal; 101 | font-weight: 700; 102 | src: local('Poppins Bold'), local('Poppins-Bold'), url(https://fonts.gstatic.com/s/poppins/v9/pxiByp8kv8JHgFVrLCz7Z11lFc-K.woff2) format('woff2'); 103 | unicode-range: U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200C-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB; 104 | } 105 | /* latin-ext */ 106 | @font-face { 107 | font-family: 'Poppins'; 108 | font-style: normal; 109 | font-weight: 700; 110 | src: local('Poppins Bold'), local('Poppins-Bold'), url(https://fonts.gstatic.com/s/poppins/v9/pxiByp8kv8JHgFVrLCz7Z1JlFc-K.woff2) format('woff2'); 111 | unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; 112 | } 113 | /* latin */ 114 | @font-face { 115 | font-family: 'Poppins'; 116 | font-style: normal; 117 | font-weight: 700; 118 | src: local('Poppins Bold'), local('Poppins-Bold'), url(https://fonts.gstatic.com/s/poppins/v9/pxiByp8kv8JHgFVrLCz7Z1xlFQ.woff2) format('woff2'); 119 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 120 | } 121 | -------------------------------------------------------------------------------- /static/css/jquery.dataTables.min.css: -------------------------------------------------------------------------------- 1 | table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;*cursor:hand;background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url("../images/sort_both.png")}table.dataTable thead .sorting_asc{background-image:url("../images/sort_asc.png")}table.dataTable thead .sorting_desc{background-image:url("../images/sort_desc.png")}table.dataTable thead .sorting_asc_disabled{background-image:url("../images/sort_asc_disabled.png")}table.dataTable thead .sorting_desc_disabled{background-image:url("../images/sort_desc_disabled.png")}table.dataTable tbody tr{background-color:#ffffff}table.dataTable tbody tr.selected{background-color:#B0BED9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#acbad4}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f6f6f6}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#aab7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad5}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:whitesmoke}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px 4px 4px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,.dataTables_wrapper.no-footer div.dataTables_scrollBody>table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:0.5em}} 2 | -------------------------------------------------------------------------------- /static/css/jquery.mCustomScrollbar.min.css: -------------------------------------------------------------------------------- 1 | .mCustomScrollbar{-ms-touch-action:pinch-zoom;touch-action:pinch-zoom}.mCustomScrollbar.mCS_no_scrollbar,.mCustomScrollbar.mCS_touch_action{-ms-touch-action:auto;touch-action:auto}.mCustomScrollBox{position:relative;overflow:hidden;height:100%;max-width:100%;outline:0;direction:ltr}.mCSB_container{overflow:hidden;width:auto;height:auto}.mCSB_inside>.mCSB_container{margin-right:30px}.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{margin-right:0}.mCS-dir-rtl>.mCSB_inside>.mCSB_container{margin-right:0;margin-left:30px}.mCS-dir-rtl>.mCSB_inside>.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{margin-left:0}.mCSB_scrollTools{position:absolute;width:16px;height:auto;left:auto;top:0;right:0;bottom:0;opacity:.75;filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCSB_outside+.mCSB_scrollTools{right:-26px}.mCS-dir-rtl>.mCSB_inside>.mCSB_scrollTools,.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools{right:auto;left:0}.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools{left:-26px}.mCSB_scrollTools .mCSB_draggerContainer{position:absolute;top:0;left:0;bottom:0;right:0;height:auto}.mCSB_scrollTools a+.mCSB_draggerContainer{margin:20px 0}.mCSB_scrollTools .mCSB_draggerRail{width:2px;height:100%;margin:0 auto;-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px}.mCSB_scrollTools .mCSB_dragger{cursor:pointer;width:100%;height:30px;z-index:1}.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{position:relative;width:4px;height:100%;margin:0 auto;-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px;text-align:center}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:12px}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:8px}.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonUp{display:block;position:absolute;height:20px;width:100%;overflow:hidden;margin:0 auto;cursor:pointer}.mCSB_scrollTools .mCSB_buttonDown{bottom:0}.mCSB_horizontal.mCSB_inside>.mCSB_container{margin-right:0;margin-bottom:30px}.mCSB_horizontal.mCSB_outside>.mCSB_container{min-height:100%}.mCSB_horizontal>.mCSB_container.mCS_no_scrollbar_x.mCS_x_hidden{margin-bottom:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal{width:auto;height:16px;top:auto;right:0;bottom:0;left:0}.mCustomScrollBox+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox+.mCSB_scrollTools.mCSB_scrollTools_horizontal{bottom:-26px}.mCSB_scrollTools.mCSB_scrollTools_horizontal a+.mCSB_draggerContainer{margin:0 20px}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:2px;margin:7px 0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger{width:30px;height:100%;left:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:4px;margin:6px auto}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{height:12px;margin:2px auto}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:8px;margin:4px 0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft,.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{display:block;position:absolute;width:20px;height:100%;overflow:hidden;margin:0 auto;cursor:pointer}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft{left:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{right:0}.mCSB_container_wrapper{position:absolute;height:auto;width:auto;overflow:hidden;top:0;left:0;right:0;bottom:0;margin-right:30px;margin-bottom:30px}.mCSB_container_wrapper>.mCSB_container{padding-right:30px;padding-bottom:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_vertical{bottom:20px}.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_horizontal{right:20px}.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden+.mCSB_scrollTools.mCSB_scrollTools_vertical{bottom:0}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools~.mCSB_scrollTools.mCSB_scrollTools_horizontal{right:0}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal{left:20px}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools~.mCSB_scrollTools.mCSB_scrollTools_horizontal{left:0}.mCS-dir-rtl>.mCSB_inside>.mCSB_container_wrapper{margin-right:0;margin-left:30px}.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden>.mCSB_container{padding-right:0}.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden>.mCSB_container{padding-bottom:0}.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden{margin-right:0;margin-left:0}.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden{margin-bottom:0}.mCSB_scrollTools,.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonLeft,.mCSB_scrollTools .mCSB_buttonRight,.mCSB_scrollTools .mCSB_buttonUp,.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{-webkit-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;-moz-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;-o-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;transition:opacity .2s ease-in-out,background-color .2s ease-in-out}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar{-webkit-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;-moz-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;-o-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out}.mCS-autoHide>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide>.mCustomScrollBox~.mCSB_scrollTools{opacity:0;filter:"alpha(opacity=0)";-ms-filter:"alpha(opacity=0)"}.mCS-autoHide:hover>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide:hover>.mCustomScrollBox~.mCSB_scrollTools,.mCustomScrollBox:hover>.mCSB_scrollTools,.mCustomScrollBox:hover~.mCSB_scrollTools,.mCustomScrollbar>.mCustomScrollBox>.mCSB_scrollTools.mCSB_scrollTools_onDrag,.mCustomScrollbar>.mCustomScrollBox~.mCSB_scrollTools.mCSB_scrollTools_onDrag{opacity:1;filter:"alpha(opacity=100)";-ms-filter:"alpha(opacity=100)"}.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.4);filter:"alpha(opacity=40)";-ms-filter:"alpha(opacity=40)"}.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.75);filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85);filter:"alpha(opacity=85)";-ms-filter:"alpha(opacity=85)"}.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9);filter:"alpha(opacity=90)";-ms-filter:"alpha(opacity=90)"}.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonLeft,.mCSB_scrollTools .mCSB_buttonRight,.mCSB_scrollTools .mCSB_buttonUp{background-image:url(mCSB_buttons.png);background-repeat:no-repeat;opacity:.4;filter:"alpha(opacity=40)";-ms-filter:"alpha(opacity=40)"}.mCSB_scrollTools .mCSB_buttonUp{background-position:0 0}.mCSB_scrollTools .mCSB_buttonDown{background-position:0 -20px}.mCSB_scrollTools .mCSB_buttonLeft{background-position:0 -40px}.mCSB_scrollTools .mCSB_buttonRight{background-position:0 -56px}.mCSB_scrollTools .mCSB_buttonDown:hover,.mCSB_scrollTools .mCSB_buttonLeft:hover,.mCSB_scrollTools .mCSB_buttonRight:hover,.mCSB_scrollTools .mCSB_buttonUp:hover{opacity:.75;filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCSB_scrollTools .mCSB_buttonDown:active,.mCSB_scrollTools .mCSB_buttonLeft:active,.mCSB_scrollTools .mCSB_buttonRight:active,.mCSB_scrollTools .mCSB_buttonUp:active{opacity:.9;filter:"alpha(opacity=90)";-ms-filter:"alpha(opacity=90)"}.mCS-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:rgba(0,0,0,.85)}.mCS-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:rgba(0,0,0,.9)}.mCS-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px 0}.mCS-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -20px}.mCS-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -40px}.mCS-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -56px}.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-2.mCSB_scrollTools .mCSB_draggerRail{width:4px;background-color:#fff;background-color:rgba(255,255,255,.1);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:4px;background-color:#fff;background-color:rgba(255,255,255,.75);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:4px;margin:6px auto}.mCS-light-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-light-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.mCS-light-2.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px 0}.mCS-light-2.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -20px}.mCS-light-2.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -40px}.mCS-light-2.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -56px}.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px 0}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -20px}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -40px}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -56px}.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-thick.mCSB_scrollTools .mCSB_draggerRail{width:4px;background-color:#fff;background-color:rgba(255,255,255,.1);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px;background-color:#fff;background-color:rgba(255,255,255,.75);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:4px;margin:6px 0}.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:6px;margin:5px auto}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-16px 0}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-16px -20px}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-20px -40px}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-20px -56px}.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-96px 0}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-96px -20px}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-100px -40px}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-100px -56px}.mCS-light-thin.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.1)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:2px}.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%}.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:2px;margin:7px auto}.mCS-dark-thin.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px 0}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -20px}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -40px}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -56px}.mCS-rounded.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.15)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger,.mCS-rounded.mCSB_scrollTools .mCSB_dragger{height:14px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:14px;margin:0 1px}.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger{width:14px}.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{height:14px;margin:1px 0}.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:16px;height:16px;margin:-1px 0}.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:4px}.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{height:16px;width:16px;margin:0 -1px}.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:4px;margin:6px 0}.mCS-rounded.mCSB_scrollTools .mCSB_buttonUp{background-position:0 -72px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonDown{background-position:0 -92px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonLeft{background-position:0 -112px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonRight{background-position:0 -128px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px -72px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -92px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -112px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -128px}.mCS-rounded-dots-dark.mCSB_scrollTools_vertical .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_vertical .mCSB_draggerRail{width:4px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail{background-color:transparent;background-position:center}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAANElEQVQYV2NkIAAYiVbw//9/Y6DiM1ANJoyMjGdBbLgJQAX/kU0DKgDLkaQAvxW4HEvQFwCRcxIJK1XznAAAAABJRU5ErkJggg==);background-repeat:repeat-y;opacity:.3;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail{height:4px;margin:6px 0;background-repeat:repeat-x}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonUp{background-position:-16px -72px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonDown{background-position:-16px -92px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonLeft{background-position:-20px -112px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonRight{background-position:-20px -128px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYV2NkIAAYSVFgDFR8BqrBBEifBbGRTfiPZhpYjiQFBK3A6l6CvgAAE9kGCd1mvgEAAAAASUVORK5CYII=)}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-96px -72px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-96px -92px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-100px -112px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-100px -128px}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-repeat:repeat-y;background-image:-moz-linear-gradient(left,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,.5)),color-stop(100%,rgba(255,255,255,0)));background-image:-webkit-linear-gradient(left,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-o-linear-gradient(left,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-ms-linear-gradient(left,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:linear-gradient(to right,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{background-repeat:repeat-x;background-image:-moz-linear-gradient(top,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(255,255,255,.5)),color-stop(100%,rgba(255,255,255,0)));background-image:-webkit-linear-gradient(top,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-o-linear-gradient(top,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-ms-linear-gradient(top,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:linear-gradient(to bottom,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%)}.mCS-3d-dark.mCSB_scrollTools_vertical .mCSB_dragger,.mCS-3d.mCSB_scrollTools_vertical .mCSB_dragger{height:70px}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger{width:70px}.mCS-3d-dark.mCSB_scrollTools,.mCS-3d.mCSB_scrollTools{opacity:1;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_draggerRail{-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px}.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools .mCSB_draggerRail{width:8px;background-color:#000;background-color:rgba(0,0,0,.2);box-shadow:inset 1px 0 1px rgba(0,0,0,.5),inset -1px 0 1px rgba(255,255,255,.2)}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#555}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:8px}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:8px;margin:4px 0;box-shadow:inset 0 1px 1px rgba(0,0,0,.5),inset 0 -1px 1px rgba(255,255,255,.2)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:8px;margin:4px auto}.mCS-3d.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-3d.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-3d.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-3d.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);box-shadow:inset 1px 0 1px rgba(0,0,0,.1)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-3d-thick-dark.mCSB_scrollTools,.mCS-3d-thick.mCSB_scrollTools{opacity:1;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-3d-thick-dark.mCSB_scrollTools,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer,.mCS-3d-thick.mCSB_scrollTools,.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mCSB_inside+.mCS-3d-thick-dark.mCSB_scrollTools_vertical,.mCSB_inside+.mCS-3d-thick.mCSB_scrollTools_vertical{right:1px}.mCS-3d-thick-dark.mCSB_scrollTools_vertical,.mCS-3d-thick.mCSB_scrollTools_vertical{box-shadow:inset 1px 0 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.5)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal,.mCS-3d-thick.mCSB_scrollTools_horizontal{bottom:1px;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.5)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;box-shadow:inset 1px 0 0 rgba(255,255,255,.4);width:12px;margin:2px;position:absolute;height:auto;top:0;bottom:0;left:0;right:0}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 0 1px 0 rgba(255,255,255,.4);height:12px;width:auto}.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#555}.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{background-color:#000;background-color:rgba(0,0,0,.05);box-shadow:inset 1px 1px 16px rgba(0,0,0,.1)}.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-3d-thick-dark.mCSB_scrollTools{box-shadow:inset 0 0 14px rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal{box-shadow:inset 0 1px 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 1px 0 0 rgba(255,255,255,.4),inset -1px 0 0 rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 0 1px 0 rgba(255,255,255,.4),inset 0 -1px 0 rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#777}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer{background-color:#fff;background-color:rgba(0,0,0,.05);box-shadow:inset 1px 1px 16px rgba(0,0,0,.1)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-minimal-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-minimal.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical,.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical{right:0;margin:12px 0}.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools.mCSB_scrollTools_horizontal{bottom:0;margin:0 12px}.mCS-dir-rtl>.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical,.mCS-dir-rtl>.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical{left:0;right:auto}.mCS-minimal-dark.mCSB_scrollTools_vertical .mCSB_dragger,.mCS-minimal.mCSB_scrollTools_vertical .mCSB_dragger{height:50px}.mCS-minimal-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-minimal.mCSB_scrollTools_horizontal .mCSB_dragger{width:50px}.mCS-minimal.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.2);filter:"alpha(opacity=20)";-ms-filter:"alpha(opacity=20)"}.mCS-minimal.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-minimal.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.5);filter:"alpha(opacity=50)";-ms-filter:"alpha(opacity=50)"}.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.2);filter:"alpha(opacity=20)";-ms-filter:"alpha(opacity=20)"}.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.5);filter:"alpha(opacity=50)";-ms-filter:"alpha(opacity=50)"}.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools .mCSB_draggerRail{width:6px;background-color:#000;background-color:rgba(0,0,0,.2)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px}.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:6px;margin:5px 0}.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:12px}.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:12px;margin:2px 0}.mCS-light-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset.mCSB_scrollTools .mCSB_draggerRail{width:12px;background-color:#000;background-color:rgba(0,0,0,.2)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px;margin:3px 5px;position:absolute;height:auto;top:0;bottom:0;left:0;right:0}.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{height:6px;margin:5px 3px;position:absolute;width:auto;top:0;bottom:0;left:0;right:0}.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:12px;margin:2px 0}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent;border-width:1px;border-style:solid;border-color:#fff;border-color:rgba(255,255,255,.2);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail{border-color:#000;border-color:rgba(0,0,0,.2)}.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.6)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.6)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.75)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)} -------------------------------------------------------------------------------- /static/css/login.css: -------------------------------------------------------------------------------- 1 | /* Made with love by Mutiullah Samim*/ 2 | 3 | @import "font.css"; 4 | 5 | html,body{ 6 | background-image: url("/static/images/backgroundlogin.jpg"); 7 | background-size: cover; 8 | background-repeat: no-repeat; 9 | height: 100%; 10 | font-family: 'Poppins', sans-serif; 11 | } 12 | 13 | .container{ 14 | height: 100%; 15 | align-content: center; 16 | } 17 | 18 | .card{ 19 | height: 370px; 20 | margin-top: auto; 21 | margin-bottom: auto; 22 | width: 400px; 23 | background-color: rgba(0,0,0,0.5) !important; 24 | } 25 | 26 | .social_icon span{ 27 | font-size: 60px; 28 | margin-left: 10px; 29 | color: #FFC312; 30 | } 31 | 32 | .social_icon span:hover{ 33 | color: white; 34 | cursor: pointer; 35 | } 36 | 37 | .card-header h3{ 38 | color: white; 39 | } 40 | 41 | .social_icon{ 42 | position: absolute; 43 | right: 20px; 44 | top: -45px; 45 | } 46 | 47 | .input-group-prepend span{ 48 | width: 50px; 49 | background-color: #FFC312; 50 | color: black; 51 | border:0 !important; 52 | } 53 | 54 | input:focus{ 55 | outline: 0 0 0 0 !important; 56 | box-shadow: 0 0 0 0 !important; 57 | 58 | } 59 | 60 | .remember{ 61 | color: white; 62 | } 63 | 64 | .remember input 65 | { 66 | width: 20px; 67 | height: 20px; 68 | margin-left: 15px; 69 | margin-right: 5px; 70 | } 71 | 72 | .login_btn{ 73 | color: black; 74 | background-color: #FFC312; 75 | width: 100px; 76 | } 77 | 78 | .login_btn:hover{ 79 | color: black; 80 | background-color: white; 81 | } 82 | 83 | .links{ 84 | color: white; 85 | } 86 | 87 | .links a{ 88 | margin-left: 4px; 89 | } -------------------------------------------------------------------------------- /static/css/style.css: -------------------------------------------------------------------------------- 1 | /* 2 | DEMO STYLE 3 | */ 4 | 5 | 6 | @import "font.css"; 7 | body { 8 | font-family: 'Poppins', sans-serif; 9 | background: #fafafa; 10 | } 11 | 12 | p { 13 | font-family: 'Poppins', sans-serif; 14 | font-size: 1.1em; 15 | font-weight: 300; 16 | line-height: 1.7em; 17 | color: #999; 18 | } 19 | 20 | a, 21 | a:hover, 22 | a:focus { 23 | color: inherit; 24 | text-decoration: none; 25 | transition: all 0.3s; 26 | } 27 | 28 | .navbar { 29 | padding: 15px 10px; 30 | background: #fff; 31 | border: none; 32 | border-radius: 0; 33 | margin-bottom: 40px; 34 | box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1); 35 | } 36 | 37 | .navbar-btn { 38 | box-shadow: none; 39 | outline: none !important; 40 | border: none; 41 | } 42 | 43 | .line { 44 | width: 100%; 45 | height: 1px; 46 | border-bottom: 1px dashed #ddd; 47 | margin: 40px 0; 48 | } 49 | 50 | /* --------------------------------------------------- 51 | SIDEBAR STYLE 52 | ----------------------------------------------------- */ 53 | 54 | .wrapper { 55 | display: flex; 56 | width: 100%; 57 | align-items: stretch; 58 | } 59 | 60 | #sidebar { 61 | min-width: 250px; 62 | max-width: 250px; 63 | position: fixed; 64 | background: #343436; 65 | color: #fff; 66 | transition: all 0.3s; 67 | bottom:0; 68 | top:0; 69 | z-index:999; 70 | } 71 | 72 | 73 | #sidebar .sidebar-header { 74 | padding: 20px; 75 | background: #343436; 76 | } 77 | 78 | #sidebar ul.components { 79 | padding: 20px 0; 80 | border-bottom: 1px solid #47748b; 81 | } 82 | 83 | #sidebar ul p { 84 | color: #fff; 85 | padding: 10px; 86 | } 87 | 88 | #sidebar ul li a { 89 | padding: 10px; 90 | font-size: 1.1em; 91 | display: block; 92 | } 93 | 94 | #sidebar ul li a:hover { 95 | color: #343436; 96 | background: #fff; 97 | } 98 | 99 | #sidebar ul li.active>a, 100 | a[aria-expanded="true"] { 101 | color: #fff; 102 | background: #9c9898; 103 | } 104 | 105 | a[data-toggle="collapse"] { 106 | position: relative; 107 | } 108 | 109 | .dropdown-toggle::after { 110 | display: block; 111 | position: absolute; 112 | top: 50%; 113 | right: 20px; 114 | transform: translateY(-50%); 115 | } 116 | 117 | ul ul a { 118 | font-size: 0.9em !important; 119 | padding-left: 30px !important; 120 | background: #343436; 121 | } 122 | 123 | ul.CTAs { 124 | padding: 20px; 125 | } 126 | 127 | ul.CTAs a { 128 | text-align: center; 129 | font-size: 0.9em !important; 130 | display: block; 131 | border-radius: 5px; 132 | margin-bottom: 5px; 133 | } 134 | 135 | a.download { 136 | background: #fff; 137 | color: #343436; 138 | } 139 | 140 | a.article, 141 | a.article:hover { 142 | background: #6d7fcc !important; 143 | color: #fff !important; 144 | } 145 | span.align-right { 146 | text-align:right; 147 | } 148 | /* --------------------------------------------------- 149 | CONTENT STYLE 150 | ----------------------------------------------------- */ 151 | 152 | #content { 153 | width: 100%; 154 | padding: 20px; 155 | min-height: 100vh; 156 | transition: all 0.3s; 157 | margin-left: 250px; 158 | } 159 | /* Shrinking the sidebar from 250px to 80px and center aligining its content*/ 160 | #sidebar.active { 161 | min-width: 80px; 162 | max-width: 80px; 163 | text-align: center; 164 | } 165 | 166 | /* Toggling the sidebar header content, hide the big heading [h3] and showing the small heading [strong] and vice versa*/ 167 | #sidebar .sidebar-header strong { 168 | display: none; 169 | } 170 | #sidebar.active .sidebar-header h3 { 171 | display: none; 172 | } 173 | #sidebar.active .sidebar-header strong { 174 | display: block; 175 | } 176 | 177 | #sidebar ul li a { 178 | text-align: left; 179 | } 180 | 181 | #sidebar.active ul li a { 182 | padding: 20px 10px; 183 | text-align: center; 184 | font-size: 0.85em; 185 | } 186 | 187 | #sidebar.active ul li a i { 188 | margin-right: 0; 189 | display: block; 190 | font-size: 1.8em; 191 | margin-bottom: 5px; 192 | } 193 | 194 | /* Same dropdown links padding*/ 195 | #sidebar.active ul ul a { 196 | padding: 10px !important; 197 | } 198 | 199 | /* Changing the arrow position to bottom center position, 200 | translateX(50%) works with right: 50% 201 | to accurately center the arrow */ 202 | #sidebar.active .dropdown-toggle::after { 203 | top: auto; 204 | bottom: 10px; 205 | right: 50%; 206 | -webkit-transform: translateX(50%); 207 | -ms-transform: translateX(50%); 208 | transform: translateX(50%); 209 | } 210 | /* --------------------------------------------------- 211 | MEDIAQUERIES 212 | ----------------------------------------------------- */ 213 | 214 | @media (max-width: 768px) { 215 | /* 80px and its content aligned to centre. Pushing it off the screen with the 216 | negative left margin 217 | */ 218 | #sidebar.active { 219 | min-width: 80px; 220 | max-width: 80px; 221 | text-align: center; 222 | margin-left: -80px !important; 223 | } 224 | 225 | 226 | /* Reappearing the sidebar on toggle button click */ 227 | #sidebar { 228 | margin-left: 0; 229 | } 230 | 231 | 232 | /* Toggling the sidebar header content, 233 | hide the big heading [h3] and showing the small heading [strong] and vice versa 234 | */ 235 | #sidebar .sidebar-header strong { 236 | display: none; 237 | } 238 | #sidebar.active .sidebar-header h3 { 239 | display: none; 240 | } 241 | #sidebar.active .sidebar-header strong { 242 | display: block; 243 | } 244 | 245 | /* Downsize the navigation links font size */ 246 | #sidebar.active ul li a { 247 | padding: 20px 10px; 248 | font-size: 0.85em; 249 | } 250 | 251 | #sidebar.active ul li a i { 252 | margin-right: 0; 253 | display: block; 254 | font-size: 1.8em; 255 | margin-bottom: 5px; 256 | } 257 | 258 | /* Adjust the dropdown links padding*/ 259 | #sidebar.active ul ul a { 260 | padding: 10px !important; 261 | } 262 | 263 | /* Changing the arrow position to bottom center position, 264 | translateX(50%) works with right: 50% 265 | to accurately center the arrow */ 266 | .dropdown-toggle::after { 267 | top: auto; 268 | bottom: 10px; 269 | right: 50%; 270 | -webkit-transform: translateX(50%); 271 | -ms-transform: translateX(50%); 272 | transform: translateX(50%); 273 | } 274 | } 275 | 276 | .avatar-pic { 277 | width: 150px; 278 | } -------------------------------------------------------------------------------- /static/images/Sorting icons.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sawardekar/Django_Management/0921f82774497942c551b13df54b9407218d922a/static/images/Sorting icons.psd -------------------------------------------------------------------------------- /static/images/backgroundlogin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sawardekar/Django_Management/0921f82774497942c551b13df54b9407218d922a/static/images/backgroundlogin.jpg -------------------------------------------------------------------------------- /static/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sawardekar/Django_Management/0921f82774497942c551b13df54b9407218d922a/static/images/favicon.ico -------------------------------------------------------------------------------- /static/images/sort_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sawardekar/Django_Management/0921f82774497942c551b13df54b9407218d922a/static/images/sort_asc.png -------------------------------------------------------------------------------- /static/images/sort_asc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sawardekar/Django_Management/0921f82774497942c551b13df54b9407218d922a/static/images/sort_asc_disabled.png -------------------------------------------------------------------------------- /static/images/sort_both.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sawardekar/Django_Management/0921f82774497942c551b13df54b9407218d922a/static/images/sort_both.png -------------------------------------------------------------------------------- /static/images/sort_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sawardekar/Django_Management/0921f82774497942c551b13df54b9407218d922a/static/images/sort_desc.png -------------------------------------------------------------------------------- /static/images/sort_desc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sawardekar/Django_Management/0921f82774497942c551b13df54b9407218d922a/static/images/sort_desc_disabled.png -------------------------------------------------------------------------------- /static/js/dataTables.colReorder.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | ColReorder 1.5.1 3 | ©2010-2018 SpryMedia Ltd - datatables.net/license 4 | */ 5 | (function(e){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(o){return e(o,window,document)}):"object"===typeof exports?module.exports=function(o,l){o||(o=window);if(!l||!l.fn.dataTable)l=require("datatables.net")(o,l).$;return e(l,o,o.document)}:e(jQuery,window,document)})(function(e,o,l,r){function q(a){for(var b=[],c=0,f=a.length;cb||b>=l)this.oApi._fnLog(a,1,"ColReorder 'from' index is out of bounds: "+b);else if(0>c||c>=l)this.oApi._fnLog(a,1,"ColReorder 'to' index is out of bounds: "+ 7 | c);else{j=[];d=0;for(h=l;dthis.s.fixed-1&&fMath.pow(Math.pow(this._fnCursorPosition(a,"pageX")-this.s.mouse.startX,2)+Math.pow(this._fnCursorPosition(a,"pageY")- 20 | this.s.mouse.startY,2),0.5))return;this._fnCreateDragNode()}this.dom.drag.css({left:this._fnCursorPosition(a,"pageX")-this.s.mouse.offsetX,top:this._fnCursorPosition(a,"pageY")-this.s.mouse.offsetY});for(var b=!1,c=this.s.mouse.toIndex,f=1,e=this.s.aoTargets.length;f").addClass("DTCR_pointer").css({position:"absolute",top:a?e("div.dataTables_scroll",this.s.dt.nTableWrapper).offset().top:e(this.s.dt.nTable).offset().top,height:a?e("div.dataTables_scroll", 25 | this.s.dt.nTableWrapper).height():e(this.s.dt.nTable).height()}).appendTo("body")},_fnSetColumnIndexes:function(){e.each(this.s.dt.aoColumns,function(a,b){e(b.nTh).attr("data-column-index",a)})},_fnCursorPosition:function(a,b){return-1!==a.type.indexOf("touch")?a.originalEvent.touches[0][b]:a[b]}});i.defaults={aiOrder:null,bEnable:!0,bRealtime:!0,iFixedColumnsLeft:0,iFixedColumnsRight:0,fnReorderCallback:null};i.version="1.5.1";e.fn.dataTable.ColReorder=i;e.fn.DataTable.ColReorder=i;"function"==typeof e.fn.dataTable&& 26 | "function"==typeof e.fn.dataTableExt.fnVersionCheck&&e.fn.dataTableExt.fnVersionCheck("1.10.8")?e.fn.dataTableExt.aoFeatures.push({fnInit:function(a){var b=a.oInstance;a._colReorder?b.oApi._fnLog(a,1,"ColReorder attempted to initialise twice. Ignoring second"):(b=a.oInit,new i(a,b.colReorder||b.oColReorder||{}));return null},cFeature:"R",sFeature:"ColReorder"}):alert("Warning: ColReorder requires DataTables 1.10.8 or greater - www.datatables.net/download");e(l).on("preInit.dt.colReorder",function(a, 27 | b){if("dt"===a.namespace){var c=b.oInit.colReorder,f=t.defaults.colReorder;if(c||f)f=e.extend({},c,f),!1!==c&&new i(b,f)}});e.fn.dataTable.Api.register("colReorder.reset()",function(){return this.iterator("table",function(a){a._colReorder.fnReset()})});e.fn.dataTable.Api.register("colReorder.order()",function(a,b){return a?this.iterator("table",function(c){c._colReorder.fnOrder(a,b)}):this.context.length?this.context[0]._colReorder.fnOrder():null});e.fn.dataTable.Api.register("colReorder.transpose()", 28 | function(a,b){return this.context.length&&this.context[0]._colReorder?this.context[0]._colReorder.fnTranspose(a,b):a});e.fn.dataTable.Api.register("colReorder.move()",function(a,b,c,e){this.context.length&&this.context[0]._colReorder.s.dt.oInstance.fnColReorder(a,b,c,e);return this});e.fn.dataTable.Api.register("colReorder.enable()",function(a){return this.iterator("table",function(b){b._colReorder&&b._colReorder.fnEnable(a)})});e.fn.dataTable.Api.register("colReorder.disable()",function(){return this.iterator("table", 29 | function(a){a._colReorder&&a._colReorder.fnDisable()})});return i}); 30 | -------------------------------------------------------------------------------- /static/js/fontawesome.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.0.13 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | !function(){"use strict";var t=function(){},e={},n={},i=null,r={mark:t,measure:t};try{"undefined"!=typeof window&&(e=window),"undefined"!=typeof document&&(n=document),"undefined"!=typeof MutationObserver&&(i=MutationObserver),"undefined"!=typeof performance&&(r=performance)}catch(t){}var a=(e.navigator||{}).userAgent,o=void 0===a?"":a,s=e,c=n,f=i,l=r,u=!!s.document,m=!!c.documentElement&&!!c.head&&"function"==typeof c.addEventListener&&"function"==typeof c.createElement,k=~o.indexOf("MSIE")||~o.indexOf("Trident/"),d="___FONT_AWESOME___",z=16,g="svg-inline--fa",C="data-fa-i2svg",h="data-fa-pseudo-element",p="fontawesome-i2svg",v=function(){try{return!0}catch(t){return!1}}(),b=[1,2,3,4,5,6,7,8,9,10],y=b.concat([11,12,13,14,15,16,17,18,19,20]),w=["class","data-prefix","data-icon","data-fa-transform","data-fa-mask"],x=["xs","sm","lg","fw","ul","li","border","pull-left","pull-right","spin","pulse","rotate-90","rotate-180","rotate-270","flip-horizontal","flip-vertical","stack","stack-1x","stack-2x","inverse","layers","layers-text","layers-counter"].concat(b.map(function(t){return t+"x"})).concat(y.map(function(t){return"w-"+t})),N=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},A=function(){function i(t,e){for(var n=0;n>>0;n--;)e[n]=t[n];return e}function U(t){return t.classList?Y(t.classList):(t.getAttribute("class")||"").split(" ").filter(function(t){return t})}function V(t,e){var n,i=e.split("-"),r=i[0],a=i.slice(1).join("-");return r!==t||""===a||(n=a,~x.indexOf(n))?null:a}function q(t){return(""+t).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function K(n){return Object.keys(n||{}).reduce(function(t,e){return t+(e+": ")+n[e]+";"},"")}function G(t){return t.size!==B.size||t.x!==B.x||t.y!==B.y||t.rotate!==B.rotate||t.flipX||t.flipY}function J(t){var e=t.transform,n=t.containerWidth,i=t.iconWidth;return{outer:{transform:"translate("+n/2+" 256)"},inner:{transform:"translate("+32*e.x+", "+32*e.y+") "+" "+("scale("+e.size/16*(e.flipX?-1:1)+", "+e.size/16*(e.flipY?-1:1)+") ")+" "+("rotate("+e.rotate+" 0 0)")},path:{transform:"translate("+i/2*-1+" -256)"}}}var Q={x:0,y:0,width:"100%",height:"100%"},Z=function(t){var e=t.children,n=t.attributes,i=t.main,r=t.mask,a=t.transform,o=i.width,s=i.icon,f=r.width,l=r.icon,c=J({transform:a,containerWidth:f,iconWidth:o}),u={tag:"rect",attributes:O({},Q,{fill:"white"})},m={tag:"g",attributes:O({},c.inner),children:[{tag:"path",attributes:O({},s.attributes,c.path,{fill:"black"})}]},d={tag:"g",attributes:O({},c.outer),children:[m]},g="mask-"+X(),h="clip-"+X(),p={tag:"defs",children:[{tag:"clipPath",attributes:{id:h},children:[l]},{tag:"mask",attributes:O({},Q,{id:g,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse"}),children:[u,d]}]};return e.push(p,{tag:"rect",attributes:O({fill:"currentColor","clip-path":"url(#"+h+")",mask:"url(#"+g+")"},Q)}),{children:e,attributes:n}},$=function(t){var e=t.children,n=t.attributes,i=t.main,r=t.transform,a=K(t.styles);if(0"+o.map(wt).join("")+""}var xt=function(){};function kt(t){return"string"==typeof(t.getAttribute?t.getAttribute(C):null)}var zt={replace:function(t){var e=t[0],n=t[1].map(function(t){return wt(t)}).join("\n");if(e.parentNode&&e.outerHTML)e.outerHTML=n+(S.keepOriginalSource&&"svg"!==e.tagName.toLowerCase()?"\x3c!-- "+e.outerHTML+" --\x3e":"");else if(e.parentNode){var i=document.createElement("span");e.parentNode.replaceChild(i,e),i.outerHTML=n}},nest:function(t){var e=t[0],n=t[1];if(~U(e).indexOf(S.replacementClass))return zt.replace(t);var i=new RegExp(S.familyPrefix+"-.*");delete n[0].attributes.style;var r=n[0].attributes.class.split(" ").reduce(function(t,e){return e===S.replacementClass||e.match(i)?t.toSvg.push(e):t.toNode.push(e),t},{toNode:[],toSvg:[]});n[0].attributes.class=r.toSvg.join(" ");var a=n.map(function(t){return wt(t)}).join("\n");e.setAttribute("class",r.toNode.join(" ")),e.setAttribute(C,""),e.innerHTML=a}};function Ct(n,t){var i="function"==typeof t?t:xt;0===n.length?i():(s.requestAnimationFrame||function(t){return t()})(function(){var t=!0===S.autoReplaceSvg?zt.replace:zt[S.autoReplaceSvg]||zt.replace,e=ft.begin("mutate");n.map(t),e(),i()})}var Nt=!1;var At=null;var Ot=function(t){var e=t.getAttribute("style"),n=[];return e&&(n=e.split(";").reduce(function(t,e){var n=e.split(":"),i=n[0],r=n.slice(1);return i&&0li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;position:relative;width:2em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.svg-inline--fa.fa-stack-1x{height:1em;width:1em}.svg-inline--fa.fa-stack-2x{height:2em;width:2em}.fa-inverse{color:#fff}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}";if("fa"!==e||n!==t){var r=new RegExp("\\.fa\\-","g"),a=new RegExp("\\."+t,"g");i=i.replace(r,"."+e+"-").replace(a,"."+n)}return i};var Qt=function(){function t(){N(this,t),this.definitions={}}return A(t,[{key:"add",value:function(){for(var e=this,t=arguments.length,n=Array(t),i=0;i'+ 39 | ''+ 40 | ''+ 41 | ''); 42 | 43 | $buttons.children('button').each(function(j, jobj){ 44 | var $jt = $(this); 45 | $jt.button({ 46 | text: o.text, 47 | icons: { primary: $jt.data('icon') } 48 | }) 49 | .click(function(e){ 50 | var step = $jt.data('step'), 51 | curr = $t.slider('value'), 52 | newval = curr += step*1, 53 | minval = $t.slider('option','min'), 54 | maxval = $t.slider('option','max'), 55 | slidee = $t.slider("option", "slide") || function(){}, 56 | stope = $t.slider("option", "stop") || function(){}; 57 | 58 | e.preventDefault(); 59 | 60 | if(newval < minval || newval > maxval){ 61 | return; 62 | } 63 | 64 | $t.slider('value', newval); 65 | 66 | slidee.call($t, null, { value: newval }); 67 | stope.call($t, null, { value: newval }); 68 | }); 69 | }); 70 | 71 | // before or after 72 | $t[o.where]($buttons); 73 | 74 | if(o.buttonset){ 75 | $buttons.removeClass('ui-corner-right').removeClass('ui-corner-left').buttonset(); 76 | $buttons.eq(0).addClass('ui-corner-left'); 77 | $buttons.eq(1).addClass('ui-corner-right'); 78 | } 79 | 80 | // adjust the width so we don't break the original layout 81 | var bOuterWidth = $buttons.css({ 82 | marginLeft: ((o.where === 'after' && !o.isRTL) || (o.where === 'before' && o.isRTL)? 10:0), 83 | marginRight: ((o.where === 'before' && !o.isRTL) || (o.where === 'after' && o.isRTL)? 10:0) 84 | }).outerWidth(true) + 5; 85 | var tOuterWidth = $t.outerWidth(true); 86 | $t.css('display','inline-block').width(tOuterWidth-bOuterWidth); 87 | }); 88 | } 89 | }); 90 | 91 | })(jQuery); -------------------------------------------------------------------------------- /static/js/popper.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (C) Federico Zivolo 2018 3 | Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT). 4 | */(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=getComputedStyle(e,null);return t?o[t]:o}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e)return document.body;switch(e.nodeName){case'HTML':case'BODY':return e.ownerDocument.body;case'#document':return e.body;}var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll|overlay)/.test(r+s+p)?e:n(o(e))}function r(e){return 11===e?re:10===e?pe:re||pe}function p(e){if(!e)return document.documentElement;for(var o=r(10)?document.body:null,n=e.offsetParent;n===o&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TD','TABLE'].indexOf(n.nodeName)&&'static'===t(n,'position')?p(n):n:e?e.ownerDocument.documentElement:document.documentElement}function s(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||p(e.firstElementChild)===e)}function d(e){return null===e.parentNode?e:d(e.parentNode)}function a(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,n=o?e:t,i=o?t:e,r=document.createRange();r.setStart(n,0),r.setEnd(i,0);var l=r.commonAncestorContainer;if(e!==l&&t!==l||n.contains(i))return s(l)?l:p(l);var f=d(e);return f.host?a(f.host,t):a(e,d(t).host)}function l(e){var t=1=o.clientWidth&&n>=o.clientHeight}),l=0a[e]&&!t.escapeWithReference&&(n=J(f[o],a[e]-('right'===e?f.width:f.height))),ae({},o,n)}};return l.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';f=le({},f,m[t](e))}),e.offsets.popper=f,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,n=t.reference,i=e.placement.split('-')[0],r=Z,p=-1!==['top','bottom'].indexOf(i),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]r(n[s])&&(e.offsets.popper[d]=r(n[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var n;if(!q(e.instance.modifiers,'arrow','keepTogether'))return e;var i=o.element;if('string'==typeof i){if(i=e.instance.popper.querySelector(i),!i)return e;}else if(!e.instance.popper.contains(i))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',c=a?'bottom':'right',u=S(i)[l];d[c]-us[c]&&(e.offsets.popper[m]+=d[m]+u-s[c]),e.offsets.popper=g(e.offsets.popper);var b=d[m]+d[l]/2-u/2,y=t(e.instance.popper),w=parseFloat(y['margin'+f],10),E=parseFloat(y['border'+f+'Width'],10),v=b-e.offsets.popper[m]-w-E;return v=$(J(s[l]-u,v),0),e.arrowElement=i,e.offsets.arrow=(n={},ae(n,m,Q(v)),ae(n,h,''),n),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(W(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=v(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),n=e.placement.split('-')[0],i=T(n),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case he.FLIP:p=[n,i];break;case he.CLOCKWISE:p=z(n);break;case he.COUNTERCLOCKWISE:p=z(n,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(n!==s||p.length===d+1)return e;n=e.placement.split('-')[0],i=T(n);var a=e.offsets.popper,l=e.offsets.reference,f=Z,m='left'===n&&f(a.right)>f(l.left)||'right'===n&&f(a.left)f(l.top)||'bottom'===n&&f(a.top)f(o.right),g=f(a.top)f(o.bottom),b='left'===n&&h||'right'===n&&c||'top'===n&&g||'bottom'===n&&u,y=-1!==['top','bottom'].indexOf(n),w=!!t.flipVariations&&(y&&'start'===r&&h||y&&'end'===r&&c||!y&&'start'===r&&g||!y&&'end'===r&&u);(m||b||w)&&(e.flipped=!0,(m||b)&&(n=p[d+1]),w&&(r=G(r)),e.placement=n+(r?'-'+r:''),e.offsets.popper=le({},e.offsets.popper,C(e.instance.popper,e.offsets.reference,e.placement)),e=P(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],n=e.offsets,i=n.popper,r=n.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return i[p?'left':'top']=r[o]-(s?i[p?'width':'height']:0),e.placement=T(t),e.offsets.popper=g(i),e}},hide:{order:800,enabled:!0,fn:function(e){if(!q(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=D(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.right 4 | {% csrf_token %} 5 | 6 | 7 | 8 | 15 | {{ block.super }} 16 | {% endblock object-tools %} -------------------------------------------------------------------------------- /static/templates/hrm/employee_form.html: -------------------------------------------------------------------------------- 1 | {% extends 'hrm/index.html' %} 2 | {% block content %} 3 | {% load filter %} 4 | {% load static %} 5 |
6 | {% csrf_token %} 7 |
8 |

Employee Form

9 |
10 |
11 |
12 | Select Your photo 14 |
15 |
16 |
17 | 18 |
19 |
20 |
21 | 22 |
23 | 24 |
25 | 26 |
27 |
28 |
29 | 30 |
31 | 32 |
33 |
34 |
35 | 36 |
37 | 38 |
39 |
40 |
41 | 42 |
43 | 44 |
45 |
46 |
47 | 48 |
49 | 50 |
51 |
52 |
53 | 54 |
55 | 56 |
57 |
58 |
59 | 60 |
61 | 62 |
63 |
64 |
65 | 66 |
67 | 73 |
74 |
75 |
76 | 77 |
78 | 84 |
85 |
86 | 87 |
88 | 89 |
90 | 93 | 96 |
97 |
98 |
99 | 100 |
101 | 102 |
103 |
104 |
105 | 106 |
107 | 108 |
109 |
110 |
111 | 112 |
113 | 114 |
115 |
116 |
117 |
118 | 119 | 120 | Back 121 |
122 |
123 |
124 | 211 | {% endblock %} -------------------------------------------------------------------------------- /static/templates/hrm/employee_table.html: -------------------------------------------------------------------------------- 1 | {% extends 'hrm/index.html' %} 2 | {% block content %} 3 | {% load filter %} 4 | {% load static %} 5 |
6 | ADD 7 |
8 |
9 | 10 | 11 | {% for tabledetail in tabledetails %} 12 | 13 | {% if forloop.first %} 14 | 15 | 16 | {% for key, value in tabledetail.items %} 17 | 18 | {% endfor %} 19 | 20 | 21 | {% endif %} 22 | 23 | {% endfor %} 24 | 25 | 26 | {% for tabledetail in tabledetails %} 27 | 28 | 31 | {% for key, val in tabledetail.items %} 32 | {% if val|is_list %} 33 | 38 | {% else %} 39 | 40 | {% if val|image_value %} 41 | 42 | {% elif key == 'photo' %} 43 | 44 | {% else %} 45 | 46 | {% endif %} 47 | {% endif %} 48 | {% endfor %} 49 | 51 | 52 | {% endfor %} 53 | 54 |
{{key}}
29 | 30 | 34 | {% for v in val %} 35 | {{v}}{% if not forloop.last %},{% endif %} 36 | {% endfor %} 37 | {{val}} 50 |
55 |
56 | 82 | {% endblock %} -------------------------------------------------------------------------------- /static/templates/hrm/home.html: -------------------------------------------------------------------------------- 1 | {% extends 'hrm/index.html' %} 2 | {% block content %} 3 | {% load static %} 4 | 10 | 11 |
12 |
13 | 14 |
15 |

WelCome

16 |
17 | 18 |
19 |
20 |
21 | 22 | 39 | 40 |
41 | 42 | {% endblock %} -------------------------------------------------------------------------------- /static/templates/hrm/index.html: -------------------------------------------------------------------------------- 1 | 2 | {% load static %} 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Management 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 |
34 | 35 | 104 | 105 | 106 |
107 | 108 | {% block content %} 109 | {% endblock%} 110 |
111 |
112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 143 | 144 | 145 | -------------------------------------------------------------------------------- /static/templates/hrm/login.html: -------------------------------------------------------------------------------- 1 | 2 | {% load static %} 3 | 4 | 5 | Login Page 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 |
26 |
27 |
28 |

Sign In

29 | 34 |
35 |
36 |
37 | {% csrf_token %} 38 |
39 |
40 | 41 |
42 | 43 | 44 |
45 |
46 |
47 | 48 |
49 | 50 |
51 |
52 | Remember Me 53 |
54 |
55 | 56 |
57 |
58 |
59 | 67 |
68 |
69 |
70 | 71 | -------------------------------------------------------------------------------- /static/templates/hrm/password.html: -------------------------------------------------------------------------------- 1 | 2 | {% load static %} 3 | 4 | 5 | 6 | Change Password 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 |
28 |
29 |
30 |

User Password Change

31 |
32 |
33 |
34 | {% csrf_token %} 35 |
36 |
37 | 38 |
39 | 40 |
41 |
42 |
43 | 44 |
45 | 46 |
47 |
48 |
49 | 50 |
51 | 52 |
53 | 54 |
55 | 56 |
57 |
58 |
59 | 64 |
65 |
66 |
67 | 68 | 78 | -------------------------------------------------------------------------------- /static/templates/hrm/register.html: -------------------------------------------------------------------------------- 1 | 2 | {% load static %} 3 | 4 | 5 | 6 | User Registration 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 |
28 |
29 |
30 |

User Registration

31 |
32 |
33 |
34 | {% csrf_token %} 35 |
36 |
37 | 38 |
39 | 40 | 41 |
42 |
43 |
44 | 45 |
46 | 47 |
48 |
49 |
50 | 51 |
52 | 53 |
54 |
55 |
56 | 57 |
58 | 59 |
60 | 61 |
62 | Back To Login 63 | 64 |
65 |
66 |
67 |
68 |
69 |
70 | 71 | 72 | 82 | --------------------------------------------------------------------------------