views.py 2.0 KB

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