Enabled event create button

Added MIC field to the event form

Added the ability to specify the fields you want to query in an api request

Changes to the user profile to enable queries via the API
This commit is contained in:
Tom Price
2014-12-02 01:24:38 +00:00
parent 201d4c5292
commit 3aec6c212d
4 changed files with 202 additions and 171 deletions

View File

@@ -1,9 +1,11 @@
import hashlib
import datetime
from django.db import models
from django.contrib.auth.models import AbstractUser
from django.conf import settings
import hashlib
import reversion
import datetime
# Create your models here.
@@ -18,6 +20,9 @@ class Profile(AbstractUser):
url = "https://www.gravatar.com/avatar/" + hashlib.md5(self.email).hexdigest() + "?d=identicon&s=500"
return url
@property
def name(self):
return self.get_full_name() + ' "' + self.initials + '"'
class RevisionMixin(object):
@property
@@ -163,7 +168,7 @@ class Event(models.Model, RevisionMixin):
)
name = models.CharField(max_length=255)
person = models.ForeignKey('Person')
person = models.ForeignKey('Person', null=True, blank=True)
organisation = models.ForeignKey('Organisation', blank=True, null=True)
venue = models.ForeignKey('Venue')
description = models.TextField(blank=True, null=True)

View File

@@ -76,74 +76,135 @@
{% include 'form_errors.html' %}
<form class="form-horizontal" role="form" method="POST">{% csrf_token %}
{% render_field form.is_rig style="display: none" %}
{% if not object.pk %}
<div class="col-md-12 well">
<div class="form-group" id="is_rig-selector">
<div class="col-sm-12">
{% if not object.pk %}
<div class="col-md-12 well">
<div class="form-group" id="is_rig-selector">
<div class="col-sm-12">
<span class="col-sm-6">
<button type="button" class="btn btn-primary col-xs-12" data-is_rig="1">Rig</button>
</span>
<span class="col-sm-6">
<button type="button" class="btn btn-info col-xs-12" data-is_rig="0">Non-Rig</button>
</span>
</div>
</div>
</div>
{% endif %}
<div class="col-md-6">
<div class="panel panel-default form-hws form-is_rig">
<div class="panel-heading">Contact Details</div>
<div class="panel-body">
<div class="form-group">
<label for="{{ form.person.id_for_label }}"
class="col-sm-4 control-label">{{ form.person.label }}</label>
</div>
{% endif %}
<div class="col-md-6">
<div class="panel panel-default form-hws form-is_rig {% if object.pk and not object.is_rig %}hidden{% endif %}">
<div class="panel-heading">Contact Details</div>
<div class="panel-body">
<div class="form-group">
<label for="{{ form.person.id_for_label }}"
class="col-sm-4 control-label">{{ form.person.label }}</label>
<div class="col-sm-8">
<div class="row">
<input type="hidden" id="{{ form.person.id_for_label }}" name="{{ form.person.name }}"
value="{{ form.person.value|default_if_none:"" }}"/>
<div class="col-sm-8">
<div class="row">
<input type="hidden" id="{{ form.person.id_for_label }}" name="{{ form.person.name }}"
value="{{ form.person.value|default_if_none:"" }}"/>
<div class="col-xs-9">
<input type="text" id="{{ form.person.id_for_label }}-input"
class="form-control autocomplete-json"
data-valueurl="{% if form.person.value %}
<div class="col-xs-9">
<input type="text" id="{{ form.person.id_for_label }}-input"
class="form-control autocomplete-json"
data-valueurl="{% if form.person.value %}
{% url 'api_secure' model='person' pk=form.person.value %}
{% else %}
{% url 'api_secure' model='person' %}
{% endif %}?fields=name"
data-sourceurl="{% url 'api_secure' model='person' %}"
data-target="{{ form.person.id_for_label }}"/>
</div>
<div class="col-xs-3 align-right">
<button type="button" class="btn btn-default"
data-url="{#% url invoiceitem_add object.pk %#}"
data-toggle="modal" data-target="#itemModal">
<span class="glyphicon glyphicon-plus"></span>
</button>
</div>
data-sourceurl="{% url 'api_secure' model='person' %}"
data-target="{{ form.person.id_for_label }}"/>
</div>
<div class="col-xs-3 align-right">
<button type="button" class="btn btn-default"
data-url="{#% url invoiceitem_add object.pk %#}"
data-toggle="modal" data-target="#itemModal">
<span class="glyphicon glyphicon-plus"></span>
</button>
</div>
</div>
</div>
<div class="form-group">
<label for="{{ form.organisation.id_for_label }}"
class="col-sm-4 control-label">{{ form.organisation.label }}</label>
</div>
<div class="form-group">
<label for="{{ form.organisation.id_for_label }}"
class="col-sm-4 control-label">{{ form.organisation.label }}</label>
<div class="col-sm-8">
<div class="row">
<input type="hidden" id="{{ form.organisation.id_for_label }}"
name="{{ form.organisation.name }}"
value="{{ form.organisation.value|default_if_none:"" }}"/>
<div class="col-sm-8">
<div class="row">
<input type="hidden" id="{{ form.organisation.id_for_label }}"
name="{{ form.organisation.name }}"
value="{{ form.organisation.value|default_if_none:"" }}"/>
<div class="col-xs-9">
<input type="text" id="{{ form.organisation.id_for_label }}-input"
class="form-control autocomplete-json"
data-valueurl="{% if form.organisation.value %}
<div class="col-xs-9">
<input type="text" id="{{ form.organisation.id_for_label }}-input"
class="form-control autocomplete-json"
data-valueurl="{% if form.organisation.value %}
{% url 'api_secure' model='organisation' pk=form.organisation.value %}
{% else %}
{% url 'api_secure' model='organisation' %}
{% endif %}?fields=name"
data-sourceurl="{% url 'api_secure' model='organisation' %}"
data-target="{{ form.organisation.id_for_label }}"/>
data-sourceurl="{% url 'api_secure' model='organisation' %}"
data-target="{{ form.organisation.id_for_label }}"/>
</div>
<div class="col-xs-3 align-right">
<button type="button" class="btn btn-default"
data-url="{#% url invoiceitem_add object.pk %#}"
data-toggle="modal" data-target="#itemModal">
<span class="glyphicon glyphicon-plus"></span>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="panel panel-default form-hws form-non_rig">
<div class="panel-heading">Event Description</div>
<div class="panel-body">
<div class="form-group">
<label for="{{ form.description.id_for_label }}"
class="col-sm-4 control-label">{{ form.description.label }}</label>
<div class="col-sm-8">
{% render_field form.description class+="form-control" %}
</div>
</div>
</div>
</div>
</div>
<!-- /.col-md-6 -->
<div class="col-md-6">
<div class="panel panel-default form-hws form-non_rig">
<div class="panel-heading">Event Details</div>
<div class="panel-body">
<div id="form-hws">
<div class="form-group">
<label for="{{ form.name.id_for_label }}"
class="col-sm-4 control-label">{{ form.name.label }}</label>
<div class="col-sm-8">
{% render_field form.name class+="form-control" %}
</div>
</div>
<div class="form-group">
<label for="{{ form.venue.id_for_label }}"
class="col-sm-4 control-label">{{ form.venue.label }}</label>
<div class="col-sm-8">
<div class="row">
<input type="hidden" id="{{ form.venue.id_for_label }}" name="{{ form.venue.name }}"
value="{{ form.venue.value|default_if_none:"" }}"/>
<div class="col-xs-9">
<input type="text" id="{{ form.venue.id_for_label }}-input"
class="form-control autocomplete-json"
data-valueurl="{% if form.venue.value %}
{% url 'api_secure' model='venue' pk=form.venue.value %}
{% else %}
{% url 'api_secure' model='venue' %}
{% endif %}?fields=name"
data-sourceurl="{% url 'api_secure' model='venue' %}"
data-target="{{ form.venue.id_for_label }}"/>
</div>
<div class="col-xs-3 align-right">
<button type="button" class="btn btn-default"
@@ -155,149 +216,108 @@
</div>
</div>
</div>
</div>
</div>
<div class="panel panel-default form-hws form-non_rig">
<div class="panel-heading">Event Description</div>
<div class="panel-body">
<div class="form-group">
<label for="{{ form.description.id_for_label }}"
class="col-sm-4 control-label">{{ form.description.label }}</label>
<label for="{{ form.start_date.id_for_label }}"
class="col-sm-4 control-label">{{ form.start_date.label }}</label>
<div class="col-sm-8">
{% render_field form.description class+="form-control" %}
<div class="col-sm-4">
<input type="date" name="{{ form.start_date.name }}"
id="{{ form.start_date.id_for_label }}"
class="form-control start_date" required
value="{{ form.start_date.value|date:"Y-m-d" }}"/>
</div>
<div class="col-sm-4">
{% render_field form.start_time type="time" class+="form-control" %}
</div>
</div>
</div>
</div>
</div>
<!-- /.col-md-6 -->
<div class="form-group">
<label for="{{ form.end_date.id_for_label }}"
class="col-sm-4 control-label">{{ form.end_date.label }}</label>
<div class="col-md-6">
<div class="panel panel-default form-hws form-non_rig">
<div class="panel-heading">Event Details</div>
<div class="panel-body">
<div id="form-hws">
<div class="col-sm-4">
<input type="date" name="{{ form.end_date.name }}" id="{{ form.end_date.id_for_label }}"
class="form-control end_date" required
value="{{ form.end_date.value|date:"Y-m-d" }}"/>
</div>
<div class="col-sm-4">
{% render_field form.end_time type="time" class+="form-control end_time" %}
</div>
<div class="col-sm-offset-8 col-sm-4">
<div class="btn-group btn-group-justified">
<btn class="btn btn-default btn-xs" onclick="setTime23Hours()">23:00</btn>
<btn class="btn btn-default btn-xs" onclick="setTime02Hours()">02:00</btn>
</div>
</div>
</div>
{# Rig only information #}
<div class="form-is_rig {% if object.pk and not object.is_rig %}hidden{% endif %}">
<div class="form-group">
<label for="{{ form.name.id_for_label }}"
class="col-sm-4 control-label">{{ form.name.label }}</label>
<label for="{{ form.access_at.id_for_label }}"
class="col-sm-4 control-label">{{ form.access_at.label }}</label>
<div class="col-sm-8">
{% render_field form.name class+="form-control" %}
{% render_field form.access_at type="datetime-local" class+="form-control" %}
</div>
</div>
<div class="form-group">
<label for="{{ form.venue.id_for_label }}"
class="col-sm-4 control-label">{{ form.venue.label }}</label>
<label for="{{ form.meet_at.id_for_label }}"
class="col-sm-4 control-label">{{ form.meet_at.label }}</label>
<div class="col-sm-8">
<div class="row">
<input type="hidden" id="{{ form.venue.id_for_label }}" name="{{ form.venue.name }}"
value="{{ form.venue.value|default_if_none:"" }}"/>
<div class="col-xs-9">
<input type="text" id="{{ form.venue.id_for_label }}-input"
class="form-control autocomplete-json"
data-valueurl="{% if form.venue.value %}
{% url 'api_secure' model='venue' pk=form.venue.value %}
{% else %}
{% url 'api_secure' model='venue' %}
{% endif %}?fields=name"
data-sourceurl="{% url 'api_secure' model='venue' %}"
data-target="{{ form.venue.id_for_label }}"/>
</div>
<div class="col-xs-3 align-right">
<button type="button" class="btn btn-default"
data-url="{#% url invoiceitem_add object.pk %#}"
data-toggle="modal" data-target="#itemModal">
<span class="glyphicon glyphicon-plus"></span>
</button>
</div>
{% render_field form.meet_at type="datetime-local" class+="form-control" %}
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-4 col-sm-8">
<div class="checkbox">
<label>
{% render_field form.dry_hire %}{{ form.dry_hire.label }}
</label>
</div>
</div>
</div>
<div class="form-group">
<label for="{{ form.start_date.id_for_label }}"
class="col-sm-4 control-label">{{ form.start_date.label }}</label>
<label for="{{ form.status.id_for_label }}"
class="col-sm-4 control-label">{{ form.status.label }}</label>
<div class="col-sm-4">
<input type="date" name="{{ form.start_date.name }}"
id="{{ form.start_date.id_for_label }}"
class="form-control start_date" required
value="{{ form.start_date.value|date:"Y-m-d" }}"/>
</div>
<div class="col-sm-4">
{% render_field form.start_time type="time" class+="form-control" %}
<div class="col-sm-8">
{% render_field form.status class+="form-control" %}
</div>
</div>
<div class="form-group">
<label for="{{ form.end_date.id_for_label }}"
class="col-sm-4 control-label">{{ form.end_date.label }}</label>
<label for="{{ form.mic.id_for_label }}"
class="col-sm-4 control-label">{{ form.mic.label }}</label>
<div class="col-sm-4">
<input type="date" name="{{ form.end_date.name }}" id="{{ form.end_date.id_for_label }}"
class="form-control end_date" required
value="{{ form.end_date.value|date:"Y-m-d" }}"/>
</div>
<div class="col-sm-4">
{% render_field form.end_time type="time" class+="form-control end_time" %}
</div>
<div class="col-sm-offset-8 col-sm-4">
<div class="btn-group btn-group-justified">
<btn class="btn btn-default btn-xs" onclick="setTime23Hours()">23:00</btn>
<btn class="btn btn-default btn-xs" onclick="setTime02Hours()">02:00</btn>
</div>
<div class="col-sm-8">
<input type="hidden" id="{{ form.mic.id_for_label }}" name="{{ form.mic.name }}"
value="{{ form.mic.value|default_if_none:"" }}"/>
<input type="text" id="{{ form.mic.id_for_label }}-input"
class="form-control autocomplete-json"
data-valueurl="
{% if form.mic.value %}
{% url 'api_secure' model='mic' pk=form.mic.value %}
{% else %}
{% url 'api_secure' model='mic' %}
{% endif %}?fields=name"
data-sourceurl="{% url 'api_secure' model='mic' %}?fields=first_name,username,initials"
data-target="{{ form.mic.id_for_label }}"/>
</div>
</div>
{# Rig only information #}
<div class="form-is_rig {% if object.pk and not object.is_rig %}hidden{% endif %}">
{#% include 'RIGS/eventitem_table.html' %#}
</div>
<div class="col-sm-12">
<div class="pull-right">
<div class="form-group">
<label for="{{ form.access_at.id_for_label }}"
class="col-sm-4 control-label">{{ form.access_at.label }}</label>
<div class="col-sm-8">
{% render_field form.access_at type="datetime-local" class+="form-control" %}
</div>
</div>
<div class="form-group">
<label for="{{ form.meet_at.id_for_label }}"
class="col-sm-4 control-label">{{ form.meet_at.label }}</label>
<div class="col-sm-8">
{% render_field form.meet_at type="datetime-local" class+="form-control" %}
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-4 col-sm-8">
<div class="checkbox">
<label>
{% render_field form.dry_hire %}{{ form.dry_hire.label }}
</label>
</div>
</div>
</div>
<div class="form-group">
<label for="{{ form.status.id_for_label }}"
class="col-sm-4 control-label">{{ form.status.label }}</label>
<div class="col-sm-8">
{% render_field form.status class+="form-control" %}
</div>
</div>
{#% include 'RIGS/eventitem_table.html' %#}
</div>
<div class="col-sm-12">
<div class="pull-right">
<div class="form-group">
<input type="submit" value="Submit" class="btn btn-primary"/>
</div>
<input type="submit" value="Submit" class="btn btn-primary"/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
<div class="modal fade" id="itemModal" role="dialog" aria-labelledby="itemModal" aria-hidded="true">
<div class="modal-dialog">

View File

@@ -10,7 +10,7 @@
<h3>Rigboard</h3>
</div>
<div class="col-sm-2">
<a href="{#% url 'person_create' %#}" class="btn btn-default pull-right">New <span
<a href="{% url 'event_create' %}" class="btn btn-default pull-right">New <span
class="glyphicon glyphicon-plus"></span></a>
</div>
{% comment %}

View File

@@ -10,6 +10,7 @@ from RIGS import models
import simplejson
# Create your views here.
def login(request, **kwargs):
if request.user.is_authenticated():
@@ -156,6 +157,7 @@ class SecureAPIRequest(generic.View):
'venue': models.Venue,
'person': models.Person,
'organisation': models.Organisation,
'mic': models.Profile,
}
'''
@@ -180,27 +182,31 @@ class SecureAPIRequest(generic.View):
# Response format where applicable
format = request.GET.get('format', 'json')
fields = request.GET.get('fields', None).split(',')
# Supply data for one record
if pk:
object = get_object_or_404(self.models[model], pk=pk)
fields = request.GET.get('fields', None)
data = serializers.serialize(format, [object], fields=fields)
return HttpResponse(data, content_type="application/" + format)
# Supply data for autocomplete ajax request in json form
term = request.GET.get('term', None)
if term:
objects = self.models[model].objects.filter(name__icontains=term)[:20]
if fields is None:
fields = ['name']
all_objects = self.models[model].objects
results = []
for o in objects:
data = {
'pk': o.pk,
'value': o.pk,
'label': o.name,
}
results.append(data)
# todo: fix simplejson issues
for field in fields:
filter = field + "__icontains"
objects = all_objects.filter(**{filter: term})
for o in objects:
data = {
'pk': o.pk,
'value': o.pk,
'label': o.name,
}
results.append(data)
json = simplejson.dumps(results)
return HttpResponse(json, content_type="application/json") # Always json