diff --git a/requirements/base.txt b/requirements/base.txt index be233bc..7774738 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -71,3 +71,4 @@ django-redis==4.8.0 redis==2.10.5 trans==2.1.0 python-decouple==3.0 +flake8==3.2.1 diff --git a/src/docs/forms/aktrabot.py b/src/docs/forms/aktrabot.py index a36eb29..c89d57d 100644 --- a/src/docs/forms/aktrabot.py +++ b/src/docs/forms/aktrabot.py @@ -31,7 +31,6 @@ class AktRabotForm(BaseModelForm): class AktRabotAdminForm(AktRabotForm): """Форма редактирования акта выполн. работ - для админки.""" class Meta(AktRabotForm.Meta): - # fields = None exclude = () _textarea = forms.Textarea(attrs={'cols': 80, 'rows': 3}) widgets = { @@ -39,7 +38,8 @@ class AktRabotAdminForm(AktRabotForm): } def __init__(self, *args, **kwargs): - # обязательно нужно вызывать родительский __init__ и передавать ему None вместо user - иначе глюки ! + # обязательно нужно вызывать родительский __init__ + # и передавать ему None вместо user - иначе глюки ! super(AktRabotAdminForm, self).__init__(None, *args, **kwargs) diff --git a/src/docs/forms/base_forms.py b/src/docs/forms/base_forms.py index 776172d..e3d308c 100644 --- a/src/docs/forms/base_forms.py +++ b/src/docs/forms/base_forms.py @@ -14,18 +14,25 @@ class BaseModelForm(MyBaseModelForm): Добавляет к методу __init__ обязательный атрибут user. """ - # Список полей, у которых нужно настроить выборку контрагентов так, чтобы попадали __только__ контрагенты данного - # пользователя. Если же пользователь никак не был задан - селекты будут пустыми! Если в форме есть поле client, + # Список полей, у которых нужно настроить выборку контрагентов + # так, чтобы попадали __только__ контрагенты данного + # пользователя. Если же пользователь никак не был задан - селекты + # будут пустыми! Если в форме есть поле client, # то оно настраивается автоматически. - client = ModelChoiceField(Client.objects.all(), label=u'клиент', required=True, - widget=autocomplete_light.ChoiceWidget('ACClient')) + client = ModelChoiceField( + Client.objects.all(), + label='клиент', + required=True, + widget=autocomplete_light.ChoiceWidget('ACClient') + ) adjust_client_fields = [] def __init__(self, user, *args, **kwargs): super(BaseModelForm, self).__init__(*args, **kwargs) self._user = user - # Если передали user=None, то попробовать взять user из kwargs['instance'], а потом из self.data + # Если передали user=None, то попробовать взять + # user из kwargs['instance'], а потом из self.data if not self._user: try: self._user = getattr(kwargs.get('instance'), 'user') @@ -43,14 +50,17 @@ class BaseModelForm(MyBaseModelForm): if f.get('fix_doc_date'): f['fix_doc_date'].widget.attrs['class'] = 'has-datepicker' - # Если в форме есть поле bank_account, настроить связь с BankAccount: чтобы можно было выбрать __только__ - # расчетные счета данного пользователя. Также убрать пустой вариант из селекта. + # Если в форме есть поле bank_account, настроить связь + # с BankAccount: чтобы можно было выбрать __только__ + # расчетные счета данного пользователя. Также убрать + # пустой вариант из селекта. if 'bank_account' in f: user_accounts = BankAccount.objects.get_all(self._user.profile) f['bank_account'].queryset = user_accounts f['bank_account'].empty_label = None - # Если в форме есть поле client, настроить связь с Client: чтобы можно было выбрать __только__ + # Если в форме есть поле client, настроить связь с Client: чтобы + # можно было выбрать __только__ # контрагентов данного пользователя. if 'invoice' in f: user_invoices = Invoice.objects.filter(company=self._company) @@ -60,6 +70,9 @@ class BaseModelForm(MyBaseModelForm): user_clients = Client.objects.filter(company=self._company) f['client'].queryset = user_clients + if 'currency' in f: + f['currency'].initial = 3 + # Настроить связь других полей с контрагентами. self._adjust_clients() diff --git a/src/docs/forms/faktura.py b/src/docs/forms/faktura.py index 43be389..fc3a8ce 100644 --- a/src/docs/forms/faktura.py +++ b/src/docs/forms/faktura.py @@ -11,19 +11,26 @@ from customer.models import Client class FakturaForm(BaseModelForm): """Форма редактирования фактуры.""" - sender = forms.ModelChoiceField(Client.objects.all(), label=u'клиент', required=False, - widget=autocomplete_light.ChoiceWidget('ACClient')) - receiver = forms.ModelChoiceField(Client.objects.all(), label=u'клиент', required=False, - widget=autocomplete_light.ChoiceWidget('ACClient')) + sender = forms.ModelChoiceField( + Client.objects.all(), + label='клиент', + required=False, + widget=autocomplete_light.ChoiceWidget('ACClient') + ) + receiver = forms.ModelChoiceField( + Client.objects.all(), + label='клиент', + required=False, + widget=autocomplete_light.ChoiceWidget('ACClient') + ) adjust_client_fields = [] + class Meta: model = Faktura fields = ( 'doc_num', 'doc_date', - 'plat_doc_num', - 'plat_doc_date', 'fix_doc_num', 'fix_doc_date', 'client', @@ -42,7 +49,6 @@ class FakturaForm(BaseModelForm): _textarea = forms.Textarea(attrs={'cols': 80, 'rows': 3}) widgets = { 'doc_text': _textarea, - 'currency': autocomplete_light.ChoiceWidget('ACCurrency'), 'nds_method': forms.RadioSelect() } @@ -58,13 +64,17 @@ class FakturaAdminForm(FakturaForm): } def __init__(self, *args, **kwargs): - # обязательно нужно вызывать родительский __init__ и передавать ему None вместо user - иначе глюки ! + # обязательно нужно вызывать родительский __init__ + # и передавать ему None вместо user - иначе глюки ! super(FakturaAdminForm, self).__init__(None, *args, **kwargs) class FakturaItemForm(MyBaseModelForm): """Форма редактирования табличной части фактуры.""" - country_name = forms.CharField(widget=autocomplete_light.TextWidget('ACCountry'),) + country_name = forms.CharField( + widget=autocomplete_light.TextWidget('ACCountry') + ) + class Meta: model = FakturaItem exclude = ['parent'] @@ -75,4 +85,3 @@ class FakturaItemAdminForm(FakturaItemForm): """Форма редактирования табличной части фактуры - для админки.""" class Meta(FakturaItemForm.Meta): exclude = None - diff --git a/src/docs/models/faktura.py b/src/docs/models/faktura.py index c8fdb5e..93649a1 100644 --- a/src/docs/models/faktura.py +++ b/src/docs/models/faktura.py @@ -3,7 +3,7 @@ from django.db import models from customer.models import Client from docs.models.base_models import BaseInvoiceModel, BaseItemInvoiceModel -from docs.models.refs import Currency, Country, Measure +from docs.models.refs import Currency from docs.models.mixins import SignedStatusFieldMixin, InvoiceFieldMixin from docs.models.linked_docs_mixin import LinkedDocsMixin @@ -15,9 +15,26 @@ class Faktura(BaseInvoiceModel, SignedStatusFieldMixin, InvoiceFieldMixin, Linke avance = models.BooleanField(u'аванс', default=False) currency = models.ForeignKey(Currency, verbose_name=u'валюта', null=True) user_is_sender = models.BooleanField(u'пользователь - отправитель', default=False) - sender = models.ForeignKey(Client, related_name='sender_fakturas', blank=True, null=True, verbose_name=u'Отправитель') - receiver = models.ForeignKey(Client, related_name='receiver_fakturas', blank=True, null=True, verbose_name=u'Получатель') - plat_doc_num = models.CharField(u'Номер платёжного документа', max_length=30, blank=True, default='') + sender = models.ForeignKey( + Client, + related_name='sender_fakturas', + blank=True, + null=True, + verbose_name=u'Отправитель' + ) + receiver = models.ForeignKey( + Client, + related_name='receiver_fakturas', + blank=True, + null=True, + verbose_name=u'Получатель' + ) + plat_doc_num = models.CharField( + 'Номер платёжного документа', + max_length=30, + blank=True, + default='' + ) plat_doc_date = models.DateField('Дата платёжного документа', blank=True, null=True) fix_doc_num = models.PositiveIntegerField(u'Номер исправления', null=True, blank=True) fix_doc_date = models.DateField('Дата исправления', blank=True, null=True) @@ -37,7 +54,6 @@ class Faktura(BaseInvoiceModel, SignedStatusFieldMixin, InvoiceFieldMixin, Linke """Получатель и адрес """ if self.receiver: - #return self.user return '%s, %s' % (self.receiver.name, self.receiver.address) else: return u'' @@ -50,15 +66,24 @@ class Faktura(BaseInvoiceModel, SignedStatusFieldMixin, InvoiceFieldMixin, Linke class FakturaItem(BaseItemInvoiceModel): """Табличная часть фактуры""" - units_kod = models.CharField(u'Код единицы измерения', max_length=10, blank=True, default=u'-') + units_kod = models.CharField( + 'Код единицы измерения', + max_length=10, + blank=True, + default=u'-' + ) parent = models.ForeignKey(Faktura, related_name='faktura_items') country_code = models.CharField(u'Код страны', max_length=10, blank=True, default=u'-') country_name = models.CharField(u'Название страны', max_length=256) gtd = models.CharField(u'Основание', max_length=256, blank=True, default='') - ntd = models.CharField(u'Номер транспортной декларации', max_length=256, blank=True, default='') - #measure = models.ForeignKey(Measure, related_name='m_faktura_items') + ntd = models.CharField( + u'Номер транспортной декларации', + max_length=256, + blank=True, + default='' + ) class Meta(BaseItemInvoiceModel.Meta): verbose_name = u'Табл. часть фактуры' verbose_name_plural = u'Табл. части фактур' - app_label="docs" + app_label = "docs" diff --git a/src/docs/views/base_views.py b/src/docs/views/base_views.py index 42e2590..44fe175 100644 --- a/src/docs/views/base_views.py +++ b/src/docs/views/base_views.py @@ -804,7 +804,8 @@ class BaseItemsViews(BaseViews): new_obj.receiver = new_obj.client elif receiver == 'nobody': new_obj.receiver = None - + # + # sender = form.data.get('sender_group', None) if sender == 'he_is': new_obj.user_is_sender = True diff --git a/src/dokumentor/static/css/style.css b/src/dokumentor/static/css/style.css index 73f1822..9ca4e2f 100644 --- a/src/dokumentor/static/css/style.css +++ b/src/dokumentor/static/css/style.css @@ -860,3 +860,31 @@ input[type=number] { .nds_block__inline { display: inline-block; } + +.doc-form select#id_currency {width: 330px;height: 40px;font-size: 25px;margin-left: 0;padding-left: 2px;} + +#fixes, #avance { + padding-bottom: 7px; + font-size: 15px; +} + +.checkbox__org { + font-size: 15px; + padding-bottom: 10px; + display: inline-block; +} + +#sender p, +#receiver p { + margin: 0; + margin-bottom: 10px; +} +#sender p .add-client-link, +#receiver p .add-client-link { + padding: 0 50px 0; +} + +#id_sender-autocomplete, +#id_receiver-autocomplete { + width: 570px; +} diff --git a/src/dokumentor/static/js/formset-events.js b/src/dokumentor/static/js/formset-events.js index a138c55..edccaa2 100644 --- a/src/dokumentor/static/js/formset-events.js +++ b/src/dokumentor/static/js/formset-events.js @@ -36,7 +36,6 @@ $(function() { if ($('#id_nds_value').val() !== '0') { $('#nds_method').show(); - $('#blockTotalNds').show(); $('#decryption').show(); } diff --git a/src/dokumentor/templates/docs/faktura/form.html b/src/dokumentor/templates/docs/faktura/form.html index 59dc04e..7c1f7bc 100644 --- a/src/dokumentor/templates/docs/faktura/form.html +++ b/src/dokumentor/templates/docs/faktura/form.html @@ -1,46 +1,41 @@ {% extends "docs/_base/base_form.html" %} - {% load my_tags %} {% block form_content %} -
{{ label }}
- {{ label1|default:'Он же' }} -{{ label2|default:'Стороннее лицо' }} - Не указывать +{#{{ label }}
#} +{# {{ label1|default:'Он же' }}#} +{{ label2|default:'Стороннее лицо' }} +{# Не указывать#} diff --git a/src/dokumentor/templates/docs/parts/form_field_client.html b/src/dokumentor/templates/docs/parts/form_field_client.html index 4707541..2295651 100644 --- a/src/dokumentor/templates/docs/parts/form_field_client.html +++ b/src/dokumentor/templates/docs/parts/form_field_client.html @@ -1,4 +1,4 @@ - {% comment %} +{% comment %} field - поле required - отметить, что поле обязательное? label - заголовок поля (по умолчанию, `Контрагент`) @@ -8,7 +8,9 @@ no_clear_after - не добавлять очистку float после бло