Example #1
0
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
Example #2
0
 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()
Example #3
0
 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()
Example #4
0
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)