Commit cd757395 authored by SAI RAM MOGILI's avatar SAI RAM MOGILI

New repo initialised

parents
"""
Django settings for config project.
Generated by 'django-admin startproject' using Django 2.0.1.
For more information on this file, see
https://docs.djangoproject.com/en/2.0/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.0/ref/settings/
"""
import os
from django.contrib.messages import constants as messages
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'd$pxg6fisc4iwzk&vz^s_d0lkf&k63l5a8f!obktw!jg#4zvp3'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = ['192.168.43.79','127.0.0.1']
ACCOUNT_USERNAME_REQUIRED = False
AUTH_USER_MODEL = 'project.User'
# Application definition
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'django.contrib.admin',
'crispy_forms',
'project',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'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 = 'config.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'templates')
],
'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',
],
},
},
]
WSGI_APPLICATION = 'config.wsgi.application'
# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
# Custom Django auth settings
AUTH_USER_MODEL = 'project.User'
LOGIN_URL = 'login'
LOGOUT_URL = 'logout'
LOGIN_REDIRECT_URL = 'home'
LOGOUT_REDIRECT_URL = 'home'
# Messages built-in framework
MESSAGE_TAGS = {
messages.DEBUG: 'alert-secondary',
messages.INFO: 'alert-info',
messages.SUCCESS: 'alert-success',
messages.WARNING: 'alert-warning',
messages.ERROR: 'alert-danger',
}
# Third party apps configuration
CRISPY_TEMPLATE_PACK = 'bootstrap4'
"""urls.py
This file contains the code of handling endpoints of urls
Author(s):
Jayaprakash A, Sairam Moghili
Last modified:
2nd November 2019
"""
'''
Changelog::
25-10-19 Added routes for different users
'''
from django.urls import include, path
from django.contrib import admin
from project.views import project, player, manager
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('project.urls')),
path('accounts/', include('django.contrib.auth.urls')),
path('accounts/login/', project.LoginView.as_view(), name='login'),
path('accounts/login/player/', player.PlayerLoginView.as_view(), name='player_login'),
path('accounts/login/manager/', manager.ManagerLoginView.as_view(), name='manager_login'),
path('accounts/signup/', project.SignUpView.as_view(), name='signup'),
path('accounts/signup/player/', player.PlayerSignUpView.as_view(), name='player_signup'),
path('accounts/signup/manager/', manager.ManagerSignUpView.as_view(), name='manager_signup'),
# path('sports/',sport.AddSportView.as_view(),name='add_sport'),
]
"""
WSGI config for django_school 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/2.0/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_school.settings")
application = get_wsgi_application()
"""manage.py
The basic driver code
Author(s):
Jayaprakash A
Last modified:
3rd November 2019
"""
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.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)
"""admin.py
This file contains the core admin setup and register various models
Author(s):
Jayaprakash A
Last modified:
25th November 2019
"""
from django.contrib import admin
from .models import TeamManager, Player, PlayerSport, Sport, AuctionUpdate, ManagerPurse
admin.site.register(TeamManager)
admin.site.register(Sport)
admin.site.register(PlayerSport)
admin.site.register(Player)
admin.site.register(AuctionUpdate)
admin.site.register(ManagerPurse)
\ No newline at end of file
from django.apps import AppConfig
class ProjectConfig(AppConfig):
name = 'project'
from django.contrib.auth import REDIRECT_FIELD_NAME
from django.contrib.auth.decorators import user_passes_test
def player_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url='login'):
'''
Decorator for views that checks that the logged in user is a student,
redirects to the log-in page if necessary.
'''
actual_decorator = user_passes_test(
lambda u: u.is_active and u.is_player,
login_url=login_url,
redirect_field_name=redirect_field_name
)
if function:
return actual_decorator(function)
return actual_decorator
def manager_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url='login'):
'''
Decorator for views that checks that the logged in user is a manager,
redirects to the log-in page if necessary.
'''
actual_decorator = user_passes_test(
lambda u: u.is_active and u.is_manager,
login_url=login_url,
redirect_field_name=redirect_field_name
)
if function:
return actual_decorator(function)
return actual_decorator
This diff is collapsed.
"""logger.py
This file contains the code for logging various types of debug statements
Author(s):
Jayaprakash A
Last modified:
4th November 2019
"""
'''
Changelog::
25-10-19 Created the file. Basic utilities for logging added
04-11-19 Added filename a part of logger object for better debugging
'''
DEBUG_MODE = True
class Log(object):
"""The logger object
To use:
>>> logger = Log('filename)
>>> logger.warn('function_name/class_name', 'message1', 'message2)
LOG_WARN filename function_name/class_name :: message1 message2
>>> logger.debug('function_name/class_name', 'Some debug statement')
LOG_DEBUG filename function_name/class_name :: Some debug statement
"""
def __init__(self, filename):
self.filename = filename
def warn(self, *argv):
"""A warning message
Args:
message (str): The message
"""
if DEBUG_MODE:
print("LOG_WARN ::", self.filename, end=' ')
for arg in argv:
print(arg, end=' ')
print()
def error(self, *argv):
"""An error message
Args:
message (str): The message
"""
if DEBUG_MODE:
print("LOG_ERROR ::", self.filename, end=' ')
for arg in argv:
print(arg, end=' ')
print()
def info(self, *argv):
"""An info message
Args:
message (str): The message
"""
if DEBUG_MODE:
print("LOG_INFO ::", self.filename, end=' ')
for arg in argv:
print(arg, end=' ')
print()
def debug(self, *argv):
"""A debug message
Args:
message (str): The message
"""
if DEBUG_MODE:
print("LOG_DEBUG ::", self.filename, end=' ')
for arg in argv:
print(arg, end=' ')
print()
\ No newline at end of file
# Generated by Django 2.2.6 on 2019-11-06 08:01
from django.conf import settings
import django.contrib.auth.models
import django.contrib.auth.validators
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
initial = True
dependencies = [
('auth', '0011_update_proxy_permissions'),
]
operations = [
migrations.CreateModel(
name='User',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('password', models.CharField(max_length=128, verbose_name='password')),
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),
('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')),
('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')),
('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
('is_manager', models.BooleanField(default=False)),
('is_player', models.BooleanField(default=False)),
('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')),
('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')),
],
options={
'verbose_name': 'user',
'verbose_name_plural': 'users',
'abstract': False,
},
managers=[
('objects', django.contrib.auth.models.UserManager()),
],
),
migrations.CreateModel(
name='Sport',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=20)),
('team_member_count', models.PositiveIntegerField(default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(15)])),
],
options={
'verbose_name': 'Sport',
'verbose_name_plural': 'Sports',
},
),
migrations.CreateModel(
name='Player',
fields=[
('first_name', models.CharField(max_length=50)),
('last_name', models.CharField(max_length=50)),
('email', models.EmailField(max_length=70)),
('phone_number', models.CharField(max_length=17, validators=[django.core.validators.RegexValidator(message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.", regex='^\\+?1?\\d{9,15}$')])),
('password', models.CharField(max_length=50)),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to=settings.AUTH_USER_MODEL)),
],
),
migrations.CreateModel(
name='TeamManager',
fields=[
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to=settings.AUTH_USER_MODEL)),
('first_name_one', models.CharField(max_length=50)),
('last_name_one', models.CharField(max_length=50)),
('email', models.EmailField(max_length=70)),
('password', models.CharField(max_length=50)),
('phone_number_one', models.CharField(max_length=17, validators=[django.core.validators.RegexValidator(message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.", regex='^\\+?1?\\d{9,15}$')])),
('first_name_two', models.CharField(max_length=50)),
('last_name_two', models.CharField(max_length=50)),
('phone_number_two', models.CharField(max_length=17, validators=[django.core.validators.RegexValidator(message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.", regex='^\\+?1?\\d{9,15}$')])),
],
options={
'verbose_name': 'Team manager',
'verbose_name_plural': 'Team managers',
},
),
migrations.CreateModel(
name='PlayerSport',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('details', models.CharField(max_length=100)),
('sports', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='project.Sport')),
('player', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='project.Player')),
],
options={
'verbose_name': 'Player sport map',
'verbose_name_plural': 'Player sport map',
},
),
migrations.CreateModel(
name='ManagerPurse',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('purse', models.PositiveIntegerField(default=1000000)),
('sports', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='project.Sport')),
('manager', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='project.TeamManager')),
],
options={
'verbose_name': 'Manager purse map',
'verbose_name_plural': 'Manager purse map',
},
),
migrations.CreateModel(
name='AuctionUpdate',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('price', models.IntegerField(default=-1)),
('sports', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='project.Sport')),
('manager', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='project.TeamManager')),
('player', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='project.Player')),
],
options={
'verbose_name': 'Action update map',
'verbose_name_plural': 'Action update map',
},
),
]
# Generated by Django 2.2.6 on 2019-11-25 15:49
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('project', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='auctionupdate',
name='is_sold',
field=models.BooleanField(default=False),
),
]
# Generated by Django 2.2.6 on 2019-11-26 10:52
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('project', '0002_auctionupdate_is_sold'),
]
operations = [
migrations.AddField(
model_name='auctionupdate',
name='time_left',
field=models.IntegerField(default=30),
),
]
"""models.py
This file contains the code for various database models
Author(s):
Jayaprakash A, Sairam Moghili
Last modified:
5th November 2019
"""
'''
Changelog::
25-10-19 Created the file. Added tables for team manager, sports, players
26-10-19 Updating the models. Adding new parameters
02-11-19 Added models for player sports and base user class
04-11-19 Added models for manager purse and auction update
05-11-19 Added documentation
'''
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils.html import escape, mark_safe
from django.core.validators import MaxValueValidator, MinValueValidator
from django.core.validators import RegexValidator
from config import settings
class User(AbstractUser):
"""The model object of basic user from AbstractUser
The basic user model helps in authentication, registration
"""
is_manager = models.BooleanField(default=False)
is_player = models.BooleanField(default=False)
def display_name(self):
return self.username.split('@@@')[0]
def __str__(self):
return self.email
class Sport(models.Model):
"""The model object of sports entity
This model stores info about the different sports and the number of players in a team
"""
name = models.CharField(max_length=20)
team_member_count = models.PositiveIntegerField(default=1, validators=[MinValueValidator(1), MaxValueValidator(15)])
class Meta:
verbose_name = "Sport"
verbose_name_plural = "Sports"
def __str__(self):
return self.name
class Player(models.Model):
"""The model object of player entity
This model stores info about the different players and other personal details
"""
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.EmailField(max_length=70)
phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
phone_number = models.CharField(validators=[phone_regex], max_length=17)
password = models.CharField(max_length=50)
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, primary_key=True)
def __str__(self):
return '%s %s' % (self.first_name, self.last_name)
class TeamManager(models.Model):
"""The model object of manager entity
This model stores info about the different manager and other personal details.
Two manager details are stored but the second manager details are not compulsory.
"""
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, primary_key=True)
first_name_one = models.CharField(max_length=50)
last_name_one = models.CharField(max_length=50)
email = models.EmailField(max_length=70)
password = models.CharField(max_length=50)
phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
phone_number_one = models.CharField(validators=[phone_regex], max_length=17)
first_name_two = models.CharField(max_length=50)
last_name_two = models.CharField(max_length=50)
phone_number_two = models.CharField(validators=[phone_regex], max_length=17)
class Meta:
verbose_name = "Team manager"
verbose_name_plural = "Team managers"
def __str__(self):
return '%s %s' % (self.first_name_one, self.last_name_one)
class ManagerPurse(models.Model):
"""The model object of manager purse entity
This model stores info about the money left with the manager for auction of different sports events. Would be required in the auction.
"""
manager = models.ForeignKey(TeamManager, on_delete=models.CASCADE)
sports = models.ForeignKey(Sport, on_delete=models.CASCADE)
purse = models.PositiveIntegerField(default=1000000)
class Meta:
verbose_name = "Manager purse map"
verbose_name_plural = "Manager purse map"
def __str__(self):
return '%s %s' % (self.manager, self.sports)
class AuctionUpdate(models.Model):
"""The model object of auction update entity
This model stores info about the money spent on a player for a particular sport by a manager
"""
manager = models.ForeignKey(TeamManager, on_delete=models.CASCADE)
sports = models.ForeignKey(Sport, on_delete=models.CASCADE)
price = models.IntegerField(default=-1,)
player = models.ForeignKey(Player, on_delete=models.CASCADE)
is_sold = models.BooleanField(default=False)
time_left = models.IntegerField(default=30,)
class Meta:
verbose_name = "Action update map"
verbose_name_plural = "Action update map"
def __str__(self):
return '%s %s' % (self.player, self.sports)
class PlayerSport(models.Model):
"""The model object of player sports entity
This model stores info about the details of players registered for various sports
"""
player = models.ForeignKey(Player, on_delete=models.CASCADE)
sports = models.ForeignKey(Sport, on_delete=models.CASCADE)
details = models.CharField(max_length=100)
class Meta:
verbose_name = "Player sport map"
verbose_name_plural = "Player sport map"
def __str__(self):
return '%s %s' % (self.player, self.sports)
# class BidCurrent(models.Model):
# """The model object of bid player entity
#
# This model stores info about the details of bidamount player manager sports
#
# """
#
# bidamount = models.PositiveIntegerField(default=0)
# manager = models.ForeignKey(TeamManager, on_delete=models.CASCADE)
# player = models.ForeignKey(Player, on_delete=models.CASCADE)
# sports = models.ForeignKey(Sport, on_delete=models.CASCADE)
{% extends 'base.html' %}
{% load staticfiles%}
<script src="{% static 'lib/jquery.cookie.js' %}"></script>
<script src="{% static 'js/jquery.cookie.js' %}"></script>
{% block content %}
<script type="text/javascript">
window.onload = function (){
(function (){
// resetTimer();
})();
}
</script>
<div id="token" style="display: none;"></div>
<script type="text/javascript"> window.CSRF_TOKEN = "{{ csrf_token }}"; </script>
<script type="text/javascript"> $('#token').html("{{ csrf_token }}");
// $('#player-name').html(data['player_name']);
</script>
<style>
div {
style=" display: inline-block"
}
</style>
<h2 align=center> Welcome to the auction </h2>
Sports: &nbsp
<div id="sports" style=" display: inline-block" >{{ sports }}</div>
<br/><br/>
Player name: &nbsp
<div id="player-name" style=" display: inline-block" >{{ player_name }}</div>
<br/><br/>
player profile: &nbsp
<div id="profile" style=" display: inline-block">{{ player_profile }}</div>
<br/><br/>
Highest Bidder: &nbsp
<div id="manager-name" style=" display: inline-block">{{ highest_bid_manager }}</div>
<br/><br/>
<div id='timepass' ></div>
<font size="5">Current bid amount: &#8377; &nbsp
<div id="amount" style=" display: inline-block">
{% if player_bid_amount %}{{ player_bid_amount }}{% else %}
0 {% endif %}
<script type="text/javascript">
var myInterval;
console.log('Cool');
var amount = '{{ player_bid_amount }}';
$(document).ready(function() {
setInterval(function() {
$.getJSON('/auction-test/update',
function(data) {
console.log('Received Data');
if (data['auction_finished'] == 'true') {
clearInterval(0);
} else {
console.log('Updating fields');
var temp_amount = document.getElementById('amount').innerHTML;
// if (temp_amount != data['player_bid_amount']) {
// clearInterval(myInterval);
// resetTimer();
console.log('Received' + data['player_name']);
$('#count').html(data['player_bid_time']);
$('#sports').html(data['sports']);
$('#player-name').html(data['player_name']);
$('#manager-name').html(data['highest_bid_manager']);
$('#profile').html(data['player_profile']);
$('#amount').html(data['player_bid_amount']);
// }
}
});
}, 500);
});
function watch_updates() {
var csrftoken = document.getElementById('token').innerHTML;
console.log(csrftoken + "token");
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
console.log('watching');
var amount = '{{ player_bid_amount }}';
// setInterval(function() {
// var temp_amount = document.getElementById('amount').innerHTML;
// if (temp_amount == amount) {
// console.log('Amount did not change selling')
// // clearInterval(myInterval);
// // resetTimer();
// console.log("The value hasn't changed.");
// // resetTimer();
// } else {
// console.log("The value has changed");
// clearInterval(myInterval);
// resetTimer();
// amount = temp_amount;
// }
// }, 10000);
}
</script>
</div>
</font>
<script type="text/javascript">watch_updates()</script>
<!-- <div id='test'><script> my_cool_js_function($('#sports').html());</script></div> -->
{% endblock %}
{% block notifications %}
<p><font size="5" color="red">The bid closes in <span id="count">30</span> seconds.</font></p>
<div id='sold'></div>
<script type="text/javascript"></script>
{% endblock %}
{% extends 'base.html' %}
{% load staticfiles%}
{% block content %}
<!-- <button type="button" name="button" onclick="bid()">increase my amount</button> -->
<style type="text/css">
.btn-circle.btn-xl {
width: 20vw;
height: 20vw;
padding: 2vw 4vw;
border-radius: 10vw;
font-size: 8vw;
text-align: center;
}
.manager-name {
font-size: 4vw;
}
</style>
<div id="manager-name" class="manager-name">{{first_name}} </div>
Purse amount
<div id="purse" class="purse" style=" display: inline-block"> {{purse}} </div>
<br>
<!-- <input type="image" src="{% static 'img/bid.png' %}" align="middle" style="height:40%;" id="saveForm" onclick="bid()" /> -->
<!-- <link href="{% static 'img/favicon.png' %}" rel="icon"> -->
<button type="button" class="btn btn-primary btn-circle btn-xl" onclick="bid()">Bid</button>
<script type="text/javascript">
function bid() {
var managername= document.getElementById('manager-name').innerHTML;
console.log("asdtg" ,managername)
$.getJSON('/auction_online/update-bid',
{ manager_name: managername },
function (data) {
console.log("nothing returned")
});
}
setInterval(function() {
$.getJSON('/auction_online/getpurse',
function(data) {
console.log(data['current_purse']+'Purse amount')
$('#purse').html(data['current_purse']);
});
}, 500);
</script>
{% endblock %}
<!-- {% block notifications %}
{% endblock %} -->
{% extends 'base.html' %}
{% load staticfiles%}
{% block content %}
Auction has started
{% endblock %}
\ No newline at end of file
{% extends 'base.html' %}
{% load staticfiles%}
{% block content %}
<section id="introduction">
<h2>Welcome! <span class="icon-emo-happy"></span></h2>
<p class="lead">
<!-- If you already have an account, go ahead and <a href="{% url 'login' %}">log in</a>. If you are new,
get started
by creating a <a href="{% url 'player_signup' %}">player account</a> or a <a
href="{% url 'manager_signup' %}">manager
account</a>.-->
</p>
<hr>
</section>
<section id="intro" class="clearfix">
<div class="container">
<div class="intro-img">
<img src="{% static 'img/intro-image.png' %}" alt="" class="img-fluid">
</div>
<div class="intro-info">
<h2>We provide player auction system for your sports events!</h2>
<div>
<a href="#about" class="btn-get-started scrollto">Get Started</a>
<a href="#services" class="btn-services scrollto">Our Services</a>
</div>
</div>
</div>
</section><!-- #intro -->
<main id="main">
<!--==========================
About Us Section
============================-->
<section id="about">
<div class="container">
<header class="section-header">
<h3>About Us</h3>
<br><br>
<p>An auction is a process of buying and selling goods or services by offering them up for bid, taking bids, and then selling the item
to the highest bidder. .</p> </header>
<div class="row about-container">
<div class="col-lg-6 content order-lg-1 order-2">
<p>
Auctioning of sport players for clubs is also one big thing. Which will require all the managers and franchises to be present at auction whole time.
With our auctions system which replaces the auctioner and make makes auction process easy, by allowing managers to auction from our wesite and players can thier status in the ongoing auction process.
</p>
<br>
<div class="icon-box wow fadeInUp">
<!-- <div class="icon"><i class="fa fa-shopping-bag"></i></div>
<h4 class="title"><a href="">Eiusmod Tempor</a></h4>
<p class="description">Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi</p>
--> </div>
<div class="icon-box wow fadeInUp" data-wow-delay="0.2s">
<!-- <div class="icon"><i class="fa fa-photo"></i></div>
<h4 class="title"><a href="">Magni Dolores</a></h4>
<p class="description">Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum</p>
--> </div>
<div class="icon-box wow fadeInUp" data-wow-delay="0.4s">
<!-- <div class="icon"><i class="fa fa-bar-chart"></i></div>
<h4 class="title"><a href="">Dolor Sitema</a></h4>
<p class="description">Minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat tarad limino ata</p>
--> </div>
</div>
<div class="col-lg-6 background order-lg-2 order-1 wow fadeInUp">
<img src="{% static 'img/images.jpeg' %}" class="img-fluid" alt="">
</div>
</div>
<!-- <div class="row about-extra">
<div class="col-lg-6 wow fadeInUp">
<img src="{% static 'img/about-extra-1.svg' %}" class="img-fluid" alt="">
</div>
<div class="col-lg-6 wow fadeInUp pt-5 pt-lg-0">
<h4>Voluptatem dignissimos provident quasi corporis voluptates sit assumenda.</h4>
<p>
Ipsum in aspernatur ut possimus sint. Quia omnis est occaecati possimus ea. Quas molestiae perspiciatis occaecati qui rerum. Deleniti quod porro sed quisquam saepe. Numquam mollitia recusandae non ad at et a.
</p>
<p>
Ad vitae recusandae odit possimus. Quaerat cum ipsum corrupti. Odit qui asperiores ea corporis deserunt veritatis quidem expedita perferendis. Qui rerum eligendi ex doloribus quia sit. Porro rerum eum eum.
</p>
</div>
</div>
<div class="row about-extra">
<div class="col-lg-6 wow fadeInUp order-1 order-lg-2">
<img src="{% static 'img/about-extra-2.svg' %}" class="img-fluid" alt="">
</div>
<div class="col-lg-6 wow fadeInUp pt-4 pt-lg-0 order-2 order-lg-1">
<h4>Neque saepe temporibus repellat ea ipsum et. Id vel et quia tempora facere reprehenderit.</h4>
<p>
Delectus alias ut incidunt delectus nam placeat in consequatur. Sed cupiditate quia ea quis. Voluptas nemo qui aut distinctio. Cumque fugit earum est quam officiis numquam. Ducimus corporis autem at blanditiis beatae incidunt sunt.
</p>
<p>
Voluptas saepe natus quidem blanditiis. Non sunt impedit voluptas mollitia beatae. Qui esse molestias. Laudantium libero nisi vitae debitis. Dolorem cupiditate est perferendis iusto.
</p>
<p>
Eum quia in. Magni quas ipsum a. Quis ex voluptatem inventore sint quia modi. Numquam est aut fuga mollitia exercitationem nam accusantium provident quia.
</p>
</div>
-->
</div>
</div>
</section><!-- #about -->
<!--==========================
Services Section
============================-->
<section id="services" class="section-bg">
<div class="container">
<header class="section-header">
<h3>Services</h3>
<p>Laudem latine persequeris id sed, ex fabulas delectus quo. No vel partiendo abhorreant vituperatoribus.</p>
</header>
<div class="row" >
<div class="col-md-6 col-lg-5 offset-lg-1 wow bounceInUp" data-wow-duration="1.4s" align=' center'>
<div class="box" align=' center'>
<div class="icon"><i class="ion-ios-analytics-outline" style="color: #ff689b;"></i></div>
<h4 class="title"><a href="/accounts/signup/manager/">Manager </a></h4>
<p class="description">Auction.</p>
</div>
</div>
<div class="col-md-6 col-lg-5 wow bounceInUp" data-wow-duration="1.4s">
<div class="box" align=' center'>
<div class="icon"><i class="ion-ios-analytics-outline" style="color: #ff689b;"></i></div>
<h4 class="title"><a href="/accounts/signup/player/">Player </a></h4>
<p class="description">Auction.</p>
</div>
</div>
<div class="col-md-6 col-lg-5 offset-lg-1 wow bounceInUp" data-wow-delay="0.1s" data-wow-duration="1.4s">
<div class="box" align=' center'>
<div class="icon"><i class="ion-ios-analytics-outline" style="color: #ff689b;"></i></div>
<h4 class="title"><a href="">Sports</a></h4>
<p class="description">Auction.</p>
</div>
</div>
<div class="col-md-6 col-lg-5 wow bounceInUp" data-wow-delay="0.1s" data-wow-duration="1.4s">
<div class="box" align=' center'>
<div class="icon"><i class="ion-ios-analytics-outline" style="color: #ff689b;"></i></div>
<h4 class="title"><a href="">Auction</a></h4>
<p class="description">Auction.</p>
</div>
</div>
<div class="col-md-6 col-lg-5 offset-lg-1 wow bounceInUp" data-wow-delay="0.2s" data-wow-duration="1.4s">
</div>
<div class="col-md-6 col-lg-5 wow bounceInUp" data-wow-delay="0.2s" data-wow-duration="1.4s">
</div>
</div>
</div>
</section><!-- #services -->
<section id="team">
<div class="container">
<div class="section-header">
<h3>Team</h3>
<p>A hard working team of 3 members always striving for excellence</p>
</div>
<div class="row">
<div class="col-lg-4 col-md-6 wow fadeInUp" data-wow-delay="0.2s">
<div class="member">
<img src="{% static 'img/team-1.JPG' %}" class="img-fluid" alt="">
<div class="member-info">
<div class="member-info-content">
<h4>Jayaprakash Akula</h4>
<span>Team Member</span>
<div class="social">
<a href="https://www.facebook.com/jayaprakash.akula"><i class="fa fa-twitter"></i></a>
<a href="https://www.facebook.com/jayaprakash.akula"><i class="fa fa-facebook"></i></a>
<a href="http://www.github.com/jayaprakash-a"><i class="fa fa-google-plus"></i></a>
<a href="https://www.linkedin.com/in/jayaprakash-akula-b40444126/"><i class="fa fa-linkedin"></i></a>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 wow fadeInUp" data-wow-delay="0.2s">
<div class="member">
<img src="{% static 'img/team-1.JPG' %}" class="img-fluid" alt="">
<div class="member-info">
<div class="member-info-content">
<h4>Sai Ram Moghili</h4>
<span>Team Member</span>
<div class="social">
<a href=""><i class="fa fa-twitter"></i></a>
<a href=""><i class="fa fa-facebook"></i></a>
<a href=""><i class="fa fa-google-plus"></i></a>
<a href=""><i class="fa fa-linkedin"></i></a>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 wow fadeInUp" data-wow-delay="0.3s">
<div class="member">
<img src="{% static 'img/team-1.JPG' %}" class="img-fluid" alt="">
<div class="member-info">
<div class="member-info-content">
<h4>Laksh Sharma</h4>
<span>Team Member</span>
<div class="social">
<a href=""><i class="fa fa-twitter"></i></a>
<a href=""><i class="fa fa-facebook"></i></a>
<a href=""><i class="fa fa-google-plus"></i></a>
<a href=""><i class="fa fa-linkedin"></i></a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section><!-- #team -->
{% endblock %}
{% extends 'base.html' %}
{% load static %}
{% load crispy_forms_tags %}
{% block content %}
{% if messages %}
{% for message in messages %}
<p>{{ message }}</p>
{% endfor %}
{% endif %}
<h3 vspace="100">
Welcome Mr.{{ first_name }}
</h3>
<!--
<table >
<tr>
<th>Player</th>
<th>Sport</th>
<th>Details</th>
</tr>
{% for item in query_result %}
<tr>
<td>{{ item.player }}</td>
<td>{{ item.sports }}</td>
<td>{{ item.details }}</td>
</tr>
{% endfor %}
</table>
-->
<select id="mySelect" onChange="list_dislapy(this.value);">
<option value="">Select a sport:</option>
{% for item in sports %}
<option value="{{item.name}}"> {{item.name}}</option>
{% endfor %}
</select>
<br>
<div id="player-list">
<!-- <script> filluplist({{ query_result }});</script> -->
</div>
<!-- <div id="crct" style="display:none;">
<table >
<tr>
<th>Player</th>
<th>Sport</th>
<th>Details</th>
</tr>
{% for item in query_result %}
{% if "Cricket" == "Cricket" %}
<tr>
<td>{{ item.player }}</td>
<td>{{ item.sports }}</td>
<td>{{ item.details }}</td>
</tr>
{% endif %}
{% endfor %}
</table>
</div> -->
<script type="text/javascript">
function filluplist(query_result) {
console.log(query_result[0]);
// for (const [key, value] of Object.entries(query_result)) {
// console.log(key, value);
}
function list_dislapy(elem) {
var query = '{{ query_result|escapejs }}';
var my_var_parsed = jQuery.parseJSON(query);
var tbl = document.createElement('table');
var tbdy = document.createElement('tbody');
var tr = document.createElement('tr');
var td = document.createElement('th');
td.appendChild(document.createTextNode("Player"))
tr.appendChild(td)
var td = document.createElement('th');
td.appendChild(document.createTextNode("Sport"))
tr.appendChild(td);
var td = document.createElement('th');
td.appendChild(document.createTextNode("price"))
tr.appendChild(td);
tbdy.appendChild(tr);
for (var variable in my_var_parsed) {
if (my_var_parsed[variable].sports === elem){
var tr = document.createElement('tr');
var td = document.createElement('td');
td.appendChild(document.createTextNode(my_var_parsed[variable].player))
tr.appendChild(td)
var td = document.createElement('td');
td.appendChild(document.createTextNode(my_var_parsed[variable].sports))
tr.appendChild(td);
var td = document.createElement('td');
td.appendChild(document.createTextNode(my_var_parsed[variable].price))
tr.appendChild(td);
tbdy.appendChild(tr);
}
}
tbl.appendChild(tbdy);
console.log(tbl);
$('#player-list').html(tbl);
// console.log('hello');
// console.log(elem);
// if (elem == 'Football'){
// document.getElementById('fball').style.display = 'block';
// document.getElementById('crct').style.display = 'none';
// }
// else{
// document.getElementById('fball').style.display = 'none';
// document.getElementById('crct').style.display = 'block';
// }
}
</script>
<style>
th, td {
padding: 15px;
text-align: left;
}
th {
background-color: #4CAF50;
color: white;
}
tr:hover {background-color: #f5f5f5;}
table, th, td {
border: 1px solid black;
}
</style>
{% endblock %}
{% extends 'base.html' %}
{% load static %}
{% load crispy_forms_tags %}
{% block content %}
{% if messages %}
{% for message in messages %}
<p>{{ message }}</p>
{% endfor %}
{% endif %}
<script type="text/javascript">
// console.log('query '+my_var_parsed[0].sports);
function filluplist(query_result) {
console.log(query_result);
// for (const [key, value] of Object.entries(query_result)) {
// console.log(key, value);
}
</script>
<h3 vspace="100">
Welcome Mr.{{ first_name }}
</h3>
<!--
<table >
<tr>
<th>Player</th>
<th>Sport</th>
<th>Details</th>
</tr>
{% for item in query_result %}
<tr>
<td>{{ item.player }}</td>
<td>{{ item.sports }}</td>
<td>{{ item.details }}</td>
</tr>
{% endfor %}
</table>
-->
<select id="mySelect" onChange="list_dislapy(this.value);">
<option value="">Select a sport:</option>
{% for item in sports %}
<option value="{{item.name}}"> {{item.name}}</option>
{% endfor %}
</select>
<br>
<div id="player-list">
<!-- <script> filluplist({{ query_result }});</script> -->
</div>
<!-- <div id="crct" style="display:none;">
<table >
<tr>
<th>Player</th>
<th>Sport</th>
<th>Details</th>
</tr>
{% for item in query_result %}
{% if "Cricket" == "Cricket" %}
<tr>
<td>{{ item.player }}</td>
<td>{{ item.sports }}</td>
<td>{{ item.details }}</td>
</tr>
{% endif %}
{% endfor %}
</table>
</div> -->
<script type="text/javascript">
function filluplist(query_result) {
console.log(query_result[0]);
// for (const [key, value] of Object.entries(query_result)) {
// console.log(key, value);
}
function list_dislapy(elem) {
var query = '{{ query_result|escapejs }}';
var my_var_parsed = jQuery.parseJSON(query);
var tbl = document.createElement('table');
var tbdy = document.createElement('tbody');
var tr = document.createElement('tr');
var td = document.createElement('th');
td.appendChild(document.createTextNode("Player"))
tr.appendChild(td)
var td = document.createElement('th');
td.appendChild(document.createTextNode("Sport"))
tr.appendChild(td);
var td = document.createElement('th');
td.appendChild(document.createTextNode("Details"))
tr.appendChild(td);
tbdy.appendChild(tr);
for (var variable in my_var_parsed) {
if (my_var_parsed[variable].sports === elem){
var tr = document.createElement('tr');
var td = document.createElement('td');
td.appendChild(document.createTextNode(my_var_parsed[variable].player))
tr.appendChild(td)
var td = document.createElement('td');
td.appendChild(document.createTextNode(my_var_parsed[variable].sports))
tr.appendChild(td);
var td = document.createElement('td');
td.appendChild(document.createTextNode(my_var_parsed[variable].details))
tr.appendChild(td);
tbdy.appendChild(tr);
}
}
tbl.appendChild(tbdy);
console.log(tbl);
$('#player-list').html(tbl);
// console.log('hello');
// console.log(elem);
// if (elem == 'Football'){
// document.getElementById('fball').style.display = 'block';
// document.getElementById('crct').style.display = 'none';
// }
// else{
// document.getElementById('fball').style.display = 'none';
// document.getElementById('crct').style.display = 'block';
// }
}
</script>
<style>
th, td {
padding: 15px;
text-align: left;
}
th {
background-color: #4CAF50;
color: white;
}
tr:hover {background-color: #f5f5f5;}
table, th, td {
border: 1px solid black;
}
</style>
{% endblock %}
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'teachers:quiz_change_list' %}">My Quizzes</a></li>
<li class="breadcrumb-item"><a href="{% url 'teachers:quiz_change' quiz.pk %}">{{ quiz.name }}</a></li>
<li class="breadcrumb-item active" aria-current="page">Add a new question</li>
</ol>
</nav>
<h2 class="mb-3">Add a new question</h2>
<p class="lead">Add first the text of the question. In the next step you will be able to add the possible answers.</p>
<form method="post" novalidate>
{% csrf_token %}
{{ form|crispy }}
<button type="submit" class="btn btn-success">Save</button>
<a href="{% url 'teachers:quiz_change' quiz.pk %}" class="btn btn-outline-secondary" role="button">Nevermind</a>
</form>
{% endblock %}
{% extends 'base.html' %}
{% load crispy_forms_tags crispy_forms_filters %}
{% block content %}
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'teachers:quiz_change_list' %}">My Quizzes</a></li>
<li class="breadcrumb-item"><a href="{% url 'teachers:quiz_change' quiz.pk %}">{{ quiz.name }}</a></li>
<li class="breadcrumb-item active" aria-current="page">{{ question.text }}</li>
</ol>
</nav>
<h2 class="mb-3">{{ question.txt }}</h2>
<form method="post" novalidate>
{% csrf_token %}
{{ formset.management_form }}
{{ form|crispy }}
<div class="card mb-3{% if formset.errors %} border-danger{% endif %}">
<div class="card-header">
<div class="row">
<div class="col-8">
<strong>Answers</strong>
</div>
<div class="col-2">
<strong>Correct?</strong>
</div>
<div class="col-2">
<strong>Delete?</strong>
</div>
</div>
</div>
{% for error in formset.non_form_errors %}
<div class="card-body bg-danger border-danger text-white py-2">{{ error }}</div>
{% endfor %}
<div class="list-group list-group-flush list-group-formset">
{% for form in formset %}
<div class="list-group-item">
<div class="row">
<div class="col-8">
{% for hidden in form.hidden_fields %}{{ hidden }}{% endfor %}
{{ form.text|as_crispy_field }}
{% if form.instance.pk and form.text.value != form.instance.text %}<p class="mb-0 mt-1"><small class="text-muted font-italic"><strong>Old answer:</strong> {{ form.instance.text }}</small></p>{% endif %}
</div>
<div class="col-2">
{{ form.is_correct }}
</div>
<div class="col-2">
{% if form.instance.pk %}
{{ form.DELETE }}
{% endif %}
</div>
</div>
</div>
{% endfor %}
</div>
</div>
<p>
<small class="form-text text-muted">Your question may have at least <strong>2</strong> answers and maximum <strong>10</strong> answers. Select at least one correct answer.</small>
</p>
<button type="submit" class="btn btn-success">Save changes</button>
<a href="{% url 'teachers:quiz_change' quiz.pk %}" class="btn btn-outline-secondary" role="button">Nevermind</a>
<a href="{% url 'teachers:question_delete' quiz.pk question.pk %}" class="btn btn-danger float-right">Delete</a>
</form>
{% endblock %}
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'teachers:quiz_change_list' %}">My Quizzes</a></li>
<li class="breadcrumb-item"><a href="{% url 'teachers:quiz_change' quiz.pk %}">{{ quiz.name }}</a></li>
<li class="breadcrumb-item"><a href="{% url 'teachers:question_change' quiz.pk question.pk %}">{{ question.text }}</a></li>
<li class="breadcrumb-item active" aria-current="page">Confirm deletion</li>
</ol>
</nav>
<h2 class="mb-3">Confirm deletion</h2>
<p class="lead">Are you sure you want to delete the question <strong>"{{ question.text }}"</strong>? There is no going back.</p>
<form method="post">
{% csrf_token %}
<button type="submit" class="btn btn-danger btn-lg">Yes, I'm sure</button>
<a href="{% url 'teachers:question_change' quiz.pk question.pk %}" class="btn btn-outline-secondary btn-lg" role="button">Nevermind</a>
</form>
{% endblock %}
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'teachers:quiz_change_list' %}">My Quizzes</a></li>
<li class="breadcrumb-item active" aria-current="page">Add a new quiz</li>
</ol>
</nav>
<h2 class="mb-3">Add a new quiz</h2>
<div class="row">
<div class="col-md-6 col-sm-8 col-12">
<form method="post" novalidate>
{% csrf_token %}
{{ form|crispy }}
<button type="submit" class="btn btn-success">Save</button>
<a href="{% url 'teachers:quiz_change_list' %}" class="btn btn-outline-secondary" role="button">Nevermind</a>
</form>
</div>
</div>
{% endblock %}
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'teachers:quiz_change_list' %}">My Quizzes</a></li>
<li class="breadcrumb-item active" aria-current="page">{{ quiz.name }}</li>
</ol>
</nav>
<h2 class="mb-3">
{{ quiz.name }}
<a href="{% url 'teachers:quiz_results' quiz.pk %}" class="btn btn-primary float-right">View results</a>
</h2>
<div class="row mb-3">
<div class="col-md-6 col-sm-8 col-12">
<form method="post" novalidate>
{% csrf_token %}
{{ form|crispy }}
<button type="submit" class="btn btn-success">Save changes</button>
<a href="{% url 'teachers:quiz_change_list' %}" class="btn btn-outline-secondary" role="button">Nevermind</a>
<a href="{% url 'teachers:quiz_delete' quiz.pk %}" class="btn btn-danger float-right">Delete</a>
</form>
</div>
</div>
<div class="card">
<div class="card-header">
<div class="row">
<div class="col-10">
<strong>Questions</strong>
</div>
<div class="col-2">
<strong>Answers</strong>
</div>
</div>
</div>
<div class="list-group list-group-flush list-group-formset">
{% for question in questions %}
<div class="list-group-item">
<div class="row">
<div class="col-10">
<a href="{% url 'teachers:question_change' quiz.pk question.pk %}">{{ question.text }}</a>
</div>
<div class="col-2">
{{ question.answers_count }}
</div>
</div>
</div>
{% empty %}
<div class="list-group-item text-center">
<p class="text-muted font-italic mb-0">You haven't created any questions yet. Go ahead and <a href="{% url 'teachers:question_add' quiz.pk %}">add the first question</a>.</p>
</div>
{% endfor %}
</div>
<div class="card-footer">
<a href="{% url 'teachers:question_add' quiz.pk %}" class="btn btn-primary btn-sm">Add question</a>
</div>
</div>
{% endblock %}
{% extends 'base.html' %}
{% block content %}
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item active" aria-current="page">My Quizzes</li>
</ol>
</nav>
<h2 class="mb-3">My Quizzes</h2>
<a href="{% url 'teachers:quiz_add' %}" class="btn btn-primary mb-3" role="button">Add quiz</a>
<div class="card">
<table class="table mb-0">
<thead>
<tr>
<th>Quiz</th>
<th>Subject</th>
<th>Questions</th>
<th>Taken</th>
<th></th>
</tr>
</thead>
<tbody>
{% for quiz in quizzes %}
<tr>
<td class="align-middle"><a href="{% url 'teachers:quiz_change' quiz.pk %}">{{ quiz.name }}</a></td>
<td class="align-middle">{{ quiz.subject.get_html_badge }}</td>
<td class="align-middle">{{ quiz.questions_count }}</td>
<td class="align-middle">{{ quiz.taken_count }}</td>
<td class="text-right">
<a href="{% url 'teachers:quiz_results' quiz.pk %}" class="btn btn-primary">View results</a>
</td>
</tr>
{% empty %}
<tr>
<td class="bg-light text-center font-italic" colspan="5">You haven't created any quiz yet.</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'teachers:quiz_change_list' %}">My Quizzes</a></li>
<li class="breadcrumb-item"><a href="{% url 'teachers:quiz_change' quiz.pk %}">{{ quiz.name }}</a></li>
<li class="breadcrumb-item active" aria-current="page">Confirm deletion</li>
</ol>
</nav>
<h2 class="mb-3">Confirm deletion</h2>
<p class="lead">Are you sure you want to delete the quiz <strong>"{{ quiz.name }}"</strong>? There is no going back.</p>
<form method="post">
{% csrf_token %}
<button type="submit" class="btn btn-danger btn-lg">Yes, I'm sure</button>
<a href="{% url 'teachers:quiz_change' quiz.pk %}" class="btn btn-outline-secondary btn-lg" role="button">Nevermind</a>
</form>
{% endblock %}
{% extends 'base.html' %}
{% load crispy_forms_tags humanize %}
{% block content %}
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'teachers:quiz_change_list' %}">My Quizzes</a></li>
<li class="breadcrumb-item"><a href="{% url 'teachers:quiz_change' quiz.pk %}">{{ quiz.name }}</a></li>
<li class="breadcrumb-item active" aria-current="page">Results</li>
</ol>
</nav>
<h2 class="mb-3">{{ quiz.name }} Results</h2>
<div class="card">
<div class="card-header">
<strong>Taken Quizzes</strong>
<span class="badge badge-pill badge-primary float-right">Average Score: {{ quiz_score.average_score|default_if_none:0.0 }}</span>
</div>
<table class="table mb-0">
<thead>
<tr>
<th>Student</th>
<th>Date</th>
<th>Score</th>
</tr>
</thead>
<tbody>
{% for taken_quiz in taken_quizzes %}
<tr>
<td>{{ taken_quiz.student.user.username }}</td>
<td>{{ taken_quiz.date|naturaltime }}</td>
<td>{{ taken_quiz.score }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<div class="card-footer text-muted">
Total respondents: <strong>{{ total_taken_quizzes }}</strong>
</div>
</div>
{% endblock %}
<h2>Quizzes</h2>
<p class="text-muted">
Subjects:{% for subject in user.student.interests.all %} {{ subject.get_html_badge }}{% endfor %}
<a href="{% url 'player:student_interests' %}"><small>(update interests)</small></a>
</p>
<ul class="nav nav-tabs mb-3">
<li class="nav-item">
<a class="nav-link{% if active == 'new' %} active{% endif %}" href="{% url 'player:quiz_list' %}">New</a>
</li>
<li class="nav-item">
<a class="nav-link{% if active == 'taken' %} active{% endif %}" href="{% url 'player:taken_quiz_list' %}">Taken</a>
</li>
</ul>
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<h2 class="mb-3">Update your interests</h2>
<form method="post" novalidate>
{% csrf_token %}
{{ form|crispy }}
<button type="submit" class="btn btn-success">Save changes</button>
<a href="{% url 'player:quiz_list' %}" class="btn btn-outline-secondary">Nevermind</a>
</form>
{% endblock %}
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<div class="row">
<div class="col-md-8 col-sm-10 col-12">
<h2>Add sports up as a {{ user_type }}</h2>
<button id="addsport">Add Sport</button>
<form method="POST" novalidate action="">
{% csrf_token %}
<div id="container"></div>
<script>
console.log("Hello world!");
// var div1 = '<div>{{ form.details}} </div>';
$("#addsport").click(function () {
console.log("Hello function!");
$("#container").append(' <div>{{ form.details}} </div> <div><select name="sports" required id="id_sports"> <option value="" selected>---------</option> <option value="1">Cricket</option> <option value="2">Football</option></select></div>');
});
</script>
<button type="submit" class="btn btn-success">Submit</button>
</form>
</div>
</div>
{% endblock %}
\ No newline at end of file
{% extends 'base.html' %}
{% block content %}
{% include 'project/player/_header.html' with active='new' %}
<div class="card">
<table class="table mb-0">
<thead>
<tr>
<th>Quiz</th>
<th>Subject</th>
<th>Length</th>
<th></th>
</tr>
</thead>
<tbody>
{% for quiz in quizzes %}
<tr>
<td class="align-middle">{{ quiz.name }}</td>
<td class="align-middle">{{ quiz.subject.get_html_badge }}</td>
<td class="align-middle">{{ quiz.questions_count }} questions</td>
<td class="text-right">
<a href="{% url 'player:take_quiz' quiz.pk %}" class="btn btn-primary">Start quiz</a>
</td>
</tr>
{% empty %}
<tr>
<td class="bg-light text-center font-italic" colspan="4">No quiz matching your interests right now.</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}
{% extends 'base.html' %}
{% load static %}
{% load crispy_forms_tags %}
{% block content %}
{% if messages %}
{% for message in messages %}
<p>{{ message }}</p>
{% endfor %}
{% endif %}
{{sport}}
{{Sport}}
{{sports}}
{{Sports}}
<form method="POST" novalidate action="">
{% csrf_token %}
{{ link_formset.management_form }}
{% for link_form in link_formset %}
<div class="link-formset">
{{ link_form.sports|as_crispy_field}}
{% if link_form.sports.errors %}
{% for error in link_form.sports.errors %}
{{ error|escape }}
{% endfor %}
{% endif %}
{{ link_form.details }}
{% if link_form.details.errors %}
{% for error in link_form.details.errors %}
{{ error|escape }}
{% endfor %}
{% endif %}
</div>
{% endfor %}
<!-- {% if link_formset.non_form_errors %}
{% for error in link_formset.non_form_errors %}
{{ error|escape }}
{% endfor %}
{% endif %} -->
<input type="submit" value="Register Sports" class="button" />
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="{% static 'js/jquery.formset.js' %}"></script>
<script src="{% static 'lib/counterup/counterup.min.js' %}"></script>
<script>
$('.link-formset').formset({
addText: 'add link',
deleteText: 'remove'
});
</script>
</form>
<!-- Include formset plugin - including jQuery dependency -->
{% endblock %}
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<div class="progress mb-3">
<div class="progress-bar" role="progressbar" aria-valuenow="{{ progress }}" aria-valuemin="0" aria-valuemax="100" style="width: {{ progress }}%"></div>
</div>
<h2 class="mb-3">{{ quiz.name }}</h2>
<p class="lead">{{ question.text }}</p>
<form method="post" novalidate>
{% csrf_token %}
{{ form|crispy }}
<button type="submit" class="btn btn-primary">Next →</button>
</form>
{% endblock %}
{% extends 'base.html' %}
{% block content %}
{% include 'project/player/_header.html' with active='taken' %}
<div class="card">
<table class="table mb-0">
<thead>
<tr>
<th>Quiz</th>
<th>Subject</th>
<th>Score</th>
</tr>
</thead>
<tbody>
{% for taken_quiz in taken_quizzes %}
<tr>
<td>{{ taken_quiz.quiz.name }}</td>
<td>{{ taken_quiz.quiz.subject.get_html_badge }}</td>
<td>{{ taken_quiz.score }}</td>
</tr>
{% empty %}
<tr>
<td class="bg-light text-center font-italic" colspan="3">You haven't completed any quiz yet.</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}
{% extends 'base.html' %}
{% load static %}
{% load crispy_forms_tags %}
{% block content %}
{% if messages %}
{% for message in messages %}
<p>{{ message }}</p>
{% endfor %}
{% endif %}
<h3 vspace="100">
Welcome Mr.{{ first_name }}
</h3>
<!--
<table >
<tr>
<th>Player</th>
<th>Sport</th>
<th>Details</th>
</tr>
{% for item in query_result %}
<tr>
<td>{{ item.player }}</td>
<td>{{ item.sports }}</td>
<td>{{ item.details }}</td>
</tr>
{% endfor %}
</table>
-->
<div id="list_managers">
<table >
<tr>
<th>Manager</th>
<th>Sport</th>
<th>Price</th>
</tr>
{% for item in query_result %}
<tr>
<td>{{ item.manager }}</td>
<td>{{ item.sports }}</td>
<td>{{ item.price }}</td>
</tr>
{% endfor %}
</table>
</div>
<script type="text/javascript">
function filluplist(query_result) {
console.log(query_result[0]);
// for (const [key, value] of Object.entries(query_result)) {
// console.log(key, value);
}
function list_dislapy(elem) {
var query = '{{ query_result|escapejs }}';
var my_var_parsed = jQuery.parseJSON(query);
var tbl = document.createElement('table');
var tbdy = document.createElement('tbody');
var tr = document.createElement('tr');
var td = document.createElement('th');
td.appendChild(document.createTextNode("sports"))
tr.appendChild(td)
var td = document.createElement('th');
td.appendChild(document.createTextNode("manager"))
tr.appendChild(td);
var td = document.createElement('th');
td.appendChild(document.createTextNode("price"))
tr.appendChild(td);
tbdy.appendChild(tr);
for (var variable in my_var_parsed) {
if (my_var_parsed[variable].sports === elem){
var tr = document.createElement('tr');
var td = document.createElement('td');
td.appendChild(document.createTextNode(my_var_parsed[variable].sports))
tr.appendChild(td)
var td = document.createElement('td');
td.appendChild(document.createTextNode(my_var_parsed[variable].manager))
tr.appendChild(td);
var td = document.createElement('td');
td.appendChild(document.createTextNode(my_var_parsed[variable].price))
tr.appendChild(td);
tbdy.appendChild(tr);
}
}
tbl.appendChild(tbdy);
console.log(tbl);
$('#player-list').html(tbl);
// console.log('hello');
// console.log(elem);
// if (elem == 'Football'){
// document.getElementById('fball').style.display = 'block';
// document.getElementById('crct').style.display = 'none';
// }
// else{
// document.getElementById('fball').style.display = 'none';
// document.getElementById('crct').style.display = 'block';
// }
}
</script>
<style>
th, td {
padding: 15px;
text-align: left;
}
th {
background-color: #4CAF50;
color: white;
}
tr:hover {background-color: #f5f5f5;}
table, th, td {
border: 1px solid black;
}
</style>
{% endblock %}
"""urls.py
This file contains the code of handling endpoints of urls
Author(s):
Jayaprakash A, Sairam Moghili
Last modified:
22nd November 2019
"""
'''
Changelog::
25-10-19 Added routes for different users
02-11-19 Added routes for player sports registraion
22-11-19 Added routes for auction
'''
from django.urls import include, path
from django.conf.urls import url, include
from .views import project, player, manager
from .views.manager import profile
from .views import auction, auction_online
from .views import start_auction
# from .views.manager.profile
print('profile error')
# urlpatterns = [
# path('', project.home, name='home'),
# path('adminstart/', start_auction.handle_auction_request, name='auction-start'),
# path('player/', include(([
# # path('', player.ProfileView.as_view(), name='player_profile'),
# # path('test/', player.TestView.as_view(), name='player_test'),
# url(r'^$', player.register_for_sports, name='player_profile')
# ], 'project'), namespace='player')),
# path('manager/', include(([
# # path('', player.ProfileView.as_view(), name='player_profile'),
# # path('test/', player.TestView.as_view(), name='player_test'),
# url(r'^$', profile, name='manager_profile'),
# url(r'listofplayers', manager.playerlist, name='manager_profile')
# ], 'project'), namespace='manager')),
# # path('auction/', project.auction, name='auction'),
# # path('auction-test/', include(([
# # path('', player.ProfileView.as_view(), name='player_profile'),
# # # path('test/', player.TestView.as_view(), name='player_test'),
# # url(r'^$', auction.load_page, name='auction2'),
# # url(r'update', auction.update, name='auction-update') ,
# # url(r'sell-player', auction.sell_player, name='auction-sell')
# # ], 'project'), namespace='auction-test')),
# #path('auction_online/', auction_online.auction, name='auction-online'),
# #path('auction_online/', auction_online.auction, name='auction-online'),
# path('auction/',include(([
# url(r'update', auction.update, name='auction-update'),
# url(r'online', auction.load_page, name='auction'),
# url(r'sell-player', auction.sell_player, name='auction-sell'),
# url(r'bidder', auction_online.auction_online, name='auction-online'),
# url(r'getpurse', auction_online.update_purse, name='auction-purse'),
# url(r'update-bid',auction_online.updatebid, name='auction-updatebid')],'project'),namespace='auction-module'))
# #path('increase_counter/',auction_online.increaseCounter,name='Increase-Counter')
# ]
urlpatterns = [
path('', project.home, name='home'),
path('adminstart/', start_auction.handle_auction_request, name='auction-start'),
path('player/', include(([
# path('', player.ProfileView.as_view(), name='player_profile'),
# path('test/', player.TestView.as_view(), name='player_test'),
url(r'^$', player.register_for_sports, name='player_profile'),
url(r'your_managers/', player.managers, name='your-manager')
], 'project'), namespace='player')),
path('manager/', include(([
# path('', player.ProfileView.as_view(), name='player_profile'),
# path('test/', player.TestView.as_view(), name='player_test'),
url(r'^$', profile, name='manager_profile'),
url(r'listofplayers', manager.playerlist, name='manager_profile')
], 'project'), namespace='manager')),
path('auction/', project.auction, name='auction'),
path('auction-test/', include(([
# path('', player.ProfileView.as_view(), name='player_profile'),
# path('test/', player.TestView.as_view(), name='player_test'),
url(r'^$', auction.load_page, name='auction'),
url(r'update', auction.update, name='auction-update') ,
url(r'sell-player', auction.sell_player, name='auction-sell')
], 'project'), namespace='auction-test')),
#path('auction_online/', auction_online.auction, name='auction-online'),
#path('auction_online/', auction_online.auction, name='auction-online'),
path('auction_online/',include(([
url(r'^$', auction_online.auction, name='auction-online'),
url(r'getpurse', auction_online.update_purse, name='auction-purse'),
url(r'update-bid',auction_online.updatebid, name='auction-updatebid')],'project'),namespace='auction-online'))
#path('increase_counter/',auction_online.increaseCounter,name='Increase-Counter')
]
import uuid
import hashlib
def hash_password(password):
salt = uuid.uuid4().hex
return hashlib.sha256(salt.encode() + password.encode()).hexdigest() + ':' + salt
def check_password(hashed_password, user_password):
password, salt = hashed_password.split(':')
return password == hashlib.sha256(salt.encode() + user_password.encode()).hexdigest()
"""auction.py
The basic views code for auction
Author(s):
Jayaprakash A
Last modified:
25th November 2019
"""
from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404, redirect, render
import threading
from ..logger import Log
from ..models import Player, User, PlayerSport, AuctionUpdate, Sport, ManagerPurse
import time
from django.http import HttpResponse
from django.template import Context,loader
from django.http import JsonResponse
import requests
from urllib.parse import urlparse, parse_qs
logger = Log('auction.py')
def sell_player(request):
query_result = request.__dict__['environ']['QUERY_STRING']
query = parse_qs(query_result)
logger.info('sell_player', query)
player_name = query['player_name'][0]
sports_name = query['sports'][0]
sports_name = query['manager'][0]
# val = request.json()
# logger.info('sell_player', 'Values ', val)
player_list = Player.objects.all()
player_object = None
for player in player_list:
if player.first_name + ' ' + player.last_name == player_name:
player_object = player
sports_object = Sport.objects.filter(name=sports_name)[0]
player_details = AuctionUpdate.objects.filter(is_sold=False)[0]
purse_money = ManagerPurse.objects.filter(manager=
player_details.manager, sports=player_details.sports)[0].purse
logger.debug('sell_player', 'Deducting purse_money', purse_money, player_details.price)
ManagerPurse.objects.filter(manager=
player_details.manager, sports=player_details.sports)[0].update(purse=purse_money-player_details.price)
AuctionUpdate.objects.filter(player=
player_object, sports=sports_object).update(is_sold=True)
return JsonResponse({})
# AuctionUpdate.objects.filter(player=
# player_details.player, sports=player_details.sports).update(is_sold=True)
def load_page(request):
"""
Allows a user to update their own profile.
"""
if request.user.is_player:
return render(request, 'templates/404.html', {})
# managerer_id = request.user.id
# logger.debug('load_page', 'User details', request.user)
# if request.user.is_authenticated:
# logger.debug('load_page', 'authenticated', request.user.id)
# else:
# logger.debug('load_page', 'Something is fishy')
player_details = AuctionUpdate.objects.filter(is_sold=False)[0]
# update_timer()
logger.debug('load_page', player_details)
# thread = threading.Thread(target = sell_player)
# thread.start()
player_profile = PlayerSport.objects.filter(player=player_details.player,
sports=player_details.sports)[0]
context = {
'highest_bid_manager' : str(player_details.manager),
'player_name': player_details.player,
'player_bid_amount': player_details.price,
'player_profile': player_profile.details,
'sports': player_details.sports
}
logger.info('player_sold', player_details)
logger.debug('load_page', 'test check')
# player_details = AuctionUpdate.objects.filter(is_sold=False)[0]
return HttpResponse(loader.get_template('project/auction.html').render(context))
# return render(request, 'project/auction.html', context)
def update(request):
# logger.debug('update', 'eureka update is being called')
try:
player_details = AuctionUpdate.objects.filter(is_sold=False)[0]
except Exception as e:
context = {
'auction_finished': 'True'
}
return JsonResponse(context)
# print('Manager',str(player_details.manager))
player_profile = PlayerSport.objects.filter(player=player_details.player,
sports=player_details.sports)[0]
context = {
'player_name': str(player_details.player),
'highest_bid_manager' : str(player_details.manager),
'player_bid_amount': int(player_details.price),
'player_bid_time': int(player_details.time_left),
'player_profile': player_profile.details,
'sports': str(player_details.sports)
}
# logger.debug('update', player_details)
# timer = threading.Timer(15.0, sell_player, [player_details])
# timer.start()
# time.sleep(15)
# logger.info('update', player_details)
# logger.debug('update', context)
# player_details = AuctionUpdate.objects.filter(is_sold=False)[0]
return JsonResponse(context)
"""project.py
The basic views code for any user type
Author(s):
Jayaprakash A
Last modified:
3rd November 2019
"""
from django.shortcuts import redirect, render
from django.views.generic import TemplateView
from django.db.models import F
from ..models import Player, User, PlayerSport, AuctionUpdate, Sport, TeamManager, ManagerPurse
from urllib.parse import urlparse, parse_qs
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
from ..logger import Log
import jsonpickle
logger = Log('auction_online.py')
def auction(request):
player_details = AuctionUpdate.objects.filter(is_sold=False)[0]
manager_name = request.user.username
manager_list = TeamManager.objects.all()
manager_object = None
for manager in manager_list:
logger.debug('auction_online',manager.first_name_one + manager.last_name_one, manager_name)
if manager.first_name_one + manager.last_name_one in manager_name:
manager_object = manager
purse_amount = ManagerPurse.objects.filter(manager=manager_object,
sports = player_details.sports)[0]
print('Amount', purse_amount.purse)
context = {
'first_name': manager_name.split('@@@')[0],
'purse': purse_amount.purse
#'sports': sports,
#'sport_names': sport_names,
}
return render(request, 'project/auction_online.html', context)
def updatebid(request):
query_result = request.__dict__['environ']['QUERY_STRING']
query = parse_qs(query_result)
print("hello", query)
logger.info('updatebid', query['manager_name'][0])
manager_name = query['manager_name'][0]
player_details = AuctionUpdate.objects.filter(is_sold=False)[0]
# val = request.json()
# logger.info('sell_player', 'Values ', val)
manager_list = TeamManager.objects.all()
manager_object = None
for manager in manager_list:
logger.debug('updatebid',manager.first_name_one + manager.last_name_one, manager_name)
if manager.first_name_one + manager.last_name_one in manager_name:
manager_object = manager
# print('manager', manager_object)
# sports_object = Sport.objects.filter(name=sports_name)[0]
current_price = AuctionUpdate.objects.filter(player=player_details.player, sports=player_details.sports)[0].price
print('Updated manager', manager_object.first_name_one)
AuctionUpdate.objects.filter(player=player_details.player, sports=player_details.sports).update(price=current_price+100, manager=manager_object, time_left=30)
logger.debug('update', AuctionUpdate.price)
return JsonResponse({})
def update_purse(request):
manager_name = request.user.username.split('@@@')[0]
manager_list = TeamManager.objects.all()
manager_object = None
for manager in manager_list:
# logger.debug('update_purse',manager.first_name_one + manager.last_name_one, manager_name)
if manager.first_name_one + manager.last_name_one in manager_name:
manager_object = manager
player_details = AuctionUpdate.objects.filter(is_sold=False)[0]
# purse_amount = ManagerPurse.objects.filter(manager=manager_object,
# sports = player_details.sports)[0]
purse = ManagerPurse.objects.filter(manager=manager_object, sports =player_details.sports)[0]
logger.info('update_purse', manager_object, player_details.sports, purse.purse)
context = {
'current_purse': purse.purse
}
return JsonResponse(context)
from django.contrib import messages
from django.contrib.auth import login
from django.contrib.auth.decorators import login_required
from django.db import transaction
from django.db.models import Avg, Count
from django.forms import inlineformset_factory
from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse, reverse_lazy
from django.utils.decorators import method_decorator
from django.views.generic import (CreateView, DeleteView, DetailView, ListView,
UpdateView)
from ..decorators import manager_required
from ..forms import ManagerSignUpForm, ManagerLoginForm
from ..models import TeamManager, User, PlayerSport, Sport, AuctionUpdate
from django.db import models
import jsonpickle
from ..logger import Log
logger = Log('manager.py')
class ManagerSignUpView(CreateView):
"""The template to be used for manager signup view
Arguments:
CreateView
"""
model = User
form_class = ManagerSignUpForm
template_name = 'registration/signup_form.html'
def get_context_data(self, **kwargs):
kwargs['user_type'] = 'manager'
kwargs['reg_date'] = '10th Novemeber 2019'
return super().get_context_data(**kwargs)
def form_valid(self, form):
user = form.save()
login(self.request, user)
return redirect('/')
class ManagerLoginView(CreateView):
"""The template to be used for manager login view
Arguments:
CreateView
"""
model = User
form_class = ManagerLoginForm
template_name = 'registration/login_form.html'
def get_context_data(self, **kwargs):
kwargs['user_type'] = 'manager'
return super().get_context_data(**kwargs)
def form_valid(self, form):
# logger.debug('PlayerLoginView', 'Form', form.email, form.password)
# login(self.request, user)
user_id = form.form_valid()
if user_id == -1:
logger.debug('ManagerLoginView', 'Unsuccessful login')
else:
user = User.objects.get(id=user_id, is_manager=True)
login(self.request, user)
logger.debug('ManagerLoginView', 'Eureka login succesful')
return redirect('manager:manager_profile')
@login_required
def playerlist(request):
"""
Allows a user to update their own profile.
"""
manager_name = request.user.username.split('@@@')[0]
manager_list = TeamManager.objects.all()
manager_object = None
for manager in manager_list:
logger.debug('updatebid',manager.first_name_one + manager.last_name_one, manager_name)
if manager.first_name_one + manager.last_name_one in manager_name:
manager_object = manager
query_result = AuctionUpdate.objects.filter(manager=manager_object).order_by('sports')
print('query_result')
sports=Sport.objects.order_by('name')
query_result1 = {}
for i in range(len(query_result)):
if query_result[i].price > 0:
query_res = {}
query_res['player'] = str(query_result[i].player)
print(str(query_result[i].sports))
query_res['sports'] = str(query_result[i].sports)
query_res['price'] = str(query_result[i].price)
query_result1[i] = query_res
#sport_names=PlayerSport.objects.filter(sports="Cricket")
print(query_result1)
logger.debug('profile', query_result)
#logger.debug('profile', query_result[0].sports)
name = request.user.username
context = {
'query_result': jsonpickle.encode(query_result1),
'first_name': name.split('@@@')[0],
'last_name': name,
'sports': sports,
#'sport_names': sport_names,
}
return render(request, 'project/manager/playerlist.html', context)
@login_required
def profile(request):
"""
Allows a user to update their own profile.
"""
query_result = PlayerSport.objects.order_by('sports')
print('query_result')
sports=Sport.objects.order_by('name')
query_result1 = {}
for i in range(len(query_result)):
query_res = {}
query_res['sports'] = str(query_result[i].sports)
print(str(query_result[i].sports))
query_res['player'] = str(query_result[i].player)
query_res['details'] = str(query_result[i].details)
query_result1[i] = query_res
#sport_names=PlayerSport.objects.filter(sports="Cricket")
print(query_result1)
logger.debug('profile', query_result)
logger.debug('profile', query_result[0].sports)
name = request.user.username
context = {
'query_result': jsonpickle.encode(query_result1),
'first_name': name.split('@@@')[0],
'last_name': name,
'sports': sports,
#'sport_names': sport_names,
}
return render(request, 'project/manager/profile.html', context)
from django.contrib import messages
from django.contrib.auth import login
from django.contrib.auth.decorators import login_required
from django.db import transaction
from django.db.models import Count
from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse_lazy
from django.utils.decorators import method_decorator
from django.views.generic import CreateView, ListView, UpdateView
from ..decorators import player_required
from ..forms import PlayerSignUpForm, PlayerLoginForm, PlayerSportForm
from ..models import Player, User, PlayerSport, AuctionUpdate, Sport
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.urls import reverse
from django.db import IntegrityError, transaction
from django.forms.formsets import formset_factory
from django.shortcuts import redirect, render
from ..forms import LinkForm, BaseLinkFormSet
from ..logger import Log
import jsonpickle
logger = Log('player.py')
class PlayerLoginView(CreateView):
"""The template to be used for player login view
Arguments:
CreateView
"""
model = User
form_class = PlayerLoginForm
template_name = 'registration/login_form.html'
def get_context_data(self, **kwargs):
kwargs['user_type'] = 'player'
return super().get_context_data(**kwargs)
def form_valid(self, form):
# logger.debug('PlayerLoginView', 'Form', form.email, form.password)
# login(self.request, user)
user_id = form.form_valid()
if user_id == -1:
logger.debug('PlayerLoginView', 'Unsuccessful login')
else:
user = User.objects.get(id=user_id, is_player=True)
login(self.request, user)
logger.debug('PlayerLoginView', 'Eureka login succesful')
return redirect('player:player_profile')
class PlayerSignUpView(CreateView):
"""The template to be used for player signup view
Arguments:
CreateView
"""
model = User
form_class = PlayerSignUpForm
template_name = 'registration/signup_form.html'
def get_context_data(self, **kwargs):
kwargs['user_type'] = 'player'
kwargs['reg_date'] = '10th Novemeber 2019'
return super().get_context_data(**kwargs)
def form_valid(self, form):
logger.debug('PlayerSignUpView', 'Form', form)
user = form.save()
login(self.request, user)
logger.debug('PlayerSignUpView', 'Eureka inserted')
return redirect('player:player_profile')
@method_decorator([login_required], name='dispatch')
class ProfileView(CreateView):
logger.debug('ProfileView', 'profile view')
model = User
form_class = PlayerSportForm
template_name = 'project/player/postlogin.html'
def get_object(self):
return self.request.user
def get_context_data(self, **kwargs):
kwargs['user_type'] = 'player'
return super().get_context_data(**kwargs)
def form_valid(self, form):
logger.debug('ProfileView', 'Form', form)
player = self.get_object()
logger.debug('ProfileView', 'Extract player id',player, player.id)
user = form.save(player.id)
# login(self.request, user)
# logger.debug('ProfileView', 'Eureka inserted')
return redirect('player:player_profile')
@login_required
def register_for_sports(request):
"""
Allows a user to update their own profile.
"""
if request.user.is_manager:
return render(request, 'templates/404.html', {})
player_id = request.user.id
logger.debug('register_for_sports', 'User details', request.user)
if request.user.is_authenticated:
logger.debug('register_for_sports', 'authenticated', request.user.id)
else:
logger.debug('register_for_sports', 'Someting is fishy')
# Create the formset, specifying the form and formset we want to use.
LinkFormSet = formset_factory(LinkForm, formset=BaseLinkFormSet)
# Get our existing link data for this user. This is used as initial data.
# user_links = UserLink.objects.filter(user=user).order_by('anchor')
user_links = []
link_data = [{'anchor': l.anchor, 'url': l.url}
for l in user_links]
if request.method == 'POST':
logger.debug('register_for_sports', 'testing sections')
link_formset = LinkFormSet(request.POST)
if link_formset.is_valid():
logger.debug('register_for_sports', 'Valid set')
# Now save the data for each form in the formset
new_links = []
for link_form in link_formset:
sports = link_form.cleaned_data.get('sports')
details = link_form.cleaned_data.get('details')
if sports and details:
player = Player.objects.get(
user_id = player_id,
)
playersport = PlayerSport.objects.create(
details = details,
sports = sports,
player = player)
# new_links.append(UserLink(user=user, anchor=anchor, url=url))
else:
link_formset = LinkFormSet(initial=link_data)
context = {
'link_formset': link_formset,
}
return render(request, 'project/player/register_sports.html', context)
@login_required
def managers(request):
"""
Allows a user to update their own profile.
"""
player_name = request.user.username.split('@@@')[0]
player_list = Player.objects.all()
player_object = None
for player in player_list:
logger.debug('updatebid',player.first_name + player.last_name, player_name)
if player.first_name + player.last_name in player_name:
player_object = player
query_result = AuctionUpdate.objects.filter(player=player_object).order_by('sports')
print('query_result')
# sports=Sport.objects.order_by('name')
query_result1 = {}
for i in range(len(query_result)):
# if query_result[i].name == player_name:
query_res = {}
query_res['sports'] = str(query_result[i].sports)
# print(str(query_result[i].sports))
query_res['manager'] = str(query_result[i].manager)
query_res['price'] = str(query_result[i].price)
query_result1[i] = query_res
#sport_names=PlayerSport.objects.filter(sports="Cricket")
print(query_result1)
logger.debug('profile', query_result)
logger.debug('profile', query_result[0].sports)
name = request.user.username
context = {
'query_result':query_result,
'first_name': name.split('@@@')[0],
# 'last_name': name,
# 'sports': sports,
#'sport_names': sport_names,
}
return render(request, 'project/player/your_managers.html', context)
"""project.py
The basic views code for any user type
Author(s):
Jayaprakash A
Last modified:
3rd November 2019
"""
from django.shortcuts import redirect, render
from django.views.generic import TemplateView
from ..logger import Log
logger = Log('project.py')
class LoginView(TemplateView):
"""The template to be used for login view
Arguments:
TemplateView {[string]} -- The html page location to be redirected to
"""
template_name = 'registration/login.html'
class SignUpView(TemplateView):
"""The template to be used for login view
Arguments:
TemplateView {[string]} -- The html page location to be redirected to
"""
template_name = 'registration/signup.html'
def get_context_data(self, **kwargs):
"""Pass some information to the html page
Returns:
context -- Contains details required for the html page
"""
logger.debug('SignUpView', 'getting context')
context = {
'reg_date': '10th Novemeber 2019',
}
return context
def home(request):
if request.user.is_authenticated:
if request.user.is_manager:
return redirect('manager/')
else:
return redirect('player/')
return render(request, 'project/home.html')
def auction(request):
if request.user.is_authenticated:
if request.user.is_manager:
return render(request, 'project/auction.html')
# return render(request, 'project/home.html')
\ No newline at end of file
# from django.contrib import messages
# from django.contrib.auth import login
# from django.contrib.auth.decorators import login_required
# from django.db import transaction
# from django.db.models import Count
# from django.shortcuts import get_object_or_404, redirect, render
# from django.urls import reverse_lazy
# from django.utils.decorators import method_decorator
# from django.views.generic import CreateView, ListView, UpdateView
# from ..decorators import student_required
# from ..forms import sportsForm
# from ..models import Sport, User
# from ..logger import Log
# loggger = Log('sports.py')
# class AddSportView(TemplateView):
# model = User
# form_class = PlayerSignUpForm
# template_name = 'registration/sports.html'
# def get_context_data(self, **kwargs):
# kwargs['user_type'] = 'player'
# return super().get_context_data(**kwargs)
# def form_valid(self, form):
# logger.debug('AddSportView', 'Form', form)
# user = form.save()
# # login(self.request, user)
# logger.debug('AddSportView', 'Eureka inserted')
# return redirect('/')
# # @method_decorator([login_required, student_required], name='dispatch')
# # class StudentInterestsView(UpdateView):
# # model = Student
# # form_class = StudentInterestsForm
# # template_name = 'classroom/students/interests_form.html'
# # success_url = reverse_lazy('students:quiz_list')
# #
# # def get_object(self):
# # return self.request.user.student
# #
# # def form_valid(self, form):
# # messages.success(self.request, 'Interests updated with success!')
# # return super().form_valid(form)
# #
# #
# # @method_decorator([login_required, student_required], name='dispatch')
# # class QuizListView(ListView):
# # model = Quiz
# # ordering = ('name', )
# # context_object_name = 'quizzes'
# # template_name = 'classroom/students/quiz_list.html'
# #
# # def get_queryset(self):
# # student = self.request.user.student
# # student_interests = student.interests.values_list('pk', flat=True)
# # taken_quizzes = student.quizzes.values_list('pk', flat=True)
# # queryset = Quiz.objects.filter(subject__in=student_interests) \
# # .exclude(pk__in=taken_quizzes) \
# # .annotate(questions_count=Count('questions')) \
# # .filter(questions_count__gt=0)
# # return queryset
# #
# #
# # @method_decorator([login_required, student_required], name='dispatch')
# # class TakenQuizListView(ListView):
# # model = TakenQuiz
# # context_object_name = 'taken_quizzes'
# # template_name = 'classroom/students/taken_quiz_list.html'
# #
# # def get_queryset(self):
# # queryset = self.request.user.student.taken_quizzes \
# # .select_related('quiz', 'quiz__subject') \
# # .order_by('quiz__name')
# # return queryset
"""start_auction.py
The basic views code for auction
Author(s):
Jayaprakash A
Last modified:
25th November 2019
"""
import threading
from django.shortcuts import redirect, render
from ..logger import Log
from ..models import Player, PlayerSport, AuctionUpdate, Sport, TeamManager, ManagerPurse
from django.contrib.admin.views.decorators import staff_member_required
logger = Log('start_auction.py')
def insert_players():
AuctionUpdate.objects.all().delete()
player_sports_list = PlayerSport.objects.all()
for player_sport in player_sports_list:
AuctionUpdate.objects.create(manager=TeamManager.objects.filter()[0],
sports = player_sport.sports,
price = 0,
player = player_sport.player,
is_sold = False,
time_left = 30,
)
def insert_purse():
ManagerPurse.objects.all().delete()
manager_list = TeamManager.objects.all()
sports_list = Sport.objects.all()
for manager in manager_list:
for sports in sports_list:
ManagerPurse.objects.create(manager=manager,
sports = sports,
purse = 10000
)
def update_timer():
threading.Timer(1.0, update_timer).start()
player_details = AuctionUpdate.objects.filter(is_sold=False)[0]
time = player_details.time_left
if time == 0:
# AuctionUpdate.objects.filter(player=
# player_details.player, sports=player_details.sports).update(is_sold=True)
player_list = Player.objects.all()
# player_object = None
# for player in player_list:
# if player.first_name + ' ' + player.last_name == player_name:
# player_object = player
# sports_object = Sport.objects.filter(name=sports_name)[0]
# player_details = AuctionUpdate.objects.filter(is_sold=False)[0]
purse_money = ManagerPurse.objects.filter(manager=
player_details.manager, sports=player_details.sports)[0].purse
logger.debug('update_timer', 'Deducting purse_money', purse_money, player_details.price)
ManagerPurse.objects.filter(manager=
player_details.manager, sports=player_details.sports).update(purse=purse_money-player_details.price)
AuctionUpdate.objects.filter(player=
player_details.player, sports=player_details.sports).update(is_sold=True)
logger.debug('update_timer', 'Sold status changed')
else:
AuctionUpdate.objects.filter(player=
player_details.player, sports=player_details.sports).update(time_left=time-1)
@staff_member_required
def handle_auction_request(request):
insert_players()
insert_purse()
update_timer()
return render(request, 'project/auction_start.html', {})
certifi==2019.9.11
chardet==3.0.4
coreapi==2.3.3
coreschema==0.0.4
Django==2.2.6
django-crispy-forms==1.8.0
django-rest-swagger==2.2.0
djangorestframework==3.10.3
idna==2.8
itypes==1.1.0
Jinja2==2.10.3
jsonpickle==1.2
MarkupSafe==1.1.1
openapi-codec==1.3.2
pytz==2019.3
requests==2.22.0
simplejson==3.16.0
sqlparse==0.3.0
uritemplate==3.0.0
urllib3==1.25.6
Fully working PHP/AJAX contact form is available in the pro version.
You can buy it from: https://bootstrapmade.com/newbiz-bootstrap-business-template/
jQuery(document).ready(function($) {
"use strict";
//Contact
$('form.contactForm').submit(function() {
var f = $(this).find('.form-group'),
ferror = false,
emailExp = /^[^\s()<>@,;:\/]+@\w[\w\.-]+\.[a-z]{2,}$/i;
f.children('input').each(function() { // run all inputs
var i = $(this); // current input
var rule = i.attr('data-rule');
if (rule !== undefined) {
var ierror = false; // error flag for current input
var pos = rule.indexOf(':', 0);
if (pos >= 0) {
var exp = rule.substr(pos + 1, rule.length);
rule = rule.substr(0, pos);
} else {
rule = rule.substr(pos + 1, rule.length);
}
switch (rule) {
case 'required':
if (i.val() === '') {
ferror = ierror = true;
}
break;
case 'minlen':
if (i.val().length < parseInt(exp)) {
ferror = ierror = true;
}
break;
case 'email':
if (!emailExp.test(i.val())) {
ferror = ierror = true;
}
break;
case 'checked':
if (! i.is(':checked')) {
ferror = ierror = true;
}
break;
case 'regexp':
exp = new RegExp(exp);
if (!exp.test(i.val())) {
ferror = ierror = true;
}
break;
}
i.next('.validation').html((ierror ? (i.attr('data-msg') !== undefined ? i.attr('data-msg') : 'wrong Input') : '')).show('blind');
}
});
f.children('textarea').each(function() { // run all inputs
var i = $(this); // current input
var rule = i.attr('data-rule');
if (rule !== undefined) {
var ierror = false; // error flag for current input
var pos = rule.indexOf(':', 0);
if (pos >= 0) {
var exp = rule.substr(pos + 1, rule.length);
rule = rule.substr(0, pos);
} else {
rule = rule.substr(pos + 1, rule.length);
}
switch (rule) {
case 'required':
if (i.val() === '') {
ferror = ierror = true;
}
break;
case 'minlen':
if (i.val().length < parseInt(exp)) {
ferror = ierror = true;
}
break;
}
i.next('.validation').html((ierror ? (i.attr('data-msg') != undefined ? i.attr('data-msg') : 'wrong Input') : '')).show('blind');
}
});
if (ferror) return false;
else var str = $(this).serialize();
var action = $(this).attr('action');
if( ! action ) {
action = 'contactform/contactform.php';
}
$.ajax({
type: "POST",
url: action,
data: str,
success: function(msg) {
// alert(msg);
if (msg == 'OK') {
$("#sendmessage").addClass("show");
$("#errormessage").removeClass("show");
$('.contactForm').find("input, textarea").val("");
} else {
$("#sendmessage").removeClass("show");
$("#errormessage").addClass("show");
$('#errormessage').html(msg);
}
}
});
return false;
});
});
.logo {
font-family: 'Clicker Script', cursive;
}
.logo a {
color: #212529;
text-decoration: none;
}
footer {
left: 0;
bottom: 0;
width: 100%;
background-color: red;
color: white;
text-align: center;
}
footer a {
color: #212529;
}
.list-group-formset label {
display: none;
}
.list-group-formset .form-group,
.list-group-formset .invalid-feedback {
margin-bottom: 0;
}
.list-group-formset .form-control {
padding: .25rem .5rem;
font-size: .875rem;
line-height: 1.5;
border-radius: .2rem;
}
.btn-student {
color: #fff;
background-color: #91afb6;
border-color: #91afb6;
}
.btn-student:hover,
.btn-student:active {
color: #fff;
background-color: #608993;
border-color: #608993;
}
.btn-teacher {
color: #fff;
background-color: #8980a5;
border-color: #8980a5;
}
.btn-teacher:hover,
.btn-teacher:active {
color: #fff;
background-color: #66598B;
border-color: #66598B;
}
.has-danger .radio,
.has-danger .checkbox {
color: #dc3545;
}
.has-danger .invalid-feedback {
display: block;
}
\ No newline at end of file
.register{
background: -webkit-linear-gradient(left, #3931af, #00c6ff);
margin-top: 3%;
padding: 3%;
}
.register-left{
text-align: center;
color: #fff;
margin-top: 4%;
}
.register-left input{
border: none;
border-radius: 1.5rem;
padding: 2%;
width: 60%;
background: #f8f9fa;
font-weight: bold;
color: #383d41;
margin-top: 30%;
margin-bottom: 3%;
cursor: pointer;
}
.register-right{
background: #f8f9fa;
border-top-left-radius: 10% 50%;
border-bottom-left-radius: 10% 50%;
}
.register-left img{
margin-top: 15%;
margin-bottom: 5%;
width: 25%;
-webkit-animation: mover 2s infinite alternate;
animation: mover 1s infinite alternate;
}
@-webkit-keyframes mover {
0% { transform: translateY(0); }
100% { transform: translateY(-20px); }
}
@keyframes mover {
0% { transform: translateY(0); }
100% { transform: translateY(-20px); }
}
.register-left p{
font-weight: lighter;
padding: 12%;
margin-top: -9%;
}
.register .register-form{
padding: 10%;
margin-top: 10%;
}
.btnRegister{
float: right;
margin-top: 10%;
border: none;
border-radius: 1.5rem;
padding: 2%;
background: #0062cc;
color: #fff;
font-weight: 600;
width: 50%;
cursor: pointer;
}
.register .nav-tabs{
margin-top: 3%;
border: none;
background: #0062cc;
border-radius: 1.5rem;
width: 28%;
float: right;
}
.register .nav-tabs .nav-link{
padding: 2%;
height: 34px;
font-weight: 600;
color: #fff;
border-top-right-radius: 1.5rem;
border-bottom-right-radius: 1.5rem;
}
.register .nav-tabs .nav-link:hover{
border: none;
}
.register .nav-tabs .nav-link.active{
width: 100px;
color: #0062cc;
border: 2px solid #0062cc;
border-top-left-radius: 1.5rem;
border-bottom-left-radius: 1.5rem;
}
.register-heading{
text-align: center;
margin-top: 8%;
margin-bottom: -15%;
color: #495057;
}
\ No newline at end of file
body {
background-color: #b0aac2;
}
body {
background-color: #c2d4d8;
}
The scss source files are available in the pro version.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment