views.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. from django.contrib.auth.decorators import login_required
  2. from django.core.urlresolvers import reverse
  3. from django.shortcuts import render, get_object_or_404
  4. from django.db.models import Sum
  5. from .models import Document, Service, ServiceUse, CostUse, GoodUse
  6. @login_required
  7. def list_documents(request):
  8. breadcrumbs = (
  9. ('Documents', reverse('list-documents')),
  10. )
  11. docs = Document.objects.all()\
  12. .prefetch_related('service_set')\
  13. .order_by('-date')
  14. return render(
  15. request, 'costs/documents_list.html', {
  16. 'documents': docs,
  17. 'planning_documents': docs.filter(type=Document.TYPE_PLAN),
  18. 'factual_documents': docs.filter(type=Document.TYPE_FACT),
  19. 'breadcrumbs': breadcrumbs,
  20. })
  21. @login_required
  22. def detail_document(request, pk):
  23. doc = get_object_or_404(Document, pk=pk)
  24. breadcrumbs = (
  25. ('Documents', reverse('list-documents')),
  26. (str(doc), doc.get_absolute_url())
  27. )
  28. return render(
  29. request, 'costs/document_detail.html', {
  30. 'document': doc,
  31. 'breadcrumbs': breadcrumbs,
  32. 'total_recuring_costs': doc.cost_set.aggregate(
  33. sum=Sum('price'))['sum'],
  34. 'total_goods': doc.good_set.aggregate(sum=Sum('price'))['sum'],
  35. })
  36. @login_required
  37. def detail_service(request, pk):
  38. service = Service.objects.get(pk=pk)
  39. doc = service.document
  40. breadcrumbs = (
  41. ('Documents', reverse('list-documents')),
  42. (str(doc), doc.get_absolute_url()),
  43. (service.name, service.get_absolute_url())
  44. )
  45. costs_uses = CostUse.objects.filter(service=service)
  46. goods_uses = GoodUse.objects.filter(service=service)
  47. services_uses = ServiceUse.objects.filter(service=service)
  48. context = {}
  49. context.update(service.get_prices())
  50. context.update({
  51. 'breadcrumbs': breadcrumbs,
  52. 'document': doc,
  53. 'service': service,
  54. 'costs_uses': costs_uses,
  55. 'goods_uses': goods_uses,
  56. 'services_uses': services_uses,
  57. })
  58. return render(request, 'costs/service_detail.html', context)