diff --git a/project/customer/views/clients_ajax.py b/project/customer/views/clients_ajax.py index ec16fca..e8f6be9 100644 --- a/project/customer/views/clients_ajax.py +++ b/project/customer/views/clients_ajax.py @@ -53,7 +53,8 @@ def clients_add_ajax(request): 'success': form.is_valid(), 'field_errors': form.errors, # ошибки полей 'form_errors': non_field_errors, # ошибки формы - 'reload': form.is_valid() and 'reload_on_success' in request.GET + #'reload': form.is_valid() and 'reload_on_success' in request.GET + 'reload': False } return HttpResponse(json.dumps(data), mimetype='application/json') @@ -82,7 +83,7 @@ def clients_edit_ajax(request, id): 'success': form.is_valid(), 'field_errors': form.errors, # ошибки полей 'form_errors': non_field_errors, # ошибки формы - 'reload': form.is_valid() and 'reload_on_success' in request.GET + 'reload': False } return HttpResponse(json.dumps(data), mimetype='application/json') @@ -102,6 +103,6 @@ def clients_delete_ajax(request, id): data = { 'success': True, 'message': {'title': 'Инфо', 'msg': 'Контрагент удалён.',}, - 'reload': 'reload_on_success' in request.GET + 'reload': False } return HttpResponse(json.dumps(data), mimetype='application/json') diff --git a/project/docs/autocomplete_light_registry.py b/project/docs/autocomplete_light_registry.py index 4a4c8f5..10d6136 100644 --- a/project/docs/autocomplete_light_registry.py +++ b/project/docs/autocomplete_light_registry.py @@ -3,10 +3,26 @@ import autocomplete_light from django.db.models import Q from models import (Country, Currency, Measure) +from project.customer.models import Client -autocomplete_light.register(Country, name='ACCountry') -autocomplete_light.register(Currency, name='ACCurrency') -autocomplete_light.register(Measure, name='ACMeasure') +class AutocompleteClient(autocomplete_light.AutocompleteModelBase): + '''Автокомплит клиента в зависимости от юзера + ''' + autocomplete_js_attributes = {'placeholder': u'Название предприятия или ИНН или ОКПО'} + + def choices_for_request(self): + q = self.request.GET.get('q', '') + user_ = self.request.user + exclude = self.request.GET.getlist('exclude', []) + choices = self.choices.filter(user=user_).\ + filter(Q(name__contains=q) | Q(inn=q) | Q(okpo=q)).\ + exclude(pk__in=exclude) + return self.order_choices(choices)[0:self.limit_choices] + +autocomplete_light.register(Country, name='ACCountry') +autocomplete_light.register(Currency, name='ACCurrency') +autocomplete_light.register(Measure, name='ACMeasure') +autocomplete_light.register(Client, AutocompleteClient, name='ACClient') diff --git a/project/docs/forms/base_forms.py b/project/docs/forms/base_forms.py index cc5b25a..bb010c6 100644 --- a/project/docs/forms/base_forms.py +++ b/project/docs/forms/base_forms.py @@ -1,4 +1,7 @@ # -*- coding: utf-8 -*- +from django.forms import ModelChoiceField +import autocomplete_light + from project.commons.forms import MyBaseModelForm from project.customer.models import BankAccount, Client @@ -13,6 +16,8 @@ class BaseModelForm(MyBaseModelForm): # Список полей, у которых нужно настроить выборку контрагентов так, чтобы попадали __только__ контрагенты данного # пользователя. Если же пользователь никак не был задан - селекты будут пустыми! Если в форме есть поле client, # то оно настраивается автоматически. + client = ModelChoiceField(Client.objects.all(), label=u'клиент', required=True, + widget=autocomplete_light.ChoiceWidget('ACClient')) adjust_client_fields = [] def __init__(self, user, *args, **kwargs): @@ -49,7 +54,7 @@ class BaseModelForm(MyBaseModelForm): self._adjust_clients() def _adjust_clients(self): - """Настраивает перечисленные в self.adjust_client_fields поля на модель Client.""" + #"""Настраивает перечисленные в self.adjust_client_fields поля на модель Client.""" if self.adjust_client_fields: user_clients = Client.objects.filter(user=self._user) for key in self.adjust_client_fields: diff --git a/project/docs/forms/faktura.py b/project/docs/forms/faktura.py index c773d45..d35a997 100644 --- a/project/docs/forms/faktura.py +++ b/project/docs/forms/faktura.py @@ -6,10 +6,17 @@ import autocomplete_light from project.commons.forms import MyBaseModelForm from .base_forms import BaseModelForm from ..models import Faktura, FakturaItem, PlatDoc +from project.customer.models import Client class FakturaForm(BaseModelForm): """Форма редактирования фактуры.""" + sender = forms.ModelChoiceField(Client.objects.all(), label=u'клиент', required=True, + widget=autocomplete_light.ChoiceWidget('ACClient')) + receiver = forms.ModelChoiceField(Client.objects.all(), label=u'клиент', required=True, + widget=autocomplete_light.ChoiceWidget('ACClient')) + adjust_client_fields = [] + class Meta: model = Faktura fields = ('doc_num', 'doc_date', diff --git a/project/docs/views/base_views.py b/project/docs/views/base_views.py index 3829174..0167215 100644 --- a/project/docs/views/base_views.py +++ b/project/docs/views/base_views.py @@ -586,7 +586,7 @@ class BaseItemsViews(BaseViews): initial_items = kwargs.get('initial_items') form = self.FORM_CLASS(self.request.user, initial=initial) formset = self.ITEM_FORMSET_CLASS(prefix=self.ITEM_FORM_PREFIX, initial=initial_items) - + print form.errors dictionary = { 'padeji': self.PADEJI, 'padeji_mnoj': self.PADEJI_MNOJ, @@ -648,14 +648,8 @@ class BaseItemsViews(BaseViews): else: pformset = None - if self.request.method == 'POST': - formset = self.ITEM_FORMSET_CLASS(self.request.POST, prefix=self.ITEM_FORM_PREFIX, instance=obj) - #print formset.forms[0].data['faktura_items-0-DELETE'] - form = self.FORM_CLASS(self.request.user, data=self.request.POST or None, instance=obj) - else: - formset = self.ITEM_FORMSET_CLASS(prefix=self.ITEM_FORM_PREFIX, instance=obj) - form = self.FORM_CLASS(self.request.user, instance=obj) - + formset = self.ITEM_FORMSET_CLASS(self.request.POST or None, prefix=self.ITEM_FORM_PREFIX, instance=obj) + form = self.FORM_CLASS(self.request.user, data=self.request.POST or None, instance=obj) if form.is_valid() and formset.is_valid() and ((not pformset) or (pformset and pformset.is_valid())): new_obj = form.save() diff --git a/requirements-dev.txt b/requirements-dev.txt index 67fff20..96615c5 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -13,7 +13,7 @@ django-filter==0.7 pytils==0.2.3 psycopg2 flup -django-autocomplete-light==2.0.0pre +django-autocomplete-light==1.4.9 # dev django-devserver diff --git a/requirements.txt b/requirements.txt index 5ebd26d..d342792 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,7 +13,7 @@ django-filter==0.7 pytils==0.2.3 psycopg2 flup -django-autocomplete-light==2.0.0pre +django-autocomplete-light==1.4.9 # dev #django-devserver