mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-03-04 11:08:24 +00:00
Merge branch 'hotfixes'
This commit is contained in:
@@ -188,7 +188,7 @@ TEMPLATE_CONTEXT_PROCESSORS = (
|
|||||||
|
|
||||||
# Static files (CSS, JavaScript, Images)
|
# Static files (CSS, JavaScript, Images)
|
||||||
# https://docs.djangoproject.com/en/1.7/howto/static-files/
|
# https://docs.djangoproject.com/en/1.7/howto/static-files/
|
||||||
|
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'
|
||||||
STATIC_URL = '/static/'
|
STATIC_URL = '/static/'
|
||||||
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
|
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
|
||||||
STATIC_DIRS = (
|
STATIC_DIRS = (
|
||||||
|
|||||||
66
RIGS/migrations/0023_auto_20150529_0048.py
Normal file
66
RIGS/migrations/0023_auto_20150529_0048.py
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import models, migrations
|
||||||
|
import django.core.validators
|
||||||
|
import django.contrib.auth.models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('RIGS', '0022_auto_20150424_2104'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='profile',
|
||||||
|
options={'permissions': (('view_profile', 'Can view Profile'),)},
|
||||||
|
),
|
||||||
|
migrations.AlterModelManagers(
|
||||||
|
name='profile',
|
||||||
|
managers=[
|
||||||
|
('objects', django.contrib.auth.models.UserManager()),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='event',
|
||||||
|
name='collector',
|
||||||
|
field=models.CharField(max_length=255, null=True, verbose_name=b'collected by', blank=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='organisation',
|
||||||
|
name='email',
|
||||||
|
field=models.EmailField(max_length=254, null=True, blank=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='person',
|
||||||
|
name='email',
|
||||||
|
field=models.EmailField(max_length=254, null=True, blank=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='profile',
|
||||||
|
name='email',
|
||||||
|
field=models.EmailField(max_length=254, verbose_name='email address', blank=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='profile',
|
||||||
|
name='groups',
|
||||||
|
field=models.ManyToManyField(related_query_name='user', related_name='user_set', to='auth.Group', blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', verbose_name='groups'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='profile',
|
||||||
|
name='last_login',
|
||||||
|
field=models.DateTimeField(null=True, verbose_name='last login', blank=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='profile',
|
||||||
|
name='username',
|
||||||
|
field=models.CharField(error_messages={'unique': 'A user with that username already exists.'}, max_length=30, validators=[django.core.validators.RegexValidator('^[\\w.@+-]+$', 'Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters.', 'invalid')], help_text='Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.', unique=True, verbose_name='username'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='venue',
|
||||||
|
name='email',
|
||||||
|
field=models.EmailField(max_length=254, null=True, blank=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -14,6 +14,7 @@ from django.core.urlresolvers import reverse_lazy
|
|||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
# Create your models here.
|
# Create your models here.
|
||||||
|
@python_2_unicode_compatible
|
||||||
class Profile(AbstractUser):
|
class Profile(AbstractUser):
|
||||||
initials = models.CharField(max_length=5, unique=True, null=True, blank=False)
|
initials = models.CharField(max_length=5, unique=True, null=True, blank=False)
|
||||||
phone = models.CharField(max_length=13, null=True, blank=True)
|
phone = models.CharField(max_length=13, null=True, blank=True)
|
||||||
@@ -37,6 +38,18 @@ class Profile(AbstractUser):
|
|||||||
def name(self):
|
def name(self):
|
||||||
return self.get_full_name() + ' "' + self.initials + '"'
|
return self.get_full_name() + ' "' + self.initials + '"'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def latest_events(self):
|
||||||
|
return self.event_mic.order_by('-start_date').select_related('person', 'organisation', 'venue', 'mic')
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
permissions = (
|
||||||
|
('view_profile', 'Can view Profile'),
|
||||||
|
)
|
||||||
|
|
||||||
class RevisionMixin(object):
|
class RevisionMixin(object):
|
||||||
@property
|
@property
|
||||||
def last_edited_at(self):
|
def last_edited_at(self):
|
||||||
@@ -265,7 +278,7 @@ class Event(models.Model, RevisionMixin):
|
|||||||
payment_method = models.CharField(max_length=255, blank=True, null=True)
|
payment_method = models.CharField(max_length=255, blank=True, null=True)
|
||||||
payment_received = models.CharField(max_length=255, blank=True, null=True)
|
payment_received = models.CharField(max_length=255, blank=True, null=True)
|
||||||
purchase_order = models.CharField(max_length=255, blank=True, null=True, verbose_name='PO')
|
purchase_order = models.CharField(max_length=255, blank=True, null=True, verbose_name='PO')
|
||||||
collector = models.CharField(max_length=255, blank=True, null=True, verbose_name='Collected by')
|
collector = models.CharField(max_length=255, blank=True, null=True, verbose_name='collected by')
|
||||||
|
|
||||||
# Calculated values
|
# Calculated values
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
/* Welcome to Compass. Use this file to write IE specific override styles.
|
|
||||||
* Import this file using the following HTML or equivalent:
|
|
||||||
* <!--[if IE]>
|
|
||||||
* <link href="/stylesheets/ie.css" media="screen, projection" rel="stylesheet" type="text/css" />
|
|
||||||
* <![endif]--> */
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -377,7 +377,7 @@ $navbar-inverse-bg: #222 !default;
|
|||||||
$navbar-inverse-border: darken($navbar-inverse-bg, 10%) !default;
|
$navbar-inverse-border: darken($navbar-inverse-bg, 10%) !default;
|
||||||
|
|
||||||
// Inverted navbar links
|
// Inverted navbar links
|
||||||
$navbar-inverse-link-color: $gray-light !default;
|
$navbar-inverse-link-color: lighten($gray-light, 20%) !default;
|
||||||
$navbar-inverse-link-hover-color: #fff !default;
|
$navbar-inverse-link-hover-color: #fff !default;
|
||||||
$navbar-inverse-link-hover-bg: transparent !default;
|
$navbar-inverse-link-hover-bg: transparent !default;
|
||||||
$navbar-inverse-link-active-color: $navbar-inverse-link-hover-color !default;
|
$navbar-inverse-link-active-color: $navbar-inverse-link-hover-color !default;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
{% load to_class_name from filters %}
|
{% load to_class_name from filters %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% if request.is_ajax %}
|
|
||||||
<div class="list-group-item">
|
<div class="list-group-item">
|
||||||
<div class="media">
|
<div class="media">
|
||||||
{% for version in object_list %}
|
{% for version in object_list %}
|
||||||
@@ -19,9 +19,11 @@
|
|||||||
<div class="media">
|
<div class="media">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div class="media-left">
|
<div class="media-left">
|
||||||
<a href="#">
|
{% if version.revision.user %}
|
||||||
|
<a href="{% url 'profile_detail' pk=version.revision.user.pk %}" class="modal-href">
|
||||||
<img class="media-object img-rounded" src="{{ version.revision.user.profile_picture}}" />
|
<img class="media-object img-rounded" src="{{ version.revision.user.profile_picture}}" />
|
||||||
</a>
|
</a>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="media-body">
|
<div class="media-body">
|
||||||
<h5>{{ version.revision.user.name }}
|
<h5>{{ version.revision.user.name }}
|
||||||
@@ -45,5 +47,5 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -109,7 +109,15 @@
|
|||||||
|
|
||||||
{% if event.is_rig %}
|
{% if event.is_rig %}
|
||||||
<dt>Event MIC</dt>
|
<dt>Event MIC</dt>
|
||||||
<dd>{{ event.mic.name }}</dd>
|
<dd>
|
||||||
|
{% if perms.RIGS.view_profile %}
|
||||||
|
<a href="{% url 'profile_detail' event.mic.pk %}" class="modal-href">
|
||||||
|
{{ event.mic.name }}
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
{{ event.mic.name }}
|
||||||
|
{% endif %}
|
||||||
|
</dd>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<dt>Status</dt>
|
<dt>Status</dt>
|
||||||
@@ -119,18 +127,18 @@
|
|||||||
|
|
||||||
{% if event.is_rig %}
|
{% if event.is_rig %}
|
||||||
<dt>Crew Meet</dt>
|
<dt>Crew Meet</dt>
|
||||||
<dd>{{ event.meet_at|date:"d M Y H:i"|default:"" }}</dd>
|
<dd>{{ event.meet_at|date:"D d M Y H:i"|default:"" }}</dd>
|
||||||
<dd>{{ event.meet_info|default:"" }}</dd>
|
<dd>{{ event.meet_info|default:"" }}</dd>
|
||||||
|
|
||||||
<dt>Access From</dt>
|
<dt>Access From</dt>
|
||||||
<dd>{{ event.access_at|date:"d M Y H:i"|default:"" }}</dd>
|
<dd>{{ event.access_at|date:"D d M Y H:i"|default:"" }}</dd>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<dt>Event Starts</dt>
|
<dt>Event Starts</dt>
|
||||||
<dd>{{ event.start_date|date:"d M Y" }} {{ event.start_time|date:"H:i" }}</dd>
|
<dd>{{ event.start_date|date:"D d M Y" }} {{ event.start_time|date:"H:i" }}</dd>
|
||||||
|
|
||||||
<dt>Event Ends</dt>
|
<dt>Event Ends</dt>
|
||||||
<dd>{{ event.end_date|date:"d M Y" }} {{ event.end_time|date:"H:i" }}</dd>
|
<dd>{{ event.end_date|date:"D d M Y" }} {{ event.end_time|date:"H:i" }}</dd>
|
||||||
|
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
|
|
||||||
|
|||||||
@@ -189,12 +189,18 @@
|
|||||||
<keepTogether>
|
<keepTogether>
|
||||||
<blockTable style="totalTable" colWidths="300,115,80">
|
<blockTable style="totalTable" colWidths="300,115,80">
|
||||||
<tr>
|
<tr>
|
||||||
<td></td>
|
<td>{% if not invoice %}VAT Registration Number: 116252989{% endif %}</td>
|
||||||
<td>Total (ex. VAT)</td>
|
<td>Total (ex. VAT)</td>
|
||||||
<td>£ {{ object.sum_total|floatformat:2 }}</td>
|
<td>£ {{ object.sum_total|floatformat:2 }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>{% if not invoice %}VAT Registration Number: 116252989{% endif %}</td>
|
<td>
|
||||||
|
{% if not invoice %}
|
||||||
|
<para>
|
||||||
|
<b>The full hire fee is payable at least 10 days before the event.</b>
|
||||||
|
</para>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
<td>VAT @ {{ object.vat_rate.as_percent|floatformat:2 }}%</td>
|
<td>VAT @ {{ object.vat_rate.as_percent|floatformat:2 }}%</td>
|
||||||
<td>£ {{ object.vat|floatformat:2 }}</td>
|
<td>£ {{ object.vat|floatformat:2 }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -205,7 +211,7 @@
|
|||||||
{% if invoice %}
|
{% if invoice %}
|
||||||
VAT Registration Number: 116252989
|
VAT Registration Number: 116252989
|
||||||
{% else %}
|
{% else %}
|
||||||
<b>The full hire fee is payable at least 10 days before the event.</b>
|
<b>This contract is not an invoice.</b>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
|||||||
@@ -25,9 +25,9 @@
|
|||||||
">
|
">
|
||||||
<td class="hidden-xs">{{ event.pk }}</td>
|
<td class="hidden-xs">{{ event.pk }}</td>
|
||||||
<td>
|
<td>
|
||||||
<div><strong>{{ event.start_date|date:"SHORT_DATE_FORMAT" }}</strong></div>
|
<div><strong>{{ event.start_date|date:"D d/m/Y" }}</strong></div>
|
||||||
{% if event.end_date and event.end_date != event.start_date %}
|
{% if event.end_date and event.end_date != event.start_date %}
|
||||||
<div><strong>{{ event.end_date|date:"SHORT_DATE_FORMAT" }}</strong></div>
|
<div><strong>{{ event.end_date|date:"D d/m/Y" }}</strong></div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<span class="text-muted">{{ event.get_status_display }}</span>
|
<span class="text-muted">{{ event.get_status_display }}</span>
|
||||||
</td>
|
</td>
|
||||||
@@ -83,7 +83,13 @@
|
|||||||
{% if event.mic %}
|
{% if event.mic %}
|
||||||
{{ event.mic.initials }}
|
{{ event.mic.initials }}
|
||||||
<div>
|
<div>
|
||||||
|
{% if perms.RIGS.view_profile %}
|
||||||
|
<a href="{% url 'profile_detail' event.mic.pk %}" class="modal-href">
|
||||||
<img src="{{ event.mic.profile_picture }}" class="event-mic-photo"/>
|
<img src="{{ event.mic.profile_picture }}" class="event-mic-photo"/>
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
<img src="{{ event.mic.profile_picture }}" class="event-mic-photo"/>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% elif event.is_rig %}
|
{% elif event.is_rig %}
|
||||||
<span class="glyphicon glyphicon-exclamation-sign"></span>
|
<span class="glyphicon glyphicon-exclamation-sign"></span>
|
||||||
|
|||||||
@@ -44,8 +44,8 @@
|
|||||||
<tr id="new-item-row" class="item_row">
|
<tr id="new-item-row" class="item_row">
|
||||||
<td>
|
<td>
|
||||||
<span class="name"></span>
|
<span class="name"></span>
|
||||||
<div class="description">
|
<div class="item-description">
|
||||||
<em></em>
|
<em class="description"></em>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td>£ <span class="cost"></span></td>
|
<td>£ <span class="cost"></span></td>
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends request.is_ajax|yesno:"base_ajax.html,base.html" %}
|
||||||
|
|
||||||
{% block title %}RIGS Profile {{object.pk}}{% endblock %}
|
{% block title %}RIGS Profile {{object.pk}}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
<div class="col-md-10 col-md-offset-1">
|
<div class="col-md-10 col-md-offset-1">
|
||||||
|
|
||||||
<div class="col-sm-12">
|
|
||||||
|
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<h3>{{object.name}}</h3>
|
<h3>{{object.name}}</h3>
|
||||||
</div>
|
</div>
|
||||||
|
{% if not request.is_ajax %}
|
||||||
{% if object.pk == user.pk %}
|
{% if object.pk == user.pk %}
|
||||||
<div class="col-sm-6 text-right">
|
<div class="col-sm-6 text-right">
|
||||||
<div class="btn-group btn-page">
|
<div class="btn-group btn-page">
|
||||||
@@ -22,6 +22,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
<div class="col-sm-8 ">
|
<div class="col-sm-8 ">
|
||||||
<dl class="dl-horizontal">
|
<dl class="dl-horizontal">
|
||||||
<dt>First Name</dt>
|
<dt>First Name</dt>
|
||||||
@@ -45,6 +46,7 @@
|
|||||||
<dt>Phone</dt>
|
<dt>Phone</dt>
|
||||||
<dd>{{object.phone}}</dd>
|
<dd>{{object.phone}}</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
{% if not request.is_ajax %}
|
||||||
{% if object.pk == user.pk %}
|
{% if object.pk == user.pk %}
|
||||||
|
|
||||||
<div class="pull-right">
|
<div class="pull-right">
|
||||||
@@ -71,14 +73,14 @@
|
|||||||
{% if user.api_key %}
|
{% if user.api_key %}
|
||||||
<pre>http{{ request.is_secure|yesno:"s,"}}://{{ request.get_host }}{% url 'ics_calendar' api_pk=user.pk api_key=user.api_key %}</pre>
|
<pre>http{{ request.is_secure|yesno:"s,"}}://{{ request.get_host }}{% url 'ics_calendar' api_pk=user.pk api_key=user.api_key %}</pre>
|
||||||
<small><a href="http://www.google.com/calendar/render?cid=http{{ request.is_secure|yesno:"s,"}}://{{ request.get_host }}{% url 'ics_calendar' api_pk=user.pk api_key=user.api_key %}">Click here</a> to add to google calendar.<br/>
|
<small><a href="http://www.google.com/calendar/render?cid=http{{ request.is_secure|yesno:"s,"}}://{{ request.get_host }}{% url 'ics_calendar' api_pk=user.pk api_key=user.api_key %}">Click here</a> to add to google calendar.<br/>
|
||||||
To sync from google calendar to mobile device, visit <a href="https://www.google.com/calendar/syncselect" target="_blank">this page</a> on your device and tick "PyRIGS Calendar".</small>
|
To sync from google calendar to mobile device, visit <a href="https://www.google.com/calendar/syncselect" target="_blank">this page</a> on your device and tick "RIGS Calendar".</small>
|
||||||
{% else %}
|
{% else %}
|
||||||
<pre>No API Key Generated</pre>
|
<pre>No API Key Generated</pre>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -88,4 +90,15 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-12">
|
||||||
|
<h4>Events</h4>
|
||||||
|
{% with object.latest_events as events %}
|
||||||
|
{% include 'RIGS/event_table.html' %}
|
||||||
|
{% endwith %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
<button title="Changes to {{ change.field.verbose_name }}" type="button" class="btn btn-default btn-xs" data-container="body" data-html="true" data-trigger='hover' data-toggle="popover" data-content='
|
<button title="Changes to {{ change.field.verbose_name }}" type="button" class="btn btn-default btn-xs" data-container="body" data-html="true" data-trigger='hover' data-toggle="popover" data-content='
|
||||||
|
|
||||||
{% if change.new %}<div class="alert alert-success">{{change.new}}</div>{% endif %}
|
{% if change.new %}<div class="alert alert-success {% if change.long %}overflow-ellipsis{% endif %}">{{change.new|linebreaksbr}}</div>{% endif %}
|
||||||
{% if change.old %}<div class="alert alert-danger">{{change.old}}</div>{% endif %}
|
{% if change.old %}<div class="alert alert-danger {% if change.long %}overflow-ellipsis{% endif %}">{{change.old|linebreaksbr}}</div>{% endif %}
|
||||||
|
|
||||||
'>{{ change.field.verbose_name }}</button>
|
'>{{ change.field.verbose_name }}</button>
|
||||||
|
|
||||||
@@ -14,8 +14,8 @@
|
|||||||
{% for change in itemChange.changes %}
|
{% for change in itemChange.changes %}
|
||||||
<h4>{{ change.field.verbose_name }}</h4>
|
<h4>{{ change.field.verbose_name }}</h4>
|
||||||
|
|
||||||
{% if change.new %}<div class="alert alert-success">{{change.new}}</div>{% endif %}
|
{% if change.new %}<div class="alert alert-success">{{change.new|linebreaksbr}}</div>{% endif %}
|
||||||
{% if change.old %}<div class="alert alert-danger">{{change.old}}</div>{% endif %}
|
{% if change.old %}<div class="alert alert-danger">{{change.old|linebreaksbr}}</div>{% endif %}
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import simplejson
|
|||||||
from reversion.models import Version
|
from reversion.models import Version
|
||||||
from django.contrib.contenttypes.models import ContentType # Used to lookup the content_type
|
from django.contrib.contenttypes.models import ContentType # Used to lookup the content_type
|
||||||
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
|
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
|
||||||
|
from django.db.models import ForeignKey, IntegerField, EmailField
|
||||||
|
|
||||||
from RIGS import models, forms
|
from RIGS import models, forms
|
||||||
import datetime
|
import datetime
|
||||||
@@ -35,8 +36,27 @@ def model_compare(oldObj, newObj, excluded_keys=[]):
|
|||||||
class FieldCompare(object):
|
class FieldCompare(object):
|
||||||
def __init__(self, field=None, old=None, new=None):
|
def __init__(self, field=None, old=None, new=None):
|
||||||
self.field = field
|
self.field = field
|
||||||
self.old = old
|
self._old = old
|
||||||
self.new = new
|
self._new = new
|
||||||
|
|
||||||
|
def display_value(self, value):
|
||||||
|
if isinstance(self.field, IntegerField) and len(self.field.choices) > 0:
|
||||||
|
return [x[1] for x in self.field.choices if x[0] == value][0]
|
||||||
|
return value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def old(self):
|
||||||
|
return self.display_value(self._old)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def new(self):
|
||||||
|
return self.display_value(self._new)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def long(self):
|
||||||
|
if isinstance(self.field, EmailField):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
changes = []
|
changes = []
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,8 @@
|
|||||||
|
|
||||||
<meta name="viewport" content="initial-scale=1">
|
<meta name="viewport" content="initial-scale=1">
|
||||||
|
|
||||||
<link rel="icon" type="image/png" href="/static/imgs/pyrigs-avatar.png">
|
<link rel="icon" type="image/png" href="{% static "imgs/pyrigs-avatar.png" %}">
|
||||||
<link rel="apple-touch-icon" href="/static/imgs/pyrigs-avatar.png">
|
<link rel="apple-touch-icon" href="{% static "imgs/pyrigs-avatar.png" %}">
|
||||||
<link href='http://fonts.googleapis.com/css?family=Open+Sans:400italic,700,300,400' rel='stylesheet' type='text/css'>
|
<link href='http://fonts.googleapis.com/css?family=Open+Sans:400italic,700,300,400' rel='stylesheet' type='text/css'>
|
||||||
|
|
||||||
|
|
||||||
@@ -172,12 +172,14 @@
|
|||||||
<script>
|
<script>
|
||||||
jQuery(document).ready(function () {
|
jQuery(document).ready(function () {
|
||||||
jQuery(document).on('click', '.modal-href', function (e) {
|
jQuery(document).on('click', '.modal-href', function (e) {
|
||||||
e.preventDefault()
|
$link = jQuery(this);
|
||||||
modaltarget = jQuery(this).data('target')
|
// Anti modal inception
|
||||||
modalobject = "";
|
if($link.parents('#modal').length == 0) {
|
||||||
jQuery('#modal').load(jQuery(this).attr('href'), function (e) {
|
e.preventDefault();
|
||||||
|
jQuery('#modal').load($link.attr('href'), function (e) {
|
||||||
jQuery('#modal').modal();
|
jQuery('#modal').modal();
|
||||||
});
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@@ -186,7 +188,7 @@
|
|||||||
var s = document.createElement('script');
|
var s = document.createElement('script');
|
||||||
s.type='text/javascript';
|
s.type='text/javascript';
|
||||||
document.body.appendChild(s);
|
document.body.appendChild(s);
|
||||||
s.src='/static/js/asteroids.min.js';
|
s.src='{% static "js/asteroids.min.js"%}';
|
||||||
ga('send', 'event', 'easter_egg', 'activated');
|
ga('send', 'event', 'easter_egg', 'activated');
|
||||||
}
|
}
|
||||||
easter_egg.load();
|
easter_egg.load();
|
||||||
|
|||||||
Reference in New Issue
Block a user