diff --git a/src/docs/forms/aktrabot.py b/src/docs/forms/aktrabot.py index b06796c..fa04ff5 100644 --- a/src/docs/forms/aktrabot.py +++ b/src/docs/forms/aktrabot.py @@ -46,7 +46,7 @@ class AktRabotItemForm(MyBaseModelForm): class Meta: model = AktRabotItem exclude = ['parent'] - fields ='__all__' + fields = '__all__' class AktRabotItemAdminForm(AktRabotItemForm): diff --git a/src/docs/forms/invoice.py b/src/docs/forms/invoice.py index 789f811..4587214 100644 --- a/src/docs/forms/invoice.py +++ b/src/docs/forms/invoice.py @@ -45,7 +45,8 @@ class InvoiceAdminForm(InvoiceForm): class InvoicesListForm(forms.Form): """Форма со списком всех счетов пользователя.""" - invoice = forms.ModelChoiceField(queryset=Invoice.objects.get_all(None), empty_label=u'все счета', required=False) + invoice = forms.ModelChoiceField(queryset=Invoice.objects.get_all(None), + empty_label=u'все счета', required=False) def __init__(self, user, *args, **kwargs): super(InvoicesListForm, self).__init__(*args, **kwargs) diff --git a/src/docs/models/invoice.py b/src/docs/models/invoice.py index 4960814..fb33099 100644 --- a/src/docs/models/invoice.py +++ b/src/docs/models/invoice.py @@ -1,6 +1,9 @@ # -*- coding: utf-8 -*- from django.db import models +from django.db.models import Sum +from django.conf import settings +from pytils.numeral import choose_plural from docs.models.base_models import BaseInvoiceModel, BaseItemInvoiceModel from docs.models.linked_docs_mixin import LinkedDocsMixin from docs import consts @@ -25,6 +28,22 @@ class Invoice(BaseInvoiceModel, LinkedDocsMixin): verbose_name = u'Счёт' verbose_name_plural = u'Счета' + def to_string_for_json(self): + # Счёт №Х от ХХ.ХХ.ХХ, Х позиций, на сумму ХХ. + # import ipdb;ipdb.set_trace() + date_format = settings.DATE_INPUT_FORMATS[0] + count = self.invoice_items.count() + str_date = self.doc_date.strftime(format=date_format) + + return '{name} № {number} от {date}, {count} {count_name}, на сумму {sum}'.format( + name=self._meta.verbose_name or '', + number=self.doc_num, + date=str_date, + count=count or '', + count_name=choose_plural(count, (u"позиция", u"позиции", u"позиций")), + sum=self.invoice_items.aggregate(Sum('total_price'))['total_price__sum'] + ) + class InvoiceItem(BaseItemInvoiceModel): """Табличная часть счета.""" diff --git a/src/docs/views/ajax.py b/src/docs/views/ajax.py index e498166..95b87ca 100644 --- a/src/docs/views/ajax.py +++ b/src/docs/views/ajax.py @@ -1,13 +1,11 @@ # -*- coding: utf-8 -*- import simplejson as json -from django.shortcuts import render, get_object_or_404, redirect from django.http import HttpResponseBadRequest, HttpResponse from django.core import serializers # use django.apps.apps.get_model since Django 1.9 from django.db.models.loading import get_model -from django.views.decorators.csrf import csrf_protect from docs.models import Invoice from customer.utils import raise_if_no_profile @@ -24,7 +22,7 @@ def get_invoices(request, client_id=None): if client_id: invoices = invoices.filter(client_id=client_id) - invoices = {invoice.id: '№ %s от %s' % (invoice.doc_num, invoice.doc_date) for invoice in invoices} + invoices = {invoice.id: invoice.to_string_for_json() for invoice in invoices} return HttpResponse(json.dumps(invoices), content_type='application/json') @@ -49,7 +47,8 @@ def get_client_by_invoice(request, invoice_id): invoice = Invoice.objects.get(company=request.user.profile, pk=invoice_id) - return HttpResponse(json.dumps([invoice.client.id, invoice.client.name]), content_type='application/json') + return HttpResponse(json.dumps([invoice.client.id, invoice.client.name]), + content_type='application/json') def toggle_doc_status(request, doc_type, doc_id, doc_attr): diff --git a/src/docs/views/base_views.py b/src/docs/views/base_views.py index d5a6994..8accd47 100644 --- a/src/docs/views/base_views.py +++ b/src/docs/views/base_views.py @@ -624,7 +624,7 @@ class BaseItemsViews(BaseViews): """ queryset = super(BaseItemsViews, self).get_list_qs() if self.LIST_SUM_FIELD: - queryset = queryset.annotate(doc_sum = Sum(self.LIST_SUM_FIELD)) + queryset = queryset.annotate(doc_sum=Sum(self.LIST_SUM_FIELD)) return queryset def get_obj_items_qs(self, obj):