def draw_chart(request): def validate_and_get_date(request): date_from = request.GET.get('date_from') date_to = request.GET.get('date_to') date_from = datetime.datetime.strptime(date_from, '%Y-%m-%d').date() date_to = datetime.datetime.strptime(date_to, '%Y-%m-%d').date() if date_to < date_from: messages.error(request, _('Invalid period entered')) return HttpResponseRedirect(request.META['HTTP_REFERER']), date_to, date_from return None, date_to, date_from group = None if request.GET.get('group'): group = request.GET.get('group') response, date_to, date_from = validate_and_get_date(request) if response: return response quality = Orderfailure.calculate_service_level(date_from, date_to, group) tooltip_date = "%d %b %Y %H:%M:%S %p" extra_series = {"tooltip": {"y_start": "", "y_end": " calls"}, "date_format": tooltip_date} chartdata = { 'x': quality.keys(), 'name1': _('Quality cofficient'), 'y1': quality.values(), 'extra1': extra_series } charttype = "cumulativeLineChart" data = { 'charttype': charttype, 'chartdata': chartdata, } rc = RequestContext(request, {}) rc.autoescape = False res = render_to_response('graph.html', data, rc) return res
def test_one_week_period_one_hundred_percent(self): created_items = [] skus = [] test_customer = Customer.objects.create(customer_id='test', name='test', city='city', region='region', type='type', shipping_limit=100, address='test') created_items.append(test_customer) for a in xrange(5): sku = StockKeepingUnit.objects.create(stock_keeping_unit_id=str(a), group='test%s' % a, description='test', units_per_parcel=1, units_per_pallet=1, manufacturer='test', country_of_origin='test', traditional_trade=False, location='test', net_weight=Decimal('1.000'), measurement_unit='test', base_units=Decimal('1.000')) created_items.append(sku) skus.append(sku) for j in xrange(7): for i in xrange(100): oper = Operation.objects.create(document='test', direction='test', stock_keeping_unit=skus[i % 5], quantity=Decimal('1.000'), location='test', customer=test_customer, operation_id=i, date=datetime.now()-timedelta(days=j)) oper.date=datetime.now()-timedelta(days=j) oper.save() created_items.append(oper) for a in xrange(5): test_times = [] levels = [] for i in xrange(7): test_times.append(time.mktime((date.today()-timedelta(days=i)).timetuple()) * 1000) levels.append(100) expected_level = [test_times[::-1], levels] res = Orderfailure.calculate_service_level(date.today()-timedelta(days=6), date.today(), 'test%s' % a) trace = 'expected:%(exp)s, result:%(res)s' trace = trace % {'exp' : expected_level, 'res' : res} self.assertEqual(res[0], expected_level[0], trace) self.assertEqual(res[1], expected_level[1], trace) for item in created_items[::-1]: item.delete()
def test_null(self): created_items = [] skus = [] test_customer = Customer.objects.create(customer_id='test', name='test', city='city', region='region', type='type', shipping_limit=100, address='test') created_items.append(test_customer) for a in xrange(5): sku = StockKeepingUnit.objects.create(stock_keeping_unit_id=str(a), group='test%s' % a, description='test', units_per_parcel=1, units_per_pallet=1, manufacturer='test', country_of_origin='test', traditional_trade=False, location='test', net_weight=Decimal('1.000'), measurement_unit='test', base_units=Decimal('1.000')) created_items.append(sku) skus.append(sku) test_time = time.mktime(date.today().timetuple()) * 1000 expected_level = [[test_time], [None]] for a in xrange(5): res = Orderfailure.calculate_service_level(date.today(), date.today(), 'test%s' % a) trace = 'expected:%(exp)s, result:%(res)s' trace = trace % {'exp' : expected_level, 'res' : res} self.assertEqual(res[0], expected_level[0], trace) self.assertEqual(res[1], expected_level[1], trace) for item in created_items[::-1]: item.delete()
def render_quality(request): if request.method == 'POST': try: date_from = request.POST.get('date_from') date_from = datetime.datetime.strptime(date_from, '%Y-%m-%d').date() date_to = request.POST.get('date_to') date_to = datetime.datetime.strptime(date_to, '%Y-%m-%d').date() except: messages.error(request, ugettext_lazy('Enter a correct date')) return HttpResponseRedirect(request.META['HTTP_REFERER']) group = request.POST.getlist('group') chart_type = request.POST.get('type') rc = RequestContext(request, {}) rc.autoescape = False url = '/admin/stock_info/quality_form?group=%(group)s&date_from=%(date_from)s&date_to=%(date_to)s&type=%(type)s' url = url % {'date_from' : date_from, 'date_to' : date_to, 'group' : ', '.join([g for g in group]), 'type' : chart_type} return HttpResponseRedirect(url) date_from = request.GET.get('date_from') try: date_from = datetime.datetime.strptime(date_from, '%Y-%m-%d').date() date_to = request.GET.get('date_to') date_to = datetime.datetime.strptime(date_to, '%Y-%m-%d').date() if date_to < date_from: raise except: messages.error(request, ugettext_lazy('Enter a correct date')) return HttpResponseRedirect(request.META['HTTP_REFERER']) group = request.GET.get('group').split(', ') chart_type = request.GET.get('type') form = QualityForm(initial=request.GET.copy()) form.initial['group'] = group ydata = [] counter = 1 for g in group: if chart_type == QualityForm.SKU_AMOUNT: x_data, y_data = Orderfailure.calculate_service_level(date_from, date_to, g) elif chart_type == QualityForm.ORDER_AMOUNT: x_data, y_data = Orderfailure.calculate_service_level_by_orders(date_from, date_to, g) ydata.append(['y%s' % counter, y_data, g, 'name%s' % counter]) counter += 1 if 'print' in request.GET.keys(): name_file = "service_level%s.csv" % datetime.datetime.now().strftime("%Y-%m-%d_%H:%M:%S") mimetype = 'text/csv' export_file = get_data_file(x_data, ydata) response = HttpResponse(content=export_file.getvalue(), mimetype=mimetype) response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(name_file) return response charttype = 'lineChart' chart_data = {'x' : x_data} for d in ydata: chart_data[d[0]] = d[1] chart_data[d[3]] = d[2] data = {'form' : form, 'charttype' : charttype, 'chartdata' : chart_data, 'extra' : {'x_is_date' : True}} rc = RequestContext(request, {}) rc.autoescape = False return render_to_response('stock_info/quality_service.html', data, rc)