meckup factura

prod
Dmitriy Shesterkin 9 years ago
parent 13a4817794
commit 217fec134b
  1. 1
      requirements/base.txt
  2. 4
      src/docs/forms/aktrabot.py
  3. 29
      src/docs/forms/base_forms.py
  4. 29
      src/docs/forms/faktura.py
  5. 43
      src/docs/models/faktura.py
  6. 3
      src/docs/views/base_views.py
  7. 28
      src/dokumentor/static/css/style.css
  8. 1
      src/dokumentor/static/js/formset-events.js
  9. 45
      src/dokumentor/templates/docs/faktura/form.html
  10. 8
      src/dokumentor/templates/docs/parts/form_client_choices.html
  11. 4
      src/dokumentor/templates/docs/parts/form_field_client.html
  12. 5
      src/dokumentor/templates/docs/parts/form_field_receiver.html
  13. 4
      src/dokumentor/templates/docs/parts/form_field_sender.html
  14. 7
      src/dokumentor/templates/docs/stub_js.html
  15. 4
      tox.ini

@ -71,3 +71,4 @@ django-redis==4.8.0
redis==2.10.5 redis==2.10.5
trans==2.1.0 trans==2.1.0
python-decouple==3.0 python-decouple==3.0
flake8==3.2.1

@ -31,7 +31,6 @@ class AktRabotForm(BaseModelForm):
class AktRabotAdminForm(AktRabotForm): class AktRabotAdminForm(AktRabotForm):
"""Форма редактирования акта выполн. работ - для админки.""" """Форма редактирования акта выполн. работ - для админки."""
class Meta(AktRabotForm.Meta): class Meta(AktRabotForm.Meta):
# fields = None
exclude = () exclude = ()
_textarea = forms.Textarea(attrs={'cols': 80, 'rows': 3}) _textarea = forms.Textarea(attrs={'cols': 80, 'rows': 3})
widgets = { widgets = {
@ -39,7 +38,8 @@ class AktRabotAdminForm(AktRabotForm):
} }
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
# обязательно нужно вызывать родительский __init__ и передавать ему None вместо user - иначе глюки ! # обязательно нужно вызывать родительский __init__
# и передавать ему None вместо user - иначе глюки !
super(AktRabotAdminForm, self).__init__(None, *args, **kwargs) super(AktRabotAdminForm, self).__init__(None, *args, **kwargs)

@ -14,18 +14,25 @@ class BaseModelForm(MyBaseModelForm):
Добавляет к методу __init__ обязательный атрибут user. Добавляет к методу __init__ обязательный атрибут user.
""" """
# Список полей, у которых нужно настроить выборку контрагентов так, чтобы попадали __только__ контрагенты данного # Список полей, у которых нужно настроить выборку контрагентов
# пользователя. Если же пользователь никак не был задан - селекты будут пустыми! Если в форме есть поле client, # так, чтобы попадали __только__ контрагенты данного
# пользователя. Если же пользователь никак не был задан - селекты
# будут пустыми! Если в форме есть поле client,
# то оно настраивается автоматически. # то оно настраивается автоматически.
client = ModelChoiceField(Client.objects.all(), label=u'клиент', required=True, client = ModelChoiceField(
widget=autocomplete_light.ChoiceWidget('ACClient')) Client.objects.all(),
label='клиент',
required=True,
widget=autocomplete_light.ChoiceWidget('ACClient')
)
adjust_client_fields = [] adjust_client_fields = []
def __init__(self, user, *args, **kwargs): def __init__(self, user, *args, **kwargs):
super(BaseModelForm, self).__init__(*args, **kwargs) super(BaseModelForm, self).__init__(*args, **kwargs)
self._user = user self._user = user
# Если передали user=None, то попробовать взять user из kwargs['instance'], а потом из self.data # Если передали user=None, то попробовать взять
# user из kwargs['instance'], а потом из self.data
if not self._user: if not self._user:
try: try:
self._user = getattr(kwargs.get('instance'), 'user') self._user = getattr(kwargs.get('instance'), 'user')
@ -43,14 +50,17 @@ class BaseModelForm(MyBaseModelForm):
if f.get('fix_doc_date'): if f.get('fix_doc_date'):
f['fix_doc_date'].widget.attrs['class'] = 'has-datepicker' f['fix_doc_date'].widget.attrs['class'] = 'has-datepicker'
# Если в форме есть поле bank_account, настроить связь с BankAccount: чтобы можно было выбрать __только__ # Если в форме есть поле bank_account, настроить связь
# расчетные счета данного пользователя. Также убрать пустой вариант из селекта. # с BankAccount: чтобы можно было выбрать __только__
# расчетные счета данного пользователя. Также убрать
# пустой вариант из селекта.
if 'bank_account' in f: if 'bank_account' in f:
user_accounts = BankAccount.objects.get_all(self._user.profile) user_accounts = BankAccount.objects.get_all(self._user.profile)
f['bank_account'].queryset = user_accounts f['bank_account'].queryset = user_accounts
f['bank_account'].empty_label = None f['bank_account'].empty_label = None
# Если в форме есть поле client, настроить связь с Client: чтобы можно было выбрать __только__ # Если в форме есть поле client, настроить связь с Client: чтобы
# можно было выбрать __только__
# контрагентов данного пользователя. # контрагентов данного пользователя.
if 'invoice' in f: if 'invoice' in f:
user_invoices = Invoice.objects.filter(company=self._company) user_invoices = Invoice.objects.filter(company=self._company)
@ -60,6 +70,9 @@ class BaseModelForm(MyBaseModelForm):
user_clients = Client.objects.filter(company=self._company) user_clients = Client.objects.filter(company=self._company)
f['client'].queryset = user_clients f['client'].queryset = user_clients
if 'currency' in f:
f['currency'].initial = 3
# Настроить связь других полей с контрагентами. # Настроить связь других полей с контрагентами.
self._adjust_clients() self._adjust_clients()

@ -11,19 +11,26 @@ from customer.models import Client
class FakturaForm(BaseModelForm): class FakturaForm(BaseModelForm):
"""Форма редактирования фактуры.""" """Форма редактирования фактуры."""
sender = forms.ModelChoiceField(Client.objects.all(), label=u'клиент', required=False, sender = forms.ModelChoiceField(
widget=autocomplete_light.ChoiceWidget('ACClient')) Client.objects.all(),
receiver = forms.ModelChoiceField(Client.objects.all(), label=u'клиент', required=False, label='клиент',
widget=autocomplete_light.ChoiceWidget('ACClient')) required=False,
widget=autocomplete_light.ChoiceWidget('ACClient')
)
receiver = forms.ModelChoiceField(
Client.objects.all(),
label='клиент',
required=False,
widget=autocomplete_light.ChoiceWidget('ACClient')
)
adjust_client_fields = [] adjust_client_fields = []
class Meta: class Meta:
model = Faktura model = Faktura
fields = ( fields = (
'doc_num', 'doc_num',
'doc_date', 'doc_date',
'plat_doc_num',
'plat_doc_date',
'fix_doc_num', 'fix_doc_num',
'fix_doc_date', 'fix_doc_date',
'client', 'client',
@ -42,7 +49,6 @@ class FakturaForm(BaseModelForm):
_textarea = forms.Textarea(attrs={'cols': 80, 'rows': 3}) _textarea = forms.Textarea(attrs={'cols': 80, 'rows': 3})
widgets = { widgets = {
'doc_text': _textarea, 'doc_text': _textarea,
'currency': autocomplete_light.ChoiceWidget('ACCurrency'),
'nds_method': forms.RadioSelect() 'nds_method': forms.RadioSelect()
} }
@ -58,13 +64,17 @@ class FakturaAdminForm(FakturaForm):
} }
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
# обязательно нужно вызывать родительский __init__ и передавать ему None вместо user - иначе глюки ! # обязательно нужно вызывать родительский __init__
# и передавать ему None вместо user - иначе глюки !
super(FakturaAdminForm, self).__init__(None, *args, **kwargs) super(FakturaAdminForm, self).__init__(None, *args, **kwargs)
class FakturaItemForm(MyBaseModelForm): class FakturaItemForm(MyBaseModelForm):
"""Форма редактирования табличной части фактуры.""" """Форма редактирования табличной части фактуры."""
country_name = forms.CharField(widget=autocomplete_light.TextWidget('ACCountry'),) country_name = forms.CharField(
widget=autocomplete_light.TextWidget('ACCountry')
)
class Meta: class Meta:
model = FakturaItem model = FakturaItem
exclude = ['parent'] exclude = ['parent']
@ -75,4 +85,3 @@ class FakturaItemAdminForm(FakturaItemForm):
"""Форма редактирования табличной части фактуры - для админки.""" """Форма редактирования табличной части фактуры - для админки."""
class Meta(FakturaItemForm.Meta): class Meta(FakturaItemForm.Meta):
exclude = None exclude = None

@ -3,7 +3,7 @@ from django.db import models
from customer.models import Client from customer.models import Client
from docs.models.base_models import BaseInvoiceModel, BaseItemInvoiceModel 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.mixins import SignedStatusFieldMixin, InvoiceFieldMixin
from docs.models.linked_docs_mixin import LinkedDocsMixin from docs.models.linked_docs_mixin import LinkedDocsMixin
@ -15,9 +15,26 @@ class Faktura(BaseInvoiceModel, SignedStatusFieldMixin, InvoiceFieldMixin, Linke
avance = models.BooleanField(u'аванс', default=False) avance = models.BooleanField(u'аванс', default=False)
currency = models.ForeignKey(Currency, verbose_name=u'валюта', null=True) currency = models.ForeignKey(Currency, verbose_name=u'валюта', null=True)
user_is_sender = models.BooleanField(u'пользователь - отправитель', default=False) user_is_sender = models.BooleanField(u'пользователь - отправитель', default=False)
sender = models.ForeignKey(Client, related_name='sender_fakturas', blank=True, null=True, verbose_name=u'Отправитель') sender = models.ForeignKey(
receiver = models.ForeignKey(Client, related_name='receiver_fakturas', blank=True, null=True, verbose_name=u'Получатель') Client,
plat_doc_num = models.CharField(u'Номер платёжного документа', max_length=30, blank=True, default='') 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) plat_doc_date = models.DateField('Дата платёжного документа', blank=True, null=True)
fix_doc_num = models.PositiveIntegerField(u'Номер исправления', null=True, blank=True) fix_doc_num = models.PositiveIntegerField(u'Номер исправления', null=True, blank=True)
fix_doc_date = models.DateField('Дата исправления', blank=True, null=True) fix_doc_date = models.DateField('Дата исправления', blank=True, null=True)
@ -37,7 +54,6 @@ class Faktura(BaseInvoiceModel, SignedStatusFieldMixin, InvoiceFieldMixin, Linke
"""Получатель и адрес """Получатель и адрес
""" """
if self.receiver: if self.receiver:
#return self.user
return '%s, %s' % (self.receiver.name, self.receiver.address) return '%s, %s' % (self.receiver.name, self.receiver.address)
else: else:
return u'' return u''
@ -50,15 +66,24 @@ class Faktura(BaseInvoiceModel, SignedStatusFieldMixin, InvoiceFieldMixin, Linke
class FakturaItem(BaseItemInvoiceModel): 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') parent = models.ForeignKey(Faktura, related_name='faktura_items')
country_code = models.CharField(u'Код страны', max_length=10, blank=True, default=u'-') country_code = models.CharField(u'Код страны', max_length=10, blank=True, default=u'-')
country_name = models.CharField(u'Название страны', max_length=256) country_name = models.CharField(u'Название страны', max_length=256)
gtd = models.CharField(u'Основание', max_length=256, blank=True, default='') gtd = models.CharField(u'Основание', max_length=256, blank=True, default='')
ntd = models.CharField(u'Номер транспортной декларации', max_length=256, blank=True, default='') ntd = models.CharField(
#measure = models.ForeignKey(Measure, related_name='m_faktura_items') u'Номер транспортной декларации',
max_length=256,
blank=True,
default=''
)
class Meta(BaseItemInvoiceModel.Meta): class Meta(BaseItemInvoiceModel.Meta):
verbose_name = u'Табл. часть фактуры' verbose_name = u'Табл. часть фактуры'
verbose_name_plural = u'Табл. части фактур' verbose_name_plural = u'Табл. части фактур'
app_label="docs" app_label = "docs"

@ -804,7 +804,8 @@ class BaseItemsViews(BaseViews):
new_obj.receiver = new_obj.client new_obj.receiver = new_obj.client
elif receiver == 'nobody': elif receiver == 'nobody':
new_obj.receiver = None new_obj.receiver = None
#
#
sender = form.data.get('sender_group', None) sender = form.data.get('sender_group', None)
if sender == 'he_is': if sender == 'he_is':
new_obj.user_is_sender = True new_obj.user_is_sender = True

@ -860,3 +860,31 @@ input[type=number] {
.nds_block__inline { .nds_block__inline {
display: inline-block; 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;
}

@ -36,7 +36,6 @@ $(function() {
if ($('#id_nds_value').val() !== '0') { if ($('#id_nds_value').val() !== '0') {
$('#nds_method').show(); $('#nds_method').show();
$('#blockTotalNds').show();
$('#decryption').show(); $('#decryption').show();
} }

@ -1,46 +1,41 @@
{% extends "docs/_base/base_form.html" %} {% extends "docs/_base/base_form.html" %}
{% load my_tags %} {% load my_tags %}
{% block form_content %} {% block form_content %}
<div class="block" style="border-bottom: 1px solid #777; padding: 0 20px 15px 0; margin-top: 0;"> <div class="block" style="border-bottom: 1px solid #777; padding: 0 20px 5px 0; margin-top: 0;">
{% include 'docs/parts/form_field.html' with field=form.doc_num id="doc_num" classes="left" label="Номер" required="True" no_clear_after="True" %} {% include 'docs/parts/form_field.html' with field=form.doc_num id="doc_num" classes="left" label="Номер" required="True" no_clear_after="True" %}
{% include 'docs/parts/form_field.html' with field=form.doc_date id="doc_date" classes="left" label="Дата создания" required="True" no_clear_after="True"%} {% include 'docs/parts/form_field.html' with field=form.doc_date id="doc_date" classes="left" label="Дата создания" required="True" no_clear_after="True"%}
{% include 'docs/parts/form_field.html' with field=form.bank_account %} {% include 'docs/parts/form_field.html' with field=form.bank_account %}
</div> <div id="fixes"><input id="id_fixes" name="fixes" type="checkbox"> Исправления</div>
<div class="block" style="border-bottom: 1px solid #777; padding: 0 20px 15px 0; margin-top: 0;"> <div id='fix_block' class="block{% if not form.fixes.value %} hidden{% endif %}" style="border-bottom: 1px solid #777; padding: 0 20px 15px 0; margin-top: 0;">
{% include 'docs/parts/form_field.html' with field=form.plat_doc_num id="plat_doc_num" classes="left" label="Номер платёжного документа" required="True" no_clear_after="True" %} {% include 'docs/parts/form_field.html' with field=form.fix_doc_num id="fix_doc_num" classes="left" label="Номер исправления" required="True" no_clear_after="True" %}
{% include 'docs/parts/form_field.html' with field=form.plat_doc_date id="plat_doc_date" classes="left" label="Дата платёжного документа" required="True" %} {% include 'docs/parts/form_field.html' with field=form.fix_doc_date id="fix_doc_date" classes="left" label="Дата исправления" required="True" %}
</div>
<div id="avance"><input id="id_avance" name="avance" type="checkbox"> Аванс</div>
{% include 'docs/parts/form_field.html' with field=form.currency id="currency" classes="field" label="Валюта документа " %}
</div> </div>
<div class="block" style="border-bottom: 1px solid #777; padding: 0 20px 5px 0;"> <div class="block" style="border-bottom: 1px solid #777; padding: 0 20px 5px 0;">
{% include 'docs/parts/form_field.html' with field=form.fixes id="fixes" label="Исправления" no_clear_after="True" label_inline="True" %} {% include 'docs/parts/form_field_client.html' with field=form.client required="True" is_ajax="True" label="Покупатель" %}
<div id='fix_block' class="block{% if not form.fixes.value %} hidden{% endif %}" style="border-bottom: 1px solid #777; padding: 0 20px 15px 0; margin-top: 0;">
{% include 'docs/parts/form_field.html' with field=form.fix_doc_num id="fix_doc_num" classes="left" label="Номер исправления" required="True" no_clear_after="True" %}
{% include 'docs/parts/form_field.html' with field=form.fix_doc_date id="fix_doc_date" classes="left" label="Дата исправления" required="True" %}
</div>
{% include 'docs/parts/form_field.html' with field=form.avance id="avance" label="Аванс" no_clear_after="True" label_inline="True" %}
{% include 'docs/parts/form_field_client.html' with field=form.client required="True" is_ajax="True" %}
{% include 'docs/parts/form_field.html' with field=form.invoice id="invoice" classes="field hidden" label="Создать счёт-фактуру по счёту" %} {% include 'docs/parts/form_field.html' with field=form.invoice id="invoice" classes="field hidden" label="Создать счёт-фактуру по счёту" %}
{% include 'docs/parts/form_field.html' with field=form.currency id="currency" classes="field" label="Валюта" %}
{% include 'docs/parts/form_field_sender.html' with field=form.sender id="sender" classes="field" label="Отправитель" %}
{% include 'docs/parts/form_field_receiver.html' with field=form.receiver id="receiver" classes="field" label="Получатель" %}
</div>
<div class="block" style="border-bottom: 1px solid #777; padding: 0 20px 5px 0;"> {% include 'docs/parts/form_field_sender.html' with field=form.sender id="sender" %}
{% include 'docs/parts/form_field.html' with field=form.doc_reason id="doc_reason" classes="field" label="Основание" %} {% include 'docs/parts/form_field_receiver.html' with field=form.receiver id="receiver" %}
</div> </div>
<div class="block" style="border-bottom: 1px solid #777; padding: 0 20px 15px 0;"> <div class="block" style="border-bottom: 1px solid #777; padding: 0 20px 5px 0;">
{# {% include 'docs/parts/form_field.html' with field=form.doc_reason id="doc_reason" classes="field" label="Основание" %}#}
{% include 'docs/parts/form_field.html' with field=form.nds_value id="nds_value" classes="left nds_block__inline" label="НДС" no_clear_after="True" %} {% include 'docs/parts/form_field.html' with field=form.nds_value id="nds_value" classes="left nds_block__inline" label="НДС" no_clear_after="True" %}
{% include 'docs/parts/form_field.html' with field=form.nds_method id="nds_method" classes="left nds-method hidden" no_clear_after="True" %} {% include 'docs/parts/form_field.html' with field=form.nds_method id="nds_method" classes="left nds-method hidden" no_clear_after="True" %}
<div class="clear"></div>
</div>
<div class="block" style="border-bottom: 1px solid #777; padding: 0 20px 15px 0;">
{% if formset %} {% if formset %}
{% include 'docs/faktura/form_tbl_items.html' %} {% include 'docs/faktura/form_tbl_items.html' %}
{% endif %} {% endif %}
</div> </div>
{% endblock form_content %}
{% endblock %} {% block js %}{% endblock js %}
{% block js %}
{% endblock %}

@ -1,4 +1,4 @@
<p>{{ label }}</p> {#<p>{{ label }}</p>#}
<input type="radio" name="{{ client_group|default:'client_group' }}" value="he_is"{% if default == 'he_is' %} checked{% endif %}> {{ label1|default:'Он же' }} {#<input type="radio" name="{{ client_group|default:'client_group' }}" value="he_is"{% if default == 'he_is' %} checked{% endif %}> {{ label1|default:'Он же' }}#}
<input type="radio" name="{{ client_group|default:'client_group' }}" value="another"{% if default == 'another' %} checked{% endif %}>{{ label2|default:'Стороннее лицо' }} <input type="checkbox" name="{{ client_group|default:'client_group' }}" value="another"{% if default == 'another' %} checked{% endif %}><span class="checkbox__org">{{ label2|default:'Стороннее лицо' }}</span>
<input type="radio" name="{{ client_group|default:'client_group' }}" value="nobody"{% if default == 'nobody' %} checked{% endif %}> Не указывать {#<input type="radio" name="{{ client_group|default:'client_group' }}" value="nobody"{% if default == 'nobody' %} checked{% endif %}> Не указывать#}

@ -1,4 +1,4 @@
{% comment %} {% comment %}
field - поле field - поле
required - отметить, что поле обязательное? required - отметить, что поле обязательное?
label - заголовок поля (по умолчанию, `Контрагент`) label - заголовок поля (по умолчанию, `Контрагент`)
@ -8,7 +8,9 @@ no_clear_after - не добавлять очистку float после бло
<div id={{ id|default:"client" }} class="field"> <div id={{ id|default:"client" }} class="field">
{% if label != ' ' %}
{{ label|default:"Контрагент" }}:{% if required %} <span class="required">*</span>{% endif %} {{ label|default:"Контрагент" }}:{% if required %} <span class="required">*</span>{% endif %}
{% endif %}
<p> <p>
{{ field }} {{ field }}
<a class="client add-client-link" href="{% url 'customer_clients_add' %}" title="Добавить контрагента"> <a class="client add-client-link" href="{% url 'customer_clients_add' %}" title="Добавить контрагента">

@ -1,3 +1,2 @@
{% include 'docs/parts/form_client_choices.html' with client_group="receiver_group" id="receiver_choices" classes="field" label="Получатель" default=receiver_choice %} {% include 'docs/parts/form_client_choices.html' with client_group="receiver_group" id="receiver_choices" classes="field" label2='Грузополучатель - стороннее лицо (не покупатель)' default=receiver_choice %}
{% include 'docs/parts/form_field_client.html' with field=form.receiver id="receiver" classes="field" label=' ' %}
{% include 'docs/parts/form_field_client.html' with field=form.receiver id="receiver" classes="field" label="Получатель" %}

@ -1,2 +1,2 @@
{% include 'docs/parts/form_client_choices.html' with client_group="sender_group" id="sender_choices" classes="field" label="Отправитель" label1='Подставить мои данные' default=sender_choice %} {% include 'docs/parts/form_client_choices.html' with client_group="sender_group" id="sender_choices" classes="field" label2='Грузоотправитель - стороннее лицо (не моя компания)' default=sender_choice %}
{% include 'docs/parts/form_field_client.html' with field=form.sender id="sender" classes="field" label="Отправитель" %} {% include 'docs/parts/form_field_client.html' with field=form.sender id="sender" classes="field" label=" " %}

@ -168,7 +168,10 @@
}); });
var toggle_sender = function(client_type) { var toggle_sender = function(client_type) {
var sender_val = $('input:radio[name=' + client_type + '_group]:checked', '#doc-form').val();
console.log(client_type);
var sender_val = $('input:checkbox[name=' + client_type + '_group]:checked', '#doc-form').val();
if (sender_val == 'another') { if (sender_val == 'another') {
$('#' + client_type).show() $('#' + client_type).show()
} else { } else {
@ -178,7 +181,7 @@
$.each(['sender', 'receiver'], function(i, client_type){ $.each(['sender', 'receiver'], function(i, client_type){
toggle_sender(client_type); toggle_sender(client_type);
$('input:radio[name=' + client_type + '_group]').change(function(){ $('input:checkbox[name=' + client_type + '_group]').change(function(){
toggle_sender(client_type); toggle_sender(client_type);
}) })
}); });

@ -0,0 +1,4 @@
[flake8]
ignore = F403
max-line-length = 120
exclude = ./venv/*,*/migrations/*, ./node_modules/*
Loading…
Cancel
Save