diff --git a/.github/workflows/django.yml b/.github/workflows/django.yml new file mode 100644 index 0000000..7a97aeb --- /dev/null +++ b/.github/workflows/django.yml @@ -0,0 +1,30 @@ +name: Django CI + +on: + push: + branches: [ "RB" ] + pull_request: + branches: [ "RB" ] + +jobs: + build: + + runs-on: ubuntu-latest + strategy: + max-parallel: 4 + matrix: + python-version: [3.8] + + steps: + - uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python-version }} + - name: Install Dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + - name: Run Tests + run: | + python manage.py test diff --git a/ALL CO_SEM_1,3,5.zip b/ALL CO_SEM_1,3,5.zip new file mode 100644 index 0000000..bb49362 Binary files /dev/null and b/ALL CO_SEM_1,3,5.zip differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..fdd905b --- /dev/null +++ b/README.md @@ -0,0 +1,42 @@ + + + + + + + + + Screenshot 58 + Screenshot 59 + Screenshot 60 + Screenshot 61 + Screenshot 62 + Screenshot 63 + Screenshot 64 + Screenshot 65 + Screenshot 66 + Screenshot 67 + Screenshot 68 + Screenshot 69 + Screenshot 70 + Screenshot 71 + Screenshot 72 + Screenshot 73 + Screenshot 74 + Screenshot 75 + Screenshot 76 + Screenshot 77 + Screenshot 78 + Screenshot 79 + Screenshot 80 + Screenshot 81 + Screenshot 82 + Screenshot 83 + Screenshot 84 + Screenshot 85 + Screenshot 86 + Screenshot 87 + Screenshot 88 + Screenshot 89 + + diff --git a/RESULT ANALYZER SYSTEM/Screenshot (58).png b/RESULT ANALYZER SYSTEM/Screenshot (58).png new file mode 100644 index 0000000..a28ce6a Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (58).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (59).png b/RESULT ANALYZER SYSTEM/Screenshot (59).png new file mode 100644 index 0000000..06c1091 Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (59).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (60).png b/RESULT ANALYZER SYSTEM/Screenshot (60).png new file mode 100644 index 0000000..5d38b99 Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (60).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (61).png b/RESULT ANALYZER SYSTEM/Screenshot (61).png new file mode 100644 index 0000000..9491588 Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (61).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (62).png b/RESULT ANALYZER SYSTEM/Screenshot (62).png new file mode 100644 index 0000000..c773da1 Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (62).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (63).png b/RESULT ANALYZER SYSTEM/Screenshot (63).png new file mode 100644 index 0000000..a421a3b Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (63).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (64).png b/RESULT ANALYZER SYSTEM/Screenshot (64).png new file mode 100644 index 0000000..af548d3 Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (64).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (65).png b/RESULT ANALYZER SYSTEM/Screenshot (65).png new file mode 100644 index 0000000..a65fee0 Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (65).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (66).png b/RESULT ANALYZER SYSTEM/Screenshot (66).png new file mode 100644 index 0000000..3d0ec7e Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (66).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (67).png b/RESULT ANALYZER SYSTEM/Screenshot (67).png new file mode 100644 index 0000000..f72eadd Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (67).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (68).png b/RESULT ANALYZER SYSTEM/Screenshot (68).png new file mode 100644 index 0000000..c6372fe Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (68).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (69).png b/RESULT ANALYZER SYSTEM/Screenshot (69).png new file mode 100644 index 0000000..da182ce Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (69).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (70).png b/RESULT ANALYZER SYSTEM/Screenshot (70).png new file mode 100644 index 0000000..bfc2cd8 Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (70).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (71).png b/RESULT ANALYZER SYSTEM/Screenshot (71).png new file mode 100644 index 0000000..b1ca333 Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (71).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (72).png b/RESULT ANALYZER SYSTEM/Screenshot (72).png new file mode 100644 index 0000000..1690442 Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (72).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (73).png b/RESULT ANALYZER SYSTEM/Screenshot (73).png new file mode 100644 index 0000000..d0c2e21 Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (73).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (74).png b/RESULT ANALYZER SYSTEM/Screenshot (74).png new file mode 100644 index 0000000..5bedeeb Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (74).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (75).png b/RESULT ANALYZER SYSTEM/Screenshot (75).png new file mode 100644 index 0000000..c6e2d0f Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (75).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (76).png b/RESULT ANALYZER SYSTEM/Screenshot (76).png new file mode 100644 index 0000000..ee20c55 Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (76).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (77).png b/RESULT ANALYZER SYSTEM/Screenshot (77).png new file mode 100644 index 0000000..3b10679 Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (77).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (78).png b/RESULT ANALYZER SYSTEM/Screenshot (78).png new file mode 100644 index 0000000..76ccfff Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (78).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (79).png b/RESULT ANALYZER SYSTEM/Screenshot (79).png new file mode 100644 index 0000000..70a7314 Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (79).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (80).png b/RESULT ANALYZER SYSTEM/Screenshot (80).png new file mode 100644 index 0000000..0fb8253 Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (80).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (81).png b/RESULT ANALYZER SYSTEM/Screenshot (81).png new file mode 100644 index 0000000..9a01646 Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (81).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (82).png b/RESULT ANALYZER SYSTEM/Screenshot (82).png new file mode 100644 index 0000000..8698dfc Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (82).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (83).png b/RESULT ANALYZER SYSTEM/Screenshot (83).png new file mode 100644 index 0000000..d4332ea Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (83).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (84).png b/RESULT ANALYZER SYSTEM/Screenshot (84).png new file mode 100644 index 0000000..776451f Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (84).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (85).png b/RESULT ANALYZER SYSTEM/Screenshot (85).png new file mode 100644 index 0000000..6983054 Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (85).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (86).png b/RESULT ANALYZER SYSTEM/Screenshot (86).png new file mode 100644 index 0000000..171b9e0 Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (86).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (87).png b/RESULT ANALYZER SYSTEM/Screenshot (87).png new file mode 100644 index 0000000..a3680fb Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (87).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (88).png b/RESULT ANALYZER SYSTEM/Screenshot (88).png new file mode 100644 index 0000000..7d2c061 Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (88).png differ diff --git a/RESULT ANALYZER SYSTEM/Screenshot (89).png b/RESULT ANALYZER SYSTEM/Screenshot (89).png new file mode 100644 index 0000000..59108b6 Binary files /dev/null and b/RESULT ANALYZER SYSTEM/Screenshot (89).png differ diff --git a/Result_Analyzer_System b/Result_Analyzer_System new file mode 160000 index 0000000..7cc2686 --- /dev/null +++ b/Result_Analyzer_System @@ -0,0 +1 @@ +Subproject commit 7cc26869ee3027e043c451ee21121cf3f11cc6ee diff --git a/django_srms/__init__.py b/django_srms/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/django_srms/asgi.py b/django_srms/asgi.py new file mode 100644 index 0000000..df993cd --- /dev/null +++ b/django_srms/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for django_srms project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.0/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_srms.settings') + +application = get_asgi_application() diff --git a/django_srms/settings.py b/django_srms/settings.py new file mode 100644 index 0000000..c55e8b6 --- /dev/null +++ b/django_srms/settings.py @@ -0,0 +1,139 @@ +""" +Django settings for django_srms project. + +Generated by 'django-admin startproject' using Django 4.0.3. + +For more information on this file, see +https://docs.djangoproject.com/en/4.0/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/4.0/ref/settings/ +""" + +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-t5b_ld!b44gip%^24jv8w076iul#09*eiza#^$!n(%y6z=*=58' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = ['*'] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'django.contrib.humanize', + 'srmsApp.apps.srmsAppConfig', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'whitenoise.middleware.WhiteNoiseMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'django_srms.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + 'django.template.context_processors.media', + ], + }, + }, +] + +WSGI_APPLICATION = 'django_srms.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/4.0/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': 'resultanalyzer', + 'USER':'root', + 'PASSWORD':'root', + #'HOST':'AutomaticResultAnalysis.mysql.pythonanywhere-services.com', + 'PORT':'3306', + + } +} +# Password validation +# https://docs.djangoproject.com/en/4.0/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/4.0/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'Asia/Manila' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/4.0/howto/static-files/ + +STATIC_URL = 'static/' +STATICFILES_DIRS = [ + BASE_DIR / "static", + ] + +#MEDIA +MEDIA_URL = 'media/' +MEDIA_ROOT = BASE_DIR / "media/" + +# Default primary key field type +# https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' +LOGIN_REDIRECT_URL = '/' +LOGIN_URL = '/login' diff --git a/django_srms/urls.py b/django_srms/urls.py new file mode 100644 index 0000000..325868d --- /dev/null +++ b/django_srms/urls.py @@ -0,0 +1,30 @@ +"""django_srms URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/4.0/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path,include +from django.conf import settings +from django.conf.urls.static import static +from django.views.static import serve +# from django.conf.urls import url + +urlpatterns = [ + path('admin/', admin.site.urls), + path('', include('srmsApp.urls')), + # url(r'^media/(?P.*)$', serve,{'document_root': settings.MEDIA_ROOT}), + # url(r'^static/(?P.*)$', serve,{'document_root': settings.STATIC_ROOT}), +] +urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) +urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/django_srms/wsgi.py b/django_srms/wsgi.py new file mode 100644 index 0000000..0dda80e --- /dev/null +++ b/django_srms/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for django_srms project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.0/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_srms.settings') + +application = get_wsgi_application() diff --git a/manage.py b/manage.py new file mode 100644 index 0000000..6efb473 --- /dev/null +++ b/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_srms.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/media/default/logo.png b/media/default/logo.png new file mode 100644 index 0000000..14f4bfa Binary files /dev/null and b/media/default/logo.png differ diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..b37c3f3 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,30 @@ +asgiref==3.5.1 +backports.zoneinfo==0.2.1 +certifi==2021.10.8 +cffi==1.15.0 +chardet==4.0.0 +charset-normalizer==2.0.12 +cryptography==37.0.2 +Django==4.0.4 +docopt==0.6.2 +idna==3.3 +mysql-connector-python==8.0.29 +mysqlclient==2.1.0 +numpy==1.22.3 +pandas==1.4.2 +pdfminer.six==20220319 +pdfplumber==0.6.2 +Pillow==9.1.0 +pipreqs==0.4.11 +protobuf==3.20.1 +pycparser==2.21 +python-dateutil==2.8.2 +pytz==2022.1 +requests==2.27.1 +six==1.16.0 +sqlparse==0.4.2 +tzdata==2022.1 +urllib3==1.26.9 +Wand==0.6.7 +whitenoise==6.1.0 +yarg==0.1.9 diff --git a/srmsApp/__init__.py b/srmsApp/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/srmsApp/admin.py b/srmsApp/admin.py new file mode 100644 index 0000000..9954a8a --- /dev/null +++ b/srmsApp/admin.py @@ -0,0 +1,10 @@ +from django.contrib import admin +from srmsApp import models + +# Register your models here. +admin.site.register(models.Class) +admin.site.register(models.Subject) +admin.site.register(models.Student) +admin.site.register(models.Result) +admin.site.register(models.Student_Subject_Result) +admin.site.register(models.user) \ No newline at end of file diff --git a/srmsApp/apps.py b/srmsApp/apps.py new file mode 100644 index 0000000..e61f599 --- /dev/null +++ b/srmsApp/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class srmsAppConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'srmsApp' diff --git a/srmsApp/forms.py b/srmsApp/forms.py new file mode 100644 index 0000000..d5d253a --- /dev/null +++ b/srmsApp/forms.py @@ -0,0 +1,186 @@ +from random import choices +import sched +from django import forms +from django.contrib.auth.forms import UserCreationForm,PasswordChangeForm, UserChangeForm + +from django.contrib.auth.models import User +from srmsApp import models +from datetime import datetime + +class UpdateProfile(UserChangeForm): + username = forms.CharField(max_length=250,help_text="The Username field is required.") + email = forms.EmailField(max_length=250,help_text="The Email field is required.") + first_name = forms.CharField(max_length=250,help_text="The First Name field is required.") + last_name = forms.CharField(max_length=250,help_text="The Last Name field is required.") + current_password = forms.CharField(max_length=250) + + class Meta: + model = User + fields = ('email', 'username','first_name', 'last_name') + + def clean_current_password(self): + if not self.instance.check_password(self.cleaned_data['current_password']): + raise forms.ValidationError(f"Password is Incorrect") + + def clean_email(self): + email = self.cleaned_data['email'] + try: + user = User.objects.exclude(id=self.cleaned_data['id']).get(email = email) + except Exception as e: + return email + raise forms.ValidationError(f"The {user.email} mail is already exists/taken") + + def clean_username(self): + username = self.cleaned_data['username'] + try: + user = User.objects.exclude(id=self.cleaned_data['id']).get(username = username) + except Exception as e: + return username + raise forms.ValidationError(f"The {user.username} mail is already exists/taken") + +class UpdatePasswords(PasswordChangeForm): + old_password = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control form-control-sm rounded-0'}), label="Old Password") + new_password1 = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control form-control-sm rounded-0'}), label="New Password") + new_password2 = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control form-control-sm rounded-0'}), label="Confirm New Password") + class Meta: + model = User + fields = ('old_password','new_password1', 'new_password2') + +class SaveClass(forms.ModelForm): + level = forms.CharField(max_length="250") + section = forms.CharField(max_length="250") + status = forms.ChoiceField(choices=[('1','Active'),('2','Inctive')]) + + class Meta: + model = models.Class + fields = ('level','section', 'status',) + + def clean_level(self): + level = self.cleaned_data['level'] + section = self.data['section'] + id = self.data['id'] if not self.data['id'] == '' else None + + try: + if id is None: + levelCount = models.Class.objects.filter(level=level, section=section).count() + else: + levelCount = models.Class.objects.exclude(id = id).filter(level=level, section=section).count() + if levelCount == 0: + return level + except: + return level + + raise forms.ValidationError("Class Already Exists on the list.") + + + +class SaveSubject(forms.ModelForm): + name = forms.CharField(max_length="250") + status = forms.ChoiceField(choices=[('1','Active'),('2','Inctive')]) + + class Meta: + model = models.Subject + fields = ('name', 'status',) + + def clean_name(self): + name = self.cleaned_data['name'] + id = self.data['id'] if not self.data['id'] == '' else None + try: + if not id is None: + subjectCount = models.Subject.objects.exclude(id=id).filter(name=name).count() + else: + subjectCount = models.Subject.objects.filter(name=name).count() + print(subjectCount) + if subjectCount == 0: + return name + except Exception as err: + print(err) + raise forms.ValidationError("An Error occurred.") + raise forms.ValidationError("Subject Name Already Exists.") + +class SaveStudent(forms.ModelForm): + classI = forms.CharField(max_length="30", label="Class") + student_id = forms.CharField(max_length="500", label="Student ID/Code") + first_name = forms.CharField(max_length="500", label="First Name") + middle_name = forms.CharField(max_length="500", label="Middle Name", required=False) + last_name = forms.CharField(max_length="500", label="Last Name") + gender = forms.ChoiceField(choices=[('Male','Male'),('Female','Female')], label="Gender") + status = forms.ChoiceField(choices = [('1' ,'Active'),('2' ,'Inactive')], label="Status") + + class Meta: + model = models.Student + fields = ('classI', 'student_id', 'first_name', 'middle_name', 'last_name', 'gender','status',) + + def clean_classI(self): + class_id = self.cleaned_data['classI'] + + try: + classI = models.Class.objects.get(id = class_id) + return classI + except Exception as err: + print(err) + raise forms.ValidationError(f"Invalid field value") + + def clean_student_id(self): + student_id = self.cleaned_data['student_id'] + id = self.data['id'] if not self.data['id'] == '' else None + try: + if not id is None: + studentCount = models.Student.objects.exclude(id = id).filter(student_id=student_id).count() + else: + studentCount = models.Student.objects.filter(student_id=student_id).count() + if studentCount == 0: + return student_id + except Exception as err: + print(err) + raise forms.ValidationError("An Error occurred.") + + raise forms.ValidationError(f" [{student_id}] Already Exists.") + + +class SaveResult(forms.ModelForm): + student = forms.CharField(max_length="30", label="Student") + semester = forms.CharField(max_length="250", label="Semester") + + class Meta: + model = models.Result + fields = ('student', 'semester',) + + def clean_student(self): + student = self.cleaned_data['student'] + try: + studentI = models.Student.objects.get(id = student) + return studentI + except Exception as err: + print(err) + raise forms.ValidationError(f"Invalid field value") + +class SaveSubjectResult(forms.ModelForm): + result = forms.CharField(max_length="30", label="Result ID") + subject = forms.CharField(max_length="30", label="Subject") + grade = forms.CharField(max_length="100", label="Grade") + + class Meta: + model = models.Student_Subject_Result + fields = ('result','subject','grade',) + + def clean_result(self): + result = self.cleaned_data['result'] + + try: + resultI = models.Result.objects.get(id = result) + return resultI + except Exception as err: + print(err) + raise forms.ValidationError(f"Invalid field value") + + def clean_subject(self): + subject = self.cleaned_data['subject'] + + try: + subjectI = models.Subject.objects.get(id = subject) + return subjectI + except Exception as err: + print(err) + raise forms.ValidationError(f"Invalid field value") + diff --git a/srmsApp/migrations/0001_initial.py b/srmsApp/migrations/0001_initial.py new file mode 100644 index 0000000..c7952c4 --- /dev/null +++ b/srmsApp/migrations/0001_initial.py @@ -0,0 +1,26 @@ +# Generated by Django 4.0.3 on 2022-04-04 01:29 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Class', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('level', models.CharField(max_length=250)), + ('section', models.CharField(max_length=250)), + ('status', models.CharField(choices=[('1', 'Active'), ('2', 'Inactive')], default=1, max_length=2)), + ('date_created', models.DateTimeField(default=django.utils.timezone.now)), + ('date_updated', models.DateTimeField(auto_now=True)), + ], + ), + ] diff --git a/srmsApp/migrations/0002_subject.py b/srmsApp/migrations/0002_subject.py new file mode 100644 index 0000000..e18c46d --- /dev/null +++ b/srmsApp/migrations/0002_subject.py @@ -0,0 +1,24 @@ +# Generated by Django 4.0.3 on 2022-04-04 02:23 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('srmsApp', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Subject', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=250)), + ('status', models.CharField(choices=[('1', 'Active'), ('2', 'Inactive')], default=1, max_length=2)), + ('date_created', models.DateTimeField(default=django.utils.timezone.now)), + ('date_updated', models.DateTimeField(auto_now=True)), + ], + ), + ] diff --git a/srmsApp/migrations/0003_student.py b/srmsApp/migrations/0003_student.py new file mode 100644 index 0000000..ac70480 --- /dev/null +++ b/srmsApp/migrations/0003_student.py @@ -0,0 +1,30 @@ +# Generated by Django 4.0.3 on 2022-04-04 02:39 + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('srmsApp', '0002_subject'), + ] + + operations = [ + migrations.CreateModel( + name='Student', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('student_id', models.CharField(max_length=250)), + ('first_name', models.CharField(max_length=250)), + ('middle_name', models.CharField(blank=True, max_length=250, null=True)), + ('last_name', models.CharField(max_length=250)), + ('gender', models.CharField(choices=[('Male', 'Male'), ('Female', 'Female')], default=1, max_length=20)), + ('status', models.CharField(choices=[('1', 'Active'), ('2', 'Inactive')], default=1, max_length=2)), + ('date_created', models.DateTimeField(default=django.utils.timezone.now)), + ('date_updated', models.DateTimeField(auto_now=True)), + ('classI', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='srmsApp.class')), + ], + ), + ] diff --git a/srmsApp/migrations/0004_result_student_subject_result.py b/srmsApp/migrations/0004_result_student_subject_result.py new file mode 100644 index 0000000..74c7645 --- /dev/null +++ b/srmsApp/migrations/0004_result_student_subject_result.py @@ -0,0 +1,33 @@ +# Generated by Django 4.0.3 on 2022-04-04 03:34 + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('srmsApp', '0003_student'), + ] + + operations = [ + migrations.CreateModel( + name='Result', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date_created', models.DateTimeField(default=django.utils.timezone.now)), + ('date_updated', models.DateTimeField(auto_now=True)), + ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='srmsApp.student')), + ], + ), + migrations.CreateModel( + name='Student_Subject_Result', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('grade', models.FloatField(default=0)), + ('result', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='srmsApp.result')), + ('subject', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='srmsApp.subject')), + ], + ), + ] diff --git a/srmsApp/migrations/0005_result_semester.py b/srmsApp/migrations/0005_result_semester.py new file mode 100644 index 0000000..56d0647 --- /dev/null +++ b/srmsApp/migrations/0005_result_semester.py @@ -0,0 +1,18 @@ +# Generated by Django 4.0.3 on 2022-04-04 03:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('srmsApp', '0004_result_student_subject_result'), + ] + + operations = [ + migrations.AddField( + model_name='result', + name='semester', + field=models.CharField(blank=True, max_length=250), + ), + ] diff --git a/srmsApp/migrations/0006_cosem3.py b/srmsApp/migrations/0006_cosem3.py new file mode 100644 index 0000000..6e9c2a5 --- /dev/null +++ b/srmsApp/migrations/0006_cosem3.py @@ -0,0 +1,38 @@ +# Generated by Django 4.0.3 on 2022-04-14 08:26 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('srmsApp', '0005_result_semester'), + ] + + operations = [ + migrations.CreateModel( + name='Cosem3', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('ENROLLMENT_NO', models.IntegerField()), + ('name', models.CharField(max_length=300)), + ('SEAT_NO', models.IntegerField()), + ('EVS', models.CharField(max_length=300)), + ('OS', models.CharField(max_length=10)), + ('OS_P', models.CharField(max_length=10)), + ('AJP', models.CharField(max_length=10)), + ('AJP_P', models.CharField(max_length=10)), + ('ST', models.CharField(max_length=10)), + ('ST_P', models.CharField(max_length=10)), + ('CSSL', models.CharField(max_length=10)), + ('CSSL_P', models.CharField(max_length=10)), + ('IT', models.CharField(max_length=10)), + ('PERCENTAGE', models.FloatField(max_length=10)), + ('TOTAL', models.IntegerField()), + ('CPP', models.CharField(max_length=50)), + ], + options={ + 'db_table': 'cosem3', + }, + ), + ] diff --git a/srmsApp/migrations/0007_user_delete_cosem3.py b/srmsApp/migrations/0007_user_delete_cosem3.py new file mode 100644 index 0000000..1868d9c --- /dev/null +++ b/srmsApp/migrations/0007_user_delete_cosem3.py @@ -0,0 +1,42 @@ +# Generated by Django 4.0.3 on 2022-04-14 13:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('srmsApp', '0006_cosem3'), + ] + + operations = [ + migrations.CreateModel( + name='user', + fields=[ + ('ENROLLMENT_NO', models.IntegerField(primary_key=True, serialize=False)), + ('name', models.CharField(max_length=300)), + ('SEAT_NO', models.IntegerField(max_length=10)), + ('BRANCH', models.CharField(max_length=50)), + ('EVS', models.CharField(max_length=300)), + ('OS', models.CharField(max_length=10)), + ('OS_P', models.CharField(max_length=10)), + ('AJP', models.CharField(max_length=10)), + ('AJP_P', models.CharField(max_length=10)), + ('ST', models.CharField(max_length=10)), + ('ST_P', models.CharField(max_length=10)), + ('CSSL', models.CharField(max_length=10)), + ('CSSL_P', models.CharField(max_length=10)), + ('IT', models.CharField(max_length=10)), + ('CPP', models.CharField(max_length=10)), + ('PERCENTAGE', models.FloatField(max_length=50)), + ('TOTAL', models.IntegerField(max_length=4)), + ('DIST', models.CharField(max_length=50)), + ], + options={ + 'db_table': 'sem477', + }, + ), + migrations.DeleteModel( + name='Cosem3', + ), + ] diff --git a/srmsApp/migrations/0008_user1_alter_user_table.py b/srmsApp/migrations/0008_user1_alter_user_table.py new file mode 100644 index 0000000..64c0a5c --- /dev/null +++ b/srmsApp/migrations/0008_user1_alter_user_table.py @@ -0,0 +1,42 @@ +# Generated by Django 4.0.3 on 2022-04-16 09:00 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('srmsApp', '0007_user_delete_cosem3'), + ] + + operations = [ + migrations.CreateModel( + name='user1', + fields=[ + ('ENROLLMENT_NO', models.IntegerField(primary_key=True, serialize=False)), + ('name', models.CharField(max_length=300)), + ('SEAT_NO', models.IntegerField(max_length=10)), + ('BRANCH', models.CharField(max_length=50)), + ('OOP', models.CharField(max_length=300)), + ('OPP_P', models.CharField(max_length=10)), + ('DSU', models.CharField(max_length=10)), + ('DSU_P', models.CharField(max_length=10)), + ('CG', models.CharField(max_length=10)), + ('CG_P', models.CharField(max_length=10)), + ('DMS', models.CharField(max_length=10)), + ('DMS_P', models.CharField(max_length=10)), + ('DT', models.CharField(max_length=10)), + ('DT_P', models.CharField(max_length=10)), + ('PERCENTAGE', models.FloatField(max_length=50)), + ('TOTAL', models.IntegerField(max_length=4)), + ('DIST', models.CharField(max_length=50)), + ], + options={ + 'db_table': 'COSEM2', + }, + ), + migrations.AlterModelTable( + name='user', + table='COSEM3', + ), + ] diff --git a/srmsApp/migrations/0009_rename_opp_p_user1_oop_p.py b/srmsApp/migrations/0009_rename_opp_p_user1_oop_p.py new file mode 100644 index 0000000..a5cabb5 --- /dev/null +++ b/srmsApp/migrations/0009_rename_opp_p_user1_oop_p.py @@ -0,0 +1,18 @@ +# Generated by Django 4.0.3 on 2022-04-16 09:14 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('srmsApp', '0008_user1_alter_user_table'), + ] + + operations = [ + migrations.RenameField( + model_name='user1', + old_name='OPP_P', + new_name='OOP_P', + ), + ] diff --git a/srmsApp/migrations/0010_elsem2_elsem3_mesem3_user12.py b/srmsApp/migrations/0010_elsem2_elsem3_mesem3_user12.py new file mode 100644 index 0000000..b9b2e59 --- /dev/null +++ b/srmsApp/migrations/0010_elsem2_elsem3_mesem3_user12.py @@ -0,0 +1,115 @@ +# Generated by Django 4.0.4 on 2022-05-16 05:04 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('srmsApp', '0009_rename_opp_p_user1_oop_p'), + ] + + operations = [ + migrations.CreateModel( + name='ELSEM2', + fields=[ + ('ENROLLMENT_NO', models.IntegerField(primary_key=True, serialize=False)), + ('name', models.CharField(max_length=300)), + ('SEAT_NO', models.IntegerField(max_length=10)), + ('BRANCH', models.CharField(max_length=50)), + ('EC', models.CharField(max_length=300)), + ('EC_P', models.CharField(max_length=10)), + ('EEM', models.CharField(max_length=10)), + ('EEM_P', models.CharField(max_length=10)), + ('FPE', models.CharField(max_length=10)), + ('FPE_P', models.CharField(max_length=10)), + ('EPG', models.CharField(max_length=10)), + ('EPG_P', models.CharField(max_length=10)), + ('EMWP', models.CharField(max_length=10)), + ('EMWP_P', models.CharField(max_length=10)), + ('PERCENTAGE', models.FloatField(max_length=50)), + ('TOTAL', models.IntegerField(max_length=4)), + ('DIST', models.CharField(max_length=50)), + ], + options={ + 'db_table': 'ELSEM2', + }, + ), + migrations.CreateModel( + name='ELSEM3', + fields=[ + ('ENROLLMENT_NO', models.IntegerField(primary_key=True, serialize=False)), + ('name', models.CharField(max_length=300)), + ('SEAT_NO', models.IntegerField(max_length=10)), + ('BRANCH', models.CharField(max_length=50)), + ('MANAGEMENT', models.CharField(max_length=300)), + ('IAM', models.CharField(max_length=10)), + ('IAM_P', models.CharField(max_length=10)), + ('SP', models.CharField(max_length=10)), + ('SP_P', models.CharField(max_length=10)), + ('ECA', models.CharField(max_length=10)), + ('ECA_P', models.CharField(max_length=10)), + ('EIA', models.CharField(max_length=10)), + ('EIA_P', models.CharField(max_length=10)), + ('ED', models.CharField(max_length=10)), + ('IT', models.CharField(max_length=10)), + ('CPP', models.CharField(max_length=10)), + ('PERCENTAGE', models.FloatField(max_length=50)), + ('TOTAL', models.IntegerField(max_length=4)), + ('DIST', models.CharField(max_length=50)), + ], + options={ + 'db_table': 'ELSEM3', + }, + ), + migrations.CreateModel( + name='MESEM3', + fields=[ + ('ENROLLMENT_NO', models.IntegerField(primary_key=True, serialize=False)), + ('name', models.CharField(max_length=300)), + ('SEAT_NO', models.IntegerField(max_length=10)), + ('BRANCH', models.CharField(max_length=50)), + ('MANAGEMENT', models.CharField(max_length=300)), + ('PER', models.CharField(max_length=10)), + ('PER_P', models.CharField(max_length=10)), + ('AMP', models.CharField(max_length=10)), + ('AMP_P', models.CharField(max_length=10)), + ('EMD', models.CharField(max_length=10)), + ('EMD_P', models.CharField(max_length=10)), + ('PPE', models.CharField(max_length=10)), + ('PPE_P', models.CharField(max_length=10)), + ('SMAM', models.CharField(max_length=10)), + ('IT', models.CharField(max_length=10)), + ('CPP', models.CharField(max_length=10)), + ('PERCENTAGE', models.FloatField(max_length=50)), + ('TOTAL', models.IntegerField(max_length=4)), + ('DIST', models.CharField(max_length=50)), + ], + options={ + 'db_table': 'MESEM3', + }, + ), + migrations.CreateModel( + name='user12', + fields=[ + ('ENROLLMENT_NO', models.IntegerField(primary_key=True, serialize=False)), + ('name', models.CharField(max_length=300)), + ('SEAT_NO', models.IntegerField(max_length=10)), + ('BRANCH', models.CharField(max_length=50)), + ('ENGLISH', models.CharField(max_length=300)), + ('ENG_P', models.CharField(max_length=10)), + ('BASIC_SCIENCE', models.CharField(max_length=10)), + ('BS_P', models.CharField(max_length=10)), + ('BASIC_MATHEMATICS', models.CharField(max_length=10)), + ('ICT', models.CharField(max_length=10)), + ('EG', models.CharField(max_length=10)), + ('WP', models.CharField(max_length=10)), + ('PERCENTAGE', models.FloatField(max_length=50)), + ('TOTAL', models.IntegerField(max_length=4)), + ('DIST', models.CharField(max_length=50)), + ], + options={ + 'db_table': 'COSEM1', + }, + ), + ] diff --git a/srmsApp/migrations/0011_myuploadfileele.py b/srmsApp/migrations/0011_myuploadfileele.py new file mode 100644 index 0000000..601789d --- /dev/null +++ b/srmsApp/migrations/0011_myuploadfileele.py @@ -0,0 +1,21 @@ +# Generated by Django 4.0.4 on 2022-05-16 13:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('srmsApp', '0010_elsem2_elsem3_mesem3_user12'), + ] + + operations = [ + migrations.CreateModel( + name='myuploadfileele', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('f_name', models.CharField(max_length=255)), + ('myfiles', models.FileField(upload_to='ele')), + ], + ), + ] diff --git a/srmsApp/migrations/0012_rename_myuploadfileele_myuploadfile.py b/srmsApp/migrations/0012_rename_myuploadfileele_myuploadfile.py new file mode 100644 index 0000000..bc1dde4 --- /dev/null +++ b/srmsApp/migrations/0012_rename_myuploadfileele_myuploadfile.py @@ -0,0 +1,17 @@ +# Generated by Django 4.0.4 on 2022-05-16 13:24 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('srmsApp', '0011_myuploadfileele'), + ] + + operations = [ + migrations.RenameModel( + old_name='myuploadfileele', + new_name='myuploadfile', + ), + ] diff --git a/srmsApp/migrations/0013_myuploadfile1_myuploadfile2_myuploadfile3.py b/srmsApp/migrations/0013_myuploadfile1_myuploadfile2_myuploadfile3.py new file mode 100644 index 0000000..52c7b07 --- /dev/null +++ b/srmsApp/migrations/0013_myuploadfile1_myuploadfile2_myuploadfile3.py @@ -0,0 +1,46 @@ +# Generated by Django 4.0.4 on 2022-05-16 15:43 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('srmsApp', '0012_rename_myuploadfileele_myuploadfile'), + ] + + operations = [ + migrations.CreateModel( + name='myuploadfile', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('f_name', models.CharField(max_length=255)), + ('myfiles', models.FileField(upload_to='ele')), + ], + ), + migrations.CreateModel( + name='myuploadfile1', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('f_name', models.CharField(max_length=255)), + ('myfiles', models.FileField(upload_to='com')), + ], + ), + migrations.CreateModel( + name='myuploadfile2', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('f_name', models.CharField(max_length=255)), + ('myfiles', models.FileField(upload_to='civ')), + ], + ), + migrations.CreateModel( + name='myuploadfile3', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('f_name', models.CharField(max_length=255)), + ('myfiles', models.FileField(upload_to='mec')), + ], + ), + + ] diff --git a/srmsApp/migrations/__init__.py b/srmsApp/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/srmsApp/models.py b/srmsApp/models.py new file mode 100644 index 0000000..c1d92f5 --- /dev/null +++ b/srmsApp/models.py @@ -0,0 +1,237 @@ +from unittest import result +from django.db import models +from django.db.models import Sum +from django.utils import timezone +from importlib import import_module + +# Create your models here. +class Class(models.Model): + level = models.CharField(max_length=250) + section = models.CharField(max_length=250) + status = models.CharField(max_length=2, choices=(('1','Active'),('2','Inactive')), default = 1) + date_created = models.DateTimeField(default=timezone.now) + date_updated = models.DateTimeField(auto_now=True) + + def __str__(self): + return str(self.level + ' - ' + self.section) + +class Subject(models.Model): + name = models.CharField(max_length=250) + status = models.CharField(max_length=2, choices=(('1','Active'),('2','Inactive')), default = 1) + date_created = models.DateTimeField(default=timezone.now) + date_updated = models.DateTimeField(auto_now=True) + + def __str__(self): + return self.name + + +class Student(models.Model): + classI = models.ForeignKey(Class, on_delete= models.CASCADE) + student_id = models.CharField(max_length=250) + first_name = models.CharField(max_length=250) + middle_name = models.CharField(max_length=250, blank= True, null=True) + last_name = models.CharField(max_length=250) + gender = models.CharField(max_length=20, choices=(('Male','Male'),('Female','Female')), default = 1) + status = models.CharField(max_length=2, choices=(('1','Active'),('2','Inactive')), default = 1) + date_created = models.DateTimeField(default=timezone.now) + date_updated = models.DateTimeField(auto_now=True) + + def __str__(self): + return str(self.student_id + " - " + self.first_name + " " + (str(self.middle_name + " " + self.last_name) if self.middle_name != '' else self.last_name )) + + def get_name(self): + return str(self.first_name + " " + (str(self.middle_name + " " + self.last_name) if self.middle_name != '' else self.last_name )) + +class Result(models.Model): + student = models.ForeignKey(Student, on_delete=models.CASCADE) + semester = models.CharField(max_length=250,blank=True) + date_created = models.DateTimeField(default=timezone.now) + date_updated = models.DateTimeField(auto_now=True) + + def __str__(self): + return f"{self.student} - {self.semester}" + + def countSubjects(self): + try: + resultCount = Student_Subject_Result.objects.filter(result = self).count() + except: + resultCount = 0 + return resultCount + + def average(self): + try: + resultCount = Student_Subject_Result.objects.filter(result = self).count() + results = Student_Subject_Result.objects.filter(result = self).aggregate(Sum('grade'))['grade__sum'] + if not results is None: + average = results / resultCount + except Exception as err: + print(err) + average = 0 + return average + +class Student_Subject_Result(models.Model): + result = models.ForeignKey(Result, on_delete= models.CASCADE) + subject = models.ForeignKey(Subject, on_delete= models.CASCADE) + grade = models.FloatField(default=0) + + def __str__(self): + return f"{self.result} - {self.subject}" + + +class user(models.Model): + ENROLLMENT_NO = models.IntegerField(primary_key=True) + name = models.CharField(max_length=300) + SEAT_NO = models.IntegerField(max_length=10) + BRANCH=models.CharField(max_length=50) + EVS= models.CharField(max_length=300) + OS= models.CharField(max_length=10) + OS_P = models.CharField(max_length=10) + AJP = models.CharField(max_length=10) + AJP_P = models.CharField(max_length=10) + ST = models.CharField(max_length=10) + ST_P = models.CharField(max_length=10) + CSSL = models.CharField(max_length=10) + CSSL_P = models.CharField(max_length=10) + IT = models.CharField(max_length=10) + CPP = models.CharField(max_length=10) + PERCENTAGE = models.FloatField(max_length=50) + TOTAL = models.IntegerField(max_length=4) + DIST = models.CharField(max_length=50) + class Meta: + db_table="COSEM3" + +class user1(models.Model): + ENROLLMENT_NO = models.IntegerField(primary_key=True) + name = models.CharField(max_length=300) + SEAT_NO = models.IntegerField(max_length=10) + BRANCH=models.CharField(max_length=50) + OOP= models.CharField(max_length=300) + OOP_P= models.CharField(max_length=10) + DSU = models.CharField(max_length=10) + DSU_P = models.CharField(max_length=10) + CG = models.CharField(max_length=10) + CG_P = models.CharField(max_length=10) + DMS = models.CharField(max_length=10) + DMS_P = models.CharField(max_length=10) + DT = models.CharField(max_length=10) + DT_P = models.CharField(max_length=10) + PERCENTAGE = models.FloatField(max_length=50) + TOTAL = models.IntegerField(max_length=4) + DIST = models.CharField(max_length=50) + class Meta: + db_table="COSEM2" +class user12(models.Model): + ENROLLMENT_NO = models.IntegerField(primary_key=True) + name = models.CharField(max_length=300) + SEAT_NO = models.IntegerField(max_length=10) + BRANCH=models.CharField(max_length=50) + ENGLISH= models.CharField(max_length=300) + ENG_P= models.CharField(max_length=10) + BASIC_SCIENCE = models.CharField(max_length=10) + BS_P = models.CharField(max_length=10) + BASIC_MATHEMATICS = models.CharField(max_length=10) + ICT = models.CharField(max_length=10) + EG = models.CharField(max_length=10) + WP = models.CharField(max_length=10) + PERCENTAGE = models.FloatField(max_length=50) + TOTAL = models.IntegerField(max_length=4) + DIST = models.CharField(max_length=50) + class Meta: + db_table="COSEM1" +class MESEM3(models.Model): + ENROLLMENT_NO = models.IntegerField(primary_key=True) + name = models.CharField(max_length=300) + SEAT_NO = models.IntegerField(max_length=10) + BRANCH=models.CharField(max_length=50) + MANAGEMENT= models.CharField(max_length=300) + PER= models.CharField(max_length=10) + PER_P = models.CharField(max_length=10) + AMP = models.CharField(max_length=10) + AMP_P = models.CharField(max_length=10) + EMD = models.CharField(max_length=10) + EMD_P = models.CharField(max_length=10) + PPE = models.CharField(max_length=10) + PPE_P = models.CharField(max_length=10) + SMAM = models.CharField(max_length=10) + IT = models.CharField(max_length=10) + CPP = models.CharField(max_length=10) + PERCENTAGE = models.FloatField(max_length=50) + TOTAL = models.IntegerField(max_length=4) + DIST = models.CharField(max_length=50) + class Meta: + db_table="MESEM3" + +class ELSEM3(models.Model): + ENROLLMENT_NO = models.IntegerField(primary_key=True) + name = models.CharField(max_length=300) + SEAT_NO = models.IntegerField(max_length=10) + BRANCH=models.CharField(max_length=50) + MANAGEMENT= models.CharField(max_length=300) + IAM= models.CharField(max_length=10) + IAM_P = models.CharField(max_length=10) + SP = models.CharField(max_length=10) + SP_P = models.CharField(max_length=10) + ECA = models.CharField(max_length=10) + ECA_P = models.CharField(max_length=10) + EIA = models.CharField(max_length=10) + EIA_P = models.CharField(max_length=10) + ED = models.CharField(max_length=10) + IT = models.CharField(max_length=10) + CPP = models.CharField(max_length=10) + PERCENTAGE = models.FloatField(max_length=50) + TOTAL = models.IntegerField(max_length=4) + DIST = models.CharField(max_length=50) + class Meta: + db_table="ELSEM3" + + +class ELSEM2(models.Model): + ENROLLMENT_NO = models.IntegerField(primary_key=True) + name = models.CharField(max_length=300) + SEAT_NO = models.IntegerField(max_length=10) + BRANCH=models.CharField(max_length=50) + EC= models.CharField(max_length=300) + EC_P= models.CharField(max_length=10) + EEM = models.CharField(max_length=10) + EEM_P = models.CharField(max_length=10) + FPE = models.CharField(max_length=10) + FPE_P = models.CharField(max_length=10) + EPG = models.CharField(max_length=10) + EPG_P = models.CharField(max_length=10) + EMWP = models.CharField(max_length=10) + EMWP_P = models.CharField(max_length=10) + PERCENTAGE = models.FloatField(max_length=50) + TOTAL = models.IntegerField(max_length=4) + DIST = models.CharField(max_length=50) + class Meta: + db_table="ELSEM2" + +class myuploadfile(models.Model): + f_name = models.CharField(max_length=255) + myfiles = models.FileField(upload_to="ele") + + def __str__(self): + return self.f_name + +class myuploadfile1(models.Model): + f_name = models.CharField(max_length=255) + myfiles = models.FileField(upload_to="com") + + def __str__(self): + return self.f_name +class myuploadfile2(models.Model): + f_name = models.CharField(max_length=255) + myfiles = models.FileField(upload_to="civ") + + def __str__(self): + return self.f_name +class myuploadfile3(models.Model): + f_name = models.CharField(max_length=255) + myfiles = models.FileField(upload_to="mec") + + def __str__(self): + return self.f_name + + + + diff --git a/srmsApp/procfile b/srmsApp/procfile new file mode 100644 index 0000000..b87c3eb --- /dev/null +++ b/srmsApp/procfile @@ -0,0 +1 @@ +web: gunicorn CCMS.wsgi --log-file - \ No newline at end of file diff --git a/srmsApp/templates/chartapp/chatcosem1.html b/srmsApp/templates/chartapp/chatcosem1.html new file mode 100644 index 0000000..1a4f74b --- /dev/null +++ b/srmsApp/templates/chartapp/chatcosem1.html @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + +
+ +BACK +
+

Result Anaylsis For SEM-1 By Chart

+ +
+ + + +
+
+ + + + + + + + + + + diff --git a/srmsApp/templates/chartapp/chatcosem2.html b/srmsApp/templates/chartapp/chatcosem2.html new file mode 100644 index 0000000..2b17d86 --- /dev/null +++ b/srmsApp/templates/chartapp/chatcosem2.html @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + +
+ +BACK +
+

Result Anaylsis For SEM-3 By Chart

+ +
+ + + +
+
+ + + + + + + + + + + diff --git a/srmsApp/templates/chartapp/chatcosem3.html b/srmsApp/templates/chartapp/chatcosem3.html new file mode 100644 index 0000000..821b814 --- /dev/null +++ b/srmsApp/templates/chartapp/chatcosem3.html @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + +
+ +BACK +
+

Result Anaylsis For SEM-5 By Chart

+ +
+ + + +
+
+ + + + + + + + + + + diff --git a/srmsApp/templates/chartapp/chatel2.html b/srmsApp/templates/chartapp/chatel2.html new file mode 100644 index 0000000..0f3585e --- /dev/null +++ b/srmsApp/templates/chartapp/chatel2.html @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + +
+ +BACK +
+

Result Anaylsis For SEM-3 By Chart

+ +
+ + + +
+
+ + + + + + + + + + + diff --git a/srmsApp/templates/chartapp/chatel3.html b/srmsApp/templates/chartapp/chatel3.html new file mode 100644 index 0000000..8f3cfc2 --- /dev/null +++ b/srmsApp/templates/chartapp/chatel3.html @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + +
+ +BACK +
+

Result Anaylsis For SEM-5 By Chart

+ +
+ + + +
+
+ + + + + + + + + + + diff --git a/srmsApp/templates/civ1.html b/srmsApp/templates/civ1.html new file mode 100644 index 0000000..2dbbf6b --- /dev/null +++ b/srmsApp/templates/civ1.html @@ -0,0 +1,102 @@ +{% extends "layouts/base.html" %} {% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + + + + + + +

PDF Scraper Fro Msbte Results

+
+

SEMESTER FIRST

+
+ +
+

Coming Soon.....

+ + + + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/civ2.html b/srmsApp/templates/civ2.html new file mode 100644 index 0000000..76f7ec1 --- /dev/null +++ b/srmsApp/templates/civ2.html @@ -0,0 +1,101 @@ +{% extends "layouts/base.html" %} {% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + + + + + + +

PDF Scraper Fro Msbte Results

+
+

SEMESTER THIRD

+
+ +
+

Coming Soon.....

+ + + + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/civ3.html b/srmsApp/templates/civ3.html new file mode 100644 index 0000000..9611df3 --- /dev/null +++ b/srmsApp/templates/civ3.html @@ -0,0 +1,102 @@ +{% extends "layouts/base.html" %} {% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + + + + + + +

PDF Scraper Fro Msbte Results

+
+

SEMESTER FIFTH

+
+ +
+

Coming Soon.....

+ + + + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/civ_teach.html b/srmsApp/templates/civ_teach.html new file mode 100644 index 0000000..8a053d4 --- /dev/null +++ b/srmsApp/templates/civ_teach.html @@ -0,0 +1,209 @@ +{% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + + + + Computer Department | Result Analysis System + + + + BACK +
+

Choose a Semester for Civil Department

+ + +
+ + +
+ +
+ + +
+ + +
+ + + + + + + + + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/civb.html b/srmsApp/templates/civb.html new file mode 100644 index 0000000..032ac0a --- /dev/null +++ b/srmsApp/templates/civb.html @@ -0,0 +1,105 @@ +{% extends "layouts/base.html" %} {% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + + + + + + +

PDF SCRAPER FOR MSBTE RESULT

+
+

SEMESTER FIRST ,THRID , FIFTH

+
+ +
+ +
+ + + {% csrf_token %} + ------------------------------------------------------------------------------------------------------------------------------------------------ + +
+ + +
+ ------------------------------------------------------------------------------------------------------------------------------------------------ + +
+ + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/class_mgt.html b/srmsApp/templates/class_mgt.html new file mode 100644 index 0000000..e3a95da --- /dev/null +++ b/srmsApp/templates/class_mgt.html @@ -0,0 +1,136 @@ +{% extends 'layouts/base.html' %} {% load humanize %} {% block content %} +
+
+
+
+
+

Class List

+
+ +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + {% for class in classes %} + + + + + + + + + {% endfor %} + +
#Date/TimeBranchSEMESTERStatusAction
{{ forloop.counter }}{{ class.date_created|date:"Y-m-d h:i A" }}{{ class.level }}{{ class.section }} + {% if class.status == '1' %} + Active {% else %} + Inactive {% endif %} + + + + + +
+
+
+
+
+
+{% endblock content %} {% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/com_teacher/com_teach.html b/srmsApp/templates/com_teacher/com_teach.html new file mode 100644 index 0000000..d793422 --- /dev/null +++ b/srmsApp/templates/com_teacher/com_teach.html @@ -0,0 +1,433 @@ +{% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + +{%load static%} + + + + + + + + + + + + + + Computer Branch | SEM-3 + + + + + + BACKAnalysis-VIEW +
+ +

Computer Branch | SEM-5

+

Result Analyzer System

+ + + + +
+ + +
+
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + {% for result in user%} + + + + + + + + + + + + + + + + + + + + + + {% endfor %} + +
#Enrollment no.Seat no.NameEVSOSOS_PAJPAJP_PSTST_PCSSLCSSL_PITCPPPER %TOTALDIST
{{ forloop.counter }} {{ result.ENROLLMENT_NO }} {{ result.SEAT_NO }} {{ result.name }} {{ result.EVS}} {{ result.OS }} {{ result.OS_P }} {{ result.AJP }} {{ result.AJP_P}} {{ result.ST}} {{ result.ST_P}} {{ result.CSSL}} {{ result.CSSL_P}} {{ result.IT}} {{ result.CPP}} {{ result.PERCENTAGE}} {{ result.TOTAL}} {{ result.DIST}}
+ + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Total Student in classNumber of AppearedNo of FAILNo of ATKTNo of First ClassNo of First Class DistNo of First Class ConOverAll Avearge Result in %
76 {{avg}}
+ + + + +
+ + + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} + + + + + + diff --git a/srmsApp/templates/com_teacher/com_teacher1.html b/srmsApp/templates/com_teacher/com_teacher1.html new file mode 100644 index 0000000..43e2de6 --- /dev/null +++ b/srmsApp/templates/com_teacher/com_teacher1.html @@ -0,0 +1,424 @@ +{% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + +{%load static%} + + + + + + + + + + + + + + Computer Branch | SEM-1 + + + + + + BACKAnalysis-VIEW +
+ +

Computer Branch | SEM-1

+

Result Analyzer System

+ + + + +
+ + +
+
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + {% for result in user%} + + + + + + + + + + + + + + + + + + + + {% endfor %} + +
#Enrollment no.NameSeat no.BranchENGLISHENG_PBASIC_SCIENCEBS_PBASIC_MATHEMATICSICTEGWPPERTOTALDIST%
{{ forloop.counter }} {{ result.ENROLLMENT_NO }} {{ result.name }} {{ result.SEAT_NO }} {{ result.BRANCH }} {{ result.ENGLISH}} {{ result.ENG_P}} {{ result.BASIC_SCIENCE}} {{ result.BS_P }} {{ result.BASIC_MATHEMATICS}} {{ result.ICT}} {{ result.EG}} {{ result.WP}} {{ result.PERCENTAGE}} {{ result.TOTAL}} {{ result.DIST}}
+ + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Total Student in classNumber of AppearedNo of FAILNo of ATKTNo of First ClassNo of First Class DistNo of First Class ConOverAll Avearge Result in %
60 {{avg}}
+ + + + +
+ + + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} + diff --git a/srmsApp/templates/com_teacher/comsem_t.html b/srmsApp/templates/com_teacher/comsem_t.html new file mode 100644 index 0000000..bca23c6 --- /dev/null +++ b/srmsApp/templates/com_teacher/comsem_t.html @@ -0,0 +1,121 @@ + {% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + + + + COMPUTER BRANCH + +
+
+
+
+
+ + BACK +

Teacher DashBorad

+
+
+

Computer Engineering

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
+

Select Semester

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +
+ First Semester
+ Third Semester
+ Fifth Semester
+ + +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
+
+
+
+
+
+ + + +{% endblock content %} + + diff --git a/srmsApp/templates/com_teacher/menu_teach.html b/srmsApp/templates/com_teacher/menu_teach.html new file mode 100644 index 0000000..4ee39a8 --- /dev/null +++ b/srmsApp/templates/com_teacher/menu_teach.html @@ -0,0 +1,435 @@ +{% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + +{%load static%} + + + + + + + + + + + + + + Computer Branch | SEM-3 + + + + + + BACKAnalysis-VIEW +
+ +

Computer Branch | SEM-3

+

Result Analyzer System

+ + + + +
+ + +
+
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + {% for result in user%} + + + + + + + + + + + + + + + + + + + + + + {% endfor %} + +
#Enrollment no.NameSeat no.BranchOOPOOP_PDSUDSU_PCGCG_PDMSDMS_PDTDT_PPER %TOTALDIST
{{ forloop.counter }} {{ result.ENROLLMENT_NO }} {{ result.name }} {{ result.SEAT_NO }} {{ result.BRANCH }} {{ result.OOP}} {{ result.OOP_P}} {{ result.DSU}} {{ result.DSU_P }} {{ result.CG}} {{ result.CG_P}} {{ result.DMS}} {{ result.DMS_P}} {{ result.DT}} {{ result.DT_P}} {{ result.PERCENTAGE}} {{ result.TOTAL}} {{ result.DIST}}
+ + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Total Student in classNumber of AppearedNo of FAILNo of ATKTNo of First ClassNo of First Class DistNo of First Class ConOverAll Avearge Result in %
69 {{avg}}
+ + + + +
+ + + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} + + + + + + + + diff --git a/srmsApp/templates/cosem1_r.html b/srmsApp/templates/cosem1_r.html new file mode 100644 index 0000000..505e8f1 --- /dev/null +++ b/srmsApp/templates/cosem1_r.html @@ -0,0 +1,84 @@ +{% extends 'layouts/base.html' %} {% load humanize %} {% block content %} +
+
+
+
+
+

Result List

+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + {% for result in user%} + + + + + + + + + + {% endfor %} + +
#Seat no.StudentBranchTotalAverageDIST
{{ forloop.counter }}{{ result.SEAT_NO }}{{ result.name }}{{ result.BRANCH }}{{ result.TOTAL}}{{ result.PERCENTAGE}}{{ result.DIST}} + +
+
+
+
+
+
+{% endblock content %} {% block javascripts %} + +{% endblock javascripts %} + + diff --git a/srmsApp/templates/cosem2_r.html b/srmsApp/templates/cosem2_r.html new file mode 100644 index 0000000..f313436 --- /dev/null +++ b/srmsApp/templates/cosem2_r.html @@ -0,0 +1,84 @@ +{% extends 'layouts/base.html' %} {% load humanize %} {% block content %} +
+
+
+
+
+

Result List

+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + {% for result in user1%} + + + + + + + + + + {% endfor %} + +
#Seat no.StudentBranchTotalAverageDIST
{{ forloop.counter }}{{ result.SEAT_NO }}{{ result.name }}{{ result.BRANCH }}{{ result.TOTAL}}{{ result.PERCENTAGE}}{{ result.DIST}} + +
+
+
+
+
+
+{% endblock content %} {% block javascripts %} + +{% endblock javascripts %} + + diff --git a/srmsApp/templates/cosem3.html b/srmsApp/templates/cosem3.html new file mode 100644 index 0000000..50d227b --- /dev/null +++ b/srmsApp/templates/cosem3.html @@ -0,0 +1,106 @@ +{% extends "layouts/base.html" %} {% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + + + + + + +

PDF SCRAPER FOR MSBTE RESULT

+
+

SEMESTER FIRST,THIRD,FIFTH

+
+ +
+
+ + + {% csrf_token %} + ------------------------------------------------------------------------------------------------------------------------------------------------ + +
+ + +
+ ------------------------------------------------------------------------------------------------------------------------------------------------ + +
+ + + + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/cosem3_R.html b/srmsApp/templates/cosem3_R.html new file mode 100644 index 0000000..505e8f1 --- /dev/null +++ b/srmsApp/templates/cosem3_R.html @@ -0,0 +1,84 @@ +{% extends 'layouts/base.html' %} {% load humanize %} {% block content %} +
+
+
+
+
+

Result List

+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + {% for result in user%} + + + + + + + + + + {% endfor %} + +
#Seat no.StudentBranchTotalAverageDIST
{{ forloop.counter }}{{ result.SEAT_NO }}{{ result.name }}{{ result.BRANCH }}{{ result.TOTAL}}{{ result.PERCENTAGE}}{{ result.DIST}} + +
+
+
+
+
+
+{% endblock content %} {% block javascripts %} + +{% endblock javascripts %} + + diff --git a/srmsApp/templates/costud3_m.html b/srmsApp/templates/costud3_m.html new file mode 100644 index 0000000..9563583 --- /dev/null +++ b/srmsApp/templates/costud3_m.html @@ -0,0 +1,80 @@ +{% extends 'layouts/base.html' %} {% load humanize %} {% block content %} +
+
+
+
+
+

Student List

+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + {% for result in user1%} + + + + + + + + + {% endfor %} + +
#ENROLLMENT_NOSEAT_NONAMEBRANCHACTIVE
{{ forloop.counter }}{{ result.ENROLLMENT_NO }}{{ result.SEAT_NO }} {{ result.name }} {{ result.BRANCH }}yes + +
+
+
+
+
+
+{% endblock content %} {% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/elb1.html b/srmsApp/templates/elb1.html new file mode 100644 index 0000000..c0fba44 --- /dev/null +++ b/srmsApp/templates/elb1.html @@ -0,0 +1 @@ +

Coming Soon....

\ No newline at end of file diff --git a/srmsApp/templates/elb2.html b/srmsApp/templates/elb2.html new file mode 100644 index 0000000..db2bb3a --- /dev/null +++ b/srmsApp/templates/elb2.html @@ -0,0 +1,434 @@ +{% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + +{%load static%} + + + + + + + + + + + + + + Mechanical Branch | SEM-5 + + + + + + BACKAnalysis-VIEW +
+ +

Mechanical Branch | SEM-3

+

Result Analyzer System

+ + + + +
+ + +
+
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + {% for result in user%} + + + + + + + + + + + + + + + + + + + + + {% endfor %} + +
#Enrollment no.Seat no.NameECEC_PEEMEEM_PFPEFPE_PEPGEPG_PEMWPEMWP_PPER %TOTALDIST
{{ forloop.counter }} {{ result.ENROLLMENT_NO }} {{ result.SEAT_NO }} {{ result.name }} {{ result.EC }} {{ result.EC_P }} {{ result.EEM }} {{ result.EEM_P}} {{ result.FPE}} {{ result.FPE_P}} {{ result.EPG}} {{ result.EPG_P}} {{ result.EMWP}} {{ result.EMWP_P}} {{ result.PERCENTAGE}} {{ result.TOTAL}} {{ result.DIST}}
+ + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Total Student in classNumber of AppearedNo of FAILNo of ATKTNo of Second classNo of Second class conNo of First ClassNo of First Class DistNo of First Class ConOverAll Avearge Result in %
56 {{avg}}
+ + + + +
+ + + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} + diff --git a/srmsApp/templates/elb3.html b/srmsApp/templates/elb3.html new file mode 100644 index 0000000..e5b194f --- /dev/null +++ b/srmsApp/templates/elb3.html @@ -0,0 +1,438 @@ +{% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + +{%load static%} + + + + + + + + + + + + + + Mechanical Branch | SEM-5 + + + + + + BACKAnalysis-VIEW +
+ +

Mechanical Branch | SEM-5

+

Result Analyzer System

+ + + + +
+ + +
+
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + {% for result in user%} + + + + + + + + + + + + + + + + + + + + + + + {% endfor %} + +
#Enrollment no.Seat no.NameMANAGEMENTIAMIAM_PSPSP_PECPECP_PEIAEIA_PEDITCPPPER %TOTALDIST
{{ forloop.counter }} {{ result.ENROLLMENT_NO }} {{ result.SEAT_NO }} {{ result.name }} {{ result.MANAGEMENT}} {{ result.IAM }} {{ result.IAM_P }} {{ result.SP }} {{ result.SP_P}} {{ result.ECA}} {{ result.ECA_P}} {{ result.EIA}} {{ result.EIA_P}} {{ result.ED}} {{ result.IT}} {{ result.CPP}} {{ result.PERCENTAGE}} {{ result.TOTAL}} {{ result.DIST}}
+ + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Total Student in classNumber of AppearedNo of FAILNo of ATKTNo of Second classNo of Second class conNo of First ClassNo of First Class DistNo of First Class ConOverAll Avearge Result in %
58 {{avg}}
+ + + + +
+ + + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} + diff --git a/srmsApp/templates/ele_teach.html b/srmsApp/templates/ele_teach.html new file mode 100644 index 0000000..ad8061d --- /dev/null +++ b/srmsApp/templates/ele_teach.html @@ -0,0 +1,121 @@ +{% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + + + + Electrical BRANCH + +
+
+
+
+
+ + BACK +

Teacher DashBorad

+
+
+

Electrical Engineering

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
+

Select Semester

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +
+ First Semester
+ Third Semester
+ Fifth Semester
+ + +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
+
+
+
+
+
+ + + +{% endblock content %} + + diff --git a/srmsApp/templates/eleb.html b/srmsApp/templates/eleb.html new file mode 100644 index 0000000..7e2f964 --- /dev/null +++ b/srmsApp/templates/eleb.html @@ -0,0 +1,106 @@ +{% extends "layouts/base.html" %} {% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + + + + + + +

PDF SCRAPER FOR MSBTE RESULT

+
+

SEMESTER THRID , FIFTH

+
+ +
+ +
+ + + {% csrf_token %} + ------------------------------------------------------------------------------------------------------------------------------------------------ + +
+ + +
+ ------------------------------------------------------------------------------------------------------------------------------------------------ + +
+ + + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/home.html b/srmsApp/templates/home.html new file mode 100644 index 0000000..27f586e --- /dev/null +++ b/srmsApp/templates/home.html @@ -0,0 +1,107 @@ +{% extends "layouts/base.html" %} {% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + + + Document + + +

PDF SCRAPER FOR MSBTE RESULT

+
+ System Logo +
+
+

Select Branch

+---------------------------------------------------------------------------------------------------------------------------------------------- +STEP 1 :- (FIRST UPLOAD PDF) STEP 2:- Computer Engineering
+STEP 1 :- (FIRST UPLOAD PDF) STEP 2:-Mechanical Engineering
+ +STEP 1 :- (FIRST UPLOAD PDF) STEP 2:- Electrical Engineering
+ +----------------------------------------------------------------------------------------------------------------------------------------------- +
+ + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/includes/fixed-plugin.html b/srmsApp/templates/includes/fixed-plugin.html new file mode 100644 index 0000000..b52c0fa --- /dev/null +++ b/srmsApp/templates/includes/fixed-plugin.html @@ -0,0 +1,65 @@ + +
+ + settings + +
+
+
+
Material UI Configurator
+

See our dashboard options.

+
+
+ +
+ +
+
+
+ +
+
Sidebar Colors
+
+ +
+ + + + + + +
+
+ +
+
Sidenav Type
+

Choose between 2 different sidenav types.

+
+
+ + + +
+

You can change the sidenav type just on desktop view.

+ +
+
Navbar Fixed
+
+ +
+
+
+
+
Light / Dark
+
+ +
+
+
+
+
+
+ + \ No newline at end of file diff --git a/srmsApp/templates/includes/footer-fullscreen.html b/srmsApp/templates/includes/footer-fullscreen.html new file mode 100644 index 0000000..b764ed8 --- /dev/null +++ b/srmsApp/templates/includes/footer-fullscreen.html @@ -0,0 +1,24 @@ + + diff --git a/srmsApp/templates/includes/footer.html b/srmsApp/templates/includes/footer.html new file mode 100644 index 0000000..4d3d936 --- /dev/null +++ b/srmsApp/templates/includes/footer.html @@ -0,0 +1,21 @@ + + diff --git a/srmsApp/templates/includes/modals.html b/srmsApp/templates/includes/modals.html new file mode 100644 index 0000000..37f5f30 --- /dev/null +++ b/srmsApp/templates/includes/modals.html @@ -0,0 +1,31 @@ + + \ No newline at end of file diff --git a/srmsApp/templates/includes/navigation-fullscreen.html b/srmsApp/templates/includes/navigation-fullscreen.html new file mode 100644 index 0000000..810d616 --- /dev/null +++ b/srmsApp/templates/includes/navigation-fullscreen.html @@ -0,0 +1,39 @@ +
+
+
+ + + +
+
+
\ No newline at end of file diff --git a/srmsApp/templates/includes/navigation.html b/srmsApp/templates/includes/navigation.html new file mode 100644 index 0000000..ee9da1b --- /dev/null +++ b/srmsApp/templates/includes/navigation.html @@ -0,0 +1,45 @@ + + + + \ No newline at end of file diff --git a/srmsApp/templates/includes/scripts.html b/srmsApp/templates/includes/scripts.html new file mode 100644 index 0000000..7804067 --- /dev/null +++ b/srmsApp/templates/includes/scripts.html @@ -0,0 +1,56 @@ + {% load static %} + + + + + \ No newline at end of file diff --git a/srmsApp/templates/includes/sidebar-rtl.html b/srmsApp/templates/includes/sidebar-rtl.html new file mode 100644 index 0000000..07256ca --- /dev/null +++ b/srmsApp/templates/includes/sidebar-rtl.html @@ -0,0 +1,86 @@ + + \ No newline at end of file diff --git a/srmsApp/templates/includes/sidebar.html b/srmsApp/templates/includes/sidebar.html new file mode 100644 index 0000000..d3c16b9 --- /dev/null +++ b/srmsApp/templates/includes/sidebar.html @@ -0,0 +1,90 @@ + + \ No newline at end of file diff --git a/srmsApp/templates/layouts/base-fullscreen.html b/srmsApp/templates/layouts/base-fullscreen.html new file mode 100644 index 0000000..8b2d7ac --- /dev/null +++ b/srmsApp/templates/layouts/base-fullscreen.html @@ -0,0 +1,71 @@ + + + + + + + + + + + Django Material Dashboard 2 - {% block title %}{% endblock %} | AppSeed + + + + + + + + + + + + + + {% block stylesheets %}{% endblock stylesheets %} + + + + + {% include 'includes/navigation-fullscreen.html' %} + +
+ + {% block content %}{% endblock content %} + +
+ + {% include 'includes/scripts.html' %} + + + {% block javascripts %}{% endblock javascripts %} + + + + + + + + + diff --git a/srmsApp/templates/layouts/base-rtl.html b/srmsApp/templates/layouts/base-rtl.html new file mode 100644 index 0000000..01c89e3 --- /dev/null +++ b/srmsApp/templates/layouts/base-rtl.html @@ -0,0 +1,75 @@ + + + + + + + + + + + Django Material Dashboard 2 - {% block title %}{% endblock %} | AppSeed + + + + + + + + + + + + + + {% block stylesheets %}{% endblock stylesheets %} + + + + + {% include 'includes/sidebar-rtl.html' %} + +
+ + {% include 'includes/navigation.html' %} + + {% block content %}{% endblock content %} + +
+ + {% include 'includes/fixed-plugin.html' %} + + {% include 'includes/scripts.html' %} + + + {% block javascripts %}{% endblock javascripts %} + + + + + + + + + diff --git a/srmsApp/templates/layouts/base.html b/srmsApp/templates/layouts/base.html new file mode 100644 index 0000000..85ec204 --- /dev/null +++ b/srmsApp/templates/layouts/base.html @@ -0,0 +1,122 @@ + {% load static %} {% load customfilter %} + + + + + + + + + + + + {{ page_title }} | {{ system_name }} + + + + + + + + + + + + + + + + + + + + + + + + + + + {% block stylesheets %}{% endblock stylesheets %} + + + + + + + + {% if has_sidebar %} {% include 'includes/sidebar.html' %} {% endif %} + +
+ + {% if has_navigation %}{% include 'includes/navigation.html' %}{% endif %} {% if messages %} +
+
+
+ {% for message in messages %} +
+
+
{{ message|safe }}
+
+ +
+
+ +
+ {% if message.extra_tags != 'stay' %} + + {% endif %} {% endfor %} +
+
+
{% endif %} {% block content %}{% endblock content %} + +
+ {% include 'includes/modals.html' %} {% include 'includes/fixed-plugin.html' %} {% include 'includes/scripts.html' %} + + + {% block javascripts %}{% endblock javascripts %} + + + + + + + + + + + + \ No newline at end of file diff --git a/srmsApp/templates/list_results.html b/srmsApp/templates/list_results.html new file mode 100644 index 0000000..650d103 --- /dev/null +++ b/srmsApp/templates/list_results.html @@ -0,0 +1,78 @@ +{% extends 'layouts/base.html' %}{% load static %}{% block content %} + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + {% for result in user%} + + + + + + + + + + + + + + + + + + + + + + + {% endfor %} + +
#Enrollment no.NameSeat no.BranchEVSOS_THOS_PRAJP_THAJP_PRST_THST_PRCSSL_THCSSL_PRITCPPPER %TOTALDIST
{{ forloop.counter }} {{ result.ENROLLMENT_NO }} {{ result.name }} {{ result.SEAT_NO }} {{ result.BRANCH }} {{ result.EVS}} {{ result.OS }} {{ result.OS_P }} {{ result.AJP }} {{ result.AJP_P}} {{ result.ST}} {{ result.ST_P}} {{ result.CSSL}} {{ result.CSSL_P}} {{ result.IT}} {{ result.CPP}} {{ result.PERCENTAGE}} {{ result.TOTAL}} {{ result.DIST}}
+
+
+ + + + + +{% endblock content %} {% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/login.html b/srmsApp/templates/login.html new file mode 100644 index 0000000..487d9b8 --- /dev/null +++ b/srmsApp/templates/login.html @@ -0,0 +1,453 @@ +{% extends 'layouts/base.html' %}{% load static %}{% block content %} +Result Analyzer System + +
+ +
+
+
+
+
+ + +
+
+
+
+ + +
+

Copyright © Result Analyzer System

+
+ + + + +
+
+
+ System Logo +
+
+

{{ system_name }}

+
+
+
+

Login

+
+
+
+
+ {% csrf_token %} +
+ + +
+
+ + +
+
+
+
+
+ +
+
+
+

Copyright © Result Analyzer System

+
+
+
+
+
+
+
+ +{% endblock content %} {% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/manage_class.html b/srmsApp/templates/manage_class.html new file mode 100644 index 0000000..83d3f2e --- /dev/null +++ b/srmsApp/templates/manage_class.html @@ -0,0 +1,78 @@ +{% load customfilter %} +
+
+ {% csrf_token %} + +
+ + +
+
+ + +
+
+ + +
+
+
+ \ No newline at end of file diff --git a/srmsApp/templates/manage_profile.html b/srmsApp/templates/manage_profile.html new file mode 100644 index 0000000..1c070bc --- /dev/null +++ b/srmsApp/templates/manage_profile.html @@ -0,0 +1,56 @@ +{% extends 'layouts/base.html' %}{% load static %}{% block content %} +
+
+
+
+
+

Update Account Details

+
+
+
+
+ {% csrf_token %} +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ {% for field in form %} {% for error in field.errors %} +
+

{{ error }}

+
+ {% endfor %} {% endfor %} +
+
+ +
+
+
+
+
+
+
+
+
+
+
+{% endblock content %} \ No newline at end of file diff --git a/srmsApp/templates/manage_result.html b/srmsApp/templates/manage_result.html new file mode 100644 index 0000000..d908fa5 --- /dev/null +++ b/srmsApp/templates/manage_result.html @@ -0,0 +1,218 @@ +{% load customfilter %} +
+
+ {% csrf_token %} + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+
+ + + + + + + + + + + + + + + {% for mark in marks %} + + + + + + {% endfor %} + + + + + + + +
SubjectMarkAction
+ + + {{ mark.subject }} + {{ mark.grade }} + +
Average0.00
+
+
+ + \ No newline at end of file diff --git a/srmsApp/templates/mb1.html b/srmsApp/templates/mb1.html new file mode 100644 index 0000000..e69de29 diff --git a/srmsApp/templates/mb2.html b/srmsApp/templates/mb2.html new file mode 100644 index 0000000..e69de29 diff --git a/srmsApp/templates/mb3.html b/srmsApp/templates/mb3.html new file mode 100644 index 0000000..ec29c54 --- /dev/null +++ b/srmsApp/templates/mb3.html @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + +
+ +BACK +
+

Result Anaylsis For SEM-5 By Chart

+ +
+ + + +
+
+ + + + + + + + + + + diff --git a/srmsApp/templates/mecb.html b/srmsApp/templates/mecb.html new file mode 100644 index 0000000..e75ecd1 --- /dev/null +++ b/srmsApp/templates/mecb.html @@ -0,0 +1,105 @@ +{% extends "layouts/base.html" %} {% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + + + + + + +

PDF SCRAPER FOR MSBTE RESULT

+
+

SEMESTER FIFTH

+
+ + +
+ + + {% csrf_token %} + ------------------------------------------------------------------------------------------------------------------------------------------------ + +
+ + +
+ ------------------------------------------------------------------------------------------------------------------------------------------------ + +
+ + + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/mech_teacher/me1.html b/srmsApp/templates/mech_teacher/me1.html new file mode 100644 index 0000000..d3a72a0 --- /dev/null +++ b/srmsApp/templates/mech_teacher/me1.html @@ -0,0 +1 @@ +

Coming Soon...

\ No newline at end of file diff --git a/srmsApp/templates/mech_teacher/me3.html b/srmsApp/templates/mech_teacher/me3.html new file mode 100644 index 0000000..d3a72a0 --- /dev/null +++ b/srmsApp/templates/mech_teacher/me3.html @@ -0,0 +1 @@ +

Coming Soon...

\ No newline at end of file diff --git a/srmsApp/templates/mech_teacher/me5.html b/srmsApp/templates/mech_teacher/me5.html new file mode 100644 index 0000000..9705ffd --- /dev/null +++ b/srmsApp/templates/mech_teacher/me5.html @@ -0,0 +1,430 @@ +{% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + +{%load static%} + + + + + + + + + + + + + + Mechanical Branch | SEM-5 + + + + + + BACKAnalysis-VIEW +
+ +

Mechanical Branch | SEM-5

+

Result Analyzer System

+ + + + +
+ + +
+
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + {% for result in user%} + + + + + + + + + + + + + + + + + + + + + + + {% endfor %} + +
#Enrollment no.Seat no.NameMANAGEMENTPERPER_PAMPAMP_PEMDEMD_PPPEPPE_PSMAMITCPPPER %TOTALDIST
{{ forloop.counter }} {{ result.ENROLLMENT_NO }} {{ result.SEAT_NO }} {{ result.name }} {{ result.MANAGEMENT}} {{ result.PER }} {{ result.PER_P }} {{ result.AMP }} {{ result.AMP_P}} {{ result.EMD}} {{ result.EMD_P}} {{ result.PPE}} {{ result.PPE_P}} {{ result.SMAM}} {{ result.IT}} {{ result.CPP}} {{ result.PERCENTAGE}} {{ result.TOTAL}} {{ result.DIST}}
+ + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Total Student in classNumber of AppearedNo of FAILNo of ATKTNo of First ClassNo of First Class DistNo of First Class ConOverAll Avearge Result in %
46 {{avg}}
+ + + + +
+ + + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} + diff --git a/srmsApp/templates/mech_teacher/mec_teach.html b/srmsApp/templates/mech_teacher/mec_teach.html new file mode 100644 index 0000000..b6da523 --- /dev/null +++ b/srmsApp/templates/mech_teacher/mec_teach.html @@ -0,0 +1,121 @@ +{% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + + + + MECHANICAL BRANCH + +
+
+
+
+
+ + BACK +

Teacher DashBorad

+
+
+

Mechanical Engineering

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
+

Select Semester

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +
+ First Semester
+ Third Semester
+ Fifth Semester
+ + +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
+
+
+
+
+
+ + + +{% endblock content %} + + diff --git a/srmsApp/templates/partials/base2.html b/srmsApp/templates/partials/base2.html new file mode 100644 index 0000000..d83db22 --- /dev/null +++ b/srmsApp/templates/partials/base2.html @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + Chart Anaylsis | Result Analyzer System + + + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/srmsApp/templates/profile.html b/srmsApp/templates/profile.html new file mode 100644 index 0000000..a2f94c5 --- /dev/null +++ b/srmsApp/templates/profile.html @@ -0,0 +1,35 @@ +{% extends 'layouts/base.html' %} {% block content%} +
+
+
+
+
+
My Profile
+
+
+
+
+
+
+
Fullname
+
{{ user.first_name }} {{ user.last_name }}
+
Email
+
{{ user.email }}
+
Username
+
{{ user.username }}
+
+
+
+
+
+ +
+
+
+
+{% endblock content%} \ No newline at end of file diff --git a/srmsApp/templates/register.html b/srmsApp/templates/register.html new file mode 100644 index 0000000..4a6df37 --- /dev/null +++ b/srmsApp/templates/register.html @@ -0,0 +1,68 @@ +{% extends 'base.html' %}{% load static %}{% block pageContent %} + +
+
+
+
+

Create New User

+
+
+
+
+ {% csrf_token %} +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ {% for field in reg_form %} {% for error in field.errors %} +
+

{{ error }}

+
+ {% endfor %} {% endfor %} +
+
+ +
+
+
+
+
+
+
+
+
+
+{% endblock pageContent %} \ No newline at end of file diff --git a/srmsApp/templates/result_mgt.html b/srmsApp/templates/result_mgt.html new file mode 100644 index 0000000..c55fe55 --- /dev/null +++ b/srmsApp/templates/result_mgt.html @@ -0,0 +1,107 @@ +{% extends "layouts/base.html" %} {% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + + + + + +

RESULT OF STUDENT

+
+ System Logo +
+
+

Select Branch

+---------------------------------------------------------------------------------------------------------------------------------------------- + Computer Engineering
+ Mechanical Engineering
+ Civil Engineering
+ Electrical Engineering
+ +----------------------------------------------------------------------------------------------------------------------------------------------- +
+ + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/resultsem1.html b/srmsApp/templates/resultsem1.html new file mode 100644 index 0000000..4e0b39c --- /dev/null +++ b/srmsApp/templates/resultsem1.html @@ -0,0 +1,259 @@ +{% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + +{%load static%} + + + + + + + Result Search | Result Analyzer System + + + + + + BACK +
+ +

Result

+

Find The Result by ENROLLMENT_NO.

+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + {% for result in user%} + + + + + + + + + + + + + + + + + + + + {% endfor %} + +
#Enrollment no.Seat no.NameBranchENGLISHENG_PBASIC_SCIENCEBS_PBASIC_MATHEMATICSICTEGWPPER %TOTALDIST
{{ forloop.counter }} {{ result.ENROLLMENT_NO }} {{ result.SEAT_NO }} {{ result.name }} {{ result.BRANCH }} {{ result.ENGLISH}} {{ result.ENG_P }} {{ result.BASIC_SCIENCE }} {{ result.BS_P }} {{ result.BASIC_MATHEMATICS}} {{ result.ICT}} {{ result.EG}} {{ result.WP}} {{ result.PERCENTAGE}} {{ result.TOTAL}} {{ result.DIST}}
+ +
+ + + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} + + + + \ No newline at end of file diff --git a/srmsApp/templates/resultsem3.html b/srmsApp/templates/resultsem3.html new file mode 100644 index 0000000..4f2436a --- /dev/null +++ b/srmsApp/templates/resultsem3.html @@ -0,0 +1,260 @@ +{% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + +{%load static%} + + + + + + + Result Search | Result Analyzer System + + + + + + BACK +
+ +

Result

+

Find The Result by ENROLLMENT_NO.

+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + {% for result in user%} + + + + + + + + + + + + + + + + + + + + + + {% endfor %} + +
#Enrollment no.NameSeat no.BranchOOPOOP_PDSUDSU_PCGCG_PDMSDMS_PDTDT_PPER %TOTALDIST
{{ forloop.counter }} {{ result.ENROLLMENT_NO }} {{ result.name }} {{ result.SEAT_NO }} {{ result.BRANCH }} {{ result.OOP}} {{ result.OOP_P}} {{ result.DSU}} {{ result.DSU_P }} {{ result.CG}} {{ result.CG_P}} {{ result.DMS}} {{ result.DMS_P}} {{ result.DT}} {{ result.DT_P}} {{ result.PERCENTAGE}} {{ result.TOTAL}} {{ result.DIST}}
+ +
+ + + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} + diff --git a/srmsApp/templates/resultsem5.html b/srmsApp/templates/resultsem5.html new file mode 100644 index 0000000..1065d72 --- /dev/null +++ b/srmsApp/templates/resultsem5.html @@ -0,0 +1,265 @@ +{% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + +{%load static%} + + + + + + + Result Search | Result Analyzer System + + + + + + BACK +
+ +

Result

+

Find The Result by ENROLLMENT_NO.

+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + {% for result in user%} + + + + + + + + + + + + + + + + + + + + + + + {% endfor %} + +
#Enrollment no.Seat no.NameBranchEVSOS_THOS_PRAJP_THAJP_PRST_THST_PRCSSL_THCSSL_PRITCPPPER %TOTALDIST
{{ forloop.counter }} {{ result.ENROLLMENT_NO }} {{ result.SEAT_NO }} {{ result.name }} {{ result.BRANCH }} {{ result.EVS}} {{ result.OS }} {{ result.OS_P }} {{ result.AJP }} {{ result.AJP_P}} {{ result.ST}} {{ result.ST_P}} {{ result.CSSL}} {{ result.CSSL_P}} {{ result.IT}} {{ result.CPP}} {{ result.PERCENTAGE}} {{ result.TOTAL}} {{ result.DIST}}
+ +
+ + + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} + + + + \ No newline at end of file diff --git a/srmsApp/templates/resultsemco.html b/srmsApp/templates/resultsemco.html new file mode 100644 index 0000000..7515de4 --- /dev/null +++ b/srmsApp/templates/resultsemco.html @@ -0,0 +1,82 @@ +{% extends "layouts/base.html" %} {% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + + + COMPUTER BRANCH + +
+
+
+
+
+ +

Result Of Student

+
+
+

Computer Engineering

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
+

Select Semester

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +
+ First Semester
+ Third Semester
+ fifth Semester
+ + +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
+
+
+
+
+
+ + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/resultsemview.html b/srmsApp/templates/resultsemview.html new file mode 100644 index 0000000..a02d99b --- /dev/null +++ b/srmsApp/templates/resultsemview.html @@ -0,0 +1,95 @@ +{% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + + + + Result DashBoard | Result Analysis System + +
+
+
+
+
+ + BACK +

Result View

+
+
+

Computer Engineering

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
+

Select Semester

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +
+First Semester
+ Third Semester
+ fifth Semester
+ + +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
+
+
+
+
+
+ + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/select_student_results.html b/srmsApp/templates/select_student_results.html new file mode 100644 index 0000000..a84f485 --- /dev/null +++ b/srmsApp/templates/select_student_results.html @@ -0,0 +1,85 @@ +{% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + + + + Result DashBoard | Result Analysis System + + + BACK +

Result View

+ +
+ System Logo +
+
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +

Select Branch

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Computer Engineering
+ Mechanical Engineering
+ Civil Engineering
+ Electrical Engineering
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +
+ + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/stud3.html b/srmsApp/templates/stud3.html new file mode 100644 index 0000000..f168d51 --- /dev/null +++ b/srmsApp/templates/stud3.html @@ -0,0 +1,80 @@ +{% extends 'layouts/base.html' %} {% load humanize %} {% block content %} +
+
+
+
+
+

Student List

+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + {% for result in user%} + + + + + + + + + {% endfor %} + +
#ENROLLMENT_NOSEAT_NONAMEBRANCHACTIVE
{{ forloop.counter }}{{ result.ENROLLMENT_NO }}{{ result.SEAT_NO }} {{ result.name }} {{ result.BRANCH }}yes + +
+
+
+
+
+
+{% endblock content %} {% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/stud_com_list/cosem2.html b/srmsApp/templates/stud_com_list/cosem2.html new file mode 100644 index 0000000..5562715 --- /dev/null +++ b/srmsApp/templates/stud_com_list/cosem2.html @@ -0,0 +1,80 @@ +{% extends 'layouts/base.html' %} {% load humanize %} {% block content %} +
+
+
+
+
+

Student List

+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + {% for result in user12%} + + + + + + + + + {% endfor %} + +
#ENROLLMENT_NOSEAT_NONAMEBRANCHACTIVE
{{ forloop.counter }}{{ result.ENROLLMENT_NO }}{{ result.SEAT_NO }} {{ result.name }} {{ result.BRANCH }}yes + +
+
+
+
+
+
+{% endblock content %} {% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/stud_com_list/costud3_m.html b/srmsApp/templates/stud_com_list/costud3_m.html new file mode 100644 index 0000000..9563583 --- /dev/null +++ b/srmsApp/templates/stud_com_list/costud3_m.html @@ -0,0 +1,80 @@ +{% extends 'layouts/base.html' %} {% load humanize %} {% block content %} +
+
+
+
+
+

Student List

+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + {% for result in user1%} + + + + + + + + + {% endfor %} + +
#ENROLLMENT_NOSEAT_NONAMEBRANCHACTIVE
{{ forloop.counter }}{{ result.ENROLLMENT_NO }}{{ result.SEAT_NO }} {{ result.name }} {{ result.BRANCH }}yes + +
+
+
+
+
+
+{% endblock content %} {% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/stud_com_list/costud_m.html b/srmsApp/templates/stud_com_list/costud_m.html new file mode 100644 index 0000000..7e22672 --- /dev/null +++ b/srmsApp/templates/stud_com_list/costud_m.html @@ -0,0 +1,82 @@ +{% extends "layouts/base.html" %} {% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + + + COMPUTER BRANCH + +
+
+
+
+
+ +

Student List

+
+
+

Computer Engineering

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
+

Select Semester

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +
+ First Semester
+ Third Semester
+ fifth Semester
+ + +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
+
+
+
+
+
+ + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/stud_com_list/stud3.html b/srmsApp/templates/stud_com_list/stud3.html new file mode 100644 index 0000000..f168d51 --- /dev/null +++ b/srmsApp/templates/stud_com_list/stud3.html @@ -0,0 +1,80 @@ +{% extends 'layouts/base.html' %} {% load humanize %} {% block content %} +
+
+
+
+
+

Student List

+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + {% for result in user%} + + + + + + + + + {% endfor %} + +
#ENROLLMENT_NOSEAT_NONAMEBRANCHACTIVE
{{ forloop.counter }}{{ result.ENROLLMENT_NO }}{{ result.SEAT_NO }} {{ result.name }} {{ result.BRANCH }}yes + +
+
+
+
+
+
+{% endblock content %} {% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/student_mgt.html b/srmsApp/templates/student_mgt.html new file mode 100644 index 0000000..ffef8db --- /dev/null +++ b/srmsApp/templates/student_mgt.html @@ -0,0 +1,107 @@ +{% extends "layouts/base.html" %} {% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + + + + + +

STUDENT-LIST

+
+ System Logo +
+
+

Select Branch

+---------------------------------------------------------------------------------------------------------------------------------------------- + Computer Engineering
+ Mechanical Engineering
+ Civil Engineering
+ Electrical Engineering
+ +----------------------------------------------------------------------------------------------------------------------------------------------- +
+ + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/teacher.html b/srmsApp/templates/teacher.html new file mode 100644 index 0000000..4760d28 --- /dev/null +++ b/srmsApp/templates/teacher.html @@ -0,0 +1,85 @@ +{% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + + + + Teacher DashBoard | Result Analysis System + + + BACK +

Result Analyzer

+ +
+ System Logo +
+
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +

Select Branch

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Computer Engineering
+ Mechanical Engineering
+ Civil Engineering
+ Electrical Engineering
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +
+ + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/update_password.html b/srmsApp/templates/update_password.html new file mode 100644 index 0000000..b7a73b9 --- /dev/null +++ b/srmsApp/templates/update_password.html @@ -0,0 +1,38 @@ +{% extends 'layouts/base.html' %}{% load static %}{% block content %} + +
+
+
+
+
+

Update Password

+
+
+
+
+ {% csrf_token %} +
+
+ + {{ form.as_p }} +
+
+ +
+
+
+
+
+
+
+
+
+
+
+{% endblock content %} \ No newline at end of file diff --git a/srmsApp/templates/upload.html b/srmsApp/templates/upload.html new file mode 100644 index 0000000..264275b --- /dev/null +++ b/srmsApp/templates/upload.html @@ -0,0 +1,98 @@ +{% extends "layouts/base.html" %} {% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + +

PDF SCRAPER FOR MSBTE RESULT

+
+

SEMESTER THRID , FIFTH

+
+ +
+------------------------------------------------------------------------------------------------------------------------------------------------ + +
+
+ + + {% csrf_token %} + +
+
+------------------------------------------------------------------------------------------------------------------------------------------------ + + + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/upload1.html b/srmsApp/templates/upload1.html new file mode 100644 index 0000000..2dc16dc --- /dev/null +++ b/srmsApp/templates/upload1.html @@ -0,0 +1,98 @@ +{% extends "layouts/base.html" %} {% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + +

PDF SCRAPER FOR MSBTE RESULT

+
+

SEMESTER FIRST, THRID , FIFTH

+
+ +
+------------------------------------------------------------------------------------------------------------------------------------------------ + +
+
+ + + {% csrf_token %} + +
+
+------------------------------------------------------------------------------------------------------------------------------------------------ + + + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/upload2.html b/srmsApp/templates/upload2.html new file mode 100644 index 0000000..a8accb1 --- /dev/null +++ b/srmsApp/templates/upload2.html @@ -0,0 +1,98 @@ +{% extends "layouts/base.html" %} {% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + +

PDF SCRAPER FOR MSBTE RESULT

+
+

SEMESTER THRID , FIFTH

+
+ +
+------------------------------------------------------------------------------------------------------------------------------------------------ + +
+
+ + + {% csrf_token %} + +
+
+------------------------------------------------------------------------------------------------------------------------------------------------ + + + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/upload3.html b/srmsApp/templates/upload3.html new file mode 100644 index 0000000..4b7b7f1 --- /dev/null +++ b/srmsApp/templates/upload3.html @@ -0,0 +1,99 @@ +{% extends "layouts/base.html" %} {% load humanize %} {% load static %} {% load customfilter %} + + + +{% block content %} + + + + + + + + + + +

PDF SCRAPER FOR MSBTE RESULT

+
+

SEMESTER THRID , FIFTH

+
+ +
+------------------------------------------------------------------------------------------------------------------------------------------------ + +
+
+ + + {% csrf_token %} + +
+
+------------------------------------------------------------------------------------------------------------------------------------------------ + + + + + +{% endblock content %} + + +{% block javascripts %} + +{% endblock javascripts %} \ No newline at end of file diff --git a/srmsApp/templates/view_result.html b/srmsApp/templates/view_result.html new file mode 100644 index 0000000..6aaa96b --- /dev/null +++ b/srmsApp/templates/view_result.html @@ -0,0 +1,60 @@ +{% load humanize %} + +
+
+
+
+
Student ID/Code
+
{{ result.student.student_id }}
+
Name
+
{{ result.student.get_name }}
+
Gender
+
{{ result.student.gender }}
+
+
+
+
+
Class
+
{{ result.student.classI }}
+
Semester
+
{{ result.semester }}
+
+
+
+
+ + + + + + + + + + + + + {% for mark in marks %} + + + + + {% endfor %} + + + + + + + +
SubjectMark
+ {{ mark.subject }} + {{ mark.grade }}
Average{{ result.average }}
+
+ +
+
\ No newline at end of file diff --git a/srmsApp/templatetags/customfilter.py b/srmsApp/templatetags/customfilter.py new file mode 100644 index 0000000..a52226b --- /dev/null +++ b/srmsApp/templatetags/customfilter.py @@ -0,0 +1,18 @@ +from atexit import register +from django import template +from cryptography.fernet import Fernet +from django.conf import settings + + +register = template.Library() + +@register.filter +def replaceBlank(value,stringVal = ""): + value = str(value).replace(stringVal, '') + return value + +@register.filter +def encryptdata(value): + fernet = Fernet(settings.ID_ENCRYPTION_KEY) + value = fernet.encrypt(str(value).encode()) + return value diff --git a/srmsApp/tests.py b/srmsApp/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/srmsApp/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/srmsApp/urls.py b/srmsApp/urls.py new file mode 100644 index 0000000..ccf5588 --- /dev/null +++ b/srmsApp/urls.py @@ -0,0 +1,103 @@ +from django.contrib import admin +from django.urls import path +from srmsApp import views +from django.contrib.auth import views as auth_views +from django.views.generic.base import RedirectView + +from django.conf import settings +from django.conf.urls.static import static + +context={ + 'page':'login', + 'page_title':'Login', + 'system_name': views.context['system_name'], + 'short_name':views.context['short_name'], + 'has_navigation':False, + 'has_sidebar':False, +} +urlpatterns = [ + + path('redirect-admin', RedirectView.as_view(url="/admin"),name="redirect-admin"), + path('login',auth_views.LoginView.as_view(template_name="login.html",redirect_authenticated_user = True,extra_context = context),name='login'), + path('logout',views.logoutuser,name='logout'), + path('userlogin', views.login_user, name="login-user"), + path('profile', views.profile, name="profile-page"), + path('update_profile', views.update_profile, name="update-profile"), + path('update_password', views.update_password, name="update-password"), + + path('civb', views.civb,name="civb"), + path('mecb', views.mecb,name="mecb"), + path('eleb', views.eleb,name="eleb"), + path('stud3', views.stud3,name="stud3"), + + + path('cosem2', views.cosem2,name="cosem2"), + path('cosem3', views.cosem3,name="cosem3"), + path('resultsemco', views.resultsemco,name="resultsemco"), + + path('cosem3_R', views.cosem3_R,name="cosem3_R"), + path('cosem2_r', views.cosem2_r,name="cosem2_r"), + path('cosem1_r', views.cosem1_r,name="cosem1_r"), + + path('mb1', views.mb1,name="mb1"), + path('mb2', views.mb2,name="mb2"), + path('mb3', views.mb3,name="mb3"), + + path('me1', views.me1,name="me1"), + path('me3', views.me3,name="me3"), + path('me5', views.me5,name="me5"), + + path('elb1', views.elb1,name="elb1"), + path('elb2', views.elb2,name="elb2"), + path('elb3', views.elb3,name="elb3"), + + path('chatcosem1', views.chatcosem1,name="chatcosem1"), + path('chatcosem3', views.chatcosem3, name='chatcosem3'), + path('chatcosem2', views.chatcosem2, name='chatcosem2'), + path('chatel3', views.chatel3, name='chatel3'), + path('chatel2', views.chatel2, name='chatel2'), + + path('civ1', views.civ1,name="civ1"), + path('civ2', views.civ2,name="civ2"), + path('civ3', views.civ3,name="civ3"), + path('costud_m', views.costud_m,name="costud_m"), + path('costud3_m', views.costud3_m,name="costud3_m"), + path('teacher', views.teacher,name="teacher"), + path('mec_teach', views.mec_teach,name="mec_teach"), + path('menu_teach', views.menu_teach,name="menu_teach"), + path('ele_teach', views.ele_teach,name="ele_teach"), + path('civ_teach', views.civ_teach,name="civ_teach"), + + path('com_teach', views.com_teach,name="com_teach"), + path('com_teacher1', views.com_teacher1,name="com_teacher1"), + + + path('comsem_t', views.comsem_t,name="comsem_t"), + path('', views.home,name="home-page"), + path('class_mgt', views.class_mgt,name="class-page"), + path('manage_class', views.manage_class,name="manage-class"), + path('manage_class/', views.manage_class,name="manage-class-pk"), + path('save_class', views.save_class,name="save-class"), + path('delete_class', views.delete_class,name="delete-class"), + path('student', views.student_mgt,name="student-page"), + path('manage_student', views.manage_student,name="manage-student"), + path('result', views.result_mgt,name="result-page"), + path('manage_result', views.manage_result,name="manage-result"), + path('manage_result/', views.manage_result,name="manage-result-pk"), + path('view_result/', views.view_result,name="view-result-pk"), + path('select_student_results', views.select_student_results,name="select_student_results"), + path('list_result', views.list_student_result,name="list-result"), + + path('resultsem1', views.resultsem1,name="resultsem1"), + path('resultsem5', views.resultsem5,name="resultsem5"), + path('resultsem3', views.resultsem3,name="resultsem3"), + path('resultsemview', views.resultsemview,name="resultsemview"), + + path('list_result/', views.list_student_result), + + path("upload",views.upload,name="upload"), + path("upload1",views.upload1,name="upload1"), + path("upload2",views.upload2,name="upload2"), + path("upload3",views.upload3,name="upload3") + +] \ No newline at end of file diff --git a/srmsApp/views.py b/srmsApp/views.py new file mode 100644 index 0000000..2249e30 --- /dev/null +++ b/srmsApp/views.py @@ -0,0 +1,2213 @@ +#from turtle import clear +from django.shortcuts import render,redirect +from django.contrib.auth import authenticate, login, logout, update_session_auth_hash +from django.contrib.auth.decorators import login_required +import json +#from django.db import connection +from django.template import ContextPopException +import pdfplumber +import pandas as pd +import os +from django.contrib import messages +from django.contrib.auth.models import User +from django.http import HttpResponse +import mysql.connector as c +from srmsApp import forms, models +from unittest import result +from srmsApp.models import ELSEM2, ELSEM3, MESEM3, myuploadfile, myuploadfile1, myuploadfile2, myuploadfile3, user1, user12 +from srmsApp.models import user +from django.db import connection +context={ + 'page':'', + 'page_title':'', + 'system_name':'Result Analyzer System', + 'short_name':'RCPP', + 'has_navigation':True, + 'has_sidebar':True, +} + +def teacher(request): + + + return render(request,'teacher.html') +def menu_teach(request): + + cursor = connection.cursor() + cursor.execute('select distinct DIST from COSEM2 ') + row = cursor.fetchall() + city_list = [item for i in row for item in i] + result=user1.objects.all() + cursor.execute('select avg(PERCENTAGE) from COSEM2') + row = cursor.fetchall() + avg = [item for i in row for item in i] + return render(request,'com_teacher/menu_teach.html',{'city_list':city_list,'user':result,'avg':avg}) +def com_teacher1(request): + + cursor = connection.cursor() + cursor.execute('select distinct DIST from COSEM1 ') + row = cursor.fetchall() + city_list = [item for i in row for item in i] + result=user12.objects.all() + cursor.execute('select avg(PERCENTAGE) from COSEM1') + row = cursor.fetchall() + avg = [item for i in row for item in i] + return render(request,'com_teacher/com_teacher1.html',{'city_list':city_list,'user':result,'avg':avg}) + +def comsem_t(request): + context['page_title'] = 'Select SEM' + + return render(request,'com_teacher/comsem_t.html',context) +def chatcosem1(request): + cursor = connection.cursor() + cursor.execute('select count(ENROLLMENT_NO) from COSEM1') + row = cursor.fetchall() + city_list = [item for i in row for item in i] + cursor.execute('select avg(PERCENTAGE) from COSEM1') + row = cursor.fetchall() + avg = [item for i in row for item in i] + + return render(request,'chartapp/chatcosem1.html',{'user':result,'city_list':city_list,'avg':avg}) + +def chatcosem3(request): + cursor = connection.cursor() + cursor.execute('select count(ENROLLMENT_NO) from COSEM3') + row = cursor.fetchall() + city_list = [item for i in row for item in i] + cursor.execute('select avg(PERCENTAGE) from COSEM3') + row = cursor.fetchall() + avg = [item for i in row for item in i] + + return render(request,'chartapp/chatcosem3.html',{'user':result,'city_list':city_list,'avg':avg}) +def chatcosem2(request): + cursor = connection.cursor() + cursor.execute('select count(ENROLLMENT_NO) from COSEM2') + row = cursor.fetchall() + city_list = [item for i in row for item in i] + cursor.execute('select avg(PERCENTAGE) from COSEM2') + row = cursor.fetchall() + avg = [item for i in row for item in i] + + return render(request,'chartapp/chatcosem2.html',{'user':result,'city_list':city_list,'avg':avg}) +def me1(request): + + return render(request,'mech_teacher/me1.html') +def me3(request): + + return render(request,'mech_teacher/me3.html') +def me5(request): + cursor = connection.cursor() + cursor.execute('select distinct DIST from MESEM3') + row = cursor.fetchall() + city_list = [item for i in row for item in i] + result=MESEM3.objects.all() + cursor.execute('select avg(PERCENTAGE) from MESEM3') + row = cursor.fetchall() + avg = [item for i in row for item in i] + return render(request,'mech_teacher/me5.html',{'city_list':city_list,'user':result,'avg':avg}) + + + +def com_teach(request): + cursor = connection.cursor() + cursor.execute('select distinct DIST from COSEM3 ') + row = cursor.fetchall() + city_list = [item for i in row for item in i] + result=user.objects.all() + cursor.execute('select avg(PERCENTAGE) from COSEM3') + row = cursor.fetchall() + avg = [item for i in row for item in i] + return render(request,'com_teacher/com_teach.html',{'city_list':city_list,'user':result,'avg':avg}) +def ele_teach(request): + + return render(request,'ele_teach.html') +def mec_teach(request): + + + return render(request,'mech_teacher/mec_teach.html') +def civ_teach(request): + + + return render(request,'civ_teach.html') + +# Create your views here. +@login_required +def home(request): + context['page'] = 'home' + context['page_title'] = 'PDF SCRAPER' + + + return render(request,'home.html',context) + + +@login_required +def cosem3(request): + context['page_title'] = 'COM-SEM-1-3-5 branch' + db = connection.cursor() + context['class']= "DATABASE CONNECTED" + if request.method == 'POST': + + def extract_pdf(pdf_path): + linesOfFile = [] + with pdfplumber.open(pdf_path) as pdf: + space = ' ' + page = pdf.pages[0] + text = page.extract_text() + p=text.split() + if(p[2]=='PM' or p[2]=='AM'): + ex1=p[19] + if(ex1=='ENROLLMENT'): + p1=p[15] + p2=p[16] + p3=p[17] + p4=p[18] + P=p1+space+p2+space+p3+space+p4 + e=p[21] + se=p[27] + E=e,se + if(p[28]=='FIRST'): + b1=p[31] + b2=p[32] + b3=p[33] + b4=p[34] + B=b1+space+b2+space+b3+space+b4 + m1=p[58] + m2=p[70] + m3=p[83] + m4=p[95] + m5=p[108] + m6=p[123] + m7=p[137] + m8=p[151] + M=m1,m2,m3,m4,m5,m6,m7,m8 + if(p[188]=='FAIL'): + per="00.00" + to=p[179] + e12='FAIL' + elif(p[188]=='A.T.K.T.'): + per="00.00" + to=p[179] + e12='A.T.K.T' + elif((p[189]=='FIRST') and (p[190]=='CLASS') and (p[191]=='INSTRUCTIONS')): + per=p[179] + to=p[180] + e12='F.C' + elif(p[189]=='FIRST' and p[190]=='CLASS' and p[191]=='DIST.'): + per=p[179] + to=p[180] + e12='FIRST CLASS DIST.' + elif(p[189]=='FIRST' and p[190]=='CLASS' and p[191]=='CON'): + per=p[179] + to=p[180] + e12='FIRST CLASS CON' + db.execute("INSERT INTO COSEM1(ENROLLMENT_NO,name,SEAT_NO ,BRANCH,ENGLISH,ENG_P,BASIC_SCIENCE,BS_P,BASIC_MATHEMATICS,ICT,EG,WP,PERCENTAGE,TOTAL,DIST) VALUES (%s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,per,to,e12)) + context['name']=P + print(P,E,B,M,per,to,e12) + elif(p[28]=='THIRD'): + b1=p[31] + b2=p[32] + b3=p[33] + b4=p[34] + B=b1+space+b2+space+b3+space+b4 + m1=p[62] + m2=p[74] + m3=p[89] + m4=p[111] + m5=p[114] + m6=p[126] + m7=p[140] + m8=p[152] + m9=p[165] + m10=p[177] + M=m1,m2,m3,m4,m5,m6,m7,m8,m9,m10 + if(p[213]=='FAIL'): + per="00.00" + to=p[204] + e12='FAIL' + elif(p[213]=='A.T.K.T.'): + per="00.00" + to=p[204] + e12='A.T.K.T' + elif((p[214]=='FIRST') and (p[215]=='CLASS') and (p[216]=='INSTRUCTIONS')): + per=p[204] + to=p[205] + e12='F.C' + elif(p[214]=='FIRST' and p[215]=='CLASS' and p[216]=='DIST.'): + per=p[204] + to=p[205] + e12='FIRST CLASS DIST.' + elif(p[214]=='FIRST' and p[215]=='CLASS' and p[216]=='CON'): + per=p[204] + to=p[205] + e12='FIRST CLASS CON' + db.execute("INSERT INTO COSEM2(ENROLLMENT_NO,name,SEAT_NO ,BRANCH, OOP,OOP_P,DSU,DSU_P,CG, CG_P, DMS, DMS_P, DT,DT_P,PERCENTAGE,TOTAL,DIST) VALUES (%s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,per,to,e12)) + context['name']=P + print(P,E,B,M,per,to,e12) + elif(p[28]=='FIFTH'): + b1=p[31] + b2=p[32] + b3=p[33] + b4=p[34] + B=b1+space+b2+space+b3+space+b4 + m1=p[59] + m2=p[73] + m3=p[85] + m4=p[99] + m5=p[111] + m6=p[124] + m7=p[136] + m8=p[151] + m9=p[163] + m10=p[176] + m11=p[191] + M=m1,m2,m3,m4,m5,m6,m7,m8,m9,m10 + if(p[228]=='FAIL'): + per="00.00" + to=p[219] + e12='FAIL' + elif(p[228]=='A.T.K.T.'): + per="00.00" + to=p[219] + e12='A.T.K.T' + elif((p[229]=='FIRST') and (p[230]=='CLASS') and (p[231]=='INSTRUCTIONS')): + per=p[219] + to=p[220] + e12='F.C' + elif(p[229]=='FIRST' and p[230]=='CLASS' and p[231]=='DIST.'): + per=p[217] + to=p[220] + e12='FIRST CLASS DIST.' + elif(p[229]=='FIRST' and p[230]=='CLASS' and p[231]=='CON'): + per=p[217] + to=p[220] + e12='FIRST CLASS CON' + print(P,E,B,M,per,to,e12) + context['name']=P + db.execute("INSERT INTO COSEM3(ENROLLMENT_NO,name,SEAT_NO ,BRANCH, EVS,OS,OS_P, AJP, AJP_P, ST, ST_P,CSSL,CSSL_P,IT,CPP,PERCENTAGE,TOTAL,DIST) VALUES (%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,per,to,e12)) + + else: + p112=p[15] + p212=p[16] + p312=p[17] + P=p112+space+p212+space+p312 + e=p[20] + se=p[26] + E=e,se + if(p[27]=='FIRST'): + b11=p[30] + b21=p[31] + b31=p[32] + b41=p[33] + B=b11+space+b21+space+b31+space+b41 + m1=p[57] + m2=p[69] + m3=p[82] + m4=p[94] + m5=p[107] + m6=p[122] + m7=p[136] + m8=p[150] + M=m1,m2,m3,m4,m5,m6,m7,m8 + if(p[187]=='FAIL'): + per="00.00" + to=p[178] + e12='FAIL' + elif(p[187]=='A.T.K.T.'): + per="00.00" + to=p[178] + e12='A.T.K.T' + elif((p[188]=='FIRST') and (p[189]=='CLASS') and (p[190]=='INSTRUCTIONS')): + per=p[178] + to=p[179] + e12='F.C' + elif(p[188]=='FIRST' and p[189]=='CLASS' and p[190]=='DIST.'): + per=p[178] + to=p[179] + e12='FIRST CLASS DIST.' + elif(p[188]=='FIRST' and p[189]=='CLASS' and p[190]=='CON'): + per=p[178] + to=p[179] + e12='FIRST CLASS CON' + db.execute("INSERT INTO COSEM1(ENROLLMENT_NO,name,SEAT_NO ,BRANCH,ENGLISH,ENG_P,BASIC_SCIENCE,BS_P,BASIC_MATHEMATICS,ICT,EG,WP,PERCENTAGE,TOTAL,DIST) VALUES (%s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,per,to,e12)) + context['name']=P + print(P,E,B,M,per,to,e12) + elif(p[27]=='THIRD'): + b11=p[30] + b21=p[31] + b31=p[32] + b41=p[33] + B=b11+space+b21+space+b31+space+b41 + m1=p[61] + m2=p[73] + m3=p[88] + m4=p[100] + m5=p[113] + m6=p[125] + m7=p[139] + m8=p[152] + m9=p[164] + m10=p[176] + M=m1,m2,m3,m4,m5,m6,m7,m8,m9,m10 + if(p[212]=='FAIL'): + per="00.00" + to=p[203] + e12='FAIL' + elif(p[212]=='A.T.K.T.'): + per="00.00" + to=p[203] + e12='A.T.K.T' + elif((p[213]=='FIRST') and (p[214]=='CLASS') and (p[215]=='INSTRUCTIONS')): + per=p[203] + to=p[204] + e12='F.C' + elif(p[213]=='FIRST' and p[214]=='CLASS' and p[215]=='DIST.'): + per=p[203] + to=p[204] + e12='FIRST CLASS DIST.' + elif(p[213]=='FIRST' and p[214]=='CLASS' and p[215]=='CON'): + per=p[203] + to=p[204] + e12='FIRST CLASS CON' + db.execute("INSERT INTO COSEM2(ENROLLMENT_NO,name,SEAT_NO ,BRANCH, OOP,OOP_P,DSU,DSU_P,CG, CG_P, DMS, DMS_P, DT,DT_P,PERCENTAGE,TOTAL,DIST) VALUES (%s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,per,to,e12)) + context['name']=P + print(P,E,B,M,per,to,e12) + elif(p[28]=='FIFTH'): + b11=p[30] + b21=p[31] + b31=p[32] + b41=p[33] + B=b11+space+b21+space+b31+space+b41 + m1=p[58] + m2=p[72] + m3=p[84] + m4=p[98] + m5=p[110] + m6=p[123] + m7=p[135] + m8=p[150] + m9=p[162] + m10=p[175] + m11=p[190] + M=m1,m2,m3,m4,m5,m6,m7,m8,m9,m10 + if(p[227]=='FAIL'): + per="00.00" + to=p[218] + e12='FAIL' + elif(p[227]=='A.T.K.T.'): + per="00.00" + to=p[218] + e12='A.T.K.T' + elif((p[228]=='FIRST') and (p[229]=='CLASS') and (p[230]=='INSTRUCTIONS')): + per=p[218] + to=p[219] + e12='F.C' + elif(p[228]=='FIRST' and p[229]=='CLASS' and p[230]=='DIST.'): + per=p[218] + to=p[219] + e12='FIRST CLASS DIST.' + elif(p[228]=='FIRST' and p[229]=='CLASS' and p[230]=='CON'): + per=p[218] + to=p[219] + e12='FIRST CLASS CON' + db.execute("INSERT INTO COSEM3(ENROLLMENT_NO,name,SEAT_NO ,BRANCH, EVS,OS,OS_P, AJP, AJP_P, ST, ST_P,CSSL,CSSL_P,IT,CPP,PERCENTAGE,TOTAL,DIST) VALUES (%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,per,to,e12)) + context['name']=P + print(P,E,B,M,per,to,e12) + elif(p[0]=='Maharashtra'): + ex1=p[16] + if(ex1=='ENROLLMENT'): + p11=p[12] + p21=p[13] + p31=p[14] + p41=p[15] + P=p11+space+p21+space+p31+space+p41 + e=p[17] + se=p[23] + E=e,se + if(p[24]=='FIRST'): + b11=p[27] + b21=p[28] + b31=p[29] + b41=p[30] + B=b11+space+b21+space+b31+space+b41 + + m1=p[54] + m2=p[66] + m3=p[79] + m4=p[92] + m5=p[104] + m6=p[119] + m7=p[133] + m8=p[147] + M=m1,m2,m3,m4,m5,m6,m7,m8 + if(p[184]=='FAIL'): + per="00.00" + to=p[175] + e12='FAIL' + elif(p[184]=='A.T.K.T.'): + per="00.00" + to=p[175] + e12='A.T.K.T' + elif((p[185]=='FIRST') and (p[186]=='CLASS') and (p[187]=='INSTRUCTIONS')): + per=p[175] + to=p[176] + e12='F.C' + elif(p[185]=='FIRST' and p[186]=='CLASS' and p[187]=='DIST.'): + per=p[175] + to=p[176] + e12='FIRST CLASS DIST.' + elif(p[185]=='FIRST' and p[186]=='CLASS' and p[187]=='DIST.'): + per=p[175] + to=p[176] + e12='FIRST CLASS DIST.' + elif(p[185]=='FIRST' and p[186]=='CLASS' and p[187]=='CON'): + per=p[175] + to=p[176] + e12='FIRST CLASS CON' + db.execute("INSERT INTO COSEM1(ENROLLMENT_NO,name,SEAT_NO ,BRANCH,ENGLISH,ENG_P,BASIC_SCIENCE,BS_P,BASIC_MATHEMATICS,ICT,EG,WP,PERCENTAGE,TOTAL,DIST) VALUES (%s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,per,to,e12)) + context['name']=P + print(P,E,B,M,per,to,e) + if(p[24]=='THIRD'): + b11=p[27] + b21=p[28] + b31=p[29] + b41=p[30] + B=b11+space+b21+space+b31+space+b41 + + m1=p[58] + m2=p[70] + m3=p[85] + m4=p[97] + m5=p[110] + m6=p[122] + m7=p[136] + m8=p[148] + m9=p[161] + m10=p[173] + M=m1,m2,m3,m4,m5,m6,m7,m8,m9,m10 + + if(p[209]=='FAIL'): + per="00.00" + to=p[200] + e='FAIL' + elif(p[209]=='A.T.K.T.'): + per="00.00" + to=p[200] + e12='A.T.K.T' + elif((p[210]=='FIRST') and (p[211]=='CLASS') and (p[212]=='INSTRUCTIONS')): + per=p[200] + to=p[201] + e12='F.C' + elif(p[210]=='FIRST' and p[211]=='CLASS' and p[212]=='DIST.'): + per=p[200] + to=p[201] + e12='FIRST CLASS DIST.' + elif(p[210]=='FIRST' and p[211]=='CLASS' and p[212]=='CON'): + per=p[200] + to=p[201] + e12='FIRST CLASS CON' + db.execute("INSERT INTO COSEM2(ENROLLMENT_NO,name,SEAT_NO ,BRANCH, OOP,OOP_P,DSU,DSU_P,CG, CG_P, DMS, DMS_P, DT,DT_P,PERCENTAGE,TOTAL,DIST) VALUES (%s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,per,to,e12)) + context['name']=P + print(P,E,B,M,per,to,e12) + elif(p[24]=='FIFTH'): + b11=p[27] + b21=p[28] + b31=p[29] + b41=p[30] + B=b11+space+b21+space+b31+space+b41 + + m1=p[55] + m2=p[69] + m3=p[81] + m4=p[95] + m5=p[107] + m6=p[120] + m7=p[132] + m8=p[147] + m9=p[159] + m10=p[172] + m11=p[187] + M=m1,m2,m3,m4,m5,m6,m7,m8,m9,m10 + + + if(p[223]=='FAIL'): + per="00.00" + to=p[215] + e12='FAIL' + elif(p[223]=='A.T.K.T.'): + per="00.00" + to=p[215] + e12='A.T.K.T' + elif((p[224]=='FIRST') and (p[225]=='CLASS') and (p[226]=='INSTRUCTIONS')): + per=p[215] + to=p[216] + e12='F.C' + elif(p[224]=='FIRST' and p[225]=='CLASS' and p[226]=='DIST.'): + per=p[215] + to=p[216] + e12='FIRST CLASS DIST.' + elif(p[224]=='FIRST' and p[225]=='CLASS' and p[226]=='CON'): + per=p[215] + to=p[216] + e12='FIRST CLASS CON' + db.execute("INSERT INTO COSEM3(ENROLLMENT_NO,name,SEAT_NO ,BRANCH, EVS,OS,OS_P, AJP, AJP_P, ST, ST_P,CSSL,CSSL_P,IT,CPP,PERCENTAGE,TOTAL,DIST) VALUES (%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,per,to,e12)) + context['name']=P + print(P,E,B,M,per,to,e12) + + else: + p112=p[12] + p212=p[13] + p312=p[14] + + P=p112+space+p212+space+p312 + + e=p[17] + se=p[23] + E=e,se + + if(p[24]=='FIRST'): + b11=p[26] + b21=p[27] + b31=p[28] + b41=p[29] + B=b11+space+b21+space+b31+space+b41 + print(B) + m1=p[53] + m2=p[65] + m3=p[78] + m4=p[90] + m5=p[103] + m6=p[118] + m7=p[132] + m8=p[146] + M=m1,m2,m3,m4,m5,m6,m7,m8 + + + if(p[183]=='FAIL'): + per="00.00" + to=p[174] + e12='FAIL' + elif(p[183]=='A.T.K.T.'): + per="00.00" + to=p[174] + e12='A.T.K.T' + elif((p[184]=='FIRST') and (p[185]=='CLASS') and (p[186]=='INSTRUCTIONS')): + per=p[174] + to=p[175] + e12='F.C' + elif(p[184]=='FIRST' and p[185]=='CLASS' and p[186]=='DIST.'): + per=p[174] + to=p[175] + e12='FIRST CLASS DIST.' + elif(p[184]=='FIRST' and p[185]=='CLASS' and p[186]=='CON'): + per=p[174] + to=p[175] + e12='FIRST CLASS CON' + db.execute("INSERT INTO COSEM1(ENROLLMENT_NO,name,SEAT_NO ,BRANCH,ENGLISH,ENG_P,BASIC_SCIENCE,BS_P,BASIC_MATHEMATICS,ICT,EG,WP,PERCENTAGE,TOTAL,DIST) VALUES (%s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,per,to,e12)) + context['name']=P + print(P,E,B,M,per,to,e12) + if(p[24]=='THIRD'): + b11=p[27] + b21=p[28] + b31=p[29] + b41=p[30] + B=b11+space+b21+space+b31+space+b41 + + m1=p[58] + m2=p[70] + m3=p[85] + m4=p[97] + m5=p[110] + m6=p[122] + m7=p[136] + m8=p[148] + m9=p[161] + m10=p[173] + M=m1,m2,m3,m4,m5,m6,m7,m8,m9,m10 + + if(p[209]=='FAIL'): + per="00.00" + to=p[200] + e12='FAIL' + elif(p[209]=='A.T.K.T.'): + per="00.00" + to=p[200] + e12='A.T.K.T' + elif((p[210]=='FIRST') and (p[211]=='CLASS') and (p[212]=='INSTRUCTIONS')): + per=p[200] + to=p[201] + e12='F.C' + elif(p[210]=='FIRST' and p[211]=='CLASS' and p[212]=='DIST.'): + per=p[200] + to=p[201] + e12='FIRST CLASS DIST.' + elif(p[210]=='FIRST' and p[211]=='CLASS' and p[212]=='CON'): + per=p[200] + to=p[201] + e12='FIRST CLASS CON' + db.execute("INSERT INTO COSEM2(ENROLLMENT_NO,name,SEAT_NO ,BRANCH, OOP,OOP_P,DSU,DSU_P,CG, CG_P, DMS, DMS_P, DT,DT_P,PERCENTAGE,TOTAL,DIST) VALUES (%s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,per,to,e12)) + context['name']=P + print(P,E,B,M,per,to,e12) + elif(p[24]=='FIFTH'): + b11=p[28] + b21=p[29] + b31=p[30] + b41=p[31] + B=b11+space+b21+space+b31+space+b41 + + m1=p[56] + m2=p[70] + m3=p[82] + m4=p[96] + m5=p[108] + m6=p[121] + m7=p[133] + m8=p[148] + m9=p[160] + m10=p[173] + m11=p[188] + M=m1,m2,m3,m4,m5,m6,m7,m8,m9,m10 + + if(p[224]=='FAIL'): + per="00.00" + to=p[216] + e12='FAIL' + elif(p[224]=='A.T.K.T.'): + per="00.00" + to=p[216] + e12='A.T.K.T' + elif((p[225]=='FIRST') and (p[226]=='CLASS') and (p[227]=='INSTRUCTIONS')): + per=p[216] + to=p[217] + e12='F.C' + elif(p[225]=='FIRST' and p[226]=='CLASS' and p[227]=='DIST.'): + per=p[216] + to=p[217] + e12='FIRST CLASS DIST.' + elif(p[225]=='FIRST' and p[226]=='CLASS' and p[227]=='CON'): + per=p[216] + to=p[217] + e12='FIRST CLASS CON' + db.execute("INSERT INTO COSEM3(ENROLLMENT_NO,name,SEAT_NO ,BRANCH, EVS,OS,OS_P, AJP, AJP_P, ST, ST_P,CSSL,CSSL_P,IT,CPP,PERCENTAGE,TOTAL,DIST) VALUES (%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,per,to,e12)) + context['name']=P + print(P,E,B,M,per,to,e12) + else: + ex1=p[18] + if(ex1=='ENROLLMENT'): + p11=p[14] + p21=p[15] + p31=p[16] + p41=p[17] + P=p11+space+p21+space+p31+space+p41 + + e=p[20] + se=p[26] + E=e,se + + if(p[27]=='FIRST'): + b11=p[30] + b21=p[31] + b31=p[32] + b41=p[33] + B=b11+space+b21+space+b31+space+b41 + + m1=p[57] + m2=p[69] + m3=p[82] + m4=p[95] + m5=p[107] + m6=p[122] + m7=p[136] + m8=p[150] + M=m1,m2,m3,m4,m5,m6,m7,m8 + + if(p[187]=='FAIL'): + per="00.00" + to=p[178] + e12='FAIL' + elif(p[187]=='A.T.K.T.'): + per="00.00" + to=p[178] + e12='A.T.K.T' + elif((p[188]=='FIRST') and (p[189]=='CLASS') and (p[190]=='INSTRUCTIONS')): + per=p[178] + to=p[179] + e12='F.C' + elif(p[188]=='FIRST' and p[189]=='CLASS' and p[190]=='DIST.'): + per=p[178] + to=p[179] + e='FIRST CLASS DIST.' + elif(p[188]=='FIRST' and p[189]=='CLASS' and p[190]=='CON'): + per=p[178] + to=p[179] + e12='FIRST CLASS CON' + db.execute("INSERT INTO COSEM1(ENROLLMENT_NO,name,SEAT_NO ,BRANCH,ENGLISH,ENG_P,BASIC_SCIENCE,BS_P,BASIC_MATHEMATICS,ICT,EG,WP,PERCENTAGE,TOTAL,DIST) VALUES (%s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,per,to,e12)) + context['name']=P + print(P,E,B,M,per,to,e12) + if(p[27]=='THIRD'): + b11=p[30] + b21=p[31] + b31=p[32] + b41=p[33] + B=b11+space+b21+space+b31+space+b41 + + m1=p[61] + m2=p[73] + m3=p[88] + m4=p[100] + m5=p[113] + m6=p[125] + m7=p[139] + m8=p[151] + m9=p[164] + m10=p[176] + M=m1,m2,m3,m4,m5,m6,m7,m8,m9,m10 + + if(p[212]=='FAIL'): + per="00.00" + to=p[203] + e12='FAIL' + elif(p[212]=='A.T.K.T.'): + per="00.00" + to=p[203] + e12='A.T.K.T' + elif((p[213]=='FIRST') and (p[214]=='CLASS') and (p[215]=='INSTRUCTIONS')): + per=p[203] + to=p[204] + e12='F.C' + elif(p[213]=='FIRST' and p[214]=='CLASS' and p[215]=='DIST.'): + per=p[203] + to=p[204] + e12='FIRST CLASS DIST.' + elif(p[213]=='FIRST' and p[214]=='CLASS' and p[215]=='CON'): + per=p[203] + to=p[204] + e12='FIRST CLASS CON' + db.execute("INSERT INTO COSEM2(ENROLLMENT_NO,name,SEAT_NO ,BRANCH, OOP,OOP_P,DSU,DSU_P,CG, CG_P, DMS, DMS_P, DT,DT_P,PERCENTAGE,TOTAL,DIST) VALUES (%s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,per,to,e12)) + context['name']=P + print(P,E,B,M,per,to,e12) + elif(p[27]=='FIFTH'): + b11=p[30] + b21=p[31] + b31=p[32] + b41=p[33] + B=b11+space+b21+space+b31+space+b41 + + m1=p[58] + m2=p[72] + m3=p[84] + m4=p[98] + m5=p[110] + m6=p[123] + m7=p[135] + m8=p[150] + m9=p[162] + m10=p[175] + m11=p[190] + M=m1,m2,m3,m4,m5,m6,m7,m8,m9,m10 + + if(p[227]=='FAIL'): + per="00.00" + to=p[218] + e12='FAIL' + elif(p[227]=='A.T.K.T.'): + per="00.00" + to=p[218] + e12='A.T.K.T' + elif((p[228]=='FIRST') and (p[229]=='CLASS') and (p[230]=='INSTRUCTIONS')): + per=p[218] + to=p[219] + e12='F.C' + elif(p[228]=='FIRST' and p[229]=='CLASS' and p[230]=='DIST.'): + per=p[218] + to=p[219] + e12='FIRST CLASS DIST.' + elif(p[228]=='FIRST' and p[229]=='CLASS' and p[230]=='CON'): + per=p[218] + to=p[219] + e12='FIRST CLASS CON' + db.execute("INSERT INTO COSEM3(ENROLLMENT_NO,name,SEAT_NO ,BRANCH, EVS,OS,OS_P, AJP, AJP_P, ST, ST_P,CSSL,CSSL_P,IT,CPP,PERCENTAGE,TOTAL,DIST) VALUES (%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,per,to,e12)) + context['name']=P + print(P,E,B,M,per,to,e12) + + else: + p112=p[14] + p212=p[15] + p312=p[16] + P=p112+space+p212+space+p312 + + e=p[19] + se=p[25] + E=e,se + + if(p[26]=='FIRST'): + b11=p[29] + b21=p[30] + b31=p[31] + b41=p[32] + B=b11+space+b21+space+b31+space+b41 + + m1=p[56] + m2=p[68] + m3=p[81] + m4=p[93] + m5=p[106] + m6=p[121] + m7=p[135] + m8=p[149] + M=m1,m2,m3,m4,m5,m6,m7,m8 + + if(p[186]=='FAIL'): + per="00.00" + to=p[177] + e12='FAIL' + elif(p[186]=='A.T.K.T.'): + per="00.00" + to=p[177] + e12='A.T.K.T' + elif((p[187]=='FIRST') and (p[188]=='CLASS') and (p[189]=='INSTRUCTIONS')): + per=p[177] + to=p[178] + e12='F.C' + elif(p[187]=='FIRST' and p[188]=='CLASS' and p[189]=='DIST.'): + per=p[177] + to=p[178] + e12='FIRST CLASS DIST.' + elif(p[187]=='FIRST' and p[188]=='CLASS' and p[189]=='CON'): + per=p[177] + to=p[178] + e12='FIRST CLASS CON' + db.execute("INSERT INTO COSEM1(ENROLLMENT_NO,name,SEAT_NO ,BRANCH,ENGLISH,ENG_P,BASIC_SCIENCE,BS_P,BASIC_MATHEMATICS,ICT,EG,WP,PERCENTAGE,TOTAL,DIST) VALUES (%s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,per,to,e12)) + context['name']=P + print(P,E,B,M,per,to,e12) + if(p[26]=='THIRD'): + b11=p[29] + b21=p[30] + b31=p[31] + b41=p[32] + B=b11+space+b21+space+b31+space+b41 + + m1=p[60] + m2=p[72] + m3=p[87] + m4=p[99] + m5=p[112] + m6=p[124] + m7=p[138] + m8=p[150] + m9=p[163] + m10=p[175] + M=m1,m2,m3,m4,m5,m6,m7,m8,m9,m10 + + if(p[211]=='FAIL'): + per="00.00" + to=p[202] + e12='FAIL' + elif(p[211]=='A.T.K.T.'): + per="00.00" + to=p[202] + e12='A.T.K.T' + elif((p[212]=='FIRST') and (p[213]=='CLASS') and (p[214]=='INSTRUCTIONS')): + per=p[202] + to=p[203] + e12='F.C' + elif(p[212]=='FIRST' and p[213]=='CLASS' and p[214]=='DIST.'): + per=p[202] + to=p[203] + e12='FIRST CLASS DIST.' + elif(p[212]=='FIRST' and p[213]=='CLASS' and p[214]=='CON'): + per=p[202] + to=p[203] + e12='FIRST CLASS CON' + db.execute("INSERT INTO COSEM2(ENROLLMENT_NO,name,SEAT_NO ,BRANCH, OOP,OOP_P,DSU,DSU_P,CG, CG_P, DMS, DMS_P, DT,DT_P,PERCENTAGE,TOTAL,DIST) VALUES (%s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,per,to,e12)) + print(P,E,B,M,per,to,e12) + context['name']=P + elif(p[26]=='FIFTH'): + b11=p[29] + b21=p[30] + b31=p[31] + b41=p[32] + B=b11+space+b21+space+b31+space+b41 + + m1=p[57] + m2=p[71] + m3=p[83] + m4=p[97] + m5=p[109] + m6=p[122] + m7=p[134] + m8=p[149] + m9=p[161] + m10=p[174] + m11=p[189] + M=m1,m2,m3,m4,m5,m6,m7,m8,m9,m10 + + if(p[226]=='FAIL'): + per="00.00" + to=p[217] + e12='FAIL' + elif(p[226]=='A.T.K.T.'): + per="00.00" + to=p[217] + e12='A.T.K.T' + elif((p[227]=='FIRST') and (p[228]=='CLASS') and (p[229]=='INSTRUCTIONS')): + per=p[217] + to=p[218] + e12='F.C' + elif(p[227]=='FIRST' and p[228]=='CLASS' and p[229]=='DIST.'): + per=p[217] + to=p[218] + e12='FIRST CLASS DIST.' + elif(p[227]=='FIRST' and p[228]=='CLASS' and p[229]=='CON'): + per=p[217] + to=p[218] + e12='FIRST CLASS CON' + db.execute("INSERT INTO COSEM3(ENROLLMENT_NO,name,SEAT_NO ,BRANCH, EVS,OS,OS_P, AJP, AJP_P, ST, ST_P,CSSL,CSSL_P,IT,CPP,PERCENTAGE,TOTAL,DIST) VALUES (%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,per,to,e12)) + + print(P,E,B,M,per,to,e12) + context['name']=P + + pdf='C:/Users/91940/Desktop/myproj/Result_Analyzer_System/media/com' + folder_with_pdfs = pdf + linesOfFiles = [] + for pdf_file in os.listdir(folder_with_pdfs): + if pdf_file.endswith('.pdf'): + pdf_file_path = os.path.join(folder_with_pdfs, pdf_file) + linesOfFile = extract_pdf(pdf_file_path) + linesOfFiles.append(linesOfFile) + return render(request,'cosem3.html',context) +@login_required +def mecb(request): + context['page_title'] = 'Mechanical -3-5 branch' + + db = connection.cursor() + context['class']= "DATABASE CONNECTED" + if request.method == 'POST': + + def extract_pdf(pdf_path): + string1="" + linesOfFile = [] + with pdfplumber.open(pdf_path) as pdf: + space = ' ' + page = pdf.pages[0] + text = page.extract_text() + p=text.split() + + if(p[2]=='PM' or p[2]=='AM'): + ex1=p[19] + if(ex1=='ENROLLMENT'): + p1=p[15] + p2=p[16] + p3=p[17] + p4=p[18] + P=p1+space+p2+space+p3+space+p4 + e=p[21] + se=p[27] + E=e,se + if(p[28]=='FIFTH'): + b1=p[31] + b2=p[32] + b3=p[33] + b4=p[34] + B=b1+space+b2+space+b3+space+b4 + m1=p[58] + m2=p[74] + m3=p[86] + m4=p[100] + m5=p[112] + m6=p[127] + m7=p[139] + m8=p[153] + m9=p[165] + m10=p[181] + m11=p[195] + m12=p[210] + M=[m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12] + + if(p[247]=='FAIL'): + per="00.00" + to=p[238] + e12='FAIL' + elif(p[247]=='A.T.K.T.'): + per="00.00" + to=p[238] + e12='A.T.K.T' + elif((p[248]=='FIRST') and (p[249]=='CLASS') and (p[250]=='INSTRUCTIONS')): + per=p[238] + to=p[239] + e12='F.C' + elif(p[248]=='FIRST' and p[249]=='CLASS' and p[250]=='DIST.'): + per=p[238] + to=p[239] + e12='FIRST CLASS DIST.' + elif(p[248]=='FIRST' and p[249]=='CLASS' and p[250]=='CON'): + per=p[238] + to=p[239] + e12='FIRST CLASS CON' + db.execute("INSERT INTO MESEM3(ENROLLMENT_NO,name,SEAT_NO ,BRANCH,MANAGEMENT,PER,PER_P,AMP,AMP_P,EMD,EMD_P,PPE,PPE_P,SMAM ,IT,CPP,PERCENTAGE,TOTAL,DIST) VALUES (%s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,per,to,e12)) + + print(P,E,B,M,per,to,e12) + else: + p1=p[15] + p2=p[16] + p3=p[17] + P=p1+space+p2+space+p3 + e=p[20] + se=p[26] + E=e,se + if(p[27]=='FIFTH'): + b1=p[30] + b2=p[31] + b3=p[32] + b4=p[33] + B=b1+space+b2+space+b3+space+b4 + m1=p[57] + m2=p[73] + m3=p[85] + m4=p[99] + m5=p[111] + m6=p[126] + m7=p[138] + m8=p[152] + m9=p[164] + m10=p[180] + m11=p[194] + m12=p[209] + M=[m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12] + + if(p[246]=='FAIL'): + per="00.00" + to=p[237] + e12='FAIL' + elif(p[246]=='A.T.K.T.'): + per="00.00" + to=p[237] + e12='A.T.K.T' + elif((p[247]=='FIRST') and (p[248]=='CLASS') and (p[249]=='INSTRUCTIONS')): + per=p[237] + to=p[238] + e12='F.C' + elif(p[247]=='FIRST' and p[248]=='CLASS' and p[249]=='DIST.'): + per=p[237] + to=p[238] + e12='FIRST CLASS DIST.' + elif(p[247]=='FIRST' and p[248]=='CLASS' and p[249]=='CON'): + per=p[237] + to=p[238] + e12='FIRST CLASS CON' + db.execute("INSERT INTO MESEM3(ENROLLMENT_NO,name,SEAT_NO ,BRANCH,MANAGEMENT,PER,PER_P,AMP,AMP_P,EMD,EMD_P,PPE,PPE_P,SMAM ,IT,CPP,PERCENTAGE,TOTAL,DIST) VALUES (%s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,per,to,e12)) + + print(P,E,B,M,per,to,e12) + + pdf='C:/Users/91940/Desktop/myproj/Result_Analyzer_System/media/mec' + folder_with_pdfs = pdf + linesOfFiles = [] + for pdf_file in os.listdir(folder_with_pdfs): + if pdf_file.endswith('.pdf'): + pdf_file_path = os.path.join(folder_with_pdfs, pdf_file) + linesOfFile = extract_pdf(pdf_file_path) + linesOfFiles.append(linesOfFile) + return render(request,'mecb.html',context) + +def mb1(request): + context['page_title'] = 'MEC-SEM-1 branch' + + return render(request,'mb1.html',context) + +def mb2(request): + context['page_title'] = 'MEC-SEM-3 branch' + + return render(request,'mb2.html',context) + +def mb3(request): + cursor = connection.cursor() + cursor.execute('select count(ENROLLMENT_NO) from MESEM3') + row = cursor.fetchall() + city_list = [item for i in row for item in i] + cursor.execute('select avg(PERCENTAGE) from MESEM3') + row = cursor.fetchall() + avg = [item for i in row for item in i] + return render(request,'mb3.html',{'user':result,'city_list':city_list,'avg':avg}) +@login_required +def upload(request): + context['page_title'] = 'Electrical-3-5 branch' + + if request.method == "POST" : + name = request.POST.get("filename") + myfile = request.FILES.getlist("uploadfoles") + + for f in myfile: + myuploadfile(f_name=name,myfiles=f).save() + + return render(request,'upload.html',context) +@login_required +def upload1(request): + context['page_title'] = 'Computer-3-5 branch' + + if request.method == "POST" : + name = request.POST.get("filename1") + myfile = request.FILES.getlist("uploadfoles1") + + for f in myfile: + myuploadfile1(f_name=name,myfiles=f).save() + + return render(request,'upload1.html',context) +@login_required +def upload2(request): + context['page_title'] = 'Civil-3-5 branch' + + if request.method == "POST" : + name = request.POST.get("filename2") + myfile = request.FILES.getlist("uploadfoles2") + + for f in myfile: + myuploadfile2(f_name=name,myfiles=f).save() + + return render(request,'upload2.html',context) +@login_required +def upload3(request): + context['page_title'] = 'Mechanical-3-5 branch' + + if request.method == "POST" : + name = request.POST.get("filename3") + myfile = request.FILES.getlist("uploadfoles3") + + for f in myfile: + myuploadfile3(f_name=name,myfiles=f).save() + + + return render(request,'upload3.html',context) + +def eleb(request): + context['page_title'] = 'Electrical-3-5 branch' + db = connection.cursor() + context['class']= "DATABASE CONNECTED" + + if request.method == 'POST': + + def extract_pdf(pdf_path): + + linesOfFile = [] + with pdfplumber.open(pdf_path) as pdf: + space = ' ' + page = pdf.pages[0] + text = page.extract_text() + p=text.split() + # print(p) + + if(p[2]=='PM' or p[2]=='AM'): + ex1=p[19] + if(ex1=='ENROLLMENT'): + p1=p[15] + p2=p[16] + p3=p[17] + p4=p[18] + P=p1+space+p2+space+p3+space+p4 + e=p[21] + se=p[27] + E=e,se + if(p[28]=='THIRD'): + b1=p[31] + b2=p[32] + b3=p[33] + b4=p[34] + B=b1+space+b2+space+b3+space+b4 + m1=p[59] + m2=p[71] + m3=p[86] + m4=p[98] + m5=p[113] + m6=p[125] + m7=p[139] + m8=p[151] + m9=p[167] + m10=p[179] + + M=[m1,m2,m3,m4,m5,m6,m7,m8,m9,m10] + if(p[215]=='FAIL'): + per="00.00" + to=p[206] + e12='FAIL' + elif(p[215]=='A.T.K.T.'): + per="00.00" + to=p[206] + e12='A.T.K.T' + elif((p[216]=='FIRST') and (p[217]=='CLASS') and (p[218]=='INSTRUCTIONS')): + per=p[206] + to=p[207] + e12='F.C' + elif(p[216]=='FIRST' and p[217]=='CLASS' and p[218]=='DIST.'): + per=p[206] + to=p[207] + e12='FIRST CLASS DIST.' + elif(p[216]=='FIRST' and p[217]=='CLASS' and p[218]=='CON'): + per=p[206] + to=p[207] + e12='FIRST CLASS CON' + elif(p[216]=='SECOND' and p[217]=='CLASS' and p[218]=='CON'): + per=p[206] + to=p[207] + e12='SECOND CLASS CON' + elif(p[216]=='SECOND' and p[217]=='CLASS'): + per=p[206] + to=p[207] + e12='S.C' + db.execute("INSERT INTO ELSEM2(ENROLLMENT_NO,name ,SEAT_NO ,BRANCH ,EC, EC_P ,EEM,EEM_P,FPE ,FPE_P,EPG,EPG_P,EMWP,EMWP_P,PERCENTAGE,TOTAL,DIST) VALUES ( %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,per,to,e12)) + + print(P,E,B,M,per,to,e12) + + elif(p[28]=='FIFTH'): + b1=p[31] + b2=p[32] + b3=p[33] + b4=p[34] + B=b1+space+b2+space+b3+space+b4 + m1=p[58] + m2=p[73] + m3=p[85] + m4=p[99] + m5=p[111] + m6=p[126] + m7=p[138] + m8=p[153] + m9=p[165] + m10=p[178] + m11=p[192] + m12=p[207] + M=[m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12] + if(p[244]=='FAIL'): + per="00.00" + to=p[235] + e12='FAIL' + elif(p[244]=='A.T.K.T.'): + per="00.00" + to=p[235] + e12='A.T.K.T' + elif((p[245]=='FIRST') and (p[246]=='CLASS') and (p[247]=='INSTRUCTIONS')): + per=p[235] + to=p[236] + e12='F.C' + elif(p[245]=='FIRST' and p[246]=='CLASS' and p[247]=='DIST.'): + per=p[235] + to=p[236] + e12='FIRST CLASS DIST.' + elif(p[245]=='FIRST' and p[246]=='CLASS' and p[247]=='CON'): + per=p[235] + to=p[236] + e12='FIRST CLASS CON' + elif(p[245]=='SECOND' and p[246]=='CLASS' and p[247]=='CON'): + per=p[235] + to=p[236] + e12='SECOND CLASS CON' + elif(p[245]=='SECOND' and p[246]=='CLASS'): + per=p[235] + to=p[236] + e12='S.C' + db.execute("INSERT INTO ELSEM3(ENROLLMENT_NO,name ,SEAT_NO ,BRANCH ,MANAGEMENT, IAM ,IAM_P,SP,SP_P ,ECA,ECA_P,EIA,EIA_P,ED,IT,CPP,PERCENTAGE,TOTAL,DIST) VALUES (%s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,per,to,e12)) + + print(P,E,B,M,per,to,e12) + else: + p1=p[15] + p2=p[16] + p3=p[17] + P=p1+space+p2+space+p3 + e=p[20] + se=p[26] + E=e,se + if(p[27]=='THIRD'): + b1=p[30] + b2=p[31] + b3=p[32] + b4=p[33] + B=b1+space+b2+space+b3+space+b4 + m1=p[58] + m2=p[70] + m3=p[85] + m4=p[97] + m5=p[112] + m6=p[124] + m7=p[138] + m8=p[150] + m9=p[166] + m10=p[178] + M=[m1,m2,m3,m4,m5,m6,m7,m8,m9,m10] + + if(p[214]=='FAIL'): + per="00.00" + to=p[205] + e12='FAIL' + elif(p[214]=='A.T.K.T.'): + per="00.00" + to=p[205] + e12='A.T.K.T' + elif((p[215]=='FIRST') and (p[216]=='CLASS') and (p[217]=='INSTRUCTIONS')): + per=p[205] + to=p[206] + e12='F.C' + elif(p[215]=='FIRST' and p[216]=='CLASS' and p[217]=='DIST.'): + per=p[205] + to=p[206] + e12='FIRST CLASS DIST.' + elif(p[215]=='FIRST' and p[216]=='CLASS' and p[217]=='CON'): + per=p[205] + to=p[206] + e12='FIRST CLASS CON' + elif(p[215]=='SECOND' and p[216]=='CLASS' and p[217]=='CON'): + per=p[205] + to=p[206] + e12='SECOND CLASS CON' + elif(p[215]=='SECOND' and p[216]=='CLASS'): + per=p[205] + to=p[206] + e12='S.C' + db.execute("INSERT INTO ELSEM2(ENROLLMENT_NO,name ,SEAT_NO ,BRANCH ,EC, EC_P ,EEM,EEM_P,FPE ,FPE_P,EPG,EPG_P,EMWP,EMWP_P,PERCENTAGE,TOTAL,DIST) VALUES ( %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,per,to,e12)) + + print(P,E,B,M,per,to,e12) + elif(p[27]=='FIFTH'): + b1=p[30] + b2=p[31] + b3=p[32] + b4=p[33] + B=b1+space+b2+space+b3+space+b4 + m1=p[57] + m2=p[72] + m3=p[84] + m4=p[98] + m5=p[110] + m6=p[125] + m7=p[137] + m8=p[152] + m9=p[164] + m10=p[177] + m11=p[191] + m12=p[206] + M=[m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12] + if(p[243]=='FAIL'): + per="00.00" + to=p[234] + e12='FAIL' + elif(p[243]=='A.T.K.T.'): + per="00.00" + to=p[234] + e12='A.T.K.T' + elif((p[244]=='FIRST') and (p[245]=='CLASS') and (p[246]=='INSTRUCTIONS')): + per=p[234] + to=p[235] + e12='F.C' + elif(p[244]=='FIRST' and p[245]=='CLASS' and p[246]=='DIST.'): + per=p[234] + to=p[235] + e12='FIRST CLASS DIST.' + elif(p[244]=='FIRST' and p[245]=='CLASS' and p[246]=='CON'): + per=p[234] + to=p[235] + e12='FIRST CLASS CON' + elif(p[244]=='SECOND' and p[245]=='CLASS' and p[246]=='CON'): + per=p[234] + to=p[235] + e12='SECOND CLASS CON' + elif(p[244]=='SECOND' and p[245]=='CLASS'): + per=p[234] + to=p[235] + e12='S.C' + + db.execute("INSERT INTO ELSEM3(ENROLLMENT_NO,name ,SEAT_NO ,BRANCH ,MANAGEMENT, IAM ,IAM_P,SP,SP_P ,ECA,ECA_P,EIA,EIA_P,ED,IT,CPP,PERCENTAGE,TOTAL,DIST) VALUES (%s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,per,to,e12)) + + print(P,E,B,M,per,to,e12) + + else: + ex1=p[18] + if(ex1=='ENROLLMENT'): + p1=p[14] + p2=p[15] + p3=p[16] + p4=p[17] + P=p1+space+p2+space+p3+space+p4 + e=p[20] + se=p[26] + E=e,se + if(p[27]=='THIRD'): + b1=p[30] + b2=p[31] + b3=p[32] + b4=p[33] + B=b1+space+b2+space+b3+space+b4 + m1=p[58] + m2=p[70] + m3=p[85] + m4=p[97] + m5=p[112] + m6=p[124] + m7=p[138] + m8=p[150] + m9=p[166] + m10=p[178] + + M=[m1,m2,m3,m4,m5,m6,m7,m8,m9,m10] + if(p[214]=='FAIL'): + per="00.00" + to=p[205] + e12='FAIL' + elif(p[214]=='A.T.K.T.'): + per="00.00" + to=p[205] + e12='A.T.K.T' + elif((p[215]=='FIRST') and (p[216]=='CLASS') and (p[217]=='INSTRUCTIONS')): + per=p[205] + to=p[206] + e12='F.C' + elif(p[215]=='FIRST' and p[216]=='CLASS' and p[217]=='DIST.'): + per=p[205] + to=p[206] + e12='FIRST CLASS DIST.' + elif(p[215]=='FIRST' and p[216]=='CLASS' and p[217]=='CON'): + per=p[205] + to=p[206] + e12='FIRST CLASS CON' + elif(p[215]=='SECOND' and p[216]=='CLASS' and p[217]=='CON'): + per=p[205] + to=p[206] + e12='SECOND CLASS CON' + elif(p[215]=='SECOND' and p[216]=='CLASS'): + per=p[205] + to=p[206] + e12='S.C' + db.execute("INSERT INTO ELSEM2(ENROLLMENT_NO,name ,SEAT_NO ,BRANCH ,EC, EC_P ,EEM,EEM_P,FPE ,FPE_P,EPG,EPG_P,EMWP,EMWP_P,PERCENTAGE,TOTAL,DIST) VALUES ( %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,per,to,e12)) + + print(P,E,B,M,per,to,e12) + elif(p[27]=='FIFTH'): + b1=p[30] + b2=p[31] + b3=p[32] + b4=p[33] + B=b1+space+b2+space+b3+space+b4 + m1=p[57] + m2=p[72] + m3=p[84] + m4=p[98] + m5=p[110] + m6=p[125] + m7=p[137] + m8=p[152] + m9=p[164] + m10=p[177] + m11=p[191] + m12=p[206] + M=[m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12] + if(p[243]=='FAIL'): + per="00.00" + to=p[234] + e12='FAIL' + elif(p[243]=='A.T.K.T.'): + per="00.00" + to=p[234] + e12='A.T.K.T' + elif((p[244]=='FIRST') and (p[245]=='CLASS') and (p[246]=='INSTRUCTIONS')): + per=p[234] + to=p[235] + e12='F.C' + elif(p[244]=='FIRST' and p[245]=='CLASS' and p[246]=='DIST.'): + per=p[234] + to=p[235] + e12='FIRST CLASS DIST.' + elif(p[244]=='FIRST' and p[245]=='CLASS' and p[246]=='CON'): + per=p[234] + to=p[235] + e12='FIRST CLASS CON' + elif(p[244]=='SECOND' and p[245]=='CLASS' and p[246]=='CON'): + per=p[234] + to=p[235] + e12='SECOND CLASS CON' + elif(p[244]=='SECOND' and p[245]=='CLASS'): + per=p[234] + to=p[235] + e12='S.C' + db.execute("INSERT INTO ELSEM3(ENROLLMENT_NO,name ,SEAT_NO ,BRANCH ,MANAGEMENT, IAM ,IAM_P,SP,SP_P ,ECA,ECA_P,EIA,EIA_P,ED,IT,CPP,PERCENTAGE,TOTAL,DIST) VALUES (%s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,per,to,e12)) + + print(P,E,B,M,per,to,e12) + else: + p1=p[14] + p2=p[15] + p3=p[16] + P=p1+space+p2+space+p3 + e=p[19] + se=p[25] + E=e,se + if(p[26]=='THIRD'): + b1=p[29] + b2=p[30] + b3=p[31] + b4=p[32] + B=b1+space+b2+space+b3+space+b4 + m1=p[57] + m2=p[69] + m3=p[84] + m4=p[96] + m5=p[111] + m6=p[123] + m7=p[137] + m8=p[149] + m9=p[165] + m10=p[177] + + M=[m1,m2,m3,m4,m5,m6,m7,m8,m9,m10] + if(p[213]=='FAIL'): + per="00.00" + to=p[204] + e12='FAIL' + elif(p[213]=='A.T.K.T.'): + per="00.00" + to=p[204] + e12='A.T.K.T' + elif((p[214]=='FIRST') and (p[215]=='CLASS') and (p[216]=='INSTRUCTIONS')): + per=p[204] + to=p[205] + e12='F.C' + elif(p[214]=='FIRST' and p[215]=='CLASS' and p[216]=='DIST.'): + per=p[204] + to=p[205] + e12='FIRST CLASS DIST.' + elif(p[214]=='FIRST' and p[215]=='CLASS' and p[216]=='CON'): + per=p[204] + to=p[205] + e12='FIRST CLASS CON' + elif(p[214]=='SECOND' and p[215]=='CLASS' and p[216]=='CON'): + per=p[204] + to=p[205] + e12='SECOND CLASS CON' + elif(p[214]=='SECOND' and p[215]=='CLASS'): + per=p[204] + to=p[205] + e12='S.C' + db.execute("INSERT INTO ELSEM2(ENROLLMENT_NO,name ,SEAT_NO ,BRANCH ,EC, EC_P ,EEM,EEM_P,FPE ,FPE_P,EPG,EPG_P,EMWP,EMWP_P,PERCENTAGE,TOTAL,DIST) VALUES ( %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,per,to,e12)) + + print(P,E,B,M,per,to,e12) + elif(p[26]=='FIFTH'): + b1=p[29] + b2=p[30] + b3=p[31] + b4=p[32] + B=b1+space+b2+space+b3+space+b4 + m1=p[56] + m2=p[71] + m3=p[83] + m4=p[97] + m5=p[109] + m6=p[124] + m7=p[136] + m8=p[151] + m9=p[163] + m10=p[176] + m11=p[190] + m12=p[205] + M=[m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12] + if(p[242]=='FAIL'): + per="00.00" + to=p[233] + e12='FAIL' + elif(p[242]=='A.T.K.T.'): + per="00.00" + to=p[233] + e12='A.T.K.T' + elif((p[243]=='FIRST') and (p[244]=='CLASS') and (p[245]=='INSTRUCTIONS')): + per=p[233] + to=p[234] + e12='F.C' + elif(p[243]=='FIRST' and p[244]=='CLASS' and p[245]=='DIST.'): + per=p[233] + to=p[234] + e12='FIRST CLASS DIST.' + elif(p[243]=='FIRST' and p[244]=='CLASS' and p[245]=='CON'): + per=p[233] + to=p[234] + e12='FIRST CLASS CON' + elif(p[243]=='SECOND' and p[244]=='CLASS' and p[245]=='CON'): + per=p[233] + to=p[234] + e12='SECOND CLASS CON' + elif(p[243]=='SECOND' and p[244]=='CLASS'): + per=p[233] + to=p[234] + e12='S.C' + db.execute("INSERT INTO ELSEM3(ENROLLMENT_NO,name ,SEAT_NO ,BRANCH ,MANAGEMENT, IAM ,IAM_P,SP,SP_P ,ECA,ECA_P,EIA,EIA_P,ED,IT,CPP,PERCENTAGE,TOTAL,DIST) VALUES (%s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s,%s, %s)",(e,P,se,B,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,per,to,e12)) + + print(P,E,B,M,per,to,e12) + pdf='C:/Users/91940/Desktop/Result_Analyzer_System/media/ele' + folder_with_pdfs = pdf + linesOfFiles = [] + for pdf_file in os.listdir(folder_with_pdfs): + if pdf_file.endswith('.pdf'): + pdf_file_path = os.path.join(folder_with_pdfs, pdf_file) + linesOfFile = extract_pdf(pdf_file_path) + linesOfFiles.append(linesOfFile) + + + return render(request,'eleb.html',context) + +def elb1(request): + + return render(request,'elb1.html',context) + +def elb2(request): + cursor = connection.cursor() + cursor.execute('select distinct DIST from ELSEM2 ') + row = cursor.fetchall() + city_list = [item for i in row for item in i] + result=ELSEM2.objects.all() + cursor.execute('select avg(PERCENTAGE) from ELSEM2') + row = cursor.fetchall() + avg = [item for i in row for item in i] + + return render(request,'elb2.html',{'city_list':city_list,'user':result,'avg':avg}) +def chatel2(request): + cursor = connection.cursor() + cursor.execute('select count(ENROLLMENT_NO) from ELSEM2') + row = cursor.fetchall() + city_list = [item for i in row for item in i] + cursor.execute('select avg(PERCENTAGE) from ELSEM2') + row = cursor.fetchall() + avg = [item for i in row for item in i] + return render(request,'chartapp/chatel2.html',{'city_list':city_list,'user':result,'avg':avg}) + + +def elb3(request): + cursor = connection.cursor() + cursor.execute('select distinct DIST from ELSEM3 ') + row = cursor.fetchall() + city_list = [item for i in row for item in i] + result=ELSEM3.objects.all() + cursor.execute('select avg(PERCENTAGE) from ELSEM3') + row = cursor.fetchall() + avg = [item for i in row for item in i] + + return render(request,'elb3.html',{'city_list':city_list,'user':result,'avg':avg}) +def chatel3(request): + cursor = connection.cursor() + cursor.execute('select count(ENROLLMENT_NO) from ELSEM3') + row = cursor.fetchall() + city_list = [item for i in row for item in i] + cursor.execute('select avg(PERCENTAGE) from ELSEM3') + row = cursor.fetchall() + avg = [item for i in row for item in i] + return render(request,'chartapp/chatel3.html',{'city_list':city_list,'user':result,'avg':avg}) + + +@login_required +def civb(request): + context['page_title'] = 'Civil branch' + return render(request,'civb.html',context) +@login_required +def civ1(request): + context['page_title'] = 'CIV-SEM-1 branch' + + + return render(request,'civ1.html',context) +@login_required +def civ2(request): + context['page_title'] = 'CIV-SEM-3 branch' + + + return render(request,'civ2.html',context) +@login_required +def civ3(request): + context['page_title'] = 'CIV-SEM-5 branch' + + return render(request,'civ3.html',context) + +#login +def login_user(request): + logout(request) + resp = {"status":'failed','msg':''} + username = '' + password = '' + if request.POST: + username = request.POST['username'] + password = request.POST['password'] + + user = authenticate(username=username, password=password) + if user is not None: + if user.is_active: + login(request, user) + resp['status']='success' + else: + resp['msg'] = "Incorrect username or password" + else: + resp['msg'] = "Incorrect username or password" + return HttpResponse(json.dumps(resp),content_type='application/json') + +#Logout +def logoutuser(student): + logout(student) + return redirect('/') + + +@login_required +def update_profile(request): + context['page_title'] = 'Update Profile' + user = User.objects.get(id = request.user.id) + if not request.method == 'POST': + form = forms.UpdateProfile(instance=user) + context['form'] = form + print(form) + else: + form = forms.UpdateProfile(request.POST, instance=user) + if form.is_valid(): + form.save() + messages.success(request, "Profile has been updated") + return redirect("profile-page") + else: + context['form'] = form + + return render(request, 'manage_profile.html',context) + + +@login_required +def update_password(request): + context['page_title'] = "Update Password" + if request.method == 'POST': + form = forms.UpdatePasswords(user = request.user, data= request.POST) + if form.is_valid(): + form.save() + messages.success(request,"Your Account Password has been updated successfully") + update_session_auth_hash(request, form.user) + return redirect("profile-page") + else: + context['form'] = form + else: + form = forms.UpdatePasswords(request.POST) + context['form'] = form + return render(request,'update_password.html',context) + +@login_required +def profile(request): + context['page'] = 'profile' + context['page_title'] = "Profile" + return render(request,'profile.html', context) + + +# Class +@login_required +def class_mgt(request): + context['page'] = 'class_mgt' + context['page_title'] = 'Class Management' + classes = models.Class.objects.all() + context['classes'] = classes + return render(request,'class_mgt.html',context) + + +@login_required +def manage_class(request, pk = None): + if not pk is None: + classData = models.Class.objects.get(id = pk) + context['classData'] = classData + else: + context['classData'] = {} + return render(request, 'manage_class.html', context) + +@login_required +def save_class(request): + resp = { 'status':'failed', 'msg' : '' } + if not request.method == 'POST': + resp['msg'] = 'Request has been sent without data.' + else: + post = request.POST + if post['id'] == None or post['id'] == '': + form = forms.SaveClass(post) + else: + _class = models.Class.objects.get(id = post['id']) + form = forms.SaveClass(post, instance=_class) + + if form.is_valid(): + form.save() + resp['status'] = 'success' + messages.success(request, "Class Detail has been saved successfully.") + else: + resp['msg'] = 'Class Detail has failed to save.' + for field in form: + for error in field.errors: + resp['msg'] += str("
"+error) + return HttpResponse(json.dumps(resp),content_type="application/json") + +@login_required +def delete_class(request): + resp = { 'status':'failed', 'msg' : '' } + if not request.method == 'POST': + resp['msg'] = 'Request has been sent without data.' + else: + post = request.POST + try: + models.Class.objects.get(id = post['id']).delete() + resp['status'] = 'success' + messages.success(request, "Class Detail has been deleted successfully.") + except: + resp['msg'] = 'Class Detail has failed to delete.' + + return HttpResponse(json.dumps(resp),content_type="application/json") + + + +#Subject +@login_required +def subject_mgt(request): + context['page'] = 'subject_mgt' + context['page_title'] = 'Subject Management' + subjects = models.Subject.objects.all() + context['subjects'] = subjects + return render(request,'subject_mgt.html',context) + + +@login_required +def manage_subject(request, pk = None): + if not pk is None: + subject = models.Subject.objects.get(id = pk) + context['subject'] = subject + else: + context['subject'] = {} + return render(request, 'manage_subject.html', context) + +@login_required +def view_subject(request, pk = None): + if not pk is None: + subject = models.Subject.objects.get(id = pk) + context['subject'] = subject + else: + context['subject'] = {} + return render(request, 'view_subject.html', context) + +@login_required +def save_subject(request): + resp = { 'status':'failed', 'msg' : '' } + if not request.method == 'POST': + resp['msg'] = 'Request has been sent without data.' + else: + post = request.POST + if post['id'] == None or post['id'] == '': + form = forms.SaveSubject(post) + else: + subject = models.Subject.objects.get(id = post['id']) + form = forms.SaveSubject(post, instance=subject) + + if form.is_valid(): + form.save() + resp['status'] = 'success' + messages.success(request, "Subject Detail has been saved successfully.") + else: + resp['msg'] = 'Subject Detail has failed to save.' + for field in form: + for error in field.errors: + resp['msg'] += str(f"
"+error) + return HttpResponse(json.dumps(resp),content_type="application/json") + +@login_required +def delete_subject(request): + resp = { 'status':'failed', 'msg' : '' } + if not request.method == 'POST': + resp['msg'] = 'Request has been sent without data.' + else: + post = request.POST + try: + models.Subject.objects.get(id = post['id']).delete() + resp['status'] = 'success' + messages.success(request, "Subject Detail has been deleted successfully.") + except: + resp['msg'] = 'Subject Detail has failed to delete.' + + return HttpResponse(json.dumps(resp),content_type="application/json") + +#Students +@login_required +def costud_m(request): + context['page'] = 'student_mgt' + context['page_title'] = 'Student Management' + + return render(request,'stud_com_list/costud_m.html',context) +@login_required +def costud3_m(request): + context['page'] = 'student_mgt' + context['page_title'] = 'Student Management' + result=user1.objects.all() + context['user1']=result + return render(request,'stud_com_list/costud3_m.html',context) +@login_required +def cosem2(request): + context['page'] = 'student_mgt' + context['page_title'] = 'Student Management' + result=user12.objects.all() + context['user12']=result + return render(request,'stud_com_list/cosem2.html',context) +@login_required +def costud2_m(request): + context['page'] = 'student_mgt' + context['page_title'] = 'Student Management' + context['page_title'] = 'Student Management' + cursor = connection.cursor() + cursor.execute('select distinct DIST from COSEM3') + result=user1.objects.all() + context['user1']=result + return render(request,'stud_com_list/costud2_m.html',context) +@login_required +def student_mgt(request): + context['page'] = 'student_mgt' + context['page_title'] = 'Student Management' + + return render(request,'student_mgt.html',context) +@login_required +def stud3(request): + context['page'] = 'student_mgt' + context['page_title'] = 'Student Management' + cursor = connection.cursor() + cursor.execute('select distinct DIST from COSEM3') + result=user.objects.all() + context['user']=result + return render(request,'stud_com_list/stud3.html',context) + +@login_required +def manage_student(request, pk = None): + classes = models.Class.objects.filter(status = 1).all() + context['classes'] = classes + if not pk is None: + student = models.Student.objects.get(id = pk) + context['student'] = student + else: + context['student'] = {} + return render(request, 'manage_student.html', context) + +@login_required +def view_student(request, pk = None): + if not pk is None: + student = models.Student.objects.get(id = pk) + context['student'] = student + else: + context['student'] = {} + return render(request, 'view_student.html', context) + +@login_required +def save_student(request): + resp = { 'status':'failed', 'msg' : '' } + if not request.method == 'POST': + resp['msg'] = 'Request has been sent without data.' + else: + post = request.POST + if post['id'] == None or post['id'] == '': + form = forms.SaveStudent(post) + else: + student = models.Student.objects.get(id = post['id']) + form = forms.SaveStudent(post, instance=student) + + if form.is_valid(): + form.save() + resp['status'] = 'success' + messages.success(request, "Student Detail has been saved successfully.") + else: + resp['msg'] = 'Student Detail has failed to save.' + for field in form: + for error in field.errors: + resp['msg'] += str(f"
[{field.name}] "+error) + return HttpResponse(json.dumps(resp),content_type="application/json") + +@login_required +def delete_student(request): + resp = { 'status':'failed', 'msg' : '' } + if not request.method == 'POST': + resp['msg'] = 'Request has been sent without data.' + else: + post = request.POST + try: + models.Student.objects.get(id = post['id']).delete() + resp['status'] = 'success' + messages.success(request, "Student Detail has been deleted successfully.") + except: + resp['msg'] = 'Student Detail has failed to delete.' + + return HttpResponse(json.dumps(resp),content_type="application/json") + +#Result +@login_required +def result_mgt(request): + context['page'] = 'result_mgt' + context['page_title'] = 'Result Management' + + + return render(request,'result_mgt.html',context) + +@login_required +def resultsemco(request): + context['page'] = 'result_mgt' + context['page_title'] = 'Result Management' + + return render(request,'resultsemco.html',context) +@login_required +def cosem1_r(request): + context['page'] = 'result_mgt' + context['page_title'] = 'Result Management' + cursor = connection.cursor() + cursor.execute('select distinct DIST from COSEM3') + result=user12.objects.all() + context['user']=result + return render(request,'cosem1_r.html',context) +@login_required +def cosem3_R(request): + context['page'] = 'result_mgt' + context['page_title'] = 'Result Management' + cursor = connection.cursor() + cursor.execute('select distinct DIST from COSEM3') + result=user.objects.all() + context['user']=result + return render(request,'cosem3_R.html',context) +@login_required +def cosem2_r(request): + context['page'] = 'result_mgt' + context['page_title'] = 'Result Management' + cursor = connection.cursor() + cursor.execute('select distinct DIST from COSEM3') + result=user1.objects.all() + context['user1']=result + return render(request,'cosem2_r.html',context) +@login_required +def resultsem(request): + context['page'] = 'result_mgt' + context['page_title'] = 'Result Management' + + return render(request,'resultsem.html',context) + +@login_required +def manage_result(request, pk = None): + students = models.Student.objects.filter(status = 1).all() + context['students'] = students + subjects = models.Subject.objects.filter(status = 1).all() + context['subjects'] = subjects + if not pk is None: + result =models.Result.objects.get(id = pk) + marks =models.Student_Subject_Result.objects.filter(result = result) + context['marks'] = marks + context['result'] = result + else: + context['result'] = {} + context['marks'] = {} + return render(request, 'manage_result.html', context) + +def view_result(request, pk = None): + if not pk is None: + result =models.Result.objects.get(id = pk) + context['result'] = result + marks =models.Student_Subject_Result.objects.filter(result = result) + context['marks'] = marks + else: + context['result'] = {} + context['marks'] = {} + return render(request, 'view_result.html', context) + +@login_required +def save_result(request): + resp = { 'status':'failed', 'msg' : '' } + if not request.method == 'POST': + resp['msg'] = 'Request has been sent without data.' + else: + post = request.POST + if post['id'] == None or post['id'] == '': + form = forms.SaveResult(post) + else: + result =models.Result.objects.get(id = post['id']) + form = forms.SaveResult(post, instance=result) + if form.is_valid(): + form.save() + is_new = False + if post['id'] == '': + rid = models.Result.objects.all().last().id + result =models.Result.objects.get(id = rid) + is_new = True + else: + rid = post['id'] + models.Student_Subject_Result.objects.filter(result = result).delete() + has_error = False + subjects= request.POST.getlist('subject[]') + grade= request.POST.getlist('grade[]') + i = 0 + for subject in subjects: + data = { + 'result' :rid, + 'subject' :subject, + 'grade' : grade[i] + } + form2 = forms.SaveSubjectResult(data = data) + if form2.is_valid(): + form2.save() + else: + resp['msg'] = 'Result Detail has failed to save.' + for field in form2: + for error in field.errors: + resp['msg'] += str(f"
[{field.name}] "+error) + has_error = True + break + i +=1 + if has_error == False: + resp['status'] = 'success' + messages.success(request, "Result Detail has been saved successfully.") + else: + if is_new: + models.Result.objects.get(id = post['id']).delete() + else: + resp['msg'] = 'Result Detail has failed to save.' + for field in form: + for error in field.errors: + resp['msg'] += str(f"
[{field.name}] "+error) + return HttpResponse(json.dumps(resp),content_type="application/json") + +@login_required +def delete_result(request): + resp = { 'status':'failed', 'msg' : '' } + if not request.method == 'POST': + resp['msg'] = 'Request has been sent without data.' + else: + post = request.POST + try: + models.Result.objects.get(id = post['id']).delete() + resp['status'] = 'success' + messages.success(request, "Result Detail has been deleted successfully.") + except: + resp['msg'] = 'result Detail has failed to delete.' + + return HttpResponse(json.dumps(resp),content_type="application/json") + + +def select_student_results(request): + context['page'] = 'Select Student' + context['page_title'] = 'Select Student' + + + return render(request, 'select_student_results.html', {'user':result}) + +def resultsemview(request): + + return render(request, 'resultsemview.html') +def resultsem1(request): + cursor = connection.cursor() + cursor.execute('select distinct DIST from COSEM1 ') + row = cursor.fetchall() + result=user12.objects.all() + return render(request, 'resultsem1.html',{'user':result}) +def resultsem3(request): + cursor = connection.cursor() + cursor.execute('select distinct DIST from COSEM2 ') + row = cursor.fetchall() + result=user1.objects.all() + return render(request, 'resultsem3.html',{'user':result}) + +def resultsem5(request): + cursor = connection.cursor() + cursor.execute('select distinct ENROLLMENT_NO from COSEM3') + row = cursor.fetchall() + result1=user.objects.all() + return render(request, 'resultsem5.html',{'user':result1}) + + +def list_student_result(request, pk=None): + if pk is None: + messages.error(request, "Invalid Student ID") + return redirect('login') + else: + cursor = connection.cursor() + cursor.execute('select distinct DIST from COSEM3') + result=user.objects.all() + context['user']=result + + + return render(request, 'list_results.html', context) \ No newline at end of file diff --git a/static/default/css/style.css b/static/default/css/style.css new file mode 100644 index 0000000..859cd8a --- /dev/null +++ b/static/default/css/style.css @@ -0,0 +1,471 @@ +html, +body { + height: 100%; + width: 100%; + max-height: 100%; + overflow: auto; + display: flex; + flex-direction: column; +} + +.dark-version .form-control, +.dark-version .form-select { + border: 1px solid #d2d6da38 !important; + color: #fff !important; +} + +.dark-version .form-control:not(.form-control-sm), +.dark-version .form-select:not(.form-select-sm) { + padding: 0.5rem 0.5rem !important; +} + +.dark-version .form-select>option { + color: #000 !important; +} + +.dark-version .paginate_button>.page-link { + background: var(--bs-dark) !important; +} + +.dark-version .table tbody tr:last-child td { + border-width: 1px !important; +} + + +/* loader */ + +body.loading { + overflow: hidden; +} + +#pre-loader { + display: flex; + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + backdrop-filter: brightness(.5); + z-index: 99999; + align-items: center; + justify-content: center; +} + +.lds-default { + display: inline-block; + position: relative; + width: 80px; + height: 80px; +} + +.lds-default div { + position: absolute; + width: 6px; + height: 6px; + background: #fff; + border-radius: 50%; + animation: lds-default 1.2s linear infinite; +} + +.lds-default div:nth-child(1) { + animation-delay: 0s; + top: 37px; + left: 66px; +} + +.lds-default div:nth-child(2) { + animation-delay: -0.1s; + top: 22px; + left: 62px; +} + +.lds-default div:nth-child(3) { + animation-delay: -0.2s; + top: 11px; + left: 52px; +} + +.lds-default div:nth-child(4) { + animation-delay: -0.3s; + top: 7px; + left: 37px; +} + +.lds-default div:nth-child(5) { + animation-delay: -0.4s; + top: 11px; + left: 22px; +} + +.lds-default div:nth-child(6) { + animation-delay: -0.5s; + top: 22px; + left: 11px; +} + +.lds-default div:nth-child(7) { + animation-delay: -0.6s; + top: 37px; + left: 7px; +} + +.lds-default div:nth-child(8) { + animation-delay: -0.7s; + top: 52px; + left: 11px; +} + +.lds-default div:nth-child(9) { + animation-delay: -0.8s; + top: 62px; + left: 22px; +} + +.lds-default div:nth-child(10) { + animation-delay: -0.9s; + top: 66px; + left: 37px; +} + +.lds-default div:nth-child(11) { + animation-delay: -1s; + top: 62px; + left: 52px; +} + +.lds-default div:nth-child(12) { + animation-delay: -1.1s; + top: 52px; + left: 62px; +} + +@keyframes lds-default { + 0%, + 20%, + 80%, + 100% { + transform: scale(1); + } + 50% { + transform: scale(1.5); + } +} + +#chat-holder { + width: 100%; + height: 50vh; + display: flex; + flex-direction: column-reverse; + overflow: auto; +} + +.w-min-content { + width: min-content !important +} + +.select2-selection, +.select2-dropdown { + background-color: var(--bs-dark) !important; + border-radius: unset !important; + color: #fff !important; +} + +.select2-container--default .select2-selection--single .select2-selection__rendered { + color: var(--bs-light) !important +} + +span.select2-selection.select2-selection--single { + padding-top: 0.1rem !important; + padding-bottom: 0.1rem !important; + height: auto !important; +} +@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@200;300;400;500;600;700&display=swap'); +*{ + margin: 0; + padding: 0; + box-sizing: border-box; + text-decoration: none; + font-family: 'Poppins', sans-serif; +} +.wrapper{ + background: #171c24; + position: fixed; + width: 100%; +} +.wrapper nav{ + position: relative; + display: flex; + max-width: calc(100% - 200px); + margin: 0 auto; + height: 70px; + align-items: center; + justify-content: space-between; +} +nav .content{ + display: flex; + align-items: center; +} +nav .content .links{ + margin-left: 80px; + display: flex; +} +.content .logo a{ + color: #fff; + font-size: 30px; + font-weight: 600; + text-transform: uppercase; + position: relative; +} +.content .logo a::before{ + content: "~rcpp~"; + width: 100%; + color: #2ed573; + position: absolute; + top: 0; + left: 0; + border-right: 0.2rem solid #2ed573; + animation: slide 3s linear infinite; + -webkit-animation: slide 3s linear infinite; + overflow: hidden; +} +@keyframes slide { + 0%{ + width: 0%; + } + 50%{ + width: 100%; + } + 100%{ + width: 0%; + } +} +.content .links li{ + list-style: none; + line-height: 70px; +} +.content .links li a, +.content .links li label{ + color: #fff; + font-size: 18px; + font-weight: 500; + padding: 9px 17px; + border-radius: 5px; + transition: all 0.3s ease; +} +.content .links li label{ + display: none; +} +.content .links li a:hover, +.content .links li label:hover{ + background: #323c4e; +} +.wrapper .search-icon, +.wrapper .menu-icon{ + color: #fff; + font-size: 18px; + cursor: pointer; + line-height: 70px; + width: 70px; + text-align: center; +} +.wrapper .menu-icon{ + display: none; +} +.wrapper #show-search:checked ~ .search-icon i::before{ + content: "\f00d"; +} + +.wrapper .search-box{ + position: absolute; + height: 100%; + max-width: calc(100% - 50px); + width: 100%; + opacity: 0; + pointer-events: none; + transition: all 0.3s ease; +} +.wrapper #show-search:checked ~ .search-box{ + opacity: 1; + pointer-events: auto; +} +.search-box input{ + width: 100%; + height: 100%; + border: none; + outline: none; + font-size: 17px; + color: #fff; + background: #171c24; + padding: 0 100px 0 15px; +} +.search-box input::placeholder{ + color: #f2f2f2; +} +.search-box .go-icon{ + position: absolute; + right: 10px; + top: 50%; + transform: translateY(-50%); + line-height: 60px; + width: 70px; + background: #171c24; + border: none; + outline: none; + color: #fff; + font-size: 20px; + cursor: pointer; +} +.wrapper input[type="checkbox"]{ + display: none; +} + +/* Dropdown Menu code start */ +.content .links ul{ + position: absolute; + background: #171c24; + top: 80px; + z-index: -1; + opacity: 0; + visibility: hidden; +} +.content .links li:hover > ul{ + top: 70px; + opacity: 1; + visibility: visible; + transition: all 0.3s ease; +} +.content .links ul li a{ + display: block; + width: 100%; + line-height: 30px; + border-radius: 0px!important; +} +.content .links ul ul{ + position: absolute; + top: 0; + right: calc(-100% + 8px); +} +.content .links ul li{ + position: relative; +} +.content .links ul li:hover ul{ + top: 0; +} + +/* Responsive code start */ +@media screen and (max-width: 1250px){ + .wrapper nav{ + max-width: 100%; + padding: 0 20px; + } + nav .content .links{ + margin-left: 30px; + } + .content .links li a{ + padding: 8px 13px; + } + .wrapper .search-box{ + max-width: calc(100% - 100px); + } + .wrapper .search-box input{ + padding: 0 100px 0 15px; + } +} + +@media screen and (max-width: 900px){ + .wrapper .menu-icon{ + display: block; + } + .wrapper #show-menu:checked ~ .menu-icon i::before{ + content: "\f00d"; + } + nav .content .links{ + display: block; + position: fixed; + background: #14181f; + height: 100%; + width: 100%; + top: 70px; + left: -100%; + margin-left: 0; + max-width: 350px; + overflow-y: auto; + padding-bottom: 100px; + transition: all 0.3s ease; + } + nav #show-menu:checked ~ .content .links{ + left: 0%; + } + .content .links li{ + margin: 15px 20px; + } + .content .links li a, + .content .links li label{ + line-height: 40px; + font-size: 20px; + display: block; + padding: 8px 18px; + cursor: pointer; + } + .content .links li a.desktop-link{ + display: none; + } + + /* dropdown responsive code start */ + .content .links ul, + .content .links ul ul{ + position: static; + opacity: 1; + visibility: visible; + background: none; + max-height: 0px; + overflow: hidden; + } + .content .links #show-features:checked ~ ul, + .content .links #show-services:checked ~ ul, + .content .links #show-items:checked ~ ul{ + max-height: 100vh; + } + .content .links ul li{ + margin: 7px 20px; + } + .content .links ul li a{ + font-size: 18px; + line-height: 30px; + border-radius: 5px!important; + } +} + +@media screen and (max-width: 400px){ + .wrapper nav{ + padding: 0 10px; + } + .content .logo a{ + font-size: 27px; + } + .wrapper .search-box{ + max-width: calc(100% - 70px); + } + .wrapper .search-box .go-icon{ + width: 30px; + right: 0; + } + .wrapper .search-box input{ + padding-right: 30px; + } +} + +.dummy-text{ + position: absolute; + top: 50%; + left: 50%; + width: 100%; + z-index: -1; + padding: 0 20px; + text-align: center; + transform: translate(-50%, -50%); +} +.dummy-text h2{ + font-size: 45px; + margin: 5px 0; +} \ No newline at end of file diff --git a/static/default/js/jquery-3.6.0.min.js b/static/default/js/jquery-3.6.0.min.js new file mode 100644 index 0000000..33ae244 --- /dev/null +++ b/static/default/js/jquery-3.6.0.min.js @@ -0,0 +1,1667 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ ! function(e, t) { "use strict"; "object" == typeof module && "object" == typeof module.exports ? module.exports = e.document ? t(e, !0) : function(e) { if (!e.document) throw new Error("jQuery requires a window with a document"); return t(e) } : t(e) }("undefined" != typeof window ? window : this, function(C, e) { + "use strict"; + var t = [], + r = Object.getPrototypeOf, + s = t.slice, + g = t.flat ? function(e) { return t.flat.call(e) } : function(e) { return t.concat.apply([], e) }, + u = t.push, + i = t.indexOf, + n = {}, + o = n.toString, + v = n.hasOwnProperty, + a = v.toString, + l = a.call(Object), + y = {}, + m = function(e) { return "function" == typeof e && "number" != typeof e.nodeType && "function" != typeof e.item }, + x = function(e) { return null != e && e === e.window }, + E = C.document, + c = { type: !0, src: !0, nonce: !0, noModule: !0 }; + + function b(e, t, n) { + var r, i, o = (n = n || E).createElement("script"); + if (o.text = e, t) + for (r in c)(i = t[r] || t.getAttribute && t.getAttribute(r)) && o.setAttribute(r, i); + n.head.appendChild(o).parentNode.removeChild(o) + } + + function w(e) { return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? n[o.call(e)] || "object" : typeof e } + var f = "3.6.0", + S = function(e, t) { return new S.fn.init(e, t) }; + + function p(e) { + var t = !!e && "length" in e && e.length, + n = w(e); + return !m(e) && !x(e) && ("array" === n || 0 === t || "number" == typeof t && 0 < t && t - 1 in e) + } + S.fn = S.prototype = { + jquery: f, + constructor: S, + length: 0, + toArray: function() { return s.call(this) }, + get: function(e) { return null == e ? s.call(this) : e < 0 ? this[e + this.length] : this[e] }, + pushStack: function(e) { var t = S.merge(this.constructor(), e); return t.prevObject = this, t }, + each: function(e) { return S.each(this, e) }, + map: function(n) { return this.pushStack(S.map(this, function(e, t) { return n.call(e, t, e) })) }, + slice: function() { return this.pushStack(s.apply(this, arguments)) }, + first: function() { return this.eq(0) }, + last: function() { return this.eq(-1) }, + even: function() { return this.pushStack(S.grep(this, function(e, t) { return (t + 1) % 2 })) }, + odd: function() { return this.pushStack(S.grep(this, function(e, t) { return t % 2 })) }, + eq: function(e) { + var t = this.length, + n = +e + (e < 0 ? t : 0); + return this.pushStack(0 <= n && n < t ? [this[n]] : []) + }, + end: function() { return this.prevObject || this.constructor() }, + push: u, + sort: t.sort, + splice: t.splice + }, S.extend = S.fn.extend = function() { + var e, t, n, r, i, o, a = arguments[0] || {}, + s = 1, + u = arguments.length, + l = !1; + for ("boolean" == typeof a && (l = a, a = arguments[s] || {}, s++), "object" == typeof a || m(a) || (a = {}), s === u && (a = this, s--); s < u; s++) + if (null != (e = arguments[s])) + for (t in e) r = e[t], "__proto__" !== t && a !== r && (l && r && (S.isPlainObject(r) || (i = Array.isArray(r))) ? (n = a[t], o = i && !Array.isArray(n) ? [] : i || S.isPlainObject(n) ? n : {}, i = !1, a[t] = S.extend(l, o, r)) : void 0 !== r && (a[t] = r)); + return a + }, S.extend({ + expando: "jQuery" + (f + Math.random()).replace(/\D/g, ""), + isReady: !0, + error: function(e) { throw new Error(e) }, + noop: function() {}, + isPlainObject: function(e) { var t, n; return !(!e || "[object Object]" !== o.call(e)) && (!(t = r(e)) || "function" == typeof(n = v.call(t, "constructor") && t.constructor) && a.call(n) === l) }, + isEmptyObject: function(e) { var t; for (t in e) return !1; return !0 }, + globalEval: function(e, t, n) { b(e, { nonce: t && t.nonce }, n) }, + each: function(e, t) { + var n, r = 0; + if (p(e)) { + for (n = e.length; r < n; r++) + if (!1 === t.call(e[r], r, e[r])) break + } else + for (r in e) + if (!1 === t.call(e[r], r, e[r])) break; return e + }, + makeArray: function(e, t) { var n = t || []; return null != e && (p(Object(e)) ? S.merge(n, "string" == typeof e ? [e] : e) : u.call(n, e)), n }, + inArray: function(e, t, n) { return null == t ? -1 : i.call(t, e, n) }, + merge: function(e, t) { for (var n = +t.length, r = 0, i = e.length; r < n; r++) e[i++] = t[r]; return e.length = i, e }, + grep: function(e, t, n) { for (var r = [], i = 0, o = e.length, a = !n; i < o; i++) !t(e[i], i) !== a && r.push(e[i]); return r }, + map: function(e, t, n) { + var r, i, o = 0, + a = []; + if (p(e)) + for (r = e.length; o < r; o++) null != (i = t(e[o], o, n)) && a.push(i); + else + for (o in e) null != (i = t(e[o], o, n)) && a.push(i); + return g(a) + }, + guid: 1, + support: y + }), "function" == typeof Symbol && (S.fn[Symbol.iterator] = t[Symbol.iterator]), S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function(e, t) { n["[object " + t + "]"] = t.toLowerCase() }); + var d = function(n) { + var e, d, b, o, i, h, f, g, w, u, l, T, C, a, E, v, s, c, y, S = "sizzle" + 1 * new Date, + p = n.document, + k = 0, + r = 0, + m = ue(), + x = ue(), + A = ue(), + N = ue(), + j = function(e, t) { return e === t && (l = !0), 0 }, + D = {}.hasOwnProperty, + t = [], + q = t.pop, + L = t.push, + H = t.push, + O = t.slice, + P = function(e, t) { + for (var n = 0, r = e.length; n < r; n++) + if (e[n] === t) return n; + return -1 + }, + R = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + M = "[\\x20\\t\\r\\n\\f]", + I = "(?:\\\\[\\da-fA-F]{1,6}" + M + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + W = "\\[" + M + "*(" + I + ")(?:" + M + "*([*^$|!~]?=)" + M + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + I + "))|)" + M + "*\\]", + F = ":(" + I + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + W + ")*)|.*)\\)|)", + B = new RegExp(M + "+", "g"), + $ = new RegExp("^" + M + "+|((?:^|[^\\\\])(?:\\\\.)*)" + M + "+$", "g"), + _ = new RegExp("^" + M + "*," + M + "*"), + z = new RegExp("^" + M + "*([>+~]|" + M + ")" + M + "*"), + U = new RegExp(M + "|>"), + X = new RegExp(F), + V = new RegExp("^" + I + "$"), + G = { ID: new RegExp("^#(" + I + ")"), CLASS: new RegExp("^\\.(" + I + ")"), TAG: new RegExp("^(" + I + "|[*])"), ATTR: new RegExp("^" + W), PSEUDO: new RegExp("^" + F), CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + M + "*(even|odd|(([+-]|)(\\d*)n|)" + M + "*(?:([+-]|)" + M + "*(\\d+)|))" + M + "*\\)|)", "i"), bool: new RegExp("^(?:" + R + ")$", "i"), needsContext: new RegExp("^" + M + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + M + "*((?:-\\d)?\\d*)" + M + "*\\)|)(?=[^-]|$)", "i") }, + Y = /HTML$/i, + Q = /^(?:input|select|textarea|button)$/i, + J = /^h\d$/i, + K = /^[^{]+\{\s*\[native \w/, + Z = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + ee = /[+~]/, + te = new RegExp("\\\\[\\da-fA-F]{1,6}" + M + "?|\\\\([^\\r\\n\\f])", "g"), + ne = function(e, t) { var n = "0x" + e.slice(1) - 65536; return t || (n < 0 ? String.fromCharCode(n + 65536) : String.fromCharCode(n >> 10 | 55296, 1023 & n | 56320)) }, + re = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + ie = function(e, t) { return t ? "\0" === e ? "\ufffd" : e.slice(0, -1) + "\\" + e.charCodeAt(e.length - 1).toString(16) + " " : "\\" + e }, + oe = function() { T() }, + ae = be(function(e) { return !0 === e.disabled && "fieldset" === e.nodeName.toLowerCase() }, { dir: "parentNode", next: "legend" }); + try { H.apply(t = O.call(p.childNodes), p.childNodes), t[p.childNodes.length].nodeType } catch (e) { + H = { + apply: t.length ? function(e, t) { L.apply(e, O.call(t)) } : function(e, t) { + var n = e.length, + r = 0; + while (e[n++] = t[r++]); + e.length = n - 1 + } + } + } + + function se(t, e, n, r) { + var i, o, a, s, u, l, c, f = e && e.ownerDocument, + p = e ? e.nodeType : 9; + if (n = n || [], "string" != typeof t || !t || 1 !== p && 9 !== p && 11 !== p) return n; + if (!r && (T(e), e = e || C, E)) { + if (11 !== p && (u = Z.exec(t))) + if (i = u[1]) { if (9 === p) { if (!(a = e.getElementById(i))) return n; if (a.id === i) return n.push(a), n } else if (f && (a = f.getElementById(i)) && y(e, a) && a.id === i) return n.push(a), n } else { if (u[2]) return H.apply(n, e.getElementsByTagName(t)), n; if ((i = u[3]) && d.getElementsByClassName && e.getElementsByClassName) return H.apply(n, e.getElementsByClassName(i)), n } + if (d.qsa && !N[t + " "] && (!v || !v.test(t)) && (1 !== p || "object" !== e.nodeName.toLowerCase())) { + if (c = t, f = e, 1 === p && (U.test(t) || z.test(t))) { + (f = ee.test(t) && ye(e.parentNode) || e) === e && d.scope || ((s = e.getAttribute("id")) ? s = s.replace(re, ie) : e.setAttribute("id", s = S)), o = (l = h(t)).length; + while (o--) l[o] = (s ? "#" + s : ":scope") + " " + xe(l[o]); + c = l.join(",") + } + try { return H.apply(n, f.querySelectorAll(c)), n } catch (e) { N(t, !0) } finally { s === S && e.removeAttribute("id") } + } + } + return g(t.replace($, "$1"), e, n, r) + } + + function ue() { var r = []; return function e(t, n) { return r.push(t + " ") > b.cacheLength && delete e[r.shift()], e[t + " "] = n } } + + function le(e) { return e[S] = !0, e } + + function ce(e) { var t = C.createElement("fieldset"); try { return !!e(t) } catch (e) { return !1 } finally { t.parentNode && t.parentNode.removeChild(t), t = null } } + + function fe(e, t) { + var n = e.split("|"), + r = n.length; + while (r--) b.attrHandle[n[r]] = t + } + + function pe(e, t) { + var n = t && e, + r = n && 1 === e.nodeType && 1 === t.nodeType && e.sourceIndex - t.sourceIndex; + if (r) return r; + if (n) + while (n = n.nextSibling) + if (n === t) return -1; + return e ? 1 : -1 + } + + function de(t) { return function(e) { return "input" === e.nodeName.toLowerCase() && e.type === t } } + + function he(n) { return function(e) { var t = e.nodeName.toLowerCase(); return ("input" === t || "button" === t) && e.type === n } } + + function ge(t) { return function(e) { return "form" in e ? e.parentNode && !1 === e.disabled ? "label" in e ? "label" in e.parentNode ? e.parentNode.disabled === t : e.disabled === t : e.isDisabled === t || e.isDisabled !== !t && ae(e) === t : e.disabled === t : "label" in e && e.disabled === t } } + + function ve(a) { + return le(function(o) { + return o = +o, le(function(e, t) { + var n, r = a([], e.length, o), + i = r.length; + while (i--) e[n = r[i]] && (e[n] = !(t[n] = e[n])) + }) + }) + } + + function ye(e) { return e && "undefined" != typeof e.getElementsByTagName && e } + for (e in d = se.support = {}, i = se.isXML = function(e) { + var t = e && e.namespaceURI, + n = e && (e.ownerDocument || e).documentElement; + return !Y.test(t || n && n.nodeName || "HTML") + }, T = se.setDocument = function(e) { + var t, n, r = e ? e.ownerDocument || e : p; + return r != C && 9 === r.nodeType && r.documentElement && (a = (C = r).documentElement, E = !i(C), p != C && (n = C.defaultView) && n.top !== n && (n.addEventListener ? n.addEventListener("unload", oe, !1) : n.attachEvent && n.attachEvent("onunload", oe)), d.scope = ce(function(e) { return a.appendChild(e).appendChild(C.createElement("div")), "undefined" != typeof e.querySelectorAll && !e.querySelectorAll(":scope fieldset div").length }), d.attributes = ce(function(e) { return e.className = "i", !e.getAttribute("className") }), d.getElementsByTagName = ce(function(e) { return e.appendChild(C.createComment("")), !e.getElementsByTagName("*").length }), d.getElementsByClassName = K.test(C.getElementsByClassName), d.getById = ce(function(e) { return a.appendChild(e).id = S, !C.getElementsByName || !C.getElementsByName(S).length }), d.getById ? (b.filter.ID = function(e) { var t = e.replace(te, ne); return function(e) { return e.getAttribute("id") === t } }, b.find.ID = function(e, t) { if ("undefined" != typeof t.getElementById && E) { var n = t.getElementById(e); return n ? [n] : [] } }) : (b.filter.ID = function(e) { var n = e.replace(te, ne); return function(e) { var t = "undefined" != typeof e.getAttributeNode && e.getAttributeNode("id"); return t && t.value === n } }, b.find.ID = function(e, t) { + if ("undefined" != typeof t.getElementById && E) { + var n, r, i, o = t.getElementById(e); + if (o) { + if ((n = o.getAttributeNode("id")) && n.value === e) return [o]; + i = t.getElementsByName(e), r = 0; + while (o = i[r++]) + if ((n = o.getAttributeNode("id")) && n.value === e) return [o] + } + return [] + } + }), b.find.TAG = d.getElementsByTagName ? function(e, t) { return "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName(e) : d.qsa ? t.querySelectorAll(e) : void 0 } : function(e, t) { + var n, r = [], + i = 0, + o = t.getElementsByTagName(e); + if ("*" === e) { while (n = o[i++]) 1 === n.nodeType && r.push(n); return r } + return o + }, b.find.CLASS = d.getElementsByClassName && function(e, t) { if ("undefined" != typeof t.getElementsByClassName && E) return t.getElementsByClassName(e) }, s = [], v = [], (d.qsa = K.test(C.querySelectorAll)) && (ce(function(e) { + var t; + a.appendChild(e).innerHTML = "", e.querySelectorAll("[msallowcapture^='']").length && v.push("[*^$]=" + M + "*(?:''|\"\")"), e.querySelectorAll("[selected]").length || v.push("\\[" + M + "*(?:value|" + R + ")"), e.querySelectorAll("[id~=" + S + "-]").length || v.push("~="), (t = C.createElement("input")).setAttribute("name", ""), e.appendChild(t), e.querySelectorAll("[name='']").length || v.push("\\[" + M + "*name" + M + "*=" + M + "*(?:''|\"\")"), e.querySelectorAll(":checked").length || v.push(":checked"), e.querySelectorAll("a#" + S + "+*").length || v.push(".#.+[+~]"), e.querySelectorAll("\\\f"), v.push("[\\r\\n\\f]") + }), ce(function(e) { + e.innerHTML = ""; + var t = C.createElement("input"); + t.setAttribute("type", "hidden"), e.appendChild(t).setAttribute("name", "D"), e.querySelectorAll("[name=d]").length && v.push("name" + M + "*[*^$|!~]?="), 2 !== e.querySelectorAll(":enabled").length && v.push(":enabled", ":disabled"), a.appendChild(e).disabled = !0, 2 !== e.querySelectorAll(":disabled").length && v.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), v.push(",.*:") + })), (d.matchesSelector = K.test(c = a.matches || a.webkitMatchesSelector || a.mozMatchesSelector || a.oMatchesSelector || a.msMatchesSelector)) && ce(function(e) { d.disconnectedMatch = c.call(e, "*"), c.call(e, "[s!='']:x"), s.push("!=", F) }), v = v.length && new RegExp(v.join("|")), s = s.length && new RegExp(s.join("|")), t = K.test(a.compareDocumentPosition), y = t || K.test(a.contains) ? function(e, t) { + var n = 9 === e.nodeType ? e.documentElement : e, + r = t && t.parentNode; + return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r))) + } : function(e, t) { + if (t) + while (t = t.parentNode) + if (t === e) return !0; + return !1 + }, j = t ? function(e, t) { if (e === t) return l = !0, 0; var n = !e.compareDocumentPosition - !t.compareDocumentPosition; return n || (1 & (n = (e.ownerDocument || e) == (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1) || !d.sortDetached && t.compareDocumentPosition(e) === n ? e == C || e.ownerDocument == p && y(p, e) ? -1 : t == C || t.ownerDocument == p && y(p, t) ? 1 : u ? P(u, e) - P(u, t) : 0 : 4 & n ? -1 : 1) } : function(e, t) { + if (e === t) return l = !0, 0; + var n, r = 0, + i = e.parentNode, + o = t.parentNode, + a = [e], + s = [t]; + if (!i || !o) return e == C ? -1 : t == C ? 1 : i ? -1 : o ? 1 : u ? P(u, e) - P(u, t) : 0; + if (i === o) return pe(e, t); + n = e; + while (n = n.parentNode) a.unshift(n); + n = t; + while (n = n.parentNode) s.unshift(n); + while (a[r] === s[r]) r++; + return r ? pe(a[r], s[r]) : a[r] == p ? -1 : s[r] == p ? 1 : 0 + }), C + }, se.matches = function(e, t) { return se(e, null, null, t) }, se.matchesSelector = function(e, t) { + if (T(e), d.matchesSelector && E && !N[t + " "] && (!s || !s.test(t)) && (!v || !v.test(t))) try { var n = c.call(e, t); if (n || d.disconnectedMatch || e.document && 11 !== e.document.nodeType) return n } catch (e) { N(t, !0) } + return 0 < se(t, C, null, [e]).length + }, se.contains = function(e, t) { return (e.ownerDocument || e) != C && T(e), y(e, t) }, se.attr = function(e, t) { + (e.ownerDocument || e) != C && T(e); + var n = b.attrHandle[t.toLowerCase()], + r = n && D.call(b.attrHandle, t.toLowerCase()) ? n(e, t, !E) : void 0; + return void 0 !== r ? r : d.attributes || !E ? e.getAttribute(t) : (r = e.getAttributeNode(t)) && r.specified ? r.value : null + }, se.escape = function(e) { return (e + "").replace(re, ie) }, se.error = function(e) { throw new Error("Syntax error, unrecognized expression: " + e) }, se.uniqueSort = function(e) { + var t, n = [], + r = 0, + i = 0; + if (l = !d.detectDuplicates, u = !d.sortStable && e.slice(0), e.sort(j), l) { while (t = e[i++]) t === e[i] && (r = n.push(i)); while (r--) e.splice(n[r], 1) } + return u = null, e + }, o = se.getText = function(e) { + var t, n = "", + r = 0, + i = e.nodeType; + if (i) { if (1 === i || 9 === i || 11 === i) { if ("string" == typeof e.textContent) return e.textContent; for (e = e.firstChild; e; e = e.nextSibling) n += o(e) } else if (3 === i || 4 === i) return e.nodeValue } else + while (t = e[r++]) n += o(t); + return n + }, (b = se.selectors = { + cacheLength: 50, + createPseudo: le, + match: G, + attrHandle: {}, + find: {}, + relative: { ">": { dir: "parentNode", first: !0 }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: !0 }, "~": { dir: "previousSibling" } }, + preFilter: { ATTR: function(e) { return e[1] = e[1].replace(te, ne), e[3] = (e[3] || e[4] || e[5] || "").replace(te, ne), "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice(0, 4) }, CHILD: function(e) { return e[1] = e[1].toLowerCase(), "nth" === e[1].slice(0, 3) ? (e[3] || se.error(e[0]), e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])), e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && se.error(e[0]), e }, PSEUDO: function(e) { var t, n = !e[6] && e[2]; return G.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && X.test(n) && (t = h(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t), e[2] = n.slice(0, t)), e.slice(0, 3)) } }, + filter: { + TAG: function(e) { var t = e.replace(te, ne).toLowerCase(); return "*" === e ? function() { return !0 } : function(e) { return e.nodeName && e.nodeName.toLowerCase() === t } }, + CLASS: function(e) { var t = m[e + " "]; return t || (t = new RegExp("(^|" + M + ")" + e + "(" + M + "|$)")) && m(e, function(e) { return t.test("string" == typeof e.className && e.className || "undefined" != typeof e.getAttribute && e.getAttribute("class") || "") }) }, + ATTR: function(n, r, i) { return function(e) { var t = se.attr(e, n); return null == t ? "!=" === r : !r || (t += "", "=" === r ? t === i : "!=" === r ? t !== i : "^=" === r ? i && 0 === t.indexOf(i) : "*=" === r ? i && -1 < t.indexOf(i) : "$=" === r ? i && t.slice(-i.length) === i : "~=" === r ? -1 < (" " + t.replace(B, " ") + " ").indexOf(i) : "|=" === r && (t === i || t.slice(0, i.length + 1) === i + "-")) } }, + CHILD: function(h, e, t, g, v) { + var y = "nth" !== h.slice(0, 3), + m = "last" !== h.slice(-4), + x = "of-type" === e; + return 1 === g && 0 === v ? function(e) { return !!e.parentNode } : function(e, t, n) { + var r, i, o, a, s, u, l = y !== m ? "nextSibling" : "previousSibling", + c = e.parentNode, + f = x && e.nodeName.toLowerCase(), + p = !n && !x, + d = !1; + if (c) { + if (y) { + while (l) { + a = e; + while (a = a[l]) + if (x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) return !1; + u = l = "only" === h && !u && "nextSibling" + } + return !0 + } + if (u = [m ? c.firstChild : c.lastChild], m && p) { + d = (s = (r = (i = (o = (a = c)[S] || (a[S] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] || [])[0] === k && r[1]) && r[2], a = s && c.childNodes[s]; + while (a = ++s && a && a[l] || (d = s = 0) || u.pop()) + if (1 === a.nodeType && ++d && a === e) { i[h] = [k, s, d]; break } + } else if (p && (d = s = (r = (i = (o = (a = e)[S] || (a[S] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] || [])[0] === k && r[1]), !1 === d) + while (a = ++s && a && a[l] || (d = s = 0) || u.pop()) + if ((x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) && ++d && (p && ((i = (o = a[S] || (a[S] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] = [k, d]), a === e)) break; + return (d -= v) === g || d % g == 0 && 0 <= d / g + } + } + }, + PSEUDO: function(e, o) { + var t, a = b.pseudos[e] || b.setFilters[e.toLowerCase()] || se.error("unsupported pseudo: " + e); + return a[S] ? a(o) : 1 < a.length ? (t = [e, e, "", o], b.setFilters.hasOwnProperty(e.toLowerCase()) ? le(function(e, t) { + var n, r = a(e, o), + i = r.length; + while (i--) e[n = P(e, r[i])] = !(t[n] = r[i]) + }) : function(e) { return a(e, 0, t) }) : a + } + }, + pseudos: { + not: le(function(e) { + var r = [], + i = [], + s = f(e.replace($, "$1")); + return s[S] ? le(function(e, t, n, r) { + var i, o = s(e, null, r, []), + a = e.length; + while (a--)(i = o[a]) && (e[a] = !(t[a] = i)) + }) : function(e, t, n) { return r[0] = e, s(r, null, n, i), r[0] = null, !i.pop() } + }), + has: le(function(t) { return function(e) { return 0 < se(t, e).length } }), + contains: le(function(t) { + return t = t.replace(te, ne), + function(e) { return -1 < (e.textContent || o(e)).indexOf(t) } + }), + lang: le(function(n) { + return V.test(n || "") || se.error("unsupported lang: " + n), n = n.replace(te, ne).toLowerCase(), + function(e) { + var t; + do { if (t = E ? e.lang : e.getAttribute("xml:lang") || e.getAttribute("lang")) return (t = t.toLowerCase()) === n || 0 === t.indexOf(n + "-") } while ((e = e.parentNode) && 1 === e.nodeType); + return !1 + } + }), + target: function(e) { var t = n.location && n.location.hash; return t && t.slice(1) === e.id }, + root: function(e) { return e === a }, + focus: function(e) { return e === C.activeElement && (!C.hasFocus || C.hasFocus()) && !!(e.type || e.href || ~e.tabIndex) }, + enabled: ge(!1), + disabled: ge(!0), + checked: function(e) { var t = e.nodeName.toLowerCase(); return "input" === t && !!e.checked || "option" === t && !!e.selected }, + selected: function(e) { return e.parentNode && e.parentNode.selectedIndex, !0 === e.selected }, + empty: function(e) { + for (e = e.firstChild; e; e = e.nextSibling) + if (e.nodeType < 6) return !1; + return !0 + }, + parent: function(e) { return !b.pseudos.empty(e) }, + header: function(e) { return J.test(e.nodeName) }, + input: function(e) { return Q.test(e.nodeName) }, + button: function(e) { var t = e.nodeName.toLowerCase(); return "input" === t && "button" === e.type || "button" === t }, + text: function(e) { var t; return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase()) }, + first: ve(function() { return [0] }), + last: ve(function(e, t) { return [t - 1] }), + eq: ve(function(e, t, n) { return [n < 0 ? n + t : n] }), + even: ve(function(e, t) { for (var n = 0; n < t; n += 2) e.push(n); return e }), + odd: ve(function(e, t) { for (var n = 1; n < t; n += 2) e.push(n); return e }), + lt: ve(function(e, t, n) { for (var r = n < 0 ? n + t : t < n ? t : n; 0 <= --r;) e.push(r); return e }), + gt: ve(function(e, t, n) { for (var r = n < 0 ? n + t : n; ++r < t;) e.push(r); return e }) + } + }).pseudos.nth = b.pseudos.eq, { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 }) b.pseudos[e] = de(e); + for (e in { submit: !0, reset: !0 }) b.pseudos[e] = he(e); + + function me() {} + + function xe(e) { for (var t = 0, n = e.length, r = ""; t < n; t++) r += e[t].value; return r } + + function be(s, e, t) { + var u = e.dir, + l = e.next, + c = l || u, + f = t && "parentNode" === c, + p = r++; + return e.first ? function(e, t, n) { + while (e = e[u]) + if (1 === e.nodeType || f) return s(e, t, n); + return !1 + } : function(e, t, n) { + var r, i, o, a = [k, p]; + if (n) { + while (e = e[u]) + if ((1 === e.nodeType || f) && s(e, t, n)) return !0 + } else + while (e = e[u]) + if (1 === e.nodeType || f) + if (i = (o = e[S] || (e[S] = {}))[e.uniqueID] || (o[e.uniqueID] = {}), l && l === e.nodeName.toLowerCase()) e = e[u] || e; + else { if ((r = i[c]) && r[0] === k && r[1] === p) return a[2] = r[2]; if ((i[c] = a)[2] = s(e, t, n)) return !0 } return !1 + } + } + + function we(i) { + return 1 < i.length ? function(e, t, n) { + var r = i.length; + while (r--) + if (!i[r](e, t, n)) return !1; + return !0 + } : i[0] + } + + function Te(e, t, n, r, i) { for (var o, a = [], s = 0, u = e.length, l = null != t; s < u; s++)(o = e[s]) && (n && !n(o, r, i) || (a.push(o), l && t.push(s))); return a } + + function Ce(d, h, g, v, y, e) { + return v && !v[S] && (v = Ce(v)), y && !y[S] && (y = Ce(y, e)), le(function(e, t, n, r) { + var i, o, a, s = [], + u = [], + l = t.length, + c = e || function(e, t, n) { for (var r = 0, i = t.length; r < i; r++) se(e, t[r], n); return n }(h || "*", n.nodeType ? [n] : n, []), + f = !d || !e && h ? c : Te(c, s, d, n, r), + p = g ? y || (e ? d : l || v) ? [] : t : f; + if (g && g(f, p, n, r), v) { i = Te(p, u), v(i, [], n, r), o = i.length; while (o--)(a = i[o]) && (p[u[o]] = !(f[u[o]] = a)) } + if (e) { + if (y || d) { + if (y) { + i = [], o = p.length; + while (o--)(a = p[o]) && i.push(f[o] = a); + y(null, p = [], i, r) + } + o = p.length; + while (o--)(a = p[o]) && -1 < (i = y ? P(e, a) : s[o]) && (e[i] = !(t[i] = a)) + } + } else p = Te(p === t ? p.splice(l, p.length) : p), y ? y(null, t, p, r) : H.apply(t, p) + }) + } + + function Ee(e) { + for (var i, t, n, r = e.length, o = b.relative[e[0].type], a = o || b.relative[" "], s = o ? 1 : 0, u = be(function(e) { return e === i }, a, !0), l = be(function(e) { return -1 < P(i, e) }, a, !0), c = [function(e, t, n) { var r = !o && (n || t !== w) || ((i = t).nodeType ? u(e, t, n) : l(e, t, n)); return i = null, r }]; s < r; s++) + if (t = b.relative[e[s].type]) c = [be(we(c), t)]; + else { + if ((t = b.filter[e[s].type].apply(null, e[s].matches))[S]) { + for (n = ++s; n < r; n++) + if (b.relative[e[n].type]) break; + return Ce(1 < s && we(c), 1 < s && xe(e.slice(0, s - 1).concat({ value: " " === e[s - 2].type ? "*" : "" })).replace($, "$1"), t, s < n && Ee(e.slice(s, n)), n < r && Ee(e = e.slice(n)), n < r && xe(e)) + } + c.push(t) + } + return we(c) + } + return me.prototype = b.filters = b.pseudos, b.setFilters = new me, h = se.tokenize = function(e, t) { + var n, r, i, o, a, s, u, l = x[e + " "]; + if (l) return t ? 0 : l.slice(0); + a = e, s = [], u = b.preFilter; + while (a) { for (o in n && !(r = _.exec(a)) || (r && (a = a.slice(r[0].length) || a), s.push(i = [])), n = !1, (r = z.exec(a)) && (n = r.shift(), i.push({ value: n, type: r[0].replace($, " ") }), a = a.slice(n.length)), b.filter) !(r = G[o].exec(a)) || u[o] && !(r = u[o](r)) || (n = r.shift(), i.push({ value: n, type: o, matches: r }), a = a.slice(n.length)); if (!n) break } + return t ? a.length : a ? se.error(e) : x(e, s).slice(0) + }, f = se.compile = function(e, t) { + var n, v, y, m, x, r, i = [], + o = [], + a = A[e + " "]; + if (!a) { + t || (t = h(e)), n = t.length; + while (n--)(a = Ee(t[n]))[S] ? i.push(a) : o.push(a); + (a = A(e, (v = o, m = 0 < (y = i).length, x = 0 < v.length, r = function(e, t, n, r, i) { + var o, a, s, u = 0, + l = "0", + c = e && [], + f = [], + p = w, + d = e || x && b.find.TAG("*", i), + h = k += null == p ? 1 : Math.random() || .1, + g = d.length; + for (i && (w = t == C || t || i); l !== g && null != (o = d[l]); l++) { + if (x && o) { + a = 0, t || o.ownerDocument == C || (T(o), n = !E); + while (s = v[a++]) + if (s(o, t || C, n)) { r.push(o); break } + i && (k = h) + } + m && ((o = !s && o) && u--, e && c.push(o)) + } + if (u += l, m && l !== u) { + a = 0; + while (s = y[a++]) s(c, f, t, n); + if (e) { + if (0 < u) + while (l--) c[l] || f[l] || (f[l] = q.call(r)); + f = Te(f) + } + H.apply(r, f), i && !e && 0 < f.length && 1 < u + y.length && se.uniqueSort(r) + } + return i && (k = h, w = p), c + }, m ? le(r) : r))).selector = e + } + return a + }, g = se.select = function(e, t, n, r) { + var i, o, a, s, u, l = "function" == typeof e && e, + c = !r && h(e = l.selector || e); + if (n = n || [], 1 === c.length) { + if (2 < (o = c[0] = c[0].slice(0)).length && "ID" === (a = o[0]).type && 9 === t.nodeType && E && b.relative[o[1].type]) { + if (!(t = (b.find.ID(a.matches[0].replace(te, ne), t) || [])[0])) return n; + l && (t = t.parentNode), e = e.slice(o.shift().value.length) + } + i = G.needsContext.test(e) ? 0 : o.length; + while (i--) { if (a = o[i], b.relative[s = a.type]) break; if ((u = b.find[s]) && (r = u(a.matches[0].replace(te, ne), ee.test(o[0].type) && ye(t.parentNode) || t))) { if (o.splice(i, 1), !(e = r.length && xe(o))) return H.apply(n, r), n; break } } + } + return (l || f(e, c))(r, t, !E, n, !t || ee.test(e) && ye(t.parentNode) || t), n + }, d.sortStable = S.split("").sort(j).join("") === S, d.detectDuplicates = !!l, T(), d.sortDetached = ce(function(e) { return 1 & e.compareDocumentPosition(C.createElement("fieldset")) }), ce(function(e) { return e.innerHTML = "", "#" === e.firstChild.getAttribute("href") }) || fe("type|href|height|width", function(e, t, n) { if (!n) return e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2) }), d.attributes && ce(function(e) { return e.innerHTML = "", e.firstChild.setAttribute("value", ""), "" === e.firstChild.getAttribute("value") }) || fe("value", function(e, t, n) { if (!n && "input" === e.nodeName.toLowerCase()) return e.defaultValue }), ce(function(e) { return null == e.getAttribute("disabled") }) || fe(R, function(e, t, n) { var r; if (!n) return !0 === e[t] ? t.toLowerCase() : (r = e.getAttributeNode(t)) && r.specified ? r.value : null }), se + }(C); + S.find = d, S.expr = d.selectors, S.expr[":"] = S.expr.pseudos, S.uniqueSort = S.unique = d.uniqueSort, S.text = d.getText, S.isXMLDoc = d.isXML, S.contains = d.contains, S.escapeSelector = d.escape; + var h = function(e, t, n) { + var r = [], + i = void 0 !== n; + while ((e = e[t]) && 9 !== e.nodeType) + if (1 === e.nodeType) { + if (i && S(e).is(n)) break; + r.push(e) + } + return r + }, + T = function(e, t) { for (var n = []; e; e = e.nextSibling) 1 === e.nodeType && e !== t && n.push(e); return n }, + k = S.expr.match.needsContext; + + function A(e, t) { return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase() } + var N = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i; + + function j(e, n, r) { return m(n) ? S.grep(e, function(e, t) { return !!n.call(e, t, e) !== r }) : n.nodeType ? S.grep(e, function(e) { return e === n !== r }) : "string" != typeof n ? S.grep(e, function(e) { return -1 < i.call(n, e) !== r }) : S.filter(n, e, r) } + S.filter = function(e, t, n) { var r = t[0]; return n && (e = ":not(" + e + ")"), 1 === t.length && 1 === r.nodeType ? S.find.matchesSelector(r, e) ? [r] : [] : S.find.matches(e, S.grep(t, function(e) { return 1 === e.nodeType })) }, S.fn.extend({ + find: function(e) { + var t, n, r = this.length, + i = this; + if ("string" != typeof e) return this.pushStack(S(e).filter(function() { + for (t = 0; t < r; t++) + if (S.contains(i[t], this)) return !0 + })); + for (n = this.pushStack([]), t = 0; t < r; t++) S.find(e, i[t], n); + return 1 < r ? S.uniqueSort(n) : n + }, + filter: function(e) { return this.pushStack(j(this, e || [], !1)) }, + not: function(e) { return this.pushStack(j(this, e || [], !0)) }, + is: function(e) { return !!j(this, "string" == typeof e && k.test(e) ? S(e) : e || [], !1).length } + }); + var D, q = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/; + (S.fn.init = function(e, t, n) { + var r, i; + if (!e) return this; + if (n = n || D, "string" == typeof e) { + if (!(r = "<" === e[0] && ">" === e[e.length - 1] && 3 <= e.length ? [null, e, null] : q.exec(e)) || !r[1] && t) return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e); + if (r[1]) { + if (t = t instanceof S ? t[0] : t, S.merge(this, S.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : E, !0)), N.test(r[1]) && S.isPlainObject(t)) + for (r in t) m(this[r]) ? this[r](t[r]) : this.attr(r, t[r]); + return this + } + return (i = E.getElementById(r[2])) && (this[0] = i, this.length = 1), this + } + return e.nodeType ? (this[0] = e, this.length = 1, this) : m(e) ? void 0 !== n.ready ? n.ready(e) : e(S) : S.makeArray(e, this) + }).prototype = S.fn, D = S(E); + var L = /^(?:parents|prev(?:Until|All))/, + H = { children: !0, contents: !0, next: !0, prev: !0 }; + + function O(e, t) { while ((e = e[t]) && 1 !== e.nodeType); return e } + S.fn.extend({ + has: function(e) { + var t = S(e, this), + n = t.length; + return this.filter(function() { + for (var e = 0; e < n; e++) + if (S.contains(this, t[e])) return !0 + }) + }, + closest: function(e, t) { + var n, r = 0, + i = this.length, + o = [], + a = "string" != typeof e && S(e); + if (!k.test(e)) + for (; r < i; r++) + for (n = this[r]; n && n !== t; n = n.parentNode) + if (n.nodeType < 11 && (a ? -1 < a.index(n) : 1 === n.nodeType && S.find.matchesSelector(n, e))) { o.push(n); break } + return this.pushStack(1 < o.length ? S.uniqueSort(o) : o) + }, + index: function(e) { return e ? "string" == typeof e ? i.call(S(e), this[0]) : i.call(this, e.jquery ? e[0] : e) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1 }, + add: function(e, t) { return this.pushStack(S.uniqueSort(S.merge(this.get(), S(e, t)))) }, + addBack: function(e) { return this.add(null == e ? this.prevObject : this.prevObject.filter(e)) } + }), S.each({ parent: function(e) { var t = e.parentNode; return t && 11 !== t.nodeType ? t : null }, parents: function(e) { return h(e, "parentNode") }, parentsUntil: function(e, t, n) { return h(e, "parentNode", n) }, next: function(e) { return O(e, "nextSibling") }, prev: function(e) { return O(e, "previousSibling") }, nextAll: function(e) { return h(e, "nextSibling") }, prevAll: function(e) { return h(e, "previousSibling") }, nextUntil: function(e, t, n) { return h(e, "nextSibling", n) }, prevUntil: function(e, t, n) { return h(e, "previousSibling", n) }, siblings: function(e) { return T((e.parentNode || {}).firstChild, e) }, children: function(e) { return T(e.firstChild) }, contents: function(e) { return null != e.contentDocument && r(e.contentDocument) ? e.contentDocument : (A(e, "template") && (e = e.content || e), S.merge([], e.childNodes)) } }, function(r, i) { S.fn[r] = function(e, t) { var n = S.map(this, i, e); return "Until" !== r.slice(-5) && (t = e), t && "string" == typeof t && (n = S.filter(t, n)), 1 < this.length && (H[r] || S.uniqueSort(n), L.test(r) && n.reverse()), this.pushStack(n) } }); + var P = /[^\x20\t\r\n\f]+/g; + + function R(e) { return e } + + function M(e) { throw e } + + function I(e, t, n, r) { var i; try { e && m(i = e.promise) ? i.call(e).done(t).fail(n) : e && m(i = e.then) ? i.call(e, t, n) : t.apply(void 0, [e].slice(r)) } catch (e) { n.apply(void 0, [e]) } } + S.Callbacks = function(r) { + var e, n; + r = "string" == typeof r ? (e = r, n = {}, S.each(e.match(P) || [], function(e, t) { n[t] = !0 }), n) : S.extend({}, r); + var i, t, o, a, s = [], + u = [], + l = -1, + c = function() { + for (a = a || r.once, o = i = !0; u.length; l = -1) { t = u.shift(); while (++l < s.length) !1 === s[l].apply(t[0], t[1]) && r.stopOnFalse && (l = s.length, t = !1) } + r.memory || (t = !1), i = !1, a && (s = t ? [] : "") + }, + f = { add: function() { return s && (t && !i && (l = s.length - 1, u.push(t)), function n(e) { S.each(e, function(e, t) { m(t) ? r.unique && f.has(t) || s.push(t) : t && t.length && "string" !== w(t) && n(t) }) }(arguments), t && !i && c()), this }, remove: function() { return S.each(arguments, function(e, t) { var n; while (-1 < (n = S.inArray(t, s, n))) s.splice(n, 1), n <= l && l-- }), this }, has: function(e) { return e ? -1 < S.inArray(e, s) : 0 < s.length }, empty: function() { return s && (s = []), this }, disable: function() { return a = u = [], s = t = "", this }, disabled: function() { return !s }, lock: function() { return a = u = [], t || i || (s = t = ""), this }, locked: function() { return !!a }, fireWith: function(e, t) { return a || (t = [e, (t = t || []).slice ? t.slice() : t], u.push(t), i || c()), this }, fire: function() { return f.fireWith(this, arguments), this }, fired: function() { return !!o } }; + return f + }, S.extend({ + Deferred: function(e) { + var o = [ + ["notify", "progress", S.Callbacks("memory"), S.Callbacks("memory"), 2], + ["resolve", "done", S.Callbacks("once memory"), S.Callbacks("once memory"), 0, "resolved"], + ["reject", "fail", S.Callbacks("once memory"), S.Callbacks("once memory"), 1, "rejected"] + ], + i = "pending", + a = { + state: function() { return i }, + always: function() { return s.done(arguments).fail(arguments), this }, + "catch": function(e) { return a.then(null, e) }, + pipe: function() { + var i = arguments; + return S.Deferred(function(r) { + S.each(o, function(e, t) { + var n = m(i[t[4]]) && i[t[4]]; + s[t[1]](function() { + var e = n && n.apply(this, arguments); + e && m(e.promise) ? e.promise().progress(r.notify).done(r.resolve).fail(r.reject) : r[t[0] + "With"](this, n ? [e] : arguments) + }) + }), i = null + }).promise() + }, + then: function(t, n, r) { + var u = 0; + + function l(i, o, a, s) { + return function() { + var n = this, + r = arguments, + e = function() { + var e, t; + if (!(i < u)) { + if ((e = a.apply(n, r)) === o.promise()) throw new TypeError("Thenable self-resolution"); + t = e && ("object" == typeof e || "function" == typeof e) && e.then, m(t) ? s ? t.call(e, l(u, o, R, s), l(u, o, M, s)) : (u++, t.call(e, l(u, o, R, s), l(u, o, M, s), l(u, o, R, o.notifyWith))) : (a !== R && (n = void 0, r = [e]), (s || o.resolveWith)(n, r)) + } + }, + t = s ? e : function() { try { e() } catch (e) { S.Deferred.exceptionHook && S.Deferred.exceptionHook(e, t.stackTrace), u <= i + 1 && (a !== M && (n = void 0, r = [e]), o.rejectWith(n, r)) } }; + i ? t() : (S.Deferred.getStackHook && (t.stackTrace = S.Deferred.getStackHook()), C.setTimeout(t)) + } + } + return S.Deferred(function(e) { o[0][3].add(l(0, e, m(r) ? r : R, e.notifyWith)), o[1][3].add(l(0, e, m(t) ? t : R)), o[2][3].add(l(0, e, m(n) ? n : M)) }).promise() + }, + promise: function(e) { return null != e ? S.extend(e, a) : a } + }, + s = {}; + return S.each(o, function(e, t) { + var n = t[2], + r = t[5]; + a[t[1]] = n.add, r && n.add(function() { i = r }, o[3 - e][2].disable, o[3 - e][3].disable, o[0][2].lock, o[0][3].lock), n.add(t[3].fire), s[t[0]] = function() { return s[t[0] + "With"](this === s ? void 0 : this, arguments), this }, s[t[0] + "With"] = n.fireWith + }), a.promise(s), e && e.call(s, s), s + }, + when: function(e) { + var n = arguments.length, + t = n, + r = Array(t), + i = s.call(arguments), + o = S.Deferred(), + a = function(t) { return function(e) { r[t] = this, i[t] = 1 < arguments.length ? s.call(arguments) : e, --n || o.resolveWith(r, i) } }; + if (n <= 1 && (I(e, o.done(a(t)).resolve, o.reject, !n), "pending" === o.state() || m(i[t] && i[t].then))) return o.then(); + while (t--) I(i[t], a(t), o.reject); + return o.promise() + } + }); + var W = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + S.Deferred.exceptionHook = function(e, t) { C.console && C.console.warn && e && W.test(e.name) && C.console.warn("jQuery.Deferred exception: " + e.message, e.stack, t) }, S.readyException = function(e) { C.setTimeout(function() { throw e }) }; + var F = S.Deferred(); + + function B() { E.removeEventListener("DOMContentLoaded", B), C.removeEventListener("load", B), S.ready() } + S.fn.ready = function(e) { return F.then(e)["catch"](function(e) { S.readyException(e) }), this }, S.extend({ + isReady: !1, + readyWait: 1, + ready: function(e) { + (!0 === e ? --S.readyWait : S.isReady) || (S.isReady = !0) !== e && 0 < --S.readyWait || F.resolveWith(E, [S]) + } + }), S.ready.then = F.then, "complete" === E.readyState || "loading" !== E.readyState && !E.documentElement.doScroll ? C.setTimeout(S.ready) : (E.addEventListener("DOMContentLoaded", B), C.addEventListener("load", B)); + var $ = function(e, t, n, r, i, o, a) { + var s = 0, + u = e.length, + l = null == n; + if ("object" === w(n)) + for (s in i = !0, n) $(e, t, s, n[s], !0, o, a); + else if (void 0 !== r && (i = !0, m(r) || (a = !0), l && (a ? (t.call(e, r), t = null) : (l = t, t = function(e, t, n) { return l.call(S(e), n) })), t)) + for (; s < u; s++) t(e[s], n, a ? r : r.call(e[s], s, t(e[s], n))); + return i ? e : l ? t.call(e) : u ? t(e[0], n) : o + }, + _ = /^-ms-/, + z = /-([a-z])/g; + + function U(e, t) { return t.toUpperCase() } + + function X(e) { return e.replace(_, "ms-").replace(z, U) } + var V = function(e) { return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType }; + + function G() { this.expando = S.expando + G.uid++ } + G.uid = 1, G.prototype = { + cache: function(e) { var t = e[this.expando]; return t || (t = {}, V(e) && (e.nodeType ? e[this.expando] = t : Object.defineProperty(e, this.expando, { value: t, configurable: !0 }))), t }, + set: function(e, t, n) { + var r, i = this.cache(e); + if ("string" == typeof t) i[X(t)] = n; + else + for (r in t) i[X(r)] = t[r]; + return i + }, + get: function(e, t) { return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][X(t)] }, + access: function(e, t, n) { return void 0 === t || t && "string" == typeof t && void 0 === n ? this.get(e, t) : (this.set(e, t, n), void 0 !== n ? n : t) }, + remove: function(e, t) { var n, r = e[this.expando]; if (void 0 !== r) { if (void 0 !== t) { n = (t = Array.isArray(t) ? t.map(X) : (t = X(t)) in r ? [t] : t.match(P) || []).length; while (n--) delete r[t[n]] }(void 0 === t || S.isEmptyObject(r)) && (e.nodeType ? e[this.expando] = void 0 : delete e[this.expando]) } }, + hasData: function(e) { var t = e[this.expando]; return void 0 !== t && !S.isEmptyObject(t) } + }; + var Y = new G, + Q = new G, + J = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + K = /[A-Z]/g; + + function Z(e, t, n) { + var r, i; + if (void 0 === n && 1 === e.nodeType) + if (r = "data-" + t.replace(K, "-$&").toLowerCase(), "string" == typeof(n = e.getAttribute(r))) { + try { n = "true" === (i = n) || "false" !== i && ("null" === i ? null : i === +i + "" ? +i : J.test(i) ? JSON.parse(i) : i) } catch (e) {} + Q.set(e, t, n) + } else n = void 0; + return n + } + S.extend({ hasData: function(e) { return Q.hasData(e) || Y.hasData(e) }, data: function(e, t, n) { return Q.access(e, t, n) }, removeData: function(e, t) { Q.remove(e, t) }, _data: function(e, t, n) { return Y.access(e, t, n) }, _removeData: function(e, t) { Y.remove(e, t) } }), S.fn.extend({ + data: function(n, e) { + var t, r, i, o = this[0], + a = o && o.attributes; + if (void 0 === n) { + if (this.length && (i = Q.get(o), 1 === o.nodeType && !Y.get(o, "hasDataAttrs"))) { + t = a.length; + while (t--) a[t] && 0 === (r = a[t].name).indexOf("data-") && (r = X(r.slice(5)), Z(o, r, i[r])); + Y.set(o, "hasDataAttrs", !0) + } + return i + } + return "object" == typeof n ? this.each(function() { Q.set(this, n) }) : $(this, function(e) { + var t; + if (o && void 0 === e) return void 0 !== (t = Q.get(o, n)) ? t : void 0 !== (t = Z(o, n)) ? t : void 0; + this.each(function() { Q.set(this, n, e) }) + }, null, e, 1 < arguments.length, null, !0) + }, + removeData: function(e) { return this.each(function() { Q.remove(this, e) }) } + }), S.extend({ + queue: function(e, t, n) { var r; if (e) return t = (t || "fx") + "queue", r = Y.get(e, t), n && (!r || Array.isArray(n) ? r = Y.access(e, t, S.makeArray(n)) : r.push(n)), r || [] }, + dequeue: function(e, t) { + t = t || "fx"; + var n = S.queue(e, t), + r = n.length, + i = n.shift(), + o = S._queueHooks(e, t); + "inprogress" === i && (i = n.shift(), r--), i && ("fx" === t && n.unshift("inprogress"), delete o.stop, i.call(e, function() { S.dequeue(e, t) }, o)), !r && o && o.empty.fire() + }, + _queueHooks: function(e, t) { var n = t + "queueHooks"; return Y.get(e, n) || Y.access(e, n, { empty: S.Callbacks("once memory").add(function() { Y.remove(e, [t + "queue", n]) }) }) } + }), S.fn.extend({ + queue: function(t, n) { + var e = 2; + return "string" != typeof t && (n = t, t = "fx", e--), arguments.length < e ? S.queue(this[0], t) : void 0 === n ? this : this.each(function() { + var e = S.queue(this, t, n); + S._queueHooks(this, t), "fx" === t && "inprogress" !== e[0] && S.dequeue(this, t) + }) + }, + dequeue: function(e) { return this.each(function() { S.dequeue(this, e) }) }, + clearQueue: function(e) { return this.queue(e || "fx", []) }, + promise: function(e, t) { + var n, r = 1, + i = S.Deferred(), + o = this, + a = this.length, + s = function() {--r || i.resolveWith(o, [o]) }; + "string" != typeof e && (t = e, e = void 0), e = e || "fx"; + while (a--)(n = Y.get(o[a], e + "queueHooks")) && n.empty && (r++, n.empty.add(s)); + return s(), i.promise(t) + } + }); + var ee = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, + te = new RegExp("^(?:([+-])=|)(" + ee + ")([a-z%]*)$", "i"), + ne = ["Top", "Right", "Bottom", "Left"], + re = E.documentElement, + ie = function(e) { return S.contains(e.ownerDocument, e) }, + oe = { composed: !0 }; + re.getRootNode && (ie = function(e) { return S.contains(e.ownerDocument, e) || e.getRootNode(oe) === e.ownerDocument }); + var ae = function(e, t) { return "none" === (e = t || e).style.display || "" === e.style.display && ie(e) && "none" === S.css(e, "display") }; + + function se(e, t, n, r) { + var i, o, a = 20, + s = r ? function() { return r.cur() } : function() { return S.css(e, t, "") }, + u = s(), + l = n && n[3] || (S.cssNumber[t] ? "" : "px"), + c = e.nodeType && (S.cssNumber[t] || "px" !== l && +u) && te.exec(S.css(e, t)); + if (c && c[3] !== l) { + u /= 2, l = l || c[3], c = +u || 1; + while (a--) S.style(e, t, c + l), (1 - o) * (1 - (o = s() / u || .5)) <= 0 && (a = 0), c /= o; + c *= 2, S.style(e, t, c + l), n = n || [] + } + return n && (c = +c || +u || 0, i = n[1] ? c + (n[1] + 1) * n[2] : +n[2], r && (r.unit = l, r.start = c, r.end = i)), i + } + var ue = {}; + + function le(e, t) { for (var n, r, i, o, a, s, u, l = [], c = 0, f = e.length; c < f; c++)(r = e[c]).style && (n = r.style.display, t ? ("none" === n && (l[c] = Y.get(r, "display") || null, l[c] || (r.style.display = "")), "" === r.style.display && ae(r) && (l[c] = (u = a = o = void 0, a = (i = r).ownerDocument, s = i.nodeName, (u = ue[s]) || (o = a.body.appendChild(a.createElement(s)), u = S.css(o, "display"), o.parentNode.removeChild(o), "none" === u && (u = "block"), ue[s] = u)))) : "none" !== n && (l[c] = "none", Y.set(r, "display", n))); for (c = 0; c < f; c++) null != l[c] && (e[c].style.display = l[c]); return e } + S.fn.extend({ show: function() { return le(this, !0) }, hide: function() { return le(this) }, toggle: function(e) { return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function() { ae(this) ? S(this).show() : S(this).hide() }) } }); + var ce, fe, pe = /^(?:checkbox|radio)$/i, + de = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i, + he = /^$|^module$|\/(?:java|ecma)script/i; + ce = E.createDocumentFragment().appendChild(E.createElement("div")), (fe = E.createElement("input")).setAttribute("type", "radio"), fe.setAttribute("checked", "checked"), fe.setAttribute("name", "t"), ce.appendChild(fe), y.checkClone = ce.cloneNode(!0).cloneNode(!0).lastChild.checked, ce.innerHTML = "", y.noCloneChecked = !!ce.cloneNode(!0).lastChild.defaultValue, ce.innerHTML = "", y.option = !!ce.lastChild; + var ge = { thead: [1, "", "
"], col: [2, "", "
"], tr: [2, "", "
"], td: [3, "", "
"], _default: [0, "", ""] }; + + function ve(e, t) { var n; return n = "undefined" != typeof e.getElementsByTagName ? e.getElementsByTagName(t || "*") : "undefined" != typeof e.querySelectorAll ? e.querySelectorAll(t || "*") : [], void 0 === t || t && A(e, t) ? S.merge([e], n) : n } + + function ye(e, t) { for (var n = 0, r = e.length; n < r; n++) Y.set(e[n], "globalEval", !t || Y.get(t[n], "globalEval")) } + ge.tbody = ge.tfoot = ge.colgroup = ge.caption = ge.thead, ge.th = ge.td, y.option || (ge.optgroup = ge.option = [1, ""]); + var me = /<|&#?\w+;/; + + function xe(e, t, n, r, i) { + for (var o, a, s, u, l, c, f = t.createDocumentFragment(), p = [], d = 0, h = e.length; d < h; d++) + if ((o = e[d]) || 0 === o) + if ("object" === w(o)) S.merge(p, o.nodeType ? [o] : o); + else if (me.test(o)) { + a = a || f.appendChild(t.createElement("div")), s = (de.exec(o) || ["", ""])[1].toLowerCase(), u = ge[s] || ge._default, a.innerHTML = u[1] + S.htmlPrefilter(o) + u[2], c = u[0]; + while (c--) a = a.lastChild; + S.merge(p, a.childNodes), (a = f.firstChild).textContent = "" + } else p.push(t.createTextNode(o)); + f.textContent = "", d = 0; + while (o = p[d++]) + if (r && -1 < S.inArray(o, r)) i && i.push(o); + else if (l = ie(o), a = ve(f.appendChild(o), "script"), l && ye(a), n) { c = 0; while (o = a[c++]) he.test(o.type || "") && n.push(o) } + return f + } + var be = /^([^.]*)(?:\.(.+)|)/; + + function we() { return !0 } + + function Te() { return !1 } + + function Ce(e, t) { return e === function() { try { return E.activeElement } catch (e) {} }() == ("focus" === t) } + + function Ee(e, t, n, r, i, o) { + var a, s; + if ("object" == typeof t) { for (s in "string" != typeof n && (r = r || n, n = void 0), t) Ee(e, s, n, r, t[s], o); return e } + if (null == r && null == i ? (i = n, r = n = void 0) : null == i && ("string" == typeof n ? (i = r, r = void 0) : (i = r, r = n, n = void 0)), !1 === i) i = Te; + else if (!i) return e; + return 1 === o && (a = i, (i = function(e) { return S().off(e), a.apply(this, arguments) }).guid = a.guid || (a.guid = S.guid++)), e.each(function() { S.event.add(this, t, i, r, n) }) + } + + function Se(e, i, o) { + o ? (Y.set(e, i, !1), S.event.add(e, i, { + namespace: !1, + handler: function(e) { + var t, n, r = Y.get(this, i); + if (1 & e.isTrigger && this[i]) { + if (r.length)(S.event.special[i] || {}).delegateType && e.stopPropagation(); + else if (r = s.call(arguments), Y.set(this, i, r), t = o(this, i), this[i](), r !== (n = Y.get(this, i)) || t ? Y.set(this, i, !1) : n = {}, r !== n) return e.stopImmediatePropagation(), e.preventDefault(), n && n.value + } else r.length && (Y.set(this, i, { value: S.event.trigger(S.extend(r[0], S.Event.prototype), r.slice(1), this) }), e.stopImmediatePropagation()) + } + })) : void 0 === Y.get(e, i) && S.event.add(e, i, we) + } + S.event = { + global: {}, + add: function(t, e, n, r, i) { var o, a, s, u, l, c, f, p, d, h, g, v = Y.get(t); if (V(t)) { n.handler && (n = (o = n).handler, i = o.selector), i && S.find.matchesSelector(re, i), n.guid || (n.guid = S.guid++), (u = v.events) || (u = v.events = Object.create(null)), (a = v.handle) || (a = v.handle = function(e) { return "undefined" != typeof S && S.event.triggered !== e.type ? S.event.dispatch.apply(t, arguments) : void 0 }), l = (e = (e || "").match(P) || [""]).length; while (l--) d = g = (s = be.exec(e[l]) || [])[1], h = (s[2] || "").split(".").sort(), d && (f = S.event.special[d] || {}, d = (i ? f.delegateType : f.bindType) || d, f = S.event.special[d] || {}, c = S.extend({ type: d, origType: g, data: r, handler: n, guid: n.guid, selector: i, needsContext: i && S.expr.match.needsContext.test(i), namespace: h.join(".") }, o), (p = u[d]) || ((p = u[d] = []).delegateCount = 0, f.setup && !1 !== f.setup.call(t, r, h, a) || t.addEventListener && t.addEventListener(d, a)), f.add && (f.add.call(t, c), c.handler.guid || (c.handler.guid = n.guid)), i ? p.splice(p.delegateCount++, 0, c) : p.push(c), S.event.global[d] = !0) } }, + remove: function(e, t, n, r, i) { + var o, a, s, u, l, c, f, p, d, h, g, v = Y.hasData(e) && Y.get(e); + if (v && (u = v.events)) { + l = (t = (t || "").match(P) || [""]).length; + while (l--) + if (d = g = (s = be.exec(t[l]) || [])[1], h = (s[2] || "").split(".").sort(), d) { + f = S.event.special[d] || {}, p = u[d = (r ? f.delegateType : f.bindType) || d] || [], s = s[2] && new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"), a = o = p.length; + while (o--) c = p[o], !i && g !== c.origType || n && n.guid !== c.guid || s && !s.test(c.namespace) || r && r !== c.selector && ("**" !== r || !c.selector) || (p.splice(o, 1), c.selector && p.delegateCount--, f.remove && f.remove.call(e, c)); + a && !p.length && (f.teardown && !1 !== f.teardown.call(e, h, v.handle) || S.removeEvent(e, d, v.handle), delete u[d]) + } else + for (d in u) S.event.remove(e, d + t[l], n, r, !0); + S.isEmptyObject(u) && Y.remove(e, "handle events") + } + }, + dispatch: function(e) { + var t, n, r, i, o, a, s = new Array(arguments.length), + u = S.event.fix(e), + l = (Y.get(this, "events") || Object.create(null))[u.type] || [], + c = S.event.special[u.type] || {}; + for (s[0] = u, t = 1; t < arguments.length; t++) s[t] = arguments[t]; + if (u.delegateTarget = this, !c.preDispatch || !1 !== c.preDispatch.call(this, u)) { a = S.event.handlers.call(this, u, l), t = 0; while ((i = a[t++]) && !u.isPropagationStopped()) { u.currentTarget = i.elem, n = 0; while ((o = i.handlers[n++]) && !u.isImmediatePropagationStopped()) u.rnamespace && !1 !== o.namespace && !u.rnamespace.test(o.namespace) || (u.handleObj = o, u.data = o.data, void 0 !== (r = ((S.event.special[o.origType] || {}).handle || o.handler).apply(i.elem, s)) && !1 === (u.result = r) && (u.preventDefault(), u.stopPropagation())) } return c.postDispatch && c.postDispatch.call(this, u), u.result } + }, + handlers: function(e, t) { + var n, r, i, o, a, s = [], + u = t.delegateCount, + l = e.target; + if (u && l.nodeType && !("click" === e.type && 1 <= e.button)) + for (; l !== this; l = l.parentNode || this) + if (1 === l.nodeType && ("click" !== e.type || !0 !== l.disabled)) { + for (o = [], a = {}, n = 0; n < u; n++) void 0 === a[i = (r = t[n]).selector + " "] && (a[i] = r.needsContext ? -1 < S(i, this).index(l) : S.find(i, this, null, [l]).length), a[i] && o.push(r); + o.length && s.push({ elem: l, handlers: o }) + } + return l = this, u < t.length && s.push({ elem: l, handlers: t.slice(u) }), s + }, + addProp: function(t, e) { Object.defineProperty(S.Event.prototype, t, { enumerable: !0, configurable: !0, get: m(e) ? function() { if (this.originalEvent) return e(this.originalEvent) } : function() { if (this.originalEvent) return this.originalEvent[t] }, set: function(e) { Object.defineProperty(this, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) } }) }, + fix: function(e) { return e[S.expando] ? e : new S.Event(e) }, + special: { load: { noBubble: !0 }, click: { setup: function(e) { var t = this || e; return pe.test(t.type) && t.click && A(t, "input") && Se(t, "click", we), !1 }, trigger: function(e) { var t = this || e; return pe.test(t.type) && t.click && A(t, "input") && Se(t, "click"), !0 }, _default: function(e) { var t = e.target; return pe.test(t.type) && t.click && A(t, "input") && Y.get(t, "click") || A(t, "a") } }, beforeunload: { postDispatch: function(e) { void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result) } } } + }, S.removeEvent = function(e, t, n) { e.removeEventListener && e.removeEventListener(t, n) }, S.Event = function(e, t) { + if (!(this instanceof S.Event)) return new S.Event(e, t); + e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || void 0 === e.defaultPrevented && !1 === e.returnValue ? we : Te, this.target = e.target && 3 === e.target.nodeType ? e.target.parentNode : e.target, this.currentTarget = e.currentTarget, this.relatedTarget = e.relatedTarget) : this.type = e, t && S.extend(this, t), this.timeStamp = e && e.timeStamp || Date.now(), this[S.expando] = !0 + }, S.Event.prototype = { + constructor: S.Event, + isDefaultPrevented: Te, + isPropagationStopped: Te, + isImmediatePropagationStopped: Te, + isSimulated: !1, + preventDefault: function() { + var e = this.originalEvent; + this.isDefaultPrevented = we, e && !this.isSimulated && e.preventDefault() + }, + stopPropagation: function() { + var e = this.originalEvent; + this.isPropagationStopped = we, e && !this.isSimulated && e.stopPropagation() + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + this.isImmediatePropagationStopped = we, e && !this.isSimulated && e.stopImmediatePropagation(), this.stopPropagation() + } + }, S.each({ altKey: !0, bubbles: !0, cancelable: !0, changedTouches: !0, ctrlKey: !0, detail: !0, eventPhase: !0, metaKey: !0, pageX: !0, pageY: !0, shiftKey: !0, view: !0, "char": !0, code: !0, charCode: !0, key: !0, keyCode: !0, button: !0, buttons: !0, clientX: !0, clientY: !0, offsetX: !0, offsetY: !0, pointerId: !0, pointerType: !0, screenX: !0, screenY: !0, targetTouches: !0, toElement: !0, touches: !0, which: !0 }, S.event.addProp), S.each({ focus: "focusin", blur: "focusout" }, function(e, t) { S.event.special[e] = { setup: function() { return Se(this, e, Ce), !1 }, trigger: function() { return Se(this, e), !0 }, _default: function() { return !0 }, delegateType: t } }), S.each({ mouseenter: "mouseover", mouseleave: "mouseout", pointerenter: "pointerover", pointerleave: "pointerout" }, function(e, i) { + S.event.special[e] = { + delegateType: i, + bindType: i, + handle: function(e) { + var t, n = e.relatedTarget, + r = e.handleObj; + return n && (n === this || S.contains(this, n)) || (e.type = r.origType, t = r.handler.apply(this, arguments), e.type = i), t + } + } + }), S.fn.extend({ on: function(e, t, n, r) { return Ee(this, e, t, n, r) }, one: function(e, t, n, r) { return Ee(this, e, t, n, r, 1) }, off: function(e, t, n) { var r, i; if (e && e.preventDefault && e.handleObj) return r = e.handleObj, S(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler), this; if ("object" == typeof e) { for (i in e) this.off(i, t, e[i]); return this } return !1 !== t && "function" != typeof t || (n = t, t = void 0), !1 === n && (n = Te), this.each(function() { S.event.remove(this, e, n, t) }) } }); + var ke = /\s*$/g; + + function je(e, t) { return A(e, "table") && A(11 !== t.nodeType ? t : t.firstChild, "tr") && S(e).children("tbody")[0] || e } + + function De(e) { return e.type = (null !== e.getAttribute("type")) + "/" + e.type, e } + + function qe(e) { return "true/" === (e.type || "").slice(0, 5) ? e.type = e.type.slice(5) : e.removeAttribute("type"), e } + + function Le(e, t) { + var n, r, i, o, a, s; + if (1 === t.nodeType) { + if (Y.hasData(e) && (s = Y.get(e).events)) + for (i in Y.remove(t, "handle events"), s) + for (n = 0, r = s[i].length; n < r; n++) S.event.add(t, i, s[i][n]); + Q.hasData(e) && (o = Q.access(e), a = S.extend({}, o), Q.set(t, a)) + } + } + + function He(n, r, i, o) { + r = g(r); + var e, t, a, s, u, l, c = 0, + f = n.length, + p = f - 1, + d = r[0], + h = m(d); + if (h || 1 < f && "string" == typeof d && !y.checkClone && Ae.test(d)) return n.each(function(e) { + var t = n.eq(e); + h && (r[0] = d.call(this, e, t.html())), He(t, r, i, o) + }); + if (f && (t = (e = xe(r, n[0].ownerDocument, !1, n, o)).firstChild, 1 === e.childNodes.length && (e = t), t || o)) { + for (s = (a = S.map(ve(e, "script"), De)).length; c < f; c++) u = e, c !== p && (u = S.clone(u, !0, !0), s && S.merge(a, ve(u, "script"))), i.call(n[c], u, c); + if (s) + for (l = a[a.length - 1].ownerDocument, S.map(a, qe), c = 0; c < s; c++) u = a[c], he.test(u.type || "") && !Y.access(u, "globalEval") && S.contains(l, u) && (u.src && "module" !== (u.type || "").toLowerCase() ? S._evalUrl && !u.noModule && S._evalUrl(u.src, { nonce: u.nonce || u.getAttribute("nonce") }, l) : b(u.textContent.replace(Ne, ""), u, l)) + } + return n + } + + function Oe(e, t, n) { for (var r, i = t ? S.filter(t, e) : e, o = 0; null != (r = i[o]); o++) n || 1 !== r.nodeType || S.cleanData(ve(r)), r.parentNode && (n && ie(r) && ye(ve(r, "script")), r.parentNode.removeChild(r)); return e } + S.extend({ + htmlPrefilter: function(e) { return e }, + clone: function(e, t, n) { + var r, i, o, a, s, u, l, c = e.cloneNode(!0), + f = ie(e); + if (!(y.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || S.isXMLDoc(e))) + for (a = ve(c), r = 0, i = (o = ve(e)).length; r < i; r++) s = o[r], u = a[r], void 0, "input" === (l = u.nodeName.toLowerCase()) && pe.test(s.type) ? u.checked = s.checked : "input" !== l && "textarea" !== l || (u.defaultValue = s.defaultValue); + if (t) + if (n) + for (o = o || ve(e), a = a || ve(c), r = 0, i = o.length; r < i; r++) Le(o[r], a[r]); + else Le(e, c); + return 0 < (a = ve(c, "script")).length && ye(a, !f && ve(e, "script")), c + }, + cleanData: function(e) { + for (var t, n, r, i = S.event.special, o = 0; void 0 !== (n = e[o]); o++) + if (V(n)) { + if (t = n[Y.expando]) { + if (t.events) + for (r in t.events) i[r] ? S.event.remove(n, r) : S.removeEvent(n, r, t.handle); + n[Y.expando] = void 0 + } + n[Q.expando] && (n[Q.expando] = void 0) + } + } + }), S.fn.extend({ + detach: function(e) { return Oe(this, e, !0) }, + remove: function(e) { return Oe(this, e) }, + text: function(e) { return $(this, function(e) { return void 0 === e ? S.text(this) : this.empty().each(function() { 1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = e) }) }, null, e, arguments.length) }, + append: function() { return He(this, arguments, function(e) { 1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || je(this, e).appendChild(e) }) }, + prepend: function() { + return He(this, arguments, function(e) { + if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { + var t = je(this, e); + t.insertBefore(e, t.firstChild) + } + }) + }, + before: function() { return He(this, arguments, function(e) { this.parentNode && this.parentNode.insertBefore(e, this) }) }, + after: function() { return He(this, arguments, function(e) { this.parentNode && this.parentNode.insertBefore(e, this.nextSibling) }) }, + empty: function() { for (var e, t = 0; null != (e = this[t]); t++) 1 === e.nodeType && (S.cleanData(ve(e, !1)), e.textContent = ""); return this }, + clone: function(e, t) { return e = null != e && e, t = null == t ? e : t, this.map(function() { return S.clone(this, e, t) }) }, + html: function(e) { + return $(this, function(e) { + var t = this[0] || {}, + n = 0, + r = this.length; + if (void 0 === e && 1 === t.nodeType) return t.innerHTML; + if ("string" == typeof e && !ke.test(e) && !ge[(de.exec(e) || ["", ""])[1].toLowerCase()]) { + e = S.htmlPrefilter(e); + try { + for (; n < r; n++) 1 === (t = this[n] || {}).nodeType && (S.cleanData(ve(t, !1)), t.innerHTML = e); + t = 0 + } catch (e) {} + } + t && this.empty().append(e) + }, null, e, arguments.length) + }, + replaceWith: function() { + var n = []; + return He(this, arguments, function(e) { + var t = this.parentNode; + S.inArray(this, n) < 0 && (S.cleanData(ve(this)), t && t.replaceChild(e, this)) + }, n) + } + }), S.each({ appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function(e, a) { S.fn[e] = function(e) { for (var t, n = [], r = S(e), i = r.length - 1, o = 0; o <= i; o++) t = o === i ? this : this.clone(!0), S(r[o])[a](t), u.apply(n, t.get()); return this.pushStack(n) } }); + var Pe = new RegExp("^(" + ee + ")(?!px)[a-z%]+$", "i"), + Re = function(e) { var t = e.ownerDocument.defaultView; return t && t.opener || (t = C), t.getComputedStyle(e) }, + Me = function(e, t, n) { var r, i, o = {}; for (i in t) o[i] = e.style[i], e.style[i] = t[i]; for (i in r = n.call(e), t) e.style[i] = o[i]; return r }, + Ie = new RegExp(ne.join("|"), "i"); + + function We(e, t, n) { var r, i, o, a, s = e.style; return (n = n || Re(e)) && ("" !== (a = n.getPropertyValue(t) || n[t]) || ie(e) || (a = S.style(e, t)), !y.pixelBoxStyles() && Pe.test(a) && Ie.test(t) && (r = s.width, i = s.minWidth, o = s.maxWidth, s.minWidth = s.maxWidth = s.width = a, a = n.width, s.width = r, s.minWidth = i, s.maxWidth = o)), void 0 !== a ? a + "" : a } + + function Fe(e, t) { + return { + get: function() { + if (!e()) return (this.get = t).apply(this, arguments); + delete this.get + } + } + }! function() { + function e() { + if (l) { + u.style.cssText = "position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0", l.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%", re.appendChild(u).appendChild(l); + var e = C.getComputedStyle(l); + n = "1%" !== e.top, s = 12 === t(e.marginLeft), l.style.right = "60%", o = 36 === t(e.right), r = 36 === t(e.width), l.style.position = "absolute", i = 12 === t(l.offsetWidth / 3), re.removeChild(u), l = null + } + } + + function t(e) { return Math.round(parseFloat(e)) } + var n, r, i, o, a, s, u = E.createElement("div"), + l = E.createElement("div"); + l.style && (l.style.backgroundClip = "content-box", l.cloneNode(!0).style.backgroundClip = "", y.clearCloneStyle = "content-box" === l.style.backgroundClip, S.extend(y, { boxSizingReliable: function() { return e(), r }, pixelBoxStyles: function() { return e(), o }, pixelPosition: function() { return e(), n }, reliableMarginLeft: function() { return e(), s }, scrollboxSize: function() { return e(), i }, reliableTrDimensions: function() { var e, t, n, r; return null == a && (e = E.createElement("table"), t = E.createElement("tr"), n = E.createElement("div"), e.style.cssText = "position:absolute;left:-11111px;border-collapse:separate", t.style.cssText = "border:1px solid", t.style.height = "1px", n.style.height = "9px", n.style.display = "block", re.appendChild(e).appendChild(t).appendChild(n), r = C.getComputedStyle(t), a = parseInt(r.height, 10) + parseInt(r.borderTopWidth, 10) + parseInt(r.borderBottomWidth, 10) === t.offsetHeight, re.removeChild(e)), a } })) + }(); + var Be = ["Webkit", "Moz", "ms"], + $e = E.createElement("div").style, + _e = {}; + + function ze(e) { + var t = S.cssProps[e] || _e[e]; + return t || (e in $e ? e : _e[e] = function(e) { + var t = e[0].toUpperCase() + e.slice(1), + n = Be.length; + while (n--) + if ((e = Be[n] + t) in $e) return e + }(e) || e) + } + var Ue = /^(none|table(?!-c[ea]).+)/, + Xe = /^--/, + Ve = { position: "absolute", visibility: "hidden", display: "block" }, + Ge = { letterSpacing: "0", fontWeight: "400" }; + + function Ye(e, t, n) { var r = te.exec(t); return r ? Math.max(0, r[2] - (n || 0)) + (r[3] || "px") : t } + + function Qe(e, t, n, r, i, o) { + var a = "width" === t ? 1 : 0, + s = 0, + u = 0; + if (n === (r ? "border" : "content")) return 0; + for (; a < 4; a += 2) "margin" === n && (u += S.css(e, n + ne[a], !0, i)), r ? ("content" === n && (u -= S.css(e, "padding" + ne[a], !0, i)), "margin" !== n && (u -= S.css(e, "border" + ne[a] + "Width", !0, i))) : (u += S.css(e, "padding" + ne[a], !0, i), "padding" !== n ? u += S.css(e, "border" + ne[a] + "Width", !0, i) : s += S.css(e, "border" + ne[a] + "Width", !0, i)); + return !r && 0 <= o && (u += Math.max(0, Math.ceil(e["offset" + t[0].toUpperCase() + t.slice(1)] - o - u - s - .5)) || 0), u + } + + function Je(e, t, n) { + var r = Re(e), + i = (!y.boxSizingReliable() || n) && "border-box" === S.css(e, "boxSizing", !1, r), + o = i, + a = We(e, t, r), + s = "offset" + t[0].toUpperCase() + t.slice(1); + if (Pe.test(a)) { + if (!n) return a; + a = "auto" + } + return (!y.boxSizingReliable() && i || !y.reliableTrDimensions() && A(e, "tr") || "auto" === a || !parseFloat(a) && "inline" === S.css(e, "display", !1, r)) && e.getClientRects().length && (i = "border-box" === S.css(e, "boxSizing", !1, r), (o = s in e) && (a = e[s])), (a = parseFloat(a) || 0) + Qe(e, t, n || (i ? "border" : "content"), o, r, a) + "px" + } + + function Ke(e, t, n, r, i) { return new Ke.prototype.init(e, t, n, r, i) } + S.extend({ + cssHooks: { opacity: { get: function(e, t) { if (t) { var n = We(e, "opacity"); return "" === n ? "1" : n } } } }, + cssNumber: { animationIterationCount: !0, columnCount: !0, fillOpacity: !0, flexGrow: !0, flexShrink: !0, fontWeight: !0, gridArea: !0, gridColumn: !0, gridColumnEnd: !0, gridColumnStart: !0, gridRow: !0, gridRowEnd: !0, gridRowStart: !0, lineHeight: !0, opacity: !0, order: !0, orphans: !0, widows: !0, zIndex: !0, zoom: !0 }, + cssProps: {}, + style: function(e, t, n, r) { + if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) { + var i, o, a, s = X(t), + u = Xe.test(t), + l = e.style; + if (u || (t = ze(s)), a = S.cssHooks[t] || S.cssHooks[s], void 0 === n) return a && "get" in a && void 0 !== (i = a.get(e, !1, r)) ? i : l[t]; + "string" === (o = typeof n) && (i = te.exec(n)) && i[1] && (n = se(e, t, i), o = "number"), null != n && n == n && ("number" !== o || u || (n += i && i[3] || (S.cssNumber[s] ? "" : "px")), y.clearCloneStyle || "" !== n || 0 !== t.indexOf("background") || (l[t] = "inherit"), a && "set" in a && void 0 === (n = a.set(e, n, r)) || (u ? l.setProperty(t, n) : l[t] = n)) + } + }, + css: function(e, t, n, r) { var i, o, a, s = X(t); return Xe.test(t) || (t = ze(s)), (a = S.cssHooks[t] || S.cssHooks[s]) && "get" in a && (i = a.get(e, !0, n)), void 0 === i && (i = We(e, t, r)), "normal" === i && t in Ge && (i = Ge[t]), "" === n || n ? (o = parseFloat(i), !0 === n || isFinite(o) ? o || 0 : i) : i } + }), S.each(["height", "width"], function(e, u) { + S.cssHooks[u] = { + get: function(e, t, n) { if (t) return !Ue.test(S.css(e, "display")) || e.getClientRects().length && e.getBoundingClientRect().width ? Je(e, u, n) : Me(e, Ve, function() { return Je(e, u, n) }) }, + set: function(e, t, n) { + var r, i = Re(e), + o = !y.scrollboxSize() && "absolute" === i.position, + a = (o || n) && "border-box" === S.css(e, "boxSizing", !1, i), + s = n ? Qe(e, u, n, a, i) : 0; + return a && o && (s -= Math.ceil(e["offset" + u[0].toUpperCase() + u.slice(1)] - parseFloat(i[u]) - Qe(e, u, "border", !1, i) - .5)), s && (r = te.exec(t)) && "px" !== (r[3] || "px") && (e.style[u] = t, t = S.css(e, u)), Ye(0, t, s) + } + } + }), S.cssHooks.marginLeft = Fe(y.reliableMarginLeft, function(e, t) { if (t) return (parseFloat(We(e, "marginLeft")) || e.getBoundingClientRect().left - Me(e, { marginLeft: 0 }, function() { return e.getBoundingClientRect().left })) + "px" }), S.each({ margin: "", padding: "", border: "Width" }, function(i, o) { S.cssHooks[i + o] = { expand: function(e) { for (var t = 0, n = {}, r = "string" == typeof e ? e.split(" ") : [e]; t < 4; t++) n[i + ne[t] + o] = r[t] || r[t - 2] || r[0]; return n } }, "margin" !== i && (S.cssHooks[i + o].set = Ye) }), S.fn.extend({ + css: function(e, t) { + return $(this, function(e, t, n) { + var r, i, o = {}, + a = 0; + if (Array.isArray(t)) { for (r = Re(e), i = t.length; a < i; a++) o[t[a]] = S.css(e, t[a], !1, r); return o } + return void 0 !== n ? S.style(e, t, n) : S.css(e, t) + }, e, t, 1 < arguments.length) + } + }), ((S.Tween = Ke).prototype = { constructor: Ke, init: function(e, t, n, r, i, o) { this.elem = e, this.prop = n, this.easing = i || S.easing._default, this.options = t, this.start = this.now = this.cur(), this.end = r, this.unit = o || (S.cssNumber[n] ? "" : "px") }, cur: function() { var e = Ke.propHooks[this.prop]; return e && e.get ? e.get(this) : Ke.propHooks._default.get(this) }, run: function(e) { var t, n = Ke.propHooks[this.prop]; return this.options.duration ? this.pos = t = S.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e, this.now = (this.end - this.start) * t + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), n && n.set ? n.set(this) : Ke.propHooks._default.set(this), this } }).init.prototype = Ke.prototype, (Ke.propHooks = { _default: { get: function(e) { var t; return 1 !== e.elem.nodeType || null != e.elem[e.prop] && null == e.elem.style[e.prop] ? e.elem[e.prop] : (t = S.css(e.elem, e.prop, "")) && "auto" !== t ? t : 0 }, set: function(e) { S.fx.step[e.prop] ? S.fx.step[e.prop](e) : 1 !== e.elem.nodeType || !S.cssHooks[e.prop] && null == e.elem.style[ze(e.prop)] ? e.elem[e.prop] = e.now : S.style(e.elem, e.prop, e.now + e.unit) } } }).scrollTop = Ke.propHooks.scrollLeft = { set: function(e) { e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now) } }, S.easing = { linear: function(e) { return e }, swing: function(e) { return .5 - Math.cos(e * Math.PI) / 2 }, _default: "swing" }, S.fx = Ke.prototype.init, S.fx.step = {}; + var Ze, et, tt, nt, rt = /^(?:toggle|show|hide)$/, + it = /queueHooks$/; + + function ot() { et && (!1 === E.hidden && C.requestAnimationFrame ? C.requestAnimationFrame(ot) : C.setTimeout(ot, S.fx.interval), S.fx.tick()) } + + function at() { return C.setTimeout(function() { Ze = void 0 }), Ze = Date.now() } + + function st(e, t) { + var n, r = 0, + i = { height: e }; + for (t = t ? 1 : 0; r < 4; r += 2 - t) i["margin" + (n = ne[r])] = i["padding" + n] = e; + return t && (i.opacity = i.width = e), i + } + + function ut(e, t, n) { + for (var r, i = (lt.tweeners[t] || []).concat(lt.tweeners["*"]), o = 0, a = i.length; o < a; o++) + if (r = i[o].call(n, t, e)) return r + } + + function lt(o, e, t) { + var n, a, r = 0, + i = lt.prefilters.length, + s = S.Deferred().always(function() { delete u.elem }), + u = function() { if (a) return !1; for (var e = Ze || at(), t = Math.max(0, l.startTime + l.duration - e), n = 1 - (t / l.duration || 0), r = 0, i = l.tweens.length; r < i; r++) l.tweens[r].run(n); return s.notifyWith(o, [l, n, t]), n < 1 && i ? t : (i || s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l]), !1) }, + l = s.promise({ + elem: o, + props: S.extend({}, e), + opts: S.extend(!0, { specialEasing: {}, easing: S.easing._default }, t), + originalProperties: e, + originalOptions: t, + startTime: Ze || at(), + duration: t.duration, + tweens: [], + createTween: function(e, t) { var n = S.Tween(o, l.opts, e, t, l.opts.specialEasing[e] || l.opts.easing); return l.tweens.push(n), n }, + stop: function(e) { + var t = 0, + n = e ? l.tweens.length : 0; + if (a) return this; + for (a = !0; t < n; t++) l.tweens[t].run(1); + return e ? (s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l, e])) : s.rejectWith(o, [l, e]), this + } + }), + c = l.props; + for (! function(e, t) { + var n, r, i, o, a; + for (n in e) + if (i = t[r = X(n)], o = e[n], Array.isArray(o) && (i = o[1], o = e[n] = o[0]), n !== r && (e[r] = o, delete e[n]), (a = S.cssHooks[r]) && "expand" in a) + for (n in o = a.expand(o), delete e[r], o) n in e || (e[n] = o[n], t[n] = i); + else t[r] = i + }(c, l.opts.specialEasing); r < i; r++) + if (n = lt.prefilters[r].call(l, o, c, l.opts)) return m(n.stop) && (S._queueHooks(l.elem, l.opts.queue).stop = n.stop.bind(n)), n; + return S.map(c, ut, l), m(l.opts.start) && l.opts.start.call(o, l), l.progress(l.opts.progress).done(l.opts.done, l.opts.complete).fail(l.opts.fail).always(l.opts.always), S.fx.timer(S.extend(u, { elem: o, anim: l, queue: l.opts.queue })), l + } + S.Animation = S.extend(lt, { + tweeners: { "*": [function(e, t) { var n = this.createTween(e, t); return se(n.elem, e, te.exec(t), n), n }] }, + tweener: function(e, t) { m(e) ? (t = e, e = ["*"]) : e = e.match(P); for (var n, r = 0, i = e.length; r < i; r++) n = e[r], lt.tweeners[n] = lt.tweeners[n] || [], lt.tweeners[n].unshift(t) }, + prefilters: [function(e, t, n) { + var r, i, o, a, s, u, l, c, f = "width" in t || "height" in t, + p = this, + d = {}, + h = e.style, + g = e.nodeType && ae(e), + v = Y.get(e, "fxshow"); + for (r in n.queue || (null == (a = S._queueHooks(e, "fx")).unqueued && (a.unqueued = 0, s = a.empty.fire, a.empty.fire = function() { a.unqueued || s() }), a.unqueued++, p.always(function() { p.always(function() { a.unqueued--, S.queue(e, "fx").length || a.empty.fire() }) })), t) + if (i = t[r], rt.test(i)) { + if (delete t[r], o = o || "toggle" === i, i === (g ? "hide" : "show")) { + if ("show" !== i || !v || void 0 === v[r]) continue; + g = !0 + } + d[r] = v && v[r] || S.style(e, r) + } + if ((u = !S.isEmptyObject(t)) || !S.isEmptyObject(d)) + for (r in f && 1 === e.nodeType && (n.overflow = [h.overflow, h.overflowX, h.overflowY], null == (l = v && v.display) && (l = Y.get(e, "display")), "none" === (c = S.css(e, "display")) && (l ? c = l : (le([e], !0), l = e.style.display || l, c = S.css(e, "display"), le([e]))), ("inline" === c || "inline-block" === c && null != l) && "none" === S.css(e, "float") && (u || (p.done(function() { h.display = l }), null == l && (c = h.display, l = "none" === c ? "" : c)), h.display = "inline-block")), n.overflow && (h.overflow = "hidden", p.always(function() { h.overflow = n.overflow[0], h.overflowX = n.overflow[1], h.overflowY = n.overflow[2] })), u = !1, d) u || (v ? "hidden" in v && (g = v.hidden) : v = Y.access(e, "fxshow", { display: l }), o && (v.hidden = !g), g && le([e], !0), p.done(function() { for (r in g || le([e]), Y.remove(e, "fxshow"), d) S.style(e, r, d[r]) })), u = ut(g ? v[r] : 0, r, p), r in v || (v[r] = u.start, g && (u.end = u.start, u.start = 0)) + }], + prefilter: function(e, t) { t ? lt.prefilters.unshift(e) : lt.prefilters.push(e) } + }), S.speed = function(e, t, n) { var r = e && "object" == typeof e ? S.extend({}, e) : { complete: n || !n && t || m(e) && e, duration: e, easing: n && t || t && !m(t) && t }; return S.fx.off ? r.duration = 0 : "number" != typeof r.duration && (r.duration in S.fx.speeds ? r.duration = S.fx.speeds[r.duration] : r.duration = S.fx.speeds._default), null != r.queue && !0 !== r.queue || (r.queue = "fx"), r.old = r.complete, r.complete = function() { m(r.old) && r.old.call(this), r.queue && S.dequeue(this, r.queue) }, r }, S.fn.extend({ + fadeTo: function(e, t, n, r) { return this.filter(ae).css("opacity", 0).show().end().animate({ opacity: t }, e, n, r) }, + animate: function(t, e, n, r) { + var i = S.isEmptyObject(t), + o = S.speed(e, n, r), + a = function() { + var e = lt(this, S.extend({}, t), o); + (i || Y.get(this, "finish")) && e.stop(!0) + }; + return a.finish = a, i || !1 === o.queue ? this.each(a) : this.queue(o.queue, a) + }, + stop: function(i, e, o) { + var a = function(e) { + var t = e.stop; + delete e.stop, t(o) + }; + return "string" != typeof i && (o = e, e = i, i = void 0), e && this.queue(i || "fx", []), this.each(function() { + var e = !0, + t = null != i && i + "queueHooks", + n = S.timers, + r = Y.get(this); + if (t) r[t] && r[t].stop && a(r[t]); + else + for (t in r) r[t] && r[t].stop && it.test(t) && a(r[t]); + for (t = n.length; t--;) n[t].elem !== this || null != i && n[t].queue !== i || (n[t].anim.stop(o), e = !1, n.splice(t, 1)); + !e && o || S.dequeue(this, i) + }) + }, + finish: function(a) { + return !1 !== a && (a = a || "fx"), this.each(function() { + var e, t = Y.get(this), + n = t[a + "queue"], + r = t[a + "queueHooks"], + i = S.timers, + o = n ? n.length : 0; + for (t.finish = !0, S.queue(this, a, []), r && r.stop && r.stop.call(this, !0), e = i.length; e--;) i[e].elem === this && i[e].queue === a && (i[e].anim.stop(!0), i.splice(e, 1)); + for (e = 0; e < o; e++) n[e] && n[e].finish && n[e].finish.call(this); + delete t.finish + }) + } + }), S.each(["toggle", "show", "hide"], function(e, r) { + var i = S.fn[r]; + S.fn[r] = function(e, t, n) { return null == e || "boolean" == typeof e ? i.apply(this, arguments) : this.animate(st(r, !0), e, t, n) } + }), S.each({ slideDown: st("show"), slideUp: st("hide"), slideToggle: st("toggle"), fadeIn: { opacity: "show" }, fadeOut: { opacity: "hide" }, fadeToggle: { opacity: "toggle" } }, function(e, r) { S.fn[e] = function(e, t, n) { return this.animate(r, e, t, n) } }), S.timers = [], S.fx.tick = function() { + var e, t = 0, + n = S.timers; + for (Ze = Date.now(); t < n.length; t++)(e = n[t])() || n[t] !== e || n.splice(t--, 1); + n.length || S.fx.stop(), Ze = void 0 + }, S.fx.timer = function(e) { S.timers.push(e), S.fx.start() }, S.fx.interval = 13, S.fx.start = function() { et || (et = !0, ot()) }, S.fx.stop = function() { et = null }, S.fx.speeds = { slow: 600, fast: 200, _default: 400 }, S.fn.delay = function(r, e) { + return r = S.fx && S.fx.speeds[r] || r, e = e || "fx", this.queue(e, function(e, t) { + var n = C.setTimeout(e, r); + t.stop = function() { C.clearTimeout(n) } + }) + }, tt = E.createElement("input"), nt = E.createElement("select").appendChild(E.createElement("option")), tt.type = "checkbox", y.checkOn = "" !== tt.value, y.optSelected = nt.selected, (tt = E.createElement("input")).value = "t", tt.type = "radio", y.radioValue = "t" === tt.value; + var ct, ft = S.expr.attrHandle; + S.fn.extend({ attr: function(e, t) { return $(this, S.attr, e, t, 1 < arguments.length) }, removeAttr: function(e) { return this.each(function() { S.removeAttr(this, e) }) } }), S.extend({ + attr: function(e, t, n) { var r, i, o = e.nodeType; if (3 !== o && 8 !== o && 2 !== o) return "undefined" == typeof e.getAttribute ? S.prop(e, t, n) : (1 === o && S.isXMLDoc(e) || (i = S.attrHooks[t.toLowerCase()] || (S.expr.match.bool.test(t) ? ct : void 0)), void 0 !== n ? null === n ? void S.removeAttr(e, t) : i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : (e.setAttribute(t, n + ""), n) : i && "get" in i && null !== (r = i.get(e, t)) ? r : null == (r = S.find.attr(e, t)) ? void 0 : r) }, + attrHooks: { type: { set: function(e, t) { if (!y.radioValue && "radio" === t && A(e, "input")) { var n = e.value; return e.setAttribute("type", t), n && (e.value = n), t } } } }, + removeAttr: function(e, t) { + var n, r = 0, + i = t && t.match(P); + if (i && 1 === e.nodeType) + while (n = i[r++]) e.removeAttribute(n) + } + }), ct = { set: function(e, t, n) { return !1 === t ? S.removeAttr(e, n) : e.setAttribute(n, n), n } }, S.each(S.expr.match.bool.source.match(/\w+/g), function(e, t) { + var a = ft[t] || S.find.attr; + ft[t] = function(e, t, n) { var r, i, o = t.toLowerCase(); return n || (i = ft[o], ft[o] = r, r = null != a(e, t, n) ? o : null, ft[o] = i), r } + }); + var pt = /^(?:input|select|textarea|button)$/i, + dt = /^(?:a|area)$/i; + + function ht(e) { return (e.match(P) || []).join(" ") } + + function gt(e) { return e.getAttribute && e.getAttribute("class") || "" } + + function vt(e) { return Array.isArray(e) ? e : "string" == typeof e && e.match(P) || [] } + S.fn.extend({ prop: function(e, t) { return $(this, S.prop, e, t, 1 < arguments.length) }, removeProp: function(e) { return this.each(function() { delete this[S.propFix[e] || e] }) } }), S.extend({ prop: function(e, t, n) { var r, i, o = e.nodeType; if (3 !== o && 8 !== o && 2 !== o) return 1 === o && S.isXMLDoc(e) || (t = S.propFix[t] || t, i = S.propHooks[t]), void 0 !== n ? i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : e[t] = n : i && "get" in i && null !== (r = i.get(e, t)) ? r : e[t] }, propHooks: { tabIndex: { get: function(e) { var t = S.find.attr(e, "tabindex"); return t ? parseInt(t, 10) : pt.test(e.nodeName) || dt.test(e.nodeName) && e.href ? 0 : -1 } } }, propFix: { "for": "htmlFor", "class": "className" } }), y.optSelected || (S.propHooks.selected = { + get: function(e) { var t = e.parentNode; return t && t.parentNode && t.parentNode.selectedIndex, null }, + set: function(e) { + var t = e.parentNode; + t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex) + } + }), S.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function() { S.propFix[this.toLowerCase()] = this }), S.fn.extend({ + addClass: function(t) { + var e, n, r, i, o, a, s, u = 0; + if (m(t)) return this.each(function(e) { S(this).addClass(t.call(this, e, gt(this))) }); + if ((e = vt(t)).length) + while (n = this[u++]) + if (i = gt(n), r = 1 === n.nodeType && " " + ht(i) + " ") { + a = 0; + while (o = e[a++]) r.indexOf(" " + o + " ") < 0 && (r += o + " "); + i !== (s = ht(r)) && n.setAttribute("class", s) + } + return this + }, + removeClass: function(t) { + var e, n, r, i, o, a, s, u = 0; + if (m(t)) return this.each(function(e) { S(this).removeClass(t.call(this, e, gt(this))) }); + if (!arguments.length) return this.attr("class", ""); + if ((e = vt(t)).length) + while (n = this[u++]) + if (i = gt(n), r = 1 === n.nodeType && " " + ht(i) + " ") { + a = 0; + while (o = e[a++]) + while (-1 < r.indexOf(" " + o + " ")) r = r.replace(" " + o + " ", " "); + i !== (s = ht(r)) && n.setAttribute("class", s) + } + return this + }, + toggleClass: function(i, t) { + var o = typeof i, + a = "string" === o || Array.isArray(i); + return "boolean" == typeof t && a ? t ? this.addClass(i) : this.removeClass(i) : m(i) ? this.each(function(e) { S(this).toggleClass(i.call(this, e, gt(this), t), t) }) : this.each(function() { var e, t, n, r; if (a) { t = 0, n = S(this), r = vt(i); while (e = r[t++]) n.hasClass(e) ? n.removeClass(e) : n.addClass(e) } else void 0 !== i && "boolean" !== o || ((e = gt(this)) && Y.set(this, "__className__", e), this.setAttribute && this.setAttribute("class", e || !1 === i ? "" : Y.get(this, "__className__") || "")) }) + }, + hasClass: function(e) { + var t, n, r = 0; + t = " " + e + " "; + while (n = this[r++]) + if (1 === n.nodeType && -1 < (" " + ht(gt(n)) + " ").indexOf(t)) return !0; + return !1 + } + }); + var yt = /\r/g; + S.fn.extend({ + val: function(n) { + var r, e, i, t = this[0]; + return arguments.length ? (i = m(n), this.each(function(e) { + var t; + 1 === this.nodeType && (null == (t = i ? n.call(this, e, S(this).val()) : n) ? t = "" : "number" == typeof t ? t += "" : Array.isArray(t) && (t = S.map(t, function(e) { return null == e ? "" : e + "" })), (r = S.valHooks[this.type] || S.valHooks[this.nodeName.toLowerCase()]) && "set" in r && void 0 !== r.set(this, t, "value") || (this.value = t)) + })) : t ? (r = S.valHooks[t.type] || S.valHooks[t.nodeName.toLowerCase()]) && "get" in r && void 0 !== (e = r.get(t, "value")) ? e : "string" == typeof(e = t.value) ? e.replace(yt, "") : null == e ? "" : e : void 0 + } + }), S.extend({ + valHooks: { + option: { get: function(e) { var t = S.find.attr(e, "value"); return null != t ? t : ht(S.text(e)) } }, + select: { + get: function(e) { + var t, n, r, i = e.options, + o = e.selectedIndex, + a = "select-one" === e.type, + s = a ? null : [], + u = a ? o + 1 : i.length; + for (r = o < 0 ? u : a ? o : 0; r < u; r++) + if (((n = i[r]).selected || r === o) && !n.disabled && (!n.parentNode.disabled || !A(n.parentNode, "optgroup"))) { + if (t = S(n).val(), a) return t; + s.push(t) + } + return s + }, + set: function(e, t) { + var n, r, i = e.options, + o = S.makeArray(t), + a = i.length; + while (a--)((r = i[a]).selected = -1 < S.inArray(S.valHooks.option.get(r), o)) && (n = !0); + return n || (e.selectedIndex = -1), o + } + } + } + }), S.each(["radio", "checkbox"], function() { S.valHooks[this] = { set: function(e, t) { if (Array.isArray(t)) return e.checked = -1 < S.inArray(S(e).val(), t) } }, y.checkOn || (S.valHooks[this].get = function(e) { return null === e.getAttribute("value") ? "on" : e.value }) }), y.focusin = "onfocusin" in C; + var mt = /^(?:focusinfocus|focusoutblur)$/, + xt = function(e) { e.stopPropagation() }; + S.extend(S.event, { + trigger: function(e, t, n, r) { + var i, o, a, s, u, l, c, f, p = [n || E], + d = v.call(e, "type") ? e.type : e, + h = v.call(e, "namespace") ? e.namespace.split(".") : []; + if (o = f = a = n = n || E, 3 !== n.nodeType && 8 !== n.nodeType && !mt.test(d + S.event.triggered) && (-1 < d.indexOf(".") && (d = (h = d.split(".")).shift(), h.sort()), u = d.indexOf(":") < 0 && "on" + d, (e = e[S.expando] ? e : new S.Event(d, "object" == typeof e && e)).isTrigger = r ? 2 : 3, e.namespace = h.join("."), e.rnamespace = e.namespace ? new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, e.result = void 0, e.target || (e.target = n), t = null == t ? [e] : S.makeArray(t, [e]), c = S.event.special[d] || {}, r || !c.trigger || !1 !== c.trigger.apply(n, t))) { + if (!r && !c.noBubble && !x(n)) { + for (s = c.delegateType || d, mt.test(s + d) || (o = o.parentNode); o; o = o.parentNode) p.push(o), a = o; + a === (n.ownerDocument || E) && p.push(a.defaultView || a.parentWindow || C) + } + i = 0; + while ((o = p[i++]) && !e.isPropagationStopped()) f = o, e.type = 1 < i ? s : c.bindType || d, (l = (Y.get(o, "events") || Object.create(null))[e.type] && Y.get(o, "handle")) && l.apply(o, t), (l = u && o[u]) && l.apply && V(o) && (e.result = l.apply(o, t), !1 === e.result && e.preventDefault()); + return e.type = d, r || e.isDefaultPrevented() || c._default && !1 !== c._default.apply(p.pop(), t) || !V(n) || u && m(n[d]) && !x(n) && ((a = n[u]) && (n[u] = null), S.event.triggered = d, e.isPropagationStopped() && f.addEventListener(d, xt), n[d](), e.isPropagationStopped() && f.removeEventListener(d, xt), S.event.triggered = void 0, a && (n[u] = a)), e.result + } + }, + simulate: function(e, t, n) { + var r = S.extend(new S.Event, n, { type: e, isSimulated: !0 }); + S.event.trigger(r, null, t) + } + }), S.fn.extend({ trigger: function(e, t) { return this.each(function() { S.event.trigger(e, t, this) }) }, triggerHandler: function(e, t) { var n = this[0]; if (n) return S.event.trigger(e, t, n, !0) } }), y.focusin || S.each({ focus: "focusin", blur: "focusout" }, function(n, r) { + var i = function(e) { S.event.simulate(r, e.target, S.event.fix(e)) }; + S.event.special[r] = { + setup: function() { + var e = this.ownerDocument || this.document || this, + t = Y.access(e, r); + t || e.addEventListener(n, i, !0), Y.access(e, r, (t || 0) + 1) + }, + teardown: function() { + var e = this.ownerDocument || this.document || this, + t = Y.access(e, r) - 1; + t ? Y.access(e, r, t) : (e.removeEventListener(n, i, !0), Y.remove(e, r)) + } + } + }); + var bt = C.location, + wt = { guid: Date.now() }, + Tt = /\?/; + S.parseXML = function(e) { var t, n; if (!e || "string" != typeof e) return null; try { t = (new C.DOMParser).parseFromString(e, "text/xml") } catch (e) {} return n = t && t.getElementsByTagName("parsererror")[0], t && !n || S.error("Invalid XML: " + (n ? S.map(n.childNodes, function(e) { return e.textContent }).join("\n") : e)), t }; + var Ct = /\[\]$/, + Et = /\r?\n/g, + St = /^(?:submit|button|image|reset|file)$/i, + kt = /^(?:input|select|textarea|keygen)/i; + + function At(n, e, r, i) { + var t; + if (Array.isArray(e)) S.each(e, function(e, t) { r || Ct.test(n) ? i(n, t) : At(n + "[" + ("object" == typeof t && null != t ? e : "") + "]", t, r, i) }); + else if (r || "object" !== w(e)) i(n, e); + else + for (t in e) At(n + "[" + t + "]", e[t], r, i) + } + S.param = function(e, t) { + var n, r = [], + i = function(e, t) { + var n = m(t) ? t() : t; + r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(null == n ? "" : n) + }; + if (null == e) return ""; + if (Array.isArray(e) || e.jquery && !S.isPlainObject(e)) S.each(e, function() { i(this.name, this.value) }); + else + for (n in e) At(n, e[n], t, i); + return r.join("&") + }, S.fn.extend({ serialize: function() { return S.param(this.serializeArray()) }, serializeArray: function() { return this.map(function() { var e = S.prop(this, "elements"); return e ? S.makeArray(e) : this }).filter(function() { var e = this.type; return this.name && !S(this).is(":disabled") && kt.test(this.nodeName) && !St.test(e) && (this.checked || !pe.test(e)) }).map(function(e, t) { var n = S(this).val(); return null == n ? null : Array.isArray(n) ? S.map(n, function(e) { return { name: t.name, value: e.replace(Et, "\r\n") } }) : { name: t.name, value: n.replace(Et, "\r\n") } }).get() } }); + var Nt = /%20/g, + jt = /#.*$/, + Dt = /([?&])_=[^&]*/, + qt = /^(.*?):[ \t]*([^\r\n]*)$/gm, + Lt = /^(?:GET|HEAD)$/, + Ht = /^\/\//, + Ot = {}, + Pt = {}, + Rt = "*/".concat("*"), + Mt = E.createElement("a"); + + function It(o) { + return function(e, t) { + "string" != typeof e && (t = e, e = "*"); + var n, r = 0, + i = e.toLowerCase().match(P) || []; + if (m(t)) + while (n = i[r++]) "+" === n[0] ? (n = n.slice(1) || "*", (o[n] = o[n] || []).unshift(t)) : (o[n] = o[n] || []).push(t) + } + } + + function Wt(t, i, o, a) { + var s = {}, + u = t === Pt; + + function l(e) { var r; return s[e] = !0, S.each(t[e] || [], function(e, t) { var n = t(i, o, a); return "string" != typeof n || u || s[n] ? u ? !(r = n) : void 0 : (i.dataTypes.unshift(n), l(n), !1) }), r } + return l(i.dataTypes[0]) || !s["*"] && l("*") + } + + function Ft(e, t) { var n, r, i = S.ajaxSettings.flatOptions || {}; for (n in t) void 0 !== t[n] && ((i[n] ? e : r || (r = {}))[n] = t[n]); return r && S.extend(!0, e, r), e } + Mt.href = bt.href, S.extend({ + active: 0, + lastModified: {}, + etag: {}, + ajaxSettings: { url: bt.href, type: "GET", isLocal: /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol), global: !0, processData: !0, async: !0, contentType: "application/x-www-form-urlencoded; charset=UTF-8", accepts: { "*": Rt, text: "text/plain", html: "text/html", xml: "application/xml, text/xml", json: "application/json, text/javascript" }, contents: { xml: /\bxml\b/, html: /\bhtml/, json: /\bjson\b/ }, responseFields: { xml: "responseXML", text: "responseText", json: "responseJSON" }, converters: { "* text": String, "text html": !0, "text json": JSON.parse, "text xml": S.parseXML }, flatOptions: { url: !0, context: !0 } }, + ajaxSetup: function(e, t) { return t ? Ft(Ft(e, S.ajaxSettings), t) : Ft(S.ajaxSettings, e) }, + ajaxPrefilter: It(Ot), + ajaxTransport: It(Pt), + ajax: function(e, t) { + "object" == typeof e && (t = e, e = void 0), t = t || {}; + var c, f, p, n, d, r, h, g, i, o, v = S.ajaxSetup({}, t), + y = v.context || v, + m = v.context && (y.nodeType || y.jquery) ? S(y) : S.event, + x = S.Deferred(), + b = S.Callbacks("once memory"), + w = v.statusCode || {}, + a = {}, + s = {}, + u = "canceled", + T = { + readyState: 0, + getResponseHeader: function(e) { + var t; + if (h) { + if (!n) { n = {}; while (t = qt.exec(p)) n[t[1].toLowerCase() + " "] = (n[t[1].toLowerCase() + " "] || []).concat(t[2]) } + t = n[e.toLowerCase() + " "] + } + return null == t ? null : t.join(", ") + }, + getAllResponseHeaders: function() { return h ? p : null }, + setRequestHeader: function(e, t) { return null == h && (e = s[e.toLowerCase()] = s[e.toLowerCase()] || e, a[e] = t), this }, + overrideMimeType: function(e) { return null == h && (v.mimeType = e), this }, + statusCode: function(e) { + var t; + if (e) + if (h) T.always(e[T.status]); + else + for (t in e) w[t] = [w[t], e[t]]; + return this + }, + abort: function(e) { var t = e || u; return c && c.abort(t), l(0, t), this } + }; + if (x.promise(T), v.url = ((e || v.url || bt.href) + "").replace(Ht, bt.protocol + "//"), v.type = t.method || t.type || v.method || v.type, v.dataTypes = (v.dataType || "*").toLowerCase().match(P) || [""], null == v.crossDomain) { r = E.createElement("a"); try { r.href = v.url, r.href = r.href, v.crossDomain = Mt.protocol + "//" + Mt.host != r.protocol + "//" + r.host } catch (e) { v.crossDomain = !0 } } + if (v.data && v.processData && "string" != typeof v.data && (v.data = S.param(v.data, v.traditional)), Wt(Ot, v, t, T), h) return T; + for (i in (g = S.event && v.global) && 0 == S.active++ && S.event.trigger("ajaxStart"), v.type = v.type.toUpperCase(), v.hasContent = !Lt.test(v.type), f = v.url.replace(jt, ""), v.hasContent ? v.data && v.processData && 0 === (v.contentType || "").indexOf("application/x-www-form-urlencoded") && (v.data = v.data.replace(Nt, "+")) : (o = v.url.slice(f.length), v.data && (v.processData || "string" == typeof v.data) && (f += (Tt.test(f) ? "&" : "?") + v.data, delete v.data), !1 === v.cache && (f = f.replace(Dt, "$1"), o = (Tt.test(f) ? "&" : "?") + "_=" + wt.guid++ + o), v.url = f + o), v.ifModified && (S.lastModified[f] && T.setRequestHeader("If-Modified-Since", S.lastModified[f]), S.etag[f] && T.setRequestHeader("If-None-Match", S.etag[f])), (v.data && v.hasContent && !1 !== v.contentType || t.contentType) && T.setRequestHeader("Content-Type", v.contentType), T.setRequestHeader("Accept", v.dataTypes[0] && v.accepts[v.dataTypes[0]] ? v.accepts[v.dataTypes[0]] + ("*" !== v.dataTypes[0] ? ", " + Rt + "; q=0.01" : "") : v.accepts["*"]), v.headers) T.setRequestHeader(i, v.headers[i]); + if (v.beforeSend && (!1 === v.beforeSend.call(y, T, v) || h)) return T.abort(); + if (u = "abort", b.add(v.complete), T.done(v.success), T.fail(v.error), c = Wt(Pt, v, t, T)) { + if (T.readyState = 1, g && m.trigger("ajaxSend", [T, v]), h) return T; + v.async && 0 < v.timeout && (d = C.setTimeout(function() { T.abort("timeout") }, v.timeout)); + try { h = !1, c.send(a, l) } catch (e) { + if (h) throw e; + l(-1, e) + } + } else l(-1, "No Transport"); + + function l(e, t, n, r) { + var i, o, a, s, u, l = t; + h || (h = !0, d && C.clearTimeout(d), c = void 0, p = r || "", T.readyState = 0 < e ? 4 : 0, i = 200 <= e && e < 300 || 304 === e, n && (s = function(e, t, n) { + var r, i, o, a, s = e.contents, + u = e.dataTypes; + while ("*" === u[0]) u.shift(), void 0 === r && (r = e.mimeType || t.getResponseHeader("Content-Type")); + if (r) + for (i in s) + if (s[i] && s[i].test(r)) { u.unshift(i); break } + if (u[0] in n) o = u[0]; + else { + for (i in n) { + if (!u[0] || e.converters[i + " " + u[0]]) { o = i; break } + a || (a = i) + } + o = o || a + } + if (o) return o !== u[0] && u.unshift(o), n[o] + }(v, T, n)), !i && -1 < S.inArray("script", v.dataTypes) && S.inArray("json", v.dataTypes) < 0 && (v.converters["text script"] = function() {}), s = function(e, t, n, r) { + var i, o, a, s, u, l = {}, + c = e.dataTypes.slice(); + if (c[1]) + for (a in e.converters) l[a.toLowerCase()] = e.converters[a]; + o = c.shift(); + while (o) + if (e.responseFields[o] && (n[e.responseFields[o]] = t), !u && r && e.dataFilter && (t = e.dataFilter(t, e.dataType)), u = o, o = c.shift()) + if ("*" === o) o = u; + else if ("*" !== u && u !== o) { + if (!(a = l[u + " " + o] || l["* " + o])) + for (i in l) + if ((s = i.split(" "))[1] === o && (a = l[u + " " + s[0]] || l["* " + s[0]])) {!0 === a ? a = l[i] : !0 !== l[i] && (o = s[0], c.unshift(s[1])); break } + if (!0 !== a) + if (a && e["throws"]) t = a(t); + else try { t = a(t) } catch (e) { return { state: "parsererror", error: a ? e : "No conversion from " + u + " to " + o } } + } + return { state: "success", data: t } + }(v, s, T, i), i ? (v.ifModified && ((u = T.getResponseHeader("Last-Modified")) && (S.lastModified[f] = u), (u = T.getResponseHeader("etag")) && (S.etag[f] = u)), 204 === e || "HEAD" === v.type ? l = "nocontent" : 304 === e ? l = "notmodified" : (l = s.state, o = s.data, i = !(a = s.error))) : (a = l, !e && l || (l = "error", e < 0 && (e = 0))), T.status = e, T.statusText = (t || l) + "", i ? x.resolveWith(y, [o, l, T]) : x.rejectWith(y, [T, l, a]), T.statusCode(w), w = void 0, g && m.trigger(i ? "ajaxSuccess" : "ajaxError", [T, v, i ? o : a]), b.fireWith(y, [T, l]), g && (m.trigger("ajaxComplete", [T, v]), --S.active || S.event.trigger("ajaxStop"))) + } + return T + }, + getJSON: function(e, t, n) { return S.get(e, t, n, "json") }, + getScript: function(e, t) { return S.get(e, void 0, t, "script") } + }), S.each(["get", "post"], function(e, i) { S[i] = function(e, t, n, r) { return m(t) && (r = r || n, n = t, t = void 0), S.ajax(S.extend({ url: e, type: i, dataType: r, data: t, success: n }, S.isPlainObject(e) && e)) } }), S.ajaxPrefilter(function(e) { var t; for (t in e.headers) "content-type" === t.toLowerCase() && (e.contentType = e.headers[t] || "") }), S._evalUrl = function(e, t, n) { return S.ajax({ url: e, type: "GET", dataType: "script", cache: !0, async: !1, global: !1, converters: { "text script": function() {} }, dataFilter: function(e) { S.globalEval(e, t, n) } }) }, S.fn.extend({ + wrapAll: function(e) { var t; return this[0] && (m(e) && (e = e.call(this[0])), t = S(e, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && t.insertBefore(this[0]), t.map(function() { var e = this; while (e.firstElementChild) e = e.firstElementChild; return e }).append(this)), this }, + wrapInner: function(n) { + return m(n) ? this.each(function(e) { S(this).wrapInner(n.call(this, e)) }) : this.each(function() { + var e = S(this), + t = e.contents(); + t.length ? t.wrapAll(n) : e.append(n) + }) + }, + wrap: function(t) { var n = m(t); return this.each(function(e) { S(this).wrapAll(n ? t.call(this, e) : t) }) }, + unwrap: function(e) { return this.parent(e).not("body").each(function() { S(this).replaceWith(this.childNodes) }), this } + }), S.expr.pseudos.hidden = function(e) { return !S.expr.pseudos.visible(e) }, S.expr.pseudos.visible = function(e) { return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length) }, S.ajaxSettings.xhr = function() { try { return new C.XMLHttpRequest } catch (e) {} }; + var Bt = { 0: 200, 1223: 204 }, + $t = S.ajaxSettings.xhr(); + y.cors = !!$t && "withCredentials" in $t, y.ajax = $t = !!$t, S.ajaxTransport(function(i) { + var o, a; + if (y.cors || $t && !i.crossDomain) return { + send: function(e, t) { + var n, r = i.xhr(); + if (r.open(i.type, i.url, i.async, i.username, i.password), i.xhrFields) + for (n in i.xhrFields) r[n] = i.xhrFields[n]; + for (n in i.mimeType && r.overrideMimeType && r.overrideMimeType(i.mimeType), i.crossDomain || e["X-Requested-With"] || (e["X-Requested-With"] = "XMLHttpRequest"), e) r.setRequestHeader(n, e[n]); + o = function(e) { return function() { o && (o = a = r.onload = r.onerror = r.onabort = r.ontimeout = r.onreadystatechange = null, "abort" === e ? r.abort() : "error" === e ? "number" != typeof r.status ? t(0, "error") : t(r.status, r.statusText) : t(Bt[r.status] || r.status, r.statusText, "text" !== (r.responseType || "text") || "string" != typeof r.responseText ? { binary: r.response } : { text: r.responseText }, r.getAllResponseHeaders())) } }, r.onload = o(), a = r.onerror = r.ontimeout = o("error"), void 0 !== r.onabort ? r.onabort = a : r.onreadystatechange = function() { 4 === r.readyState && C.setTimeout(function() { o && a() }) }, o = o("abort"); + try { r.send(i.hasContent && i.data || null) } catch (e) { if (o) throw e } + }, + abort: function() { o && o() } + } + }), S.ajaxPrefilter(function(e) { e.crossDomain && (e.contents.script = !1) }), S.ajaxSetup({ accepts: { script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" }, contents: { script: /\b(?:java|ecma)script\b/ }, converters: { "text script": function(e) { return S.globalEval(e), e } } }), S.ajaxPrefilter("script", function(e) { void 0 === e.cache && (e.cache = !1), e.crossDomain && (e.type = "GET") }), S.ajaxTransport("script", function(n) { var r, i; if (n.crossDomain || n.scriptAttrs) return { send: function(e, t) { r = S("