Project

General

Profile

Download (2.69 KB) Statistics
| Branch: | Tag: | Revision:

calebasse / calebasse / cbv.py @ a152245f

1
from datetime import datetime
2
from dateutil.relativedelta import relativedelta
3

    
4
from django.views.generic import list as list_cbv, edit, base # ListView
5
# from django.views.generic.edit import # CreateView, DeleteView, UpdateView
6
from django.shortcuts import get_object_or_404
7
from django.http import Http404
8
from django.core.urlresolvers import resolve
9

    
10
from calebasse.ressources.models import Service
11

    
12
class ReturnToObjectMixin(object):
13
    def get_success_url(self):
14
        return '../#object-' + str(self.get_object().pk)
15

    
16
class ServiceFormMixin(object):
17
    def get_form_kwargs(self):
18
        kwargs = super(ServiceFormMixin, self).get_form_kwargs()
19
        kwargs['service'] = self.service
20
        return kwargs
21

    
22
class ServiceViewMixin(object):
23
    service = None
24
    date = None
25
    popup = False
26

    
27
    def dispatch(self, request, **kwargs):
28
        self.popup = request.GET.get('popup')
29
        if 'service' in kwargs:
30
            self.service = get_object_or_404(Service, slug=kwargs['service'])
31
        if 'date' in kwargs:
32
            try:
33
                self.date = datetime.strptime(kwargs.get('date'),
34
                        '%Y-%m-%d').date()
35
            except (TypeError, ValueError):
36
                raise Http404
37
        return super(ServiceViewMixin, self).dispatch(request, **kwargs)
38

    
39
    def get_context_data(self, **kwargs):
40
        context = super(ServiceViewMixin, self).get_context_data(**kwargs)
41
        context['url_name'] = resolve(self.request.path).url_name
42
        context['popup'] = self.popup
43
        if self.service is not None:
44
            context['service'] = self.service.slug
45
            context['service_name'] = self.service.name
46

    
47
        if self.date is not None:
48
            context['date'] = self.date
49
            context['previous_day'] = self.date + relativedelta(days=-1)
50
            context['next_day'] = self.date + relativedelta(days=1)
51
            context['previous_month'] = self.date + relativedelta(months=-1)
52
            context['next_month'] = self.date + relativedelta(months=1)
53
        return context
54

    
55
class TemplateView(ServiceViewMixin, base.TemplateView):
56
    pass
57

    
58
class ModelNameMixin(object):
59
    def get_context_data(self, **kwargs):
60
        ctx = super(ModelNameMixin, self).get_context_data(**kwargs)
61
        ctx['model_verbose_name_plural'] = self.model._meta.verbose_name_plural
62
        ctx['model_verbose_name'] = self.model._meta.verbose_name
63
        return ctx
64

    
65
class ListView(ModelNameMixin, ServiceViewMixin, list_cbv.ListView):
66
    pass
67

    
68

    
69
class CreateView(ModelNameMixin, ServiceViewMixin, edit.CreateView):
70
    pass
71

    
72

    
73
class DeleteView(ModelNameMixin, ServiceViewMixin, edit.DeleteView):
74
    pass
75

    
76

    
77
class UpdateView(ModelNameMixin, ServiceViewMixin, edit.UpdateView):
78
    pass
(3-3/11)