views.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. # -*- coding: utf-8 -*-
  2. from django.shortcuts import render
  3. from django.http import HttpResponse
  4. from django.template import RequestContext, Context, loader
  5. from asuzr.models import Product
  6. from asuzr.models import Attendance
  7. from asuzr.models import Order
  8. from asuzr.models import OrderPlan
  9. from asuzr.models import Schedule
  10. from datetime import datetime, date, timedelta
  11. import calendar
  12. from django.db.models import Count, Sum
  13. from asuzr.common import custom_date
  14. from tables import *
  15. from django_tables2 import RequestConfig
  16. def prod_list(request):
  17. product_list = Product.objects.all()
  18. t = loader.get_template('asuzr/prod_list.html')
  19. c = Context({
  20. 'product_list': product_list,
  21. })
  22. return HttpResponse(t.render(c))
  23. def prod_detail(request, prod_id):
  24. return HttpResponse("This is %s" % prod_id)
  25. def get_filtered_list(p_list, year, month):
  26. filtered_list=[]
  27. for a in p_list:
  28. a_date = a.date
  29. if a_date.strftime('%m/%Y').lstrip('0') == '/'.join((month,year)).lstrip('0'):
  30. filtered_list.append(a)
  31. return filtered_list
  32. def get_orders_by_date(dt):
  33. order_list = Order.objects.filter(date=dt).order_by('id')
  34. return order_list
  35. def main(request, day, month, year):
  36. d,m,y=int(day),int(month), int(year)
  37. attend_list = Attendance.objects.all().order_by('date')
  38. filtered_attend_list=get_filtered_list(attend_list, year, month)
  39. p_date = datetime.strptime(day+'/'+month+'/'+year, '%d/%m/%Y')
  40. order_list = Order.objects.filter(date=p_date).order_by('id')
  41. month_order_list=Order.objects.filter(date__range=(date(y,m,1),date(y,m,calendar.monthrange(y,m)[1]))).values('date').annotate(Count('product'),Sum('price'))
  42. plan = OrderPlan.objects.all()
  43. filtered_plan = get_filtered_list(plan, year, month)
  44. month_plan=0
  45. if len(filtered_plan) > 0:
  46. month_plan=filtered_plan[0].plan
  47. schedule = Schedule.objects.all().order_by('date')
  48. filtered_schedule = get_filtered_list(schedule, year, month)
  49. month_days={i: {'date': custom_date(int(year),int(month),i)} for i in range(1,calendar.monthrange(int(year),int(month))[1]+1)}
  50. for l in filtered_attend_list:
  51. month_days[l.date.day]['attend']=l
  52. for s in filtered_schedule:
  53. if 'designers' in month_days[s.date.day]:
  54. des=', '.join((month_days[s.date.day]['designers'], ' '.join((s.designer.first_name, s.designer.last_name))))
  55. month_days[s.date.day]['designers'] = des
  56. else:
  57. month_days[s.date.day]['designers'] = ' '.join((s.designer.first_name, s.designer.last_name))
  58. for order in month_order_list:
  59. month_days[order['date'].day]['orders_count'] = order['product__count']
  60. month_days[order['date'].day]['orders_price'] = order['price__sum']
  61. month_days_values = month_days.values()
  62. sum_calls = sum(l.calls for l in filtered_attend_list)
  63. sum_visits = sum(l.visits for l in filtered_attend_list)
  64. sum_orders = sum(l['orders_count'] for l in month_days_values if 'orders_count' in l)
  65. sum_price = sum(l['orders_price'] for l in month_days_values if 'orders_price' in l)
  66. sum_order_price = sum(l.price for l in order_list)
  67. plan_balance = month_plan-sum_price
  68. d_date = p_date.strftime("%d/%m/%Y")
  69. t = loader.get_template('asuzr/attend_order.html')
  70. c = RequestContext(request,{
  71. 'attend_list': month_days_values,
  72. 'order_list': order_list,
  73. 'sum_calls': sum_calls,
  74. 'sum_visits': sum_visits,
  75. 'sum_orders': sum_orders,
  76. 'sum_price': sum_price,
  77. 'sum_order_price': sum_order_price,
  78. 'plan': month_plan,
  79. 'balance': plan_balance,
  80. 'd_date': d_date,
  81. })
  82. return HttpResponse(t.render(c))
  83. def order_list(request):
  84. table = OrdersTable(Order.objects.filter(is_done=False))
  85. RequestConfig(request).configure(table)
  86. return render(request, 'asuzr/table.html', {'table': table, 'title': 'Таблица выхода заказов'})
  87. def orders(request, archive):
  88. if archive=='0':
  89. return order_list(request)
  90. else:
  91. is_done_value=True
  92. o_list = Order.objects.filter(is_done=is_done_value).order_by('-id')
  93. t=loader.get_template('asuzr/orders.html')
  94. c=RequestContext(request, {
  95. 'order_list': o_list,
  96. 'archive': is_done_value,
  97. })
  98. return HttpResponse(t.render(c))
  99. def desreport(request):
  100. start_date = request.GET.get('sdate', date.today().strftime('%d.%m.%y'))
  101. sdate = datetime.strptime(start_date, '%d.%m.%y')
  102. end_date = request.GET.get('edate', date.today().strftime('%d.%m.%y'))
  103. edate = datetime.strptime(end_date, '%d.%m.%y')
  104. des_list = Order.objects.filter(cancelled=False, date__range=(sdate,edate)).values('designer__first_name','designer__last_name').annotate(Sum('price'),Count('designer'))
  105. t=loader.get_template('asuzr/desreport.html')
  106. c=Context({
  107. 'des_list' : des_list,
  108. 'start_date' : start_date,
  109. 'end_date' : end_date,
  110. })
  111. return HttpResponse(t.render(c))
  112. def table_test(request):
  113. table = OrdersTable(Order.objects.filter(is_done=False))
  114. RequestConfig(request).configure(table)
  115. return render(request, 'asuzr/tabletest.html', {'table': table})