aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorFilipp Lepalaan <f@230.to>2013-11-17 19:15:30 +0200
committerFilipp Lepalaan <f@230.to>2013-11-17 19:15:30 +0200
commit297419f370ea87458017ee506a2e551e9068b66b (patch)
tree429d3e1b6c7f2facfb3e361b4b708f0d36e8aac8 /apps
parentf077badf3163fc36c111dc45fe8d7d6f57d8712a (diff)
downloadmotor.old-297419f370ea87458017ee506a2e551e9068b66b.tar.gz
motor.old-297419f370ea87458017ee506a2e551e9068b66b.tar.bz2
motor.old-297419f370ea87458017ee506a2e551e9068b66b.zip
Swicthing machines
Diffstat (limited to 'apps')
-rw-r--r--apps/checkin/models.py3
-rw-r--r--apps/core/forms.py47
-rw-r--r--apps/core/models.py60
-rw-r--r--apps/core/templates/login.html2
-rw-r--r--apps/core/views.py79
-rw-r--r--apps/docs/models.py11
-rw-r--r--apps/issues/__init__.py (renamed from apps/troubleshooting/__init__.py)0
-rw-r--r--apps/issues/forms.py7
-rw-r--r--apps/issues/models.py (renamed from apps/troubleshooting/models.py)18
-rw-r--r--apps/issues/tests.py (renamed from apps/troubleshooting/tests.py)0
-rw-r--r--apps/issues/views.py18
-rw-r--r--apps/troubleshooting/views.py1
12 files changed, 214 insertions, 32 deletions
diff --git a/apps/checkin/models.py b/apps/checkin/models.py
index efea6ff..82874a4 100644
--- a/apps/checkin/models.py
+++ b/apps/checkin/models.py
@@ -85,6 +85,9 @@ class ServiceOrder(models.Model):
devices = models.ManyToManyField(Device, null=True)
tags = models.ManyToManyField(TaggedItem)
+ servo_id = models.CharField(max_length=7, default='', editable=False)
+ status = models.TextField(default='', blank=True)
+
def add_accessory(self, accessory):
tag = TaggedItem()
tag.kind = 'accessory'
diff --git a/apps/core/forms.py b/apps/core/forms.py
index 66a6287..051663b 100644
--- a/apps/core/forms.py
+++ b/apps/core/forms.py
@@ -1,12 +1,43 @@
from django import forms
+from django.contrib import auth
+from apps.core.models import ServiceProvider, User
+from django.forms.extras.widgets import SelectDateWidget
class LoginForm(forms.Form):
- username = forms.CharField(widget=forms.TextInput(attrs={
- 'class': 'form-control',
- 'placeholder': 'Email address'
- }))
- password = forms.CharField(widget=forms.PasswordInput(attrs={
- 'class': 'form-control',
- 'placeholder': 'password'
- }))
+ username = forms.CharField()
+ password = forms.CharField(widget=forms.PasswordInput())
+
+ def clean(self):
+ cleaned_data = super(LoginForm, self).clean()
+ user = auth.authenticate(
+ username=cleaned_data['username'],
+ password=cleaned_data['password']
+ )
+ if user is not None and user.is_active:
+ cleaned_data['user'] = user
+ else:
+ raise forms.ValidationError('Incorrect username or password')
+
+ return cleaned_data
+
+
+class EditProviderForm(forms.ModelForm):
+ class Meta:
+ model = ServiceProvider
+ widgets = {
+ 'date_started': SelectDateWidget(),
+ 'date_ends': SelectDateWidget()
+ }
+
+
+class ProfileEditForm(forms.ModelForm):
+ class Meta:
+ model = User
+ fields = ('first_name', 'last_name', 'email')
+
+
+class UserEditForm(forms.ModelForm):
+ class Meta:
+ model = User
+ exclude = ('groups', 'user_permissions')
diff --git a/apps/core/models.py b/apps/core/models.py
index 04d7582..7e98cbb 100644
--- a/apps/core/models.py
+++ b/apps/core/models.py
@@ -1,16 +1,36 @@
import uuid
+import gsxws
from django.db import models
from django.contrib.contenttypes import generic
from django.contrib.auth.models import AbstractUser
from django.contrib.contenttypes.models import ContentType
+from django.utils.translation import ugettext as _
from django.template.defaultfilters import slugify
+class User(AbstractUser):
+ sp = models.ForeignKey('ServiceProvider', null=True)
+
+ def __unicode__(self):
+ if self.first_name and self.last_name:
+ return self.first_name + ' ' + self.last_name
+ return self.username
+
+ def get_absolute_url(self):
+ return '/manage/users/%d/' % self.pk
+
+
class ServiceProvider(models.Model):
+ name = models.CharField(
+ unique=True,
+ max_length=128,
+ default='Apple Service Provider'
+ )
uuid = models.CharField(
unique=True,
max_length=36,
+ editable=False,
default=lambda: str(uuid.uuid4())
)
BACKEND_CHOICES = (
@@ -23,19 +43,29 @@ class ServiceProvider(models.Model):
default='servo',
choices=BACKEND_CHOICES
)
- name = models.CharField(
- max_length=128,
- default='Apple Service Provider'
- )
+
http_url = models.URLField(null=True, blank=True)
http_username = models.CharField(max_length=128, null=True, blank=True)
http_password = models.CharField(max_length=128, null=True, blank=True)
smtp_address = models.EmailField(null=True, blank=True)
servo_url = models.URLField(null=True, blank=True)
+ install_id = models.CharField(max_length=2)
+ is_active = models.BooleanField(default=True)
+ main_user = models.ForeignKey(User, null=True)
-class User(AbstractUser):
- sp = models.ForeignKey(ServiceProvider, null=True)
+ def __unicode__(self):
+ return self.name
+
+ def get_absolute_url(self):
+ return '/manage/providers/%d/' % self.pk
+
+
+class Subscription(models.Model):
+ sp = models.ForeignKey(ServiceProvider)
+ start_date = models.DateField()
+ end_date = models.DateField()
+ billing_period = models.PositiveIntegerField(default=12)
class TaggedItem(models.Model):
@@ -57,3 +87,21 @@ class TaggedItem(models.Model):
class Meta:
unique_together = ("content_type", "object_id", "tag",)
+
+
+class GsxAccount(models.Model):
+ sp = models.OneToOneField(ServiceProvider)
+ sold_to = models.CharField(max_length=10)
+ user_id = models.CharField(max_length=128)
+ password = models.CharField(max_length=256)
+ region = models.CharField(
+ max_length=3,
+ choices=gsxws.GSX_REGIONS,
+ verbose_name=_("Region")
+ )
+ environment = models.CharField(
+ max_length=2,
+ verbose_name=_("Environment"),
+ choices=gsxws.ENVIRONMENTS,
+ default=gsxws.ENVIRONMENTS[0][0]
+ )
diff --git a/apps/core/templates/login.html b/apps/core/templates/login.html
deleted file mode 100644
index 5f53b32..0000000
--- a/apps/core/templates/login.html
+++ /dev/null
@@ -1,2 +0,0 @@
-{% extends 'default.html' %}
-
diff --git a/apps/core/views.py b/apps/core/views.py
index fc8f941..9e875e8 100644
--- a/apps/core/views.py
+++ b/apps/core/views.py
@@ -1,17 +1,80 @@
-from django.shortcuts import render
-from django.views.generic.edit import FormView
+from django.contrib import auth
+from django.contrib import messages
+from django.shortcuts import redirect
from django.views.generic.list import ListView
-from apps.core.forms import LoginForm
+from django.views.generic.edit import FormView, CreateView, UpdateView
+from apps.core.forms import LoginForm, EditProviderForm, UserEditForm
+from django.utils.translation import ugettext as _
-from apps.core.models import ServiceProvider
+from apps.core.models import ServiceProvider, User
+from apps.docs.models import Article
+
+class DefaultListView(ListView):
+ template_name = 'core/list.html'
+
+
+class DefaultEditView(UpdateView):
+ template_name = 'core/form.html'
+ def get_context_data(self, **kwargs):
+ context = super(DefaultEditView, self).get_context_data(**kwargs)
+ context['object_list'] = self.model.objects.all()
+ return context
+
+
+class CreateSiteView(CreateView):
+ model = ServiceProvider
+ form_class = EditProviderForm
+ template_name = 'core/form.html'
+ success_url = '/manage/sites/'
class LoginView(FormView):
- template_name = 'login.html'
form_class = LoginForm
- success_url = '/manage/sites/'
+ template_name = 'login.html'
+ success_url = '/manage/providers/'
+
+ def form_valid(self, form):
+ auth.login(self.request, form.cleaned_data['user'])
+ return super(LoginView, self).form_valid(form)
+
+
+class ProvidersListView(DefaultListView):
+ model = ServiceProvider
-class SitesListView(ListView):
+class ProviderEditView(DefaultEditView):
model = ServiceProvider
- template_name = 'manage/sites.html'
+
+
+class UserListView(DefaultListView):
+ model = User
+
+
+class UserEditView(DefaultEditView):
+ model = User
+ form_class = UserEditForm
+
+
+class UserCreateView(CreateView):
+ model = User
+ form_class = UserEditForm
+ template_name = 'core/form.html'
+
+
+class ArticleListView(DefaultListView):
+ model = Article
+
+
+class ArticleEditView(DefaultEditView):
+ model = Article
+
+
+class ArticleCreateView(CreateView):
+ model = Article
+ template_name = 'core/form.html'
+
+
+def logout(request):
+ auth.logout(request)
+ messages.success(request, _('You have signed out'))
+ return redirect('/manage/')
diff --git a/apps/docs/models.py b/apps/docs/models.py
index bd95207..f95da57 100644
--- a/apps/docs/models.py
+++ b/apps/docs/models.py
@@ -1,5 +1,3 @@
-# -*- coding: utf-8 -*-
-
from django.db import models
from django.template.defaultfilters import slugify
@@ -11,17 +9,20 @@ class Image(models.Model):
class Article(models.Model):
slug = models.SlugField(editable=False)
- title = models.CharField(max_length=255)
- content = models.TextField()
+ title = models.CharField(max_length=255, default='New Article')
+ content = models.TextField(default='')
published = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now=True)
updated_at = models.DateTimeField(auto_now=True)
- images = models.ManyToManyField(Image, null=True)
+ images = models.ManyToManyField(Image, null=True, editable=False)
def __unicode__(self):
return self.title
+ def get_absolute_url(self):
+ return '/manage/docs/%d/' % self.pk
+
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
super(Article, self).save(*args, **kwargs)
diff --git a/apps/troubleshooting/__init__.py b/apps/issues/__init__.py
index e69de29..e69de29 100644
--- a/apps/troubleshooting/__init__.py
+++ b/apps/issues/__init__.py
diff --git a/apps/issues/forms.py b/apps/issues/forms.py
new file mode 100644
index 0000000..eee223f
--- /dev/null
+++ b/apps/issues/forms.py
@@ -0,0 +1,7 @@
+from django import forms
+from apps.issues.models import Issue
+
+
+class IssueForm(forms.ModelForm):
+ class Meta:
+ model = Issue
diff --git a/apps/troubleshooting/models.py b/apps/issues/models.py
index cd1edf3..bcded0c 100644
--- a/apps/troubleshooting/models.py
+++ b/apps/issues/models.py
@@ -1,12 +1,25 @@
from django.db import models
+from django.utils.translation import ugettext as _
+
from apps.core.models import ServiceProvider
from apps.checkin.models import ServiceOrder
-class Question(models.Model):
+class Issue(models.Model):
sp = models.ForeignKey(ServiceProvider)
- required = models.BooleanField(default=True)
+ description = models.CharField(max_length=256, default=_('No power'))
+
+ def __unicode__(self):
+ return self.description
+
+ def get_absolute_url(self):
+ return '/manage/issues/%d/' % self.pk
+
+
+class Question(models.Model):
+ issue = models.ForeignKey(Issue)
question = models.CharField(max_length=256)
+ required = models.BooleanField(default=True)
class Choice(models.Model):
@@ -16,4 +29,5 @@ class Choice(models.Model):
class Answer(models.Model):
choice = models.ForeignKey(Choice)
+ answer = models.CharField(max_length=256)
so = models.ForeignKey(ServiceOrder)
diff --git a/apps/troubleshooting/tests.py b/apps/issues/tests.py
index 501deb7..501deb7 100644
--- a/apps/troubleshooting/tests.py
+++ b/apps/issues/tests.py
diff --git a/apps/issues/views.py b/apps/issues/views.py
new file mode 100644
index 0000000..ed60ed7
--- /dev/null
+++ b/apps/issues/views.py
@@ -0,0 +1,18 @@
+from django.views.generic.list import ListView
+from django.views.generic.edit import FormView, CreateView, UpdateView
+from apps.core.views import DefaultEditView, DefaultListView
+from apps.issues.models import Issue
+
+
+class IssueListView(DefaultListView):
+ model = Issue
+
+
+class IssueCreateView(CreateView):
+ model = Issue
+ template_name = 'core/form.html'
+ success_url = '/manage/issues/'
+
+
+class IssueEditView(DefaultEditView):
+ model = Issue
diff --git a/apps/troubleshooting/views.py b/apps/troubleshooting/views.py
deleted file mode 100644
index 60f00ef..0000000
--- a/apps/troubleshooting/views.py
+++ /dev/null
@@ -1 +0,0 @@
-# Create your views here.