def batchs(request): queryset = Batch.objects.select_related('frost_resistance','width').prefetch_related('parts','parts__rows').all() datefilter = YearMonthFilter(request.GET or None,model=Batch) factory = PartAddFormSet(request.POST or None,queryset=Part.objects.select_related('brick','brick__width')\ .prefetch_related('batch','rows','batch__frost_resistance','batch__width').filter(brick__isnull=True)) if request.method == 'POST' and factory.is_valid(): factory.save() messages.success(request, u'Успешно сохранено!') return redirect(reverse_lazy('whs:Add-list')) rpp = request.GET.get('rpp',20) if datefilter.is_valid(): data = dict(filter(lambda i:i[1],datefilter.cleaned_data.items())) queryset = queryset.filter(**data) return render(request, 'whs/batchs.html', dict(object_list=queryset,rpp=rpp, datefilter=datefilter,factory=factory))
def sortings(request): def prep1(v): if isinstance(v,str): return "'%s'" % v else: return v def prep2(queryset): query,params = queryset.query.sql_with_params() return query.replace('SUM(T4."amount")','COALESCE(SUM(T4."amount"),0)') % tuple(map(prep1,params)) q1 = Sorting.objects.filter(type=0).annotate(Sum('sorted__amount')).exclude(sorted__amount__sum=F('amount')) q2 = Sorting.objects.filter(type=0).annotate(Sum('sorted__amount')) datefilter = YearMonthFilter(request.GET or None,model=Sorting) rpp = request.GET.get('rpp',20) if datefilter.is_valid(): data = dict(filter(lambda i:i[1],datefilter.cleaned_data.items())) queryset = q2.filter(**data) else: date = datetime.date.today() data = {'date__year':date.year,'date__month':date.month} q2 = q2.filter(**data) queryset = Sorting.objects.raw("(%s) UNION (%s) ORDER BY date DESC" % tuple(map(prep2,[q1,q2]))) return render(request, 'whs/sortings.html', dict(object_list=queryset,rpp=rpp,datefilter=datefilter))
def bills(request): queryset = Bill.objects.prefetch_related('solds', 'pallets', 'solds__brick', 'solds__brick_from', 'seller', 'agent').select_related() billfilter = BillFilter(request.GET or None) datefilter = YearMonthFilter(request.GET or None,model=Bill) rpp = request.GET.get('rpp',20) if billfilter.is_valid(): data = dict(filter(lambda i:i[1],billfilter.cleaned_data.items())) if data.has_key('page'): data.pop('page') if data.has_key('brick'): data['solds__brick'] = data.pop('brick') if data.has_key('rpp'): data.pop('rpp') queryset = queryset.filter(**data) if datefilter.is_valid(): data = dict(filter(lambda i:i[1],datefilter.cleaned_data.items())) queryset = queryset.filter(**data) return render(request,'whs/bills.html',dict(filter=billfilter,datefilter=datefilter, object_list=queryset,rpp=rpp))
def bricks(request): """ Главная страница """ Bricks = Brick.objects.all() form = YearMonthFilter(request.GET or None,model=Bill) if form.is_valid(): data = dict([(k, v) for k, v in form.cleaned_data.items() if v is not None]) if data.has_key('date__month'): begin = datetime.date(year=data['date__year'], month=data['date__month'], day=1) end = begin + relativedelta(months=1) else: begin = datetime.date(year=data['date__year'], month=1, day=1) end = begin + relativedelta(years=1) before = operations(dict(date__gte=end)) before = calc(before) else: begin = datetime.date.today().replace(day=1) end = begin + relativedelta(months=1) before = {} opers = operations(dict(date__range=(begin, end - datetime.timedelta(1)))) for b in Bricks: if before: b.total += before.get(b.pk, 0) b.sold = opers['sold'].get(b.pk, 0) b.add = opers['add'].get(b.pk, 0) b.t_from = opers['t_from'].get(b.pk, 0) b.t_to = opers['t_to'].get(b.pk, 0) b.m_from = opers['m_from'].get(b.pk, 0) b.m_to = opers['m_to'].get(b.pk, 0) b.m_rmv = opers['m_rmv'].get(b.pk, 0) b.inv = opers['inv'].get(b.pk, 0) b.begin = (b.total + b.sold + b.t_from - b.t_to # Накладные - b.add # Приход + b.inv # Инвенторизация + b.m_from - b.m_to # + b.m_rmv # Перебор кирпича в цехе ) b.opers = b.sold or b.add or b.t_from or b.t_to or b.m_from or b.m_to or b.m_rmv or b.inv return render(request, 'whs/bricks.html', dict(Bricks=Bricks, order=Brick.order, form=form,brick_menu = get_menu(), begin=begin, end=end - datetime.timedelta(1)))
def transfers(request): datefilter = YearMonthFilter(request.GET or None,model=Bill) queryset = Sold.objects.filter(brick_from__isnull=False).values('brick__mark','brick_from__mark').annotate(Sum('amount')) if datefilter.is_valid(): data = dict([('doc__'+k,v) for k,v in datefilter.cleaned_data.items() if v]) else: date = datetime.date.today() data = {'doc__date__year':date.year,'doc__date__month':date.month} queryset = queryset.filter(**data) d = dict(map(lambda x: (x[0],0),mark_c)) out = OrderedDict() for m,l in mark_c: out[m]=OrderedDict() for w,l in mark_c: out[m][w]=0 d = out for s in queryset: q = out.get(s['brick_from__mark'],d) q[s['brick__mark']]=s['amount__sum'] out[s['brick_from__mark']]=q print out return render(request,'whs/transfers.html',{'data':out,'datefilter':datefilter})