You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

335 lines
12 KiB

{# заглушка js #}
<script type="text/javascript">
$(document).ready(function() {
{# console.log('-----','stab js');#}
$('tr.plat_form').formset({
prefix: '{{ pformset.prefix }}',
formCssClass: 'plat_dynamic-form'
});
$('tr.row_tbl_items').formset({
prefix: '{{ formset.prefix }}',
formCssClass: 'dynamic-form'
});
// units
$('body').on('selectChoice change', '.units input', function(e, choice, autocomplete) {
var name_input = $(this);
var code_input = name_input.closest('.row_tbl_items').find('.units_kod input');
if (choice) {
//console.log(choice.data());
name_input.val(choice.data('name')); // short name
code_input.val(choice.data('code'));
name_input.css('color', 'black')
}
else {
//console.log(choice, 'No choice!');
code_input.val('-');
name_input.css('color', 'red')
}
});
// country
$('body').on('selectChoice change', '.country_name input', function(e, choice, autocomplete) {
var name_input = $(this);
var code_input = name_input.closest('.row_tbl_items').find('.country_code input');
if (choice) {
//console.log(choice.data());
code_input.val(choice.data('code'));
name_input.css('color', 'black')
}
else {
//console.log(choice, 'No choice!');
code_input.val('-');
name_input.css('color', 'red')
}
});
/* проверяем видимость блока */
var check_vis = function (block){
if (block.is(":visible")){block.hide();
} else{block.show()}
};
var add_block = $('.add-client-link'), // блок с кнопкой "Добавить контрагента"
client_block = $('#id_client'),
senderBlock = $('#id_sender'),
receiverBlock = $('#id_receiver');
// прячем кнопку добавить контрагента если он уже есть в документе
if (client_block.val()){
check_vis(add_block);
} else {}
senderBlock.on('change', function () {
console.log('change senderBlock');
add_block = $(this).parent().siblings('.add-client-link');
check_vis(add_block);
});
receiverBlock.on('change', function () {
console.log('change receiverBlock');
add_block = $(this).parent().siblings('.add-client-link');
check_vis(add_block);
});
// отрабатываем изменение в блоке добавления контрагента
// как я понимаю основной блок на поиск и вывод "инвойсов" для автодобавления контрагента
client_block.on('change', function() {
add_block = $(this).parent().siblings('.add-client-link');
check_vis(add_block);
var client_id = $(this).val();
if (client_id) {
$.get('/my/docs/ajax_get_invoices/' + client_id, function(data) {
if($('*').is('#id_invoice')) {
$.isEmptyObject(data) ? displayInvoiceBlock(false): displayInvoiceBlock(true);
var select = $('#id_invoice');
if(select.prop) {
var options = select.prop('options');
}
else {
var options = select.attr('options');
}
$('option', select).remove();
options[options.length] = new Option('-------', '');
$.each(data, function(val, text) {
options[options.length] = new Option(text, val);
});
select.prop('selectedIndex', 0);
}
})
} else {
displayInvoiceBlock(false);
// TODO: need confirm delete records
confirmChangeDataPromise(getTableInputs()).then(function (answer) {
if (answer) {
updateTable();
}
}) ;
}
});
// block nds method
$('#id_nds_value').on('change',function () {
console.log($('#id_nds_value').val());
if ($('#id_nds_value').val() > 0) {
$('#nds_method').show();
$('#blockTotalNds').show();
} else {
$('#nds_method').hide();
$('#decryption').hide();
$('#blockTotalNds').hide();
}
});
$('#id_invoice').on('change', function() {
var invoice_id = $(this).val();
//console.log(invoice_id);
if (invoice_id) {
// TODO: needed loader 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) {
//console.log('===================');
var items = JSON.parse(data);
//console.log(items);
$.each(items, function(index, item){
var name = item['fields']['name'];
var units = item['fields']['units'];
var qty = item['fields']['qty'];
var price = item['fields']['price'];
var total_price = item['fields']['total_price'];
$('#tbl_items a.add-row').trigger('click');
var $last_row = $('.row_tbl_items:visible').last();
$last_row.find('.name input').val(name);
$last_row.find('.units input').val(units);
$last_row.find('.qty input').val(qty);
$last_row.find('.price input').val(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){
if (data['val']) {
$last_row.find('.units_kod input').val(data['val']);
}
});
})
})
} else {
updateTable();
}
});
var toggle_sender = function(client_type) {
console.log(client_type);
var sender_val = $('input:checkbox[name=' + client_type + '_group]:checked', '#doc-form').val();
if (sender_val == 'another') {
$('#' + client_type).show()
} else {
$('#' + client_type).hide();
if ($('#' + client_type + ' span.remove')[0].style.display === 'inline-block') {
$('#' + client_type + ' span.remove')[0].click();
}
}
};
if (jQuery.contains(document, $('#sender')[0])) {
$.each(['sender', 'receiver'], function(i, client_type){
toggle_sender(client_type);
$('input:checkbox[name=' + client_type + '_group]').change(function(){
toggle_sender(client_type);
})
});
}
if ($('#id_fixes').is(':checked')){
$('#fix_block').show();
} else {
$('#fix_block').hide();
}
if ($('#id_government').is(':checked')){
$('#government_block').show();
} else {
$('#government_block').hide();
}
if ($('#id_avance').is(':checked')){
$('#avance_block').show();
} else {
$('#avance_block').hide();
}
$('#id_fixes').change(function(){
$('#fix_block').toggle();
$('#id_fix_doc_num').val('1');
$('#id_fix_doc_date').val('');
});
$('#id_avance').change(function(){
$('#avance_block').toggle();
$('#plat_doc_num').val('');
$('#plat_doc_date').val('');
});
$('#id_government').change(function(){
$('#government_block').toggle();
$('#id_government_description').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>