diff options
author | luxagraf <sng@luxagraf.net> | 2015-11-20 14:21:49 -0500 |
---|---|---|
committer | luxagraf <sng@luxagraf.net> | 2015-11-20 14:21:49 -0500 |
commit | 9412a3793b298daa14179c4f3789fe3ffc46ecba (patch) | |
tree | 68b439a9174522ed96e9262a209032cfd6e11016 /app | |
parent | 1167d8086a826a4896cdcb5b36e78eeb1e6e8fb0 (diff) |
About halfway through adding income by month section to admin.
Diffstat (limited to 'app')
-rw-r--r-- | app/TODO | 4 | ||||
-rw-r--r-- | app/income/admin.py | 52 | ||||
-rw-r--r-- | app/pages/models.py | 12 |
3 files changed, 54 insertions, 14 deletions
@@ -16,7 +16,9 @@ revamp notes to be like my own personal instagram income app: -Add admin pages for viewing income by month, including future. So page with list of months and links to months: /admin/income/month/ default to current month, add option GET param to show past months, add code to views and call it from base_urls before main admin include. show everything with status accepted and then the separately show pitched as possibilities, then show totals alongside how much we need to live. If invoice is submitted show date submitted and create a probably pay date for each publisher. +- Add pitched stories as possibilities below total, t +- show totals alongside how much we need to live. +- add pay_turnaround field for each publisher and show in admin --- diff --git a/app/income/admin.py b/app/income/admin.py index d8430be..02c01ef 100644 --- a/app/income/admin.py +++ b/app/income/admin.py @@ -1,9 +1,17 @@ +import datetime from django.contrib import admin +from django.db.models import Sum +from django.contrib.admin import helpers +from django.contrib.gis.admin import OSMGeoAdmin +from django.conf.urls import patterns +from django.conf.urls import url +from django.shortcuts import render + from .models import Gig -class GigAdmin(admin.ModelAdmin): +class GigAdmin(OSMGeoAdmin): list_display = ('title', 'status', 'payment_status', 'invoice_date', 'payment', 'publisher', 'pub_date', 'word_count') list_filter = ('publisher', 'status', 'payment_status') fieldsets = ( @@ -11,8 +19,8 @@ class GigAdmin(admin.ModelAdmin): 'fields': ( 'title', 'pitch', - ('payment', 'pay_type','payment_status', 'invoice_date'), - ('status', 'pub_date', 'word_count' ), + ('payment', 'pay_type', 'payment_status', 'invoice_date'), + ('status', 'pub_date', 'word_count'), 'publisher', 'pub_item' ), @@ -24,4 +32,42 @@ class GigAdmin(admin.ModelAdmin): } ), ) + + def get_urls(self): + urls = super(GigAdmin, self).get_urls() + custom_urls = patterns('', + url(r'^monthly/$', + self.admin_site.admin_view(self.get_monthly), + name='monthly_admin') + ) + return custom_urls + urls + + def get_monthly(self, request): + context = { + 'title': ("This month's income"), + 'app_label': self.model._meta.app_label, + 'opts': self.model._meta, + 'has_change_permission': self.has_change_permission(request) + } + try: + year = request.GET["m"].split("-")[0] + month = request.GET["m"].split("-")[1] + except: + year = datetime.datetime.now().strftime('%Y') + month = datetime.datetime.now().strftime('%m') + qs = self.model.objects.filter( + created__year=year, + created__month=month, + status__in=[1, 2, 3] + ) + context['date'] = datetime.datetime.now() + context['billed'] = qs.filter(payment_status=1) + context['billed_total'] = qs.filter(payment_status=1).aggregate(total_payment=Sum('payment')) + context['unbilled'] = qs.filter(payment_status=0) + context['unbilled_total'] = qs.filter(payment_status=0).aggregate(total_payment=Sum('payment')) + context['total_outstanding'] = qs.aggregate(total_payment=Sum('payment')) + context['months'] = self.model.objects.dates('created', 'month') + return render(request, 'admin/income_month.html', context) + + admin.site.register(Gig, GigAdmin) diff --git a/app/pages/models.py b/app/pages/models.py index 832b958..0062bd9 100644 --- a/app/pages/models.py +++ b/app/pages/models.py @@ -1,15 +1,6 @@ from django.db import models from django.contrib.sitemaps import Sitemap -import markdown -from mdx_attr_list.mdx_attr_list import AttrListExtension -def markdown_processor(txt): - md = markdown.Markdown( - extensions=[AttrListExtension(),'footnotes',], - output_format='html5', - safe_mode=False - ) - return md.convert(txt) class Page(models.Model): title = models.CharField(max_length=200) @@ -17,6 +8,7 @@ class Page(models.Model): body_html = models.TextField(blank=True) body_markdown = models.TextField() meta_description = models.CharField(max_length=256, null=True, blank=True) + #path = models.CharField(max_length=200, null=True, blank=True) def __unicode__(self): return self.title @@ -25,7 +17,7 @@ class Page(models.Model): return "/%s/" % (self.slug) def save(self): - #run markdown + # run markdown self.body_html = markdown_processor(self.body_markdown) super(Page, self).save() |