summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/expenses/admin.py7
-rw-r--r--app/expenses/build.py34
-rw-r--r--app/expenses/models.py20
-rw-r--r--app/expenses/urls.py19
-rw-r--r--app/expenses/views.py35
5 files changed, 97 insertions, 18 deletions
diff --git a/app/expenses/admin.py b/app/expenses/admin.py
index 76af266..28c8869 100644
--- a/app/expenses/admin.py
+++ b/app/expenses/admin.py
@@ -1,6 +1,10 @@
from django.contrib import admin
-from .models import Expense
+from .models import Expense, Trip
+
+
+class TripAdmin(admin.ModelAdmin):
+ list_display = ('name', 'start')
class ExpenseAdmin(admin.ModelAdmin):
@@ -8,3 +12,4 @@ class ExpenseAdmin(admin.ModelAdmin):
list_filter = ('date', 'category')
admin.site.register(Expense, ExpenseAdmin)
+admin.site.register(Trip, TripAdmin)
diff --git a/app/expenses/build.py b/app/expenses/build.py
new file mode 100644
index 0000000..7241a70
--- /dev/null
+++ b/app/expenses/build.py
@@ -0,0 +1,34 @@
+import os
+from django.core.urlresolvers import reverse
+from builder.base import BuildNew
+
+
+class BuildExpenses(BuildNew):
+
+ def build(self):
+ self.build_detail_view()
+ self.build_list_view(
+ base_path=reverse("expenses:list_trip"),
+ paginate_by=24
+ )
+
+ def get_model_queryset(self):
+ return self.model.objects.all()
+
+ def build_detail_view(self):
+ '''
+ write out all the expenses for each trip
+ '''
+ for obj in self.get_model_queryset():
+ url = obj.get_absolute_url()
+ path, slug = os.path.split(url)
+ path = '%s/' % path
+ # write html
+ response = self.client.get(url)
+ print(path, slug)
+ self.write_file(path, response.content, filename=slug)
+
+
+def builder():
+ j = BuildExpenses("expenses", "trip")
+ j.build()
diff --git a/app/expenses/models.py b/app/expenses/models.py
index ef9352f..bca23bf 100644
--- a/app/expenses/models.py
+++ b/app/expenses/models.py
@@ -1,7 +1,6 @@
from django.db import models
+from django.core.urlresolvers import reverse
from django.utils import timezone
-from django.template.defaultfilters import slugify
-import datetime
CATS = (
('1', "Travco"),
@@ -13,12 +12,28 @@ CATS = (
('7', "Misc"),
)
+
+class Trip(models.Model):
+ name = models.CharField(max_length=200)
+ slug = models.SlugField()
+ start = models.DateTimeField(default=timezone.now, blank=True, null=True)
+ end = models.DateTimeField(default=timezone.now, blank=True, null=True)
+ dek = models.TextField(null=True, blank=True)
+
+ def __str__(self):
+ return self.name
+
+ def get_absolute_url(self):
+ return reverse("expenses:list_expense", kwargs={"slug": self.slug})
+
+
class Expense(models.Model):
name = models.CharField(max_length=200)
amount = models.DecimalField(max_digits=8, decimal_places=2)
date = models.DateTimeField(default=timezone.now)
notes = models.TextField(null=True, blank=True)
category = models.CharField(max_length=2, choices=CATS, default=1)
+ trip = models.ForeignKey(Trip, null=True)
class Meta:
ordering = ('-date',)
@@ -28,4 +43,3 @@ class Expense(models.Model):
def date_month(self):
return self.date.strftime("%b %Y")
-
diff --git a/app/expenses/urls.py b/app/expenses/urls.py
index fffdfaa..a2cf35a 100644
--- a/app/expenses/urls.py
+++ b/app/expenses/urls.py
@@ -1,7 +1,16 @@
-from django.conf.urls import *
-from django.views.generic.base import RedirectView
+from django.conf.urls import url
+from . import views
-urlpatterns = patterns('',
- url(r'travco-trip-costs/', 'expenses.views.detail'),
-)
+urlpatterns = [
+ url(
+ regex=r'(?P<slug>[-\w]+)$',
+ view=views.ExpenseListView.as_view(),
+ name='list_expense'
+ ),
+ url(
+ regex=r'^$',
+ view=views.TripListView.as_view(),
+ name='list_trip'
+ )
+]
diff --git a/app/expenses/views.py b/app/expenses/views.py
index 7442178..3a8d2cb 100644
--- a/app/expenses/views.py
+++ b/app/expenses/views.py
@@ -1,12 +1,29 @@
-from django.shortcuts import render_to_response, get_object_or_404
-from django.template import RequestContext
+from django.views.generic import ListView
-from .models import Expense, CATS
+from .models import Expense, Trip, CATS
-def detail(request):
- context = {
- 'object_list': Expense.objects.all(),
- 'categories': CATS
- }
- return render_to_response('details/expenses.html', context, context_instance=RequestContext(request))
+class ExpenseListView(ListView):
+ model = Expense
+ context_object_name = 'object_list'
+ template_name = 'details/expenses.html'
+
+ def get_queryset(self):
+ return Expense.objects.filter(
+ trip__slug=self.kwargs['slug']
+ )
+
+ def get_context_data(self, **kwargs):
+ # Call the base implementation first to get a context
+ context = super(ExpenseListView, self).get_context_data(**kwargs)
+ context['categories'] = CATS
+ return context
+
+
+class TripListView(ListView):
+ model = Trip
+ context_object_name = 'object_list'
+ template_name = 'archives/expenses.html'
+
+ def get_queryset(self):
+ return Trip.objects.all()