summaryrefslogtreecommitdiff
path: root/app/income/admin.py
blob: b165371e1f70027b4d79effc8a17f53623bbaf11 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import datetime
from django.contrib import admin
from django.db.models import Sum
from django.contrib.gis.admin import OSMGeoAdmin
from django.conf.urls import url
from django.shortcuts import render


from .models import Gig, Invoice, InvoiceItem


@admin.register(InvoiceItem)
class InvoiceItemAdmin(admin.ModelAdmin):
    list_display = ('time_start', 'time_end', 'work_done')


@admin.register(Invoice)
class InvoiceAdmin(admin.ModelAdmin):
    list_display = ('title', 'admin_link', 'date_start', 'date_end')


@admin.register(Gig)
class GigAdmin(OSMGeoAdmin):
    list_display = ('title', 'status', 'due_date', 'payment_status', 'payment', 'publisher', 'word_count')
    list_filter = ('publisher', 'status', 'payment_status')
    fieldsets = (
        ('Gig', {
            'fields': (
                'title',
                'pitch',
                ('created', 'due_date'),
                ('payment', 'pay_type', 'payment_status', 'invoice_date'),
                ('status', 'pub_date', 'word_count'),
                'publisher',
                'pub_item'
            ),
            'classes': (
                'show',
                'extrapretty',
                'wide'
            )
        }
        ),
    )

    def get_urls(self):
        urls = super(GigAdmin, self).get_urls()
        custom_urls = [
            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['pitched'] = self.model.objects.filter(
            created__year=year,
            created__month=month,
            status=0
        )
        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)