some task, add js logic on show/hide basis

feature/docker
Dmitriy Shesterkin 9 years ago
parent 08a70243c6
commit 9639465a1b
  1. 18
      src/customer/views/clients_ajax.py
  2. 4
      src/docs/urls.py
  3. 7
      src/dokumentor/static/css/style.css
  4. 34
      src/dokumentor/static/js/dialogs.js
  5. 2
      src/dokumentor/templates/base.html
  6. 4
      src/dokumentor/templates/customer/clients/list_item.html
  7. 26
      src/dokumentor/templates/docs/aktrabot/form.html
  8. 148
      src/dokumentor/templates/docs/stub_js.html

@ -30,7 +30,8 @@ def clients_get_ajax(request, id):
except AttributeError: except AttributeError:
fields_list = [] fields_list = []
client = get_object_or_404(models.Client.objects.values(*fields_list), pk=id, company=request.user.profile) client = get_object_or_404(models.Client.objects.values(*fields_list), pk=id,
company=request.user.profile)
return HttpResponse(json.dumps(client), content_type='application/json') return HttpResponse(json.dumps(client), content_type='application/json')
@ -52,9 +53,16 @@ def clients_add_ajax(request):
if form.is_valid(): if form.is_valid():
new_client = form.save(commit=False) new_client = form.save(commit=False)
new_client.company = request.user.profile new_client.company = request.user.profile
new_client_str = new_client.name # TODO : to common function with __str__
if new_client.name_short_dadata:
new_client_str = '{}, {}'.format(new_client.name_short_dadata,
new_client.name_short_self)
else:
new_client_str = '{}, ИНН {}'.format(new_client.name, new_client.inn or 'не указан')
new_client.save() new_client.save()
new_client_id = new_client.id new_client_id = new_client.id
# import ipdb;ipdb.set_trace()
html = render_to_string('customer/clients/list_item.html', html = render_to_string('customer/clients/list_item.html',
{'obj': new_client}, RequestContext(request)) {'obj': new_client}, RequestContext(request))
@ -65,7 +73,7 @@ def clients_add_ajax(request):
data = { data = {
'success': form.is_valid(), 'success': form.is_valid(),
'field_errors': form.errors, 'field_errors': form.errors,
'form_errors': non_field_errors, 'form_errors': non_field_errors, # ошибки формы
'reload': False, 'reload': False,
'id': new_client_id, 'id': new_client_id,
'name': new_client_str, 'name': new_client_str,
@ -141,7 +149,9 @@ def clients_delete_ajax(request, id):
del_id = id del_id = id
else: else:
success = True success = True
message = {'title': u'Инфо', 'msg': u'Контрагент не удалён. Есть выписанные документы: %s.' % ','.join(client_docs)} message = {'title': u'Инфо',
'msg': u'Контрагент не удалён. Есть выписанные документы: %s.' % ','.join(
client_docs)}
del_id = None del_id = None
data = { data = {

@ -71,10 +71,10 @@ for name, klass in klasses:
urlpatterns += patterns('docs.views', urlpatterns += patterns('docs.views',
# создать по Счету -> Акт вып. работ # создать по Счету -> Акт вып. работ
url(r'^%s/add/by/invoice/(?P<invoice_id>\d+)/$' % 'aktrabot', getview, url(r'^%s/add/by/invoice/(?P<invoice_id>\d+)/$' % 'aktrabot', getview,
{'klass': AktRabotViews, 'oper': 'add_by_invoice',}, name='docs_%s_add_by_invoice' % 'aktrabot'), {'klass': AktRabotViews, 'oper': 'add_by_invoice'}, name='docs_%s_add_by_invoice' % 'aktrabot'),
# создать по Счету -> Накладную # создать по Счету -> Накладную
url(r'^%s/add/by/invoice/(?P<invoice_id>\d+)/$' % 'nakladn', getview, url(r'^%s/add/by/invoice/(?P<invoice_id>\d+)/$' % 'nakladn', getview,
{'klass': NakladnViews, 'oper': 'add_by_invoice',}, name='docs_%s_add_by_invoice' % 'nakladn'), {'klass': NakladnViews, 'oper': 'add_by_invoice'}, name='docs_%s_add_by_invoice' % 'nakladn'),
# создать по Счету -> Счёт-фактуру # создать по Счету -> Счёт-фактуру
url(r'^%s/add/by/invoice/(?P<invoice_id>\d+)/$' % 'faktura', getview, {'klass': FakturaViews, 'oper': 'add_by_invoice',}, url(r'^%s/add/by/invoice/(?P<invoice_id>\d+)/$' % 'faktura', getview, {'klass': FakturaViews, 'oper': 'add_by_invoice',},
name='docs_%s_add_by_invoice' % 'faktura'), name='docs_%s_add_by_invoice' % 'faktura'),

@ -787,3 +787,10 @@ P.help-block {
color: gray; color: gray;
font-size: 11px; font-size: 11px;
} }
/* Turn Off Number Input Spinners */
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}

@ -2,6 +2,21 @@ $(document).ready(function() {
var dlg_msg = $('#dialog-message'); var dlg_msg = $('#dialog-message');
var dlg_django_msg = $('#django-message'); var dlg_django_msg = $('#django-message');
function clients_edit_del_update() {
var edit_form = $('#client-edit-form');
if (edit_form) {
setup_client_edit_form(edit_form);
setup_client_edit_links(edit_form, true);
setup_client_add_link(edit_form, true);
}
var delete_form = $('#client-delete-form');
if (delete_form) {
setup_client_edit_form(delete_form);
setup_client_delete_links(delete_form, true);
}
}
$('form', '#dialogs').each(function() { $('form', '#dialogs').each(function() {
var form = $(this); var form = $(this);
@ -21,18 +36,23 @@ $(document).ready(function() {
/*beforeSend: function() { /*beforeSend: function() {
$('.errors-layout', form).html('').hide(); $('.errors-layout', form).html('').hide();
},*/ },*/
// add client
success: function(data) { success: function(data) {
clear_form_errors(form); clear_form_errors(form);
if (data.success) { if (data.success) {
// console.log('!!!!!!!!!!!!!!!!!!!'); // console.log('!!!!!!!!!!!!!!!!!!!');
// console.log(data); // console.log(data);
if (form[0].id == 'client-edit-form') { if (form[0].id == 'client-edit-form') {
$('#id_client_text').hide(); $('#id_client_text').hide();
$('#id_client-deck').html( $('#id_client-deck').html(
'<span class="div hilight" data-value='+ data.id + '<span class="hilight" data-value='+ data.id + '>' +
'><span class="remove div" style="display: inline;">X</span>' + data.name + '</span>'); '<span style="display:inline" class="remove">'+
' ' +
' ˣ' +
' </span>' + data.name + '</span>');
$('#id_client').html('<option selected="selected" value="'+ data.id +'"></option>'); $('#id_client').html('<option selected="selected" value="'+ data.id +'"></option>');
$('#id_client').trigger('change'); $('#id_client').trigger('change');
} }
@ -50,14 +70,18 @@ $(document).ready(function() {
} }
} }
if (data.action){ if (data.action){
// console.log(data.action);
if (data.action == 'client-add'){ if (data.action == 'client-add'){
$(data.row_html).insertAfter('#clients_header_row'); $(data.row_html).insertAfter('#clients_header_row');
window.clients_edit_del_update(); clients_edit_del_update();
$('table#clients').show(); $('table#clients').show();
var autocomplete = $('#id_client-autocomplete');
if (autocomplete.is(":visible")){autocomplete.hide()}
} }
if (data.action == 'client-edit'){ if (data.action == 'client-edit'){
$("tr#client_" + data.id).replaceWith(data.row_html); $("tr#client_" + data.id).replaceWith(data.row_html);
window.clients_edit_del_update(); clients_edit_del_update();
} }
if (data.action == 'client-delete'){ if (data.action == 'client-delete'){
$("tr#client_" + data.id).remove(); $("tr#client_" + data.id).remove();

@ -130,9 +130,7 @@
<script src="{% static 'js/lib/entertotab.js' %}"></script> <script src="{% static 'js/lib/entertotab.js' %}"></script>
<script src="{% static 'js/lib/jquery.cookie.js' %}"></script> <script src="{% static 'js/lib/jquery.cookie.js' %}"></script>
<script src="{% static 'js/lib/handlebars-v4.0.5.js' %}"></script> <script src="{% static 'js/lib/handlebars-v4.0.5.js' %}"></script>
<script src="{% static 'js/csrf.js' %}?ver={% file_version 'js/csrf.js' %}"></script> <script src="{% static 'js/csrf.js' %}?ver={% file_version 'js/csrf.js' %}"></script>
<script src="{% static 'js/commons.js' %}?ver={% file_version 'js/commons.js' %}"></script> <script src="{% static 'js/commons.js' %}?ver={% file_version 'js/commons.js' %}"></script>
<script src="{% static 'js/dialogs.js' %}?ver={% file_version 'js/dialogs.js' %}"></script> <script src="{% static 'js/dialogs.js' %}?ver={% file_version 'js/dialogs.js' %}"></script>
<script src="{% static 'js/callback.js' %}?ver={% file_version 'js/callback.js' %}"></script> <script src="{% static 'js/callback.js' %}?ver={% file_version 'js/callback.js' %}"></script>

@ -1,3 +1,5 @@
{% load static %}
<tr id='client_{{ obj.id }}'> <tr id='client_{{ obj.id }}'>
<td> <td>
<a class="client edit-link" href="{% url 'customer_clients_edit' obj.pk %}" title="Редактировать контрагента"> <a class="client edit-link" href="{% url 'customer_clients_edit' obj.pk %}" title="Редактировать контрагента">
@ -15,7 +17,7 @@
<td>{{ obj.contact_phone }}</td> <td>{{ obj.contact_phone }}</td>
<td class="center"> <td class="center">
<a class="client edit-link" href="{% url 'customer_clients_edit' obj.pk %}" title="Редактировать контрагента"> <a class="client edit-link" href="{% url 'customer_clients_edit' obj.pk %}" title="Редактировать контрагента">
<img src="{{ STATIC_URL }}img/sign-edit.png" alt="Редактировать" title="Редактировать контрагента" /> <img src="{% static 'img/sign-edit.png' %}" alt="Редактировать" title="Редактировать контрагента" />
</a> </a>
</td> </td>
<td class="center"> <td class="center">

@ -13,7 +13,7 @@
<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_client.html' with field=form.client required="True" is_ajax="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" label="Создать акт по счёту" %} {% include 'docs/parts/form_field.html' with field=form.invoice id="invoice" classes="field hidden" label="Создать акт по счёту" %}
</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 15px 0;">
@ -27,27 +27,3 @@
{% endblock %} {% endblock %}
{% block js %}
{% comment %}<script type="text/javascript">
{% include 'docs/_common_js/add_line_handler.js' %}
{% include 'docs/_common_js/calc_summa.js' %}
{% include 'docs/_common_js/calc_itogo.js' %}
function set_events() {
$("#tbl_items tr.row td.qty input").blur(calc_summa);
$("#tbl_items tr.row td.price input").blur(calc_summa);
$("#tbl_items tr.row td.qty input").blur(calc_itogo);
$("#tbl_items tr.row td.price input").blur(calc_itogo);
$("#tbl_items tr.row td.total_price input").blur(calc_itogo);
}
$(document).ready(function() {
EnterToTab.init(document.getElementById('aktrabot'), true);
$("#id_doc_date").datepicker({dateFormat:'dd.mm.yy'});
set_events();
calc_itogo();
add_line_handler();
});
</script>{% endcomment %}
{% endblock %}

@ -1,13 +1,14 @@
{# заглушка js #} {# заглушка js #}
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function() { $(document).ready(function() {
$('tr.plat_form').formset({ $('tr.plat_form').formset({
prefix: '{{ pformset.prefix }}', prefix: '{{ pformset.prefix }}',
formCssClass: 'plat_dynamic-form', formCssClass: 'plat_dynamic-form'
}); });
$('tr.row_tbl_items').formset({ $('tr.row_tbl_items').formset({
prefix: '{{ formset.prefix }}', prefix: '{{ formset.prefix }}',
formCssClass: 'dynamic-form', formCssClass: 'dynamic-form'
}); });
// units // units
@ -27,7 +28,6 @@
name_input.css('color', 'red') name_input.css('color', 'red')
} }
}); });
// country // country
$('body').on('selectChoice change', '.country_name input', function(e, choice, autocomplete) { $('body').on('selectChoice change', '.country_name input', function(e, choice, autocomplete) {
var name_input = $(this); var name_input = $(this);
@ -61,10 +61,20 @@
// отрабатываем изменение в блоке добавления контрагента // отрабатываем изменение в блоке добавления контрагента
// как я понимаю основной блок на поиск и вывод "инвойсов" для автодобавления контрагента // как я понимаю основной блок на поиск и вывод "инвойсов" для автодобавления контрагента
client_block.on('change', function() { client_block.on('change', function() {
{# console.log('change');#}
check_vis(add_block); check_vis(add_block);
var client_id = $(this).val(); var client_id = $(this).val();
if (client_id) {
$.get('/my/docs/ajax_get_invoices/' + client_id, function(data) { $.get('/my/docs/ajax_get_invoices/' + client_id, function(data) {
if($('*').is('#id_invoice')) {
$.isEmptyObject(data) ? displayInvoiceBlock(false): displayInvoiceBlock(true);
var select = $('#id_invoice'); var select = $('#id_invoice');
if(select.prop) { if(select.prop) {
var options = select.prop('options'); var options = select.prop('options');
} }
@ -72,35 +82,48 @@
var options = select.attr('options'); var options = select.attr('options');
} }
$('option', select).remove(); $('option', select).remove();
options[options.length] = new Option('-------', ''); options[options.length] = new Option('-------', '');
$.each(data, function(val, text) { $.each(data, function(val, text) {
options[options.length] = new Option(text, val); options[options.length] = new Option(text, val);
}); });
select.prop('selectedIndex', 0); select.prop('selectedIndex', 0);
}
}) })
} else {
displayInvoiceBlock(false);
// TODO: need confirm delete records
confirmChangeDataPromise(getTableInputs()).then(function (answer) {
if (answer) {
updateTable();
}
}) ; }) ;
}
});
$('#id_invoice').on('change', function() { $('#id_invoice').on('change', function() {
var invoice_id = $(this).val(); var invoice_id = $(this).val();
$.each($('.row_tbl_items'), function(index, item){
$(item).find('a.delete-row').trigger('click');
});
$.get('/my/docs/ajax_get_client_by_invoice/' + invoice_id, function(data) {
add_block.hide(); // прячем кнопку добавить
var client = data[0];
$('#id_client_text').hide();
$('#id_client-deck').html(
'<span class="div hilight" data-value='+ data[0] +
'><span class="remove div" style="display: inline;">X</span>' + data[1] + '</span>');
$('#id_client').html('<option selected="selected" value="'+ data[0] +'"></option>'); {# console.log(invoice_id);#}
if (invoice_id) {
// TODO: needed preloader or remade function
$.each($('.row_tbl_items'), function(index, item){
$(item).find('a.delete-row').trigger('click');
}); });
$.get('/my/docs/ajax_get_tbl_items/' + invoice_id, function(data) { $.get('/my/docs/ajax_get_tbl_items/' + invoice_id, function(data) {
//console.log('==================='); {# console.log('===================');#}
var items = JSON.parse(data); var items = JSON.parse(data);
{# console.log(items);#}
$.each(items, function(index, item){ $.each(items, function(index, item){
var name = item['fields']['name']; var name = item['fields']['name'];
var units = item['fields']['units']; var units = item['fields']['units'];
@ -114,6 +137,7 @@
$last_row.find('.qty input').val(qty); $last_row.find('.qty input').val(qty);
$last_row.find('.price input').val(price); $last_row.find('.price input').val(price);
$last_row.find('.total_price input').val(total_price); $last_row.find('.total_price input').val(total_price);
// TODO: need ajax function on backend
$.get('/my/docs/ajax_get_pair/Measure/name/code/' + units + '/', function(data){ $.get('/my/docs/ajax_get_pair/Measure/name/code/' + units + '/', function(data){
if (data['val']) { if (data['val']) {
$last_row.find('.units_kod input').val(data['val']); $last_row.find('.units_kod input').val(data['val']);
@ -121,6 +145,9 @@
}); });
}) })
}) })
} else {
updateTable();
}
}); });
var toggle_sender = function(client_type) { var toggle_sender = function(client_type) {
@ -144,10 +171,99 @@
} else { } else {
$('#fix_block').hide(); $('#fix_block').hide();
} }
$('#id_fixes').change(function(){ $('#id_fixes').change(function(){
$('#fix_block').toggle(); $('#fix_block').toggle();
$('#id_fix_doc_num').val('11'); $('#id_fix_doc_num').val('11');
$('#id_fix_doc_date').val(''); $('#id_fix_doc_date').val('');
}) });
function displayInvoiceBlock(visibly) {
var invoiceBlock = $('#invoice');
if ($('*').has(invoiceBlock)) {
(visibly) ? invoiceBlock.removeClass('hidden'): invoiceBlock.addClass('hidden');
}
}
function clearTableRow(tblItems) {
$.each(tblItems, function(index, item){
$(item).find('.name input').val('');
$(item).find('.units input').val('');
$(item).find('.qty input').val('');
$(item).find('.price input').val('');
$(item).find('.total_price input').val('');
});
}
function getTableInputs() {
return $('#tbl_items input:not(:hidden)').toArray();
}
function deleteTableRow(tblItems) {
$.each (tblItems, function(index, item){
$(item).find('a.delete-row').trigger('click');
});
}
function updateTable() {
var tblItems = $('.row_tbl_items');
if (tblItems.length < 2) {
clearTableRow(tblItems);
$('#tbl_items a.add-row').trigger('click');
}
if (tblItems.length === 2) {
clearTableRow(tblItems);
}
if (tblItems.length > 2) {
var firstAndSecondTblItems = tblItems.splice(0, 2);
clearTableRow(firstAndSecondTblItems);
deleteTableRow(tblItems);
}
}
// TODO: to common function
function confirmChangeDataPromise(inputArray) {
var dlg_msg = $('#dialog-message');
var emptyInput = true;
var defer = $.Deferred();
for (var i = inputArray.length - 1; i >= 0; --i) {
if (inputArray[i].value) {
emptyInput = false;
break;
}
}
if (!emptyInput) {
dlg_msg.dialog({
title: 'Удалить данные',
buttons:
{'Да':
function(){
defer.resolve(true);
$(this).dialog('close');
}, 'Нет':
function(){
defer.resolve(false);
$(this).dialog('close');
}
}
}).html('Имеются уже заполненные данные, удалить их?');
dlg_msg.dialog('open');
} else {
defer.resolve(true);
}
return defer.promise();
}
}); });
</script> </script>

Loading…
Cancel
Save