views.py 2.3 KB

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