views.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. from itertools import chain
  2. from django.core.urlresolvers import reverse
  3. from django.shortcuts import render, get_object_or_404
  4. from .models import Document, Service, Cost, Good, CostUse, GoodUse
  5. def index(request):
  6. return render(request, 'costs/index.html')
  7. def list_services(request):
  8. services_list = Service.objects.order_by('document')
  9. context = {
  10. 'services': services_list,
  11. }
  12. return render(request, 'costs/services_list.html', context)
  13. def list_resources(request):
  14. context = {
  15. 'goods': Good.objects.all(),
  16. 'costs': Cost.objects.all(),
  17. }
  18. return render(request, 'costs/resources_list.html', context)
  19. def list_documents(request):
  20. breadcrumbs = (
  21. ('Documents', reverse('list-documents')),
  22. )
  23. docs = Document.objects.all().prefetch_related('service_set')
  24. return render(
  25. request, 'costs/documents_list.html', {
  26. 'documents': docs,
  27. 'breadcrumbs': breadcrumbs,
  28. })
  29. def detail_document(request, pk):
  30. doc = get_object_or_404(Document, pk=pk)
  31. breadcrumbs = (
  32. ('Documents', reverse('list-documents')),
  33. (doc.name, doc.get_absolute_url())
  34. )
  35. return render(
  36. request, 'costs/document_detail.html', {
  37. 'document': doc,
  38. 'breadcrumbs': breadcrumbs,
  39. })
  40. def detail_service(request, pk):
  41. service = Service.objects.get(pk=pk)
  42. doc = service.document
  43. breadcrumbs = (
  44. ('Documents', reverse('list-documents')),
  45. (doc.name, doc.get_absolute_url()),
  46. (service.name, service.get_absolute_url())
  47. )
  48. costs_uses = CostUse.objects.filter(service=service)
  49. goods_uses = GoodUse.objects.filter(service=service)
  50. total_costs_price = sum(chain(
  51. (i.monthly_provision_share() for i in goods_uses),
  52. (i.cost_share() for i in costs_uses),
  53. ))
  54. total_goods_value_share = sum(i.value_share() for i in goods_uses)
  55. if service.subscriptions_count == 0:
  56. unit_costs_price = 0
  57. unit_goods_value_share = 0
  58. else:
  59. unit_costs_price = total_costs_price/service.subscriptions_count
  60. unit_goods_value_share = total_goods_value_share/service.subscriptions_count
  61. context = {
  62. 'breadcrumbs': breadcrumbs,
  63. 'service': service,
  64. 'costs_uses': costs_uses,
  65. 'goods_uses': goods_uses,
  66. 'total_costs_price': total_costs_price,
  67. 'unit_costs_price': unit_costs_price,
  68. 'total_goods_value_share': total_goods_value_share,
  69. 'unit_goods_value_share': unit_goods_value_share,
  70. 'monthly_fas': unit_goods_value_share/12,
  71. }
  72. return render(request, 'costs/service_detail.html', context)